@kylecheng3146/agent-ops 0.1.20 → 0.1.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/README.md +23 -4
  2. package/dist/packages/cli/src/agy-headless.js +18 -0
  3. package/dist/packages/cli/src/args.js +29 -3
  4. package/dist/packages/cli/src/bin.js +54 -3
  5. package/dist/packages/cli/src/cli.js +3 -0
  6. package/dist/packages/cli/src/commands/allow-stop.js +11 -0
  7. package/dist/packages/cli/src/commands/hook.js +12 -1
  8. package/dist/packages/cli/src/commands/init.js +4 -1
  9. package/dist/packages/cli/src/commands/task.js +5 -2
  10. package/dist/packages/cli/src/context.js +4 -1
  11. package/dist/packages/cli/src/hook-process.js +59 -5
  12. package/dist/packages/cli/src/wizard.js +24 -0
  13. package/dist/runtime/src/adapters/agy/config.js +17 -7
  14. package/dist/runtime/src/adapters/agy/events.js +8 -0
  15. package/dist/runtime/src/adapters/agy/input.js +21 -3
  16. package/dist/runtime/src/adapters/agy/output.js +8 -4
  17. package/dist/runtime/src/config/explain.js +5 -0
  18. package/dist/runtime/src/config/migrate.js +15 -1
  19. package/dist/runtime/src/contracts.js +1 -1
  20. package/dist/runtime/src/hooks/completion-gate.js +209 -0
  21. package/dist/runtime/src/hooks/dispatch.js +6 -0
  22. package/dist/runtime/src/install/doctor.js +3 -1
  23. package/dist/runtime/src/install/harness.js +5 -1
  24. package/dist/runtime/src/install/ownership.js +9 -2
  25. package/dist/runtime/src/install/plan.js +19 -4
  26. package/dist/runtime/src/install/profiles.js +3 -0
  27. package/dist/runtime/src/schema/validate.js +11 -1
  28. package/dist/runtime/src/task/service.js +17 -0
  29. package/docs/en/guides/configuration.md +25 -7
  30. package/docs/en/spec/README.md +3 -3
  31. package/docs/en/spec/harness-adapters.md +7 -3
  32. package/docs/zh-TW/guides/configuration.md +22 -6
  33. package/docs/zh-TW/spec/README.md +4 -4
  34. package/docs/zh-TW/spec/harness-adapters.md +6 -3
  35. package/package.json +1 -1
  36. package/schemas/config.schema.json +12 -2
@@ -6,9 +6,11 @@
6
6
  `codex,opencode` 這類逗號分隔的子集。`both` 仍是 legacy Codex 加 Claude
7
7
  selection 的 input alias。
8
8
 
9
- Project agy、Codex opencode installation 共用 managed supplemental
10
- `AGENTS.md` routing block 與 `.agent-ops/AGENTS.md` rules artifact。該 block
11
- 只載入 managed baseline,並保留 project-specific instructions 的權威性。
9
+ Project agy 使用 managed supplemental `GEMINI.md` routing block 與
10
+ `.agent-ops/GEMINI.md` baseline;這符合 agy CLI 官方文件所述,啟動時會讀取
11
+ workspace root `GEMINI.md` `AGENTS.md`。Codex 與 opencode 共用
12
+ `AGENTS.md` route 與 `.agent-ops/AGENTS.md` artifact。這些 block 只載入
13
+ managed baseline,並保留 project-specific instructions 的權威性。
12
14
  Claude 使用對應的 `CLAUDE.md` route 與 `.agent-ops/CLAUDE.md` artifact。Opencode 另外取得
13
15
  agent-ops 擁有的 `.opencode/plugins/agent-ops.js`;不會修改 `opencode.json`。
14
16
  Plugin 使用安裝時的 absolute runtime path 產生,因此請透過
@@ -131,6 +133,20 @@ agy 會安裝原生 `PreInvocation` 與 `PreToolUse(run_command)` 子集,docto
131
133
  位於 `.gemini/config/hooks.json`;user scope 會修改共享 Gemini rule surface
132
134
  `.gemini/GEMINI.md`。機器可讀的 `/hooks` 診斷要求 agy 1.1.12 以上。
133
135
 
136
+ `agy` 搭配 `loop` 時,互動式 installer 會建議啟用
137
+ `features.completionGate.enabled`;非互動安裝必須明確傳入
138
+ `--completion-gate`。閘門使用官方定義的 `conversationId`、
139
+ `terminationReason` 與 `fullyIdle` Stop 欄位,只有在本次 conversation 產生
140
+ Git-visible net change 且缺少當前 task、驗證或 review 證據時,才回傳官方定義的
141
+ `decision: "continue"`。純問答、分析、唯讀診斷、錯誤、max-step 與 non-idle Stop
142
+ 都正常結束;本版不改變 Codex、Claude Code 或 OpenCode 的 Stop 行為。Headless
143
+ 請使用 `agent-ops agy-run -- <agy arguments>`;使用者可核准一次
144
+ `agent-ops allow-stop --session <conversationId>`,該命令由官方定義的
145
+ `force_ask` 強制詢問。
146
+
147
+ 官方依據:[agy CLI workspace rule file](https://www.antigravity.google/docs/cli/best-practices/)
148
+ 與 [Antigravity hook contract](https://www.antigravity.google/docs/hooks/)。
149
+
134
150
  完整 Codex/Claude loop 會執行 `SessionStart`、`UserPromptSubmit`、`PreToolUse`、
135
151
  `PermissionRequest`、`PostToolUse`、`PreCompact`、`PostCompact`、
136
152
  `SubagentStart` 與 `SubagentStop`,但永遠不加入 `Stop`。它只攔截
@@ -164,8 +180,8 @@ hook 文件](https://code.claude.com/docs/en/hooks)。
164
180
  OpenCode `tool.execute.before` plugin 可在其支援的 Bash surface
165
181
  上 throw 文件化的 command-policy denial 或 unavailable-runtime error。Codex 明確
166
182
  不執行強制措施(`unknown`)。這些是 agent-ops 的 output 與 plugin contract,不
167
- 證明 host 會實際遵守 denial。所有 adapter 的 `SessionStart` `Stop` failure path
168
- 都維持 fail-open。
183
+ 證明 host 會實際遵守 denial。所有 `SessionStart` 與一般 Stop verification failure
184
+ path 都維持 fail-open;只有明確啟用的 agy completion gate 會在 final Stop fail-closed
169
185
 
170
186
  Claude 的無效 config fallback 有四項防護:(1) 缺少 project configuration 時保持
171
187
  fail-open,因此只有無效的 `.agent-ops/config.json` 能進入 fallback;(2) manifest
@@ -176,7 +192,7 @@ hook-process environment 讀取,不能由 agent-ops configuration、manifest
176
192
  managed file 設定。
177
193
 
178
194
  `guardrails` 只安裝 command policy,不會啟用 Stop verification。Stop 是獨立的
179
- config v2 feature,必須明確啟用且至少提供一個已確認的 command:
195
+ config v3 feature,必須明確啟用且至少提供一個已確認的 command:
180
196
 
181
197
  ```json
182
198
  {
@@ -3,12 +3,12 @@
3
3
  此目錄是英文規範的繁體中文導讀;規範 rule ID 以英文版本為準。
4
4
 
5
5
  Harness adapter 規則涵蓋 agy、Codex、Claude Code 與 opencode。opencode 整合是
6
- 產生的 local plugin,不管理 `opencode.json`。agy 在 project scope 共用
7
- `AGENTS.md` routing、使用原生 hooks,對不足以完整支援 loop 的 lifecycle
6
+ 產生的 local plugin,不管理 `opencode.json`。agy 在 project scope 使用
7
+ `GEMINI.md` routing 與原生 hooks,對不足以完整支援 loop 的 lifecycle
8
8
  能力明確標示 degraded。
9
9
 
10
- Configuration 與 manifest 分開版本化。Config v1 會遷移為預設 disabled Stop
11
- verification 的 config v2;變更 capability 後必須執行經確認的 project
10
+ Configuration 與 manifest 分開版本化。舊 config 會遷移為 Stop verification 與
11
+ agy completion gate 預設 disabled 的 config v3;變更 capability 後必須執行經確認的 project
12
12
  `agent-ops update`,有 verifier 時會一併更新 trust。Stop verification 必須明確啟用、具備 trust、
13
13
  為 report-only,且永遠不會完成 task。Dry-run plan 會隱藏 foreign settings
14
14
  內容;routing migration 一旦套用即為單向。
@@ -92,6 +92,7 @@ script,也不得改變一般 permission request。
92
92
  | --- | --- | --- | --- | --- |
93
93
  | lifecycle-summary | degraded | supported | supported | degraded |
94
94
  | command-policy | supported | unknown | supported | supported |
95
+ | completion-gate | supported | unsupported | unsupported | unsupported |
95
96
  | optional-stop-verify | degraded | unsupported | supported | degraded |
96
97
 
97
98
  Runtime-failure 處理中,只有 `command-policy` 為 fail-closed。當已安裝的 config
@@ -101,11 +102,13 @@ denial 或 unavailable-runtime error。Codex 維持 `unknown` 且絕不輸出 de
101
102
  Fixture test 只斷言這些 wire 與 plugin shape;它們不證明 host 會實際遵守 denial。
102
103
  每個 `SessionStart` 與 `Stop` failure path 都維持 fail-open。
103
104
 
104
- agy adapter 在 project scope Codex、OpenCode 共用 `AGENTS.md` routing;user
105
+ agy adapter 在 project scope 使用原生 `GEMINI.md` routing
106
+ `.agent-ops/GEMINI.md`;user
105
107
  scope 管理 `.agent-ops/GEMINI.md` 與 shared `.gemini/GEMINI.md` rule surface。
106
108
  其 native hook 使用 camelCase input,command-policy block 回傳
107
- `decision: "deny"`,且不會強迫 Stop 繼續。在 Windows 透過 `cmd /c` 呼叫產生的
108
- command。
109
+ `decision: "deny"`。只有明確啟用 completion gate 時,未具完備證據的 final
110
+ changed conversation 才回傳 `decision: "continue"`;唯讀 conversation 正常
111
+ 結束。在 Windows 透過 `cmd /c` 呼叫產生的 command。
109
112
 
110
113
  Stop verification 必須明確啟用、具備 trust、為 report-only 且預設 disabled。
111
114
  每個 Stop 結果都會讓 native harness 繼續,最多攜帶有界 command evidence,永遠
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kylecheng3146/agent-ops",
3
- "version": "0.1.20",
3
+ "version": "0.1.21",
4
4
  "description": "Evidence-driven development loops for agy, Codex, Claude Code, and opencode",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -14,7 +14,7 @@
14
14
  ],
15
15
  "properties": {
16
16
  "schemaVersion": {
17
- "const": 2
17
+ "const": 3
18
18
  },
19
19
  "profiles": {
20
20
  "type": "array",
@@ -75,8 +75,18 @@
75
75
  "features": {
76
76
  "type": "object",
77
77
  "additionalProperties": false,
78
- "required": ["stopVerification"],
78
+ "required": ["completionGate", "stopVerification"],
79
79
  "properties": {
80
+ "completionGate": {
81
+ "type": "object",
82
+ "additionalProperties": false,
83
+ "required": ["enabled"],
84
+ "properties": {
85
+ "enabled": {
86
+ "type": "boolean"
87
+ }
88
+ }
89
+ },
80
90
  "stopVerification": {
81
91
  "type": "object",
82
92
  "additionalProperties": false,