feat: integrate fork work onto upstream main (squashed)

Squash-merge of feat/autofix-pr-test (69 commits) onto upstream/main
with -X ours strategy (upstream as authoritative for content conflicts).

Key features brought in from fork:
- LocalMemoryRecall + VaultHttpFetch tools (end-to-end wired)
- /local-memory, /local-vault, /memory-stores, /skill-store interactive panels
- /agents-platform, /schedule, /vault command scaffolding
- /login: switch / replace / remove of workspace API key
- statusline refactor (built-in status row, /statusline as info command)
- autofix-pr command + workflow

Conflict resolutions (upstream-wins):
- 10 .js command stubs kept from upstream (alongside fork's .ts implementations)
- src/components/BuiltinStatusLine.tsx accepted upstream's deletion
  (fork's wire-up references in StatusLine.tsx will be cleaned up next)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
unraid
2026-05-08 16:47:29 +08:00
parent 73e54d4bbc
commit 8945f08708
233 changed files with 40597 additions and 341 deletions

View File

@@ -0,0 +1,116 @@
# 订阅 OAuth 可访问的 Anthropic /v1/* 端点完整探测报告
**日期**2026-05-03
**方法**:用 fork 的 `prepareApiRequest()` 拿订阅 OAuth bearer token + orgUUID对每个候选 endpoint 发安全 GET记录 server 真实状态码 + 响应。代码 `scripts/probe-subscription-endpoints.ts`
**目的**:消除"猜测/反向查阅"的歧义,用实际 server 响应确定哪些端点订阅用户能用、哪些不能用。
---
## 完整结果表
| 端点 | beta header | 状态 | 服务器响应(前 110 字) |
|---|---|---|---|
| `/v1/code/triggers` | `ccr-triggers-2026-01-30` | **OK** | `{"data":[],"has_more":false}` |
| `/v1/environment_providers` | (none) | **OK** | 列出 `env_011N2gVX9ayCrrua81dU92zU` (idx-mv) |
| `/v1/oauth/hello` | (none) | **OK** | `{"message":"hello"}` |
| `/v1/messages/count_tokens` | (none) | 405 | `Method Not Allowed`(要 POST |
| `/v1/memory_stores` | (none) | 400 | `this API is in beta: add 'managed-agents-2026-04-01' to the 'anthropic-beta' header` |
| `/v1/memory_stores` | `managed-agents-2026-04-01` | **401** | **`memory stores require a workspace-scoped API key or session`** ← 决定性证据 |
| `/v1/mcp_servers` | (none) / `managed-agents-...` | 400 | `This endpoint requires the 'anthropic-beta:' ...`(鉴权阶段过了,但 beta 还是不对) |
| `/v1/agents` | (none) / `managed-agents-...` / `agents-2026-04-01` | **401** | `Authentication failed`3 个 beta 全部 401 |
| `/v1/vaults` | (none) / `managed-agents-...` / `vaults-2026-04-01` | **401** | `Authentication failed`3 个 beta 全部 401 |
| `/v1/models` | (none) | **401** | `OAuth authentication is currently not supported` ← 连模型列表都要 API key |
| `/v1/projects` | (none) | 404 | `Not found` |
| `/v1/skills` | (none) / `skills-2025-10-02` | 404 | `Not found`(订阅 plane 不暴露) |
| `/v1/environments` | (none) | 404 | `The environments API requires the 'environments-2*' beta`(提示要不同 beta没试 |
| `/v1/files` | (none) | 404 | `Not found` |
| `/v1/feedback` | (none) | 404 | `Not found`GET 不行,可能需要 POST |
| `/v1/certs` / `logs` / `traces` / `security/advisories/bulk` | (none) | 404 | `Not found` |
**未列在表中但已知 work**
- `/v1/messages` (POST) — 主聊天 API
- `/v1/ultrareview/preflight` (POST) — 已 workfork 已用)
- `/v1/sessions` / `/v1/code/sessions` — teleport 用
- `/v1/code/github/import-token` (POST) — github 集成
- `/v1/code/slack/*` — slack 集成
- `/v1/code/upstreamproxy/*` — proxy
- `/v1/session_ingress/session/...` — teleport sessions API
---
## 三类划分
### A. 订阅 OAuth 可调fork 已或可实现)
| 端点 | fork 命令 | 状态 |
|---|---|---|
| `/v1/code/triggers` (CRUD) | `/schedule` | ✅ 已实现 |
| `/v1/messages` (POST) | 主聊天循环 | ✅ 用 |
| `/v1/sessions` / `/v1/code/sessions` | `/teleport` resume | ✅ 用 |
| `/v1/ultrareview/preflight` (POST) | `/ultrareview` | ✅ 已集成 |
| `/v1/environment_providers` | `/schedule` 选 env | ✅ 用 |
| `/v1/code/github/import-token` (POST) | github setup | ✅ 用 |
| `/v1/messages/count_tokens` (POST) | `/usage` | 可加 |
| `/v1/feedback` (POST) | `/feedback` 上游 | 可加404 是因 GETPOST 应该 OK |
| `/v1/oauth/hello` | health check | (内部) |
### B. 订阅 OAuth **绝对不能调** — server 明文拒绝(要 workspace API key
| 端点 | server 拒绝原因 | fork 处置 |
|---|---|---|
| `/v1/memory_stores` | **"memory stores require a workspace-scoped API key or session"** | 已隐藏commit `906b0a48`|
| `/v1/agents` | `Authentication failed`(任何 beta | 已隐藏 |
| `/v1/vaults` | `Authentication failed`(任何 beta | 已隐藏 |
| `/v1/models` | `OAuth authentication is currently not supported` | 不暴露用户命令 |
| `/v1/skills` (marketplace) | 404 with OAuth | 已禁用(但本地 skills 仍 work |
| `/v1/projects` | 404 with OAuth | 不需要 |
| `/v1/files` | 404 with OAuth | 不需要 |
### C. 待探(可能加不同 beta 后 work未深探
| 端点 | 提示 | 估计 |
|---|---|---|
| `/v1/environments` | `requires the 'environments-2*' beta` | 试 `environments-2024-...` 可能 OK但要订阅 plane 才有用,未必必要 |
| `/v1/mcp_servers` | `requires the 'anthropic-beta:' ...` | beta 未知 — 反向查 binary 找正确 beta token 名 |
---
## 决定性结论
1. **`/v1/{agents,vaults,memory_stores}` 在 server 端硬卡为 workspace plane**。即使 fork 加任何 beta header / 用任何 OAuth 巧门server 始终返回 401。`/v1/memory_stores` 的错误文案 **"require a workspace-scoped API key or session"** 是明文证据。
2. 唯一让这 3 个命令对订阅用户工作的方法fork 加 **workspace API key 路径**(用户从 https://console.anthropic.com 申请 `sk-ant-api03-*` key独立计费。当前 fork 不支持此路径。
3. **"workspace-scoped session"** 这个表述暗示:除了 API key还有一种"workspace-scoped session"(可能是 enterprise SSO + workspace selection 后的 session token但 server 没暴露给个人订阅 OAuth。
---
## 推荐路线(按优先级 P0/P1/P2
### P0即刻执行已部分做
- ✅ 已隐藏 `/agents-platform` `/vault` `/memory-stores` 的 buildHeaders 抛 501 文案,明确告诉用户"workspace API key required"
- ❌ 但命令仍在主菜单 `/help`,建议改 `isHidden: true` 或不注册,避免误导
### P1短期可加订阅可用fork 缺)
- `/feedback` 命令包 `POST /v1/feedback`(替代/对齐上游 v2.1.123 的 `/feedback`
- `/mcp_servers list``mcp-servers-2025-XX-XX` beta先反向查正确 beta token
- `/usage` 内嵌 `/v1/messages/count_tokens` 实时 token 估算
### P2长期要新增 API key 模式)
- 可选 workspace API key 路径fork 检测到 `ANTHROPIC_API_KEY=sk-ant-api03-*` 时启用 vault/agents/memory_stores 命令;否则保持隐藏。**用户警告**:会从 API key 配额扣钱(与订阅独立计费)。
### 永久跳过
- `/v1/models` (workspace only)、`/v1/projects` (workspace)、`/v1/files` (workspace)、`/v1/skills` marketplace (workspace) — fork 不应承诺给订阅用户。
---
## 相关 commits / 文件
- 探测脚本:`scripts/probe-subscription-endpoints.ts`
- 4 文件 503/501 改造commit `906b0a48` ("fix: stop subscription bearer from hitting workspace-API-key endpoints (501)")
- 反向 binary 报告:`docs/jira/P2-AUTH-DIFF-2026-04-30.md`
- P2 endpoint 实施 spec`docs/jira/P2-ENDPOINTS-SPEC.md`
---
**报告作者**Claude Opus 4.7(基于实际 server 响应,非推测)