feat: add JavaScript session orchestration runtime

This commit is contained in:
shiyue
2026-08-26 10:09:26 +08:00
parent 05480e511d
commit f15bc92d1e
17 changed files with 1483 additions and 5 deletions

View File

@@ -0,0 +1,39 @@
# 标准 JavaScript 会话编排发现
## Requirements
- 提供 `@ccweb/session`,支持 `getCurrentConversationId`、`createConversation`、`sendMessage`、`selectSemanticBranch`、`getLastMessage`。
- 脚本位于当前来源对话 cwd 下 `.ccweb/scripts/`,只允许 `.js`,目录使用 ESM。
- MCP 提供 create/write/run/get_run/stop 以及 `ccweb_javascript_session_api` manifest。
- 异步脚本通过 `runId` 查询;主动 stop 不插入来源消息;异常结束向来源对话插入通知。
## Research Findings
- `lib/ccweb-mcp-server.js` 已有 HTTP MCP 客户端,使用 `CC_WEB_MCP_URL`、`CC_WEB_MCP_TOKEN`、`CC_WEB_SOURCE_SESSION_ID`。
- `server.js` 的 `/api/internal/mcp` 会鉴权后调用 `callInternalMcpTool`。
- 现有会话入口为 `createMcpConversation`、`sendCrossConversationMessage` 和 `handleCodexAppSteerMessage`。
- Codex App 完成路径 `handleCodexAppTurnComplete` 会持久化 assistant 消息并完成跨会话回复;需要复用其完成点实现脚本等待。
- `killProcess` 与 `handleCodexAppAbortSession` 可作为停止行为的参考,但脚本子进程需要独立 PID/日志/状态管理。
- codebase-memory 项目 `home-cc-web` 索引状态为 ready(7740 nodes/17835 edges)。
## Technical Decisions
| Decision | Rationale |
|----------|-----------|
| 脚本包通过本地 `node_modules/@ccweb/session` 注入 | Node ESM 对裸包名解析稳定,不依赖不可靠的 `NODE_PATH` |
| 脚本运行凭据按 runId 绑定 | 避免把全局内部 MCP token 长期暴露给用户脚本 |
| 日志追加落盘,get_run 分段读取 | 支持用户确认的无限输出,同时保护 MCP 响应大小 |
| 判断器一次性只读 Codex App turn | 不污染目标会话、工作区和普通 MCP 能力 |
## Issues Encountered
| Issue | Resolution |
|-------|------------|
| 根目录计划属于此前 hooks 验证任务 | 使用 scoped plan,保留原有计划文件 |
## Resources
- `server.js`
- `lib/ccweb-mcp-server.js`
- `lib/codex-app-server-client.js`
- `.codex/skills/planning-with-files/`