Add permission ask loop, lifecycle hook emissions, and Policy type (N1 WP2/WP3) #17

Merged
weichen merged 2 commits from feature/agent-stack-n1 into main 2026-10-07 04:37:23 +00:00
Owner

N1 增量一:ask 回路、生命周期事件与 Policy 类型(WP2/WP3 库侧)

按 Documents 提案 2026-10-07-agent-stack-n1q1i1-plans.md §2.2 的 WP2/WP3 落地库侧部分。

改动

  • WP3 PermissionPolicy 类型化:runtime/policy 新增 Policy{Mode, Rules, SessionAllows}(Decide/Visible 方法,与函数形态完全一致)、SessionAllows 接口与进程内 MemoryAllows 实现(按工具名+原样参数串精确匹配)。
  • WP2 事件补全:runtime/hooks 新增 PostToolBatch、SessionEnd 事件。
  • WP2 发射点:runtime/loop.go 在 Run 入口发 SessionStart/UserPromptSubmit(带用户正文)、工具批后发 PostToolBatch、Run 出口(defer)发 SessionEnd(带末轮文本与工具计数);AgentSession.Compact 前发 PreCompact。Stop 事件已有的 Continuations 字段即方案所称「续跑标志」,测试补齐可见性断言。
  • WP2 ask 回路:Config.PermissionAsk 端口——钩子对工具表态 ask 时先发 PermissionRequest,再向宿主要裁决;Allow 则照常执行,拒绝则写配对错误结果(宿主理由优先)。端口为 nil 时保持旧行为(ask 按拒绝处理)——默认行为不变,行为变化严格限制在「宿主注册了裁决端口」的场景。
  • 顺带:ask/deny 拒绝消息收成 rejectToolMessage 助手。

范围裁定

  • SubagentStart/Stop 的发射点在 adapters(subagent.Factory 调用侧暂无总线访问),留到装配增量(WP6/backend PR)。
  • PermissionAsk 的宿主实现(接 HITL 卡)与三条路径装配拉齐属 Backend PR。

验证

  • go vet ./... 通过;go test -count=1 ./... 24 包全 ok。
  • 新增 runtime/loop_hooks_lifecycle_test.go:生命周期顺序(SessionStart→UserPromptSubmit→PreToolUse→PostToolUse→PostToolBatch→Stop→SessionEnd)、UserPromptSubmit 正文、ask 放行/拒绝/无端口三条路径、续跑计数可见性。
  • runtime/policy/policy_test.go 新增三测:结构体形态与函数形态等价、会话放行存储跨调用存活且精确匹配、nil 存储与 Visible。

主任务:Dev 仓 feature/agent-stack-n1(任务卡随 Dev 分支携带)。

# N1 增量一:ask 回路、生命周期事件与 Policy 类型(WP2/WP3 库侧) 按 Documents 提案 `2026-10-07-agent-stack-n1q1i1-plans.md` §2.2 的 WP2/WP3 落地库侧部分。 ## 改动 - **WP3 PermissionPolicy 类型化**:`runtime/policy` 新增 `Policy{Mode, Rules, SessionAllows}`(Decide/Visible 方法,与函数形态完全一致)、`SessionAllows` 接口与进程内 `MemoryAllows` 实现(按工具名+原样参数串精确匹配)。 - **WP2 事件补全**:`runtime/hooks` 新增 `PostToolBatch`、`SessionEnd` 事件。 - **WP2 发射点**:`runtime/loop.go` 在 Run 入口发 `SessionStart`/`UserPromptSubmit`(带用户正文)、工具批后发 `PostToolBatch`、Run 出口(defer)发 `SessionEnd`(带末轮文本与工具计数);`AgentSession.Compact` 前发 `PreCompact`。`Stop` 事件已有的 `Continuations` 字段即方案所称「续跑标志」,测试补齐可见性断言。 - **WP2 ask 回路**:`Config.PermissionAsk` 端口——钩子对工具表态 ask 时先发 `PermissionRequest`,再向宿主要裁决;Allow 则照常执行,拒绝则写配对错误结果(宿主理由优先)。**端口为 nil 时保持旧行为(ask 按拒绝处理)**——默认行为不变,行为变化严格限制在「宿主注册了裁决端口」的场景。 - 顺带:ask/deny 拒绝消息收成 `rejectToolMessage` 助手。 ## 范围裁定 - `SubagentStart/Stop` 的发射点在 adapters(subagent.Factory 调用侧暂无总线访问),留到装配增量(WP6/backend PR)。 - `PermissionAsk` 的宿主实现(接 HITL 卡)与三条路径装配拉齐属 Backend PR。 ## 验证 - `go vet ./...` 通过;`go test -count=1 ./...` 24 包全 ok。 - 新增 `runtime/loop_hooks_lifecycle_test.go`:生命周期顺序(SessionStart→UserPromptSubmit→PreToolUse→PostToolUse→PostToolBatch→Stop→SessionEnd)、UserPromptSubmit 正文、ask 放行/拒绝/无端口三条路径、续跑计数可见性。 - `runtime/policy/policy_test.go` 新增三测:结构体形态与函数形态等价、会话放行存储跨调用存活且精确匹配、nil 存储与 Visible。 主任务:Dev 仓 `feature/agent-stack-n1`(任务卡随 Dev 分支携带)。
weichen added 1 commit 2026-10-07 03:01:43 +00:00
Add permission ask loop, lifecycle hook emissions, and Policy type
ci / vet-and-test (pull_request) Successful in 48s
ci / docker-checkout-hostgateway (pull_request) Successful in 1s
9758a8d8d0
Why: The N1 harness phase needs the kernel to resolve ask decisions
through the host (paired HITL), emit the full hook lifecycle the plan
promises, and carry mode/rules/session-allow in one named object.

Evidence: go vet clean; go test ./... 24 packages ok, including new
loop_hooks_lifecycle_test.go (lifecycle order, prompt text, ask
allow/deny/legacy paths, stop continuation counts) and three new
policy tests (struct-form parity, session-allow store, nil store).

Impact: hooks adds PostToolBatch and SessionEnd events; loop emits
SessionStart/UserPromptSubmit/PostToolBatch/SessionEnd and PreCompact
lands in AgentSession.Compact; gateTool consults PermissionAsk on ask
and keeps ask=reject when the port is unset; policy gains Policy,
SessionAllows, and MemoryAllows. SubagentStart/Stop emissions are
deferred to the adapters assembly increment (factory site has no bus
access yet).

Refs: Documents proposal 2026-10-07-agent-stack-n1q1i1-plans.md WP2/WP3
weichen added 1 commit 2026-10-07 04:37:09 +00:00
Merge origin/main into the N1 ask-loop branch
ci / vet-and-test (pull_request) Successful in 48s
ci / docker-checkout-hostgateway (pull_request) Successful in 1s
d5714e81ed
weichen merged commit c2befaf17e into main 2026-10-07 04:37:23 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: weichen/Agent-Native#17