@fitlab-ai/agent-infra 0.9.13 → 0.9.14
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/bin/cli.ts +26 -9
- package/dist/bin/cli.js +173 -157
- package/dist/bin/internal-cli.js +42 -21
- package/dist/lib/agent-client.js +5 -0
- package/dist/lib/internal/agent-client.js +5 -2
- package/dist/lib/internal/cli-route-inventory.js +152 -0
- package/dist/lib/internal/codex-lifecycle.js +9 -6
- package/dist/lib/internal/codex-sandbox-controller.js +8 -2
- package/dist/lib/internal/git-workflow.js +10 -6
- package/dist/lib/internal/platform-checks.js +16 -4
- package/dist/lib/internal/platform-comment.js +16 -4
- package/dist/lib/internal/platform-context.js +4 -1
- package/dist/lib/internal/platform-issue.js +12 -4
- package/dist/lib/internal/platform-metadata.js +88 -0
- package/dist/lib/internal/platform-pr-review.js +16 -3
- package/dist/lib/internal/platform-pr.js +24 -10
- package/dist/lib/internal/platform-release-notes.js +6 -3
- package/dist/lib/internal/platform-security.js +93 -0
- package/dist/lib/internal/pr-review-grade.js +14 -3
- package/dist/lib/internal/release-workflow.js +19 -5
- package/dist/lib/internal/sandbox-control.js +22 -5
- package/dist/lib/internal/task-activity.js +13 -4
- package/dist/lib/internal/task-artifact.js +186 -27
- package/dist/lib/internal/task-context.js +4 -1
- package/dist/lib/internal/task-create.js +48 -15
- package/dist/lib/internal/task-delivery.js +4 -1
- package/dist/lib/internal/task-event.js +4 -1
- package/dist/lib/internal/task-finalization.js +4 -1
- package/dist/lib/internal/task-invalidation.js +4 -1
- package/dist/lib/internal/task-ledger.js +12 -1
- package/dist/lib/internal/task-lifecycle.js +4 -1
- package/dist/lib/internal/task-operation-registry.js +421 -0
- package/dist/lib/internal/task-orchestration.js +12 -0
- package/dist/lib/internal/task-override.js +10 -3
- package/dist/lib/internal/task-qualification.js +90 -0
- package/dist/lib/internal/task-review.js +4 -1
- package/dist/lib/internal/task-short-id.js +11 -1
- package/dist/lib/internal/task-snapshot.js +4 -1
- package/dist/lib/internal/task-validate.js +7 -2
- package/dist/lib/internal/task-verify.js +5 -1
- package/dist/lib/internal/task-warning.js +8 -1
- package/dist/lib/platform/comment-safety.js +226 -0
- package/dist/lib/platform/github-provider.js +233 -6
- package/dist/lib/platform/issue-comments.js +146 -34
- package/dist/lib/platform/pr-change-report.js +6 -12
- package/dist/lib/platform/pr-summary.js +28 -7
- package/dist/lib/platform/provider-contract.d.ts +67 -1
- package/dist/lib/platform/provider-contract.js +6 -2
- package/dist/lib/platform/provider-validation.js +76 -3
- package/dist/lib/platform/pull-requests.js +115 -170
- package/dist/lib/platform/repository-metadata.js +377 -0
- package/dist/lib/platform/security-alerts.js +155 -0
- package/dist/lib/platform/verification-sync.js +33 -26
- package/dist/lib/process-data/index.js +7 -0
- package/dist/lib/run/index.js +5 -0
- package/dist/lib/sandbox/commands/control-status.js +22 -0
- package/dist/lib/sandbox/commands/create.js +32 -6
- package/dist/lib/sandbox/commands/ls.js +5 -0
- package/dist/lib/sandbox/commands/rm.js +827 -120
- package/dist/lib/sandbox/commands/show.js +16 -0
- package/dist/lib/sandbox/control/client.js +83 -9
- package/dist/lib/sandbox/control/completed-reentry.js +85 -0
- package/dist/lib/sandbox/control/container-identity.js +28 -31
- package/dist/lib/sandbox/control/executor.js +149 -14
- package/dist/lib/sandbox/control/lifecycle.js +621 -127
- package/dist/lib/sandbox/control/native-file-lock.js +177 -0
- package/dist/lib/sandbox/control/server.js +305 -35
- package/dist/lib/sandbox/control/state.js +5 -3
- package/dist/lib/sandbox/control/task-view.js +183 -0
- package/dist/lib/sandbox/engines/authority.js +289 -0
- package/dist/lib/sandbox/engines/docker-exact-discovery.js +97 -0
- package/dist/lib/sandbox/index.js +5 -0
- package/dist/lib/sandbox/recovery.js +21 -1
- package/dist/lib/sandbox/workspace-view.js +2 -1
- package/dist/lib/sandbox/worktree-safety.js +4 -1
- package/dist/lib/server/index.js +8 -0
- package/dist/lib/task/artifact-lifecycle.js +42 -13
- package/dist/lib/task/artifact-operations.js +520 -0
- package/dist/lib/task/artifact-repair-intent.js +59 -0
- package/dist/lib/task/artifact-schema.js +135 -0
- package/dist/lib/task/capabilities.js +72 -1
- package/dist/lib/task/control-authority.js +4 -0
- package/dist/lib/task/create-service.js +103 -4
- package/dist/lib/task/create.js +25 -0
- package/dist/lib/task/events.js +186 -67
- package/dist/lib/task/index.js +11 -3
- package/dist/lib/task/local-artifact-finalization.js +75 -150
- package/dist/lib/task/orchestration.js +192 -52
- package/dist/lib/task/qualification-audit.js +490 -0
- package/dist/lib/task/qualification-confirmation.js +109 -0
- package/dist/lib/task/qualification-intents.js +148 -0
- package/dist/lib/task/review-artifacts.js +22 -23
- package/dist/lib/task/review-finalization.js +121 -4
- package/dist/lib/task/sections.js +6 -4
- package/dist/lib/task/verification-config.js +11 -0
- package/dist/lib/task/verification-engine.js +54 -4
- package/dist/lifecycle-build-manifest.json +3 -3
- package/lib/agent-client.ts +9 -0
- package/lib/internal/agent-client.ts +4 -2
- package/lib/internal/cli-route-inventory.ts +140 -0
- package/lib/internal/codex-lifecycle.ts +8 -6
- package/lib/internal/codex-sandbox-controller.ts +7 -2
- package/lib/internal/git-workflow.ts +9 -6
- package/lib/internal/platform-checks.ts +12 -4
- package/lib/internal/platform-comment.ts +12 -4
- package/lib/internal/platform-context.ts +3 -1
- package/lib/internal/platform-issue.ts +11 -4
- package/lib/internal/platform-metadata.ts +70 -0
- package/lib/internal/platform-pr-review.ts +14 -3
- package/lib/internal/platform-pr.ts +23 -10
- package/lib/internal/platform-release-notes.ts +5 -3
- package/lib/internal/platform-security.ts +83 -0
- package/lib/internal/pr-review-grade.ts +10 -3
- package/lib/internal/release-workflow.ts +17 -5
- package/lib/internal/sandbox-control.ts +19 -5
- package/lib/internal/task-activity.ts +12 -4
- package/lib/internal/task-artifact.ts +164 -25
- package/lib/internal/task-context.ts +3 -1
- package/lib/internal/task-create.ts +76 -15
- package/lib/internal/task-delivery.ts +3 -1
- package/lib/internal/task-event.ts +3 -1
- package/lib/internal/task-finalization.ts +3 -1
- package/lib/internal/task-invalidation.ts +3 -1
- package/lib/internal/task-ledger.ts +11 -1
- package/lib/internal/task-lifecycle.ts +3 -1
- package/lib/internal/task-operation-registry.ts +482 -0
- package/lib/internal/task-orchestration.ts +12 -0
- package/lib/internal/task-override.ts +9 -3
- package/lib/internal/task-qualification.ts +61 -0
- package/lib/internal/task-review.ts +3 -1
- package/lib/internal/task-short-id.ts +10 -1
- package/lib/internal/task-snapshot.ts +3 -1
- package/lib/internal/task-validate.ts +6 -2
- package/lib/internal/task-verify.ts +4 -1
- package/lib/internal/task-warning.ts +7 -1
- package/lib/platform/comment-safety.ts +250 -0
- package/lib/platform/github-provider.ts +229 -7
- package/lib/platform/issue-comments.ts +160 -35
- package/lib/platform/pr-change-report.ts +6 -12
- package/lib/platform/pr-summary.ts +27 -6
- package/lib/platform/provider-contract.ts +78 -3
- package/lib/platform/provider-validation.ts +85 -3
- package/lib/platform/pull-requests.ts +126 -178
- package/lib/platform/repository-metadata.ts +453 -0
- package/lib/platform/security-alerts.ts +191 -0
- package/lib/platform/verification-sync.ts +32 -28
- package/lib/process-data/index.ts +7 -0
- package/lib/run/index.ts +5 -0
- package/lib/sandbox/commands/control-status.ts +26 -0
- package/lib/sandbox/commands/create.ts +46 -6
- package/lib/sandbox/commands/ls.ts +7 -0
- package/lib/sandbox/commands/rm.ts +1000 -87
- package/lib/sandbox/commands/show.ts +16 -0
- package/lib/sandbox/control/client.ts +103 -9
- package/lib/sandbox/control/completed-reentry.ts +98 -0
- package/lib/sandbox/control/container-identity.ts +27 -43
- package/lib/sandbox/control/executor.ts +177 -12
- package/lib/sandbox/control/lifecycle.ts +629 -17
- package/lib/sandbox/control/native-file-lock.ts +209 -0
- package/lib/sandbox/control/protocol.ts +5 -2
- package/lib/sandbox/control/server.ts +319 -37
- package/lib/sandbox/control/state.ts +6 -3
- package/lib/sandbox/control/task-view.ts +240 -0
- package/lib/sandbox/engines/authority.ts +365 -0
- package/lib/sandbox/engines/docker-exact-discovery.ts +132 -0
- package/lib/sandbox/index.ts +7 -0
- package/lib/sandbox/recovery.ts +21 -1
- package/lib/sandbox/workspace-view.ts +9 -3
- package/lib/sandbox/worktree-safety.ts +4 -1
- package/lib/server/index.ts +10 -0
- package/lib/task/artifact-lifecycle.ts +38 -16
- package/lib/task/artifact-operations.ts +626 -0
- package/lib/task/artifact-repair-intent.ts +71 -0
- package/lib/task/artifact-schema.ts +192 -0
- package/lib/task/capabilities.ts +70 -1
- package/lib/task/control-authority.ts +11 -1
- package/lib/task/create-service.ts +131 -6
- package/lib/task/create.ts +27 -0
- package/lib/task/events.ts +161 -65
- package/lib/task/index.ts +16 -3
- package/lib/task/local-artifact-finalization.ts +87 -218
- package/lib/task/orchestration.ts +172 -49
- package/lib/task/qualification-audit.ts +599 -0
- package/lib/task/qualification-confirmation.ts +117 -0
- package/lib/task/qualification-intents.ts +150 -0
- package/lib/task/review-artifacts.ts +21 -22
- package/lib/task/review-finalization.ts +133 -4
- package/lib/task/sections.ts +6 -4
- package/lib/task/verification-config.ts +12 -0
- package/lib/task/verification-engine.ts +55 -4
- package/package.json +6 -1
- package/templates/.agents/rules/README.en.md +2 -0
- package/templates/.agents/rules/README.zh-CN.md +2 -0
- package/templates/.agents/rules/decision-qualification.en.md +22 -0
- package/templates/.agents/rules/decision-qualification.zh-CN.md +22 -0
- package/templates/.agents/rules/evidence-reporting.en.md +28 -0
- package/templates/.agents/rules/evidence-reporting.zh-CN.md +28 -0
- package/templates/.agents/rules/label-milestone-setup.en.md +7 -7
- package/templates/.agents/rules/label-milestone-setup.zh-CN.md +7 -7
- package/templates/.agents/rules/local-artifact-repair.en.md +5 -1
- package/templates/.agents/rules/local-artifact-repair.zh-CN.md +5 -1
- package/templates/.agents/rules/security-alerts.en.md +8 -8
- package/templates/.agents/rules/security-alerts.zh-CN.md +8 -8
- package/templates/.agents/skills/analyze-task/SKILL.en.md +15 -2
- package/templates/.agents/skills/analyze-task/SKILL.zh-CN.md +19 -2
- package/templates/.agents/skills/analyze-task/config/verify.en.json +1 -12
- package/templates/.agents/skills/analyze-task/config/verify.zh-CN.json +1 -12
- package/templates/.agents/skills/close-codescan/SKILL.en.md +2 -2
- package/templates/.agents/skills/close-codescan/SKILL.zh-CN.md +2 -2
- package/templates/.agents/skills/close-dependabot/SKILL.en.md +2 -2
- package/templates/.agents/skills/close-dependabot/SKILL.zh-CN.md +2 -2
- package/templates/.agents/skills/code-task/SKILL.en.md +14 -1
- package/templates/.agents/skills/code-task/SKILL.zh-CN.md +14 -1
- package/templates/.agents/skills/code-task/config/verify.en.json +5 -14
- package/templates/.agents/skills/code-task/config/verify.zh-CN.json +5 -14
- package/templates/.agents/skills/code-task/reference/code-rules.en.md +5 -4
- package/templates/.agents/skills/code-task/reference/code-rules.zh-CN.md +5 -4
- package/templates/.agents/skills/code-task/reference/dual-mode.en.md +1 -1
- package/templates/.agents/skills/code-task/reference/dual-mode.zh-CN.md +1 -1
- package/templates/.agents/skills/code-task/reference/fix-mode.en.md +3 -1
- package/templates/.agents/skills/code-task/reference/fix-mode.zh-CN.md +3 -1
- package/templates/.agents/skills/code-task/reference/report-template.en.md +42 -15
- package/templates/.agents/skills/code-task/reference/report-template.zh-CN.md +39 -12
- package/templates/.agents/skills/complete-manual-validation/SKILL.en.md +5 -1
- package/templates/.agents/skills/complete-manual-validation/SKILL.zh-CN.md +5 -1
- package/templates/.agents/skills/complete-manual-validation/reference/report-template.en.md +2 -0
- package/templates/.agents/skills/complete-manual-validation/reference/report-template.zh-CN.md +2 -0
- package/templates/.agents/skills/complete-task/SKILL.en.md +9 -22
- package/templates/.agents/skills/complete-task/SKILL.zh-CN.md +9 -22
- package/templates/.agents/skills/create-task/SKILL.en.md +8 -0
- package/templates/.agents/skills/create-task/SKILL.zh-CN.md +7 -0
- package/templates/.agents/skills/import-codescan/SKILL.en.md +1 -1
- package/templates/.agents/skills/import-codescan/SKILL.zh-CN.md +1 -1
- package/templates/.agents/skills/import-dependabot/SKILL.en.md +1 -1
- package/templates/.agents/skills/import-dependabot/SKILL.zh-CN.md +1 -1
- package/templates/.agents/skills/init-labels/SKILL.en.md +8 -8
- package/templates/.agents/skills/init-labels/SKILL.zh-CN.md +8 -8
- package/templates/.agents/skills/init-milestones/SKILL.en.md +9 -11
- package/templates/.agents/skills/init-milestones/SKILL.zh-CN.md +9 -11
- package/templates/.agents/skills/plan-task/SKILL.en.md +14 -1
- package/templates/.agents/skills/plan-task/SKILL.zh-CN.md +16 -1
- package/templates/.agents/skills/plan-task/config/verify.en.json +4 -14
- package/templates/.agents/skills/plan-task/config/verify.zh-CN.json +4 -14
- package/templates/.agents/skills/review-analysis/SKILL.en.md +14 -1
- package/templates/.agents/skills/review-analysis/SKILL.zh-CN.md +14 -1
- package/templates/.agents/skills/review-analysis/config/verify.en.json +1 -18
- package/templates/.agents/skills/review-analysis/config/verify.zh-CN.json +1 -18
- package/templates/.agents/skills/review-analysis/reference/report-template.en.md +50 -23
- package/templates/.agents/skills/review-analysis/reference/report-template.zh-CN.md +45 -18
- package/templates/.agents/skills/review-code/SKILL.en.md +14 -1
- package/templates/.agents/skills/review-code/SKILL.zh-CN.md +14 -1
- package/templates/.agents/skills/review-code/config/verify.en.json +1 -23
- package/templates/.agents/skills/review-code/config/verify.zh-CN.json +1 -23
- package/templates/.agents/skills/review-code/reference/report-template.en.md +49 -22
- package/templates/.agents/skills/review-code/reference/report-template.zh-CN.md +45 -18
- package/templates/.agents/skills/review-plan/SKILL.en.md +14 -1
- package/templates/.agents/skills/review-plan/SKILL.zh-CN.md +14 -1
- package/templates/.agents/skills/review-plan/config/verify.en.json +1 -18
- package/templates/.agents/skills/review-plan/config/verify.zh-CN.json +1 -18
- package/templates/.agents/skills/review-plan/reference/report-template.en.md +49 -22
- package/templates/.agents/skills/review-plan/reference/report-template.zh-CN.md +45 -18
- package/templates/.agents/skills/review-pr/SKILL.en.md +5 -1
- package/templates/.agents/skills/review-pr/SKILL.zh-CN.md +5 -1
- package/templates/.agents/skills/review-pr/reference/report-template.en.md +4 -3
- package/templates/.agents/skills/review-pr/reference/report-template.zh-CN.md +4 -3
- package/templates/.agents/skills/run-manual-validation/SKILL.en.md +5 -1
- package/templates/.agents/skills/run-manual-validation/SKILL.zh-CN.md +5 -1
- package/templates/.agents/skills/run-manual-validation/reference/report-template.en.md +3 -1
- package/templates/.agents/skills/run-manual-validation/reference/report-template.zh-CN.md +3 -1
- package/templates/.agents/skills/test/SKILL.en.md +13 -2
- package/templates/.agents/skills/test/SKILL.zh-CN.md +13 -2
- package/templates/.agents/skills/update-agent-infra/scripts/sync-templates.js +14 -0
- package/templates/.agents/templates/task.en.md +6 -0
- package/templates/.agents/templates/task.zh-CN.md +6 -0
- package/templates/.agents/scripts/security-alerts.github.sh +0 -151
- package/templates/.agents/scripts/security-alerts.sh +0 -31
- package/templates/.agents/skills/init-labels/scripts/init-labels.github.sh +0 -146
- package/templates/.agents/skills/init-labels/scripts/init-labels.sh +0 -32
- package/templates/.agents/skills/init-milestones/scripts/init-milestones.github.sh +0 -294
- package/templates/.agents/skills/init-milestones/scripts/init-milestones.sh +0 -6
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
export const PUBLIC_CLI_COMMAND_ALIASES = Object.freeze({
|
|
2
|
+
'': 'help',
|
|
3
|
+
s: 'sandbox',
|
|
4
|
+
t: 'task',
|
|
5
|
+
'--version': 'version',
|
|
6
|
+
'-v': 'version'
|
|
7
|
+
});
|
|
8
|
+
export const PUBLIC_CLI_SELECTOR_ALIASES = Object.freeze({
|
|
9
|
+
task: Object.freeze({ d: 'decisions' })
|
|
10
|
+
});
|
|
11
|
+
export const PUBLIC_CLI_ROUTE_SELECTORS = Object.freeze({
|
|
12
|
+
'agent-client': ['list', 'status', 'enable', 'disable', 'configure'],
|
|
13
|
+
cp: ['cp'],
|
|
14
|
+
data: ['capture', 'verify', 'audit', 'repair', 'export'],
|
|
15
|
+
decide: ['decide'],
|
|
16
|
+
help: ['help'],
|
|
17
|
+
init: ['init'],
|
|
18
|
+
merge: ['merge'],
|
|
19
|
+
run: ['create-task', 'task-skill', 'recreate'],
|
|
20
|
+
sandbox: ['create', 'exec', 'ls', 'show', 'prune', 'rebuild', 'refresh', 'rm', 'start', 'vm'],
|
|
21
|
+
server: ['start', 'stop', 'status', 'logs', '__daemon'],
|
|
22
|
+
task: ['cat', 'decisions', 'files', 'grep', 'issue-body', 'log', 'ls', 'show', 'status'],
|
|
23
|
+
sync: ['sync'],
|
|
24
|
+
update: ['update'],
|
|
25
|
+
version: ['version']
|
|
26
|
+
});
|
|
27
|
+
/**
|
|
28
|
+
* The selector definitions consumed by every internal handler. Keep this
|
|
29
|
+
* module free of handler imports so the pre-import task-view guard remains
|
|
30
|
+
* effective.
|
|
31
|
+
*/
|
|
32
|
+
export const INTERNAL_HANDLER_ROUTE_SELECTORS = Object.freeze({
|
|
33
|
+
'task-create': ['input'],
|
|
34
|
+
'task-qualification': ['proposal', 'confirm', 'supersede', 'revoke'],
|
|
35
|
+
'sandbox-control': ['serve', 'execute', 'recover', 'client'],
|
|
36
|
+
'agent-client': ['next-steps', 'model-selection'],
|
|
37
|
+
'codex-lifecycle': ['preflight', 'capability-arm', 'hook-event', 'resolve-start', 'resolve-stop', 'consume'],
|
|
38
|
+
'codex-sandbox-controller': ['verify-context', 'run'],
|
|
39
|
+
'git-workflow': ['inspect', 'preview-tree', 'snapshot', 'compare-trees', 'commit', 'push-rebased'],
|
|
40
|
+
'task-delivery': ['deliver'],
|
|
41
|
+
'release-workflow': ['inspect', 'prepare', 'publish', 'post-prepare', 'post-publish'],
|
|
42
|
+
'platform-release-notes': ['context', 'stage', 'publish'],
|
|
43
|
+
'platform-security': ['read', 'dismiss'],
|
|
44
|
+
'platform-metadata': ['init-labels', 'init-milestones'],
|
|
45
|
+
'platform-context': ['resolve'],
|
|
46
|
+
'platform-comment': ['list', 'owner', 'backfill', 'sync'],
|
|
47
|
+
'platform-issue': ['inspect', 'create', 'bind', 'sync'],
|
|
48
|
+
'platform-pr': ['inspect', 'summary-context', 'resolve-external', 'create', 'bind', 'skip', 'sync', 'change-report', 'summary-sync', 'sync-in-labels'],
|
|
49
|
+
'platform-pr-review': ['inspect', 'list', 'publish-pr', 'publish-task'],
|
|
50
|
+
'pr-review-grade': ['decide', 'resolve-host', 'verify-artifact'],
|
|
51
|
+
'platform-checks': ['inspect', 'watch', 'resolve-run', 'logs'],
|
|
52
|
+
'task-context': ['resolve'],
|
|
53
|
+
'task-ledger': ['decision-next-id', 'stage-status', 'finding-upsert', 'finding-respond', 'finding-review', 'decision-upsert', 'rework-intent-upsert'],
|
|
54
|
+
'task-warning': ['list', 'add', 'set-status'],
|
|
55
|
+
'task-activity': ['pr-review-inspect', 'pr-review-start', 'pr-review-complete', 'pr-review-terminate'],
|
|
56
|
+
'task-artifact': ['inspect', 'init', 'repair', 'finalize-local'],
|
|
57
|
+
'task-orchestration': ['status', 'progress'],
|
|
58
|
+
'task-review': ['finalize-summary'],
|
|
59
|
+
'task-event': ['event'],
|
|
60
|
+
'task-invalidation': ['reconcile'],
|
|
61
|
+
'task-override': ['diagnose', 'issue', 'consume'],
|
|
62
|
+
'task-lifecycle': ['intent'],
|
|
63
|
+
'task-finalization': ['complete'],
|
|
64
|
+
'task-short-id': ['list', 'list-verify', 'alloc', 'release', 'resolve'],
|
|
65
|
+
'task-snapshot': ['snapshot'],
|
|
66
|
+
'task-verify': ['event'],
|
|
67
|
+
'task-validate': ['snapshot', 'inplace']
|
|
68
|
+
});
|
|
69
|
+
export const INTERNAL_CLI_ROUTE_SELECTORS = INTERNAL_HANDLER_ROUTE_SELECTORS;
|
|
70
|
+
function first(args) {
|
|
71
|
+
return args[0] ?? '';
|
|
72
|
+
}
|
|
73
|
+
function optionValue(args, name) {
|
|
74
|
+
const index = args.indexOf(name);
|
|
75
|
+
if (index >= 0)
|
|
76
|
+
return args[index + 1];
|
|
77
|
+
const prefix = `${name}=`;
|
|
78
|
+
return args.find((arg) => arg.startsWith(prefix))?.slice(prefix.length);
|
|
79
|
+
}
|
|
80
|
+
export function internalRouteSelector(command, args) {
|
|
81
|
+
if (command === 'sandbox-control')
|
|
82
|
+
return first(args);
|
|
83
|
+
if (command === 'task-create')
|
|
84
|
+
return 'input';
|
|
85
|
+
if (command === 'task-qualification')
|
|
86
|
+
return args[1] ?? '';
|
|
87
|
+
if (command === 'task-lifecycle')
|
|
88
|
+
return args[1] ? 'intent' : '';
|
|
89
|
+
if (command === 'task-finalization')
|
|
90
|
+
return args[1] === 'complete' ? 'complete' : '';
|
|
91
|
+
if (command === 'task-event')
|
|
92
|
+
return args[1] ? 'event' : '';
|
|
93
|
+
if (command === 'task-verify')
|
|
94
|
+
return args[0] && args[1] ? 'event' : '';
|
|
95
|
+
if (command === 'task-snapshot')
|
|
96
|
+
return 'snapshot';
|
|
97
|
+
if (command === 'task-validate')
|
|
98
|
+
return optionValue(args, '--scope') ?? 'snapshot';
|
|
99
|
+
if (command === 'task-short-id')
|
|
100
|
+
return first(args) === 'list' && args.includes('--verify') ? 'list-verify' : first(args);
|
|
101
|
+
if (command === 'task-orchestration')
|
|
102
|
+
return args[1] === 'status' ? 'status' : args[1] ? 'progress' : '';
|
|
103
|
+
if (command === 'task-review')
|
|
104
|
+
return args[1] ?? '';
|
|
105
|
+
if (command === 'task-invalidation')
|
|
106
|
+
return args[1] ?? '';
|
|
107
|
+
if (command === 'task-override')
|
|
108
|
+
return args[1] ?? '';
|
|
109
|
+
if (command === 'task-artifact')
|
|
110
|
+
return args[1] ?? '';
|
|
111
|
+
if (command === 'platform-pr-review' && first(args) === 'publish') {
|
|
112
|
+
const scope = optionValue(args, '--scope') ?? '';
|
|
113
|
+
return /^TASK-\d{8}-\d{6}$/u.test(scope) ? 'publish-task' : /^pr\d+$/u.test(scope) ? 'publish-pr' : '';
|
|
114
|
+
}
|
|
115
|
+
if (['task-ledger', 'task-warning', 'task-activity'].includes(command))
|
|
116
|
+
return args[1] ?? '';
|
|
117
|
+
if (command === 'task-delivery')
|
|
118
|
+
return args[1] ?? '';
|
|
119
|
+
if (command === 'task-context')
|
|
120
|
+
return first(args);
|
|
121
|
+
return first(args);
|
|
122
|
+
}
|
|
123
|
+
export function isInternalHandlerRoute(command, args) {
|
|
124
|
+
if (args[0] === '--help' || args[0] === '-h')
|
|
125
|
+
return true;
|
|
126
|
+
const selector = internalRouteSelector(command, args);
|
|
127
|
+
const selectors = INTERNAL_HANDLER_ROUTE_SELECTORS[command];
|
|
128
|
+
return Boolean(selector && selectors?.some((candidate) => candidate === selector));
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Marks a selector at the handler's actual dispatch branch.
|
|
132
|
+
*
|
|
133
|
+
* The call is intentionally side-effect free so the top-level task-view guard
|
|
134
|
+
* can still run before a handler module is imported. Route coverage tests read
|
|
135
|
+
* these branch markers independently from the pre-import inventory.
|
|
136
|
+
*/
|
|
137
|
+
export function internalHandlerRoute(command, selector, actualSelector) {
|
|
138
|
+
return command.length > 0 && selector === actualSelector;
|
|
139
|
+
}
|
|
140
|
+
export function ensureInternalHandlerRoute(command, args) {
|
|
141
|
+
if (isInternalHandlerRoute(command, args))
|
|
142
|
+
return true;
|
|
143
|
+
const selector = internalRouteSelector(command, args);
|
|
144
|
+
process.stdout.write(`${JSON.stringify({
|
|
145
|
+
status: 'failed',
|
|
146
|
+
changed: false,
|
|
147
|
+
error: { code: 'INTERNAL_ROUTE_UNREGISTERED', message: `operation '${command} ${selector || first(args)}' is not registered` }
|
|
148
|
+
})}\n`);
|
|
149
|
+
process.exitCode = 1;
|
|
150
|
+
return false;
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=cli-route-inventory.js.map
|
|
@@ -10,6 +10,7 @@ import { verifyCodexSandboxControllerContextWithWarnings } from '../agent-client
|
|
|
10
10
|
import { resolveTaskRef } from '../task/resolve-ref.js';
|
|
11
11
|
import { hasSealableOrchestrationDelegation } from '../task/orchestration.js';
|
|
12
12
|
import { activateCodexOrchestrationDelegation, activateCodexSpawnDelegation, reconcileCodexOrchestrationDelegation, sealCodexOrchestrationDelegation, sealCodexParentDelegation } from '../task/codex-orchestration.js';
|
|
13
|
+
import { ensureInternalHandlerRoute, internalHandlerRoute } from './cli-route-inventory.js';
|
|
13
14
|
const USAGE = 'Usage: agent-infra-internal codex-lifecycle <capability-arm|hook-event|resolve-start|resolve-stop|preflight|consume> [options]\n';
|
|
14
15
|
const MANAGED_AGENT = /^agent-infra-lifecycle-(executor|reviewer)$/;
|
|
15
16
|
function output(value) {
|
|
@@ -144,11 +145,13 @@ function payloadText(payload, key) {
|
|
|
144
145
|
: '';
|
|
145
146
|
}
|
|
146
147
|
async function codexLifecycle(args = []) {
|
|
148
|
+
if (!ensureInternalHandlerRoute('codex-lifecycle', args))
|
|
149
|
+
return;
|
|
147
150
|
const parsed = parse(args);
|
|
148
151
|
if (!parsed || process.exitCode)
|
|
149
152
|
return;
|
|
150
153
|
try {
|
|
151
|
-
if (
|
|
154
|
+
if (internalHandlerRoute('codex-lifecycle', 'preflight', parsed.operation)) {
|
|
152
155
|
const format = parsed.values['--format'] ?? 'json';
|
|
153
156
|
if (!['text', 'json'].includes(format))
|
|
154
157
|
throw new Error("format must be 'text' or 'json'");
|
|
@@ -173,7 +176,7 @@ async function codexLifecycle(args = []) {
|
|
|
173
176
|
output({ status: 'ready', changed: false, evidence: result, diagnostics: result.diagnostics, error: null });
|
|
174
177
|
return;
|
|
175
178
|
}
|
|
176
|
-
if (
|
|
179
|
+
if (internalHandlerRoute('codex-lifecycle', 'capability-arm', parsed.operation)) {
|
|
177
180
|
const taskId = parsed.values['--task-id'];
|
|
178
181
|
if (!taskId)
|
|
179
182
|
throw new Error('capability-arm requires --task-id');
|
|
@@ -197,7 +200,7 @@ async function codexLifecycle(args = []) {
|
|
|
197
200
|
return;
|
|
198
201
|
}
|
|
199
202
|
const store = createCodexLifecycleStore({ cliVersion: cliVersion() });
|
|
200
|
-
if (
|
|
203
|
+
if (internalHandlerRoute('codex-lifecycle', 'hook-event', parsed.operation)) {
|
|
201
204
|
const phase = parsed.values['--event'];
|
|
202
205
|
if (!phase || !['pre-tool', 'subagent-start', 'post-tool', 'subagent-stop'].includes(phase)) {
|
|
203
206
|
throw new Error('hook-event requires a known --event');
|
|
@@ -337,7 +340,7 @@ async function codexLifecycle(args = []) {
|
|
|
337
340
|
const childThreadId = parsed.values['--child-id'];
|
|
338
341
|
if (!childThreadId)
|
|
339
342
|
throw new Error(`operation '${parsed.operation}' requires --child-id`);
|
|
340
|
-
if (
|
|
343
|
+
if (internalHandlerRoute('codex-lifecycle', 'resolve-start', parsed.operation)) {
|
|
341
344
|
if (store.read(childThreadId).state.spawn?.hookDefinitionHash !== hookDefinitionHash()) {
|
|
342
345
|
throw new Error('Codex lifecycle hook definition hash is stale');
|
|
343
346
|
}
|
|
@@ -351,7 +354,7 @@ async function codexLifecycle(args = []) {
|
|
|
351
354
|
process.exitCode = 1;
|
|
352
355
|
return;
|
|
353
356
|
}
|
|
354
|
-
if (
|
|
357
|
+
if (internalHandlerRoute('codex-lifecycle', 'resolve-stop', parsed.operation)) {
|
|
355
358
|
const stopTurnId = store.read(childThreadId).state.stop?.turnId;
|
|
356
359
|
if (!stopTurnId)
|
|
357
360
|
throw new Error('Codex lifecycle stop hook is not available');
|
|
@@ -363,7 +366,7 @@ async function codexLifecycle(args = []) {
|
|
|
363
366
|
output({ status: latest.state.status, changed: true, evidence: latest.state.stopEvidence, diagnostics: [], error: latest.state.error });
|
|
364
367
|
return;
|
|
365
368
|
}
|
|
366
|
-
if (
|
|
369
|
+
if (internalHandlerRoute('codex-lifecycle', 'consume', parsed.operation)) {
|
|
367
370
|
const consumer = parsed.values['--consumer'];
|
|
368
371
|
if (!consumer)
|
|
369
372
|
throw new Error('consume requires --consumer');
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { runCodexSandboxController, verifyCodexSandboxControllerContextWithWarnings } from '../agent-clients/adapters/codex-lifecycle/sandbox-controller.js';
|
|
2
|
+
import { ensureInternalHandlerRoute, internalHandlerRoute } from './cli-route-inventory.js';
|
|
2
3
|
const USAGE = 'Usage: agent-infra-internal codex-sandbox-controller <run|verify-context> [options]\n';
|
|
3
4
|
function fail(code, message, exitCode = 1) {
|
|
4
5
|
process.stdout.write(`${JSON.stringify({
|
|
@@ -14,7 +15,10 @@ function parse(args) {
|
|
|
14
15
|
return null;
|
|
15
16
|
}
|
|
16
17
|
const operation = args[0];
|
|
17
|
-
if (!operation || ![
|
|
18
|
+
if (!operation || ![
|
|
19
|
+
internalHandlerRoute('codex-sandbox-controller', 'run', operation),
|
|
20
|
+
internalHandlerRoute('codex-sandbox-controller', 'verify-context', operation)
|
|
21
|
+
].some(Boolean)) {
|
|
18
22
|
process.stderr.write(USAGE);
|
|
19
23
|
fail('CODEX_SANDBOX_CONTROLLER_PAYLOAD_INVALID', 'operation must be run or verify-context', 2);
|
|
20
24
|
return null;
|
|
@@ -44,11 +48,13 @@ function parse(args) {
|
|
|
44
48
|
return { operation, values };
|
|
45
49
|
}
|
|
46
50
|
async function codexSandboxController(args = []) {
|
|
51
|
+
if (!ensureInternalHandlerRoute('codex-sandbox-controller', args))
|
|
52
|
+
return;
|
|
47
53
|
const parsed = parse(args);
|
|
48
54
|
if (!parsed || process.exitCode)
|
|
49
55
|
return;
|
|
50
56
|
try {
|
|
51
|
-
if (
|
|
57
|
+
if (internalHandlerRoute('codex-sandbox-controller', 'verify-context', parsed.operation)) {
|
|
52
58
|
const contextPath = parsed.values['--context']
|
|
53
59
|
?? process.env.AGENT_INFRA_CODEX_CONTROLLER_CONTEXT;
|
|
54
60
|
if (!contextPath)
|
|
@@ -3,42 +3,46 @@ import { inspectGitWorkflow, previewCommitTree, pushRebasedBranch } from '../git
|
|
|
3
3
|
import { compareReviewTrees, snapshotReview } from '../git/review-snapshot.js';
|
|
4
4
|
import { resolvePostReviewGlobs } from '../task/review-fingerprint.js';
|
|
5
5
|
import { executeCommitOperation } from '../task/commit-operation.js';
|
|
6
|
+
import { ensureInternalHandlerRoute, internalHandlerRoute } from './cli-route-inventory.js';
|
|
6
7
|
function output(value) { process.stdout.write(`${JSON.stringify(value)}\n`); }
|
|
7
8
|
function gitWorkflow(args = []) {
|
|
9
|
+
if (!ensureInternalHandlerRoute('git-workflow', args))
|
|
10
|
+
return;
|
|
8
11
|
const [action, ...rest] = args;
|
|
9
12
|
const cwdIndex = rest.indexOf('--cwd');
|
|
10
13
|
const cwd = cwdIndex >= 0 ? rest[cwdIndex + 1] : process.cwd();
|
|
11
14
|
let result;
|
|
12
|
-
if (action
|
|
15
|
+
if (internalHandlerRoute('git-workflow', 'inspect', action ?? '')) {
|
|
13
16
|
const inputIndex = rest.indexOf('--input');
|
|
14
17
|
const input = inputIndex >= 0 && rest[inputIndex + 1] ? JSON.parse(fs.readFileSync(rest[inputIndex + 1], 'utf8')) : null;
|
|
15
18
|
result = inspectGitWorkflow(cwd ?? process.cwd(), undefined, input?.remote && input.refs ? { remote: input.remote, refs: input.refs } : undefined);
|
|
16
19
|
}
|
|
17
|
-
else if (action
|
|
20
|
+
else if (internalHandlerRoute('git-workflow', 'commit', action ?? '')) {
|
|
18
21
|
const inputIndex = rest.indexOf('--input');
|
|
19
22
|
const input = inputIndex >= 0 && rest[inputIndex + 1] ? JSON.parse(fs.readFileSync(rest[inputIndex + 1], 'utf8')) : null;
|
|
20
23
|
result = input
|
|
21
24
|
? executeCommitOperation({ cwd: cwd ?? process.cwd(), ...input })
|
|
22
25
|
: { status: 'failed', changed: false, error: { code: 'GIT_INPUT_REQUIRED', message: '--input JSON file is required' } };
|
|
23
26
|
}
|
|
24
|
-
else if (
|
|
27
|
+
else if (internalHandlerRoute('git-workflow', 'push-rebased', action ?? '')) {
|
|
25
28
|
const inputIndex = rest.indexOf('--input');
|
|
26
29
|
const input = inputIndex >= 0 && rest[inputIndex + 1] ? JSON.parse(fs.readFileSync(rest[inputIndex + 1], 'utf8')) : null;
|
|
27
30
|
result = input ? pushRebasedBranch({ cwd: cwd ?? process.cwd(), ...input }) : { status: 'failed', changed: false, error: { code: 'GIT_INPUT_REQUIRED', message: '--input JSON file is required' } };
|
|
28
31
|
}
|
|
29
|
-
else if (
|
|
32
|
+
else if (internalHandlerRoute('git-workflow', 'preview-tree', action ?? '')) {
|
|
30
33
|
const inputIndex = rest.indexOf('--input');
|
|
31
34
|
const input = inputIndex >= 0 && rest[inputIndex + 1] ? JSON.parse(fs.readFileSync(rest[inputIndex + 1], 'utf8')) : null;
|
|
32
35
|
result = input
|
|
33
36
|
? previewCommitTree({ cwd: cwd ?? process.cwd(), paths: input.paths, expectedHead: input.expectedHead })
|
|
34
37
|
: { status: 'failed', changed: false, error: { code: 'GIT_INPUT_REQUIRED', message: '--input JSON file is required' } };
|
|
35
38
|
}
|
|
36
|
-
else if (
|
|
39
|
+
else if (internalHandlerRoute('git-workflow', 'snapshot', action ?? '')
|
|
40
|
+
|| internalHandlerRoute('git-workflow', 'compare-trees', action ?? '')) {
|
|
37
41
|
const inputIndex = rest.indexOf('--input');
|
|
38
42
|
const input = inputIndex >= 0 && rest[inputIndex + 1] ? JSON.parse(fs.readFileSync(rest[inputIndex + 1], 'utf8')) : null;
|
|
39
43
|
if (!input)
|
|
40
44
|
result = { status: 'failed', changed: false, error: { code: 'GIT_INPUT_REQUIRED', message: '--input JSON file is required' } };
|
|
41
|
-
else if (action
|
|
45
|
+
else if (internalHandlerRoute('git-workflow', 'snapshot', action ?? ''))
|
|
42
46
|
result = { status: 'no-op', changed: false, snapshot: snapshotReview({ cwd: cwd ?? process.cwd(), mode: input.mode, baseline: input.baseline, diffBase: input.diffBase, globs: input.globs ?? resolvePostReviewGlobs({}, {}) }), error: null };
|
|
43
47
|
else
|
|
44
48
|
result = { status: 'no-op', changed: false, comparison: compareReviewTrees({ cwd: cwd ?? process.cwd(), expected: input.expected, actual: input.actual }), error: null };
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import path from 'node:path';
|
|
2
2
|
import { fetchPlatformCheckLogs, inspectPullRequestReadiness, resolvePlatformCheckRun, watchPullRequestReadiness } from '../platform/pr-checks.js';
|
|
3
|
+
import { ensureInternalHandlerRoute, internalHandlerRoute } from './cli-route-inventory.js';
|
|
3
4
|
const USAGE = `Usage: agent-infra-internal platform-checks inspect <task-ref> [--cwd <path>]
|
|
4
5
|
agent-infra-internal platform-checks watch <task-ref> --interval-seconds <N> --deadline-seconds <N> [--cwd <path>]
|
|
5
6
|
agent-infra-internal platform-checks resolve-run <task-ref> --check-name <name> [--details-url <url>] [--cwd <path>]
|
|
@@ -43,12 +44,19 @@ function positive(value) {
|
|
|
43
44
|
return Number.isFinite(number) && number > 0 ? number : null;
|
|
44
45
|
}
|
|
45
46
|
async function platformChecks(args = []) {
|
|
47
|
+
if (!ensureInternalHandlerRoute('platform-checks', args))
|
|
48
|
+
return;
|
|
46
49
|
if (args[0] === '--help' || args[0] === '-h') {
|
|
47
50
|
process.stdout.write(USAGE);
|
|
48
51
|
return;
|
|
49
52
|
}
|
|
50
53
|
const operation = args[0];
|
|
51
|
-
if (!operation || ![
|
|
54
|
+
if (!operation || ![
|
|
55
|
+
internalHandlerRoute('platform-checks', 'inspect', operation),
|
|
56
|
+
internalHandlerRoute('platform-checks', 'watch', operation),
|
|
57
|
+
internalHandlerRoute('platform-checks', 'resolve-run', operation),
|
|
58
|
+
internalHandlerRoute('platform-checks', 'logs', operation)
|
|
59
|
+
].some(Boolean)) {
|
|
52
60
|
fail('a valid operation is required');
|
|
53
61
|
return;
|
|
54
62
|
}
|
|
@@ -75,11 +83,11 @@ async function platformChecks(args = []) {
|
|
|
75
83
|
fail(`${operation} does not accept --${unexpected}`);
|
|
76
84
|
return;
|
|
77
85
|
}
|
|
78
|
-
if (
|
|
86
|
+
if (internalHandlerRoute('platform-checks', 'inspect', operation)) {
|
|
79
87
|
finish(await inspectPullRequestReadiness(taskRef, { cwd }));
|
|
80
88
|
return;
|
|
81
89
|
}
|
|
82
|
-
if (
|
|
90
|
+
if (internalHandlerRoute('platform-checks', 'resolve-run', operation)) {
|
|
83
91
|
if (!values.checkName) {
|
|
84
92
|
fail('resolve-run requires --check-name');
|
|
85
93
|
return;
|
|
@@ -87,7 +95,7 @@ async function platformChecks(args = []) {
|
|
|
87
95
|
finish(await resolvePlatformCheckRun(taskRef, { cwd, checkName: values.checkName, detailsUrl: values.detailsUrl }));
|
|
88
96
|
return;
|
|
89
97
|
}
|
|
90
|
-
if (
|
|
98
|
+
if (internalHandlerRoute('platform-checks', 'logs', operation)) {
|
|
91
99
|
const run = positive(values.run);
|
|
92
100
|
const job = values.job === undefined ? undefined : positive(values.job);
|
|
93
101
|
if (!run || values.job !== undefined && !job) {
|
|
@@ -97,6 +105,10 @@ async function platformChecks(args = []) {
|
|
|
97
105
|
finish(await fetchPlatformCheckLogs(taskRef, { cwd, run, job: job || undefined }));
|
|
98
106
|
return;
|
|
99
107
|
}
|
|
108
|
+
if (!internalHandlerRoute('platform-checks', 'watch', operation)) {
|
|
109
|
+
fail('operation is not registered');
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
100
112
|
const intervalSeconds = positive(values.intervalSeconds);
|
|
101
113
|
const deadlineSeconds = positive(values.deadlineSeconds);
|
|
102
114
|
if (!intervalSeconds || !deadlineSeconds) {
|
|
@@ -3,6 +3,7 @@ import path from 'node:path';
|
|
|
3
3
|
import { normalizeAgentToken, AGENT_USAGE_HINT } from '../agent-clients/tokens.js';
|
|
4
4
|
import { checkPlatformCommentOwner, listPlatformComments, syncPlatformComment } from '../platform/issue-comments.js';
|
|
5
5
|
import { backfillCompletionComments } from '../platform/completion-backfill.js';
|
|
6
|
+
import { ensureInternalHandlerRoute, internalHandlerRoute } from './cli-route-inventory.js';
|
|
6
7
|
const USAGE = `Usage: agent-infra-internal platform-comment list --issue <token> [--cwd <path>]
|
|
7
8
|
agent-infra-internal platform-comment owner <task-ref> [--cwd <path>]
|
|
8
9
|
agent-infra-internal platform-comment backfill <task-ref> --agent <agent> [--cwd <path>]
|
|
@@ -48,12 +49,19 @@ function readBodyFile(value, cwd) {
|
|
|
48
49
|
return fs.readFileSync(path.resolve(cwd, value), 'utf8');
|
|
49
50
|
}
|
|
50
51
|
async function platformComment(args = []) {
|
|
52
|
+
if (!ensureInternalHandlerRoute('platform-comment', args))
|
|
53
|
+
return;
|
|
51
54
|
if (args[0] === '--help' || args[0] === '-h') {
|
|
52
55
|
process.stdout.write(USAGE);
|
|
53
56
|
return;
|
|
54
57
|
}
|
|
55
58
|
const operation = args[0];
|
|
56
|
-
if (!operation || ![
|
|
59
|
+
if (!operation || ![
|
|
60
|
+
internalHandlerRoute('platform-comment', 'list', operation),
|
|
61
|
+
internalHandlerRoute('platform-comment', 'owner', operation),
|
|
62
|
+
internalHandlerRoute('platform-comment', 'backfill', operation),
|
|
63
|
+
internalHandlerRoute('platform-comment', 'sync', operation)
|
|
64
|
+
].some(Boolean)) {
|
|
57
65
|
fail('a valid operation is required');
|
|
58
66
|
return;
|
|
59
67
|
}
|
|
@@ -69,7 +77,7 @@ async function platformComment(args = []) {
|
|
|
69
77
|
return;
|
|
70
78
|
}
|
|
71
79
|
const cwd = path.resolve(typeof parsed.values.cwd === 'string' ? parsed.values.cwd : process.cwd());
|
|
72
|
-
if (
|
|
80
|
+
if (internalHandlerRoute('platform-comment', 'list', operation)) {
|
|
73
81
|
const issue = parsed.values.issue;
|
|
74
82
|
if (typeof issue !== 'string' || !issue) {
|
|
75
83
|
fail('list requires --issue <token>');
|
|
@@ -83,7 +91,7 @@ async function platformComment(args = []) {
|
|
|
83
91
|
finish(await listPlatformComments(issue, cwd));
|
|
84
92
|
return;
|
|
85
93
|
}
|
|
86
|
-
if (
|
|
94
|
+
if (internalHandlerRoute('platform-comment', 'owner', operation)) {
|
|
87
95
|
const unexpected = Object.keys(parsed.values).find((key) => key !== 'cwd');
|
|
88
96
|
if (unexpected) {
|
|
89
97
|
fail(`owner does not accept '--${unexpected}'`);
|
|
@@ -92,7 +100,7 @@ async function platformComment(args = []) {
|
|
|
92
100
|
finish(await checkPlatformCommentOwner(taskRef, { cwd }));
|
|
93
101
|
return;
|
|
94
102
|
}
|
|
95
|
-
if (
|
|
103
|
+
if (internalHandlerRoute('platform-comment', 'backfill', operation)) {
|
|
96
104
|
const unexpected = Object.keys(parsed.values).find((key) => !['cwd', 'agent'].includes(key));
|
|
97
105
|
if (unexpected) {
|
|
98
106
|
fail(`backfill does not accept '--${unexpected}'`);
|
|
@@ -111,6 +119,10 @@ async function platformComment(args = []) {
|
|
|
111
119
|
finish(await backfillCompletionComments(taskRef, { cwd, agent: normalizedAgent }));
|
|
112
120
|
return;
|
|
113
121
|
}
|
|
122
|
+
if (!internalHandlerRoute('platform-comment', 'sync', operation)) {
|
|
123
|
+
fail('operation is not registered');
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
114
126
|
const kind = parsed.values.kind;
|
|
115
127
|
const agent = parsed.values.agent;
|
|
116
128
|
if (!['task', 'artifact', 'summary', 'cancel'].includes(String(kind))) {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import path from 'node:path';
|
|
2
2
|
import { resolvePlatformContext } from '../platform/context.js';
|
|
3
|
+
import { ensureInternalHandlerRoute, internalHandlerRoute } from './cli-route-inventory.js';
|
|
3
4
|
const USAGE = 'Usage: agent-infra-internal platform-context resolve [--cwd <path>]\n';
|
|
4
5
|
function fail(message) {
|
|
5
6
|
process.stdout.write(`${JSON.stringify({ status: 'failed', changed: false, error: { code: 'PLATFORM_PAYLOAD_INVALID', message } })}\n`);
|
|
@@ -7,11 +8,13 @@ function fail(message) {
|
|
|
7
8
|
process.exitCode = 1;
|
|
8
9
|
}
|
|
9
10
|
async function platformContext(args = []) {
|
|
11
|
+
if (!ensureInternalHandlerRoute('platform-context', args))
|
|
12
|
+
return;
|
|
10
13
|
if (args[0] === '--help' || args[0] === '-h') {
|
|
11
14
|
process.stdout.write(USAGE);
|
|
12
15
|
return;
|
|
13
16
|
}
|
|
14
|
-
if (args[0]
|
|
17
|
+
if (!internalHandlerRoute('platform-context', 'resolve', args[0] ?? '')) {
|
|
15
18
|
fail("operation must be 'resolve'");
|
|
16
19
|
return;
|
|
17
20
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import path from 'node:path';
|
|
2
2
|
import { normalizeAgentToken, AGENT_USAGE_HINT } from '../agent-clients/tokens.js';
|
|
3
3
|
import { bindPlatformIssue, createPlatformIssue, inspectPlatformIssue, syncPlatformIssue } from '../platform/issues.js';
|
|
4
|
+
import { ensureInternalHandlerRoute, internalHandlerRoute } from './cli-route-inventory.js';
|
|
4
5
|
const USAGE = `Usage: agent-infra-internal platform-issue inspect <task-ref> [--cwd <path>]
|
|
5
6
|
agent-infra-internal platform-issue create <task-ref> --agent <agent> [--dry-run] [--cwd <path>]
|
|
6
7
|
agent-infra-internal platform-issue bind <task-ref> --issue <token> --agent <agent> [--dry-run] [--cwd <path>]
|
|
@@ -55,12 +56,19 @@ function oneOf(values, name, allowed) {
|
|
|
55
56
|
return value;
|
|
56
57
|
}
|
|
57
58
|
async function platformIssue(args = []) {
|
|
59
|
+
if (!ensureInternalHandlerRoute('platform-issue', args))
|
|
60
|
+
return;
|
|
58
61
|
if (args[0] === '--help' || args[0] === '-h') {
|
|
59
62
|
process.stdout.write(USAGE);
|
|
60
63
|
return;
|
|
61
64
|
}
|
|
62
65
|
const operation = args[0];
|
|
63
|
-
if (!operation || ![
|
|
66
|
+
if (!operation || ![
|
|
67
|
+
internalHandlerRoute('platform-issue', 'inspect', operation),
|
|
68
|
+
internalHandlerRoute('platform-issue', 'create', operation),
|
|
69
|
+
internalHandlerRoute('platform-issue', 'bind', operation),
|
|
70
|
+
internalHandlerRoute('platform-issue', 'sync', operation)
|
|
71
|
+
].some(Boolean)) {
|
|
64
72
|
fail('a valid operation is required');
|
|
65
73
|
return;
|
|
66
74
|
}
|
|
@@ -85,7 +93,7 @@ async function platformIssue(args = []) {
|
|
|
85
93
|
fail(`${operation} does not accept --${unexpected}`);
|
|
86
94
|
return;
|
|
87
95
|
}
|
|
88
|
-
if (
|
|
96
|
+
if (internalHandlerRoute('platform-issue', 'inspect', operation)) {
|
|
89
97
|
finish(await inspectPlatformIssue(taskRef, { cwd }));
|
|
90
98
|
return;
|
|
91
99
|
}
|
|
@@ -99,11 +107,11 @@ async function platformIssue(args = []) {
|
|
|
99
107
|
return;
|
|
100
108
|
}
|
|
101
109
|
values.agent = agent;
|
|
102
|
-
if (
|
|
110
|
+
if (internalHandlerRoute('platform-issue', 'create', operation)) {
|
|
103
111
|
finish(await createPlatformIssue(taskRef, { cwd, agent: values.agent, dryRun: values.dryRun === true }));
|
|
104
112
|
return;
|
|
105
113
|
}
|
|
106
|
-
if (
|
|
114
|
+
if (internalHandlerRoute('platform-issue', 'bind', operation)) {
|
|
107
115
|
if (typeof values.issue !== 'string' || !values.issue) {
|
|
108
116
|
fail('bind requires --issue <token>');
|
|
109
117
|
return;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { initializeLabels, initializeMilestones } from '../platform/repository-metadata.js';
|
|
3
|
+
import { ensureInternalHandlerRoute, internalHandlerRoute } from './cli-route-inventory.js';
|
|
4
|
+
const USAGE = `Usage: agent-infra-internal platform-metadata init-labels [--cleanup-stale-in] [--cwd <path>]
|
|
5
|
+
agent-infra-internal platform-metadata init-milestones [--history] [--cwd <path>]
|
|
6
|
+
`;
|
|
7
|
+
function fail(message) {
|
|
8
|
+
process.stdout.write(`${JSON.stringify({ status: 'failed', changed: false, error: { code: 'METADATA_INPUT_INVALID', message, retryable: false } })}\n`);
|
|
9
|
+
process.stderr.write(USAGE);
|
|
10
|
+
process.exitCode = 1;
|
|
11
|
+
}
|
|
12
|
+
function finish(result, preserveMilestoneFallback = false) {
|
|
13
|
+
if (preserveMilestoneFallback && result.error && typeof result.error === 'object'
|
|
14
|
+
&& result.error.code === 'PLATFORM_CAPABILITY_UNSUPPORTED') {
|
|
15
|
+
process.stderr.write('Milestone initialization skipped for unsupported platform.\n');
|
|
16
|
+
process.exitCode = 0;
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
process.stdout.write(`${JSON.stringify(result)}\n`);
|
|
20
|
+
process.exitCode = result.status === 'blocked' ? 2 : result.status === 'failed' ? 1 : 0;
|
|
21
|
+
}
|
|
22
|
+
function parseOptions(args) {
|
|
23
|
+
let cwd = process.cwd();
|
|
24
|
+
let cleanup = false;
|
|
25
|
+
let history = false;
|
|
26
|
+
const seen = new Set();
|
|
27
|
+
for (let index = 0; index < args.length; index += 1) {
|
|
28
|
+
const flag = args[index];
|
|
29
|
+
if (seen.has(flag))
|
|
30
|
+
return null;
|
|
31
|
+
seen.add(flag);
|
|
32
|
+
if (flag === '--cleanup-stale-in') {
|
|
33
|
+
cleanup = true;
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
if (flag === '--history') {
|
|
37
|
+
history = true;
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
if (flag === '--cwd') {
|
|
41
|
+
const value = args[++index];
|
|
42
|
+
if (!value || value.startsWith('--'))
|
|
43
|
+
return null;
|
|
44
|
+
cwd = path.resolve(value);
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
return { cwd: path.resolve(cwd), cleanup, history };
|
|
50
|
+
}
|
|
51
|
+
async function platformMetadata(args = []) {
|
|
52
|
+
if (!ensureInternalHandlerRoute('platform-metadata', args))
|
|
53
|
+
return;
|
|
54
|
+
if (args[0] === '--help' || args[0] === '-h') {
|
|
55
|
+
process.stdout.write(USAGE);
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
const action = args[0];
|
|
59
|
+
if (!internalHandlerRoute('platform-metadata', 'init-labels', action ?? '')
|
|
60
|
+
&& !internalHandlerRoute('platform-metadata', 'init-milestones', action ?? '')) {
|
|
61
|
+
fail('a valid operation is required');
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
if (action !== 'init-labels' && action !== 'init-milestones') {
|
|
65
|
+
fail('a valid operation is required');
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
const parsed = parseOptions(args.slice(1));
|
|
69
|
+
if (!parsed) {
|
|
70
|
+
fail('invalid metadata options');
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
if (action === 'init-labels' && parsed.history) {
|
|
74
|
+
fail('init-labels does not accept --history');
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
if (action === 'init-milestones' && parsed.cleanup) {
|
|
78
|
+
fail('init-milestones does not accept --cleanup-stale-in');
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
if (action === 'init-labels') {
|
|
82
|
+
finish(await initializeLabels({ cleanupStaleIn: parsed.cleanup }, { cwd: parsed.cwd }));
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
finish(await initializeMilestones({ history: parsed.history }, { cwd: parsed.cwd }), true);
|
|
86
|
+
}
|
|
87
|
+
export { platformMetadata };
|
|
88
|
+
//# sourceMappingURL=platform-metadata.js.map
|