zh
2e46b85aca
feat(provider): A5 APS Provider 接通真实 APS 服务(能力清单取自 manifest,端到端读到真实订单)
2026-09-30 14:12:24 +08:00
zh
ee42650f9c
fix(core): 执行记录查询补越权校验,待确认中的执行也能按 executionId 查到
2026-09-29 11:01:50 +08:00
zh
498e7e60b4
feat(core): 控制面五块落地——身份、策略、凭据、确认、审计(A4.1-A4.6)
2026-09-29 11:00:33 +08:00
zh
70a78a695d
feat(agent): 引擎进程管理——空闲回收、并发上限、崩溃退避重启、日志轮转(A3.10)
2026-09-29 10:46:13 +08:00
zh
b20dbd17d0
feat(agent): 引擎可替换验证(A3.9)
...
一致性用例支持两种工具执行模式(platform 由平台执行、runtime 由引擎侧扩展桥执行)与场景跳过(跳过要记原因,不算通过),并支持把场景会话绑定到平台侧真实会话(Pi 走扩展桥时平台必须真的存在该会话)。新增 scripts/engine-conformance.mjs:同一套用例对假引擎与 Pi 各跑一遍,产出 docs/eval/engine-conformance-<日期>.md 对比报告。实测两轮都是 11 项检查 0 项未通过;过程中修掉一个保真缺陷——Pi 工具名是下划线形式(fake_echo),平台事件里应还原成能力 id(fake.echo),已加反向映射并补单测。测试 76 → 77 全绿。
2026-09-29 10:35:40 +08:00
zh
e4b6051da1
feat(context): 平台构建上下文与检查点(A3.8)
...
按实施设计 1.3/1.5:上下文由平台构建,不把整段会话塞给模型。新增 server/app/context-builder.ts——按预算保留最近若干轮 + 钉住引用,把更早的消息折叠成结构化摘要(每条带来源消息 id),工具执行只以引用进摘要(能力、状态、参数摘要、executionId),原始消息一律不动。新增 context_checkpoints 表与仓储(迁移 v2),每轮结束后落检查点,摘要与来源可查。应用服务在运行时会话首次发送时注入上下文包,同一运行时会话不重复注入(引擎自己有原生上下文时就不需要)。Pi 原生会话目录支持 APS_PI_SESSION_DIR 覆盖,便于验证「引擎无状态、平台补上下文」。验证:构建器 5 条单测 + 跨重启注入集成用例;真模型实测——重启平台并让 Pi 用全新会话目录,问「我刚才让你记住什么」答出「25 分钟(车间换型时间)」。测试 70 → 76。
2026-09-29 10:24:41 +08:00
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
723e5d7ccd
feat(client): 界面按现有项目结构迁移第一批(A3.12)
...
设计令牌直接沿用 main 的 styles.css(中性浅底 + 工业橙 + 低海拔阴影),框架改成四段式:菜单栏 36px + 顶栏 44px + 主体三栏;左右两栏可拖拽调宽(双击复位)、右栏可收起。对话支持 Markdown 渲染(沿用 main 的轻量实现,不加依赖)与工具调用卡片(能力名、参数摘要、状态、平台 executionId)。右工作区三个标签:视图占位 / 事件流(带每类事件摘要)/ 运行记录(点击取回执)。新增/更新:styles.css、components/Markdown.tsx、components/Splitter.tsx、App.tsx、api.execution()。顺带修一个 Fidelity 缺陷:Pi 的 tool_execution_end 里平台 executionId 在 result.details 内,之前映射用了 Pi 的 callId 导致界面显示的执行号无法查询;已改为优先取 details.executionId。另加 APS_PI_DEBUG_EVENTS=1 调试开关(原始事件打到 stderr)。实测:会话列表 9 条、工具卡片显示 exec-9a1e1b86…、运行记录点击取回 {echo:'执行号应该对上了'}。
2026-09-28 22:11:45 +08:00
zh
8a9e9a7211
feat(agent): 能力桥——Pi 真正能调用平台能力(A3.4 / A3.11)
...
新增 Pi 扩展(server/agent/pi/extension/aps-bridge.ts):把平台能力目录注册成 Pi 工具,工具执行时回调平台的 /internal/tool-call(loopback + 内部令牌),平台侧收口到 Core.invoke。平台侧每次建会话写一份桥配置(含能力清单与会话 id,放 ~/.aps/pi-bridge,权限 0600),通过 -e 显式加载扩展(--no-extensions 仍保留,只加载平台自己的扩展)。运行时接口新增 toolExecution 区分工具由谁执行:fake=platform(平台执行并回填)、pi=runtime(扩展在 Pi 进程里执行,平台只观察事件);回合执行器按模式分流,避免重复执行。真引擎实测通过:问「请调用 fake_echo 工具把这句话回显给我」→ 模型自己选出工具 → 回执带 executionId 返回 → 回答里引用该 id;HTTP 查该 executionId 得 {status:succeeded, result:{echo:'工具桥通了'}}。测试 60 → 66(新增扩展桥 3 条 + 回合执行器分流 3 条),全绿。
2026-09-28 22:03:44 +08:00
zh
4f59524d2a
fix(test): 测试强制使用假引擎,不读本机真实配置
...
真引擎点亮后自动化测试开始真调模型(测试通过 startServer 默认读到 ~/.aps/config.json 里的密钥),verify 从 6 秒变成挂住。现在 StartOptions 支持显式 engine 覆盖,六个测试文件统一传 engine: 'fake';CI 再加 APS_ENGINE=fake 双保险。verify 恢复到 6 秒、60 条测试(59 通过 + 1 跳过)。
2026-09-28 20:30:40 +08:00
zh
e74ca8a131
feat(agent): 平台系统提示词,消掉引擎的能力幻觉(A3.8 前置)
...
真引擎点亮后第一轮回复声称「可以阅读、修改和调试代码,并执行命令」——那是 Pi 自带的编码助手提示词,而平台已用 --no-builtin-tools 关掉了它的全部工具,属于能力幻觉。新增 server/app/system-prompt.ts:说明平台角色、工具只来自能力目录、没有的工具直接说做不到、写操作先出确认卡、数据以业务系统为准;应用服务建运行时会话时注入。实测对比:改前「我是 pi 编码助手…可以执行命令」,改后「我是连接 APS、ERP、EMS 等业务系统的智能体助手…」,追问「能读本机文件吗」→「不能。…没有读取本机文件的能力。」
2026-09-28 20:30:04 +08:00
zh
46cddc8245
fix(config): 脱敏视图里 engine 与 llm 平级
...
启动横幅里 engine 被错插进 llm 对象内部,修正为同级字段。
2026-09-28 20:22:40 +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
1dbed5be7c
feat(storage): 会话与消息落库 SQLite(A3.7,决策 D16)
...
新增 server/core/storage:openDatabase + 迁移(projects / sessions / messages / idempotency_keys 四张平台表,按 ADR-0007 用整数毫秒与应用侧主键),SessionRepository 负责读写。SessionStore 改为内存态 + 写透:会话、消息、幂等键落库,进程重启后按库补建运行时状态(事件总线与进行中的运行仍在内存,符合架构设计 5.1)。startServer 支持 databasePath(测试传 :memory: 隔离,默认取配置 ~/.aps/aps.sqlite),关停时关闭数据库。新增 storage 用例:同一库文件起两次服务,会话、消息、幂等键都可查且重试命中同一条受理记录。测试 54 → 56 全绿。过程中修掉一个自身缺陷:迁移表要先建,否则第一次查版本号就报 no such table。
2026-09-28 16:03:12 +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
cd883d9ad7
feat(agent): 规则计划器按声明的 text/query 参数填充原始问法
...
让假引擎的默认计划器能把用户原话作为 text/query 参数传给能力,M1 演示与联调不再因为缺参数而失败;能力声明里没有这两个参数时不受影响。
2026-09-28 15:39:21 +08:00
zh
d03f8d7414
feat(agent,eval): 假引擎接入服务端并跑通问法评测(A2.6 / A2.7,M1 闭环)
...
服务端改用 AgentRuntime 接口:新增 turn-runner 把 RuntimeEvent 翻成平台事件(text→message.delta、tool_call→tool.call 并走 Core.invoke、tool_result→tool.result、turn_end→message.completed+run.state、error→error),工具描述由能力目录投影;取消时先推 cancelling 再中止引擎;关停时主动断开 SSE 长连接。默认引擎为假引擎 + 规则计划器,M1 链路打通:假引擎发起工具调用 → Core.invoke → 假 Provider → 回执回流 → 继续说话(scripts/m1-loop.test.mjs 验证)。A2.6:providers 下 17 个能力描述文件,七要素 CI 检查实际校验通过。A2.7:scripts/eval-intents.mjs 跑手 + 规则基线报告(工具选择 68.2%、参数命中 23.1%、澄清率 33.3%、误澄清 13.6%、幻觉 0、越权 0),修正了期望参数占位符无法字面比对与比率显示两个自身缺陷。测试 46 → 47 全绿。
2026-09-28 15:38:42 +08:00
zh
89b9535138
feat(agent): 引擎接口、假引擎与一致性测试套件(A3.1 / A3.2)
...
runtime.ts 按架构设计 5.2 定义 AgentRuntime / RuntimeSession / RuntimeEvent(text、tool_call、tool_result、approval_required、turn_end、error),补两处实现必需项:createSession 带 sessionId、resolveToolResult 让工具回执回流。fake-runtime 为确定性假引擎,支持脚本与计划器,事件顺序与真引擎一致,用于一致性测试与 A2.7 评测。conformance.ts 是一套跑任何运行时的验收用例:单轮事件顺序、多轮、工具调用与回执、取消、错误分类、带历史恢复。测试 44 → 46 全绿;坏运行时负例证明套件不是摆设。过程中修掉两个自身缺陷:假引擎在 yield 之后才登记回执回调导致回执丢失;一致性套件超时定时器 unref 导致事件循环空转退出。
2026-09-28 15:14:11 +08:00
zh
f2359cc3ad
feat(core): 引擎工具回调端点与会话归属者(A2.5)
...
会话记录带 owner,创建会话时记录发起人;新增 POST /internal/tool-call(loopback + 启动时生成的内部令牌鉴权),身份取自会话归属者而非调用方自带,平台侧仍收口到 Core.invoke。三条端到端用例:HTTP→应用服务→Core→假 Provider 成功链路、令牌缺失或错误被拒且不留执行记录、未知能力返回失败回执而非 HTTP 错误。测试 41 → 44 全绿。
2026-09-24 15:50:07 +08:00
zh
e15e7e81e9
feat(core): Provider SDK、能力目录与 Core.invoke(A2.1-A2.4)
...
按架构设计第 6 节实现 Provider 契约(describe/invoke/health)与能力声明(effect/mode/idempotency/errors);错误统一六分类(invalid_argument、forbidden、conflict、rate_limited、unavailable、unknown_result)。Core.invoke 作为唯一执行出口:能力解析、幂等重试返回原回执、超时归一为 unknown_result、执行记录带参数摘要。新增能力目录(registry)与内存执行记录,能力清单改由目录提供;GET /v1/executions/{id} 由 501 改为返回真实回执。假 Provider(testing)与契约测试套件(contract-suite)落地,含坏 Provider 负例。APS Provider 占位改为新契约。测试 31 → 41 条全绿。
2026-09-24 15:48:45 +08:00
zh
d6bb4a7df2
feat(client): 最小界面与单端口托管(A1.4 / A1.5)
...
客户端 Vite + React 三栏骨架:左会话列表、中对话流(SSE 流式)、右工作区占位与事件流观察窗;连接状态徽章;类型全部来自 @aps/contracts。服务端托管 client/app/dist,一个端口跑完整平台;pnpm dev 一键起服务端与前端,pnpm start 构建后单端口托管。实测:浏览器打开后新建会话、发消息、看到流式回复与事件流 seq 1..7;31 条测试全绿。
2026-09-24 15:41:01 +08:00
zh
f127e5071e
feat(ci): lint 基线与三个检查接入门禁(A1.6)
...
eslint(typescript-eslint + prettier)、跨库访问检查(ADR-0008)、能力描述七要素检查(A2.6 的 CI 项)、APS/平台 CI 分流;新增 pnpm verify 一条命令跑完整门禁。TypeScript 从 7.0 降到 6.0.3——typescript-eslint 尚不支持 TS 7。测试 21 → 30 条全绿。
2026-09-24 15:37:35 +08:00
zh
52be2793e4
feat(server): 应用服务最小闭环与 HTTP/SSE 入口(A1.3)
...
按协议 v1 实现 12 个端点中的 10 个:健康检查、身份、项目、会话 CRUD、发消息、取消、能力清单;执行状态与确认卡返回 501(A2/A4 落地)。应用层含事件总线(会话内 seq、回放、订阅)、会话存储(ADR-0003 作用域校验)、占位引擎(回显,A3 替换)。新增 6 条冒烟测试:未接入 Provider 可用、事件流合规且 seq 递增、幂等重试、取消、断点续传、错误包装。协议补一型事件 message.user(多端与重连需要)。测试 15 → 21 条全绿;本地启动实测通过。
2026-09-24 15:09:37 +08:00
zh
d2aa837579
feat(workspace): pnpm monorepo 骨架与包边界(A1.1)
...
六个包:@aps/contracts、@aps/provider-sdk、@aps/server、@aps/client-app、@aps/desktop、@aps/provider-aps。依赖方向 contracts <- provider-sdk <- server <- client,providers/* 只依赖 provider-sdk。TypeScript 项目引用串起构建,pnpm typecheck 全绿。server 内部按 entry/app/agent/core/workflows 建目录并写明各自不该出现什么。
2026-09-23 19:29:57 +08:00