@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
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
MAX_TIMER_DELAY_MS
|
|
4
|
+
} from "./chunk-FQ4SKYE4.js";
|
|
2
5
|
import {
|
|
3
6
|
ACTIVE_AGENT_AUTOMATION_ROLES,
|
|
4
7
|
ACTIVE_ROUTING_POSTURES,
|
|
5
8
|
ACTIVE_ROUTING_ROLES,
|
|
9
|
+
COUNCIL_MEMBER_LABEL_PATTERN,
|
|
6
10
|
DEFAULT_SETTINGS,
|
|
11
|
+
THEME_NAMED_COLORS,
|
|
7
12
|
THINKING_LEVELS
|
|
8
|
-
} from "./chunk-
|
|
9
|
-
import {
|
|
10
|
-
MAX_TIMER_DELAY_MS
|
|
11
|
-
} from "./chunk-FQ4SKYE4.js";
|
|
13
|
+
} from "./chunk-4DGYLA73.js";
|
|
12
14
|
import {
|
|
13
15
|
withStateFileLockSync
|
|
14
16
|
} from "./chunk-IKCO5N3L.js";
|
|
@@ -731,6 +733,30 @@ function validateMemorySettings(issues, value) {
|
|
|
731
733
|
}
|
|
732
734
|
return out;
|
|
733
735
|
}
|
|
736
|
+
function validateWatchdogSettings(issues, value) {
|
|
737
|
+
const out = cloneValue(DEFAULT_SETTINGS.watchdog);
|
|
738
|
+
if (!isPlainObject(value)) {
|
|
739
|
+
issues.add("watchdog", `expected a map, got ${describe(value)}`);
|
|
740
|
+
return out;
|
|
741
|
+
}
|
|
742
|
+
issues.unknownKeys("watchdog", value, ["enabled", "target", "cadenceToolCalls"]);
|
|
743
|
+
if ("enabled" in value) {
|
|
744
|
+
const enabled = expectBoolean(issues, "watchdog.enabled", value.enabled);
|
|
745
|
+
if (enabled !== void 0) out.enabled = enabled;
|
|
746
|
+
}
|
|
747
|
+
if ("target" in value && value.target !== null) {
|
|
748
|
+
const target = expectString(issues, "watchdog.target", value.target);
|
|
749
|
+
if (target !== void 0) {
|
|
750
|
+
if (target.trim().length === 0) issues.add("watchdog.target", "expected a non-empty target id");
|
|
751
|
+
else out.target = target.trim();
|
|
752
|
+
}
|
|
753
|
+
}
|
|
754
|
+
if ("cadenceToolCalls" in value && value.cadenceToolCalls !== null) {
|
|
755
|
+
const cadence = expectInteger(issues, "watchdog.cadenceToolCalls", value.cadenceToolCalls, { min: 1 });
|
|
756
|
+
if (cadence !== void 0) out.cadenceToolCalls = cadence;
|
|
757
|
+
}
|
|
758
|
+
return out;
|
|
759
|
+
}
|
|
734
760
|
function validateKeybindings(issues, value) {
|
|
735
761
|
if (!isPlainObject(value)) {
|
|
736
762
|
issues.add("keybindings", `expected a map, got ${describe(value)}`);
|
|
@@ -769,6 +795,7 @@ var TOP_LEVEL_KEYS = [
|
|
|
769
795
|
"orchestrator",
|
|
770
796
|
"background",
|
|
771
797
|
"memory",
|
|
798
|
+
"watchdog",
|
|
772
799
|
"workers",
|
|
773
800
|
"fleet",
|
|
774
801
|
"routing",
|
|
@@ -779,6 +806,7 @@ var TOP_LEVEL_KEYS = [
|
|
|
779
806
|
"theme",
|
|
780
807
|
"terminal",
|
|
781
808
|
"skills",
|
|
809
|
+
"library",
|
|
782
810
|
"attribution",
|
|
783
811
|
"delegation",
|
|
784
812
|
"keybindings",
|
|
@@ -825,6 +853,25 @@ function validateSettings(raw) {
|
|
|
825
853
|
const v = expectStringArray(issues, "runtimePlugins", raw.runtimePlugins);
|
|
826
854
|
if (v !== void 0) settings.runtimePlugins = v;
|
|
827
855
|
}
|
|
856
|
+
if ("library" in raw) {
|
|
857
|
+
if (!isPlainObject(raw.library)) {
|
|
858
|
+
issues.add("library", `expected a map, got ${describe(raw.library)}`);
|
|
859
|
+
} else {
|
|
860
|
+
issues.unknownKeys("library", raw.library, ["catalog", "remote", "confirmedRemote", "sync"]);
|
|
861
|
+
for (const key of ["catalog", "remote", "confirmedRemote"]) {
|
|
862
|
+
const value = raw.library[key];
|
|
863
|
+
if (value === void 0) continue;
|
|
864
|
+
if (value !== null && typeof value !== "string")
|
|
865
|
+
issues.add(`library.${key}`, `expected a string or null, got ${describe(value)}`);
|
|
866
|
+
else settings.library[key] = value;
|
|
867
|
+
}
|
|
868
|
+
if (raw.library.sync !== void 0) {
|
|
869
|
+
if (typeof raw.library.sync !== "boolean")
|
|
870
|
+
issues.add("library.sync", `expected a boolean, got ${describe(raw.library.sync)}`);
|
|
871
|
+
else settings.library.sync = raw.library.sync;
|
|
872
|
+
}
|
|
873
|
+
}
|
|
874
|
+
}
|
|
828
875
|
if ("orchestrator" in raw) {
|
|
829
876
|
settings.orchestrator = validateWorkerTarget(
|
|
830
877
|
issues,
|
|
@@ -844,6 +891,7 @@ function validateSettings(raw) {
|
|
|
844
891
|
);
|
|
845
892
|
}
|
|
846
893
|
if ("memory" in raw) settings.memory = validateMemorySettings(issues, raw.memory);
|
|
894
|
+
if ("watchdog" in raw) settings.watchdog = validateWatchdogSettings(issues, raw.watchdog);
|
|
847
895
|
if ("fleet" in raw) {
|
|
848
896
|
settings.fleet = validateFleet(issues, raw.fleet);
|
|
849
897
|
}
|
|
@@ -935,6 +983,7 @@ function validateSettings(raw) {
|
|
|
935
983
|
issues.unknownKeys("workers", raw.workers, [
|
|
936
984
|
"default",
|
|
937
985
|
"profiles",
|
|
986
|
+
"rosters",
|
|
938
987
|
"agentBindings",
|
|
939
988
|
"maxRetries",
|
|
940
989
|
"onPermission",
|
|
@@ -976,6 +1025,70 @@ function validateSettings(raw) {
|
|
|
976
1025
|
settings.workers.profiles = profiles;
|
|
977
1026
|
}
|
|
978
1027
|
}
|
|
1028
|
+
if ("rosters" in raw.workers) {
|
|
1029
|
+
if (!isPlainObject(raw.workers.rosters)) {
|
|
1030
|
+
issues.add("workers.rosters", `expected a map, got ${describe(raw.workers.rosters)}`);
|
|
1031
|
+
} else {
|
|
1032
|
+
const rosters = {};
|
|
1033
|
+
for (const [rawName, rawRoster] of Object.entries(raw.workers.rosters)) {
|
|
1034
|
+
const name = rawName.trim();
|
|
1035
|
+
const path = `workers.rosters.${name}`;
|
|
1036
|
+
if (!name) {
|
|
1037
|
+
issues.add("workers.rosters", "empty roster name");
|
|
1038
|
+
continue;
|
|
1039
|
+
}
|
|
1040
|
+
if (!isPlainObject(rawRoster)) {
|
|
1041
|
+
issues.add(path, `expected a map, got ${describe(rawRoster)}`);
|
|
1042
|
+
continue;
|
|
1043
|
+
}
|
|
1044
|
+
issues.unknownKeys(path, rawRoster, ["members"]);
|
|
1045
|
+
if (!Array.isArray(rawRoster.members)) {
|
|
1046
|
+
issues.add(`${path}.members`, "expected a list");
|
|
1047
|
+
continue;
|
|
1048
|
+
}
|
|
1049
|
+
if (rawRoster.members.length < 2 || rawRoster.members.length > 5) {
|
|
1050
|
+
issues.add(`${path}.members`, "expected 2 to 5 members");
|
|
1051
|
+
}
|
|
1052
|
+
const members = [];
|
|
1053
|
+
const labels = /* @__PURE__ */ new Set();
|
|
1054
|
+
for (const [index, rawMember] of rawRoster.members.entries()) {
|
|
1055
|
+
const memberPath = `${path}.members[${index}]`;
|
|
1056
|
+
if (!isPlainObject(rawMember)) {
|
|
1057
|
+
issues.add(memberPath, `expected a map, got ${describe(rawMember)}`);
|
|
1058
|
+
continue;
|
|
1059
|
+
}
|
|
1060
|
+
issues.unknownKeys(memberPath, rawMember, ["label", "target", "model", "thinking", "color"]);
|
|
1061
|
+
const label = expectString(issues, `${memberPath}.label`, rawMember.label);
|
|
1062
|
+
const target = expectString(issues, `${memberPath}.target`, rawMember.target);
|
|
1063
|
+
if (label !== void 0 && !COUNCIL_MEMBER_LABEL_PATTERN.test(label)) {
|
|
1064
|
+
issues.add(`${memberPath}.label`, "expected [a-z][a-z0-9_-]{0,31}");
|
|
1065
|
+
}
|
|
1066
|
+
if (label !== void 0 && labels.has(label)) issues.add(`${memberPath}.label`, "duplicate label");
|
|
1067
|
+
if (label !== void 0) labels.add(label);
|
|
1068
|
+
if (target !== void 0 && !settings.targets.some((entry) => entry.id === target)) {
|
|
1069
|
+
issues.add(`${memberPath}.target`, `unknown target '${target}'`);
|
|
1070
|
+
}
|
|
1071
|
+
const model = rawMember.model === void 0 ? void 0 : expectString(issues, `${memberPath}.model`, rawMember.model);
|
|
1072
|
+
const thinking = rawMember.thinking === void 0 ? void 0 : expectEnum(issues, `${memberPath}.thinking`, rawMember.thinking, THINKING_LEVELS);
|
|
1073
|
+
const color = rawMember.color === void 0 ? void 0 : expectString(issues, `${memberPath}.color`, rawMember.color);
|
|
1074
|
+
if (color !== void 0 && !THEME_NAMED_COLORS.includes(color) && !/^#[0-9a-fA-F]{6}$/u.test(color)) {
|
|
1075
|
+
issues.add(`${memberPath}.color`, "expected a theme named color or 6-digit hex color");
|
|
1076
|
+
}
|
|
1077
|
+
if (label === void 0 || target === void 0) continue;
|
|
1078
|
+
members.push({
|
|
1079
|
+
label,
|
|
1080
|
+
target,
|
|
1081
|
+
...model ? { model } : {},
|
|
1082
|
+
...thinking ? { thinking } : {},
|
|
1083
|
+
...color ? { color } : {}
|
|
1084
|
+
});
|
|
1085
|
+
}
|
|
1086
|
+
if (rawRoster.members.length >= 2 && rawRoster.members.length <= 5 && members.length === rawRoster.members.length)
|
|
1087
|
+
rosters[name] = { members };
|
|
1088
|
+
}
|
|
1089
|
+
settings.workers.rosters = rosters;
|
|
1090
|
+
}
|
|
1091
|
+
}
|
|
979
1092
|
if ("agentBindings" in raw.workers) {
|
|
980
1093
|
if (!isPlainObject(raw.workers.agentBindings)) {
|
|
981
1094
|
issues.add("workers.agentBindings", `expected a map, got ${describe(raw.workers.agentBindings)}`);
|
|
@@ -1100,7 +1213,8 @@ function validateSettings(raw) {
|
|
|
1100
1213
|
"outputVerbosity",
|
|
1101
1214
|
"tuiMode",
|
|
1102
1215
|
"fullscreenScrollbar",
|
|
1103
|
-
"smoothStreaming"
|
|
1216
|
+
"smoothStreaming",
|
|
1217
|
+
"notify"
|
|
1104
1218
|
]);
|
|
1105
1219
|
if ("showTerminalProgress" in raw.terminal) {
|
|
1106
1220
|
const v = expectBoolean(issues, "terminal.showTerminalProgress", raw.terminal.showTerminalProgress);
|
|
@@ -1126,6 +1240,10 @@ function validateSettings(raw) {
|
|
|
1126
1240
|
if (v === "off" || v === "auto" || v === "on") settings.terminal.smoothStreaming = v;
|
|
1127
1241
|
else if (v !== void 0) issues.add("terminal.smoothStreaming", "expected off, auto, or on");
|
|
1128
1242
|
}
|
|
1243
|
+
if ("notify" in raw.terminal) {
|
|
1244
|
+
const v = expectBoolean(issues, "terminal.notify", raw.terminal.notify);
|
|
1245
|
+
if (v !== void 0) settings.terminal.notify = v;
|
|
1246
|
+
}
|
|
1129
1247
|
}
|
|
1130
1248
|
}
|
|
1131
1249
|
if ("skills" in raw) {
|
|
@@ -1443,4 +1561,4 @@ export {
|
|
|
1443
1561
|
removeFleetProfileFromSettings,
|
|
1444
1562
|
bindAgentProfileInSettings
|
|
1445
1563
|
};
|
|
1446
|
-
//# sourceMappingURL=chunk-
|
|
1564
|
+
//# sourceMappingURL=chunk-IJ7RPIYJ.js.map
|
|
@@ -0,0 +1,382 @@
|
|
|
1
|
+
import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
fleetLoopCheckStepId,
|
|
4
|
+
fleetLoopRepairStepId,
|
|
5
|
+
fleetStepWriteBoundary
|
|
6
|
+
} from "./chunk-E77JEWSD.js";
|
|
7
|
+
import {
|
|
8
|
+
init_esm_shims
|
|
9
|
+
} from "./chunk-3R73A4XB.js";
|
|
10
|
+
|
|
11
|
+
// src/domains/dispatch/execution-plan.ts
|
|
12
|
+
init_esm_shims();
|
|
13
|
+
import { createHash } from "node:crypto";
|
|
14
|
+
function requireAgentSteps(steps) {
|
|
15
|
+
return steps.map((step) => {
|
|
16
|
+
if (step.kind === "code") throw new Error(`execution plan: step '${step.id}' is a code step and has no route`);
|
|
17
|
+
return step;
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
function canonicalSteps(steps) {
|
|
21
|
+
return steps.map(
|
|
22
|
+
(step) => step.kind === "code" ? { ...step, kind: "code", dependencies: [...step.dependencies].sort() } : { ...step, kind: "agent", dependencies: [...step.dependencies].sort() }
|
|
23
|
+
);
|
|
24
|
+
}
|
|
25
|
+
function executionPlanWaves(steps, maxWorkers) {
|
|
26
|
+
if (!Number.isInteger(maxWorkers) || maxWorkers < 1)
|
|
27
|
+
throw new Error("execution plan: maxWorkers must be a positive integer");
|
|
28
|
+
if (steps.length === 0) throw new Error("execution plan: plan must contain at least one step");
|
|
29
|
+
const ids = /* @__PURE__ */ new Set();
|
|
30
|
+
for (const step of steps) {
|
|
31
|
+
if (step.id.trim().length === 0) throw new Error("execution plan: step id must be non-empty");
|
|
32
|
+
if (ids.has(step.id)) throw new Error(`execution plan: duplicate step id '${step.id}'`);
|
|
33
|
+
ids.add(step.id);
|
|
34
|
+
}
|
|
35
|
+
for (const step of steps)
|
|
36
|
+
for (const dependency of step.dependencies) {
|
|
37
|
+
if (!ids.has(dependency))
|
|
38
|
+
throw new Error(`execution plan: step '${step.id}' has missing dependency '${dependency}'`);
|
|
39
|
+
if (dependency === step.id) throw new Error(`execution plan: cycle includes '${step.id}'`);
|
|
40
|
+
}
|
|
41
|
+
const remaining = new Set(steps.map((step) => step.id));
|
|
42
|
+
const completed = /* @__PURE__ */ new Set();
|
|
43
|
+
const waves = [];
|
|
44
|
+
while (remaining.size > 0) {
|
|
45
|
+
const ready = steps.filter((step) => remaining.has(step.id) && step.dependencies.every((id) => completed.has(id)));
|
|
46
|
+
if (ready.length === 0) throw new Error("execution plan: dependency cycle detected");
|
|
47
|
+
const codeReady = ready.filter((step) => step.kind === "code").map((step) => step.id);
|
|
48
|
+
const agentReady = ready.filter((step) => step.kind !== "code").map((step) => step.id);
|
|
49
|
+
const chunks = [];
|
|
50
|
+
for (let offset = 0; offset < agentReady.length; offset += maxWorkers) {
|
|
51
|
+
chunks.push(agentReady.slice(offset, offset + maxWorkers));
|
|
52
|
+
}
|
|
53
|
+
if (chunks.length === 0) chunks.push([]);
|
|
54
|
+
chunks[0] = [...codeReady, ...chunks[0] ?? []];
|
|
55
|
+
for (const wave of chunks) {
|
|
56
|
+
waves.push(wave);
|
|
57
|
+
for (const id of wave) {
|
|
58
|
+
remaining.delete(id);
|
|
59
|
+
completed.add(id);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return waves;
|
|
64
|
+
}
|
|
65
|
+
function checkLoops(steps, loops) {
|
|
66
|
+
const byId = new Map(steps.map((step) => [step.id, step]));
|
|
67
|
+
const seen = /* @__PURE__ */ new Set();
|
|
68
|
+
for (const loop of loops) {
|
|
69
|
+
if (seen.has(loop.id)) throw new Error(`execution plan: duplicate loop id '${loop.id}'`);
|
|
70
|
+
seen.add(loop.id);
|
|
71
|
+
if (!Number.isInteger(loop.maxAttempts) || loop.maxAttempts < 1) {
|
|
72
|
+
throw new Error(`execution plan: loop '${loop.id}' must declare a positive attempt bound`);
|
|
73
|
+
}
|
|
74
|
+
if (loop.checkStepIds.length !== loop.maxAttempts || loop.repairStepIds.length !== loop.maxAttempts - 1) {
|
|
75
|
+
throw new Error(`execution plan: loop '${loop.id}' membership does not match its bound of ${loop.maxAttempts}`);
|
|
76
|
+
}
|
|
77
|
+
for (const id of [...loop.checkStepIds, ...loop.repairStepIds]) {
|
|
78
|
+
const step = byId.get(id);
|
|
79
|
+
if (step === void 0) throw new Error(`execution plan: loop '${loop.id}' names unknown step '${id}'`);
|
|
80
|
+
if (step.loop?.loopId !== loop.id) {
|
|
81
|
+
throw new Error(`execution plan: step '${id}' is not a member of loop '${loop.id}'`);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
for (const step of steps) {
|
|
86
|
+
if (step.loop !== void 0 && !seen.has(step.loop.loopId)) {
|
|
87
|
+
throw new Error(`execution plan: step '${step.id}' belongs to undeclared loop '${step.loop.loopId}'`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
function checkWriteBoundaryWaves(steps, waves, writerLimit) {
|
|
92
|
+
const byId = new Map(steps.map((step) => [step.id, step]));
|
|
93
|
+
for (const [index, wave] of waves.entries()) {
|
|
94
|
+
const members = wave.flatMap((id) => {
|
|
95
|
+
const step = byId.get(id);
|
|
96
|
+
return step === void 0 ? [] : [step];
|
|
97
|
+
});
|
|
98
|
+
const declared = members.filter((step) => step.writes !== void 0);
|
|
99
|
+
if (declared.length === 0) continue;
|
|
100
|
+
const undeclared = members.filter((step) => step.writes === void 0);
|
|
101
|
+
if (undeclared.length > 0 && writerLimit !== 1) {
|
|
102
|
+
throw new Error(
|
|
103
|
+
`execution plan: wave ${index} mixes boundary-enforced steps (${declared.map((step) => step.id).join(", ")}) with steps that declare no boundary (${undeclared.map((step) => step.id).join(", ")}); they share one checkout, so the undeclared step's writes cannot be told from a violation`
|
|
104
|
+
);
|
|
105
|
+
}
|
|
106
|
+
const writers = declared.filter((step) => (step.writes?.length ?? 0) > 0);
|
|
107
|
+
if (writers.length > 1 && writerLimit !== 1) {
|
|
108
|
+
throw new Error(
|
|
109
|
+
`execution plan: wave ${index} schedules ${writers.length} steps that may write (${writers.map((step) => step.id).join(
|
|
110
|
+
", "
|
|
111
|
+
)}); a write boundary is verified by diffing one shared checkout, so concurrent writers cannot be attributed. Order them with dependencies or lower maxWorkers`
|
|
112
|
+
);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
function compileExecutionPlan(input) {
|
|
117
|
+
if (input.writers !== void 0 && input.writers !== 1) {
|
|
118
|
+
throw new Error("execution plan: writers must be 1 when present");
|
|
119
|
+
}
|
|
120
|
+
const steps = canonicalSteps(input.steps);
|
|
121
|
+
const loops = (input.loops ?? []).map((loop) => ({
|
|
122
|
+
...loop,
|
|
123
|
+
checkStepIds: [...loop.checkStepIds],
|
|
124
|
+
repairStepIds: [...loop.repairStepIds]
|
|
125
|
+
}));
|
|
126
|
+
checkLoops(steps, loops);
|
|
127
|
+
const waves = executionPlanWaves(steps, input.maxWorkers);
|
|
128
|
+
checkWriteBoundaryWaves(steps, waves, input.writers);
|
|
129
|
+
const canonical = {
|
|
130
|
+
version: 4,
|
|
131
|
+
topology: input.topology,
|
|
132
|
+
rootTask: input.rootTask,
|
|
133
|
+
maxWorkers: input.maxWorkers,
|
|
134
|
+
...input.writers === 1 ? { writers: 1 } : {},
|
|
135
|
+
onFailure: input.onFailure,
|
|
136
|
+
steps,
|
|
137
|
+
loops,
|
|
138
|
+
waves
|
|
139
|
+
};
|
|
140
|
+
return { ...canonical, hash: createHash("sha256").update(JSON.stringify(canonical)).digest("hex") };
|
|
141
|
+
}
|
|
142
|
+
function executionPlanAncestors(plan, stepId) {
|
|
143
|
+
const byId = new Map(plan.steps.map((step) => [step.id, step]));
|
|
144
|
+
const ancestors = /* @__PURE__ */ new Set();
|
|
145
|
+
const pending = [...byId.get(stepId)?.dependencies ?? []];
|
|
146
|
+
while (pending.length > 0) {
|
|
147
|
+
const next = pending.pop();
|
|
148
|
+
if (next === void 0 || ancestors.has(next)) continue;
|
|
149
|
+
ancestors.add(next);
|
|
150
|
+
pending.push(...byId.get(next)?.dependencies ?? []);
|
|
151
|
+
}
|
|
152
|
+
return ancestors;
|
|
153
|
+
}
|
|
154
|
+
function spliceExecutionPlan(plan, parentId, tasks) {
|
|
155
|
+
const parent = plan.steps.find((step) => step.id === parentId);
|
|
156
|
+
if (parent?.kind !== "agent" || parent.plan === void 0) {
|
|
157
|
+
throw new Error(`execution plan: '${parentId}' is not a plan step`);
|
|
158
|
+
}
|
|
159
|
+
const inserted = tasks.map((task) => ({
|
|
160
|
+
kind: "agent",
|
|
161
|
+
id: task.id,
|
|
162
|
+
agentId: task.agentId,
|
|
163
|
+
executionRole: task.executionRole,
|
|
164
|
+
scope: task.writes.length > 0 ? "workspace" : "readonly",
|
|
165
|
+
expectedResultContract: task.expectedResultContract,
|
|
166
|
+
requestedAuthority: task.requestedAuthority,
|
|
167
|
+
approvedAuthority: task.approvedAuthority,
|
|
168
|
+
dependencies: [parentId, ...task.dependencies],
|
|
169
|
+
task: task.task,
|
|
170
|
+
writes: [...task.writes],
|
|
171
|
+
...task.target !== void 0 ? { target: task.target } : {},
|
|
172
|
+
...task.profile !== void 0 ? { profile: task.profile } : {},
|
|
173
|
+
planParentId: parentId
|
|
174
|
+
}));
|
|
175
|
+
return compileExecutionPlan({
|
|
176
|
+
topology: plan.topology,
|
|
177
|
+
rootTask: plan.rootTask,
|
|
178
|
+
maxWorkers: plan.maxWorkers,
|
|
179
|
+
...plan.writers === 1 ? { writers: 1 } : {},
|
|
180
|
+
onFailure: plan.onFailure,
|
|
181
|
+
steps: [...plan.steps, ...inserted],
|
|
182
|
+
loops: plan.loops
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
// src/domains/dispatch/fleet-plan.ts
|
|
187
|
+
init_esm_shims();
|
|
188
|
+
function expandDependencies(dependencies, loopMembers) {
|
|
189
|
+
return dependencies.flatMap((id) => {
|
|
190
|
+
const loop = loopMembers.get(id);
|
|
191
|
+
return loop === void 0 ? [id] : [...loop.checkStepIds];
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
function expandCommitSources(sources, loopMembers) {
|
|
195
|
+
return sources.flatMap((id) => {
|
|
196
|
+
const loop = loopMembers.get(id);
|
|
197
|
+
return loop === void 0 ? [id] : [...loop.repairStepIds].reverse();
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
function declaredLoops(steps) {
|
|
201
|
+
const loops = /* @__PURE__ */ new Map();
|
|
202
|
+
for (const step of steps) {
|
|
203
|
+
if (step.kind !== "loop") continue;
|
|
204
|
+
const checkStepIds = [];
|
|
205
|
+
const repairStepIds = [];
|
|
206
|
+
for (let attempt = 1; attempt <= step.maxAttempts; attempt++) {
|
|
207
|
+
checkStepIds.push(fleetLoopCheckStepId(step.id, attempt));
|
|
208
|
+
if (attempt < step.maxAttempts) repairStepIds.push(fleetLoopRepairStepId(step.id, attempt));
|
|
209
|
+
}
|
|
210
|
+
loops.set(step.id, {
|
|
211
|
+
id: step.id,
|
|
212
|
+
checkKind: step.check.kind === "gate" ? "code" : step.check.kind,
|
|
213
|
+
maxAttempts: step.maxAttempts,
|
|
214
|
+
checkStepIds,
|
|
215
|
+
repairStepIds
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
return loops;
|
|
219
|
+
}
|
|
220
|
+
function compileFleetExecutionPlan(input) {
|
|
221
|
+
const { contract, task, resolveAgent } = input;
|
|
222
|
+
const loops = declaredLoops(contract.steps);
|
|
223
|
+
const steps = [];
|
|
224
|
+
const boundary = (scope, writes) => {
|
|
225
|
+
const resolved = fleetStepWriteBoundary(contract.version, scope, writes);
|
|
226
|
+
return resolved === void 0 ? {} : { writes: [...resolved] };
|
|
227
|
+
};
|
|
228
|
+
const agentNode = (context, dependencies, writes, loop, extra) => {
|
|
229
|
+
const resolved = resolveAgent(context);
|
|
230
|
+
return {
|
|
231
|
+
kind: "agent",
|
|
232
|
+
id: context.stepId,
|
|
233
|
+
agentId: context.agentId,
|
|
234
|
+
scope: context.scope,
|
|
235
|
+
dependencies: [...dependencies],
|
|
236
|
+
task,
|
|
237
|
+
expectedResultContract: resolved.expectedResultContract,
|
|
238
|
+
requestedAuthority: resolved.requestedAuthority,
|
|
239
|
+
approvedAuthority: resolved.approvedAuthority,
|
|
240
|
+
executionRole: resolved.executionRole,
|
|
241
|
+
...boundary(context.scope, writes),
|
|
242
|
+
...loop !== void 0 ? { loop } : {},
|
|
243
|
+
...context.target !== void 0 ? { target: context.target } : {},
|
|
244
|
+
...context.profile !== void 0 ? { profile: context.profile } : {},
|
|
245
|
+
...extra
|
|
246
|
+
};
|
|
247
|
+
};
|
|
248
|
+
const routeOf = (value) => ({
|
|
249
|
+
...value.target !== void 0 ? { target: value.target } : {},
|
|
250
|
+
...value.profile !== void 0 ? { profile: value.profile } : {}
|
|
251
|
+
});
|
|
252
|
+
for (const step of contract.steps) {
|
|
253
|
+
const dependencies = expandDependencies(step.dependencies, loops);
|
|
254
|
+
if (step.kind === "agent") {
|
|
255
|
+
steps.push(
|
|
256
|
+
agentNode(
|
|
257
|
+
{ stepId: step.id, agentId: step.agent, scope: step.scope, attempt: 0, ...routeOf(step) },
|
|
258
|
+
dependencies,
|
|
259
|
+
step.writes
|
|
260
|
+
)
|
|
261
|
+
);
|
|
262
|
+
continue;
|
|
263
|
+
}
|
|
264
|
+
if (step.kind === "gate") {
|
|
265
|
+
steps.push(
|
|
266
|
+
agentNode(
|
|
267
|
+
{ stepId: step.id, agentId: step.agent, scope: "workspace", attempt: 0, gateAuthorRole: true, ...routeOf(step) },
|
|
268
|
+
dependencies,
|
|
269
|
+
[step.path],
|
|
270
|
+
void 0,
|
|
271
|
+
{ gate: { path: step.path, commandId: step.run } }
|
|
272
|
+
)
|
|
273
|
+
);
|
|
274
|
+
continue;
|
|
275
|
+
}
|
|
276
|
+
if (step.kind === "plan") {
|
|
277
|
+
steps.push(
|
|
278
|
+
agentNode(
|
|
279
|
+
{ stepId: step.id, agentId: step.agent, scope: step.scope, attempt: 0, planRole: true, ...routeOf(step) },
|
|
280
|
+
dependencies,
|
|
281
|
+
step.writes,
|
|
282
|
+
void 0,
|
|
283
|
+
{ plan: { roster: [...step.roster], maxTasks: step.maxTasks, proposals: step.proposals } }
|
|
284
|
+
)
|
|
285
|
+
);
|
|
286
|
+
continue;
|
|
287
|
+
}
|
|
288
|
+
if (step.kind === "code") {
|
|
289
|
+
steps.push({
|
|
290
|
+
kind: "code",
|
|
291
|
+
id: step.id,
|
|
292
|
+
commandId: step.command,
|
|
293
|
+
scope: step.scope,
|
|
294
|
+
dependencies,
|
|
295
|
+
...boundary(step.scope, step.writes),
|
|
296
|
+
...step.commitFrom !== void 0 ? { commitFrom: expandCommitSources(step.commitFrom, loops) } : {}
|
|
297
|
+
});
|
|
298
|
+
continue;
|
|
299
|
+
}
|
|
300
|
+
const loop = loops.get(step.id);
|
|
301
|
+
if (loop === void 0) throw new Error(`fleet plan: loop '${step.id}' failed to compile`);
|
|
302
|
+
for (let attempt = 1; attempt <= step.maxAttempts; attempt++) {
|
|
303
|
+
const checkId = loop.checkStepIds[attempt - 1] ?? "";
|
|
304
|
+
const previousRepair = attempt === 1 ? null : loop.repairStepIds[attempt - 2] ?? "";
|
|
305
|
+
const checkDependencies = previousRepair === null ? dependencies : [previousRepair];
|
|
306
|
+
const membership = { loopId: loop.id, role: "check", attempt };
|
|
307
|
+
if (step.check.kind === "code") {
|
|
308
|
+
steps.push({
|
|
309
|
+
kind: "code",
|
|
310
|
+
id: checkId,
|
|
311
|
+
commandId: step.check.command,
|
|
312
|
+
scope: step.check.scope,
|
|
313
|
+
dependencies: checkDependencies,
|
|
314
|
+
...boundary(step.check.scope, step.check.writes),
|
|
315
|
+
loop: membership,
|
|
316
|
+
// The green a later step may rely on; the scheduler re-runs it
|
|
317
|
+
// when a workspace step lands after it.
|
|
318
|
+
verification: true
|
|
319
|
+
});
|
|
320
|
+
} else if (step.check.kind === "gate") {
|
|
321
|
+
const gateId = step.check.gate;
|
|
322
|
+
const gate = contract.steps.find((candidate) => candidate.id === gateId);
|
|
323
|
+
if (gate?.kind !== "gate") throw new Error(`fleet plan: gate '${gateId}' failed to resolve`);
|
|
324
|
+
steps.push({
|
|
325
|
+
kind: "code",
|
|
326
|
+
id: checkId,
|
|
327
|
+
commandId: gate.run,
|
|
328
|
+
scope: "readonly",
|
|
329
|
+
dependencies: checkDependencies,
|
|
330
|
+
writes: [],
|
|
331
|
+
loop: membership,
|
|
332
|
+
verification: true,
|
|
333
|
+
gate: { gateId: gate.id, path: gate.path }
|
|
334
|
+
});
|
|
335
|
+
} else {
|
|
336
|
+
steps.push(
|
|
337
|
+
agentNode(
|
|
338
|
+
{
|
|
339
|
+
stepId: checkId,
|
|
340
|
+
agentId: step.check.agent,
|
|
341
|
+
scope: step.check.scope,
|
|
342
|
+
attempt: 0,
|
|
343
|
+
gateRole: "reviewer",
|
|
344
|
+
...routeOf(step.check)
|
|
345
|
+
},
|
|
346
|
+
checkDependencies,
|
|
347
|
+
step.check.writes,
|
|
348
|
+
membership
|
|
349
|
+
)
|
|
350
|
+
);
|
|
351
|
+
}
|
|
352
|
+
if (attempt >= step.maxAttempts) continue;
|
|
353
|
+
const repairId = loop.repairStepIds[attempt - 1] ?? "";
|
|
354
|
+
steps.push(
|
|
355
|
+
agentNode(
|
|
356
|
+
{ stepId: repairId, agentId: step.repair.agent, scope: step.repair.scope, attempt, ...routeOf(step.repair) },
|
|
357
|
+
[checkId],
|
|
358
|
+
step.repair.writes,
|
|
359
|
+
{ loopId: loop.id, role: "repair", attempt }
|
|
360
|
+
)
|
|
361
|
+
);
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
return compileExecutionPlan({
|
|
365
|
+
topology: "fleet",
|
|
366
|
+
rootTask: task,
|
|
367
|
+
maxWorkers: contract.maxWorkers,
|
|
368
|
+
...contract.writers === 1 ? { writers: 1 } : {},
|
|
369
|
+
onFailure: contract.onFailure,
|
|
370
|
+
steps,
|
|
371
|
+
loops: [...loops.values()]
|
|
372
|
+
});
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
export {
|
|
376
|
+
requireAgentSteps,
|
|
377
|
+
compileExecutionPlan,
|
|
378
|
+
executionPlanAncestors,
|
|
379
|
+
spliceExecutionPlan,
|
|
380
|
+
compileFleetExecutionPlan
|
|
381
|
+
};
|
|
382
|
+
//# sourceMappingURL=chunk-J3YUBZWY.js.map
|
|
@@ -1,20 +1,22 @@
|
|
|
1
1
|
import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
assistantTextFromEvent
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-HLE42MG7.js";
|
|
5
5
|
import {
|
|
6
|
-
compileExecutionPlan,
|
|
7
6
|
durableAssistantTextFromEvent
|
|
8
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-TLQJPP24.js";
|
|
8
|
+
import {
|
|
9
|
+
compileExecutionPlan
|
|
10
|
+
} from "./chunk-J3YUBZWY.js";
|
|
9
11
|
import {
|
|
10
12
|
deriveExecutionRole
|
|
11
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-H7IXIC72.js";
|
|
12
14
|
import {
|
|
13
15
|
truncateUtf8
|
|
14
16
|
} from "./chunk-6XLNIQDB.js";
|
|
15
17
|
import {
|
|
16
18
|
BusChannels
|
|
17
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-TT36MB5S.js";
|
|
18
20
|
import {
|
|
19
21
|
init_esm_shims
|
|
20
22
|
} from "./chunk-3R73A4XB.js";
|
|
@@ -274,4 +276,4 @@ export {
|
|
|
274
276
|
compileScoutTransition,
|
|
275
277
|
createDispatchRunEventRegistry
|
|
276
278
|
};
|
|
277
|
-
//# sourceMappingURL=chunk-
|
|
279
|
+
//# sourceMappingURL=chunk-JOZYP4GM.js.map
|