feat(intercept): 模型审查补充任务上下文与裁决说明 (#124)
审查模型改为接收版本化 JSON:任务描述/目标/操作约束、工作目录、Worker 意图、当前轮输入,以及按 tool_use_id 配对的近期工具执行记录;末尾是完整的 tool_name 与 arguments。 - 任务约束每次审查从数据库重新读取;读取失败或约束超预算转人工。 - 历史只保留唯一配对的执行事实,排除 Agent 自述、未完成请求与平台拒绝反馈。 - 裁决改为 JSON decision(allow/ask/deny) + comment,三种结果均须说明实际操作、成功后果与命中规则。 - 所有模型裁决(含自动放行)保存实际模型输入与 SHA-256 指纹,详情页可展开。 - 对话审批卡片支持展开完整请求、模型输入、裁决与执行结果。 - 修复父目录 lockfile 导致的 Turbopack 根目录误判。 官方默认拦截规则、工具范围与优先级不变。
This commit is contained in:
1 parent
234bd8bf8e
commit
c0d1aa6f37
26 files changed
+1159
-199
No files matched your search
@@ -1,10 +1,28 @@
|
||||
package db
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"time"
|
||||
)
|
||||
|
||||
// OperationReviewContext takes one database snapshot of the task's original
|
||||
// description/goal and registered constraints. Discovered task_scope assets are
|
||||
// deliberately excluded: discovery does not grant authorization.
|
||||
func (s *ExplorationStore) OperationReviewContext(ctx context.Context) (description, goal string, constraints []Constraint, err error) {
|
||||
var raw []byte
|
||||
err = s.db.QueryRowContext(ctx, `SELECT COALESCE(e.description,''), e.goal,
|
||||
COALESCE((SELECT jsonb_agg(jsonb_build_object(
|
||||
'id', c.id, 'kind', c.kind, 'text', c.text, 'origin', COALESCE(c.origin,''), 'created_at', c.created_at
|
||||
) ORDER BY c.id) FROM task_constraints c WHERE c.exploration_id=e.id), '[]'::jsonb)
|
||||
FROM explorations e WHERE e.id=$1`, s.expID).Scan(&description, &goal, &raw)
|
||||
if err == nil {
|
||||
err = json.Unmarshal(raw, &constraints)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// Constraint is one operator-authored operation constraint for a task: kind=allow
|
||||
// (permitted operations) or kind=deny (forbidden operations), free-text. Stored in
|
||||
// task_constraints, keyed by exploration_id (cascades with the exploration).
|
||||
|
||||
@@ -29,6 +29,8 @@ type InterceptAudit struct {
|
||||
ContextTruncated bool `json:"context_truncated,omitempty"`
|
||||
CapturedAt time.Time `json:"captured_at"`
|
||||
ModelFallback bool `json:"model_fallback,omitempty"`
|
||||
ModelInput json.RawMessage `json:"model_input,omitempty"`
|
||||
ModelInputDigest string `json:"model_input_digest,omitempty"`
|
||||
InitialAction string `json:"initial_action"`
|
||||
InitialReason string `json:"initial_reason"`
|
||||
EffectiveAction string `json:"effective_action,omitempty"`
|
||||
|
||||
Reference in new issue
Block a user