# 标准 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/`