@fitlab-ai/agent-infra 0.9.8 → 0.9.9
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.
- package/README.md +1 -1
- package/README.zh-CN.md +1 -1
- package/dist/bin/internal-cli.js +6 -1
- package/dist/lib/agent-clients/adapters/codex-lifecycle/app-server.js +58 -21
- package/dist/lib/agent-clients/adapters/codex-lifecycle/build-identity.js +8 -1
- package/dist/lib/agent-clients/adapters/codex-lifecycle/capability-store.js +173 -10
- package/dist/lib/agent-clients/adapters/codex-lifecycle/controller-context.js +147 -0
- package/dist/lib/agent-clients/adapters/codex-lifecycle/evidence.js +14 -0
- package/dist/lib/agent-clients/adapters/codex-lifecycle/sandbox-controller.js +56 -67
- package/dist/lib/git/workflow.js +10 -1
- package/dist/lib/internal/codex-lifecycle.js +19 -5
- package/dist/lib/internal/codex-sandbox-controller.js +6 -13
- package/dist/lib/internal/git-workflow.js +5 -7
- package/dist/lib/internal/platform-pr.js +20 -7
- package/dist/lib/internal/release-workflow.js +2 -1
- package/dist/lib/internal/sandbox-control.js +79 -2
- package/dist/lib/internal/task-finalization.js +54 -0
- package/dist/lib/internal/task-orchestration.js +156 -291
- package/dist/lib/platform/pr-summary.js +48 -10
- package/dist/lib/platform/pull-requests.js +205 -41
- package/dist/lib/sandbox/commands/rm.js +316 -55
- package/dist/lib/sandbox/control/client.js +190 -6
- package/dist/lib/sandbox/control/controller-registration.js +273 -0
- package/dist/lib/sandbox/control/executor.js +137 -5
- package/dist/lib/sandbox/control/lifecycle.js +3 -1
- package/dist/lib/sandbox/control/protocol.js +67 -6
- package/dist/lib/sandbox/index.js +5 -3
- package/dist/lib/sandbox/managed-fs.js +5 -0
- package/dist/lib/sandbox/task-resolver.js +50 -6
- package/dist/lib/sandbox/workspace-identity.js +27 -0
- package/dist/lib/sandbox/worktree-safety.js +215 -2
- package/dist/lib/task/codex-orchestration.js +158 -33
- package/dist/lib/task/commands/status.js +59 -1
- package/dist/lib/task/commit-operation.js +335 -0
- package/dist/lib/task/commit-policy.js +18 -0
- package/dist/lib/task/delegation-receipts.js +243 -2
- package/dist/lib/task/finalization.js +567 -0
- package/dist/lib/task/operation-outcome.js +33 -0
- package/dist/lib/task/orchestration.js +187 -761
- package/dist/lib/task/short-id.js +59 -1
- package/dist/lib/task/task-execution-lock.js +6 -1
- package/dist/lib/task/verification-engine.js +113 -60
- package/dist/lib/task/verification.js +2 -1
- package/dist/lib/task/workflow-warning-intents.js +50 -1
- package/dist/lifecycle-build-manifest.json +3 -3
- package/lib/agent-clients/adapters/codex-lifecycle/app-server.ts +61 -19
- package/lib/agent-clients/adapters/codex-lifecycle/build-identity.ts +12 -0
- package/lib/agent-clients/adapters/codex-lifecycle/capability-store.ts +276 -12
- package/lib/agent-clients/adapters/codex-lifecycle/controller-context.ts +180 -0
- package/lib/agent-clients/adapters/codex-lifecycle/evidence.ts +19 -0
- package/lib/agent-clients/adapters/codex-lifecycle/manifest-files.json +9 -1
- package/lib/agent-clients/adapters/codex-lifecycle/sandbox-controller.ts +83 -91
- package/lib/git/workflow.ts +11 -2
- package/lib/internal/codex-lifecycle.ts +18 -5
- package/lib/internal/codex-sandbox-controller.ts +6 -12
- package/lib/internal/git-workflow.ts +5 -6
- package/lib/internal/platform-pr.ts +14 -7
- package/lib/internal/release-workflow.ts +2 -1
- package/lib/internal/sandbox-control.ts +92 -2
- package/lib/internal/task-finalization.ts +68 -0
- package/lib/internal/task-orchestration.ts +20 -103
- package/lib/platform/pr-summary.ts +55 -11
- package/lib/platform/pull-requests.ts +211 -41
- package/lib/sandbox/commands/rm.ts +413 -61
- package/lib/sandbox/control/client.ts +255 -6
- package/lib/sandbox/control/controller-registration.ts +347 -0
- package/lib/sandbox/control/executor.ts +163 -5
- package/lib/sandbox/control/lifecycle.ts +2 -1
- package/lib/sandbox/control/protocol.ts +80 -7
- package/lib/sandbox/index.ts +5 -3
- package/lib/sandbox/managed-fs.ts +5 -0
- package/lib/sandbox/task-resolver.ts +58 -7
- package/lib/sandbox/workspace-identity.ts +50 -2
- package/lib/sandbox/workspace-view.ts +3 -3
- package/lib/sandbox/worktree-safety.ts +236 -2
- package/lib/task/codex-orchestration.ts +167 -33
- package/lib/task/commands/status.ts +78 -1
- package/lib/task/commit-operation.ts +430 -0
- package/lib/task/commit-policy.ts +30 -0
- package/lib/task/delegation-receipts.ts +258 -1
- package/lib/task/finalization.ts +719 -0
- package/lib/task/operation-outcome.ts +48 -0
- package/lib/task/orchestration.ts +217 -982
- package/lib/task/short-id.ts +65 -1
- package/lib/task/task-execution-lock.ts +10 -1
- package/lib/task/verification-engine.ts +118 -63
- package/lib/task/verification.ts +3 -2
- package/lib/task/workflow-warning-intents.ts +57 -2
- package/package.json +2 -2
- package/templates/.agents/QUICKSTART.en.md +2 -2
- package/templates/.agents/QUICKSTART.zh-CN.md +2 -2
- package/templates/.agents/hooks/lifecycle-delegation.js +1 -21
- package/templates/.agents/rules/lifecycle-orchestration.en.md +1 -1
- package/templates/.agents/rules/lifecycle-orchestration.zh-CN.md +1 -1
- package/templates/.agents/rules/task-management.en.md +2 -2
- package/templates/.agents/rules/task-management.zh-CN.md +2 -2
- package/templates/.agents/skills/block-task/SKILL.en.md +2 -4
- package/templates/.agents/skills/block-task/SKILL.zh-CN.md +2 -4
- package/templates/.agents/skills/cancel-task/SKILL.en.md +3 -3
- package/templates/.agents/skills/cancel-task/SKILL.zh-CN.md +3 -3
- package/templates/.agents/skills/close-codescan/SKILL.en.md +6 -2
- package/templates/.agents/skills/close-codescan/SKILL.zh-CN.md +6 -2
- package/templates/.agents/skills/close-dependabot/SKILL.en.md +6 -2
- package/templates/.agents/skills/close-dependabot/SKILL.zh-CN.md +6 -2
- package/templates/.agents/skills/commit/SKILL.en.md +41 -125
- package/templates/.agents/skills/commit/SKILL.zh-CN.md +52 -123
- package/templates/.agents/skills/commit/reference/commit-message.en.md +1 -1
- package/templates/.agents/skills/commit/reference/commit-message.zh-CN.md +1 -1
- package/templates/.agents/skills/commit/reference/commit-orchestration.en.md +14 -43
- package/templates/.agents/skills/commit/reference/commit-orchestration.zh-CN.md +14 -49
- package/templates/.agents/skills/commit/reference/pr-summary-sync.en.md +1 -1
- package/templates/.agents/skills/commit/reference/pr-summary-sync.zh-CN.md +1 -1
- package/templates/.agents/skills/commit/reference/task-status-update.en.md +2 -35
- package/templates/.agents/skills/commit/reference/task-status-update.zh-CN.md +2 -35
- package/templates/.agents/skills/complete-task/SKILL.en.md +31 -38
- package/templates/.agents/skills/complete-task/SKILL.zh-CN.md +31 -38
- package/templates/.agents/skills/complete-task/config/verify.en.json +1 -0
- package/templates/.agents/skills/complete-task/config/verify.zh-CN.json +1 -0
- package/templates/.agents/skills/complete-task/reference/external-delivery.en.md +1 -1
- package/templates/.agents/skills/complete-task/reference/external-delivery.zh-CN.md +1 -1
- package/templates/.agents/skills/create-pr/SKILL.en.md +6 -4
- package/templates/.agents/skills/create-pr/SKILL.zh-CN.md +6 -4
- package/templates/.agents/skills/create-pr/reference/comment-publish.en.md +2 -2
- package/templates/.agents/skills/create-pr/reference/comment-publish.zh-CN.md +2 -2
- package/templates/.agents/skills/run-task/SKILL.en.md +5 -5
- package/templates/.agents/skills/run-task/SKILL.zh-CN.md +5 -5
- package/templates/.agents/skills/watch-pr/reference/monitor-and-heal.en.md +1 -1
- package/templates/.agents/skills/watch-pr/reference/monitor-and-heal.zh-CN.md +1 -1
- package/templates/.codex/hooks.json +4 -4
- package/dist/lib/task/commit-finalization.js +0 -305
- package/dist/lib/task/commit-intent.js +0 -165
- package/lib/task/commit-finalization.ts +0 -419
- package/lib/task/commit-intent.ts +0 -230
|
@@ -99,7 +99,7 @@ Keep the gate output in your reply as fresh evidence. Do not claim completion wi
|
|
|
99
99
|
|
|
100
100
|
> Before rendering next steps, read `.agents/rules/next-step-output.md`, invoke the shared helper only for the selected scenario, and insert its stdout at `{next-step-commands}`.
|
|
101
101
|
|
|
102
|
-
> **Optional sandbox-cleanup hint (gated)**: Render the "Optional: clean up this task's sandbox" block — placed after "Archived to" and before "To unblock" in the output below — only when BOTH (1) `.agents/.airc.json` has a `sandbox` field and (2) task.md's `branch` field exists and is not `main` / `master`; otherwise omit the whole block.
|
|
102
|
+
> **Optional sandbox-cleanup hint (gated)**: Render the "Optional: clean up this task's sandbox" block — placed after "Archived to" and before "To unblock" in the output below — only when BOTH (1) `.agents/.airc.json` has a `sandbox` field and (2) task.md's `branch` field exists and is not `main` / `master`; otherwise omit the whole block. Blocked task-bound sandboxes are protected from automatic batch cleanup; if cleanup is necessary, manually verify their identity first. This block is independent of "Next step" semantics.
|
|
103
103
|
|
|
104
104
|
Output format:
|
|
105
105
|
Populate `{next-step-commands}` for this scenario by running `agent-infra-internal agent-client next-steps --skill check-task --task-ref {task-ref}`.
|
|
@@ -112,9 +112,7 @@ Required to unblock: {what's needed}
|
|
|
112
112
|
Archived to: .agents/workspace/blocked/{task-id}/
|
|
113
113
|
|
|
114
114
|
Optional: clean up this task's sandbox
|
|
115
|
-
(The task is blocked and moved to blocked/;
|
|
116
|
-
|
|
117
|
-
ai sandbox rm {branch}
|
|
115
|
+
(The task is blocked and moved to blocked/; task-bound sandboxes are protected from automatic `ai sandbox rm --unbound` cleanup. If cleanup is necessary, manually verify the container, control manifest, and worktree identity first.)
|
|
118
116
|
|
|
119
117
|
To unblock when the issue is resolved:
|
|
120
118
|
agent-infra-internal task-lifecycle {task-id} activate --agent {standard-agent-token} --note "{activation note}"
|
|
@@ -100,7 +100,7 @@ agent-infra-internal task-verify {task-id} block-task.completed --format text
|
|
|
100
100
|
|
|
101
101
|
> 渲染下一步前先读取 `.agents/rules/next-step-output.md`,仅为已选场景调用统一 helper,并将 stdout 填入 `{next-step-commands}`。
|
|
102
102
|
|
|
103
|
-
> **可选沙箱清理提示(门控渲染)**:仅当同时满足 (1) `.agents/.airc.json` 存在 `sandbox` 字段、(2) task.md 的 `branch` 字段存在且不是 `main` / `master`
|
|
103
|
+
> **可选沙箱清理提示(门控渲染)**:仅当同时满足 (1) `.agents/.airc.json` 存在 `sandbox` 字段、(2) task.md 的 `branch` 字段存在且不是 `main` / `master` 时,才渲染下方输出中「归档路径」之后、「解除阻塞时执行」之前的「可选:清理本任务的沙箱」块;任一不满足则整段省略。blocked task-bound 沙箱受保护,不通过自动批量清理;如确需清理,请人工核对身份。该块独立于「下一步」语义。
|
|
104
104
|
|
|
105
105
|
输出格式:
|
|
106
106
|
使用 `agent-infra-internal agent-client next-steps --skill check-task --task-ref {task-ref}` 生成本场景的 `{next-step-commands}`。
|
|
@@ -113,9 +113,7 @@ agent-infra-internal task-verify {task-id} block-task.completed --format text
|
|
|
113
113
|
归档路径:.agents/workspace/blocked/{task-id}/
|
|
114
114
|
|
|
115
115
|
可选:清理本任务的沙箱
|
|
116
|
-
(任务已阻塞并移到 blocked
|
|
117
|
-
|
|
118
|
-
ai sandbox rm {branch}
|
|
116
|
+
(任务已阻塞并移到 blocked/,task-bound 沙箱受保护,不会被 `ai sandbox rm --unbound` 自动删除;如确需清理,请先人工核对容器、控制清单和工作树身份。)
|
|
119
117
|
|
|
120
118
|
解除阻塞时执行:
|
|
121
119
|
agent-infra-internal task-lifecycle {task-id} activate --agent {standard-agent-token} --note "{恢复说明}"
|
|
@@ -106,7 +106,7 @@ Keep the gate output in your reply as fresh evidence. Do not claim completion wi
|
|
|
106
106
|
|
|
107
107
|
> Before rendering next steps, read `.agents/rules/next-step-output.md`, invoke the shared helper only for the selected scenario, and insert its stdout at `{next-step-commands}`.
|
|
108
108
|
|
|
109
|
-
> **Optional sandbox-cleanup hint (gated)**: Render the "Optional: clean up this task's sandbox" block — placed after "Target path" and before "Next step" in the output below — only when BOTH (1) `.agents/.airc.json` has a `sandbox` field and (2) task.md's `branch` field exists and is not `main` / `master`; otherwise omit the whole block.
|
|
109
|
+
> **Optional sandbox-cleanup hint (gated)**: Render the "Optional: clean up this task's sandbox" block — placed after "Target path" and before "Next step" in the output below — only when BOTH (1) `.agents/.airc.json` has a `sandbox` field and (2) task.md's `branch` field exists and is not `main` / `master`; otherwise omit the whole block. Use the full `{task-id}` for cleanup; do not substitute the branch name. This block is independent of "Next steps" semantics.
|
|
110
110
|
|
|
111
111
|
Output format:
|
|
112
112
|
Populate `{next-step-commands}` for this scenario by running `agent-infra-internal agent-client next-steps --skill check-task --task-ref {task-ref}`.
|
|
@@ -119,9 +119,9 @@ Status label: {status-label or skipped}
|
|
|
119
119
|
Target path: .agents/workspace/completed/{task-id}/
|
|
120
120
|
|
|
121
121
|
Optional: clean up this task's sandbox
|
|
122
|
-
(The task is archived; the sandbox container and per-branch config directory are not reclaimed automatically. Run this if you no longer need them:)
|
|
122
|
+
(The task is completed and archived; the sandbox container and per-branch config directory are not reclaimed automatically. Run this if you no longer need them:)
|
|
123
123
|
|
|
124
|
-
ai sandbox rm {
|
|
124
|
+
ai sandbox rm {task-id}
|
|
125
125
|
|
|
126
126
|
Next step - inspect the moved task:
|
|
127
127
|
{next-step-commands}
|
|
@@ -105,7 +105,7 @@ agent-infra-internal task-verify {task-id} cancel-task.completed --format text
|
|
|
105
105
|
|
|
106
106
|
> 渲染下一步前先读取 `.agents/rules/next-step-output.md`,仅为已选场景调用统一 helper,并将 stdout 填入 `{next-step-commands}`。
|
|
107
107
|
|
|
108
|
-
> **可选沙箱清理提示(门控渲染)**:仅当同时满足 (1) `.agents/.airc.json` 存在 `sandbox` 字段、(2) task.md 的 `branch` 字段存在且不是 `main` / `master`
|
|
108
|
+
> **可选沙箱清理提示(门控渲染)**:仅当同时满足 (1) `.agents/.airc.json` 存在 `sandbox` 字段、(2) task.md 的 `branch` 字段存在且不是 `main` / `master` 时,才渲染下方输出中「目标路径」之后、「下一步」之前的「可选:清理本任务的沙箱」块;任一不满足则整段省略。清理时使用完整 `{task-id}`,不要改用 branch 名。该块独立于「下一步」语义。
|
|
109
109
|
|
|
110
110
|
输出格式:
|
|
111
111
|
使用 `agent-infra-internal agent-client next-steps --skill check-task --task-ref {task-ref}` 生成本场景的 `{next-step-commands}`。
|
|
@@ -118,9 +118,9 @@ agent-infra-internal task-verify {task-id} cancel-task.completed --format text
|
|
|
118
118
|
目标路径:.agents/workspace/completed/{task-id}/
|
|
119
119
|
|
|
120
120
|
可选:清理本任务的沙箱
|
|
121
|
-
|
|
121
|
+
(任务已完成并归档,沙箱容器和 per-branch 配置目录不会自动回收。如果不再需要可执行:)
|
|
122
122
|
|
|
123
|
-
ai sandbox rm {
|
|
123
|
+
ai sandbox rm {task-id}
|
|
124
124
|
|
|
125
125
|
下一步 - 查看已转移任务:
|
|
126
126
|
{next-step-commands}
|
|
@@ -93,7 +93,7 @@ Only `status=applied|no-op` means local archival completed. If the API dismissal
|
|
|
93
93
|
|
|
94
94
|
> Before rendering next steps, read `.agents/rules/next-step-output.md`, invoke the shared helper only for the selected scenario, and insert its stdout at `{next-step-commands}`.
|
|
95
95
|
|
|
96
|
-
> **Optional sandbox-cleanup hint (gated)**: Render the
|
|
96
|
+
> **Optional sandbox-cleanup hint (gated)**: Render the cleanup hint only when ALL of (1) `.agents/.airc.json` has a `sandbox` field, (2) step 7 located a related task by the alert number, (3) that task's task.md `branch` exists and is not `main` / `master`, and (4) task state and sandbox workspace identity were cross-validated without conflict. The state and identity select the command: use the full `{task-id}` only for `completed` + `task-bound`; use `{branch}` only when `branch-only` identity was explicitly verified; omit an automatic cleanup command for `active`; for `blocked` / `archive`, render a manual-verification note without a command. If state or identity is missing or conflicting, omit the whole block. Dismissing the alert never implies that the task is completed. This block is independent of "Next step" semantics.
|
|
97
97
|
|
|
98
98
|
Populate `{next-step-commands}` for this scenario by running `agent-infra-internal agent-client next-steps --skill complete-task --task-ref {task-ref}`.
|
|
99
99
|
|
|
@@ -110,7 +110,11 @@ View: {html_url}
|
|
|
110
110
|
Note: it can be reopened on the platform if necessary.
|
|
111
111
|
|
|
112
112
|
Optional: clean up this task's sandbox
|
|
113
|
-
(
|
|
113
|
+
(Only for a `completed` related task with `task-bound` identity, use the full task ID:)
|
|
114
|
+
|
|
115
|
+
ai sandbox rm {task-id}
|
|
116
|
+
|
|
117
|
+
(Only when `branch-only` identity was explicitly verified, use the branch name:)
|
|
114
118
|
|
|
115
119
|
ai sandbox rm {branch}
|
|
116
120
|
|
|
@@ -93,7 +93,7 @@ agent-infra-internal task-lifecycle {task-id} close-codescan --agent {standard-a
|
|
|
93
93
|
|
|
94
94
|
> 渲染下一步前先读取 `.agents/rules/next-step-output.md`,仅为已选场景调用统一 helper,并将 stdout 填入 `{next-step-commands}`。
|
|
95
95
|
|
|
96
|
-
> **可选沙箱清理提示(门控渲染)**:仅当同时满足 (1) `.agents/.airc.json` 存在 `sandbox` 字段、(2) 第 7 步按告警号定位到了关联任务、(3)
|
|
96
|
+
> **可选沙箱清理提示(门控渲染)**:仅当同时满足 (1) `.agents/.airc.json` 存在 `sandbox` 字段、(2) 第 7 步按告警号定位到了关联任务、(3) 该任务 task.md 的 `branch` 存在且不是 `main` / `master`、(4) 任务状态与沙箱 workspace identity 已交叉校验且无冲突时,才渲染清理提示。状态和 identity 决定命令:仅 `completed` + `task-bound` 使用完整 `{task-id}`;仅在明确核对为 `branch-only` 时使用 `{branch}`;`active` 不渲染自动清理命令;`blocked` / `archive` 只渲染人工核对提示,不渲染命令。状态或 identity 缺失、冲突时整段省略;关闭告警本身不能推断任务已完成。该块独立于「下一步」语义。
|
|
97
97
|
|
|
98
98
|
使用 `agent-infra-internal agent-client next-steps --skill complete-task --task-ref {task-ref}` 生成本场景的 `{next-step-commands}`。
|
|
99
99
|
|
|
@@ -110,7 +110,11 @@ Code Scanning 告警 #{alert-number} 已关闭。
|
|
|
110
110
|
注意:如有需要,可在 平台上重新打开。
|
|
111
111
|
|
|
112
112
|
可选:清理本任务的沙箱
|
|
113
|
-
|
|
113
|
+
(仅在关联任务为 `completed` 且 identity 为 `task-bound` 时,使用完整任务 ID:)
|
|
114
|
+
|
|
115
|
+
ai sandbox rm {task-id}
|
|
116
|
+
|
|
117
|
+
(仅在明确核对 identity 为 `branch-only` 时,使用分支名:)
|
|
114
118
|
|
|
115
119
|
ai sandbox rm {branch}
|
|
116
120
|
|
|
@@ -101,7 +101,7 @@ Only `status=applied|no-op` means local archival completed. If the API dismissal
|
|
|
101
101
|
|
|
102
102
|
> Before rendering next steps, read `.agents/rules/next-step-output.md`, invoke the shared helper only for the selected scenario, and insert its stdout at `{next-step-commands}`.
|
|
103
103
|
|
|
104
|
-
> **Optional sandbox-cleanup hint (gated)**: Render the
|
|
104
|
+
> **Optional sandbox-cleanup hint (gated)**: Render the cleanup hint only when ALL of (1) `.agents/.airc.json` has a `sandbox` field, (2) step 7 located a related task by the alert number, (3) that task's task.md `branch` exists and is not `main` / `master`, and (4) task state and sandbox workspace identity were cross-validated without conflict. The state and identity select the command: use the full `{task-id}` only for `completed` + `task-bound`; use `{branch}` only when `branch-only` identity was explicitly verified; omit an automatic cleanup command for `active`; for `blocked` / `archive`, render a manual-verification note without a command. If state or identity is missing or conflicting, omit the whole block. Dismissing the alert never implies that the task is completed. This block is independent of "Next step" semantics.
|
|
105
105
|
|
|
106
106
|
Populate `{next-step-commands}` for this scenario by running `agent-infra-internal agent-client next-steps --skill complete-task --task-ref {task-ref}`.
|
|
107
107
|
|
|
@@ -118,7 +118,11 @@ View: {alert-url}
|
|
|
118
118
|
Note: it can be reopened on the platform if necessary.
|
|
119
119
|
|
|
120
120
|
Optional: clean up this task's sandbox
|
|
121
|
-
(
|
|
121
|
+
(Only for a `completed` related task with `task-bound` identity, use the full task ID:)
|
|
122
|
+
|
|
123
|
+
ai sandbox rm {task-id}
|
|
124
|
+
|
|
125
|
+
(Only when `branch-only` identity was explicitly verified, use the branch name:)
|
|
122
126
|
|
|
123
127
|
ai sandbox rm {branch}
|
|
124
128
|
|
|
@@ -101,7 +101,7 @@ agent-infra-internal task-lifecycle {task-id} close-dependabot --agent {standard
|
|
|
101
101
|
|
|
102
102
|
> 渲染下一步前先读取 `.agents/rules/next-step-output.md`,仅为已选场景调用统一 helper,并将 stdout 填入 `{next-step-commands}`。
|
|
103
103
|
|
|
104
|
-
> **可选沙箱清理提示(门控渲染)**:仅当同时满足 (1) `.agents/.airc.json` 存在 `sandbox` 字段、(2) 第 7 步按告警号定位到了关联任务、(3)
|
|
104
|
+
> **可选沙箱清理提示(门控渲染)**:仅当同时满足 (1) `.agents/.airc.json` 存在 `sandbox` 字段、(2) 第 7 步按告警号定位到了关联任务、(3) 该任务 task.md 的 `branch` 存在且不是 `main` / `master`、(4) 任务状态与沙箱 workspace identity 已交叉校验且无冲突时,才渲染清理提示。状态和 identity 决定命令:仅 `completed` + `task-bound` 使用完整 `{task-id}`;仅在明确核对为 `branch-only` 时使用 `{branch}`;`active` 不渲染自动清理命令;`blocked` / `archive` 只渲染人工核对提示,不渲染命令。状态或 identity 缺失、冲突时整段省略;关闭告警本身不能推断任务已完成。该块独立于「下一步」语义。
|
|
105
105
|
|
|
106
106
|
使用 `agent-infra-internal agent-client next-steps --skill complete-task --task-ref {task-ref}` 生成本场景的 `{next-step-commands}`。
|
|
107
107
|
|
|
@@ -118,7 +118,11 @@ agent-infra-internal task-lifecycle {task-id} close-dependabot --agent {standard
|
|
|
118
118
|
注意:如有需要,可在平台侧重新打开。
|
|
119
119
|
|
|
120
120
|
可选:清理本任务的沙箱
|
|
121
|
-
|
|
121
|
+
(仅在关联任务为 `completed` 且 identity 为 `task-bound` 时,使用完整任务 ID:)
|
|
122
|
+
|
|
123
|
+
ai sandbox rm {task-id}
|
|
124
|
+
|
|
125
|
+
(仅在明确核对 identity 为 `branch-only` 时,使用分支名:)
|
|
122
126
|
|
|
123
127
|
ai sandbox rm {branch}
|
|
124
128
|
|
|
@@ -1,169 +1,85 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: commit
|
|
3
3
|
description: >
|
|
4
|
-
Commit
|
|
5
|
-
Use when
|
|
4
|
+
Commit current changes to Git.
|
|
5
|
+
Use when completed work needs to be recorded as a Git commit.
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
# Commit
|
|
9
|
-
> `--agent` values follow the "Collaborator Token Specification" in `.agents/rules/task-management.md`: standard AI short tokens (`claude`/`codex`/`antigravity`/`opencode`/`cursor`), long-name normalization (`claude-code`->`claude`, `antigravity-cli`->`antigravity`), or the `human` manual exception.
|
|
8
|
+
# Commit code
|
|
10
9
|
|
|
10
|
+
Use the standard agent token from `.agents/rules/task-management.md`.
|
|
11
11
|
|
|
12
|
-
Create a Git commit without overwriting
|
|
12
|
+
Create a Git commit without overwriting local work, and update the associated task only when a task context exists.
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
The commit core returns one primary result: `committed`, `no_op`, `committed_with_warnings`, `failed`, or `blocked`, with structured `warnings`. A push failure or protected-branch policy never rolls back a local commit.
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
## Task context
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
Resolve the optional task scope with `agent-infra-internal task-context resolve {task-scope}`.
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
- An explicit task-resolution failure stops the operation.
|
|
21
|
+
- Without an explicit task scope, only `TASK_CONTEXT_NOT_FOUND` may enter taskless direct mode; detached HEAD, malformed candidates, and multiple matches fail closed.
|
|
22
|
+
- If the literal `--orchestrated` is present in the business operands, use `mode=orchestrated`; otherwise use `mode=direct`. Never infer the mode from files or environment.
|
|
23
|
+
- Taskless direct mode does not read, create, or complete task intent, receipt, checkpoint, or task.md records.
|
|
24
|
+
- Task-bound direct mode does not require a delegation receipt; orchestrated mode must validate the matching activated commit receipt and capability in the core.
|
|
25
|
+
- After resolution, use only the core-returned `taskId`; never infer task identity from the environment, branch, or filename.
|
|
21
26
|
|
|
22
|
-
|
|
23
|
-
|------|------|
|
|
24
|
-
| "The tests already ran earlier, so I do not need to rerun them." | The staged content is the current truth; before committing, re-check `git status` and `git diff` instead of relying on memory. |
|
|
25
|
-
| "`git add -A` is faster." | `git add -A` and `git add .` are forbidden; stage only explicitly listed files to avoid including unrelated changes. |
|
|
26
|
-
| "This file has a copyright header, but the year can wait." | If you changed it, update the copyright year using `date +%Y`; this is a hard pre-commit check. |
|
|
27
|
+
## 1. Inspect local changes
|
|
27
28
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
> The entry point may omit the task ref and also accepts a legacy positional ref or `--task <ref>` / `-t <ref>`. Separate task scope from the full arguments while preserving every business operand, then call `agent-infra-internal task-context resolve {task-scope}` where `{task-scope}` is empty, one positional ref, or one task flag. Read only `taskId` from the structured result and bind `{task-id}` to that full `TASK-YYYYMMDD-HHMMSS` for downstream commands. Pass through resolution failures without scanning tasks locally.
|
|
31
|
-
|
|
32
|
-
Without explicit task scope, only `TASK_CONTEXT_NOT_FOUND` may continue through the existing bare-commit path. Detached HEAD, damaged candidates, or multiple matches are ambiguity errors. Any explicit task-scope failure is fatal.
|
|
33
|
-
|
|
34
|
-
## Step Start: Recover or Create a Controlled Attempt
|
|
35
|
-
|
|
36
|
-
When `{task-id}` is resolved, call `commit-status` first. Finalize `recoverable`; safely clear `prepared` and query status again; reuse `retryable-start` through `commit-recover --agent {standard-agent-token}`. Fail closed for `invalid` / `conflict` / `orphaned-start`. For `idle`, call `commit-start --agent {standard-agent-token}` so the core atomically writes the structured started entry and returns its attempt/baseline.
|
|
37
|
-
|
|
38
|
-
Read `{commit-attempt}` only from structured `commit-start` / `commit-recover` output. Never hand-write, copy, or guess an attempt. A bare commit without task context skips this protocol.
|
|
39
|
-
|
|
40
|
-
## 1. Check Local Modifications (CRITICAL)
|
|
41
|
-
|
|
42
|
-
Before any edit, inspect:
|
|
29
|
+
Before editing, run:
|
|
43
30
|
|
|
44
31
|
```bash
|
|
45
32
|
git status --short
|
|
46
33
|
git diff
|
|
47
34
|
```
|
|
48
35
|
|
|
49
|
-
Respect existing user changes
|
|
50
|
-
|
|
51
|
-
## 2. Update Copyright Headers
|
|
52
|
-
|
|
53
|
-
Use the current year dynamically and only update files that are already modified.
|
|
54
|
-
|
|
55
|
-
> The full copyright workflow lives in `reference/copyright-check.md`. Read `reference/copyright-check.md` before editing any header.
|
|
56
|
-
|
|
57
|
-
## 3. Build the Commit Message
|
|
58
|
-
|
|
59
|
-
Review status, diff, and recent history, then prepare a Conventional Commit with the correct co-author lines.
|
|
60
|
-
|
|
61
|
-
> Commit message rules, examples, and multi-agent co-authorship details live in `reference/commit-message.md`. Read `reference/commit-message.md` before writing the commit.
|
|
62
|
-
|
|
63
|
-
## 4. Create the Commit
|
|
64
|
-
|
|
65
|
-
When `{task-id}` was resolved, read `reference/commit-orchestration.md` before this step and complete `commit-begin` before any successful Git/platform side effect. A taskless Git-only commit skips the intent protocol entirely.
|
|
66
|
-
|
|
67
|
-
Detect the restricted push-only scenario first. Otherwise write message, explicit paths, and expected HEAD/tree to JSON and call `agent-infra-internal git-workflow commit --input {file}`.
|
|
68
|
-
|
|
69
|
-
Immediately after a normal commit succeeds, run the committed checkpoint from that reference. If the checkpoint fails, retain the intent and stop before push or success-state writes.
|
|
70
|
-
|
|
71
|
-
If this commit is associated with a task and a `review-code` artifact exists, read the highest-round `review-code` artifact before committing:
|
|
72
|
-
- If that artifact's `Overall Verdict` / `总体结论` is Approved, parse `R`, `F`, and `Reviewed Snapshot Tree` / `审查快照树` (`T`)
|
|
73
|
-
- After staging the explicit files, record `pre_head=$(git rev-parse HEAD)` and use the helper's JSON mode to generate the complete worktree tree `W` and normalized staged tree `S`
|
|
74
|
-
- Before `git commit`, require `pre_head == R && W == T && S == T`; use the helper's `compare` mode to produce added, missing, and different diagnostics for both worktree and staged snapshots
|
|
75
|
-
- If any condition fails, enter Scenario 4 in `reference/task-status-update.md`; do not run `git commit`, push, successful state updates, PR summary sync, or the completion gate
|
|
76
|
-
- After all comparisons match and the commit succeeds, the Step 6 `commit-complete` core finalizer atomically writes `last_reviewed_commit` and Commit done; the caller must not write them
|
|
77
|
-
- Do not scan backward to earlier Approved artifacts; the highest-round `review-code` artifact is the only authoritative source
|
|
78
|
-
|
|
79
|
-
## 5. Push to the Existing PR When Applicable
|
|
36
|
+
Respect existing user changes and stop on a conflict according to the no-mid-flow-questions rule.
|
|
80
37
|
|
|
81
|
-
|
|
38
|
+
## 2. Update copyright years
|
|
82
39
|
|
|
83
|
-
|
|
40
|
+
Get the current year dynamically and update only touched files that contain a copyright header. Read `reference/copyright-check.md` for the complete procedure.
|
|
84
41
|
|
|
85
|
-
|
|
42
|
+
## 3. Create the commit message
|
|
86
43
|
|
|
87
|
-
|
|
44
|
+
Review status, diff, and recent history. Use an imperative Conventional Commit message and read `reference/commit-message.md` for co-author handling.
|
|
88
45
|
|
|
89
|
-
|
|
46
|
+
## 4. Call the single commit core
|
|
90
47
|
|
|
91
|
-
|
|
48
|
+
Read `reference/commit-orchestration.md` before this step.
|
|
92
49
|
|
|
93
|
-
|
|
94
|
-
- Platform unavailable / unauthenticated / detection failed / no open PR -> do not push; continue.
|
|
95
|
-
- `git push` fails (needs `git pull --rebase`, no upstream, network error) -> keep the local commit and tell the user to push manually.
|
|
96
|
-
|
|
97
|
-
Fold the push outcome (pushed / skipped(no PR) / failed) into the next step's "Update Task Status" Activity Log note or user output.
|
|
98
|
-
|
|
99
|
-
## 6. Update Task Status When Applicable
|
|
100
|
-
|
|
101
|
-
After checkpoints and before synchronization or the completion gate, call `commit-complete`. Under the task lock, core writes the review anchor, Commit done, and planned orchestration bytes, then deletes the intent last. On failure retain the intent and let the next skill run use status/recover.
|
|
102
|
-
|
|
103
|
-
```bash
|
|
104
|
-
agent-infra-internal task-orchestration {task-id} commit-complete --token "$commit_intent_token" --agent {standard-agent-token}
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
Get the current time:
|
|
50
|
+
Write the message, explicit paths, expected HEAD/tree, task scope, agent, mode, and optional push policy to a temporary JSON file, then call:
|
|
108
51
|
|
|
109
52
|
```bash
|
|
110
|
-
|
|
53
|
+
agent-infra-internal git-workflow commit --input {commit-operation.json}
|
|
111
54
|
```
|
|
112
55
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
> Before rendering next steps, read `.agents/rules/next-step-output.md` and invoke the shared helper for the scenario selected from `reference/task-status-update.md`.
|
|
116
|
-
|
|
117
|
-
After core finalization succeeds, choose exactly one next-step case:
|
|
118
|
-
- open PR and successful push -> `watch-pr {task-ref}`; this takes precedence over the final-commit `prFlow` route
|
|
119
|
-
- failed push -> keep the task active and show only push/synchronization diagnostics; do not show `watch-pr` or `complete-task`
|
|
120
|
-
- final commit -> render the next step by `.agents/.airc.json`'s `prFlow` (`disabled` -> single option `complete-task`; `required` -> single option `create-pr`; absent -> two options `create-pr` / `complete-task`); see Case 1 in `reference/task-status-update.md`
|
|
121
|
-
- more work remains -> update task.md and stop
|
|
122
|
-
- ready for review -> `review-code {task-id}`
|
|
56
|
+
Taskless direct mode omits `taskRef`; orchestrated mode must pass `taskRef`, `agent`, and `mode: "orchestrated"`. The core owns repository/worktree mutation locking, task locking when bound, path and sensitive-file checks, staged scope, HEAD/tree, branch/ref, commit, push, protected-branch policy, warnings, and idempotency.
|
|
123
57
|
|
|
124
|
-
|
|
58
|
+
- Create at most one local commit for explicit changes.
|
|
59
|
+
- If there are no changes but HEAD is ahead and delivery is requested, perform push-only and do not create an empty commit.
|
|
60
|
+
- Skip automatic push on `main` / `master` with `COMMIT_AUTOPUSH_PROTECTED_BRANCH`; retain the local commit.
|
|
61
|
+
- Return `COMMIT_PUSH_FAILED` as a warning on ordinary push failure; a retry only repairs push and never creates a second commit.
|
|
62
|
+
- Successful taskless operations write no task.md, review, receipt, checkpoint, or Activity Log record.
|
|
125
63
|
|
|
126
|
-
|
|
64
|
+
## 5. Finish task and platform synchronization
|
|
127
65
|
|
|
128
|
-
|
|
129
|
-
>
|
|
130
|
-
> If this step touches the code-hosting platform, complete the prerequisite checks in `.agents/rules/issue-pr-commands.md` first.
|
|
66
|
+
Continue task synchronization only for task-bound operations. For an associated Issue or PR, follow the issue, PR-summary, and platform rules; the commit path passes `--result no_op` to summary-sync because it only synchronizes an existing PR identity. Synchronization failures are warnings and do not roll back the local commit.
|
|
131
67
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
## 8. Sync PR Summary When Applicable
|
|
135
|
-
|
|
136
|
-
When `{task-id}` exists and task.md contains a valid `pr_number`, refresh the PR summary comment marked with the PR summary marker defined in `.agents/rules/pr-sync.md` on the PR. Otherwise, skip this step.
|
|
137
|
-
|
|
138
|
-
> The full trigger conditions, aggregation rules, PATCH/POST flow, shell-safety constraints, and error handling live in `reference/pr-summary-sync.md` (which in turn points to `.agents/rules/pr-sync.md`). Read `reference/pr-summary-sync.md` before executing this step.
|
|
139
|
-
>
|
|
140
|
-
> If this step touches the code-hosting platform, complete the prerequisite checks in `.agents/rules/issue-pr-commands.md` first so the runtime context required by `.agents/rules/pr-sync.md` is ready.
|
|
141
|
-
|
|
142
|
-
Failure handling matches "Update Task Status When Applicable": warn, but do **not** block an already completed `git commit`.
|
|
143
|
-
|
|
144
|
-
## 9. Verification Gate
|
|
145
|
-
|
|
146
|
-
If this operation is associated with `{task-id}`, run the verification gate to confirm task metadata and sync state. If there is no task context, skip this step.
|
|
68
|
+
After task-bound finalization, run:
|
|
147
69
|
|
|
148
70
|
```bash
|
|
71
|
+
date "+%Y-%m-%d %H:%M:%S%z" | sed 's/\([+-][0-9][0-9]\)\([0-9][0-9]\)$/\1:\2/'
|
|
149
72
|
agent-infra-internal task-verify {task-id} commit.completed --format text
|
|
150
73
|
```
|
|
151
74
|
|
|
152
|
-
|
|
153
|
-
- exit code 0 (all checks passed) -> continue the remaining wrap-up steps
|
|
154
|
-
- exit code 1 (validation failed) -> fix the reported issues and run the gate again
|
|
155
|
-
- exit code 2 (network blocked) -> stop and tell the user that human intervention is required
|
|
75
|
+
Do not claim task finalization without fresh verification output.
|
|
156
76
|
|
|
157
|
-
|
|
77
|
+
## 6. Render the next step
|
|
158
78
|
|
|
159
|
-
|
|
79
|
+
Read `.agents/rules/next-step-output.md` immediately before calling the single next-step helper. A failed push keeps the task active and reports diagnostics; a final commit routes to `create-pr` or `complete-task` according to `prFlow`.
|
|
160
80
|
|
|
161
81
|
## Notes
|
|
162
82
|
|
|
163
|
-
- Never commit
|
|
164
|
-
-
|
|
165
|
-
-
|
|
166
|
-
|
|
167
|
-
## Error Handling
|
|
168
|
-
|
|
169
|
-
- If the task status update fails, warn the user but do not block the commit
|
|
83
|
+
- Never commit `.env`, credentials, keys, or other sensitive files.
|
|
84
|
+
- Never use `git add -A` or `git add .`.
|
|
85
|
+
- Never hand-write task Activity Log, review anchors, receipts, or checkpoints.
|