@fitlab-ai/agent-infra 0.9.7 → 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 +11 -1
- package/dist/lib/agent-clients/adapters/claude-code.js +3 -3
- package/dist/lib/agent-clients/adapters/codex-lifecycle/app-server.js +60 -22
- package/dist/lib/agent-clients/adapters/codex-lifecycle/build-identity.js +8 -1
- package/dist/lib/agent-clients/adapters/codex-lifecycle/capability-store.js +175 -11
- 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 +86 -69
- package/dist/lib/agent-clients/adapters/codex-lifecycle/store.js +2 -1
- package/dist/lib/decide.js +68 -14
- package/dist/lib/git/workflow.js +10 -1
- package/dist/lib/init.js +1 -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 +3 -4
- package/dist/lib/internal/sandbox-control.js +79 -2
- package/dist/lib/internal/task-activity.js +57 -7
- package/dist/lib/internal/task-event.js +57 -4
- package/dist/lib/internal/task-finalization.js +54 -0
- package/dist/lib/internal/task-ledger.js +59 -5
- package/dist/lib/internal/task-lifecycle.js +59 -8
- package/dist/lib/internal/task-orchestration.js +161 -288
- package/dist/lib/internal/task-override.js +131 -0
- package/dist/lib/internal/task-review.js +64 -6
- package/dist/lib/internal/task-verify.js +65 -3
- package/dist/lib/internal/task-warning.js +57 -4
- package/dist/lib/platform/pr-summary.js +53 -13
- package/dist/lib/platform/pull-requests.js +205 -41
- package/dist/lib/runtime/agent-runtime.js +56 -0
- package/dist/lib/sandbox/commands/create.js +389 -311
- package/dist/lib/sandbox/commands/rm.js +316 -55
- package/dist/lib/sandbox/control/client.js +190 -6
- package/dist/lib/sandbox/control/container-identity.js +1 -1
- package/dist/lib/sandbox/control/controller-registration.js +273 -0
- package/dist/lib/sandbox/control/executor.js +145 -5
- package/dist/lib/sandbox/control/lifecycle.js +395 -73
- package/dist/lib/sandbox/control/protocol.js +67 -6
- package/dist/lib/sandbox/control/state.js +27 -11
- package/dist/lib/sandbox/engine.js +14 -7
- package/dist/lib/sandbox/index.js +5 -3
- package/dist/lib/sandbox/managed-fs.js +5 -0
- package/dist/lib/sandbox/mounts.js +20 -5
- package/dist/lib/sandbox/recovery.js +78 -10
- package/dist/lib/sandbox/task-resolver.js +50 -6
- package/dist/lib/sandbox/workspace-identity.js +27 -0
- package/dist/lib/sandbox/workspace-view.js +62 -40
- package/dist/lib/sandbox/worktree-safety.js +215 -2
- package/dist/lib/server/process-state.js +51 -1
- package/dist/lib/task/activity-intent.js +4 -1
- 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/decision-intents.js +4 -2
- package/dist/lib/task/delegation-receipts.js +279 -17
- package/dist/lib/task/events.js +9 -5
- package/dist/lib/task/finalization.js +567 -0
- package/dist/lib/task/guard-override.js +31 -0
- package/dist/lib/task/human-override.js +1240 -0
- package/dist/lib/task/ledger-intents.js +6 -3
- package/dist/lib/task/lifecycle.js +69 -14
- package/dist/lib/task/operation-outcome.js +33 -0
- package/dist/lib/task/orchestration.js +199 -719
- package/dist/lib/task/review-finalization.js +3 -2
- 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 +138 -59
- package/dist/lib/task/verification.js +15 -2
- package/dist/lib/task/workflow-warning-intents.js +54 -3
- package/dist/lib/task/write.js +2 -1
- package/dist/lifecycle-build-manifest.json +3 -3
- package/lib/agent-clients/adapters/claude-code.ts +3 -3
- package/lib/agent-clients/adapters/codex-lifecycle/app-server.ts +63 -20
- package/lib/agent-clients/adapters/codex-lifecycle/build-identity.ts +12 -0
- package/lib/agent-clients/adapters/codex-lifecycle/capability-store.ts +278 -13
- 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 +112 -93
- package/lib/agent-clients/adapters/codex-lifecycle/store.ts +2 -1
- package/lib/decide.ts +59 -14
- package/lib/git/workflow.ts +11 -2
- package/lib/init.ts +1 -1
- 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 +3 -4
- package/lib/internal/sandbox-control.ts +92 -2
- package/lib/internal/task-activity.ts +46 -6
- package/lib/internal/task-event.ts +53 -4
- package/lib/internal/task-finalization.ts +68 -0
- package/lib/internal/task-ledger.ts +48 -4
- package/lib/internal/task-lifecycle.ts +56 -12
- package/lib/internal/task-orchestration.ts +32 -107
- package/lib/internal/task-override.ts +138 -0
- package/lib/internal/task-review.ts +51 -6
- package/lib/internal/task-verify.ts +52 -3
- package/lib/internal/task-warning.ts +44 -3
- package/lib/platform/pr-summary.ts +65 -14
- package/lib/platform/pull-requests.ts +211 -41
- package/lib/runtime/agent-runtime.ts +76 -0
- package/lib/sandbox/commands/create.ts +88 -4
- package/lib/sandbox/commands/rm.ts +413 -61
- package/lib/sandbox/config.ts +2 -1
- package/lib/sandbox/control/client.ts +255 -6
- package/lib/sandbox/control/container-identity.ts +3 -3
- package/lib/sandbox/control/controller-registration.ts +347 -0
- package/lib/sandbox/control/executor.ts +172 -6
- package/lib/sandbox/control/lifecycle.ts +465 -77
- package/lib/sandbox/control/protocol.ts +85 -9
- package/lib/sandbox/control/state.ts +35 -18
- package/lib/sandbox/engine.ts +20 -9
- package/lib/sandbox/index.ts +5 -3
- package/lib/sandbox/managed-fs.ts +5 -0
- package/lib/sandbox/mounts.ts +23 -5
- package/lib/sandbox/recovery.ts +90 -9
- package/lib/sandbox/task-resolver.ts +58 -7
- package/lib/sandbox/workspace-identity.ts +50 -2
- package/lib/sandbox/workspace-view.ts +73 -43
- package/lib/sandbox/worktree-safety.ts +236 -2
- package/lib/server/process-state.ts +48 -1
- package/lib/task/activity-intent.ts +4 -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/decision-intents.ts +4 -2
- package/lib/task/delegation-receipts.ts +304 -19
- package/lib/task/events.ts +10 -5
- package/lib/task/finalization.ts +719 -0
- package/lib/task/guard-override.ts +50 -0
- package/lib/task/human-override.ts +1503 -0
- package/lib/task/ledger-intents.ts +6 -3
- package/lib/task/lifecycle.ts +71 -14
- package/lib/task/operation-outcome.ts +48 -0
- package/lib/task/orchestration.ts +239 -922
- package/lib/task/review-finalization.ts +6 -2
- package/lib/task/short-id.ts +65 -1
- package/lib/task/task-execution-lock.ts +10 -1
- package/lib/task/verification-engine.ts +145 -64
- package/lib/task/verification.ts +18 -3
- package/lib/task/workflow-warning-intents.ts +61 -4
- package/lib/task/write.ts +4 -1
- 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 +9 -24
- package/templates/.agents/rules/lifecycle-orchestration.en.md +4 -3
- package/templates/.agents/rules/lifecycle-orchestration.zh-CN.md +4 -3
- 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/run-task/reference/host-validation.en.md +3 -1
- package/templates/.agents/skills/run-task/reference/host-validation.zh-CN.md +3 -1
- 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
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fitlab-ai/agent-infra",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.9",
|
|
4
4
|
"description": "Bootstrap tool for AI multi-tool collaboration infrastructure — works with Claude Code, Codex, Antigravity CLI, and OpenCode",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
"yaml": "^2.9.0"
|
|
55
55
|
},
|
|
56
56
|
"scripts": {
|
|
57
|
-
"build": "
|
|
57
|
+
"build": "node scripts/run-build.js",
|
|
58
58
|
"demo:regen": "sh scripts/demo-regen.sh",
|
|
59
59
|
"prepare": "git config core.hooksPath .git-hooks || true",
|
|
60
60
|
"typecheck": "tsc -p tsconfig.test.json --noEmit && tsc -p tsconfig.jschecks.json --noEmit",
|
|
@@ -20,14 +20,14 @@ This makes Git invoke the hooks in the project repository's `.git-hooks/` direct
|
|
|
20
20
|
|
|
21
21
|
## Development Checkout CLI Alignment
|
|
22
22
|
|
|
23
|
-
When developing agent-infra from a source checkout, install dependencies and rebuild
|
|
23
|
+
When developing the agent-infra CLI from a source checkout, install dependencies and rebuild it as needed:
|
|
24
24
|
|
|
25
25
|
```bash
|
|
26
26
|
npm install
|
|
27
27
|
npm run build
|
|
28
28
|
```
|
|
29
29
|
|
|
30
|
-
Lifecycle hooks
|
|
30
|
+
Lifecycle hooks always invoke `agent-infra-internal` through `PATH`; they do not implicitly switch to checkout source or `dist`. In a Codex sandbox, the controller's `PATH`-first shim is authoritative and binds the controller's selected executable. Skills, rules, hooks, and task data continue to come from the current checkout. The commands above develop the CLI itself and do not change hook executable selection. If shell commands must also resolve to this checkout, link it and compare the active version with the package version:
|
|
31
31
|
|
|
32
32
|
```bash
|
|
33
33
|
npm link
|
|
@@ -20,14 +20,14 @@ git config core.hooksPath .git-hooks
|
|
|
20
20
|
|
|
21
21
|
## 开发检出中的 CLI 对齐
|
|
22
22
|
|
|
23
|
-
从源码检出开发 agent-infra
|
|
23
|
+
从源码检出开发 agent-infra CLI 时,请按需安装依赖并重新构建 CLI:
|
|
24
24
|
|
|
25
25
|
```bash
|
|
26
26
|
npm install
|
|
27
27
|
npm run build
|
|
28
28
|
```
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
生命周期 hook 始终通过 `PATH` 调用 `agent-infra-internal`,不会隐式切换到当前检出的 source 或 `dist`。在 Codex sandbox 中,controller 放在 `PATH` 首位的 shim 是权威入口,并绑定 controller 选定的 executable。skills、rules、hooks 和任务数据仍从当前检出读取。上面的命令只用于开发 CLI 本身,不会改变 hook 的 executable 选择。如果 shell 命令也必须解析到当前检出,请建立链接并比较当前版本与包版本:
|
|
31
31
|
|
|
32
32
|
```bash
|
|
33
33
|
npm link
|
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
import { execFileSync } from 'node:child_process';
|
|
2
2
|
import { createHash } from 'node:crypto';
|
|
3
|
-
import { existsSync } from 'node:fs';
|
|
4
3
|
import { readFileSync } from 'node:fs';
|
|
5
4
|
import { fileURLToPath } from 'node:url';
|
|
6
5
|
|
|
7
6
|
const MAX_INPUT_BYTES = 64 * 1024;
|
|
8
|
-
const repoPackageJson = fileURLToPath(new URL('../../package.json', import.meta.url));
|
|
9
|
-
const sourceInternalCli = fileURLToPath(new URL('../../bin/internal-cli.ts', import.meta.url));
|
|
10
|
-
const localInternalCli = fileURLToPath(new URL('../../dist/bin/internal-cli.js', import.meta.url));
|
|
11
7
|
const codexHooks = fileURLToPath(new URL('../../.codex/hooks.json', import.meta.url));
|
|
12
8
|
const clientIndex = process.argv.indexOf('--client');
|
|
13
9
|
const client = clientIndex >= 0 ? process.argv[clientIndex + 1] : '';
|
|
@@ -17,22 +13,6 @@ if (client !== 'claude-code' && client !== 'codex') {
|
|
|
17
13
|
}
|
|
18
14
|
|
|
19
15
|
function internalCliInvocation(args) {
|
|
20
|
-
let isAgentInfraSourceCheckout = false;
|
|
21
|
-
try {
|
|
22
|
-
isAgentInfraSourceCheckout = JSON.parse(readFileSync(repoPackageJson, 'utf8')).name === '@fitlab-ai/agent-infra';
|
|
23
|
-
} catch {
|
|
24
|
-
// Installed project hooks do not require a repository package.json.
|
|
25
|
-
}
|
|
26
|
-
if (isAgentInfraSourceCheckout && existsSync(sourceInternalCli)) {
|
|
27
|
-
return {
|
|
28
|
-
command: process.execPath,
|
|
29
|
-
commandArgs: ['--experimental-strip-types', sourceInternalCli, ...args],
|
|
30
|
-
shell: false
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
if (existsSync(localInternalCli)) {
|
|
34
|
-
return { command: process.execPath, commandArgs: [localInternalCli, ...args], shell: false };
|
|
35
|
-
}
|
|
36
16
|
return { command: 'agent-infra-internal', commandArgs: args, shell: process.platform === 'win32' };
|
|
37
17
|
}
|
|
38
18
|
|
|
@@ -125,7 +105,7 @@ process.stdin.on('end', () => {
|
|
|
125
105
|
input: JSON.stringify(normalized),
|
|
126
106
|
shell,
|
|
127
107
|
stdio: ['pipe', 'pipe', 'pipe'],
|
|
128
|
-
timeout:
|
|
108
|
+
timeout: 30_000
|
|
129
109
|
});
|
|
130
110
|
process.stdout.write(output);
|
|
131
111
|
} catch (error) {
|
|
@@ -147,11 +127,11 @@ process.stdin.on('end', () => {
|
|
|
147
127
|
args.push(
|
|
148
128
|
'--native-agent', String(nativeAgent),
|
|
149
129
|
'--child-id', String(event.child_id || event.agent_id || event.thread_id || ''),
|
|
150
|
-
'--parent-id', String(event.parent_id || event.parent_session_id || event.session_id || '')
|
|
151
|
-
'--spawn-mode', String(event.spawn_mode || (client === 'claude-code' ? 'fresh' : ''))
|
|
130
|
+
'--parent-id', String(event.parent_id || event.parent_session_id || event.session_id || '')
|
|
152
131
|
);
|
|
132
|
+
if (event.spawn_mode) args.push('--spawn-mode', String(event.spawn_mode));
|
|
153
133
|
if (event.model) args.push('--actual-model', String(event.model));
|
|
154
|
-
const actualEffort = event.actual_reasoning_effort || event.reasoning_effort || event.model_reasoning_effort;
|
|
134
|
+
const actualEffort = event.effort?.level || event.actual_reasoning_effort || event.reasoning_effort || event.model_reasoning_effort;
|
|
155
135
|
if (actualEffort) args.push('--actual-reasoning-effort', String(actualEffort));
|
|
156
136
|
if (event.model_fallback_reason) args.push('--model-fallback-reason', String(event.model_fallback_reason));
|
|
157
137
|
if (event.reasoning_effort_fallback_reason) {
|
|
@@ -162,6 +142,11 @@ process.stdin.on('end', () => {
|
|
|
162
142
|
'--native-agent', String(nativeAgent),
|
|
163
143
|
'--child-id', String(event.child_id || event.agent_id || event.thread_id || '')
|
|
164
144
|
);
|
|
145
|
+
if (client === 'claude-code') {
|
|
146
|
+
if (event.model) args.push('--actual-model', String(event.model));
|
|
147
|
+
const actualEffort = event.effort?.level || event.actual_reasoning_effort || event.reasoning_effort;
|
|
148
|
+
if (actualEffort) args.push('--actual-reasoning-effort', String(actualEffort));
|
|
149
|
+
}
|
|
165
150
|
}
|
|
166
151
|
try {
|
|
167
152
|
const { command, commandArgs, shell } = internalCliInvocation(args);
|
|
@@ -5,12 +5,12 @@
|
|
|
5
5
|
- The orchestrator only routes and delegates. Stage skills remain the single source of truth for behavior and artifacts.
|
|
6
6
|
- Every stage and rework round uses a fresh executor. Every review uses a fresh reviewer; follow-up reuse is forbidden.
|
|
7
7
|
- A reviewer may only write its review artifact and core-generated task metadata. Business-code, HEAD, or index changes invalidate the receipt.
|
|
8
|
-
- An active run has one pending delegation. The child must pass the activation barrier before any stage side effect. Missing, late, mismatched, forked, replayed, hook-less, or drifted evidence pauses the run.
|
|
8
|
+
- An active run has one pending delegation. The child must pass the activation barrier before any stage side effect. Missing, late, mismatched, forked, replayed, hook-less, or drifted evidence pauses the run (on the claude-code path, missing or mismatched model/effort evidence, and fork/spawn-mode evidence this host structurally does not provide, follow the recording rules in `.agents/skills/run-task/reference/host-validation.md` instead and are exempt from this; missing or mismatched `parentId`/`childId` still pauses).
|
|
9
9
|
- The first release ends after one existing safely gated `commit`; it does not create a PR, monitor checks, or complete the task.
|
|
10
10
|
|
|
11
11
|
## Recovery
|
|
12
12
|
|
|
13
|
-
`orchestration.json` is the detailed state source. A
|
|
13
|
+
`orchestration.json` is the detailed state source. A current run persists complete policy, append-only recovery, build/contract/hook-source/controller provenance, and activation monotonic timestamps. Readers accept only the complete structure emitted by the current writer; unknown fields, missing fields, invalid provenance, and old runs fail closed without rewriting. Finish or clear every active run before upgrading agent-infra. An expired prepared orphan may be explicitly recovered only with the exact task fingerprint, no consumed authorization, and no matching unconsumed active lifecycle evidence.
|
|
14
14
|
|
|
15
15
|
## Codex Host and Capability
|
|
16
16
|
|
|
@@ -22,8 +22,9 @@
|
|
|
22
22
|
|
|
23
23
|
- A new run persists model and reasoning effort for both roles. Explicit policy is atomic across all four role fields; only a fully absent explicit policy may fall back to the current client's `agentClients[].orchestration`.
|
|
24
24
|
- Route resolves requested model/effort by role, and prepare matches both before snapshotting. Native spawn must not inherit session defaults.
|
|
25
|
-
- Native start records host-observed actual model/effort. Each mismatch needs its own fallback reason, and requested values must never be fabricated as actual evidence.
|
|
25
|
+
- Native start records host-observed actual model/effort. Each mismatch needs its own fallback reason (the claude-code path may leave this blank and follow the recording rules instead), and requested values must never be fabricated as actual evidence.
|
|
26
26
|
- Model selection is labeled as a complete catalog, partial catalog, or interactive-only guidance; a local override enum must not be presented as complete.
|
|
27
|
+
- claude-code's requested reasoning effort does not yet support per-role dispatch (concurrent tasks would race on a shared file); `delegationEvidence.actualReasoningEffort` is declared `spawn-ack`, meaning it is only recorded when honestly observed in a native spawn lifecycle event (Start/Stop) — it is not a promise of per-role dispatch and does not gate activation.
|
|
27
28
|
|
|
28
29
|
## Stable Pause Conditions
|
|
29
30
|
|
|
@@ -5,12 +5,12 @@
|
|
|
5
5
|
- 总控只路由和委派;阶段技能仍是业务规则与产物格式的单一事实源。
|
|
6
6
|
- 每个阶段和每轮返工都创建 fresh executor;每轮审查创建 fresh reviewer,禁止 follow-up 复用。
|
|
7
7
|
- reviewer 只能写当前审查产物和核心生成的任务元数据。业务代码、HEAD 或暂存区变化会使 receipt 失效。
|
|
8
|
-
- active run 中只有一个 pending delegation。child 必须在任何阶段副作用前通过 activation barrier;缺失、超时、错配、fork、重放、hook
|
|
8
|
+
- active run 中只有一个 pending delegation。child 必须在任何阶段副作用前通过 activation barrier;缺失、超时、错配、fork、重放、hook 不可用或工作区漂移一律暂停(claude-code 路径下 model/effort 证据的缺失或错配、以及该宿主结构上不提供的 fork/spawn-mode 证据,按 `.agents/skills/run-task/reference/host-validation.md` 的记录规则处理,不在此列;`parentId`/`childId` 的缺失或错配仍然暂停)。
|
|
9
9
|
- 首版成功终点是一次通过既有安全门禁的 `commit`;不创建 PR、不监控 checks、不执行 `complete-task`。
|
|
10
10
|
|
|
11
11
|
## 恢复语义
|
|
12
12
|
|
|
13
|
-
`orchestration.json` 是详细状态源。
|
|
13
|
+
`orchestration.json` 是详细状态源。current run 保存完整策略、append-only 恢复历史、build/contract/hook source/controller provenance 与 activation 单调时钟。读取时只接受当前 writer 的完整结构;未知字段、缺失字段、非法 provenance 或旧 run 一律失败关闭且不改写。升级 agent-infra 前必须完成或清空所有 active run。prepared orphan 只允许在 deadline 已过、task fingerprint 精确不变、无 authorization 消耗且无匹配的未消费 active lifecycle evidence 时显式恢复。
|
|
14
14
|
|
|
15
15
|
## Codex 宿主与 capability
|
|
16
16
|
|
|
@@ -22,8 +22,9 @@
|
|
|
22
22
|
|
|
23
23
|
- 新 run 必须固化 executor/reviewer 各自的 model 与 reasoning effort;显式策略必须四字段原子完整,完全没有显式字段时才读取当前 client 的 `agentClients[].orchestration`。重入不得静默改写策略。
|
|
24
24
|
- route 按 role 返回 requested model/effort,prepare 必须在工作区快照前精确匹配两者;原生 spawn 不能继承会话默认值。
|
|
25
|
-
- 原生 start 必须记录宿主观察到的 actual model/effort。任一字段与 requested 不同时必须记录独立 fallback reason
|
|
25
|
+
- 原生 start 必须记录宿主观察到的 actual model/effort。任一字段与 requested 不同时必须记录独立 fallback reason(claude-code 路径下允许留空,按记录规则处理);requested 值不得补造 actual 证据。
|
|
26
26
|
- 模型选择能力必须标记 complete catalog、partial catalog 或 interactive-only guidance;局部 override 枚举不得冒充完整目录。
|
|
27
|
+
- claude-code 的 requested reasoning effort 暂不支持按角色下发(跨任务共享文件存在写入竞态);`delegationEvidence.actualReasoningEffort` 声明为 `spawn-ack`,语义为"仅能在宿主原生 spawn 生命周期事件(Start/Stop)里如实观察到时记录,不构成按角色下发的承诺,也不构成放行门禁"。
|
|
27
28
|
|
|
28
29
|
## 稳定暂停条件
|
|
29
30
|
|
|
@@ -28,7 +28,7 @@ Map user intent to the corresponding workflow command:
|
|
|
28
28
|
- Historical `gemini` / `gemini-cli` remain read-only for `ai task log` rendering and are not writable
|
|
29
29
|
- Manual-step exception: no matter which agent is used, a human-made decision is always declared as `human`
|
|
30
30
|
|
|
31
|
-
The
|
|
31
|
+
The seven internal commands (`task-event` / `task-lifecycle` / `task-finalization` / `platform-issue` / `platform-comment` / `platform-pr` / `task-orchestration`) hard-validate `--agent` against a whitelist: they accept a short token, a long name, or `human`, and reject non-standard values with the matching `*_PAYLOAD_INVALID` error; long names are normalized to the short token before being persisted or forwarded. The `ai task log` renderer keeps unknown tokens grouped as `human` but appends a visible `(unknown)` marker.
|
|
32
32
|
|
|
33
33
|
## State Snapshot and Completion Verification Entrypoints
|
|
34
34
|
|
|
@@ -68,7 +68,7 @@ The six internal commands (`task-event` / `task-lifecycle` / `platform-issue` /
|
|
|
68
68
|
`- {time} — **{base} [started]** by {agent} — started`
|
|
69
69
|
- **done line** (written when the step completes, unchanged from today): the action is the base itself:
|
|
70
70
|
`- {time} — **{base}** by {agent} — {completion summary}`
|
|
71
|
-
- **Commit
|
|
71
|
+
- **Commit execution boundary**: the commit skill must not hand-write task Activity Log, review anchors, receipts, or checkpoints. Task-bound direct and orchestrated modes both call the single `commit-operation.execute`; taskless direct is allowed only for `TASK_CONTEXT_NOT_FOUND` and creates no task-state side effects.
|
|
72
72
|
- `{base}` is that skill's existing done action text, including `(Round {N})` (e.g. `Plan Task (Round 1)`). started and done must share the same `{base}` to pair.
|
|
73
73
|
|
|
74
74
|
**Pairing and rendering** (`ai task log`): a started entry pairs with the next same-`{base}` done entry onto one row (repeated executions of the same base pair FIFO by ascending time). The STARTED column shows the start time, DONE the completion time; started with no done = in progress (DONE shows `(in progress)`); done with no started (legacy logs) = a standalone completed row. All three shapes are valid and never error.
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
- 历史 `gemini` / `gemini-cli` 仅保留 `ai task log` 渲染兼容,不接受写入
|
|
29
29
|
- 人工步骤例外:无论使用哪个 Agent,只要是人做的决定,统一声明 `human`
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
七个内部命令(`task-event` / `task-lifecycle` / `task-finalization` / `platform-issue` / `platform-comment` / `platform-pr` / `task-orchestration`)对 `--agent` 做白名单硬校验:接受短名、长名或 `human`,非标准值返回对应 `*_PAYLOAD_INVALID` 错误;长名在落库/透传前归一化为短名。渲染端 `ai task log` 对无法识别的 token 保留 `human` 归类并附加 `(unknown)` 标记。
|
|
32
32
|
|
|
33
33
|
## 状态快照与完成验证入口
|
|
34
34
|
|
|
@@ -70,7 +70,7 @@
|
|
|
70
70
|
`- {time} — **{基名} [started]** by {agent} — started`
|
|
71
71
|
- **done 行**(步骤完成时写,与现状一致):action 即基名本身:
|
|
72
72
|
`- {time} — **{基名}** by {agent} — {完成说明}`
|
|
73
|
-
- **Commit
|
|
73
|
+
- **Commit 执行边界**:commit 技能不得手写 task Activity Log、review anchor、receipt 或 checkpoint。task-bound direct 与 orchestrated 都调用唯一 `commit-operation.execute`;taskless direct 只在 `TASK_CONTEXT_NOT_FOUND` 时允许,且不产生任务状态副作用。
|
|
74
74
|
- `{基名}` 指该 SKILL 既有 done 条目的 action 文本,含 `(Round {N})`(如 `Plan Task (Round 1)`)。
|
|
75
75
|
started 与 done 共用同一 `{基名}` 才能配对。
|
|
76
76
|
|
|
@@ -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
|
|