Commit Graph

4 Commits

Author SHA1 Message Date
zh d5df4f5408 feat(core): 按身份过滤能力与工具白名单(A3.5)
新增 server/core/registry/visibility.ts:能力可见性规则(defaultAllow / denyWrite / grants 按 userId、tenantId 与能力 id 前缀授权)。能力清单与引擎工具集走同一次过滤,避免模型看到用户看不到的能力;运行时会话缓存加工具集指纹,身份或可见能力变化就重建(不跨身份复用工具集)。会话加归属校验:读、发消息、取消、订阅事件流、按会话取能力清单,非归属者一律 403。配置层加 capabilities 段(默认 defaultAllow=true 供开发使用,A4.1 接真实身份后应改 false);开发身份支持 x-aps-user / x-aps-tenant 头覆盖,便于多身份联调与权限用例。测试 66 → 70:白名单同源、跨身份隔离、工具集变化重建、只读模式与未登记能力。
2026-09-28 22:17:25 +08:00
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