agentplane 0.3.9 → 0.3.11
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/assets/AGENTS.md +4 -2
- package/assets/agents/CODER.json +1 -1
- package/assets/policy/dod.core.md +1 -1
- package/assets/policy/governance.md +5 -3
- package/assets/policy/incidents.md +19 -77
- package/assets/policy/workflow.branch_pr.md +2 -0
- package/assets/policy/workflow.direct.md +3 -1
- package/bin/agentplane.js +56 -1
- package/bin/runtime-watch.js +1 -0
- package/bin/stale-dist-policy.d.ts +1 -1
- package/bin/stale-dist-policy.js +13 -0
- package/dist/.build-manifest.json +462 -202
- package/dist/cli/bootstrap-guide.d.ts +1 -0
- package/dist/cli/bootstrap-guide.d.ts.map +1 -1
- package/dist/cli/bootstrap-guide.js +20 -1
- package/dist/cli/command-guide.d.ts.map +1 -1
- package/dist/cli/command-guide.js +2 -1
- package/dist/cli/command-invocations.d.ts.map +1 -1
- package/dist/cli/command-invocations.js +6 -1
- package/dist/cli/command-snippets.d.ts +2 -0
- package/dist/cli/command-snippets.d.ts.map +1 -1
- package/dist/cli/command-snippets.js +2 -0
- package/dist/cli/run-cli/command-catalog/core.d.ts +1 -1
- package/dist/cli/run-cli/command-catalog/core.d.ts.map +1 -1
- package/dist/cli/run-cli/command-catalog/core.js +10 -0
- package/dist/cli/run-cli/command-catalog/project.d.ts +1 -1
- package/dist/cli/run-cli/command-catalog/project.d.ts.map +1 -1
- package/dist/cli/run-cli/command-catalog/project.js +3 -1
- package/dist/cli/run-cli/command-catalog/task.d.ts +1 -1
- package/dist/cli/run-cli/command-catalog/task.d.ts.map +1 -1
- package/dist/cli/run-cli/command-catalog/task.js +10 -0
- package/dist/cli/run-cli/command-catalog.d.ts +1 -1
- package/dist/cli/run-cli/command-catalog.d.ts.map +1 -1
- package/dist/cli/run-cli/commands/config.d.ts.map +1 -1
- package/dist/cli/run-cli/commands/config.js +13 -0
- package/dist/cli/run-cli/commands/core/preflight.d.ts.map +1 -1
- package/dist/cli/run-cli/commands/core/preflight.js +44 -1
- package/dist/cli/run-cli.js +2 -2
- package/dist/cli/run-cli.test-helpers.d.ts.map +1 -1
- package/dist/cli/run-cli.test-helpers.js +12 -0
- package/dist/commands/backend.d.ts.map +1 -1
- package/dist/commands/backend.js +4 -0
- package/dist/commands/branch/cleanup-merged.d.ts +2 -0
- package/dist/commands/branch/cleanup-merged.d.ts.map +1 -1
- package/dist/commands/branch/cleanup-merged.js +132 -28
- package/dist/commands/branch/work-start.d.ts.map +1 -1
- package/dist/commands/branch/work-start.js +60 -1
- package/dist/commands/cleanup/merged.command.d.ts +2 -0
- package/dist/commands/cleanup/merged.command.d.ts.map +1 -1
- package/dist/commands/cleanup/merged.command.js +24 -0
- package/dist/commands/doctor/branch-pr.d.ts +4 -0
- package/dist/commands/doctor/branch-pr.d.ts.map +1 -0
- package/dist/commands/doctor/branch-pr.js +96 -0
- package/dist/commands/doctor/fixes.d.ts +5 -0
- package/dist/commands/doctor/fixes.d.ts.map +1 -1
- package/dist/commands/doctor/fixes.js +70 -0
- package/dist/commands/doctor.run.d.ts.map +1 -1
- package/dist/commands/doctor.run.js +6 -1
- package/dist/commands/finish.run.d.ts.map +1 -1
- package/dist/commands/finish.run.js +11 -0
- package/dist/commands/finish.spec.d.ts +11 -0
- package/dist/commands/finish.spec.d.ts.map +1 -1
- package/dist/commands/finish.spec.js +51 -0
- package/dist/commands/guard/impl/close-message.d.ts.map +1 -1
- package/dist/commands/guard/impl/close-message.js +23 -6
- package/dist/commands/guard/impl/commands.d.ts.map +1 -1
- package/dist/commands/guard/impl/commands.js +24 -2
- package/dist/commands/guard/impl/env.d.ts +1 -0
- package/dist/commands/guard/impl/env.d.ts.map +1 -1
- package/dist/commands/guard/impl/env.js +1 -0
- package/dist/commands/hooks/index.d.ts.map +1 -1
- package/dist/commands/hooks/index.js +98 -1
- package/dist/commands/incidents/advise.command.d.ts +15 -0
- package/dist/commands/incidents/advise.command.d.ts.map +1 -0
- package/dist/commands/incidents/advise.command.js +139 -0
- package/dist/commands/incidents/collect.command.d.ts +11 -0
- package/dist/commands/incidents/collect.command.d.ts.map +1 -0
- package/dist/commands/incidents/collect.command.js +72 -0
- package/dist/commands/incidents/incidents.command.d.ts +5 -0
- package/dist/commands/incidents/incidents.command.d.ts.map +1 -0
- package/dist/commands/incidents/incidents.command.js +21 -0
- package/dist/commands/incidents/shared.d.ts +76 -0
- package/dist/commands/incidents/shared.d.ts.map +1 -0
- package/dist/commands/incidents/shared.js +261 -0
- package/dist/commands/pr/check.d.ts.map +1 -1
- package/dist/commands/pr/check.js +249 -75
- package/dist/commands/pr/close-superseded.d.ts +9 -0
- package/dist/commands/pr/close-superseded.d.ts.map +1 -0
- package/dist/commands/pr/close-superseded.js +129 -0
- package/dist/commands/pr/close.d.ts +11 -0
- package/dist/commands/pr/close.d.ts.map +1 -0
- package/dist/commands/pr/close.js +116 -0
- package/dist/commands/pr/index.d.ts +2 -0
- package/dist/commands/pr/index.d.ts.map +1 -1
- package/dist/commands/pr/index.js +2 -0
- package/dist/commands/pr/integrate/artifacts.d.ts +7 -0
- package/dist/commands/pr/integrate/artifacts.d.ts.map +1 -1
- package/dist/commands/pr/integrate/artifacts.js +66 -1
- package/dist/commands/pr/integrate/cmd.d.ts.map +1 -1
- package/dist/commands/pr/integrate/cmd.js +20 -0
- package/dist/commands/pr/integrate/internal/bootstrap-guidance.d.ts +8 -0
- package/dist/commands/pr/integrate/internal/bootstrap-guidance.d.ts.map +1 -0
- package/dist/commands/pr/integrate/internal/bootstrap-guidance.js +59 -0
- package/dist/commands/pr/integrate/internal/finalize.d.ts.map +1 -1
- package/dist/commands/pr/integrate/internal/finalize.js +40 -12
- package/dist/commands/pr/integrate/internal/merge.d.ts +4 -0
- package/dist/commands/pr/integrate/internal/merge.d.ts.map +1 -1
- package/dist/commands/pr/integrate/internal/merge.js +59 -15
- package/dist/commands/pr/integrate/internal/post-integrate-bootstrap.d.ts +13 -0
- package/dist/commands/pr/integrate/internal/post-integrate-bootstrap.d.ts.map +1 -0
- package/dist/commands/pr/integrate/internal/post-integrate-bootstrap.js +25 -0
- package/dist/commands/pr/integrate/internal/prepare.d.ts +3 -2
- package/dist/commands/pr/integrate/internal/prepare.d.ts.map +1 -1
- package/dist/commands/pr/integrate/internal/prepare.js +107 -19
- package/dist/commands/pr/internal/freshness.d.ts +20 -0
- package/dist/commands/pr/internal/freshness.d.ts.map +1 -0
- package/dist/commands/pr/internal/freshness.js +50 -0
- package/dist/commands/pr/internal/gh-api.d.ts +6 -0
- package/dist/commands/pr/internal/gh-api.d.ts.map +1 -0
- package/dist/commands/pr/internal/gh-api.js +80 -0
- package/dist/commands/pr/internal/note-store.d.ts +18 -0
- package/dist/commands/pr/internal/note-store.d.ts.map +1 -0
- package/dist/commands/pr/internal/note-store.js +66 -0
- package/dist/commands/pr/internal/pr-paths.d.ts +13 -0
- package/dist/commands/pr/internal/pr-paths.d.ts.map +1 -1
- package/dist/commands/pr/internal/pr-paths.js +13 -0
- package/dist/commands/pr/internal/review-template.d.ts +24 -4
- package/dist/commands/pr/internal/review-template.d.ts.map +1 -1
- package/dist/commands/pr/internal/review-template.js +221 -33
- package/dist/commands/pr/internal/sync.d.ts +41 -0
- package/dist/commands/pr/internal/sync.d.ts.map +1 -0
- package/dist/commands/pr/internal/sync.js +598 -0
- package/dist/commands/pr/note.d.ts.map +1 -1
- package/dist/commands/pr/note.js +37 -4
- package/dist/commands/pr/open.d.ts +1 -0
- package/dist/commands/pr/open.d.ts.map +1 -1
- package/dist/commands/pr/open.js +18 -54
- package/dist/commands/pr/pr.command.d.ts +15 -0
- package/dist/commands/pr/pr.command.d.ts.map +1 -1
- package/dist/commands/pr/pr.command.js +124 -5
- package/dist/commands/pr/update.d.ts.map +1 -1
- package/dist/commands/pr/update.js +58 -74
- package/dist/commands/recipes/impl/commands/cache-prune.d.ts.map +1 -1
- package/dist/commands/recipes/impl/commands/cache-prune.js +14 -0
- package/dist/commands/recipes/impl/commands/install.js +1 -1
- package/dist/commands/recipes/impl/commands/list-remote.d.ts.map +1 -1
- package/dist/commands/recipes/impl/commands/list-remote.js +1 -0
- package/dist/commands/recipes/impl/commands/remove.d.ts.map +1 -1
- package/dist/commands/recipes/impl/commands/remove.js +9 -1
- package/dist/commands/release/apply.command.d.ts.map +1 -1
- package/dist/commands/release/apply.command.js +12 -17
- package/dist/commands/release/apply.preflight.d.ts.map +1 -1
- package/dist/commands/release/apply.preflight.js +1 -1
- package/dist/commands/shared/approval-requirements.d.ts +5 -7
- package/dist/commands/shared/approval-requirements.d.ts.map +1 -1
- package/dist/commands/shared/approval-requirements.js +3 -73
- package/dist/commands/shared/gh-transport.d.ts +16 -0
- package/dist/commands/shared/gh-transport.d.ts.map +1 -0
- package/dist/commands/shared/gh-transport.js +71 -0
- package/dist/commands/shared/git-diff.d.ts +3 -1
- package/dist/commands/shared/git-diff.d.ts.map +1 -1
- package/dist/commands/shared/git-diff.js +10 -2
- package/dist/commands/shared/git-ops.d.ts +1 -0
- package/dist/commands/shared/git-ops.d.ts.map +1 -1
- package/dist/commands/shared/git-ops.js +15 -0
- package/dist/commands/shared/git-worktree.d.ts +2 -0
- package/dist/commands/shared/git-worktree.d.ts.map +1 -1
- package/dist/commands/shared/git-worktree.js +22 -2
- package/dist/commands/shared/network-approval.d.ts +2 -0
- package/dist/commands/shared/network-approval.d.ts.map +1 -1
- package/dist/commands/shared/network-approval.js +1 -1
- package/dist/commands/shared/post-commit-pr-artifacts.d.ts +9 -0
- package/dist/commands/shared/post-commit-pr-artifacts.d.ts.map +1 -0
- package/dist/commands/shared/post-commit-pr-artifacts.js +22 -0
- package/dist/commands/shared/pr-meta.d.ts +29 -0
- package/dist/commands/shared/pr-meta.d.ts.map +1 -1
- package/dist/commands/shared/pr-meta.js +152 -3
- package/dist/commands/shared/task-backend.d.ts +9 -0
- package/dist/commands/shared/task-backend.d.ts.map +1 -1
- package/dist/commands/shared/task-backend.js +34 -22
- package/dist/commands/shared/task-local-freshness.d.ts +13 -0
- package/dist/commands/shared/task-local-freshness.d.ts.map +1 -0
- package/dist/commands/shared/task-local-freshness.js +20 -0
- package/dist/commands/shared/task-mutation.d.ts +2 -0
- package/dist/commands/shared/task-mutation.d.ts.map +1 -1
- package/dist/commands/shared/task-mutation.js +7 -0
- package/dist/commands/task/block.d.ts.map +1 -1
- package/dist/commands/task/block.js +1 -0
- package/dist/commands/task/close-duplicate.d.ts.map +1 -1
- package/dist/commands/task/close-duplicate.js +34 -1
- package/dist/commands/task/close-shared.d.ts.map +1 -1
- package/dist/commands/task/close-shared.js +1 -0
- package/dist/commands/task/derive.js +1 -1
- package/dist/commands/task/doc-template.d.ts.map +1 -1
- package/dist/commands/task/doc-template.js +7 -11
- package/dist/commands/task/findings-add.command.d.ts +20 -0
- package/dist/commands/task/findings-add.command.d.ts.map +1 -0
- package/dist/commands/task/findings-add.command.js +165 -0
- package/dist/commands/task/findings.command.d.ts +7 -0
- package/dist/commands/task/findings.command.d.ts.map +1 -0
- package/dist/commands/task/findings.command.js +20 -0
- package/dist/commands/task/findings.d.ts +63 -0
- package/dist/commands/task/findings.d.ts.map +1 -0
- package/dist/commands/task/findings.js +188 -0
- package/dist/commands/task/finish-shared.d.ts +1 -0
- package/dist/commands/task/finish-shared.d.ts.map +1 -1
- package/dist/commands/task/finish-shared.js +60 -3
- package/dist/commands/task/finish.d.ts +10 -0
- package/dist/commands/task/finish.d.ts.map +1 -1
- package/dist/commands/task/finish.js +143 -0
- package/dist/commands/task/hosted-close-pr.command.d.ts +11 -0
- package/dist/commands/task/hosted-close-pr.command.d.ts.map +1 -0
- package/dist/commands/task/hosted-close-pr.command.js +414 -0
- package/dist/commands/task/hosted-close.command.d.ts.map +1 -1
- package/dist/commands/task/hosted-close.command.js +49 -1
- package/dist/commands/task/hosted-merge-sync.d.ts +38 -0
- package/dist/commands/task/hosted-merge-sync.d.ts.map +1 -1
- package/dist/commands/task/hosted-merge-sync.js +249 -17
- package/dist/commands/task/index.d.ts +1 -0
- package/dist/commands/task/index.d.ts.map +1 -1
- package/dist/commands/task/index.js +1 -0
- package/dist/commands/task/new.d.ts +1 -0
- package/dist/commands/task/new.d.ts.map +1 -1
- package/dist/commands/task/new.js +140 -30
- package/dist/commands/task/new.spec.d.ts.map +1 -1
- package/dist/commands/task/new.spec.js +7 -0
- package/dist/commands/task/normalize.command.d.ts +2 -0
- package/dist/commands/task/normalize.command.d.ts.map +1 -1
- package/dist/commands/task/normalize.command.js +45 -0
- package/dist/commands/task/normalize.d.ts +2 -0
- package/dist/commands/task/normalize.d.ts.map +1 -1
- package/dist/commands/task/normalize.js +85 -8
- package/dist/commands/task/plan.d.ts.map +1 -1
- package/dist/commands/task/plan.js +7 -10
- package/dist/commands/task/set-status.d.ts.map +1 -1
- package/dist/commands/task/set-status.js +1 -0
- package/dist/commands/task/shared/docs.d.ts +6 -0
- package/dist/commands/task/shared/docs.d.ts.map +1 -1
- package/dist/commands/task/shared/docs.js +14 -0
- package/dist/commands/task/shared/transition-command.d.ts +2 -0
- package/dist/commands/task/shared/transition-command.d.ts.map +1 -1
- package/dist/commands/task/shared/transition-command.js +1 -0
- package/dist/commands/task/shared/transitions.d.ts.map +1 -1
- package/dist/commands/task/shared/transitions.js +11 -1
- package/dist/commands/task/shared.d.ts +1 -1
- package/dist/commands/task/shared.d.ts.map +1 -1
- package/dist/commands/task/shared.js +1 -1
- package/dist/commands/task/start-ready.d.ts.map +1 -1
- package/dist/commands/task/start-ready.js +98 -1
- package/dist/commands/task/start.d.ts.map +1 -1
- package/dist/commands/task/start.js +18 -10
- package/dist/commands/task/task.command.d.ts.map +1 -1
- package/dist/commands/task/task.command.js +4 -0
- package/dist/commands/task/verify-command-shared.d.ts +19 -0
- package/dist/commands/task/verify-command-shared.d.ts.map +1 -1
- package/dist/commands/task/verify-command-shared.js +152 -1
- package/dist/commands/task/verify-ok.command.d.ts.map +1 -1
- package/dist/commands/task/verify-ok.command.js +15 -2
- package/dist/commands/task/verify-record.d.ts +36 -0
- package/dist/commands/task/verify-record.d.ts.map +1 -1
- package/dist/commands/task/verify-record.js +193 -11
- package/dist/commands/task/verify-rework.command.d.ts.map +1 -1
- package/dist/commands/task/verify-rework.command.js +15 -2
- package/dist/commands/task/verify-show.command.d.ts +1 -1
- package/dist/commands/task/verify-show.command.d.ts.map +1 -1
- package/dist/commands/task/verify-show.command.js +28 -1
- package/dist/commands/upgrade.d.ts.map +1 -1
- package/dist/commands/upgrade.js +6 -1
- package/dist/commands/verify.run.d.ts.map +1 -1
- package/dist/commands/verify.run.js +12 -0
- package/dist/commands/verify.spec.d.ts +2 -6
- package/dist/commands/verify.spec.d.ts.map +1 -1
- package/dist/commands/verify.spec.js +30 -3
- package/dist/policy/engine.d.ts +3 -1
- package/dist/policy/engine.d.ts.map +1 -1
- package/dist/policy/engine.js +5 -6
- package/dist/policy/taxonomy.d.ts +17 -0
- package/dist/policy/taxonomy.d.ts.map +1 -0
- package/dist/policy/taxonomy.js +302 -0
- package/dist/policy/types.d.ts +2 -1
- package/dist/policy/types.d.ts.map +1 -1
- package/dist/runner/artifacts.d.ts.map +1 -1
- package/dist/runner/artifacts.js +2 -0
- package/dist/runner/context/base-prompts.d.ts +25 -0
- package/dist/runner/context/base-prompts.d.ts.map +1 -1
- package/dist/runner/context/base-prompts.js +182 -54
- package/dist/runner/context/recipe-context.d.ts.map +1 -1
- package/dist/runner/context/recipe-context.js +5 -0
- package/dist/runner/types.d.ts +12 -0
- package/dist/runner/types.d.ts.map +1 -1
- package/dist/runner/usecases/scenario-materialize-task.d.ts.map +1 -1
- package/dist/runner/usecases/scenario-materialize-task.js +81 -11
- package/dist/runner/usecases/task-run-inspect.d.ts.map +1 -1
- package/dist/runner/usecases/task-run-inspect.js +9 -7
- package/dist/runner/usecases/task-run-lifecycle-shared.d.ts.map +1 -1
- package/dist/runner/usecases/task-run-lifecycle-shared.js +8 -6
- package/dist/runner/usecases/task-run.d.ts.map +1 -1
- package/dist/runner/usecases/task-run.js +59 -12
- package/dist/runtime/approvals/index.d.ts +3 -0
- package/dist/runtime/approvals/index.d.ts.map +1 -0
- package/dist/runtime/approvals/index.js +1 -0
- package/dist/runtime/approvals/runtime.d.ts +12 -0
- package/dist/runtime/approvals/runtime.d.ts.map +1 -0
- package/dist/runtime/approvals/runtime.js +154 -0
- package/dist/runtime/approvals/types.d.ts +31 -0
- package/dist/runtime/approvals/types.d.ts.map +1 -0
- package/dist/runtime/approvals/types.js +1 -0
- package/dist/runtime/behavior/index.d.ts +3 -0
- package/dist/runtime/behavior/index.d.ts.map +1 -0
- package/dist/runtime/behavior/index.js +1 -0
- package/dist/runtime/behavior/resolve.d.ts +7 -0
- package/dist/runtime/behavior/resolve.d.ts.map +1 -0
- package/dist/runtime/behavior/resolve.js +66 -0
- package/dist/runtime/behavior/types.d.ts +25 -0
- package/dist/runtime/behavior/types.d.ts.map +1 -0
- package/dist/runtime/behavior/types.js +1 -0
- package/dist/runtime/capabilities/backend.d.ts +7 -0
- package/dist/runtime/capabilities/backend.d.ts.map +1 -0
- package/dist/runtime/capabilities/backend.js +104 -0
- package/dist/runtime/capabilities/index.d.ts +6 -0
- package/dist/runtime/capabilities/index.d.ts.map +1 -0
- package/dist/runtime/capabilities/index.js +4 -0
- package/dist/runtime/capabilities/recipe.d.ts +10 -0
- package/dist/runtime/capabilities/recipe.d.ts.map +1 -0
- package/dist/runtime/capabilities/recipe.js +123 -0
- package/dist/runtime/capabilities/registry.d.ts +6 -0
- package/dist/runtime/capabilities/registry.d.ts.map +1 -0
- package/dist/runtime/capabilities/registry.js +69 -0
- package/dist/runtime/capabilities/runner.d.ts +8 -0
- package/dist/runtime/capabilities/runner.d.ts.map +1 -0
- package/dist/runtime/capabilities/runner.js +73 -0
- package/dist/runtime/capabilities/types.d.ts +28 -0
- package/dist/runtime/capabilities/types.d.ts.map +1 -0
- package/dist/runtime/capabilities/types.js +1 -0
- package/dist/runtime/execution-profile/index.d.ts +3 -0
- package/dist/runtime/execution-profile/index.d.ts.map +1 -0
- package/dist/runtime/execution-profile/index.js +1 -0
- package/dist/runtime/execution-profile/resolve.d.ts +9 -0
- package/dist/runtime/execution-profile/resolve.d.ts.map +1 -0
- package/dist/runtime/execution-profile/resolve.js +80 -0
- package/dist/runtime/execution-profile/types.d.ts +27 -0
- package/dist/runtime/execution-profile/types.d.ts.map +1 -0
- package/dist/runtime/execution-profile/types.js +1 -0
- package/dist/runtime/explain/index.d.ts +3 -0
- package/dist/runtime/explain/index.d.ts.map +1 -0
- package/dist/runtime/explain/index.js +1 -0
- package/dist/runtime/explain/resolve.d.ts +14 -0
- package/dist/runtime/explain/resolve.d.ts.map +1 -0
- package/dist/runtime/explain/resolve.js +50 -0
- package/dist/runtime/explain/types.d.ts +28 -0
- package/dist/runtime/explain/types.d.ts.map +1 -0
- package/dist/runtime/explain/types.js +1 -0
- package/dist/runtime/harness/index.d.ts +4 -0
- package/dist/runtime/harness/index.d.ts.map +1 -0
- package/dist/runtime/harness/index.js +2 -0
- package/dist/runtime/harness/resolve-from-command-context.d.ts +4 -0
- package/dist/runtime/harness/resolve-from-command-context.d.ts.map +1 -0
- package/dist/runtime/harness/resolve-from-command-context.js +11 -0
- package/dist/runtime/harness/resolve.d.ts +13 -0
- package/dist/runtime/harness/resolve.d.ts.map +1 -0
- package/dist/runtime/harness/resolve.js +146 -0
- package/dist/runtime/harness/types.d.ts +65 -0
- package/dist/runtime/harness/types.d.ts.map +1 -0
- package/dist/runtime/harness/types.js +1 -0
- package/dist/runtime/incidents/index.d.ts +3 -0
- package/dist/runtime/incidents/index.d.ts.map +1 -0
- package/dist/runtime/incidents/index.js +1 -0
- package/dist/runtime/incidents/resolve.d.ts +26 -0
- package/dist/runtime/incidents/resolve.d.ts.map +1 -0
- package/dist/runtime/incidents/resolve.js +683 -0
- package/dist/runtime/incidents/types.d.ts +84 -0
- package/dist/runtime/incidents/types.d.ts.map +1 -0
- package/dist/runtime/incidents/types.js +1 -0
- package/dist/runtime/protocol/index.d.ts +3 -0
- package/dist/runtime/protocol/index.d.ts.map +1 -0
- package/dist/runtime/protocol/index.js +2 -0
- package/dist/runtime/protocol/resolve.d.ts +16 -0
- package/dist/runtime/protocol/resolve.d.ts.map +1 -0
- package/dist/runtime/protocol/resolve.js +36 -0
- package/dist/runtime/protocol/types.d.ts +36 -0
- package/dist/runtime/protocol/types.d.ts.map +1 -0
- package/dist/runtime/protocol/types.js +1 -0
- package/dist/runtime/task-intake/index.d.ts +3 -0
- package/dist/runtime/task-intake/index.d.ts.map +1 -0
- package/dist/runtime/task-intake/index.js +1 -0
- package/dist/runtime/task-intake/resolve.d.ts +48 -0
- package/dist/runtime/task-intake/resolve.d.ts.map +1 -0
- package/dist/runtime/task-intake/resolve.js +316 -0
- package/dist/runtime/task-intake/types.d.ts +117 -0
- package/dist/runtime/task-intake/types.d.ts.map +1 -0
- package/dist/runtime/task-intake/types.js +1 -0
- package/dist/shared/env.d.ts +1 -0
- package/dist/shared/env.d.ts.map +1 -1
- package/dist/shared/env.js +22 -1
- package/dist/shared/protected-paths.d.ts +4 -0
- package/dist/shared/protected-paths.d.ts.map +1 -1
- package/dist/shared/protected-paths.js +8 -4
- package/dist/usecases/context/resolve-context.d.ts +55 -6
- package/dist/usecases/context/resolve-context.d.ts.map +1 -1
- package/dist/usecases/context/resolve-context.js +96 -6
- package/dist/usecases/task/task-list-usecase.d.ts.map +1 -1
- package/dist/usecases/task/task-list-usecase.js +8 -2
- package/dist/usecases/task/task-new-usecase.js +4 -4
- package/package.json +2 -2
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { usageError } from "../cli/spec/errors.js";
|
|
2
|
+
import { verifyFindingOptions, validateVerifyFindingSource } from "./task/verify-command-shared.js";
|
|
2
3
|
import { toStringList } from "../cli/spec/parse-utils.js";
|
|
3
4
|
import { findRepoWideAllowPrefixes, repoWideAllowPrefixMessage, } from "../shared/allow-prefix-policy.js";
|
|
4
5
|
export const finishSpec = {
|
|
@@ -157,6 +158,13 @@ export const finishSpec = {
|
|
|
157
158
|
default: false,
|
|
158
159
|
description: "With --close-commit: unstage any currently staged paths before staging the task README.",
|
|
159
160
|
},
|
|
161
|
+
{
|
|
162
|
+
kind: "string",
|
|
163
|
+
name: "base",
|
|
164
|
+
valueHint: "<branch>",
|
|
165
|
+
description: "Optional explicit base branch override for branch_pr finish validation and close-commit reconciliation.",
|
|
166
|
+
},
|
|
167
|
+
...verifyFindingOptions,
|
|
160
168
|
{ kind: "boolean", name: "quiet", default: false, description: "Suppress output." },
|
|
161
169
|
],
|
|
162
170
|
examples: [
|
|
@@ -168,6 +176,10 @@ export const finishSpec = {
|
|
|
168
176
|
cmd: 'agentplane finish 202602030608-F1Q8AB --author INTEGRATOR --body "Verified: all checks passed" --commit-from-comment --commit-allow packages/agentplane/src',
|
|
169
177
|
why: "Finish and create a commit from the comment (single-task only).",
|
|
170
178
|
},
|
|
179
|
+
{
|
|
180
|
+
cmd: 'agentplane finish 202602030608-F1Q8AB --author INTEGRATOR --body "Verified: all checks passed" --commit abcdef123456 --observation "Recurring manual recovery remained easy to miss." --impact "incidents.md stayed stale until a second command." --resolution "Capture the closeout finding during finish itself."',
|
|
181
|
+
why: "Finish a task while appending a structured finding that can promote into incidents.md.",
|
|
182
|
+
},
|
|
171
183
|
],
|
|
172
184
|
validateRaw: (raw) => {
|
|
173
185
|
const ids = raw.args["task-id"];
|
|
@@ -270,9 +282,29 @@ export const finishSpec = {
|
|
|
270
282
|
message: "--close-unstage-others requires --close-commit",
|
|
271
283
|
});
|
|
272
284
|
}
|
|
285
|
+
if (typeof raw.opts.base === "string" && raw.opts.base.trim().length === 0) {
|
|
286
|
+
throw usageError({
|
|
287
|
+
spec: finishSpec,
|
|
288
|
+
command: "finish",
|
|
289
|
+
message: "Invalid value for --base: empty.",
|
|
290
|
+
});
|
|
291
|
+
}
|
|
273
292
|
const hasMeta = typeof raw.opts.result === "string" ||
|
|
274
293
|
typeof raw.opts.risk === "string" ||
|
|
275
294
|
raw.opts.breaking === true;
|
|
295
|
+
const hasFindingInput = [
|
|
296
|
+
raw.opts.observation,
|
|
297
|
+
raw.opts.impact,
|
|
298
|
+
raw.opts.resolution,
|
|
299
|
+
raw.opts["incident-scope"],
|
|
300
|
+
raw.opts["incident-advice"],
|
|
301
|
+
raw.opts["incident-rule"],
|
|
302
|
+
].some((value) => typeof value === "string" && value.trim().length > 0)
|
|
303
|
+
? true
|
|
304
|
+
: (Array.isArray(raw.opts["incident-tag"]) && raw.opts["incident-tag"].length > 0) ||
|
|
305
|
+
(Array.isArray(raw.opts["incident-match"]) && raw.opts["incident-match"].length > 0) ||
|
|
306
|
+
raw.opts["local-only"] === true ||
|
|
307
|
+
raw.opts["repo-fixable"] === true;
|
|
276
308
|
if (hasMeta && taskIds.length !== 1) {
|
|
277
309
|
throw usageError({
|
|
278
310
|
spec: finishSpec,
|
|
@@ -280,6 +312,14 @@ export const finishSpec = {
|
|
|
280
312
|
message: "--result/--risk/--breaking requires exactly one task id",
|
|
281
313
|
});
|
|
282
314
|
}
|
|
315
|
+
if (hasFindingInput && taskIds.length !== 1) {
|
|
316
|
+
throw usageError({
|
|
317
|
+
spec: finishSpec,
|
|
318
|
+
command: "finish",
|
|
319
|
+
message: "--observation/--impact/--resolution and incident finding options require exactly one task id",
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
validateVerifyFindingSource(raw, finishSpec, { command: "finish" });
|
|
283
323
|
},
|
|
284
324
|
parse: (raw) => ({
|
|
285
325
|
taskIds: Array.isArray(raw.args["task-id"])
|
|
@@ -308,6 +348,17 @@ export const finishSpec = {
|
|
|
308
348
|
closeCommit: raw.opts["close-commit"] === true,
|
|
309
349
|
noCloseCommit: raw.opts["no-close-commit"] === true,
|
|
310
350
|
closeUnstageOthers: raw.opts["close-unstage-others"] === true,
|
|
351
|
+
baseBranchOverride: typeof raw.opts.base === "string" ? raw.opts.base : undefined,
|
|
352
|
+
observation: typeof raw.opts.observation === "string" ? raw.opts.observation : undefined,
|
|
353
|
+
impact: typeof raw.opts.impact === "string" ? raw.opts.impact : undefined,
|
|
354
|
+
resolution: typeof raw.opts.resolution === "string" ? raw.opts.resolution : undefined,
|
|
355
|
+
localOnly: raw.opts["local-only"] === true,
|
|
356
|
+
repoFixable: raw.opts["repo-fixable"] === true,
|
|
357
|
+
incidentScope: typeof raw.opts["incident-scope"] === "string" ? raw.opts["incident-scope"] : undefined,
|
|
358
|
+
incidentTags: toStringList(raw.opts["incident-tag"]),
|
|
359
|
+
incidentMatch: toStringList(raw.opts["incident-match"]),
|
|
360
|
+
incidentAdvice: typeof raw.opts["incident-advice"] === "string" ? raw.opts["incident-advice"] : undefined,
|
|
361
|
+
incidentRule: typeof raw.opts["incident-rule"] === "string" ? raw.opts["incident-rule"] : undefined,
|
|
311
362
|
quiet: raw.opts.quiet === true,
|
|
312
363
|
}),
|
|
313
364
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"close-message.d.ts","sourceRoot":"","sources":["../../../../src/commands/guard/impl/close-message.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"close-message.d.ts","sourceRoot":"","sources":["../../../../src/commands/guard/impl/close-message.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAyIlE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,wBAAsB,uBAAuB,CAAC,IAAI,EAAE;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,QAAQ,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAsD9B;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,MAAM,CAET"}
|
|
@@ -3,6 +3,15 @@ import { extractTaskSuffix } from "@agentplaneorg/core";
|
|
|
3
3
|
import { exitCodeForError } from "../../../cli/exit-codes.js";
|
|
4
4
|
import { CliError } from "../../../shared/errors.js";
|
|
5
5
|
import { execFileAsync, gitEnv } from "../../shared/git.js";
|
|
6
|
+
function isMissingCommitObjectError(err) {
|
|
7
|
+
const stderr = err.stderr;
|
|
8
|
+
const text = err instanceof Error
|
|
9
|
+
? [err.message, typeof stderr === "string" ? stderr : ""]
|
|
10
|
+
.filter((part) => part.trim().length > 0)
|
|
11
|
+
.join("\n")
|
|
12
|
+
: String(err);
|
|
13
|
+
return (/bad object/i.test(text) || /unknown revision/i.test(text) || /ambiguous argument/i.test(text));
|
|
14
|
+
}
|
|
6
15
|
function uniqSorted(values) {
|
|
7
16
|
return [...new Set(values)].toSorted((a, b) => a.localeCompare(b));
|
|
8
17
|
}
|
|
@@ -29,12 +38,20 @@ function clampList(items, max) {
|
|
|
29
38
|
return items.slice(0, Math.max(0, Math.floor(max)));
|
|
30
39
|
}
|
|
31
40
|
async function gitNumstatForCommit(gitRoot, commit) {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
41
|
+
let stdout;
|
|
42
|
+
try {
|
|
43
|
+
({ stdout } = await execFileAsync("git", ["show", "--numstat", "--format=", commit], {
|
|
44
|
+
cwd: gitRoot,
|
|
45
|
+
env: gitEnv(),
|
|
46
|
+
encoding: "buffer",
|
|
47
|
+
maxBuffer: 10 * 1024 * 1024,
|
|
48
|
+
}));
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
if (isMissingCommitObjectError(err))
|
|
52
|
+
return [];
|
|
53
|
+
throw err;
|
|
54
|
+
}
|
|
38
55
|
const text = Buffer.isBuffer(stdout) ? stdout.toString("utf8") : String(stdout);
|
|
39
56
|
const entries = [];
|
|
40
57
|
for (const line of text.split("\n")) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../../../src/commands/guard/impl/commands.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../../../src/commands/guard/impl/commands.ts"],"names":[],"mappings":"AAUA,OAAO,EAAsB,KAAK,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAQvF,OAAO,EAAoB,KAAK,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAsOxE,wBAAsB,aAAa,CAAC,IAAI,EAAE;IACxC,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,OAAO,CAAC;CAChB,GAAG,OAAO,CAAC,MAAM,CAAC,CAsBlB;AAED,wBAAsB,oBAAoB,CAAC,IAAI,EAAE;IAC/C,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC;CAC1B,GAAG,OAAO,CAAC,MAAM,CAAC,CAyBlB;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAa9E;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE;IACpC,GAAG,CAAC,EAAE,cAAc,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,OAAO,CAAC;IACtB,KAAK,EAAE,OAAO,CAAC;IACf,kBAAkB,EAAE,OAAO,CAAC;IAC5B,cAAc,EAAE,OAAO,CAAC;IACxB,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC,GAAG,OAAO,CAAC,MAAM,CAAC,CA4OlB"}
|
|
@@ -6,6 +6,7 @@ import { infoMessage, successMessage } from "../../../cli/output.js";
|
|
|
6
6
|
import { stripAnsi } from "../../../cli/shared/ansi.js";
|
|
7
7
|
import { withDiagnosticContext } from "../../../shared/diagnostics.js";
|
|
8
8
|
import { CliError } from "../../../shared/errors.js";
|
|
9
|
+
import { refreshBranchPrArtifactsAfterTaskCommit } from "../../shared/post-commit-pr-artifacts.js";
|
|
9
10
|
import { loadCommandContext } from "../../shared/task-backend.js";
|
|
10
11
|
import { loadTaskFromContext } from "../../shared/task-backend.js";
|
|
11
12
|
import { execFileAsync, gitEnv } from "../../shared/git.js";
|
|
@@ -325,11 +326,24 @@ export async function cmdCommit(opts) {
|
|
|
325
326
|
}
|
|
326
327
|
return 0;
|
|
327
328
|
}
|
|
329
|
+
if (opts.closeStageTaskArtifacts === true) {
|
|
330
|
+
await refreshBranchPrArtifactsAfterTaskCommit({
|
|
331
|
+
ctx,
|
|
332
|
+
cwd: opts.cwd,
|
|
333
|
+
rootOverride: opts.rootOverride,
|
|
334
|
+
taskId: opts.taskId,
|
|
335
|
+
quiet: opts.quiet,
|
|
336
|
+
});
|
|
337
|
+
// Artifact refresh writes tracked task files on disk; invalidate the memoized
|
|
338
|
+
// porcelain snapshot so staging/cleanliness checks see the refreshed state.
|
|
339
|
+
ctx.git.invalidateStatus();
|
|
340
|
+
}
|
|
328
341
|
await (opts.closeStageTaskArtifacts === true
|
|
329
342
|
? stageAllowlist({
|
|
330
343
|
ctx,
|
|
331
344
|
allow: [],
|
|
332
345
|
allowTasks: true,
|
|
346
|
+
allowPolicy: opts.allowPolicy,
|
|
333
347
|
tasksPath: ctx.config.paths.tasks_path,
|
|
334
348
|
workflowDir: ctx.config.paths.workflow_dir,
|
|
335
349
|
taskId: opts.taskId,
|
|
@@ -350,7 +364,7 @@ export async function cmdCommit(opts) {
|
|
|
350
364
|
allow: [],
|
|
351
365
|
allowBase: opts.allowBase,
|
|
352
366
|
allowTasks: true,
|
|
353
|
-
allowPolicy:
|
|
367
|
+
allowPolicy: opts.allowPolicy,
|
|
354
368
|
allowConfig: false,
|
|
355
369
|
allowHooks: false,
|
|
356
370
|
allowCI: false,
|
|
@@ -361,10 +375,11 @@ export async function cmdCommit(opts) {
|
|
|
361
375
|
taskId: opts.taskId,
|
|
362
376
|
allowTasks: true,
|
|
363
377
|
allowBase: opts.allowBase,
|
|
364
|
-
allowPolicy:
|
|
378
|
+
allowPolicy: opts.allowPolicy,
|
|
365
379
|
allowConfig: false,
|
|
366
380
|
allowHooks: false,
|
|
367
381
|
allowCI: false,
|
|
382
|
+
allowStaleDist: true,
|
|
368
383
|
});
|
|
369
384
|
await ctx.git.commit({ message: msg.subject, body: msg.body, env });
|
|
370
385
|
if (!opts.quiet) {
|
|
@@ -437,6 +452,13 @@ export async function cmdCommit(opts) {
|
|
|
437
452
|
allowCI: opts.allowCI,
|
|
438
453
|
});
|
|
439
454
|
await ctx.git.commit({ message: opts.message, env });
|
|
455
|
+
await refreshBranchPrArtifactsAfterTaskCommit({
|
|
456
|
+
ctx,
|
|
457
|
+
cwd: opts.cwd,
|
|
458
|
+
rootOverride: opts.rootOverride,
|
|
459
|
+
taskId: opts.taskId,
|
|
460
|
+
quiet: opts.quiet,
|
|
461
|
+
});
|
|
440
462
|
if (!opts.quiet) {
|
|
441
463
|
const { hash, subject } = await ctx.git.headHashSubject();
|
|
442
464
|
process.stdout.write(`${successMessage("committed", `${hash?.slice(0, 12) ?? ""} ${subject ?? ""}`.trim(), autoStaged.length > 0 ? `staged=${autoStaged.join(", ")}` : undefined)}\n`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../../../src/commands/guard/impl/env.ts"],"names":[],"mappings":"AAAA,wBAAgB,iBAAiB,CAAC,IAAI,EAAE;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../../../src/commands/guard/impl/env.ts"],"names":[],"mappings":"AAAA,wBAAgB,iBAAiB,CAAC,IAAI,EAAE;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,GAAG,MAAM,CAAC,UAAU,CAcpB"}
|
|
@@ -10,5 +10,6 @@ export function buildGitCommitEnv(opts) {
|
|
|
10
10
|
AGENTPLANE_ALLOW_CONFIG: opts.allowConfig ? "1" : "0",
|
|
11
11
|
AGENTPLANE_ALLOW_HOOKS: opts.allowHooks ? "1" : "0",
|
|
12
12
|
AGENTPLANE_ALLOW_CI: opts.allowCI ? "1" : "0",
|
|
13
|
+
...(opts.allowStaleDist ? { AGENTPLANE_DEV_ALLOW_STALE_DIST: "1" } : null),
|
|
13
14
|
};
|
|
14
15
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/hooks/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/hooks/index.ts"],"names":[],"mappings":"AAoBA,eAAO,MAAM,UAAU,mDAAoD,CAAC;AA8K5E,wBAAsB,eAAe,CAAC,IAAI,EAAE;IAC1C,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,OAAO,CAAC;CAChB,GAAG,OAAO,CAAC,MAAM,CAAC,CAmClB;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE;IAC5C,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,OAAO,CAAC;CAChB,GAAG,OAAO,CAAC,MAAM,CAAC,CA4BlB;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB,GAAG,OAAO,CAAC,MAAM,CAAC,CAiJlB"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import { spawnSync } from "node:child_process";
|
|
1
2
|
import { chmod, mkdir, readFile, rm, writeFile } from "node:fs/promises";
|
|
2
3
|
import path from "node:path";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
3
5
|
import { loadConfig, resolveBaseBranch, resolveProject } from "@agentplaneorg/core";
|
|
4
6
|
import { evaluatePolicy } from "../../policy/evaluate.js";
|
|
5
7
|
import { mapBackendError, mapCoreError } from "../../cli/error-map.js";
|
|
@@ -9,10 +11,20 @@ import { CliError } from "../../shared/errors.js";
|
|
|
9
11
|
import { GitContext } from "../shared/git-context.js";
|
|
10
12
|
import { throwIfPolicyDenied } from "../shared/policy-deny.js";
|
|
11
13
|
import { gitCurrentBranch, gitRevParse } from "../shared/git-ops.js";
|
|
14
|
+
import { parseTaskIdFromBranch, parseTaskIdFromCloseBranch } from "../shared/git-worktree.js";
|
|
12
15
|
import { isPathWithin } from "../shared/path.js";
|
|
13
16
|
const HOOK_MARKER = "agentplane-hook";
|
|
14
17
|
const SHIM_MARKER = "agentplane-hook-shim";
|
|
15
18
|
export const HOOK_NAMES = ["commit-msg", "pre-commit", "pre-push"];
|
|
19
|
+
async function inferTaskIdFromBranchContext(opts) {
|
|
20
|
+
try {
|
|
21
|
+
const branch = await gitCurrentBranch(opts.gitRoot);
|
|
22
|
+
return (parseTaskIdFromBranch(opts.taskPrefix, branch) ?? parseTaskIdFromCloseBranch(branch) ?? "");
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return "";
|
|
26
|
+
}
|
|
27
|
+
}
|
|
16
28
|
async function resolveGitHooksDir(cwd) {
|
|
17
29
|
const repoRoot = await gitRevParse(cwd, ["--show-toplevel"]);
|
|
18
30
|
const commonDirRaw = await gitRevParse(cwd, ["--git-common-dir"]);
|
|
@@ -116,6 +128,47 @@ function readCommitSubject(message) {
|
|
|
116
128
|
}
|
|
117
129
|
return "";
|
|
118
130
|
}
|
|
131
|
+
function resolveBundledPrePushHookScriptPath() {
|
|
132
|
+
return fileURLToPath(new URL("../../../../../scripts/run-pre-push-hook.mjs", import.meta.url));
|
|
133
|
+
}
|
|
134
|
+
async function readHookStdinUtf8(timeoutMs = 25) {
|
|
135
|
+
if (process.stdin.isTTY)
|
|
136
|
+
return "";
|
|
137
|
+
const chunks = [];
|
|
138
|
+
const consume = () => {
|
|
139
|
+
let chunk = process.stdin.read();
|
|
140
|
+
while (chunk !== null) {
|
|
141
|
+
chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk)));
|
|
142
|
+
chunk = process.stdin.read();
|
|
143
|
+
}
|
|
144
|
+
};
|
|
145
|
+
consume();
|
|
146
|
+
if (chunks.length > 0 || process.stdin.readableEnded) {
|
|
147
|
+
return Buffer.concat(chunks).toString("utf8");
|
|
148
|
+
}
|
|
149
|
+
await new Promise((resolve) => {
|
|
150
|
+
const finish = () => {
|
|
151
|
+
clearTimeout(timer);
|
|
152
|
+
process.stdin.off("readable", onReadable);
|
|
153
|
+
process.stdin.off("end", onEnd);
|
|
154
|
+
resolve();
|
|
155
|
+
};
|
|
156
|
+
const onReadable = () => {
|
|
157
|
+
consume();
|
|
158
|
+
finish();
|
|
159
|
+
};
|
|
160
|
+
const onEnd = () => {
|
|
161
|
+
consume();
|
|
162
|
+
finish();
|
|
163
|
+
};
|
|
164
|
+
const timer = setTimeout(finish, timeoutMs);
|
|
165
|
+
process.stdin.on("readable", onReadable);
|
|
166
|
+
process.stdin.on("end", onEnd);
|
|
167
|
+
process.stdin.resume();
|
|
168
|
+
});
|
|
169
|
+
consume();
|
|
170
|
+
return Buffer.concat(chunks).toString("utf8");
|
|
171
|
+
}
|
|
119
172
|
export async function cmdHooksInstall(opts) {
|
|
120
173
|
try {
|
|
121
174
|
const resolved = await resolveProject({
|
|
@@ -201,7 +254,11 @@ export async function cmdHooksRun(opts) {
|
|
|
201
254
|
rootOverride: opts.rootOverride ?? null,
|
|
202
255
|
});
|
|
203
256
|
const loaded = await loadConfig(resolved.agentplaneDir);
|
|
204
|
-
const taskId = (process.env.AGENTPLANE_TASK_ID ?? "").trim()
|
|
257
|
+
const taskId = (process.env.AGENTPLANE_TASK_ID ?? "").trim() ||
|
|
258
|
+
(await inferTaskIdFromBranchContext({
|
|
259
|
+
gitRoot: resolved.gitRoot,
|
|
260
|
+
taskPrefix: loaded.config.branch.task_prefix,
|
|
261
|
+
}));
|
|
205
262
|
const statusTo = (process.env.AGENTPLANE_STATUS_TO ?? "").trim().toUpperCase();
|
|
206
263
|
const emoji = subject.split(/\s+/).find(Boolean) ?? "";
|
|
207
264
|
if (taskId && statusTo === "DONE" && emoji !== "✅") {
|
|
@@ -269,9 +326,49 @@ export async function cmdHooksRun(opts) {
|
|
|
269
326
|
throwIfPolicyDenied(res);
|
|
270
327
|
return 0;
|
|
271
328
|
}
|
|
329
|
+
if (opts.hook === "pre-push") {
|
|
330
|
+
const resolved = await resolveProject({
|
|
331
|
+
cwd: opts.cwd,
|
|
332
|
+
rootOverride: opts.rootOverride ?? null,
|
|
333
|
+
});
|
|
334
|
+
const scriptPath = resolveBundledPrePushHookScriptPath();
|
|
335
|
+
if (!(await fileExists(scriptPath))) {
|
|
336
|
+
throw new CliError({
|
|
337
|
+
exitCode: 2,
|
|
338
|
+
code: "E_USAGE",
|
|
339
|
+
message: `Missing pre-push hook script: ${scriptPath}`,
|
|
340
|
+
});
|
|
341
|
+
}
|
|
342
|
+
const result = spawnSync("node", [scriptPath], {
|
|
343
|
+
cwd: resolved.gitRoot,
|
|
344
|
+
env: process.env,
|
|
345
|
+
encoding: "utf8",
|
|
346
|
+
input: await readHookStdinUtf8(),
|
|
347
|
+
stdio: "pipe",
|
|
348
|
+
});
|
|
349
|
+
if (typeof result.stdout === "string" && result.stdout.length > 0) {
|
|
350
|
+
process.stdout.write(result.stdout);
|
|
351
|
+
}
|
|
352
|
+
if (typeof result.stderr === "string" && result.stderr.length > 0) {
|
|
353
|
+
process.stderr.write(result.stderr);
|
|
354
|
+
}
|
|
355
|
+
if (result.error)
|
|
356
|
+
throw result.error;
|
|
357
|
+
return result.status ?? (result.signal ? 1 : 0);
|
|
358
|
+
}
|
|
272
359
|
return 0;
|
|
273
360
|
}
|
|
274
361
|
catch (err) {
|
|
362
|
+
const status = err?.status;
|
|
363
|
+
const stdout = err?.stdout;
|
|
364
|
+
const stderr = err?.stderr;
|
|
365
|
+
if (typeof stdout === "string" && stdout.length > 0)
|
|
366
|
+
process.stdout.write(stdout);
|
|
367
|
+
if (typeof stderr === "string" && stderr.length > 0)
|
|
368
|
+
process.stderr.write(stderr);
|
|
369
|
+
if (typeof status === "number" && Number.isInteger(status) && status >= 0) {
|
|
370
|
+
return status;
|
|
371
|
+
}
|
|
275
372
|
if (err instanceof CliError)
|
|
276
373
|
throw err;
|
|
277
374
|
throw mapBackendError(err, {
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { CommandCtx, CommandSpec } from "../../cli/spec/spec.js";
|
|
2
|
+
import { type CommandContext } from "../shared/task-backend.js";
|
|
3
|
+
type IncidentsAdviseParsed = {
|
|
4
|
+
taskId: string | null;
|
|
5
|
+
scope: string | null;
|
|
6
|
+
title: string | null;
|
|
7
|
+
description: string | null;
|
|
8
|
+
tags: string[];
|
|
9
|
+
limit: number;
|
|
10
|
+
json: boolean;
|
|
11
|
+
};
|
|
12
|
+
export declare const incidentsAdviseSpec: CommandSpec<IncidentsAdviseParsed>;
|
|
13
|
+
export declare function makeRunIncidentsAdviseHandler(getCtx: (cmd: string) => Promise<CommandContext>): (ctx: CommandCtx, p: IncidentsAdviseParsed) => Promise<number>;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=advise.command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"advise.command.d.ts","sourceRoot":"","sources":["../../../src/commands/incidents/advise.command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAQtE,OAAO,EAAsB,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAGpF,KAAK,qBAAqB,GAAG;IAC3B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;CACf,CAAC;AAIF,eAAO,MAAM,mBAAmB,EAAE,WAAW,CAAC,qBAAqB,CA6ElE,CAAC;AAEF,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,IAC9E,KAAK,UAAU,EAAE,GAAG,qBAAqB,KAAG,OAAO,CAAC,MAAM,CAAC,CA2D1E"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { createCliEmitter } from "../../cli/output.js";
|
|
2
|
+
import { usageError } from "../../cli/spec/errors.js";
|
|
3
|
+
import { buildIncidentAdviceQueryFromTask, renderIncidentAdvice, resolveIncidentAdviceMatches, } from "../../runtime/incidents/index.js";
|
|
4
|
+
import { loadCommandContext } from "../shared/task-backend.js";
|
|
5
|
+
import { adviseTaskIncidents, loadIncidentRegistry } from "./shared.js";
|
|
6
|
+
const output = createCliEmitter();
|
|
7
|
+
export const incidentsAdviseSpec = {
|
|
8
|
+
id: ["incidents", "advise"],
|
|
9
|
+
group: "Policy",
|
|
10
|
+
summary: "Resolve relevant incident advice for a task or an ad hoc scope/tag query.",
|
|
11
|
+
args: [{ name: "task-id", required: false, valueHint: "<task-id>" }],
|
|
12
|
+
options: [
|
|
13
|
+
{
|
|
14
|
+
kind: "string",
|
|
15
|
+
name: "scope",
|
|
16
|
+
valueHint: "<text>",
|
|
17
|
+
description: "Ad hoc scope text when querying without a task id.",
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
kind: "string",
|
|
21
|
+
name: "title",
|
|
22
|
+
valueHint: "<text>",
|
|
23
|
+
description: "Optional title text for ad hoc advice lookup.",
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
kind: "string",
|
|
27
|
+
name: "description",
|
|
28
|
+
valueHint: "<text>",
|
|
29
|
+
description: "Optional description text for ad hoc advice lookup.",
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
kind: "string",
|
|
33
|
+
name: "tag",
|
|
34
|
+
valueHint: "<tag>",
|
|
35
|
+
repeatable: true,
|
|
36
|
+
description: "Matching tag for ad hoc advice lookup; repeat as needed.",
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
kind: "string",
|
|
40
|
+
name: "limit",
|
|
41
|
+
valueHint: "<n>",
|
|
42
|
+
default: "5",
|
|
43
|
+
coerce: (raw) => Number.parseInt(raw, 10),
|
|
44
|
+
description: "Maximum number of advice entries to show.",
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
kind: "boolean",
|
|
48
|
+
name: "json",
|
|
49
|
+
default: false,
|
|
50
|
+
description: "Emit machine-readable advice matches.",
|
|
51
|
+
},
|
|
52
|
+
],
|
|
53
|
+
validateRaw: (raw) => {
|
|
54
|
+
const taskId = typeof raw.args["task-id"] === "string" ? raw.args["task-id"].trim() : "";
|
|
55
|
+
const scope = typeof raw.opts.scope === "string" ? raw.opts.scope.trim() : "";
|
|
56
|
+
const title = typeof raw.opts.title === "string" ? raw.opts.title.trim() : "";
|
|
57
|
+
const description = typeof raw.opts.description === "string" ? raw.opts.description.trim() : "";
|
|
58
|
+
const tags = Array.isArray(raw.opts.tag) ? raw.opts.tag : [];
|
|
59
|
+
if (!taskId && !scope && !title && !description && tags.length === 0) {
|
|
60
|
+
throw usageError({
|
|
61
|
+
spec: incidentsAdviseSpec,
|
|
62
|
+
message: "Provide either <task-id> or at least one of --scope/--title/--description/--tag.",
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
parse: (raw) => ({
|
|
67
|
+
taskId: typeof raw.args["task-id"] === "string" && String(raw.args["task-id"]).trim()
|
|
68
|
+
? String(raw.args["task-id"]).trim()
|
|
69
|
+
: null,
|
|
70
|
+
scope: typeof raw.opts.scope === "string" ? String(raw.opts.scope).trim() : null,
|
|
71
|
+
title: typeof raw.opts.title === "string" ? String(raw.opts.title).trim() : null,
|
|
72
|
+
description: typeof raw.opts.description === "string" ? String(raw.opts.description).trim() : null,
|
|
73
|
+
tags: Array.isArray(raw.opts.tag)
|
|
74
|
+
? raw.opts.tag.map((value) => String(value).trim()).filter(Boolean)
|
|
75
|
+
: [],
|
|
76
|
+
limit: typeof raw.opts.limit === "number" && Number.isInteger(raw.opts.limit) && raw.opts.limit > 0
|
|
77
|
+
? Number(raw.opts.limit)
|
|
78
|
+
: 5,
|
|
79
|
+
json: raw.opts.json === true,
|
|
80
|
+
}),
|
|
81
|
+
};
|
|
82
|
+
export function makeRunIncidentsAdviseHandler(getCtx) {
|
|
83
|
+
return async (ctx, p) => {
|
|
84
|
+
const commandContext = (await getCtx("incidents advise")) ??
|
|
85
|
+
(await loadCommandContext({ cwd: ctx.cwd, rootOverride: ctx.rootOverride ?? null }));
|
|
86
|
+
if (p.taskId) {
|
|
87
|
+
const result = await adviseTaskIncidents({
|
|
88
|
+
ctx: commandContext,
|
|
89
|
+
taskId: p.taskId,
|
|
90
|
+
limit: p.limit,
|
|
91
|
+
});
|
|
92
|
+
if (p.json) {
|
|
93
|
+
output.json({
|
|
94
|
+
task_id: p.taskId,
|
|
95
|
+
matches: result.matches.map((match) => ({
|
|
96
|
+
score: match.score,
|
|
97
|
+
matched_tags: match.matchedTags,
|
|
98
|
+
matched_terms: match.matchedTerms,
|
|
99
|
+
scope_matched: match.scopeMatched,
|
|
100
|
+
entry: match.entry,
|
|
101
|
+
})),
|
|
102
|
+
});
|
|
103
|
+
return 0;
|
|
104
|
+
}
|
|
105
|
+
output.line(`Incident advice for ${p.taskId}:`);
|
|
106
|
+
output.line(renderIncidentAdvice(result.matches));
|
|
107
|
+
return 0;
|
|
108
|
+
}
|
|
109
|
+
const registry = await loadIncidentRegistry(commandContext);
|
|
110
|
+
const query = buildIncidentAdviceQueryFromTask({
|
|
111
|
+
taskId: "adhoc",
|
|
112
|
+
title: p.title ?? p.scope ?? "",
|
|
113
|
+
description: p.description ?? "",
|
|
114
|
+
scope: p.scope,
|
|
115
|
+
tags: p.tags,
|
|
116
|
+
});
|
|
117
|
+
const matches = resolveIncidentAdviceMatches({
|
|
118
|
+
query,
|
|
119
|
+
registry: registry.registry,
|
|
120
|
+
limit: p.limit,
|
|
121
|
+
});
|
|
122
|
+
if (p.json) {
|
|
123
|
+
output.json({
|
|
124
|
+
query,
|
|
125
|
+
matches: matches.map((match) => ({
|
|
126
|
+
score: match.score,
|
|
127
|
+
matched_tags: match.matchedTags,
|
|
128
|
+
matched_terms: match.matchedTerms,
|
|
129
|
+
scope_matched: match.scopeMatched,
|
|
130
|
+
entry: match.entry,
|
|
131
|
+
})),
|
|
132
|
+
});
|
|
133
|
+
return 0;
|
|
134
|
+
}
|
|
135
|
+
output.line("Incident advice:");
|
|
136
|
+
output.line(renderIncidentAdvice(matches));
|
|
137
|
+
return 0;
|
|
138
|
+
};
|
|
139
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { CommandCtx, CommandSpec } from "../../cli/spec/spec.js";
|
|
2
|
+
import { type CommandContext } from "../shared/task-backend.js";
|
|
3
|
+
type IncidentsCollectParsed = {
|
|
4
|
+
taskId: string;
|
|
5
|
+
check: boolean;
|
|
6
|
+
json: boolean;
|
|
7
|
+
};
|
|
8
|
+
export declare const incidentsCollectSpec: CommandSpec<IncidentsCollectParsed>;
|
|
9
|
+
export declare function makeRunIncidentsCollectHandler(getCtx: (cmd: string) => Promise<CommandContext>): (ctx: CommandCtx, p: IncidentsCollectParsed) => Promise<number>;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=collect.command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collect.command.d.ts","sourceRoot":"","sources":["../../../src/commands/incidents/collect.command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAEtE,OAAO,EAAsB,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAGpF,KAAK,sBAAsB,GAAG;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;CACf,CAAC;AAIF,eAAO,MAAM,oBAAoB,EAAE,WAAW,CAAC,sBAAsB,CAmCpE,CAAC;AAEF,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,IAC/E,KAAK,UAAU,EAAE,GAAG,sBAAsB,KAAG,OAAO,CAAC,MAAM,CAAC,CAsC3E"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { createCliEmitter } from "../../cli/output.js";
|
|
2
|
+
import { loadCommandContext } from "../shared/task-backend.js";
|
|
3
|
+
import { collectTaskIncidents, renderIncidentCollectionPlanOutcome } from "./shared.js";
|
|
4
|
+
const output = createCliEmitter();
|
|
5
|
+
export const incidentsCollectSpec = {
|
|
6
|
+
id: ["incidents", "collect"],
|
|
7
|
+
group: "Policy",
|
|
8
|
+
summary: "Promote reusable resolved external findings from a task into the incident registry.",
|
|
9
|
+
args: [{ name: "task-id", required: true, valueHint: "<task-id>" }],
|
|
10
|
+
options: [
|
|
11
|
+
{
|
|
12
|
+
kind: "boolean",
|
|
13
|
+
name: "check",
|
|
14
|
+
default: false,
|
|
15
|
+
description: "Validate incident promotion inputs without writing `.agentplane/policy/incidents.md`.",
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
kind: "boolean",
|
|
19
|
+
name: "json",
|
|
20
|
+
default: false,
|
|
21
|
+
description: "Emit machine-readable collection details.",
|
|
22
|
+
},
|
|
23
|
+
],
|
|
24
|
+
examples: [
|
|
25
|
+
{
|
|
26
|
+
cmd: "agentplane incidents collect 202604031416-HEJWTM",
|
|
27
|
+
why: "Promote resolved external incident advice from task Findings into the shared registry.",
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
cmd: "agentplane incidents collect 202604031416-HEJWTM --check --json",
|
|
31
|
+
why: "Validate that reusable resolved external findings are complete before finish.",
|
|
32
|
+
},
|
|
33
|
+
],
|
|
34
|
+
parse: (raw) => ({
|
|
35
|
+
taskId: String(raw.args["task-id"] ?? ""),
|
|
36
|
+
check: raw.opts.check === true,
|
|
37
|
+
json: raw.opts.json === true,
|
|
38
|
+
}),
|
|
39
|
+
};
|
|
40
|
+
export function makeRunIncidentsCollectHandler(getCtx) {
|
|
41
|
+
return async (ctx, p) => {
|
|
42
|
+
const commandContext = (await getCtx("incidents collect")) ??
|
|
43
|
+
(await loadCommandContext({ cwd: ctx.cwd, rootOverride: ctx.rootOverride ?? null }));
|
|
44
|
+
const result = await collectTaskIncidents({
|
|
45
|
+
ctx: commandContext,
|
|
46
|
+
taskId: p.taskId,
|
|
47
|
+
write: !p.check,
|
|
48
|
+
});
|
|
49
|
+
if (p.json) {
|
|
50
|
+
output.json({
|
|
51
|
+
task_id: p.taskId,
|
|
52
|
+
checked_only: p.check,
|
|
53
|
+
candidates: result.plan.candidates.length,
|
|
54
|
+
skipped: result.plan.skipped,
|
|
55
|
+
promotable: result.plan.promotable.map((item) => item.entry),
|
|
56
|
+
duplicates: result.plan.duplicates.map((item) => item.entry.id),
|
|
57
|
+
wrote: result.wrote,
|
|
58
|
+
registry_path: result.registryPath,
|
|
59
|
+
registry_paths: result.registryPaths,
|
|
60
|
+
});
|
|
61
|
+
return 0;
|
|
62
|
+
}
|
|
63
|
+
output.success(p.check ? "checked" : "collected", p.taskId, `candidates=${result.plan.candidates.length} skipped=${result.plan.skipped.length} promoted=${result.plan.promotable.length} duplicates=${result.plan.duplicates.length}`);
|
|
64
|
+
output.info(renderIncidentCollectionPlanOutcome(result.plan, {
|
|
65
|
+
wrote: result.wrote,
|
|
66
|
+
context: "collect",
|
|
67
|
+
promotedIds: result.plan.promotable.map((item) => item.entry.id),
|
|
68
|
+
registryPaths: result.registryPaths,
|
|
69
|
+
}));
|
|
70
|
+
return 0;
|
|
71
|
+
};
|
|
72
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { CommandHandler, CommandSpec } from "../../cli/spec/spec.js";
|
|
2
|
+
import { type GroupCommandParsed } from "../../cli/group-command.js";
|
|
3
|
+
export declare const incidentsSpec: CommandSpec<GroupCommandParsed>;
|
|
4
|
+
export declare const runIncidents: CommandHandler<GroupCommandParsed>;
|
|
5
|
+
//# sourceMappingURL=incidents.command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"incidents.command.d.ts","sourceRoot":"","sources":["../../../src/commands/incidents/incidents.command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,EAIL,KAAK,kBAAkB,EACxB,MAAM,4BAA4B,CAAC;AAEpC,eAAO,MAAM,aAAa,EAAE,WAAW,CAAC,kBAAkB,CAWzD,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,cAAc,CAAC,kBAAkB,CAO3D,CAAC"}
|