@iowarp/clio-coder 0.3.6 → 0.3.8
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/CHANGELOG.md +59 -0
- package/README.md +22 -6
- package/dist/{acp-2BEHC4DL.js → acp-U67UHUK2.js} +14 -14
- package/dist/{agents-LNNFTM53.js → agents-YU6SGALZ.js} +42 -35
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-KXXFI2VS.js → auth-5ZPJOIVG.js} +32 -24
- package/dist/builtins-C6JMZVV6.js +17 -0
- package/dist/{chunk-E25LMLRW.js → chunk-26LEYJZH.js} +2 -2
- package/dist/{chunk-TSHXZTOQ.js → chunk-2HEJ2F35.js} +5 -5
- package/dist/{chunk-PBTHKCPN.js → chunk-2HFZQUHL.js} +7 -7
- package/dist/{chunk-FO5ZOVUY.js → chunk-3BINW3FP.js} +5 -5
- package/dist/{chunk-4OC57DA6.js → chunk-4DGYLA73.js} +53 -2
- package/dist/{chunk-CKXWIANG.js → chunk-4SPRNWDE.js} +18 -16
- package/dist/{chunk-E2ER4LJF.js → chunk-5C3AQNDW.js} +25 -1
- package/dist/{chunk-XF5N4U5A.js → chunk-5DHKRSMQ.js} +9 -8
- package/dist/{chunk-43AOLP7E.js → chunk-5FR74PWO.js} +2 -1
- package/dist/{chunk-EKY57CSP.js → chunk-5H3GB5BO.js} +68 -772
- package/dist/{chunk-6XXKFVSN.js → chunk-5Q2VVUKB.js} +4 -4
- package/dist/{chunk-DJVECN66.js → chunk-7RFXX52T.js} +295 -3705
- package/dist/{chunk-ZXF4XRKW.js → chunk-7RGZWPB6.js} +158 -8
- package/dist/{chunk-FYYLNIL5.js → chunk-A2NJGIB3.js} +2 -2
- package/dist/{chunk-XXQNGV4M.js → chunk-A3WNZD3P.js} +548 -72
- package/dist/{chunk-VEZEGCGW.js → chunk-B5CSFE7B.js} +23 -21
- package/dist/{chunk-2SFS6XQE.js → chunk-DGSYXYMX.js} +3 -2
- package/dist/chunk-DR52UMZW.js +21 -0
- package/dist/{chunk-ZWLZP4ZT.js → chunk-DYIM5TJT.js} +98 -12
- package/dist/{chunk-QKMUKYO7.js → chunk-E77JEWSD.js} +270 -125
- package/dist/{chunk-LYF7OHWH.js → chunk-EMYUUSFG.js} +12 -467
- package/dist/{chunk-4VP4KH3K.js → chunk-EQ63NRB7.js} +8 -8
- package/dist/chunk-FBVTI2TJ.js +518 -0
- package/dist/{chunk-R46L2BIR.js → chunk-FHJEP5SW.js} +19 -25
- package/dist/{chunk-WR67VIZY.js → chunk-GN57SG4G.js} +66 -8
- package/dist/{chunk-RD5U66HV.js → chunk-GPIEI3LY.js} +9 -9
- package/dist/{chunk-PCZJO5TI.js → chunk-GU2UIAFZ.js} +13 -178
- package/dist/chunk-GWS3VEIW.js +195 -0
- package/dist/chunk-H7IXIC72.js +103 -0
- package/dist/{chunk-3BPUFZDL.js → chunk-HLE42MG7.js} +3 -3
- package/dist/{chunk-24I7BN55.js → chunk-IFBNV6H6.js} +3 -3
- package/dist/{chunk-QNQHSOLF.js → chunk-IGWKHNIQ.js} +114 -55
- package/dist/chunk-IIZWH4XA.js +172 -0
- package/dist/{chunk-AD2SYQYC.js → chunk-IJ7RPIYJ.js} +124 -6
- package/dist/chunk-J3YUBZWY.js +382 -0
- package/dist/{chunk-5JGRAMKL.js → chunk-JOZYP4GM.js} +8 -6
- package/dist/{chunk-OH3TOQTB.js → chunk-K4XHGFR5.js} +751 -15
- package/dist/{chunk-EYPA3EGJ.js → chunk-KTYTFRMB.js} +178 -14
- package/dist/chunk-LU7P4LHA.js +33 -0
- package/dist/chunk-ME6CCNFO.js +108 -0
- package/dist/chunk-MXKJU4JB.js +1100 -0
- package/dist/{chunk-RY3LY4J5.js → chunk-N22QMJKY.js} +21 -18
- package/dist/chunk-NMPKI6XL.js +3006 -0
- package/dist/chunk-NUGM5KR6.js +165 -0
- package/dist/{chunk-22NAGB7X.js → chunk-P43ETTHK.js} +5 -94
- package/dist/{chunk-NILBFAPG.js → chunk-PMDBGQSJ.js} +2 -2
- package/dist/chunk-PT7HYKEM.js +165 -0
- package/dist/chunk-RVG5JXAL.js +41 -0
- package/dist/{chunk-GEYXPTRF.js → chunk-RWSI4YD7.js} +2 -2
- package/dist/{chunk-4BPJXDWC.js → chunk-TANS5ZJS.js} +35 -19
- package/dist/{verifiers-NCBTHHN2.js → chunk-TB5666IT.js} +67 -324
- package/dist/{chunk-QM3F2GKX.js → chunk-TLQJPP24.js} +7927 -8088
- package/dist/{chunk-G7MUEIGA.js → chunk-TT36MB5S.js} +2 -1
- package/dist/chunk-TTHACPOM.js +961 -0
- package/dist/{chunk-6US73PDB.js → chunk-TYPGUK6W.js} +7 -7
- package/dist/{chunk-MFFY33HR.js → chunk-U6MBIEMB.js} +554 -209
- package/dist/chunk-VAWNZU7Z.js +242 -0
- package/dist/{chunk-IR4CFBFN.js → chunk-VCBR6CU7.js} +12 -12
- package/dist/{chunk-WHJYKASB.js → chunk-VHN4MY6O.js} +2 -2
- package/dist/{chunk-XYDYPRZI.js → chunk-VWZOAB7K.js} +10 -10
- package/dist/{chunk-ZRGEBJ4T.js → chunk-WLFILSD5.js} +48 -48
- package/dist/{chunk-K7T3E2SR.js → chunk-WNIJTQQK.js} +12 -11
- package/dist/{chunk-CYQKWTG3.js → chunk-WSB3FPX7.js} +68 -20
- package/dist/{chunk-KHSFENX2.js → chunk-WWCZ5F23.js} +116 -14
- package/dist/{chunk-XE2VEJHX.js → chunk-WXY7KU3G.js} +2 -2
- package/dist/{chunk-PPAMZ32Z.js → chunk-XK56QHLX.js} +6 -1
- package/dist/{chunk-KOHPCX4K.js → chunk-XWSF374K.js} +5 -5
- package/dist/{chunk-CJUB2JJ2.js → chunk-YS5VLNH5.js} +10 -10
- package/dist/{chunk-ZZMN5OM4.js → chunk-ZNLWCMVZ.js} +2 -2
- package/dist/{chunk-WHGPSPT5.js → chunk-ZVJ5BLO2.js} +2 -2
- package/dist/cli/index.js +33 -31
- package/dist/{clio-M2KGYUFZ.js → clio-QVTYJ57A.js} +10 -10
- package/dist/{code-nav-GQNL7XA6.js → code-nav-FGGFIE7L.js} +5 -5
- package/dist/codewiki/build-worker.js +4 -4
- package/dist/{components-5TTYYX6G.js → components-ZFA3SAER.js} +9 -9
- package/dist/{config-XUUYQIWO.js → config-LW5IJFQN.js} +65 -55
- package/dist/{configure-IHJ7YOMV.js → configure-7XIZCOU4.js} +29 -24
- package/dist/{context-75MIWW3U.js → context-L3WL3X7K.js} +54 -43
- package/dist/{context-ZQ7SIFJV.js → context-N52ZA626.js} +30 -14
- package/dist/{context-74JLXAWD.js → context-Y6Y7QPR6.js} +12 -12
- package/dist/{context-clear-GYKWNUML.js → context-clear-MBQRLSDQ.js} +54 -43
- package/dist/{context-index-SSR5ECNE.js → context-index-HVMFQHK3.js} +5 -5
- package/dist/{context-working-set-UX5KEP4J.js → context-working-set-GS6DSO7F.js} +18 -18
- package/dist/{dispatch-runner-GIJBHNFL.js → dispatch-runner-22ZCNOM3.js} +367 -79
- package/dist/{docs-6FZSCG5B.js → docs-7LQ23DLM.js} +9 -9
- package/dist/{doctor-SVJ5BZCW.js → doctor-M7YEDGAE.js} +27 -23
- package/dist/{eval-CG6LLBLD.js → eval-BEC2WHDA.js} +73 -20
- package/dist/{evidence-ZYFIEN42.js → evidence-REJUMSKM.js} +70 -59
- package/dist/{evolve-QGEXEMDW.js → evolve-PY5ZBA5K.js} +50 -39
- package/dist/{extensions-ADGNCJJD.js → extensions-HVKU65YU.js} +7 -7
- package/dist/{fleet-S5R4ZOQY.js → fleet-7WZEWRFA.js} +236 -377
- package/dist/fleet-commands-UVHWM76J.js +70 -0
- package/dist/fleet-graph-6ULH7PES.js +125 -0
- package/dist/fleet-new-RDVJLHHH.js +48 -0
- package/dist/{fleet-preflight-BHSNPBMH.js → fleet-preflight-J53T6CCE.js} +5 -5
- package/dist/fleet-validate-72PC4SLA.js +79 -0
- package/dist/{init-5DRU55YR.js → init-OG3TPGQG.js} +69 -57
- package/dist/library-CNTMPLRF.js +217 -0
- package/dist/{memory-7YKKR6UC.js → memory-6IS7F275.js} +52 -41
- package/dist/{models-ZPOLRU2C.js → models-ENRJDA5W.js} +37 -31
- package/dist/{monitor-US5F5YGZ.js → monitor-XLDVO7TN.js} +79 -42
- package/dist/{orchestrator-E2AL4T5N.js → orchestrator-6KSPYRHA.js} +4126 -762
- package/dist/{paths-E7KYAQWE.js → paths-DBXMZMDU.js} +6 -6
- package/dist/registry-LG64LTF4.js +11 -0
- package/dist/{reset-KZ652EK6.js → reset-RZ4ER727.js} +12 -12
- package/dist/{run-SRNBKDWD.js → run-Y2CNK5RU.js} +89 -76
- package/dist/{share-CGZE33UP.js → share-A55GYP6Z.js} +37 -13
- package/dist/{skills-S2X4DLY5.js → skills-ALC5J6AT.js} +29 -13
- package/dist/{skills-eval-W2GGIC4R.js → skills-eval-JPBEBYQU.js} +60 -48
- package/dist/support-MIETYA5E.js +38 -0
- package/dist/{targets-54SWINWB.js → targets-VGNXIR3S.js} +46 -36
- package/dist/{terminal-lease-SAIF2OGY.js → terminal-lease-WOBR64YA.js} +4 -4
- package/dist/{uninstall-BVLWXKBT.js → uninstall-ZJF5H5ZN.js} +9 -9
- package/dist/{upgrade-JKAR27XC.js → upgrade-FUSUAGHR.js} +31 -28
- package/dist/{usage-MSAWCLX4.js → usage-N4MKVHKD.js} +140 -68
- package/dist/verifiers-YAWOJ3H2.js +336 -0
- package/dist/{verify-X5HDROLA.js → verify-LTDHYBGY.js} +10 -9
- package/dist/{wiki-generate-GUSOQ6ZP.js → wiki-generate-6M7GHTBJ.js} +75 -62
- package/dist/worker/entry.js +67 -57
- package/docs/README.md +3 -2
- package/docs/acp.md +1 -1
- package/docs/alcf-provider.md +1 -1
- package/docs/architecture.md +2 -2
- package/docs/artifact-versions.md +11 -6
- package/docs/built-in-agents.md +26 -2
- package/docs/capacity-and-scheduling.md +1 -1
- package/docs/commands-and-modes.md +83 -3
- package/docs/configuration-and-targets.md +86 -4
- package/docs/context-engine.md +1 -1
- package/docs/development-pipeline.md +1 -1
- package/docs/dispatch-architecture-rationale.md +1 -1
- package/docs/documentation-coverage.md +3 -3
- package/docs/documentation-guide.md +3 -3
- package/docs/eval-runner.md +1 -1
- package/docs/evals-internal.md +1 -1
- package/docs/evidence-and-memory.md +74 -10
- package/docs/evolution.md +1 -1
- package/docs/exit-codes-and-output.md +4 -1
- package/docs/extensions-and-sharing.md +6 -2
- package/docs/fleet-demo-runbook.md +2 -2
- package/docs/fleet-dispatch.md +228 -16
- package/docs/git-commit-provenance.md +2 -2
- package/docs/glossary.md +22 -2
- package/docs/installation-and-lifecycle.md +2 -2
- package/docs/middleware-and-components.md +2 -1
- package/docs/model-catalog.md +1 -1
- package/docs/observability.md +56 -9
- package/docs/proactive-memory.md +1 -1
- package/docs/prompt-envelope-and-tools.md +4 -2
- package/docs/provider-adapter-cookbook.md +1 -1
- package/docs/release-cut-checklist.md +83 -65
- package/docs/resource-library.md +59 -0
- package/docs/safety-model.md +2 -2
- package/docs/scientific-validation.md +3 -3
- package/docs/session-lifecycle.md +37 -1
- package/docs/skills-marketplace.md +16 -3
- package/docs/tool-usage.md +14 -7
- package/docs/trace-store.md +1 -1
- package/docs/troubleshooting.md +1 -1
- package/docs/tui-design.md +1 -1
- package/docs/worker-dispatch-mechanics.md +3 -3
- package/package.json +1 -2
- package/src/cli/argv.ts +5 -0
- package/src/cli/configure.ts +107 -23
- package/src/cli/doctor.ts +5 -1
- package/src/cli/evidence.ts +30 -25
- package/src/cli/fleet-commands.ts +37 -0
- package/src/cli/fleet-graph.ts +102 -0
- package/src/cli/fleet-new.ts +36 -0
- package/src/cli/fleet-preflight.ts +111 -0
- package/src/cli/fleet-validate.ts +30 -0
- package/src/cli/fleet.ts +173 -335
- package/src/cli/index.ts +3 -1
- package/src/cli/library.ts +190 -0
- package/src/cli/share.ts +13 -1
- package/src/cli/shared.ts +1 -0
- package/src/cli/targets.ts +4 -1
- package/src/cli/usage.ts +111 -19
- package/src/cli/validate-model.ts +60 -5
- package/src/core/bus-events.ts +29 -0
- package/src/core/commit-attribution.ts +4 -4
- package/src/core/config.ts +130 -0
- package/src/core/defaults.ts +81 -0
- package/src/core/path-boundary.ts +100 -0
- package/src/domains/agents/builtins/architect.md +1 -0
- package/src/domains/agents/builtins/oracle.md +33 -0
- package/src/domains/agents/catalog.ts +13 -1
- package/src/domains/agents/extension.ts +2 -11
- package/src/domains/agents/fleet-contract.ts +304 -24
- package/src/domains/agents/index.ts +14 -0
- package/src/domains/agents/recipe.ts +7 -1
- package/src/domains/agents/registry.ts +73 -5
- package/src/domains/agents/result-contract.ts +360 -15
- package/src/domains/agents/write-boundary.ts +15 -50
- package/src/domains/config/classify.ts +4 -0
- package/src/domains/context/project-rules.ts +51 -1
- package/src/domains/dispatch/active-route-planner.ts +14 -0
- package/src/domains/dispatch/assignment-reconcile.ts +22 -5
- package/src/domains/dispatch/assignment-store.ts +151 -14
- package/src/domains/dispatch/backoff.ts +2 -1
- package/src/domains/dispatch/capability-match.ts +1 -0
- package/src/domains/dispatch/checkout-writer-lease.ts +175 -0
- package/src/domains/dispatch/contract.ts +48 -0
- package/src/domains/dispatch/delegation-plan.ts +164 -0
- package/src/domains/dispatch/execution-plan.ts +76 -5
- package/src/domains/dispatch/execution-role.ts +12 -2
- package/src/domains/dispatch/execution-scheduler.ts +183 -67
- package/src/domains/dispatch/extension.ts +412 -74
- package/src/domains/dispatch/fleet-gate.ts +14 -0
- package/src/domains/dispatch/fleet-plan.ts +63 -3
- package/src/domains/dispatch/fleet-run.ts +791 -0
- package/src/domains/dispatch/gate-role-prompts.ts +47 -0
- package/src/domains/dispatch/host-verification.ts +178 -0
- package/src/domains/dispatch/index.ts +41 -1
- package/src/domains/dispatch/intent-requirements.ts +40 -0
- package/src/domains/dispatch/intent.ts +235 -0
- package/src/domains/dispatch/path-scope.ts +370 -0
- package/src/domains/dispatch/receipt-integrity.ts +9 -4
- package/src/domains/dispatch/state.ts +36 -3
- package/src/domains/dispatch/types.ts +64 -12
- package/src/domains/dispatch/validation.ts +69 -6
- package/src/domains/dispatch/write-boundary-enforcer.ts +45 -0
- package/src/domains/dispatch/write-boundary.ts +201 -22
- package/src/domains/eval/metrics/evidence.ts +79 -2
- package/src/domains/eval/runners/clio-run.ts +12 -2
- package/src/domains/evidence/build.ts +69 -11
- package/src/domains/evidence/index.ts +21 -0
- package/src/domains/evidence/provenance.ts +46 -11
- package/src/domains/evidence/trust-projection.ts +274 -0
- package/src/domains/evidence/trust-status.ts +155 -18
- package/src/domains/evidence/types.ts +4 -0
- package/src/domains/extensions/discovery.ts +88 -1
- package/src/domains/extensions/resources.ts +20 -8
- package/src/domains/extensions/state.ts +6 -2
- package/src/domains/extensions/types.ts +4 -1
- package/src/domains/lifecycle/doctor.ts +140 -1
- package/src/domains/middleware/index.ts +15 -0
- package/src/domains/middleware/watchdog.ts +281 -0
- package/src/domains/observability/contract.ts +3 -1
- package/src/domains/observability/cost.ts +12 -1
- package/src/domains/observability/extension.ts +2 -2
- package/src/domains/observability/index.ts +10 -0
- package/src/domains/observability/out-of-turn-usage.ts +223 -0
- package/src/domains/prompts/contract.ts +3 -5
- package/src/domains/providers/extension.ts +30 -2
- package/src/domains/resources/common-loader.ts +3 -0
- package/src/domains/resources/index.ts +20 -0
- package/src/domains/resources/library.ts +326 -0
- package/src/domains/resources/prompts/loader.ts +119 -14
- package/src/domains/resources/skills/marketplace.ts +37 -12
- package/src/domains/safety/policy-engine.ts +5 -5
- package/src/domains/safety/run-effects.ts +64 -1
- package/src/domains/safety/scope.ts +7 -12
- package/src/domains/session/handoff.ts +629 -0
- package/src/domains/share/archive.ts +67 -2
- package/src/engine/acp/server.ts +4 -1
- package/src/engine/prompt-templates.ts +18 -1
- package/src/engine/worker-runtime.ts +6 -3
- package/src/entry/orchestrator.ts +37 -0
- package/src/interactive/bus-notices.ts +26 -0
- package/src/interactive/chat-loop.ts +235 -1
- package/src/interactive/chat-renderer.ts +22 -0
- package/src/interactive/cost-overlay.ts +31 -3
- package/src/interactive/council-dispatch.ts +30 -0
- package/src/interactive/council-grid.ts +213 -0
- package/src/interactive/council.ts +99 -0
- package/src/interactive/dispatch-board.ts +311 -17
- package/src/interactive/fleet-run-preview.ts +307 -0
- package/src/interactive/footer/notifications.ts +219 -0
- package/src/interactive/handoff-round.ts +56 -0
- package/src/interactive/interactive-application.ts +43 -1
- package/src/interactive/interactive-event-projection.ts +23 -1
- package/src/interactive/interactive-slash-runtime.ts +52 -2
- package/src/interactive/interactive-subscriptions.ts +14 -2
- package/src/interactive/oracle.ts +179 -0
- package/src/interactive/overlay-ask-user-lifecycle.ts +6 -0
- package/src/interactive/overlay-general-openers.ts +190 -1
- package/src/interactive/overlay-key-routing.ts +17 -1
- package/src/interactive/overlay-lifecycle.ts +41 -1
- package/src/interactive/overlay-permission-lifecycle.ts +10 -0
- package/src/interactive/overlay-resource-openers.ts +11 -3
- package/src/interactive/overlay-session-lifecycle.ts +234 -2
- package/src/interactive/overlays/fleet-run-approval.ts +208 -0
- package/src/interactive/overlays/handoff-review.ts +185 -0
- package/src/interactive/overlays/library-install-confirm.ts +151 -0
- package/src/interactive/overlays/list-overlay.ts +168 -2
- package/src/interactive/overlays/settings.ts +221 -30
- package/src/interactive/overlays/side-question.ts +139 -0
- package/src/interactive/overlays/skills-hub.ts +401 -15
- package/src/interactive/side-question.ts +171 -0
- package/src/interactive/slash-commands.ts +439 -7
- package/src/interactive/slash-spec.ts +19 -6
- package/src/interactive/theme/tokens.ts +30 -0
- package/src/interactive/turn-middleware.ts +15 -1
- package/src/interactive/view/artifacts.ts +42 -9
- package/src/interactive/view/view-overlay.ts +15 -3
- package/src/interactive/watchdog-run.ts +75 -0
- package/src/interactive/worker-receipts.ts +14 -2
- package/src/interactive/worker-share.ts +56 -1
- package/src/interactive/worker-stream.ts +15 -0
- package/src/tools/bootstrap.ts +3 -0
- package/src/tools/compete-worktrees.ts +13 -79
- package/src/tools/dispatch-admission.ts +251 -18
- package/src/tools/dispatch-arguments.ts +84 -1
- package/src/tools/dispatch-plan.ts +165 -6
- package/src/tools/dispatch-runner.ts +364 -23
- package/src/tools/dispatch-types.ts +20 -1
- package/src/tools/dispatch.ts +72 -2
- package/src/tools/monitor.ts +29 -0
- package/src/tools/profiles.ts +18 -4
- package/src/tools/task-worktree.ts +238 -0
- package/src/tools/verify/authoring.ts +61 -1
- package/src/tools/verify/scripts.ts +62 -0
- package/src/tools/worker-evidence.ts +21 -14
- package/src/worker/spec-contract.ts +3 -1
- package/dist/chunk-HC4CLZ2Y.js +0 -68
|
@@ -20,6 +20,8 @@ import type { ResultContract } from "../domains/agents/result-contract.js";
|
|
|
20
20
|
import { AGENT_AUTOMATION_AUTHORITIES, type AgentAutomationAuthority } from "../domains/agents/spec.js";
|
|
21
21
|
import type { DispatchRequest } from "../domains/dispatch/contract.js";
|
|
22
22
|
import { type ExecutionRole, isExecutionRole } from "../domains/dispatch/execution-role.js";
|
|
23
|
+
import { type DispatchIntent, isDispatchIntent } from "../domains/dispatch/intent.js";
|
|
24
|
+
import { resolveDispatchPathScope } from "../domains/dispatch/path-scope.js";
|
|
23
25
|
import {
|
|
24
26
|
type ApprovedAssignmentRoute,
|
|
25
27
|
cloneApprovedAssignmentRoute,
|
|
@@ -31,7 +33,15 @@ import { isRoutingIntent, type RoutingIntent } from "../domains/dispatch/routing
|
|
|
31
33
|
import type { DispatchFailoverCandidate, DispatchFailoverMode } from "../domains/dispatch/validation.js";
|
|
32
34
|
import { prepareDispatchArguments } from "./dispatch-arguments.js";
|
|
33
35
|
|
|
34
|
-
export type DispatchPlanTopology =
|
|
36
|
+
export type DispatchPlanTopology =
|
|
37
|
+
| "parallel"
|
|
38
|
+
| "sequential"
|
|
39
|
+
| "pipeline"
|
|
40
|
+
| "review"
|
|
41
|
+
| "compete"
|
|
42
|
+
| "council"
|
|
43
|
+
| "detached"
|
|
44
|
+
| "fleet";
|
|
35
45
|
|
|
36
46
|
export type DispatchPlanSource = null | {
|
|
37
47
|
kind: "scout-transition";
|
|
@@ -51,6 +61,9 @@ export interface DispatchPlanTaskView {
|
|
|
51
61
|
task: string;
|
|
52
62
|
/** Exact canonical bounded briefing approved for this task. */
|
|
53
63
|
briefing?: string;
|
|
64
|
+
worktree?: true;
|
|
65
|
+
apply?: "merge" | "preserve";
|
|
66
|
+
worktreeDestination?: string;
|
|
54
67
|
model?: string;
|
|
55
68
|
node?: string;
|
|
56
69
|
/** Effective transport identity; host is authenticated for SSH placement. */
|
|
@@ -59,7 +72,8 @@ export interface DispatchPlanTaskView {
|
|
|
59
72
|
/** Effective configured target id used as the execution pin. */
|
|
60
73
|
target?: string;
|
|
61
74
|
/** Coordinator role when the topology expands one user task into several runs. */
|
|
62
|
-
role?: "task" | "builder" | "reviewer" | "candidate" | "judge";
|
|
75
|
+
role?: "task" | "builder" | "reviewer" | "candidate" | "judge" | "member" | "synthesis";
|
|
76
|
+
council?: { label: string; color?: string; round: number; rounds: number; synthesis: "none" | "judge" | "vote" };
|
|
63
77
|
/** One-based source task or gate cycle/candidate number. */
|
|
64
78
|
position?: number;
|
|
65
79
|
/** Normalized advisory posture and hard bounds sealed into the plan. */
|
|
@@ -79,6 +93,8 @@ export interface DispatchPlanTaskView {
|
|
|
79
93
|
authorityGrant: DispatchPlanAuthorityGrant;
|
|
80
94
|
agentDecision: RouteDecisionV1 | null;
|
|
81
95
|
wave: number | null;
|
|
96
|
+
intent?: DispatchIntent;
|
|
97
|
+
resolvedVerification?: NonNullable<DispatchRequest["resolvedVerification"]>;
|
|
82
98
|
}
|
|
83
99
|
|
|
84
100
|
export interface DispatchPlanView {
|
|
@@ -112,7 +128,20 @@ export interface ResolvedDispatchPlanArtifact {
|
|
|
112
128
|
Required<Pick<DispatchPlanTaskView, "agent" | "task" | "model" | "node" | "target">> &
|
|
113
129
|
Required<Pick<DispatchPlanTaskView, "nodeKind" | "failover">> &
|
|
114
130
|
Required<Pick<DispatchPlanTaskView, "routingIntent">> &
|
|
115
|
-
Pick<
|
|
131
|
+
Pick<
|
|
132
|
+
DispatchPlanTaskView,
|
|
133
|
+
| "briefing"
|
|
134
|
+
| "worktree"
|
|
135
|
+
| "apply"
|
|
136
|
+
| "worktreeDestination"
|
|
137
|
+
| "nodeHost"
|
|
138
|
+
| "role"
|
|
139
|
+
| "council"
|
|
140
|
+
| "position"
|
|
141
|
+
| "allowedCandidates"
|
|
142
|
+
| "intent"
|
|
143
|
+
| "resolvedVerification"
|
|
144
|
+
> &
|
|
116
145
|
Required<
|
|
117
146
|
Pick<
|
|
118
147
|
DispatchPlanTaskView,
|
|
@@ -136,7 +165,7 @@ export interface ResolvedDispatchPlanArtifact {
|
|
|
136
165
|
export function withResolvedPlanTaskPin(
|
|
137
166
|
request: DispatchRequest,
|
|
138
167
|
task: ResolvedDispatchPlanArtifact["tasks"][number] | undefined,
|
|
139
|
-
options: { pinTask?: boolean } = {},
|
|
168
|
+
options: { pinTask?: boolean; pinBriefing?: boolean } = {},
|
|
140
169
|
): DispatchRequest {
|
|
141
170
|
if (task === undefined) return request;
|
|
142
171
|
const {
|
|
@@ -170,7 +199,24 @@ export function withResolvedPlanTaskPin(
|
|
|
170
199
|
? {}
|
|
171
200
|
: { allowedCandidates: task.allowedCandidates.map((candidate) => ({ ...candidate })) }),
|
|
172
201
|
task: options.pinTask === false ? request.task : task.task,
|
|
173
|
-
...(
|
|
202
|
+
...(options.pinBriefing === false
|
|
203
|
+
? request.briefing !== undefined
|
|
204
|
+
? { briefing: request.briefing }
|
|
205
|
+
: {}
|
|
206
|
+
: task.briefing !== undefined
|
|
207
|
+
? { briefing: task.briefing }
|
|
208
|
+
: {}),
|
|
209
|
+
...(task.worktree === true
|
|
210
|
+
? {
|
|
211
|
+
worktree: true as const,
|
|
212
|
+
apply: task.apply ?? "merge",
|
|
213
|
+
...(task.worktreeDestination === undefined ? {} : { taskWorktreeDestination: task.worktreeDestination }),
|
|
214
|
+
}
|
|
215
|
+
: {}),
|
|
216
|
+
...(task.intent !== undefined ? { intent: structuredClone(task.intent) } : {}),
|
|
217
|
+
...(task.resolvedVerification !== undefined
|
|
218
|
+
? { resolvedVerification: task.resolvedVerification.map((check) => ({ ...check, argv: [...check.argv] })) }
|
|
219
|
+
: {}),
|
|
174
220
|
target: task.target,
|
|
175
221
|
model: task.model,
|
|
176
222
|
node: task.node,
|
|
@@ -201,6 +247,33 @@ function safeField(value: string): string {
|
|
|
201
247
|
return result;
|
|
202
248
|
}
|
|
203
249
|
|
|
250
|
+
function renderLegacyPathScope(task: DispatchPlanTaskView): string[] {
|
|
251
|
+
if (task.intent !== undefined) return [];
|
|
252
|
+
const scope = resolveDispatchPathScope({
|
|
253
|
+
agentId: task.agent,
|
|
254
|
+
executionRole: task.executionRole,
|
|
255
|
+
task: task.task,
|
|
256
|
+
...(task.briefing !== undefined ? { briefing: task.briefing } : {}),
|
|
257
|
+
});
|
|
258
|
+
const lines = [" scope mode=legacy-inferred"];
|
|
259
|
+
for (const [policy, entries] of [
|
|
260
|
+
["working_context", scope.provenance.workingContextPaths],
|
|
261
|
+
["write_boundary", scope.provenance.writeBoundaries],
|
|
262
|
+
] as const) {
|
|
263
|
+
for (const entry of entries) {
|
|
264
|
+
for (const evidence of entry.evidence) {
|
|
265
|
+
lines.push(
|
|
266
|
+
` scope ${policy} path=${JSON.stringify(safeField(entry.path))} provenance=${evidence.provenance} source=${evidence.source} confidence=${evidence.confidence} reason=${evidence.reason}`,
|
|
267
|
+
);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
if (scope.provenance.workingContextPaths.length === 0 && scope.provenance.writeBoundaries.length === 0) {
|
|
272
|
+
lines.push(" scope policy_paths=none");
|
|
273
|
+
}
|
|
274
|
+
return lines;
|
|
275
|
+
}
|
|
276
|
+
|
|
204
277
|
function taskViews(args: Record<string, unknown>): DispatchPlanTaskView[] {
|
|
205
278
|
const tasks = Array.isArray(args.tasks) ? args.tasks : [];
|
|
206
279
|
const sharedAgent = str(args.agent) ?? "coder";
|
|
@@ -224,6 +297,12 @@ function taskViews(args: Record<string, unknown>): DispatchPlanTaskView[] {
|
|
|
224
297
|
};
|
|
225
298
|
const briefing = "briefing" in record ? str(record.briefing) : str(args.briefing);
|
|
226
299
|
if (briefing !== undefined) view.briefing = briefing;
|
|
300
|
+
const worktree = "worktree" in record ? record.worktree : args.worktree;
|
|
301
|
+
if (worktree === true) {
|
|
302
|
+
view.worktree = true;
|
|
303
|
+
const apply = "apply" in record ? record.apply : args.apply;
|
|
304
|
+
view.apply = apply === "preserve" ? "preserve" : "merge";
|
|
305
|
+
}
|
|
227
306
|
const model = str(record.model) ?? sharedModel;
|
|
228
307
|
if (model !== undefined) view.model = model;
|
|
229
308
|
const node = str(record.node) ?? sharedNode;
|
|
@@ -266,6 +345,7 @@ function canonicalCandidates(value: unknown): DispatchFailoverCandidate[] | null
|
|
|
266
345
|
function topologyOf(args: Record<string, unknown>): DispatchPlanTopology {
|
|
267
346
|
if (isRecord(args.apply_winner)) return "compete";
|
|
268
347
|
if (args.mode === "compete") return "compete";
|
|
348
|
+
if (args.mode === "council") return "council";
|
|
269
349
|
if (args.review === true || isRecord(args.review)) return "review";
|
|
270
350
|
if (args.detach === true) return "detached";
|
|
271
351
|
if (args.mode === "sequential") return "sequential";
|
|
@@ -315,6 +395,15 @@ function renderPlanText(
|
|
|
315
395
|
lines.push(
|
|
316
396
|
` ${index + 1}.${role} agent=${safeField(task.agent)}${target}${model}${node}${failover}${routingText} task=${JSON.stringify(safeField(task.task))}`,
|
|
317
397
|
);
|
|
398
|
+
if (task.council !== undefined) {
|
|
399
|
+
lines.push(
|
|
400
|
+
` council label=${safeField(task.council.label)} color=${safeField(task.council.color ?? "none")} round=${task.council.round} rounds=${task.council.rounds} synthesis=${task.council.synthesis}`,
|
|
401
|
+
);
|
|
402
|
+
}
|
|
403
|
+
if (task.worktree === true)
|
|
404
|
+
lines.push(
|
|
405
|
+
` worktree=true apply=${task.apply ?? "merge"} destination=${safeField(task.worktreeDestination ?? "unresolved")}`,
|
|
406
|
+
);
|
|
318
407
|
if (task.allowedCandidates !== undefined) {
|
|
319
408
|
for (const [candidateIndex, candidate] of task.allowedCandidates.entries()) {
|
|
320
409
|
lines.push(
|
|
@@ -352,6 +441,16 @@ function renderPlanText(
|
|
|
352
441
|
` briefing_bytes=${Buffer.byteLength(task.briefing, "utf8")} briefing_sha256=${createHash("sha256").update(task.briefing, "utf8").digest("hex")} briefing_preview=${JSON.stringify(safeField(task.briefing))}`,
|
|
353
442
|
);
|
|
354
443
|
}
|
|
444
|
+
if (task.intent !== undefined) {
|
|
445
|
+
const serialized = JSON.stringify(task.intent);
|
|
446
|
+
lines.push(` intent_sha256=${createHash("sha256").update(serialized, "utf8").digest("hex")}`);
|
|
447
|
+
}
|
|
448
|
+
lines.push(...renderLegacyPathScope(task));
|
|
449
|
+
for (const check of task.resolvedVerification ?? []) {
|
|
450
|
+
lines.push(
|
|
451
|
+
` verification check=${safeField(check.check)} argv=${JSON.stringify(check.argv)} cwd=${JSON.stringify(check.cwd)} timeout_ms=${check.timeoutMs}`,
|
|
452
|
+
);
|
|
453
|
+
}
|
|
355
454
|
}
|
|
356
455
|
return lines.join("\n");
|
|
357
456
|
}
|
|
@@ -362,12 +461,16 @@ function isResolvedTask(value: unknown): value is ResolvedDispatchPlanArtifact["
|
|
|
362
461
|
"agent",
|
|
363
462
|
"task",
|
|
364
463
|
"briefing",
|
|
464
|
+
"worktree",
|
|
465
|
+
"apply",
|
|
466
|
+
"worktreeDestination",
|
|
365
467
|
"model",
|
|
366
468
|
"node",
|
|
367
469
|
"nodeKind",
|
|
368
470
|
"nodeHost",
|
|
369
471
|
"target",
|
|
370
472
|
"role",
|
|
473
|
+
"council",
|
|
371
474
|
"position",
|
|
372
475
|
"routingIntent",
|
|
373
476
|
"failover",
|
|
@@ -381,6 +484,8 @@ function isResolvedTask(value: unknown): value is ResolvedDispatchPlanArtifact["
|
|
|
381
484
|
"authorityGrant",
|
|
382
485
|
"agentDecision",
|
|
383
486
|
"wave",
|
|
487
|
+
"intent",
|
|
488
|
+
"resolvedVerification",
|
|
384
489
|
]);
|
|
385
490
|
if (Object.keys(value).some((key) => !allowedKeys.has(key))) return false;
|
|
386
491
|
for (const key of [
|
|
@@ -409,17 +514,37 @@ function isResolvedTask(value: unknown): value is ResolvedDispatchPlanArtifact["
|
|
|
409
514
|
value.role !== "builder" &&
|
|
410
515
|
value.role !== "reviewer" &&
|
|
411
516
|
value.role !== "candidate" &&
|
|
412
|
-
value.role !== "judge"
|
|
517
|
+
value.role !== "judge" &&
|
|
518
|
+
value.role !== "member" &&
|
|
519
|
+
value.role !== "synthesis"
|
|
413
520
|
) {
|
|
414
521
|
return false;
|
|
415
522
|
}
|
|
416
523
|
if (value.position !== undefined && (!Number.isInteger(value.position) || Number(value.position) < 1)) return false;
|
|
524
|
+
if (value.council !== undefined) {
|
|
525
|
+
if (
|
|
526
|
+
!isRecord(value.council) ||
|
|
527
|
+
typeof value.council.label !== "string" ||
|
|
528
|
+
value.council.label.length === 0 ||
|
|
529
|
+
(value.council.color !== undefined && typeof value.council.color !== "string") ||
|
|
530
|
+
!Number.isInteger(value.council.round) ||
|
|
531
|
+
Number(value.council.round) < 1 ||
|
|
532
|
+
!Number.isInteger(value.council.rounds) ||
|
|
533
|
+
Number(value.council.rounds) < 1 ||
|
|
534
|
+
(value.council.synthesis !== "none" && value.council.synthesis !== "judge" && value.council.synthesis !== "vote")
|
|
535
|
+
)
|
|
536
|
+
return false;
|
|
537
|
+
}
|
|
417
538
|
if (value.nodeKind !== "local" && value.nodeKind !== "ssh") return false;
|
|
418
539
|
if (value.nodeKind === "ssh" && (typeof value.nodeHost !== "string" || value.nodeHost.trim().length === 0))
|
|
419
540
|
return false;
|
|
420
541
|
if (value.nodeKind === "local" && value.nodeHost !== undefined) return false;
|
|
421
542
|
if (value.briefing !== undefined && (typeof value.briefing !== "string" || value.briefing.trim().length === 0))
|
|
422
543
|
return false;
|
|
544
|
+
if (value.worktree !== undefined && value.worktree !== true) return false;
|
|
545
|
+
if (value.apply !== undefined && value.apply !== "merge" && value.apply !== "preserve") return false;
|
|
546
|
+
if (value.apply !== undefined && value.worktree !== true) return false;
|
|
547
|
+
if (value.worktreeDestination !== undefined && typeof value.worktreeDestination !== "string") return false;
|
|
423
548
|
if (failoverModeOf(value.failover) === undefined) return false;
|
|
424
549
|
if (!isRoutingIntent(value.routingIntent)) return false;
|
|
425
550
|
if (value.routeApproval !== null && !isApprovedAssignmentRoute(value.routeApproval)) return false;
|
|
@@ -441,6 +566,21 @@ function isResolvedTask(value: unknown): value is ResolvedDispatchPlanArtifact["
|
|
|
441
566
|
return false;
|
|
442
567
|
if (value.authorityGrant !== null && !isAuthorityGrant(value.authorityGrant)) return false;
|
|
443
568
|
if (value.agentDecision !== null && !isAgentDecision(value.agentDecision)) return false;
|
|
569
|
+
if (value.intent !== undefined && !isDispatchIntent(value.intent)) return false;
|
|
570
|
+
if (
|
|
571
|
+
value.resolvedVerification !== undefined &&
|
|
572
|
+
(!Array.isArray(value.resolvedVerification) ||
|
|
573
|
+
!value.resolvedVerification.every(
|
|
574
|
+
(check) =>
|
|
575
|
+
isRecord(check) &&
|
|
576
|
+
typeof check.check === "string" &&
|
|
577
|
+
Array.isArray(check.argv) &&
|
|
578
|
+
check.argv.every((arg) => typeof arg === "string") &&
|
|
579
|
+
typeof check.cwd === "string" &&
|
|
580
|
+
typeof check.timeoutMs === "number",
|
|
581
|
+
))
|
|
582
|
+
)
|
|
583
|
+
return false;
|
|
444
584
|
if (value.failover === "approved") {
|
|
445
585
|
if (canonicalCandidates(value.allowedCandidates) === null) return false;
|
|
446
586
|
} else if (value.allowedCandidates !== undefined) {
|
|
@@ -455,11 +595,16 @@ const RESULT_CONTRACT_KINDS = new Set<ResultContract["kind"]>([
|
|
|
455
595
|
"architect-plan",
|
|
456
596
|
"scout-report",
|
|
457
597
|
"verifier-report",
|
|
598
|
+
"council-report",
|
|
458
599
|
"debugger-report",
|
|
459
600
|
"research-report",
|
|
460
601
|
"mutation-report",
|
|
461
602
|
"provenance-report",
|
|
603
|
+
"oracle-report",
|
|
462
604
|
"external-delegation",
|
|
605
|
+
"artifact-report",
|
|
606
|
+
"context-handbook",
|
|
607
|
+
"delegation-plan",
|
|
463
608
|
]);
|
|
464
609
|
|
|
465
610
|
function isAuthorityGrant(value: unknown): value is Exclude<DispatchPlanAuthorityGrant, null> {
|
|
@@ -572,6 +717,7 @@ export function resolvedDispatchPlanFromArgs(args: Record<string, unknown>): Res
|
|
|
572
717
|
value.topology !== "pipeline" &&
|
|
573
718
|
value.topology !== "review" &&
|
|
574
719
|
value.topology !== "compete" &&
|
|
720
|
+
value.topology !== "council" &&
|
|
575
721
|
value.topology !== "detached" &&
|
|
576
722
|
value.topology !== "fleet"
|
|
577
723
|
) {
|
|
@@ -632,6 +778,13 @@ export function resolvedDispatchPlanFromArgs(args: Record<string, unknown>): Res
|
|
|
632
778
|
agent: task.agent.trim(),
|
|
633
779
|
task: task.task.trim(),
|
|
634
780
|
...(task.briefing !== undefined ? { briefing: task.briefing.trim() } : {}),
|
|
781
|
+
...(task.worktree === true
|
|
782
|
+
? {
|
|
783
|
+
worktree: true as const,
|
|
784
|
+
apply: task.apply ?? "merge",
|
|
785
|
+
...(task.worktreeDestination === undefined ? {} : { worktreeDestination: task.worktreeDestination }),
|
|
786
|
+
}
|
|
787
|
+
: {}),
|
|
635
788
|
model: task.model.trim(),
|
|
636
789
|
node: task.node.trim(),
|
|
637
790
|
nodeKind: task.nodeKind,
|
|
@@ -652,7 +805,12 @@ export function resolvedDispatchPlanFromArgs(args: Record<string, unknown>): Res
|
|
|
652
805
|
: {}),
|
|
653
806
|
...(task.nodeHost !== undefined ? { nodeHost: task.nodeHost.trim() } : {}),
|
|
654
807
|
...(task.role !== undefined ? { role: task.role } : {}),
|
|
808
|
+
...(task.council !== undefined ? { council: { ...task.council } } : {}),
|
|
655
809
|
...(task.position !== undefined ? { position: task.position } : {}),
|
|
810
|
+
...(task.intent !== undefined ? { intent: structuredClone(task.intent) } : {}),
|
|
811
|
+
...(task.resolvedVerification !== undefined
|
|
812
|
+
? { resolvedVerification: task.resolvedVerification.map((check) => ({ ...check, argv: [...check.argv] })) }
|
|
813
|
+
: {}),
|
|
656
814
|
})),
|
|
657
815
|
costCeilingUsd: value.costCeilingUsd,
|
|
658
816
|
deadlineMs: value.deadlineMs as number | null,
|
|
@@ -716,6 +874,7 @@ export function describeDispatchPlan(rawArgs: Record<string, unknown> | undefine
|
|
|
716
874
|
(tasks.length > 1 ||
|
|
717
875
|
source !== null ||
|
|
718
876
|
topology === "compete" ||
|
|
877
|
+
topology === "council" ||
|
|
719
878
|
remote ||
|
|
720
879
|
tasks.some((task) => task.failover === "approved") ||
|
|
721
880
|
confirmation !== undefined ||
|