Commit Graph

3 Commits

Author SHA1 Message Date
zh 2c0cfb85d0 feat(agent): Pi 子进程接入(A3.3)
新增 server/agent/pi/runtime.ts:用官方 RpcClient 拉起 pi --mode rpc,一个会话一个进程(ADR-0006)。启动参数带 --no-builtin-tools / --no-extensions / --no-skills / --no-context-files,Pi 自带的 read/bash/edit/write 全部关掉,工具只能来自能力目录(扩展桥在 A3.11 接)。密钥经环境变量注入子进程(不进命令行,避免进程列表泄露);Pi 自己的 session 文件放 ~/.aps/pi-sessions 只作同引擎恢复,会话历史仍归平台。事件映射:message_update(text_delta)→text、tool_execution_start/end→tool_call/tool_result、message_end(assistant, stopReason=error)→error 并按六分类归一、agent_settled→turn_end。配置层加引擎选择:有密钥自动用 Pi、否则假引擎,可用 APS_ENGINE 覆盖;要求 Pi 但没有密钥时明确回退并告警。未配置密钥时 createSession 快速失败并给出配置指引,不再静默挂住。测试 56 → 60(59 通过 + 1 条需 APS_PI_INTEGRATION=1 的真实调用默认跳过);用假密钥实测:401 在 340ms 内被归到 forbidden,随后正常收尾。过程中修掉自身缺陷:错误回合的 finishReason 被 turn_end 覆盖回 stop,改为取最严重结果。
2026-09-28 20:21:24 +08:00
zh 0e1a1bb5c0 feat(config): 模型与端点配置层(ADR-0011,决策 D15 / D16)
server/config.ts 按 ADR-0011 读取配置:环境变量 > ~/.aps/config.json > 默认值;默认 DeepSeek(https://api.deepseek.com/v1,deepseek-chat);密钥只在配置对象里出现一次,日志与启动横幅一律走 redactConfig。.env.example 改为平台自己的变量并写清优先级。serve 启动打印脱敏配置与「模型是否已配置」。数据库默认 ~/.aps/aps.sqlite(决策 D16,驱动用 Node 内置 node:sqlite,实测 22.19 免 flag、零原生依赖)。顺带收紧跨库访问检查的边界:平台自己的 APS_DB_PATH 不算越界(补一条用例锁住),避免误报。测试 47 → 54 全绿。
2026-09-28 16:01:04 +08:00
zh b878fd6f41 chore: 从零开始重构(首个提交) 2026-09-22 17:46:56 +08:00