Skip to content

feat(hub): /v1/files/* + app-mode + version compat (UI-1b) - #4

Merged
Smirk1921 merged 1 commit into
mainfrom
feat/phase8-ui1b
Oct 7, 2026
Merged

Smirk1921 merged 1 commit into
mainfrom
feat/phase8-ui1b

Conversation

@Smirk1921

Copy link
Copy Markdown
Owner

窗口 UI-1b — hub 契约扩展(tts-toolkit 侧)

蓝本

  • 施工方案-v0.8.0 §8(已确认决策:PUT /v1/files/write、Rust 端口探测、import package.json、仿 push 测试形态)
  • ui-design/round-03/UI施工方案.md §6
  • 项目记忆:坑 21 四方同步、红线 15 files/* 不加 MCP、坑 17 不二次绑 39998

变更(坑 21 四方同步)

变更 control.ts client.ts tools/*.ts hub-control.md
POST /v1/files/read ✅ ✅ filesRead ❌ 红线 15 ✅ §4.15
PUT /v1/files/write ✅ putRoutes ✅ filesWrite + PUT ❌ ✅ §4.16
/v1/status version/appMode ✅ ✅ 类型收窄 ❌ ✅ §4.1
--app-mode + userAction ✅ ❌ ❌ ✅ §3.2
loopback CORS + OPTIONS ✅ ❌ ❌ ✅ §2
HUB_PATH_ESCAPE / CONFLICT / FILE_TOO_LARGE ✅ ✅ HubError code ❌ ✅ §3.3

新增

  • src/hub/paths.ts(164 行,四层防护 + symlink realpath)
  • tests/unit/hub-control-files.test.ts(525 行,~16 用例)

测试基线

2057 passed / 70 skipped / 0 failed(基线 2037 + 新增 20 全绿)。

端到端探针(已固化 9 条全过)

  1. /v1/status 含 version+appMode ✅
  2. POST /v1/files/read 路由存在 ✅
  3. PUT /v1/files/write 路由存在 ✅
  4. CORS 头(loopback Origin) ✅
  5. OPTIONS 预检 204 ✅
  6. files/read 真实读取 ✅
  7. files/write 乐观锁匹配 ✅
  8. files/write 乐观锁冲突 409 ✅
  9. files/read 路径防护 .. ✅

已知边界

中文用户名路径(GBK 代码页)在 hub 进程内 findPack 失败;ASCII 路径一切正常。不阻塞主交付。

🤖 Generated with CreateWorkflow + GLM-5.3-Flash × 3 (concurrent)

…compat (UI-1b)

hub contract extension (v0.8.0 prep):
- 2 new routes: POST /v1/files/read, PUT /v1/files/write
- /v1/status response gains hub.version (from package.json) + hub.appMode
- New --app-mode CLI flag + TTS_HUB_APP_MODE env var; errors carry
  details.userAction when appMode=app
- Loopback CORS middleware + OPTIONS preflight (204)
- Path safety util src/hub/paths.ts (4-layer guard + symlink realpath)
- Optimistic locking via baseSha256 (409 HUB_CONFLICT)
- New error codes: HUB_PATH_ESCAPE, HUB_CONFLICT, HUB_FILE_TOO_LARGE
- HubClient: filesRead/filesWrite methods + PUT support + HubStatus typed

Per red line 15, /v1/files/* NOT exposed as MCP tools.
Contract doc §2/§3.2/§3.3/§4.0/§4.1/§4.15/§4.16/§6.1/§7 synced.

Tests: 2057 passed / 70 skipped / 0 failed (baseline 2037 + 20 new).
@Smirk1921
Smirk1921 merged commit 488041e into main Oct 7, 2026
1 check passed
@Smirk1921
Smirk1921 deleted the feat/phase8-ui1b branch October 7, 2026 09:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant