@fitlab-ai/agent-infra 0.9.2 → 0.9.4
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 +12 -9
- package/README.zh-CN.md +12 -9
- package/bin/cli.ts +12 -0
- package/dist/bin/cli.js +14 -0
- package/dist/bin/internal-cli.js +134 -108
- package/dist/lib/agent-clients/adapter.js +137 -4
- package/dist/lib/agent-clients/adapters/antigravity-cli.js +64 -0
- package/dist/lib/{sandbox/credentials.js → agent-clients/adapters/claude-code-credentials.js} +4 -14
- package/dist/lib/agent-clients/adapters/claude-code-refresh.js +85 -0
- package/dist/lib/agent-clients/adapters/claude-code-sandbox.js +247 -0
- package/dist/lib/agent-clients/adapters/claude-code.js +27 -4
- package/dist/lib/agent-clients/adapters/codex.js +9 -0
- package/dist/lib/agent-clients/adapters/index.js +2 -2
- package/dist/lib/agent-clients/adapters/opencode-sandbox.js +108 -0
- package/dist/lib/agent-clients/adapters/opencode.js +24 -3
- package/dist/lib/agent-clients/adapters/runtimes/claude-code.dockerfile +65 -0
- package/dist/lib/agent-clients/config.js +42 -4
- package/dist/lib/agent-clients/next-steps.js +11 -2
- package/dist/lib/agent-clients/reconcile.js +2 -1
- package/dist/lib/agent-clients/registry.js +16 -2
- package/dist/lib/agent-clients/schema.js +18 -0
- package/dist/lib/agent-clients/tokens.js +49 -0
- package/dist/lib/agent-clients/types.js +1 -1
- package/dist/lib/defaults.json +1 -1
- package/dist/lib/git/workflow.js +54 -1
- package/dist/lib/internal/agent-client.js +61 -4
- package/dist/lib/internal/git-workflow.js +6 -1
- package/dist/lib/internal/platform-checks.js +3 -3
- package/dist/lib/internal/platform-comment.js +29 -2
- package/dist/lib/internal/platform-issue.js +7 -0
- package/dist/lib/internal/platform-pr-review.js +132 -0
- package/dist/lib/internal/platform-pr.js +20 -2
- package/dist/lib/internal/platform-release-notes.js +52 -16
- package/dist/lib/internal/pr-review-grade.js +140 -0
- package/dist/lib/internal/release-workflow.js +13 -6
- package/dist/lib/internal/sandbox-control.js +24 -0
- package/dist/lib/internal/task-activity.js +105 -0
- package/dist/lib/internal/task-event.js +17 -1
- package/dist/lib/internal/task-ledger.js +12 -3
- package/dist/lib/internal/task-lifecycle.js +26 -1
- package/dist/lib/internal/task-orchestration.js +167 -18
- package/dist/lib/internal/task-review.js +8 -3
- package/dist/lib/platform/adapters.js +8 -1
- package/dist/lib/platform/completion-backfill.js +122 -0
- package/dist/lib/platform/github-client.js +19 -2
- package/dist/lib/platform/issue-comments.js +3 -2
- package/dist/lib/platform/merged-pr-equivalence.js +115 -5
- package/dist/lib/platform/pr-checks.js +65 -42
- package/dist/lib/platform/pr-review.js +166 -0
- package/dist/lib/platform/pull-requests.js +371 -4
- package/dist/lib/platform/release-notes.js +85 -3
- package/dist/lib/platform/releases.js +13 -5
- package/dist/lib/pr-review/evidence-grading.js +229 -0
- package/dist/lib/process-data/index.js +239 -0
- package/dist/lib/process-data/normalize.js +198 -0
- package/dist/lib/process-data/privacy.js +33 -0
- package/dist/lib/process-data/reconcile.js +95 -0
- package/dist/lib/process-data/repair.js +58 -0
- package/dist/lib/process-data/sources.js +345 -0
- package/dist/lib/process-data/store.js +282 -0
- package/dist/lib/process-data/types.js +2 -0
- package/dist/lib/run/index.js +4 -3
- package/dist/lib/run/tui.js +10 -13
- package/dist/lib/sandbox/agent-client-reconciler.js +26 -2
- package/dist/lib/sandbox/capture.js +7 -2
- package/dist/lib/sandbox/commands/create.js +109 -248
- package/dist/lib/sandbox/commands/enter.js +15 -47
- package/dist/lib/sandbox/commands/list-running.js +16 -6
- package/dist/lib/sandbox/commands/ls.js +10 -6
- package/dist/lib/sandbox/commands/rebuild.js +4 -3
- package/dist/lib/sandbox/commands/refresh.js +4 -84
- package/dist/lib/sandbox/commands/rm.js +24 -3
- package/dist/lib/sandbox/commands/show.js +13 -4
- package/dist/lib/sandbox/commands/start.js +7 -4
- package/dist/lib/sandbox/config.js +2 -0
- package/dist/lib/sandbox/constants.js +6 -0
- package/dist/lib/sandbox/control/client.js +44 -0
- package/dist/lib/sandbox/control/protocol.js +35 -0
- package/dist/lib/sandbox/control/server.js +109 -0
- package/dist/lib/sandbox/dockerfile.js +36 -13
- package/dist/lib/sandbox/mounts.js +17 -4
- package/dist/lib/sandbox/recovery.js +128 -5
- package/dist/lib/sandbox/redaction.js +12 -0
- package/dist/lib/sandbox/runtimes/base.dockerfile +24 -74
- package/dist/lib/sandbox/workspace-identity.js +95 -0
- package/dist/lib/sandbox/workspace-view.js +103 -0
- package/dist/lib/task/activity-intent.js +307 -0
- package/dist/lib/task/artifact-lifecycle.js +2 -1
- package/dist/lib/task/commands/log.js +15 -14
- package/dist/lib/task/commit-finalization.js +267 -0
- package/dist/lib/task/commit-intent.js +165 -0
- package/dist/lib/task/decision-intents.js +31 -17
- package/dist/lib/task/delegation-receipts.js +25 -4
- package/dist/lib/task/events.js +67 -28
- package/dist/lib/task/finalization-artifacts.js +35 -0
- package/dist/lib/task/implementation-inputs.js +54 -7
- package/dist/lib/task/ledger-intents.js +35 -1
- package/dist/lib/task/lifecycle-execution.js +46 -0
- package/dist/lib/task/orchestration.js +753 -54
- package/dist/lib/task/resolve-ref.js +41 -1
- package/dist/lib/task/review-finalization.js +29 -9
- package/dist/lib/task/task-execution-lock.js +231 -0
- package/dist/lib/task/verification-checks.js +1 -1
- package/dist/lib/task/verification-engine.js +218 -2
- package/dist/lib/task/verification.js +4 -3
- package/dist/lib/task/workspace-snapshot.js +17 -5
- package/lib/agent-clients/adapter.ts +201 -4
- package/lib/agent-clients/adapters/antigravity-cli.ts +65 -0
- package/lib/{sandbox/credentials.ts → agent-clients/adapters/claude-code-credentials.ts} +3 -18
- package/lib/agent-clients/adapters/claude-code-refresh.ts +128 -0
- package/lib/agent-clients/adapters/claude-code-sandbox.ts +295 -0
- package/lib/agent-clients/adapters/claude-code.ts +31 -4
- package/lib/agent-clients/adapters/codex.ts +9 -0
- package/lib/agent-clients/adapters/index.ts +2 -2
- package/lib/agent-clients/adapters/opencode-sandbox.ts +136 -0
- package/lib/agent-clients/adapters/opencode.ts +27 -3
- package/lib/agent-clients/adapters/runtimes/claude-code.dockerfile +65 -0
- package/lib/agent-clients/config.ts +49 -4
- package/lib/agent-clients/next-steps.ts +15 -2
- package/lib/agent-clients/reconcile.ts +2 -1
- package/lib/agent-clients/registry.ts +19 -1
- package/lib/agent-clients/schema.ts +18 -0
- package/lib/agent-clients/tokens.ts +53 -0
- package/lib/agent-clients/types.ts +15 -1
- package/lib/defaults.json +1 -1
- package/lib/git/workflow.ts +66 -2
- package/lib/internal/agent-client.ts +59 -4
- package/lib/internal/git-workflow.ts +5 -1
- package/lib/internal/platform-checks.ts +4 -4
- package/lib/internal/platform-comment.ts +17 -2
- package/lib/internal/platform-issue.ts +4 -0
- package/lib/internal/platform-pr-review.ts +104 -0
- package/lib/internal/platform-pr.ts +14 -1
- package/lib/internal/platform-release-notes.ts +59 -16
- package/lib/internal/pr-review-grade.ts +130 -0
- package/lib/internal/release-workflow.ts +13 -6
- package/lib/internal/sandbox-control.ts +24 -0
- package/lib/internal/task-activity.ts +91 -0
- package/lib/internal/task-event.ts +9 -1
- package/lib/internal/task-ledger.ts +12 -3
- package/lib/internal/task-lifecycle.ts +26 -1
- package/lib/internal/task-orchestration.ts +123 -14
- package/lib/internal/task-review.ts +8 -3
- package/lib/platform/adapters.ts +29 -2
- package/lib/platform/completion-backfill.ts +134 -0
- package/lib/platform/github-client.ts +20 -2
- package/lib/platform/issue-comments.ts +3 -2
- package/lib/platform/merged-pr-equivalence.ts +127 -5
- package/lib/platform/pr-checks.ts +73 -46
- package/lib/platform/pr-review.ts +201 -0
- package/lib/platform/pull-requests.ts +444 -3
- package/lib/platform/release-notes.ts +100 -4
- package/lib/platform/releases.ts +16 -4
- package/lib/pr-review/evidence-grading.ts +318 -0
- package/lib/process-data/index.ts +224 -0
- package/lib/process-data/normalize.ts +202 -0
- package/lib/process-data/privacy.ts +41 -0
- package/lib/process-data/reconcile.ts +110 -0
- package/lib/process-data/repair.ts +64 -0
- package/lib/process-data/sources.ts +354 -0
- package/lib/process-data/store.ts +315 -0
- package/lib/process-data/types.ts +135 -0
- package/lib/run/index.ts +5 -3
- package/lib/run/tui.ts +14 -12
- package/lib/sandbox/agent-client-reconciler.ts +44 -2
- package/lib/sandbox/capture.ts +9 -2
- package/lib/sandbox/commands/create.ts +126 -280
- package/lib/sandbox/commands/enter.ts +13 -59
- package/lib/sandbox/commands/list-running.ts +23 -6
- package/lib/sandbox/commands/ls.ts +22 -6
- package/lib/sandbox/commands/rebuild.ts +4 -3
- package/lib/sandbox/commands/refresh.ts +4 -126
- package/lib/sandbox/commands/rm.ts +24 -3
- package/lib/sandbox/commands/show.ts +30 -4
- package/lib/sandbox/commands/start.ts +6 -4
- package/lib/sandbox/config.ts +4 -0
- package/lib/sandbox/constants.ts +8 -0
- package/lib/sandbox/control/client.ts +55 -0
- package/lib/sandbox/control/protocol.ts +75 -0
- package/lib/sandbox/control/server.ts +117 -0
- package/lib/sandbox/dockerfile.ts +66 -13
- package/lib/sandbox/mounts.ts +24 -4
- package/lib/sandbox/recovery.ts +163 -6
- package/lib/sandbox/redaction.ts +14 -0
- package/lib/sandbox/runtimes/base.dockerfile +24 -74
- package/lib/sandbox/tool-types.ts +16 -0
- package/lib/sandbox/workspace-identity.ts +123 -0
- package/lib/sandbox/workspace-view.ts +143 -0
- package/lib/server/server.schema.json +2 -2
- package/lib/task/activity-intent.ts +417 -0
- package/lib/task/artifact-lifecycle.ts +2 -1
- package/lib/task/commands/log.ts +15 -14
- package/lib/task/commit-finalization.ts +356 -0
- package/lib/task/commit-intent.ts +230 -0
- package/lib/task/decision-intents.ts +32 -12
- package/lib/task/delegation-receipts.ts +34 -5
- package/lib/task/events.ts +75 -30
- package/lib/task/finalization-artifacts.ts +58 -0
- package/lib/task/implementation-inputs.ts +62 -8
- package/lib/task/ledger-intents.ts +43 -3
- package/lib/task/lifecycle-execution.ts +106 -0
- package/lib/task/orchestration.ts +1019 -72
- package/lib/task/resolve-ref.ts +46 -1
- package/lib/task/review-finalization.ts +40 -9
- package/lib/task/task-execution-lock.ts +296 -0
- package/lib/task/verification-checks.ts +1 -1
- package/lib/task/verification-engine.ts +249 -2
- package/lib/task/verification.ts +5 -3
- package/lib/task/workspace-snapshot.ts +26 -5
- package/package.json +3 -3
- package/templates/.agents/QUICKSTART.en.md +25 -8
- package/templates/.agents/QUICKSTART.zh-CN.md +25 -8
- package/templates/.agents/README.en.md +10 -7
- package/templates/.agents/README.zh-CN.md +10 -7
- package/templates/.agents/hooks/lifecycle-delegation.js +15 -4
- package/templates/.agents/rules/README.en.md +1 -1
- package/templates/.agents/rules/README.zh-CN.md +1 -1
- package/templates/.agents/rules/create-issue.github.en.md +4 -2
- package/templates/.agents/rules/create-issue.github.zh-CN.md +4 -2
- package/templates/.agents/rules/human-decision-context.en.md +11 -2
- package/templates/.agents/rules/human-decision-context.zh-CN.md +11 -2
- package/templates/.agents/rules/issue-fields.github.en.md +3 -1
- package/templates/.agents/rules/issue-fields.github.zh-CN.md +3 -1
- package/templates/.agents/rules/issue-pr-commands.en.md +5 -3
- package/templates/.agents/rules/issue-pr-commands.github.en.md +5 -3
- package/templates/.agents/rules/issue-pr-commands.github.zh-CN.md +5 -3
- package/templates/.agents/rules/issue-pr-commands.zh-CN.md +5 -3
- package/templates/.agents/rules/issue-sync.github.en.md +7 -3
- package/templates/.agents/rules/issue-sync.github.zh-CN.md +8 -4
- package/templates/.agents/rules/lifecycle-orchestration.en.md +5 -2
- package/templates/.agents/rules/lifecycle-orchestration.zh-CN.md +5 -2
- package/templates/.agents/rules/milestone-inference.github.en.md +4 -2
- package/templates/.agents/rules/milestone-inference.github.zh-CN.md +4 -2
- package/templates/.agents/rules/next-step-output.en.md +3 -1
- package/templates/.agents/rules/next-step-output.zh-CN.md +3 -1
- package/templates/.agents/rules/no-mid-flow-questions.en.md +17 -0
- package/templates/.agents/rules/no-mid-flow-questions.zh-CN.md +17 -0
- package/templates/.agents/rules/pr-checks-commands.en.md +3 -3
- package/templates/.agents/rules/pr-checks-commands.github.en.md +2 -2
- package/templates/.agents/rules/pr-checks-commands.github.zh-CN.md +3 -3
- package/templates/.agents/rules/pr-checks-commands.zh-CN.md +3 -3
- package/templates/.agents/rules/pr-sync.en.md +3 -1
- package/templates/.agents/rules/pr-sync.github.en.md +11 -1
- package/templates/.agents/rules/pr-sync.github.zh-CN.md +11 -1
- package/templates/.agents/rules/pr-sync.zh-CN.md +3 -1
- package/templates/.agents/rules/release-commands.en.md +1 -1
- package/templates/.agents/rules/release-commands.github.en.md +12 -2
- package/templates/.agents/rules/release-commands.github.zh-CN.md +12 -2
- package/templates/.agents/rules/release-commands.zh-CN.md +1 -1
- package/templates/.agents/rules/review-handshake.zh-CN.md +1 -1
- package/templates/.agents/rules/task-management.en.md +13 -0
- package/templates/.agents/rules/task-management.zh-CN.md +13 -0
- package/templates/.agents/skills/analyze-task/SKILL.en.md +10 -7
- package/templates/.agents/skills/analyze-task/SKILL.zh-CN.md +10 -7
- package/templates/.agents/skills/block-task/SKILL.en.md +7 -5
- package/templates/.agents/skills/block-task/SKILL.zh-CN.md +7 -5
- package/templates/.agents/skills/cancel-task/SKILL.en.md +6 -4
- package/templates/.agents/skills/cancel-task/SKILL.zh-CN.md +6 -4
- package/templates/.agents/skills/close-codescan/SKILL.en.md +3 -1
- package/templates/.agents/skills/close-codescan/SKILL.zh-CN.md +3 -1
- package/templates/.agents/skills/close-dependabot/SKILL.en.md +3 -1
- package/templates/.agents/skills/close-dependabot/SKILL.zh-CN.md +3 -1
- package/templates/.agents/skills/code-task/SKILL.en.md +10 -7
- package/templates/.agents/skills/code-task/SKILL.zh-CN.md +12 -9
- package/templates/.agents/skills/commit/SKILL.en.md +23 -11
- package/templates/.agents/skills/commit/SKILL.zh-CN.md +29 -11
- 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 +49 -0
- package/templates/.agents/skills/commit/reference/commit-orchestration.zh-CN.md +55 -0
- package/templates/.agents/skills/commit/reference/issue-metadata-sync.en.md +1 -1
- package/templates/.agents/skills/commit/reference/issue-metadata-sync.zh-CN.md +1 -1
- 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 +4 -4
- package/templates/.agents/skills/commit/reference/task-status-update.zh-CN.md +4 -4
- package/templates/.agents/skills/complete-manual-validation/SKILL.en.md +6 -4
- package/templates/.agents/skills/complete-manual-validation/SKILL.zh-CN.md +6 -4
- package/templates/.agents/skills/complete-manual-validation/reference/summary-update.en.md +1 -1
- package/templates/.agents/skills/complete-manual-validation/reference/summary-update.zh-CN.md +1 -1
- package/templates/.agents/skills/complete-task/SKILL.en.md +22 -7
- package/templates/.agents/skills/complete-task/SKILL.zh-CN.md +22 -7
- 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 +17 -0
- package/templates/.agents/skills/complete-task/reference/external-delivery.zh-CN.md +17 -0
- package/templates/.agents/skills/create-pr/SKILL.en.md +7 -5
- package/templates/.agents/skills/create-pr/SKILL.zh-CN.md +7 -5
- package/templates/.agents/skills/create-pr/reference/comment-publish.en.md +1 -1
- package/templates/.agents/skills/create-pr/reference/comment-publish.zh-CN.md +1 -1
- package/templates/.agents/skills/create-release-note/SKILL.en.md +17 -16
- package/templates/.agents/skills/create-release-note/SKILL.zh-CN.md +17 -16
- package/templates/.agents/skills/create-task/SKILL.en.md +5 -3
- package/templates/.agents/skills/create-task/SKILL.zh-CN.md +5 -3
- package/templates/.agents/skills/create-task/reference/context-capture.en.md +34 -0
- package/templates/.agents/skills/create-task/reference/context-capture.zh-CN.md +34 -0
- package/templates/.agents/skills/import-issue/SKILL.en.md +5 -3
- package/templates/.agents/skills/import-issue/SKILL.zh-CN.md +5 -3
- package/templates/.agents/skills/plan-task/SKILL.en.md +8 -5
- package/templates/.agents/skills/plan-task/SKILL.zh-CN.md +8 -5
- package/templates/.agents/skills/post-release/SKILL.en.md +2 -0
- package/templates/.agents/skills/post-release/SKILL.zh-CN.md +2 -0
- package/templates/.agents/skills/release/SKILL.en.md +16 -10
- package/templates/.agents/skills/release/SKILL.zh-CN.md +16 -10
- package/templates/.agents/skills/restore-task/SKILL.en.md +4 -1
- package/templates/.agents/skills/restore-task/SKILL.zh-CN.md +4 -1
- package/templates/.agents/skills/review-analysis/SKILL.en.md +7 -4
- package/templates/.agents/skills/review-analysis/SKILL.zh-CN.md +7 -4
- package/templates/.agents/skills/review-code/SKILL.en.md +11 -8
- package/templates/.agents/skills/review-code/SKILL.zh-CN.md +11 -8
- package/templates/.agents/skills/review-code/reference/output-templates.en.md +1 -1
- package/templates/.agents/skills/review-code/reference/output-templates.zh-CN.md +1 -1
- package/templates/.agents/skills/review-plan/SKILL.en.md +7 -4
- package/templates/.agents/skills/review-plan/SKILL.zh-CN.md +7 -4
- package/templates/.agents/skills/review-pr/SKILL.en.md +186 -0
- package/templates/.agents/skills/review-pr/SKILL.zh-CN.md +186 -0
- package/templates/.agents/skills/review-pr/config/verify.en.json +37 -0
- package/templates/.agents/skills/review-pr/config/verify.zh-CN.json +37 -0
- package/templates/.agents/skills/review-pr/reference/evidence-grading.en.md +65 -0
- package/templates/.agents/skills/review-pr/reference/evidence-grading.zh-CN.md +65 -0
- package/templates/.agents/skills/review-pr/reference/output-guidance.en.md +18 -0
- package/templates/.agents/skills/review-pr/reference/output-guidance.zh-CN.md +18 -0
- package/templates/.agents/skills/review-pr/reference/report-template.en.md +85 -0
- package/templates/.agents/skills/review-pr/reference/report-template.zh-CN.md +85 -0
- package/templates/.agents/skills/run-task/SKILL.en.md +8 -8
- package/templates/.agents/skills/run-task/SKILL.zh-CN.md +8 -8
- package/templates/.agents/skills/run-task/config/verify.en.json +2 -1
- package/templates/.agents/skills/run-task/config/verify.zh-CN.json +2 -1
- package/templates/.agents/skills/run-task/reference/host-validation.en.md +20 -0
- package/templates/.agents/skills/run-task/reference/host-validation.zh-CN.md +20 -0
- package/templates/.agents/skills/update-agent-infra/scripts/sync-templates.js +98 -107
- package/templates/.agents/skills/watch-pr/SKILL.en.md +13 -13
- package/templates/.agents/skills/watch-pr/SKILL.zh-CN.md +13 -13
- package/templates/.agents/skills/watch-pr/reference/monitor-and-heal.en.md +27 -6
- package/templates/.agents/skills/watch-pr/reference/monitor-and-heal.zh-CN.md +26 -5
- package/templates/.agents/templates/task.en.md +2 -2
- package/templates/.agents/templates/task.zh-CN.md +2 -2
- package/templates/.agents/workflows/bug-fix.en.yaml +3 -3
- package/templates/.agents/workflows/bug-fix.zh-CN.yaml +3 -3
- package/templates/.agents/workflows/code-review.en.yaml +1 -1
- package/templates/.agents/workflows/code-review.zh-CN.yaml +1 -1
- package/templates/.agents/workflows/feature-development.en.yaml +4 -4
- package/templates/.agents/workflows/feature-development.zh-CN.yaml +4 -4
- package/templates/.agents/workflows/refactoring.en.yaml +3 -3
- package/templates/.agents/workflows/refactoring.zh-CN.yaml +3 -3
- package/templates/.claude/commands/post-release.en.md +1 -0
- package/templates/.claude/commands/post-release.zh-CN.md +1 -0
- package/templates/.claude/commands/review-pr.en.md +8 -0
- package/templates/.claude/commands/review-pr.zh-CN.md +8 -0
- package/templates/.claude/commands/watch-pr.en.md +1 -1
- package/templates/.claude/commands/watch-pr.zh-CN.md +1 -1
- package/templates/.claude/rules/tool-preferences.en.md +20 -0
- package/templates/.claude/rules/tool-preferences.zh-CN.md +20 -0
- package/templates/.opencode/commands/post-release.en.md +2 -0
- package/templates/.opencode/commands/post-release.zh-CN.md +2 -0
- package/templates/.opencode/commands/review-pr.en.md +11 -0
- package/templates/.opencode/commands/review-pr.zh-CN.md +11 -0
- package/templates/.opencode/commands/watch-pr.en.md +1 -1
- package/templates/.opencode/commands/watch-pr.zh-CN.md +1 -1
- package/dist/lib/agent-clients/adapters/gemini-cli.js +0 -64
- package/lib/agent-clients/adapters/gemini-cli.ts +0 -65
- package/templates/.gemini/commands/_project_/analyze-task.en.toml +0 -10
- package/templates/.gemini/commands/_project_/analyze-task.zh-CN.toml +0 -10
- package/templates/.gemini/commands/_project_/archive-tasks.en.toml +0 -10
- package/templates/.gemini/commands/_project_/archive-tasks.zh-CN.toml +0 -10
- package/templates/.gemini/commands/_project_/block-task.en.toml +0 -10
- package/templates/.gemini/commands/_project_/block-task.zh-CN.toml +0 -10
- package/templates/.gemini/commands/_project_/cancel-task.en.toml +0 -10
- package/templates/.gemini/commands/_project_/cancel-task.zh-CN.toml +0 -10
- package/templates/.gemini/commands/_project_/check-task.en.toml +0 -10
- package/templates/.gemini/commands/_project_/check-task.zh-CN.toml +0 -10
- package/templates/.gemini/commands/_project_/close-codescan.en.toml +0 -8
- package/templates/.gemini/commands/_project_/close-codescan.zh-CN.toml +0 -8
- package/templates/.gemini/commands/_project_/close-dependabot.en.toml +0 -8
- package/templates/.gemini/commands/_project_/close-dependabot.zh-CN.toml +0 -8
- package/templates/.gemini/commands/_project_/code-task.en.toml +0 -10
- package/templates/.gemini/commands/_project_/code-task.zh-CN.toml +0 -10
- package/templates/.gemini/commands/_project_/commit.en.toml +0 -10
- package/templates/.gemini/commands/_project_/commit.zh-CN.toml +0 -10
- package/templates/.gemini/commands/_project_/complete-manual-validation.en.toml +0 -10
- package/templates/.gemini/commands/_project_/complete-manual-validation.zh-CN.toml +0 -10
- package/templates/.gemini/commands/_project_/complete-task.en.toml +0 -10
- package/templates/.gemini/commands/_project_/complete-task.zh-CN.toml +0 -10
- package/templates/.gemini/commands/_project_/create-pr.en.toml +0 -10
- package/templates/.gemini/commands/_project_/create-pr.zh-CN.toml +0 -10
- package/templates/.gemini/commands/_project_/create-release-note.en.toml +0 -8
- package/templates/.gemini/commands/_project_/create-release-note.zh-CN.toml +0 -8
- package/templates/.gemini/commands/_project_/create-task.en.toml +0 -8
- package/templates/.gemini/commands/_project_/create-task.zh-CN.toml +0 -8
- package/templates/.gemini/commands/_project_/import-codescan.en.toml +0 -8
- package/templates/.gemini/commands/_project_/import-codescan.zh-CN.toml +0 -8
- package/templates/.gemini/commands/_project_/import-dependabot.en.toml +0 -8
- package/templates/.gemini/commands/_project_/import-dependabot.zh-CN.toml +0 -8
- package/templates/.gemini/commands/_project_/import-issue.en.toml +0 -8
- package/templates/.gemini/commands/_project_/import-issue.zh-CN.toml +0 -8
- package/templates/.gemini/commands/_project_/init-labels.en.toml +0 -8
- package/templates/.gemini/commands/_project_/init-labels.zh-CN.toml +0 -8
- package/templates/.gemini/commands/_project_/init-milestones.en.toml +0 -10
- package/templates/.gemini/commands/_project_/init-milestones.zh-CN.toml +0 -10
- package/templates/.gemini/commands/_project_/plan-task.en.toml +0 -10
- package/templates/.gemini/commands/_project_/plan-task.zh-CN.toml +0 -10
- package/templates/.gemini/commands/_project_/post-release.en.toml +0 -6
- package/templates/.gemini/commands/_project_/post-release.zh-CN.toml +0 -6
- package/templates/.gemini/commands/_project_/refine-title.en.toml +0 -8
- package/templates/.gemini/commands/_project_/refine-title.zh-CN.toml +0 -8
- package/templates/.gemini/commands/_project_/release.en.toml +0 -8
- package/templates/.gemini/commands/_project_/release.zh-CN.toml +0 -8
- package/templates/.gemini/commands/_project_/restore-task.en.toml +0 -8
- package/templates/.gemini/commands/_project_/restore-task.zh-CN.toml +0 -8
- package/templates/.gemini/commands/_project_/review-analysis.en.toml +0 -10
- package/templates/.gemini/commands/_project_/review-analysis.zh-CN.toml +0 -10
- package/templates/.gemini/commands/_project_/review-code.en.toml +0 -10
- package/templates/.gemini/commands/_project_/review-code.zh-CN.toml +0 -10
- package/templates/.gemini/commands/_project_/review-plan.en.toml +0 -10
- package/templates/.gemini/commands/_project_/review-plan.zh-CN.toml +0 -10
- package/templates/.gemini/commands/_project_/run-task.en.toml +0 -8
- package/templates/.gemini/commands/_project_/run-task.zh-CN.toml +0 -8
- package/templates/.gemini/commands/_project_/test-integration.en.toml +0 -6
- package/templates/.gemini/commands/_project_/test-integration.zh-CN.toml +0 -6
- package/templates/.gemini/commands/_project_/test.en.toml +0 -6
- package/templates/.gemini/commands/_project_/test.zh-CN.toml +0 -6
- package/templates/.gemini/commands/_project_/update-agent-infra.en.toml +0 -6
- package/templates/.gemini/commands/_project_/update-agent-infra.zh-CN.toml +0 -6
- package/templates/.gemini/commands/_project_/upgrade-dependency.en.toml +0 -8
- package/templates/.gemini/commands/_project_/upgrade-dependency.zh-CN.toml +0 -8
- package/templates/.gemini/commands/_project_/watch-pr.en.toml +0 -10
- package/templates/.gemini/commands/_project_/watch-pr.zh-CN.toml +0 -10
- package/templates/.gemini/settings.json +0 -3
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<h1 align="center">Agent Infra</h1>
|
|
6
6
|
|
|
7
7
|
<p align="center">
|
|
8
|
-
Collaboration infrastructure for AI coding agents — skills, workflows, and sandboxes for Claude Code, Codex,
|
|
8
|
+
Collaboration infrastructure for AI coding agents — skills, workflows, and sandboxes for Claude Code, Codex, Antigravity CLI, and OpenCode.
|
|
9
9
|
</p>
|
|
10
10
|
|
|
11
11
|
<p align="center">
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
|
|
29
29
|
## Why agent-infra?
|
|
30
30
|
|
|
31
|
-
Teams increasingly mix Claude Code, Codex,
|
|
31
|
+
Teams increasingly mix Claude Code, Codex, Antigravity CLI, OpenCode, and other AI TUIs in the same repository, but each tool tends to introduce its own commands, prompts, and local conventions. Without a shared layer, the result is fragmented workflows, duplicated setup, and task history that is difficult to audit.
|
|
32
32
|
|
|
33
33
|
agent-infra standardizes that shared infrastructure. It gives every supported AI TUI the same task lifecycle, the same skill vocabulary, the same project governance files, isolated development sandboxes, and the same upgrade path, so teams can switch tools without rebuilding process from scratch.
|
|
34
34
|
|
|
@@ -81,16 +81,17 @@ Just fix it at the application layer in LoginService.
|
|
|
81
81
|
|
|
82
82
|
**11 commands. 1 natural-language correction. From issue to merged PR.** That is the entire SOP — programming can have a standard operating procedure too.
|
|
83
83
|
|
|
84
|
-
Every command above works the same way in Claude Code, Codex,
|
|
84
|
+
Every command above works the same way in Claude Code, Codex, Antigravity CLI, and OpenCode. Switch tools mid-task — the workflow state follows. For what each skill does under the hood, see [Built-in AI Skills](./docs/en/skills.md).
|
|
85
85
|
|
|
86
86
|
## Key Features
|
|
87
87
|
|
|
88
|
-
- **Multi-AI collaboration**: one shared operating model for Claude Code, Codex,
|
|
88
|
+
- **Multi-AI collaboration**: one shared operating model for Claude Code, Codex, Antigravity CLI, and OpenCode
|
|
89
89
|
- **Bootstrap CLI + skill-driven execution**: initialize once, then let AI skills drive day-to-day work
|
|
90
90
|
- **IM command bridge**: route Feishu messages to built-ins, read-only task views, sandbox management, and controlled lifecycle skill runs
|
|
91
91
|
- **Bilingual project docs**: English-first docs with synchronized Chinese translations
|
|
92
92
|
- **Template-source architecture**: `templates/` mirrors the rendered project structure
|
|
93
93
|
- **AI-assisted updates**: template changes can be merged while preserving project-specific customization
|
|
94
|
+
- **Auditable process-data archive**: preserve local tasks and GitHub evidence in append-only, verifiable snapshots
|
|
94
95
|
|
|
95
96
|
## Quick Start
|
|
96
97
|
|
|
@@ -153,7 +154,7 @@ Open the project in any AI TUI and run `update-agent-infra`:
|
|
|
153
154
|
|-----|---------|
|
|
154
155
|
| Claude Code | `/update-agent-infra` |
|
|
155
156
|
| Codex | `$update-agent-infra` |
|
|
156
|
-
|
|
|
157
|
+
| Antigravity CLI | `/update-agent-infra` |
|
|
157
158
|
| OpenCode | `/update-agent-infra` |
|
|
158
159
|
|
|
159
160
|
This detects the packaged template version and renders all managed files. The same command is used both for first-time setup and for future template upgrades.
|
|
@@ -166,21 +167,23 @@ Manage the four built-in Agent Clients independently from the project lifecycle:
|
|
|
166
167
|
ai agent-client list
|
|
167
168
|
ai agent-client status
|
|
168
169
|
ai agent-client enable codex
|
|
169
|
-
ai agent-client disable
|
|
170
|
+
ai agent-client disable antigravity-cli
|
|
170
171
|
ai agent-client configure
|
|
171
172
|
```
|
|
172
173
|
|
|
173
|
-
The most-used lifecycle commands, in delivery order. The command prefix varies by TUI (`/skill` in Claude Code/OpenCode
|
|
174
|
+
The most-used lifecycle commands, in delivery order. The command prefix varies by TUI (`/skill` in Claude Code/Antigravity/OpenCode and `$skill` in Codex); the workflow semantics stay the same.
|
|
174
175
|
|
|
175
176
|
| Command | Purpose |
|
|
176
177
|
|---------|---------|
|
|
177
178
|
| `create-task` / `import-issue` | Start a task from a description or a GitHub Issue |
|
|
178
|
-
| `run-task` | Resume
|
|
179
|
+
| `run-task` | Resume the lifecycle with fresh isolated executors/reviewers when the selected client exposes verified actual model/effort evidence; current built-in clients, including Claude Code and Codex, fail closed before delegation because their native start events do not expose all required evidence |
|
|
179
180
|
| `analyze-task` → `review-analysis` | Capture scope and risks, then review the analysis |
|
|
180
181
|
| `plan-task` → `review-plan` | Design the approach, then review the plan |
|
|
181
182
|
| `code-task` → `review-code` | Implement and test, then run a structured code review |
|
|
182
183
|
| `commit` → `create-pr` → `complete-task` | Commit, open a PR, and archive the task |
|
|
183
184
|
|
|
185
|
+
Start with one atomic role policy, for example: `$run-task 42 --executor-model <id> --executor-reasoning-effort <value> --reviewer-model <id> --reviewer-reasoning-effort <value>`. Both roles may use the same model. With no explicit policy, `run-task` reads the current Agent Client's optional `agentClients[].orchestration`; if neither source is complete, it shows the host model-selection guidance before creating any run. Re-entry uses the persisted v2 policy.
|
|
186
|
+
|
|
184
187
|
See the full catalog — task status, release, security, and project-maintenance skills — in [Built-in AI Skills](./docs/en/skills.md).
|
|
185
188
|
|
|
186
189
|
## What You Get
|
|
@@ -196,7 +199,6 @@ my-project/
|
|
|
196
199
|
│ ├── workflows/ # 4 prebuilt workflows
|
|
197
200
|
│ └── templates/ # Task and artifact templates
|
|
198
201
|
├── .claude/ # Claude Code config and commands
|
|
199
|
-
├── .gemini/ # Gemini CLI config and commands
|
|
200
202
|
├── .opencode/ # OpenCode config and commands
|
|
201
203
|
└── AGENTS.md # Universal AI agent instructions
|
|
202
204
|
```
|
|
@@ -205,6 +207,7 @@ my-project/
|
|
|
205
207
|
|
|
206
208
|
In-depth guides live under [`docs/en/`](./docs/en/README.md):
|
|
207
209
|
|
|
210
|
+
- [Process Data Archive](./docs/en/process-data.md) — capture, verify, audit, repair, export, privacy, and backup guidance
|
|
208
211
|
- [Architecture Overview](./docs/en/architecture.md) — bootstrap CLI, end-to-end flow, layered architecture
|
|
209
212
|
- [Platform Support](./docs/en/platform-support.md) — macOS, Linux, Windows; sandbox engines and resources
|
|
210
213
|
- [Sandbox](./docs/en/sandbox.md) — sandbox aliases, host-sandbox file exchange, user-level dotfiles channel
|
package/README.zh-CN.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<h1 align="center">Agent Infra</h1>
|
|
6
6
|
|
|
7
7
|
<p align="center">
|
|
8
|
-
AI 编程代理的协作基础设施 —— 为 Claude Code、Codex、
|
|
8
|
+
AI 编程代理的协作基础设施 —— 为 Claude Code、Codex、Antigravity CLI、OpenCode 提供 skills、工作流和沙箱。
|
|
9
9
|
</p>
|
|
10
10
|
|
|
11
11
|
<p align="center">
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
|
|
29
29
|
## 为什么需要 agent-infra?
|
|
30
30
|
|
|
31
|
-
越来越多的团队会在同一个仓库里混用 Claude Code、Codex、
|
|
31
|
+
越来越多的团队会在同一个仓库里混用 Claude Code、Codex、Antigravity CLI、OpenCode 等 AI TUI,但每个工具往往都会带来自己的命令体系、提示词习惯和本地约定。缺少共享层时,结果通常是工作流割裂、初始化重复、任务历史难以追踪。
|
|
32
32
|
|
|
33
33
|
agent-infra 的目标就是把这层共享基础设施标准化。它为所有支持的 AI TUI 提供统一的任务生命周期、统一的 skill 词汇、统一的项目治理文件、隔离的开发沙箱以及统一的升级路径,让团队切换工具时不必重新发明流程。
|
|
34
34
|
|
|
@@ -80,16 +80,17 @@ agent-infra 的目标就是把这层共享基础设施标准化。它为所有
|
|
|
80
80
|
|
|
81
81
|
**11 条命令,1 次自然语言纠正,从 Issue 到合并 PR。** 这就是完整的 SOP —— 编程也可以有标准作业流程。
|
|
82
82
|
|
|
83
|
-
以上每条命令在 Claude Code、Codex、
|
|
83
|
+
以上每条命令在 Claude Code、Codex、Antigravity CLI、OpenCode 中完全通用。任务进行到一半切换工具,工作流状态照常延续。每个 skill 背后做了什么,见 [内置 AI Skills](./docs/zh-CN/skills.md)。
|
|
84
84
|
|
|
85
85
|
## 核心特性
|
|
86
86
|
|
|
87
|
-
- **多 AI 协作**:为 Claude Code、Codex、
|
|
87
|
+
- **多 AI 协作**:为 Claude Code、Codex、Antigravity CLI、OpenCode 提供统一的协作模型
|
|
88
88
|
- **引导 CLI + skill 驱动执行**:初始化一次,后续日常操作交给 AI skills
|
|
89
89
|
- **IM 命令桥接**:把飞书消息路由到内置命令、任务只读视图、沙箱管理和受控生命周期 skill 执行
|
|
90
90
|
- **双语文档**:英文为主文档,配套同步的中文版本
|
|
91
91
|
- **模板源架构**:`templates/` 目录镜像最终渲染出的项目结构
|
|
92
92
|
- **AI 辅助升级**:模板升级时可合并变更,同时尽量保留项目侧定制
|
|
93
|
+
- **可审计的过程数据归档**:把本地任务与 GitHub 证据保存为只追加、可校验的快照
|
|
93
94
|
|
|
94
95
|
## 快速开始
|
|
95
96
|
|
|
@@ -152,7 +153,7 @@ CLI 会收集项目元数据,让你选择启用的 Agent Client,为其安装
|
|
|
152
153
|
|-----|------|
|
|
153
154
|
| Claude Code | `/update-agent-infra` |
|
|
154
155
|
| Codex | `$update-agent-infra` |
|
|
155
|
-
|
|
|
156
|
+
| Antigravity CLI | `/update-agent-infra` |
|
|
156
157
|
| OpenCode | `/update-agent-infra` |
|
|
157
158
|
|
|
158
159
|
该命令会检测当前打包模板版本并渲染所有受管理文件。首次安装和后续升级都使用同一条命令。
|
|
@@ -165,21 +166,23 @@ CLI 会收集项目元数据,让你选择启用的 Agent Client,为其安装
|
|
|
165
166
|
ai agent-client list
|
|
166
167
|
ai agent-client status
|
|
167
168
|
ai agent-client enable codex
|
|
168
|
-
ai agent-client disable
|
|
169
|
+
ai agent-client disable antigravity-cli
|
|
169
170
|
ai agent-client configure
|
|
170
171
|
```
|
|
171
172
|
|
|
172
|
-
最常用的生命周期命令,按交付顺序排列。命令前缀因 TUI 而异(Claude Code/OpenCode 用 `/skill`,Codex 用 `$skill
|
|
173
|
+
最常用的生命周期命令,按交付顺序排列。命令前缀因 TUI 而异(Claude Code/Antigravity/OpenCode 用 `/skill`,Codex 用 `$skill`),工作流语义保持一致。
|
|
173
174
|
|
|
174
175
|
| 命令 | 用途 |
|
|
175
176
|
|------|------|
|
|
176
177
|
| `create-task` / `import-issue` | 从描述或 GitHub Issue 创建任务 |
|
|
177
|
-
| `run-task` |
|
|
178
|
+
| `run-task` | 当所选客户端能提供已验证的 actual model/effort 证据时,用 fresh 隔离 executor/reviewer 续跑生命周期;当前内建客户端(含 Claude Code 与 Codex)因原生 start 事件未暴露全部必需证据,会在委派前失败关闭 |
|
|
178
179
|
| `analyze-task` → `review-analysis` | 明确范围与风险,再审查分析 |
|
|
179
180
|
| `plan-task` → `review-plan` | 设计实现路径,再审查方案 |
|
|
180
181
|
| `code-task` → `review-code` | 实现并测试,再执行结构化代码审查 |
|
|
181
182
|
| `commit` → `create-pr` → `complete-task` | 提交、创建 PR、归档任务 |
|
|
182
183
|
|
|
184
|
+
启动时可提供原子角色策略,例如:`$run-task 42 --executor-model <id> --executor-reasoning-effort <值> --reviewer-model <id> --reviewer-reasoning-effort <值>`。两个角色可以使用同一模型。完全没有显式策略时,`run-task` 读取当前 Agent Client 可选的 `agentClients[].orchestration`;两个来源都不完整时,会在创建任何 run 前展示宿主模型选择指引。重入使用已持久化的 v2 策略。
|
|
185
|
+
|
|
183
186
|
完整清单(任务状态、发布、安全、项目维护等 skill)见 [内置 AI Skills](./docs/zh-CN/skills.md)。
|
|
184
187
|
|
|
185
188
|
## 安装效果
|
|
@@ -195,7 +198,6 @@ my-project/
|
|
|
195
198
|
│ ├── workflows/ # 4 个预置工作流
|
|
196
199
|
│ └── templates/ # 任务与产物模板
|
|
197
200
|
├── .claude/ # Claude Code 配置与命令
|
|
198
|
-
├── .gemini/ # Gemini CLI 配置与命令
|
|
199
201
|
├── .opencode/ # OpenCode 配置与命令
|
|
200
202
|
└── AGENTS.md # 通用 AI agent 指令
|
|
201
203
|
```
|
|
@@ -204,6 +206,7 @@ my-project/
|
|
|
204
206
|
|
|
205
207
|
深度指南位于 [`docs/zh-CN/`](./docs/zh-CN/README.md):
|
|
206
208
|
|
|
209
|
+
- [过程数据归档](./docs/zh-CN/process-data.md) — 采集、校验、审计、修复、导出、隐私与备份指南
|
|
207
210
|
- [架构概览](./docs/zh-CN/architecture.md) — 引导 CLI、端到端流程、分层架构
|
|
208
211
|
- [平台支持](./docs/zh-CN/platform-support.md) — macOS、Linux、Windows;沙箱引擎与资源配置
|
|
209
212
|
- [沙箱](./docs/zh-CN/sandbox.md) — 沙箱 aliases、宿主-沙箱文件交换、用户级 dotfiles 通道
|
package/bin/cli.ts
CHANGED
|
@@ -17,6 +17,7 @@ Usage: ai <command> [options]
|
|
|
17
17
|
Commands:
|
|
18
18
|
agent-client List, inspect, enable, disable, or configure Agent Clients
|
|
19
19
|
cp <ssh-alias> Copy local clipboard image to a remote macOS clipboard or Linux sandbox over SSH
|
|
20
|
+
data Capture, verify, audit, repair, and export process data
|
|
20
21
|
decide Record a ruling; code-stage decisions require explicit implementation intent
|
|
21
22
|
help Show this help message
|
|
22
23
|
init Initialize a new project with update-agent-infra seed command
|
|
@@ -94,6 +95,17 @@ switch (command) {
|
|
|
94
95
|
if (code) process.exitCode = code;
|
|
95
96
|
break;
|
|
96
97
|
}
|
|
98
|
+
case 'data': {
|
|
99
|
+
const imported = await importCommand('../lib/process-data/index.ts');
|
|
100
|
+
if (!imported) break;
|
|
101
|
+
const { cmdData } = imported;
|
|
102
|
+
const code = await cmdData(process.argv.slice(3)).catch((e: unknown) => {
|
|
103
|
+
process.stderr.write(`Error: ${errorMessage(e)}\n`);
|
|
104
|
+
return 1;
|
|
105
|
+
});
|
|
106
|
+
if (code) process.exitCode = code;
|
|
107
|
+
break;
|
|
108
|
+
}
|
|
97
109
|
case 'decide': {
|
|
98
110
|
const imported = await importCommand('../lib/decide.ts');
|
|
99
111
|
if (!imported) break;
|
package/dist/bin/cli.js
CHANGED
|
@@ -21,6 +21,7 @@ Usage: ai <command> [options]
|
|
|
21
21
|
Commands:
|
|
22
22
|
agent-client List, inspect, enable, disable, or configure Agent Clients
|
|
23
23
|
cp <ssh-alias> Copy local clipboard image to a remote macOS clipboard or Linux sandbox over SSH
|
|
24
|
+
data Capture, verify, audit, repair, and export process data
|
|
24
25
|
decide Record a ruling; code-stage decisions require explicit implementation intent
|
|
25
26
|
help Show this help message
|
|
26
27
|
init Initialize a new project with update-agent-infra seed command
|
|
@@ -96,6 +97,19 @@ switch (command) {
|
|
|
96
97
|
process.exitCode = code;
|
|
97
98
|
break;
|
|
98
99
|
}
|
|
100
|
+
case 'data': {
|
|
101
|
+
const imported = await importCommand('../lib/process-data/index.ts');
|
|
102
|
+
if (!imported)
|
|
103
|
+
break;
|
|
104
|
+
const { cmdData } = imported;
|
|
105
|
+
const code = await cmdData(process.argv.slice(3)).catch((e) => {
|
|
106
|
+
process.stderr.write(`Error: ${errorMessage(e)}\n`);
|
|
107
|
+
return 1;
|
|
108
|
+
});
|
|
109
|
+
if (code)
|
|
110
|
+
process.exitCode = code;
|
|
111
|
+
break;
|
|
112
|
+
}
|
|
99
113
|
case 'decide': {
|
|
100
114
|
const imported = await importCommand('../lib/decide.ts');
|
|
101
115
|
if (!imported)
|
package/dist/bin/internal-cli.js
CHANGED
|
@@ -5,114 +5,140 @@ if (major < 22 || (major === 22 && minor < 9)) {
|
|
|
5
5
|
process.exit(1);
|
|
6
6
|
}
|
|
7
7
|
const command = process.argv[2] || '';
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
break;
|
|
13
|
-
}
|
|
14
|
-
case 'git-workflow': {
|
|
15
|
-
const { gitWorkflow } = await import('../lib/internal/git-workflow.js');
|
|
16
|
-
gitWorkflow(process.argv.slice(3));
|
|
17
|
-
break;
|
|
18
|
-
}
|
|
19
|
-
case 'release-workflow': {
|
|
20
|
-
const { releaseWorkflow } = await import('../lib/internal/release-workflow.js');
|
|
21
|
-
await releaseWorkflow(process.argv.slice(3));
|
|
22
|
-
break;
|
|
23
|
-
}
|
|
24
|
-
case 'platform-release-notes': {
|
|
25
|
-
const { platformReleaseNotes } = await import('../lib/internal/platform-release-notes.js');
|
|
26
|
-
platformReleaseNotes(process.argv.slice(3));
|
|
27
|
-
break;
|
|
28
|
-
}
|
|
29
|
-
case 'platform-context': {
|
|
30
|
-
const { platformContext } = await import('../lib/internal/platform-context.js');
|
|
31
|
-
platformContext(process.argv.slice(3));
|
|
32
|
-
break;
|
|
33
|
-
}
|
|
34
|
-
case 'platform-comment': {
|
|
35
|
-
const { platformComment } = await import('../lib/internal/platform-comment.js');
|
|
36
|
-
platformComment(process.argv.slice(3));
|
|
37
|
-
break;
|
|
38
|
-
}
|
|
39
|
-
case 'platform-issue': {
|
|
40
|
-
const { platformIssue } = await import('../lib/internal/platform-issue.js');
|
|
41
|
-
platformIssue(process.argv.slice(3));
|
|
42
|
-
break;
|
|
43
|
-
}
|
|
44
|
-
case 'platform-pr': {
|
|
45
|
-
const { platformPr } = await import('../lib/internal/platform-pr.js');
|
|
46
|
-
platformPr(process.argv.slice(3));
|
|
47
|
-
break;
|
|
48
|
-
}
|
|
49
|
-
case 'platform-checks': {
|
|
50
|
-
const { platformChecks } = await import('../lib/internal/platform-checks.js');
|
|
51
|
-
await platformChecks(process.argv.slice(3));
|
|
52
|
-
break;
|
|
53
|
-
}
|
|
54
|
-
case 'task-context': {
|
|
55
|
-
const { taskContext } = await import('../lib/internal/task-context.js');
|
|
56
|
-
taskContext(process.argv.slice(3));
|
|
57
|
-
break;
|
|
58
|
-
}
|
|
59
|
-
case 'task-ledger': {
|
|
60
|
-
const { taskLedger } = await import('../lib/internal/task-ledger.js');
|
|
61
|
-
taskLedger(process.argv.slice(3));
|
|
62
|
-
break;
|
|
63
|
-
}
|
|
64
|
-
case 'task-warning': {
|
|
65
|
-
const { taskWarning } = await import('../lib/internal/task-warning.js');
|
|
66
|
-
taskWarning(process.argv.slice(3));
|
|
67
|
-
break;
|
|
68
|
-
}
|
|
69
|
-
case 'task-artifact': {
|
|
70
|
-
const { taskArtifact } = await import('../lib/internal/task-artifact.js');
|
|
71
|
-
taskArtifact(process.argv.slice(3));
|
|
72
|
-
break;
|
|
73
|
-
}
|
|
74
|
-
case 'task-orchestration': {
|
|
75
|
-
const { taskOrchestration } = await import('../lib/internal/task-orchestration.js');
|
|
76
|
-
taskOrchestration(process.argv.slice(3));
|
|
77
|
-
break;
|
|
78
|
-
}
|
|
79
|
-
case 'task-review': {
|
|
80
|
-
const { taskReview } = await import('../lib/internal/task-review.js');
|
|
81
|
-
taskReview(process.argv.slice(3));
|
|
82
|
-
break;
|
|
83
|
-
}
|
|
84
|
-
case 'task-event': {
|
|
85
|
-
const { taskEvent } = await import('../lib/internal/task-event.js');
|
|
86
|
-
taskEvent(process.argv.slice(3));
|
|
87
|
-
break;
|
|
88
|
-
}
|
|
89
|
-
case 'task-lifecycle': {
|
|
90
|
-
const { taskLifecycle } = await import('../lib/internal/task-lifecycle.js');
|
|
91
|
-
taskLifecycle(process.argv.slice(3));
|
|
92
|
-
break;
|
|
93
|
-
}
|
|
94
|
-
case 'task-short-id': {
|
|
95
|
-
const { taskShortId } = await import('../lib/internal/task-short-id.js');
|
|
96
|
-
taskShortId(process.argv.slice(3));
|
|
97
|
-
break;
|
|
98
|
-
}
|
|
99
|
-
case 'task-snapshot': {
|
|
100
|
-
const { taskSnapshot } = await import('../lib/internal/task-snapshot.js');
|
|
101
|
-
taskSnapshot(process.argv.slice(3));
|
|
102
|
-
break;
|
|
103
|
-
}
|
|
104
|
-
case 'task-verify': {
|
|
105
|
-
const { taskVerify } = await import('../lib/internal/task-verify.js');
|
|
106
|
-
taskVerify(process.argv.slice(3));
|
|
107
|
-
break;
|
|
108
|
-
}
|
|
109
|
-
default:
|
|
110
|
-
process.stdout.write(`${JSON.stringify({
|
|
111
|
-
status: 'failed',
|
|
112
|
-
changed: false,
|
|
113
|
-
error: { code: 'INTERNAL_COMMAND_INVALID', message: `unknown internal command '${command}'` }
|
|
114
|
-
})}\n`);
|
|
115
|
-
process.exitCode = 1;
|
|
8
|
+
if (process.env.AGENT_INFRA_CONTROL_TOKEN
|
|
9
|
+
&& (command === 'task-lifecycle' || command === 'task-orchestration')) {
|
|
10
|
+
const { sandboxControl } = await import('../lib/internal/sandbox-control.js');
|
|
11
|
+
sandboxControl(['client', command, ...process.argv.slice(3)]);
|
|
116
12
|
}
|
|
13
|
+
else
|
|
14
|
+
switch (command) {
|
|
15
|
+
case 'sandbox-control': {
|
|
16
|
+
const { sandboxControl } = await import('../lib/internal/sandbox-control.js');
|
|
17
|
+
sandboxControl(process.argv.slice(3));
|
|
18
|
+
break;
|
|
19
|
+
}
|
|
20
|
+
case 'agent-client': {
|
|
21
|
+
const { agentClient } = await import('../lib/internal/agent-client.js');
|
|
22
|
+
agentClient(process.argv.slice(3));
|
|
23
|
+
break;
|
|
24
|
+
}
|
|
25
|
+
case 'git-workflow': {
|
|
26
|
+
const { gitWorkflow } = await import('../lib/internal/git-workflow.js');
|
|
27
|
+
gitWorkflow(process.argv.slice(3));
|
|
28
|
+
break;
|
|
29
|
+
}
|
|
30
|
+
case 'release-workflow': {
|
|
31
|
+
const { releaseWorkflow } = await import('../lib/internal/release-workflow.js');
|
|
32
|
+
await releaseWorkflow(process.argv.slice(3));
|
|
33
|
+
break;
|
|
34
|
+
}
|
|
35
|
+
case 'platform-release-notes': {
|
|
36
|
+
const { platformReleaseNotes } = await import('../lib/internal/platform-release-notes.js');
|
|
37
|
+
platformReleaseNotes(process.argv.slice(3));
|
|
38
|
+
break;
|
|
39
|
+
}
|
|
40
|
+
case 'platform-context': {
|
|
41
|
+
const { platformContext } = await import('../lib/internal/platform-context.js');
|
|
42
|
+
platformContext(process.argv.slice(3));
|
|
43
|
+
break;
|
|
44
|
+
}
|
|
45
|
+
case 'platform-comment': {
|
|
46
|
+
const { platformComment } = await import('../lib/internal/platform-comment.js');
|
|
47
|
+
platformComment(process.argv.slice(3));
|
|
48
|
+
break;
|
|
49
|
+
}
|
|
50
|
+
case 'platform-issue': {
|
|
51
|
+
const { platformIssue } = await import('../lib/internal/platform-issue.js');
|
|
52
|
+
platformIssue(process.argv.slice(3));
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
case 'platform-pr': {
|
|
56
|
+
const { platformPr } = await import('../lib/internal/platform-pr.js');
|
|
57
|
+
platformPr(process.argv.slice(3));
|
|
58
|
+
break;
|
|
59
|
+
}
|
|
60
|
+
case 'platform-pr-review': {
|
|
61
|
+
const { platformPrReview } = await import('../lib/internal/platform-pr-review.js');
|
|
62
|
+
platformPrReview(process.argv.slice(3));
|
|
63
|
+
break;
|
|
64
|
+
}
|
|
65
|
+
case 'pr-review-grade': {
|
|
66
|
+
const { prReviewGrade } = await import('../lib/internal/pr-review-grade.js');
|
|
67
|
+
prReviewGrade(process.argv.slice(3));
|
|
68
|
+
break;
|
|
69
|
+
}
|
|
70
|
+
case 'platform-checks': {
|
|
71
|
+
const { platformChecks } = await import('../lib/internal/platform-checks.js');
|
|
72
|
+
await platformChecks(process.argv.slice(3));
|
|
73
|
+
break;
|
|
74
|
+
}
|
|
75
|
+
case 'task-context': {
|
|
76
|
+
const { taskContext } = await import('../lib/internal/task-context.js');
|
|
77
|
+
taskContext(process.argv.slice(3));
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
case 'task-ledger': {
|
|
81
|
+
const { taskLedger } = await import('../lib/internal/task-ledger.js');
|
|
82
|
+
taskLedger(process.argv.slice(3));
|
|
83
|
+
break;
|
|
84
|
+
}
|
|
85
|
+
case 'task-warning': {
|
|
86
|
+
const { taskWarning } = await import('../lib/internal/task-warning.js');
|
|
87
|
+
taskWarning(process.argv.slice(3));
|
|
88
|
+
break;
|
|
89
|
+
}
|
|
90
|
+
case 'task-activity': {
|
|
91
|
+
const { taskActivity } = await import('../lib/internal/task-activity.js');
|
|
92
|
+
taskActivity(process.argv.slice(3));
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
case 'task-artifact': {
|
|
96
|
+
const { taskArtifact } = await import('../lib/internal/task-artifact.js');
|
|
97
|
+
taskArtifact(process.argv.slice(3));
|
|
98
|
+
break;
|
|
99
|
+
}
|
|
100
|
+
case 'task-orchestration': {
|
|
101
|
+
const { taskOrchestration } = await import('../lib/internal/task-orchestration.js');
|
|
102
|
+
taskOrchestration(process.argv.slice(3));
|
|
103
|
+
break;
|
|
104
|
+
}
|
|
105
|
+
case 'task-review': {
|
|
106
|
+
const { taskReview } = await import('../lib/internal/task-review.js');
|
|
107
|
+
taskReview(process.argv.slice(3));
|
|
108
|
+
break;
|
|
109
|
+
}
|
|
110
|
+
case 'task-event': {
|
|
111
|
+
const { taskEvent } = await import('../lib/internal/task-event.js');
|
|
112
|
+
taskEvent(process.argv.slice(3));
|
|
113
|
+
break;
|
|
114
|
+
}
|
|
115
|
+
case 'task-lifecycle': {
|
|
116
|
+
const { taskLifecycle } = await import('../lib/internal/task-lifecycle.js');
|
|
117
|
+
taskLifecycle(process.argv.slice(3));
|
|
118
|
+
break;
|
|
119
|
+
}
|
|
120
|
+
case 'task-short-id': {
|
|
121
|
+
const { taskShortId } = await import('../lib/internal/task-short-id.js');
|
|
122
|
+
taskShortId(process.argv.slice(3));
|
|
123
|
+
break;
|
|
124
|
+
}
|
|
125
|
+
case 'task-snapshot': {
|
|
126
|
+
const { taskSnapshot } = await import('../lib/internal/task-snapshot.js');
|
|
127
|
+
taskSnapshot(process.argv.slice(3));
|
|
128
|
+
break;
|
|
129
|
+
}
|
|
130
|
+
case 'task-verify': {
|
|
131
|
+
const { taskVerify } = await import('../lib/internal/task-verify.js');
|
|
132
|
+
taskVerify(process.argv.slice(3));
|
|
133
|
+
break;
|
|
134
|
+
}
|
|
135
|
+
default:
|
|
136
|
+
process.stdout.write(`${JSON.stringify({
|
|
137
|
+
status: 'failed',
|
|
138
|
+
changed: false,
|
|
139
|
+
error: { code: 'INTERNAL_COMMAND_INVALID', message: `unknown internal command '${command}'` }
|
|
140
|
+
})}\n`);
|
|
141
|
+
process.exitCode = 1;
|
|
142
|
+
}
|
|
117
143
|
export {};
|
|
118
144
|
//# sourceMappingURL=internal-cli.js.map
|
|
@@ -3,6 +3,43 @@ import { SANDBOX_HOOK_PHASES } from '../sandbox/tool-types.js';
|
|
|
3
3
|
const PROJECT_ASSET_CATEGORIES = ['managed', 'merged', 'ejected'];
|
|
4
4
|
const MAX_SANDBOX_HOOK_TIMEOUT_MS = 300_000;
|
|
5
5
|
const TOOL_ID_PATTERN = /^[a-z0-9][a-z0-9-]*$/;
|
|
6
|
+
function freezeSandboxImageDescriptor(id, value) {
|
|
7
|
+
if (value === undefined)
|
|
8
|
+
return undefined;
|
|
9
|
+
const keys = value && typeof value === 'object' && !Array.isArray(value)
|
|
10
|
+
? Object.keys(value)
|
|
11
|
+
: [];
|
|
12
|
+
const fragment = value?.dockerfileFragment;
|
|
13
|
+
const exclusions = value?.dotfilesExclusions;
|
|
14
|
+
const validExclusion = (entry) => {
|
|
15
|
+
if (typeof entry !== 'string'
|
|
16
|
+
|| entry === ''
|
|
17
|
+
|| entry.startsWith('/')
|
|
18
|
+
|| entry.endsWith('/')
|
|
19
|
+
|| entry.includes('\\')
|
|
20
|
+
|| /[*?[\]]/.test(entry)) {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
return entry.split('/').every((segment) => segment !== '' && segment !== '.' && segment !== '..');
|
|
24
|
+
};
|
|
25
|
+
if (!value
|
|
26
|
+
|| typeof value !== 'object'
|
|
27
|
+
|| Array.isArray(value)
|
|
28
|
+
|| keys.length === 0
|
|
29
|
+
|| keys.some((key) => !['dockerfileFragment', 'dotfilesExclusions'].includes(key))
|
|
30
|
+
|| (fragment !== undefined && (typeof fragment !== 'string' || !TOOL_ID_PATTERN.test(fragment)))
|
|
31
|
+
|| (exclusions !== undefined && (!Array.isArray(exclusions)
|
|
32
|
+
|| exclusions.some((entry) => !validExclusion(entry))
|
|
33
|
+
|| new Set(exclusions).size !== exclusions.length))) {
|
|
34
|
+
throw new Error(`Agent Client '${id}' has an invalid sandbox image descriptor`);
|
|
35
|
+
}
|
|
36
|
+
return Object.freeze({
|
|
37
|
+
...(fragment === undefined ? {} : { dockerfileFragment: fragment }),
|
|
38
|
+
...(exclusions === undefined
|
|
39
|
+
? {}
|
|
40
|
+
: { dotfilesExclusions: Object.freeze([...exclusions]) })
|
|
41
|
+
});
|
|
42
|
+
}
|
|
6
43
|
function freezeRecoveryProbe(id, checkId, value) {
|
|
7
44
|
if (!value
|
|
8
45
|
|| typeof value.script !== 'string'
|
|
@@ -116,14 +153,55 @@ function defineAgentClientAdapter(candidate) {
|
|
|
116
153
|
}
|
|
117
154
|
return [capability, Object.freeze({ level: support.level })];
|
|
118
155
|
}));
|
|
156
|
+
const modelSelection = candidate.modelSelection;
|
|
157
|
+
if (!modelSelection || typeof modelSelection !== 'object') {
|
|
158
|
+
throw new Error(`Agent Client '${candidate.id}' has an invalid model-selection context`);
|
|
159
|
+
}
|
|
160
|
+
let frozenModelSelection;
|
|
161
|
+
if (modelSelection.kind === 'interactive-only') {
|
|
162
|
+
if (!modelSelection.command?.trim() || !modelSelection.guidance?.trim()) {
|
|
163
|
+
throw new Error(`Agent Client '${candidate.id}' has an invalid model-selection context`);
|
|
164
|
+
}
|
|
165
|
+
frozenModelSelection = Object.freeze({ ...modelSelection });
|
|
166
|
+
}
|
|
167
|
+
else if (modelSelection.kind === 'catalog'
|
|
168
|
+
&& ['complete', 'partial'].includes(modelSelection.completeness)
|
|
169
|
+
&& typeof modelSelection.source === 'string'
|
|
170
|
+
&& modelSelection.source.trim() !== ''
|
|
171
|
+
&& Array.isArray(modelSelection.models)) {
|
|
172
|
+
const models = modelSelection.models.map((model) => {
|
|
173
|
+
if (!model?.id?.trim() || (model.reasoningEfforts && !Array.isArray(model.reasoningEfforts))) {
|
|
174
|
+
throw new Error(`Agent Client '${candidate.id}' has an invalid model-selection context`);
|
|
175
|
+
}
|
|
176
|
+
return Object.freeze({
|
|
177
|
+
id: model.id,
|
|
178
|
+
...(model.reasoningEfforts
|
|
179
|
+
? { reasoningEfforts: Object.freeze([...model.reasoningEfforts]) }
|
|
180
|
+
: {})
|
|
181
|
+
});
|
|
182
|
+
});
|
|
183
|
+
frozenModelSelection = Object.freeze({
|
|
184
|
+
...modelSelection,
|
|
185
|
+
models: Object.freeze(models)
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
throw new Error(`Agent Client '${candidate.id}' has an invalid model-selection context`);
|
|
190
|
+
}
|
|
191
|
+
const evidence = candidate.delegationEvidence;
|
|
192
|
+
if (!evidence
|
|
193
|
+
|| !['host-event', 'unavailable'].includes(evidence.actualModel)
|
|
194
|
+
|| !['host-event', 'spawn-ack', 'unavailable'].includes(evidence.actualReasoningEffort)) {
|
|
195
|
+
throw new Error(`Agent Client '${candidate.id}' has invalid delegation evidence`);
|
|
196
|
+
}
|
|
119
197
|
if (typeof candidate.project !== 'object'
|
|
120
198
|
|| candidate.project === null
|
|
121
199
|
|| Array.isArray(candidate.project)) {
|
|
122
200
|
throw new Error(`Agent Client '${candidate.id}' has an invalid project descriptor`);
|
|
123
201
|
}
|
|
124
202
|
const ownedPathPrefixes = candidate.project.ownedPathPrefixes;
|
|
125
|
-
if (!Array.isArray(ownedPathPrefixes)
|
|
126
|
-
throw new Error(`Agent Client '${candidate.id}'
|
|
203
|
+
if (!Array.isArray(ownedPathPrefixes)) {
|
|
204
|
+
throw new Error(`Agent Client '${candidate.id}' has invalid owned path prefixes`);
|
|
127
205
|
}
|
|
128
206
|
const paths = ownedPathPrefixes.map((prefix) => {
|
|
129
207
|
if (typeof prefix !== 'string'
|
|
@@ -195,9 +273,55 @@ function defineAgentClientAdapter(candidate) {
|
|
|
195
273
|
target: seed.target
|
|
196
274
|
});
|
|
197
275
|
});
|
|
276
|
+
let customCommand;
|
|
277
|
+
if (candidate.project.customCommand !== undefined) {
|
|
278
|
+
const descriptor = candidate.project.customCommand;
|
|
279
|
+
const placeholders = typeof descriptor?.target === 'string'
|
|
280
|
+
? [...descriptor.target.matchAll(/\$\{([^}]+)\}/g)].map((match) => match[1])
|
|
281
|
+
: [];
|
|
282
|
+
const targetProbe = typeof descriptor?.target === 'string'
|
|
283
|
+
? descriptor.target.replaceAll('${skillName}', 'skill')
|
|
284
|
+
: '';
|
|
285
|
+
const frontmatter = descriptor?.frontmatter;
|
|
286
|
+
if (!descriptor
|
|
287
|
+
|| typeof descriptor !== 'object'
|
|
288
|
+
|| placeholders.length !== 1
|
|
289
|
+
|| placeholders[0] !== 'skillName'
|
|
290
|
+
|| targetProbe.includes('${')
|
|
291
|
+
|| !isProjectRelativeLiteral(targetProbe)
|
|
292
|
+
|| !paths.some((prefix) => targetProbe.startsWith(prefix))
|
|
293
|
+
|| !frontmatter
|
|
294
|
+
|| typeof frontmatter !== 'object'
|
|
295
|
+
|| Array.isArray(frontmatter)
|
|
296
|
+
|| Object.values(frontmatter).some((value) => typeof value !== 'string' && typeof value !== 'boolean')
|
|
297
|
+
|| (descriptor.argumentsToken !== undefined
|
|
298
|
+
&& (typeof descriptor.argumentsToken !== 'string'
|
|
299
|
+
|| descriptor.argumentsToken === ''
|
|
300
|
+
|| /[\r\n]/.test(descriptor.argumentsToken)))
|
|
301
|
+
|| (descriptor.includeUsage !== undefined
|
|
302
|
+
&& typeof descriptor.includeUsage !== 'boolean')
|
|
303
|
+
|| (descriptor.inheritDisableModelInvocation !== undefined
|
|
304
|
+
&& typeof descriptor.inheritDisableModelInvocation !== 'boolean')) {
|
|
305
|
+
throw new Error(`Agent Client '${candidate.id}' has an invalid custom command`);
|
|
306
|
+
}
|
|
307
|
+
customCommand = Object.freeze({
|
|
308
|
+
target: descriptor.target,
|
|
309
|
+
frontmatter: Object.freeze({ ...frontmatter }),
|
|
310
|
+
...(descriptor.argumentsToken === undefined
|
|
311
|
+
? {}
|
|
312
|
+
: { argumentsToken: descriptor.argumentsToken }),
|
|
313
|
+
...(descriptor.includeUsage === undefined
|
|
314
|
+
? {}
|
|
315
|
+
: { includeUsage: descriptor.includeUsage }),
|
|
316
|
+
...(descriptor.inheritDisableModelInvocation === undefined
|
|
317
|
+
? {}
|
|
318
|
+
: { inheritDisableModelInvocation: descriptor.inheritDisableModelInvocation })
|
|
319
|
+
});
|
|
320
|
+
}
|
|
198
321
|
if (!candidate.sandbox || typeof candidate.sandbox.createTool !== 'function') {
|
|
199
322
|
throw new Error(`Agent Client '${candidate.id}' requires a sandbox descriptor`);
|
|
200
323
|
}
|
|
324
|
+
const image = freezeSandboxImageDescriptor(candidate.id, candidate.sandbox.image);
|
|
201
325
|
const hookIds = new Set();
|
|
202
326
|
const hooks = Object.freeze(candidate.sandbox.hooks.map((hook) => {
|
|
203
327
|
if (!hook.id
|
|
@@ -282,12 +406,21 @@ function defineAgentClientAdapter(candidate) {
|
|
|
282
406
|
displayName: candidate.displayName,
|
|
283
407
|
invocation: candidate.invocation,
|
|
284
408
|
capabilities: Object.freeze(capabilities),
|
|
409
|
+
modelSelection: frozenModelSelection,
|
|
410
|
+
delegationEvidence: Object.freeze({ ...evidence }),
|
|
285
411
|
project: Object.freeze({
|
|
286
412
|
ownedPathPrefixes: Object.freeze(paths),
|
|
287
413
|
...projectAssets,
|
|
288
|
-
seedCommands: Object.freeze(seedCommands)
|
|
414
|
+
seedCommands: Object.freeze(seedCommands),
|
|
415
|
+
...(customCommand === undefined ? {} : { customCommand })
|
|
289
416
|
}),
|
|
290
|
-
sandbox: Object.freeze({
|
|
417
|
+
sandbox: Object.freeze({
|
|
418
|
+
createTool,
|
|
419
|
+
aliases,
|
|
420
|
+
hooks,
|
|
421
|
+
recoveryChecks,
|
|
422
|
+
...(image === undefined ? {} : { image })
|
|
423
|
+
})
|
|
291
424
|
});
|
|
292
425
|
}
|
|
293
426
|
export { defineAgentClientAdapter };
|