[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-92297":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":15,"stars7d":15,"stars30d":16,"stars90d":15,"forks30d":15,"starsTrendScore":15,"compositeScore":17,"rankGlobal":10,"rankLanguage":10,"license":10,"archived":18,"fork":18,"defaultBranch":19,"hasWiki":20,"hasPages":18,"topics":21,"createdAt":10,"pushedAt":10,"updatedAt":22,"readmeContent":23,"aiSummary":24,"trendingCount":15,"starSnapshotCount":15,"syncStatus":25,"lastSyncTime":26,"discoverSource":27},92297,"M365-Copilot2API","HEXUXIU\u002FM365-Copilot2API","HEXUXIU","Access M365 Copilot via CLI & OpenAI-compatible API","",null,"Python",60,15,51,0,7,41.31,false,"main",true,[],"2026-07-22 04:02:05","\u003Cdiv align=\"center\">\n\n# m365-copilot2api\n\n**将 Microsoft 365 Copilot 的 WebSocket 接口转换为 OpenAI 兼容 HTTP API**\n\n[![Python 3.10+](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fpython-3.10%2B-blue.svg)](https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F)\n[![License](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-Research%20Only-critical.svg)](#免责声明)\n[![Platform](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fplatform-Windows%20%7C%20Linux%20%7C%20macOS-informational.svg)]()\n[![Stars](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002FHEXUXIU\u002FM365-Copilot2API?style=social)](https:\u002F\u002Fgithub.com\u002FHEXUXIU\u002FM365-Copilot2API\u002Fstargazers)\n[![Forks](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fforks\u002FHEXUXIU\u002FM365-Copilot2API?style=social)](https:\u002F\u002Fgithub.com\u002FHEXUXIU\u002FM365-Copilot2API\u002Fforks)\n[![CI](https:\u002F\u002Fgithub.com\u002FHEXUXIU\u002FM365-Copilot2API\u002Fworkflows\u002FCI\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002FHEXUXIU\u002FM365-Copilot2API\u002Factions)\n\n[快速开始](#快速开始) · [CLI 使用](#cli-使用) · [API 端点](#api-端点) · [已知限制](#已知限制) · [免责声明](#免责声明)\n\n\u003C\u002Fdiv>\n\n---\n\n> ⚠️ **本项目仅用于学习和研究 Microsoft 365 Copilot 通信协议。** 使用即表示同意 [免责声明](#免责声明)。\n\n---\n\n## 这是什么\n\nM365 Copilot 的浏览器界面通过一个未公开的 SignalR WebSocket 与后端通信。本项目将这个 WebSocket 接口包装成标准的 HTTP API，让你能在终端或任何 OpenAI 兼容客户端中使用它。\n\n**已实现的**: 文本对话流式\u002F非流式输出、多轮上下文、session 续传\n\n **未实现的**: 图像生成、文件上传、代码解释器 — WebSocket 端点存在但本项目未对接\n\n---\n\n## 快速开始\n\n### 安装\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002FHEXUXIU\u002FM365-Copilot2API.git\ncd M365-Copilot2API\npip install -e .\n```\n\n### 配置\n\n**只需一步：** 运行向导，在浏览器中登录即可自动获取所有信息。\n\n```bash\nm365-copilot-setup\n```\n\n向导会自动打开浏览器，登录后自动提取并保存 Token。\n\n### 使用\n\n```bash\nm365-copilot \"你好\"                    # 提问\nm365-copilot -i                         # 交互模式（多轮）\nm365-copilot-server --port 8000         # 启动 HTTP API 服务\n```\n\n---\n\n## CLI 使用\n\n```bash\n# 指定语气 (实际都是 GPT-5，只是传给后端的 tone 参数不同)\nm365-copilot --model auto \"写一个快速排序\"      # 自动（默认）\nm365-copilot --model quick \"写一个快速排序\"     # 快速答复\n\n# 多轮交互模式\nm365-copilot -i\n\n# 其他模型\nm365-copilot --model reasoning \"999*999\"  # 深度推理模式\n```\n\n### 参数\n\n| 参数 | 说明 |\n|------|------|\n| `--model` | 语气: `auto`\u002F`quick`\u002F`reasoning` |\n| `--reasoning` | 同 `--model reasoning` |\n| `-i` | 交互模式，保留多轮上下文 |\n| `--no-stream` | 等待完整回复，而非逐字输出 |\n| `--list-models` | 列出所有可用模型标识 |\n| `--setup` | 运行配置向导 |\n\n---\n\n## API 服务\n\n```bash\nm365-copilot-server --port 8000\ncurl http:\u002F\u002F127.0.0.1:8000\u002Fv1\u002Fchat\u002Fcompletions \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"model\":\"auto\",\"messages\":[{\"role\":\"user\",\"content\":\"Hello\"}]}'\n```\n\n### 支持的端点\n\n| 端点 | 说明 |\n|------|------|\n| `POST \u002Fv1\u002Fchat\u002Fcompletions` | OpenAI Chat Completions 格式，支持 stream |\n| `POST \u002Fv1\u002Fcompletions` | OpenAI 文本补全 |\n| `POST \u002Fv1\u002Fmessages` | Anthropic Messages 格式 |\n| `POST \u002Fv1\u002Fcomplete` | Anthropic Complete (FIM) |\n| `GET \u002Fv1\u002Fmodels` | 返回模型列表 |\n\n### Python 调用\n\n```python\nfrom openai import OpenAI\nclient = OpenAI(base_url=\"http:\u002F\u002F127.0.0.1:8000\u002Fv1\", api_key=\"any\")\nresp = client.chat.completions.create(\n    model=\"auto\", messages=[{\"role\": \"user\", \"content\": \"你好\"}]\n)\nprint(resp.choices[0].message.content)\n```\n\n---\n\n## 自定义工具\n\n内置 3 个工具（时间、计算、骰子）。自定义工具无需改代码，放在 `~\u002F.m365-copilot\u002Ftools\u002F` 下即可自动加载：\n\n```python\n# ~\u002F.m365-copilot\u002Ftools\u002Fweather.py\nfrom m365_copilot.tools import provider\n\n@provider.register(name=\"get_weather\", description=\"获取指定城市的天气\")\ndef get_weather(city: str) -> str:\n    # 调用天气 API\n    return f\"{city}: 25℃, 晴朗\"\n```\n\n```bash\n$ m365-copilot --list-tools\n  计算 (calculate)\n  时间 (get_current_time)\n  骰子 (roll_dice)\n  天气 (get_weather)          ← 自动加载\n\n$ m365-copilot \"北京天气怎么样\"   # 自动调用 get_weather\n```\n\n也可以通过源码中的 `MCPBridge` 集成标准 MCP 服务器（需自行补全集成代码）。\n\n## 已知限制\n\n| 功能 | 状态 | 说明 |\n|------|------|------|\n| 文本对话 | ✅ 可用 | 流式\u002F非流式，多轮，session 续传，自动上下文匹配 |\n| 语气切换 | ✅ 支持 | auto\u002Fquick\u002Freasoning 三种语气 |\n| 多轮上下文（无 session_id）| ✅ 自动匹配 | 消息前缀哈希自动续传同一对话 |\n| 图像生成 | ❌ 未实现 | payload 存在但无响应解析 |\n| Token 计数 | ⚠️ 粗估 | 空格分词，非真实 BPE 计数 |\n| REST 对话管理 | ⚠️ 需 Cookie | 需浏览器 Cookie，Web UI 有区域限制 |\n\n---\n\n## 架构\n\n```\nYour App → m365-copilot2api → substrate.office.com (SignalR) → M365 Copilot Backend\n              HTTP API               WebSocket (JSON\u002F\\x1e)\n```\n\n认证流程: PCA SPA + PKCE → Refresh Token (AES 加密存储) → Access Token (内存缓存 ~1.2h)\n\n---\n\n## 配置\n\n环境变量（`.env` 或系统变量）:\n\n```\nM365_TENANT_ID=xxx-xxx-xxx-xxx\nM365_USER_OID=xxx-xxx-xxx-xxx\n```\n\n如果 setup 失败，可以通过浏览器 Console 手动获取 Tenant ID 和 User OID：\n\n```javascript\n\u002F\u002F 浏览器登录 m365.cloud.microsoft 后，F12 Console 运行:\n(() => { const k = Object.keys(localStorage).find(k => k.startsWith('msal.') && k.includes('|')); if (!k) return 'NOT_FOUND'; const p = k.split('|')[1].split('.'); return JSON.stringify({oid: p[0], tenant: p[1]}); })()\n```\n\n---\n\n## 免责声明\n\n本项目为**个人学习与研究作品**，旨在探索公开可观察的网络通信协议。\n\n**使用本项目即表示您确认：**\n- 您拥有合法的 Microsoft 365 Copilot 授权\n- 仅用于个人学习研究，非商业用途\n- 理解使用非官方接口可能导致的账号风险\n- 自愿承担一切后果\n\n**本项目不：**\n- 破解加密或绕过认证\n- 获取\u002F泄露他人数据\n- 干扰 Microsoft 服务\n- 与 Microsoft Corporation 有任何关联\n\n如不同意请立即停止使用。\n\n---\n\n\u003Cdiv align=\"center\">\n\n```\n为好奇心而建，请谨慎使用。\n```\n\n⭐ Star if useful · ⚠️ At your own risk\n\n\u003C\u002Fdiv>\n","这是一个将 Microsoft 365 Copilot 的私有 WebSocket 接口封装为 OpenAI 兼容 HTTP API 的工具项目，支持 CLI 命令行交互与标准 RESTful 接口调用。核心功能包括流式\u002F非流式文本对话、多轮上下文保持、session 续传，并提供 OpenAI Chat Completions、Completions 及 Anthropic Messages 等多种 API 格式适配。项目基于 Python 实现，通过自动登录向导提取认证凭据，无需手动逆向或维护 Token。适用于希望在自有应用、自动化脚本或兼容 OpenAI 生态的客户端中接入 M365 Copilot 能力的研究与开发场景。",2,"2026-07-08 04:30:02","CREATED_QUERY"]