@iowarp/clio-coder 0.3.6 → 0.3.7
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 +28 -0
- package/README.md +16 -5
- package/dist/{acp-2BEHC4DL.js → acp-SK4MD6MM.js} +10 -10
- package/dist/{agents-LNNFTM53.js → agents-2FN2K6ME.js} +30 -25
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-KXXFI2VS.js → auth-QIYZWM5I.js} +13 -13
- package/dist/{chunk-KHSFENX2.js → chunk-3HAPLH5M.js} +10 -10
- package/dist/{chunk-24I7BN55.js → chunk-465YSENW.js} +2 -2
- package/dist/{chunk-4OC57DA6.js → chunk-4DGYLA73.js} +53 -2
- package/dist/{chunk-CYQKWTG3.js → chunk-4DWFMQDR.js} +4 -4
- package/dist/{chunk-E2ER4LJF.js → chunk-5C3AQNDW.js} +25 -1
- package/dist/{chunk-22NAGB7X.js → chunk-5C77SEEY.js} +5 -94
- package/dist/{chunk-43AOLP7E.js → chunk-5FR74PWO.js} +2 -1
- package/dist/{chunk-K7T3E2SR.js → chunk-5UJ6ECTS.js} +10 -9
- package/dist/{chunk-6US73PDB.js → chunk-6M7VS3J3.js} +5 -5
- package/dist/{chunk-CJUB2JJ2.js → chunk-6TUKSZVF.js} +5 -5
- package/dist/{chunk-5JGRAMKL.js → chunk-AB4XIIVB.js} +8 -6
- package/dist/{chunk-R46L2BIR.js → chunk-BMWK7ZIZ.js} +14 -20
- package/dist/{chunk-4BPJXDWC.js → chunk-C4JBQ5SR.js} +30 -14
- package/dist/{chunk-XXQNGV4M.js → chunk-CEYBNUGC.js} +243 -63
- package/dist/{chunk-VEZEGCGW.js → chunk-D4MDIG46.js} +20 -18
- package/dist/chunk-DJNLUABN.js +843 -0
- package/dist/{chunk-RY3LY4J5.js → chunk-DMD2AGVS.js} +5 -4
- package/dist/{chunk-KOHPCX4K.js → chunk-DOOEX22V.js} +2 -2
- package/dist/chunk-DQA7QLMD.js +123 -0
- package/dist/chunk-DR52UMZW.js +21 -0
- package/dist/{chunk-XF5N4U5A.js → chunk-EBEFWSGL.js} +6 -5
- package/dist/{chunk-EYPA3EGJ.js → chunk-EELBMBT6.js} +120 -13
- package/dist/{chunk-CKXWIANG.js → chunk-EOOQZZDE.js} +16 -14
- package/dist/{chunk-WR67VIZY.js → chunk-FOT2FX5J.js} +63 -5
- package/dist/{chunk-FYYLNIL5.js → chunk-GH5622CP.js} +2 -2
- package/dist/chunk-GWS3VEIW.js +195 -0
- package/dist/{chunk-LYF7OHWH.js → chunk-J7PIKKWC.js} +8 -463
- package/dist/{chunk-NILBFAPG.js → chunk-JNXPYBB4.js} +2 -2
- package/dist/{chunk-4VP4KH3K.js → chunk-JRIO5UD2.js} +4 -4
- package/dist/{chunk-6XXKFVSN.js → chunk-JTSEDYVQ.js} +7 -7
- package/dist/{chunk-QKMUKYO7.js → chunk-KCMKRQX4.js} +236 -84
- package/dist/chunk-KZ2H5X4G.js +1026 -0
- package/dist/{chunk-QNQHSOLF.js → chunk-LADCF22A.js} +12 -12
- package/dist/chunk-M4AKACEO.js +382 -0
- package/dist/{chunk-XYDYPRZI.js → chunk-MXI6J5JF.js} +7 -7
- package/dist/{chunk-G7MUEIGA.js → chunk-OB5HIGJY.js} +1 -1
- package/dist/{chunk-EKY57CSP.js → chunk-OBMAI2DP.js} +61 -767
- package/dist/chunk-PD3MESLB.js +242 -0
- package/dist/{chunk-ZRGEBJ4T.js → chunk-QCTRSGHQ.js} +21 -21
- package/dist/chunk-RVG5JXAL.js +41 -0
- package/dist/{chunk-RD5U66HV.js → chunk-SROCI7ZU.js} +7 -7
- package/dist/{chunk-MFFY33HR.js → chunk-THKY7CD7.js} +466 -205
- package/dist/{chunk-PCZJO5TI.js → chunk-UFQ3F4FW.js} +13 -178
- package/dist/{chunk-AD2SYQYC.js → chunk-UHXRNZ2J.js} +121 -3
- package/dist/chunk-UND3GU2L.js +103 -0
- package/dist/{chunk-QM3F2GKX.js → chunk-UUANF5CR.js} +2247 -2096
- package/dist/chunk-UVDSQ6LW.js +472 -0
- package/dist/{chunk-DJVECN66.js → chunk-VQNODYQ4.js} +14 -14
- package/dist/{chunk-3BPUFZDL.js → chunk-VREKEFLL.js} +3 -3
- package/dist/{chunk-PBTHKCPN.js → chunk-WJHBC77E.js} +6 -6
- package/dist/{chunk-XE2VEJHX.js → chunk-X2KV5FXT.js} +2 -2
- package/dist/{chunk-ZXF4XRKW.js → chunk-XEGB6BCN.js} +157 -7
- package/dist/{chunk-E25LMLRW.js → chunk-YD734TPH.js} +2 -2
- package/dist/{verifiers-NCBTHHN2.js → chunk-YTYFXUI3.js} +65 -322
- package/dist/{chunk-OH3TOQTB.js → chunk-ZGH7FGS5.js} +13 -7
- package/dist/cli/index.js +32 -30
- package/dist/{clio-M2KGYUFZ.js → clio-WBVQEBKO.js} +7 -7
- package/dist/{code-nav-GQNL7XA6.js → code-nav-FGGFIE7L.js} +3 -3
- package/dist/{components-5TTYYX6G.js → components-F7OEATSO.js} +4 -4
- package/dist/{config-XUUYQIWO.js → config-TRBL3RCF.js} +34 -29
- package/dist/{configure-IHJ7YOMV.js → configure-OLCVPHNM.js} +15 -15
- package/dist/{context-74JLXAWD.js → context-MJIJ6GOX.js} +11 -11
- package/dist/{context-ZQ7SIFJV.js → context-WFPKQSM6.js} +19 -3
- package/dist/{context-75MIWW3U.js → context-XEWE3MOJ.js} +31 -26
- package/dist/{context-clear-GYKWNUML.js → context-clear-KNOS2JPB.js} +31 -26
- package/dist/{context-working-set-UX5KEP4J.js → context-working-set-EUXAZI6N.js} +8 -8
- package/dist/{dispatch-runner-GIJBHNFL.js → dispatch-runner-B7MTOVKL.js} +313 -53
- package/dist/{docs-6FZSCG5B.js → docs-FLJTIDSE.js} +4 -4
- package/dist/{doctor-SVJ5BZCW.js → doctor-RN4YKO2X.js} +14 -14
- package/dist/{eval-CG6LLBLD.js → eval-RUBJVSNQ.js} +8 -7
- package/dist/{evidence-ZYFIEN42.js → evidence-JZNBUOQZ.js} +30 -25
- package/dist/{evolve-QGEXEMDW.js → evolve-FJVC4KKI.js} +30 -25
- package/dist/{extensions-ADGNCJJD.js → extensions-IQL36S7K.js} +4 -4
- package/dist/{fleet-S5R4ZOQY.js → fleet-BDKYJFCP.js} +214 -360
- package/dist/fleet-commands-ZFIWZSB3.js +70 -0
- package/dist/fleet-graph-Y6HPXIVF.js +125 -0
- package/dist/fleet-new-RDVJLHHH.js +48 -0
- package/dist/fleet-validate-BIYREGIK.js +79 -0
- package/dist/{init-5DRU55YR.js → init-LQUB5COQ.js} +44 -37
- package/dist/library-NJAHIGG4.js +217 -0
- package/dist/{memory-7YKKR6UC.js → memory-OG6HOYKM.js} +31 -26
- package/dist/{models-ZPOLRU2C.js → models-5ZG5XY7J.js} +21 -20
- package/dist/{monitor-US5F5YGZ.js → monitor-TJ7AMTGB.js} +49 -30
- package/dist/{orchestrator-E2AL4T5N.js → orchestrator-WZYB54DM.js} +3827 -581
- package/dist/{paths-E7KYAQWE.js → paths-XUC7GS6E.js} +4 -4
- package/dist/{reset-KZ652EK6.js → reset-PXQT45IY.js} +7 -7
- package/dist/{run-SRNBKDWD.js → run-FQ74YF62.js} +53 -45
- package/dist/{share-CGZE33UP.js → share-FW7SVCL3.js} +33 -9
- package/dist/{skills-S2X4DLY5.js → skills-7E7IRB3R.js} +24 -8
- package/dist/{skills-eval-W2GGIC4R.js → skills-eval-LI75W6OK.js} +34 -27
- package/dist/{targets-54SWINWB.js → targets-4CIFKCTW.js} +23 -22
- package/dist/{terminal-lease-SAIF2OGY.js → terminal-lease-WUZY7ZV5.js} +4 -4
- package/dist/{uninstall-BVLWXKBT.js → uninstall-7FV7IP4E.js} +4 -4
- package/dist/{upgrade-JKAR27XC.js → upgrade-K2HVIVMQ.js} +20 -19
- package/dist/{usage-MSAWCLX4.js → usage-GTZELZQX.js} +116 -49
- package/dist/verifiers-RLAHT27O.js +336 -0
- package/dist/{verify-X5HDROLA.js → verify-BX3BRKH5.js} +7 -6
- package/dist/{wiki-generate-GUSOQ6ZP.js → wiki-generate-ASIFASCN.js} +45 -37
- package/dist/worker/entry.js +38 -35
- 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 +10 -6
- package/docs/built-in-agents.md +26 -2
- package/docs/capacity-and-scheduling.md +1 -1
- package/docs/commands-and-modes.md +82 -2
- package/docs/configuration-and-targets.md +79 -2
- 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 +5 -5
- 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 +197 -10
- package/docs/git-commit-provenance.md +2 -2
- package/docs/glossary.md +1 -1
- 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 +55 -8
- package/docs/proactive-memory.md +1 -1
- package/docs/prompt-envelope-and-tools.md +1 -1
- package/docs/provider-adapter-cookbook.md +1 -1
- package/docs/release-cut-checklist.md +79 -64
- 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 -1
- 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 +121 -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/usage.ts +111 -19
- package/src/core/bus-events.ts +4 -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/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/fleet-contract.ts +278 -16
- package/src/domains/agents/index.ts +14 -0
- package/src/domains/agents/result-contract.ts +235 -1
- package/src/domains/config/classify.ts +4 -0
- package/src/domains/dispatch/active-route-planner.ts +14 -0
- 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 +34 -0
- package/src/domains/dispatch/delegation-plan.ts +167 -0
- package/src/domains/dispatch/execution-plan.ts +76 -5
- package/src/domains/dispatch/execution-role.ts +3 -1
- package/src/domains/dispatch/execution-scheduler.ts +183 -67
- package/src/domains/dispatch/extension.ts +258 -9
- 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 +737 -0
- package/src/domains/dispatch/gate-role-prompts.ts +9 -0
- package/src/domains/dispatch/host-verification.ts +178 -0
- package/src/domains/dispatch/index.ts +38 -0
- package/src/domains/dispatch/intent.ts +159 -0
- package/src/domains/dispatch/receipt-integrity.ts +8 -4
- package/src/domains/dispatch/state.ts +36 -3
- package/src/domains/dispatch/types.ts +51 -6
- package/src/domains/dispatch/validation.ts +66 -6
- package/src/domains/evidence/trust-status.ts +10 -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/resources/index.ts +20 -0
- package/src/domains/resources/library.ts +326 -0
- package/src/domains/resources/skills/marketplace.ts +37 -12
- package/src/domains/session/handoff.ts +629 -0
- package/src/domains/share/archive.ts +67 -2
- 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 +260 -16
- 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 +9 -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 +101 -4
- 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 +432 -5
- 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/watchdog-run.ts +75 -0
- package/src/interactive/worker-share.ts +56 -1
- package/src/interactive/worker-stream.ts +7 -0
- package/src/tools/bootstrap.ts +3 -0
- package/src/tools/compete-worktrees.ts +13 -79
- package/src/tools/dispatch-admission.ts +242 -8
- package/src/tools/dispatch-arguments.ts +57 -1
- package/src/tools/dispatch-plan.ts +136 -6
- package/src/tools/dispatch-runner.ts +319 -13
- package/src/tools/dispatch-types.ts +20 -1
- package/src/tools/dispatch.ts +72 -2
- package/src/tools/monitor.ts +16 -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 +2 -1
- package/src/worker/spec-contract.ts +1 -0
- package/dist/chunk-HC4CLZ2Y.js +0 -68
|
@@ -10,10 +10,10 @@ import {
|
|
|
10
10
|
} from "./chunk-WHGPSPT5.js";
|
|
11
11
|
import {
|
|
12
12
|
isTerminalRunEnvelope
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-CEYBNUGC.js";
|
|
14
14
|
import {
|
|
15
15
|
taskBoardCounts
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-5FR74PWO.js";
|
|
17
17
|
import {
|
|
18
18
|
SKILL_SUGGESTION_ANCHOR,
|
|
19
19
|
SKILL_SUGGESTION_PREFIX
|
|
@@ -25,13 +25,13 @@ import {
|
|
|
25
25
|
import {
|
|
26
26
|
ToolNames
|
|
27
27
|
} from "./chunk-CGKSTWHD.js";
|
|
28
|
-
import {
|
|
29
|
-
reportCommitAttributionDiagnostic,
|
|
30
|
-
withManagedGitCommitAttributionEnvironment
|
|
31
|
-
} from "./chunk-VEZEGCGW.js";
|
|
32
28
|
import {
|
|
33
29
|
ceilChars
|
|
34
30
|
} from "./chunk-GEYXPTRF.js";
|
|
31
|
+
import {
|
|
32
|
+
reportCommitAttributionDiagnostic,
|
|
33
|
+
withManagedGitCommitAttributionEnvironment
|
|
34
|
+
} from "./chunk-D4MDIG46.js";
|
|
35
35
|
import {
|
|
36
36
|
require_dist
|
|
37
37
|
} from "./chunk-APJ265NV.js";
|
|
@@ -2097,6 +2097,153 @@ function createMiddlewareToolChoiceControl() {
|
|
|
2097
2097
|
};
|
|
2098
2098
|
}
|
|
2099
2099
|
|
|
2100
|
+
// src/domains/middleware/watchdog.ts
|
|
2101
|
+
init_esm_shims();
|
|
2102
|
+
var WATCHDOG_REGISTRATION_ID = "observer.watchdog";
|
|
2103
|
+
var WATCHDOG_DIFF_MAX_BYTES = 12 * 1024;
|
|
2104
|
+
var WATCHDOG_PATHS_MAX = 40;
|
|
2105
|
+
var WATCHDOG_TRUNCATION_MARKER = "\n[diff truncated]";
|
|
2106
|
+
var MUTATING_TOOL_NAMES = /* @__PURE__ */ new Set([ToolNames.Write, ToolNames.Edit, ToolNames.Artifact]);
|
|
2107
|
+
var NO_EFFECTS4 = [];
|
|
2108
|
+
function stringValue2(value) {
|
|
2109
|
+
return typeof value === "string" && value.length > 0 ? value : null;
|
|
2110
|
+
}
|
|
2111
|
+
function firstPath(details) {
|
|
2112
|
+
const paths = details?.paths;
|
|
2113
|
+
if (!Array.isArray(paths)) return null;
|
|
2114
|
+
for (const entry of paths) {
|
|
2115
|
+
const path = stringValue2(entry);
|
|
2116
|
+
if (path !== null) return path;
|
|
2117
|
+
}
|
|
2118
|
+
return null;
|
|
2119
|
+
}
|
|
2120
|
+
function coalesceTurnDiff(byPath, maxBytes = WATCHDOG_DIFF_MAX_BYTES) {
|
|
2121
|
+
const blocks = [];
|
|
2122
|
+
let index = 0;
|
|
2123
|
+
for (const [path, diff] of byPath) {
|
|
2124
|
+
if (index >= WATCHDOG_PATHS_MAX) {
|
|
2125
|
+
blocks.push(`[${byPath.size - WATCHDOG_PATHS_MAX} more changed path(s) omitted]`);
|
|
2126
|
+
break;
|
|
2127
|
+
}
|
|
2128
|
+
blocks.push(`--- ${path}
|
|
2129
|
+
${diff}`);
|
|
2130
|
+
index += 1;
|
|
2131
|
+
}
|
|
2132
|
+
const whole = blocks.join("\n\n");
|
|
2133
|
+
if (Buffer.byteLength(whole, "utf8") <= maxBytes) return whole;
|
|
2134
|
+
const room = Math.max(0, maxBytes - Buffer.byteLength(WATCHDOG_TRUNCATION_MARKER, "utf8"));
|
|
2135
|
+
const buffer = Buffer.from(whole, "utf8");
|
|
2136
|
+
let cut = Math.min(room, buffer.byteLength);
|
|
2137
|
+
while (cut > 0) {
|
|
2138
|
+
const next = buffer[cut];
|
|
2139
|
+
if (next === void 0 || (next & 192) !== 128) break;
|
|
2140
|
+
cut -= 1;
|
|
2141
|
+
}
|
|
2142
|
+
return `${buffer.subarray(0, cut).toString("utf8")}${WATCHDOG_TRUNCATION_MARKER}`;
|
|
2143
|
+
}
|
|
2144
|
+
var WATCHDOG_TASK = "Review the coalesced diff in the briefing against the scope it names. Report one check per concern: a change outside the stated scope, a change the scope required that the diff does not make, or a defect visible in the diff itself. Run no commands and change nothing.";
|
|
2145
|
+
function watchdogBriefing(trigger) {
|
|
2146
|
+
const scope = trigger.scope === null ? "(no task board; scope is unstated)" : trigger.scope;
|
|
2147
|
+
const paths = trigger.paths.length === 0 ? "(none)" : trigger.paths.join("\n");
|
|
2148
|
+
return [
|
|
2149
|
+
"## Current scope",
|
|
2150
|
+
scope,
|
|
2151
|
+
"",
|
|
2152
|
+
"## Changed paths",
|
|
2153
|
+
paths,
|
|
2154
|
+
"",
|
|
2155
|
+
"## Coalesced diff for this turn",
|
|
2156
|
+
trigger.diff
|
|
2157
|
+
].join("\n");
|
|
2158
|
+
}
|
|
2159
|
+
function createWatchdogRegistration(deps) {
|
|
2160
|
+
const diffByPath = /* @__PURE__ */ new Map();
|
|
2161
|
+
let toolCalls = 0;
|
|
2162
|
+
let dropped = 0;
|
|
2163
|
+
let inFlight = false;
|
|
2164
|
+
let outstanding = Promise.resolve();
|
|
2165
|
+
const active = () => {
|
|
2166
|
+
if (deps.firesOnThisSurface === false) return null;
|
|
2167
|
+
let settings;
|
|
2168
|
+
try {
|
|
2169
|
+
settings = deps.getSettings();
|
|
2170
|
+
} catch {
|
|
2171
|
+
return null;
|
|
2172
|
+
}
|
|
2173
|
+
return settings.enabled ? settings : null;
|
|
2174
|
+
};
|
|
2175
|
+
const resetTurn = () => {
|
|
2176
|
+
diffByPath.clear();
|
|
2177
|
+
toolCalls = 0;
|
|
2178
|
+
};
|
|
2179
|
+
const fire = (reason) => {
|
|
2180
|
+
if (diffByPath.size === 0) return;
|
|
2181
|
+
if (inFlight) {
|
|
2182
|
+
dropped += 1;
|
|
2183
|
+
return;
|
|
2184
|
+
}
|
|
2185
|
+
const trigger = {
|
|
2186
|
+
reason,
|
|
2187
|
+
diff: coalesceTurnDiff(diffByPath),
|
|
2188
|
+
paths: [...diffByPath.keys()].slice(0, WATCHDOG_PATHS_MAX),
|
|
2189
|
+
scope: scopeNow(),
|
|
2190
|
+
toolCalls
|
|
2191
|
+
};
|
|
2192
|
+
inFlight = true;
|
|
2193
|
+
let started;
|
|
2194
|
+
try {
|
|
2195
|
+
started = deps.run(trigger);
|
|
2196
|
+
} catch {
|
|
2197
|
+
inFlight = false;
|
|
2198
|
+
return;
|
|
2199
|
+
}
|
|
2200
|
+
outstanding = started.catch(() => {
|
|
2201
|
+
}).finally(() => {
|
|
2202
|
+
inFlight = false;
|
|
2203
|
+
});
|
|
2204
|
+
};
|
|
2205
|
+
const scopeNow = () => {
|
|
2206
|
+
try {
|
|
2207
|
+
return deps.getScope?.() ?? null;
|
|
2208
|
+
} catch {
|
|
2209
|
+
return null;
|
|
2210
|
+
}
|
|
2211
|
+
};
|
|
2212
|
+
return {
|
|
2213
|
+
id: WATCHDOG_REGISTRATION_ID,
|
|
2214
|
+
description: "review a mutating turn's coalesced diff against the board scope with a read-only verifier run",
|
|
2215
|
+
hooks: ["after_tool", "turn_end"],
|
|
2216
|
+
evaluate(input) {
|
|
2217
|
+
const settings = active();
|
|
2218
|
+
if (settings === null) {
|
|
2219
|
+
if (input.hook === "turn_end") resetTurn();
|
|
2220
|
+
return NO_EFFECTS4;
|
|
2221
|
+
}
|
|
2222
|
+
if (input.hook === "after_tool") {
|
|
2223
|
+
toolCalls += 1;
|
|
2224
|
+
recordMutation(input);
|
|
2225
|
+
const cadence = settings.cadenceToolCalls;
|
|
2226
|
+
if (cadence !== void 0 && cadence >= 1 && toolCalls % cadence === 0) fire("cadence");
|
|
2227
|
+
return NO_EFFECTS4;
|
|
2228
|
+
}
|
|
2229
|
+
if (input.hook !== "turn_end") return NO_EFFECTS4;
|
|
2230
|
+
fire("turn_end");
|
|
2231
|
+
resetTurn();
|
|
2232
|
+
return NO_EFFECTS4;
|
|
2233
|
+
},
|
|
2234
|
+
droppedTriggers: () => dropped,
|
|
2235
|
+
runInFlight: () => inFlight,
|
|
2236
|
+
whenIdle: () => outstanding
|
|
2237
|
+
};
|
|
2238
|
+
function recordMutation(input) {
|
|
2239
|
+
if (input.metadata?.resultKind !== "ok") return;
|
|
2240
|
+
if (input.toolName === void 0 || !MUTATING_TOOL_NAMES.has(input.toolName)) return;
|
|
2241
|
+
const diff = stringValue2(input.toolResultDetails?.diff);
|
|
2242
|
+
if (diff === null) return;
|
|
2243
|
+
diffByPath.set(firstPath(input.toolResultDetails) ?? input.toolName, diff);
|
|
2244
|
+
}
|
|
2245
|
+
}
|
|
2246
|
+
|
|
2100
2247
|
// src/domains/middleware/index.ts
|
|
2101
2248
|
init_esm_shims();
|
|
2102
2249
|
|
|
@@ -2252,6 +2399,9 @@ export {
|
|
|
2252
2399
|
createTaskBoardReminderRegistration,
|
|
2253
2400
|
createTaskNudgeRegistration,
|
|
2254
2401
|
createMiddlewareToolChoiceControl,
|
|
2402
|
+
WATCHDOG_TASK,
|
|
2403
|
+
watchdogBriefing,
|
|
2404
|
+
createWatchdogRegistration,
|
|
2255
2405
|
MiddlewareDomainModule
|
|
2256
2406
|
};
|
|
2257
|
-
//# sourceMappingURL=chunk-
|
|
2407
|
+
//# sourceMappingURL=chunk-XEGB6BCN.js.map
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
settingsPath,
|
|
6
6
|
updateSavedSettingsDocument,
|
|
7
7
|
validateSettings
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-UHXRNZ2J.js";
|
|
9
9
|
import {
|
|
10
10
|
require_dist
|
|
11
11
|
} from "./chunk-APJ265NV.js";
|
|
@@ -226,4 +226,4 @@ export {
|
|
|
226
226
|
updateLayeredSettings,
|
|
227
227
|
settingsSourceFor
|
|
228
228
|
};
|
|
229
|
-
//# sourceMappingURL=chunk-
|
|
229
|
+
//# sourceMappingURL=chunk-YD734TPH.js.map
|
|
@@ -4,52 +4,34 @@ import {
|
|
|
4
4
|
tomlTableAt
|
|
5
5
|
} from "./chunk-LCGCVYZ4.js";
|
|
6
6
|
import {
|
|
7
|
-
discoverDeclaredChecksAtRoot,
|
|
8
7
|
verifyTool
|
|
9
|
-
} from "./chunk-
|
|
10
|
-
import
|
|
8
|
+
} from "./chunk-UFQ3F4FW.js";
|
|
9
|
+
import {
|
|
10
|
+
discoverDeclaredChecksAtRoot,
|
|
11
|
+
discoverDeclaredProjectEntriesAtRoot
|
|
12
|
+
} from "./chunk-PD3MESLB.js";
|
|
11
13
|
import {
|
|
12
14
|
PROJECT_VERIFIER_CATALOG_CAPS,
|
|
13
15
|
PROJECT_VERIFIER_CATALOG_RELATIVE_PATH,
|
|
14
16
|
PROJECT_VERIFIER_CATALOG_VERSION,
|
|
15
17
|
compareCodepoints,
|
|
16
|
-
loadProjectVerifierCatalog,
|
|
17
18
|
parseProjectVerifierCatalogText
|
|
18
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-GH5622CP.js";
|
|
19
20
|
import {
|
|
20
21
|
isVerificationScriptName
|
|
21
22
|
} from "./chunk-UL3WSD3F.js";
|
|
22
|
-
import "./chunk-VG7TBQIY.js";
|
|
23
|
-
import "./chunk-OQE5J4C6.js";
|
|
24
|
-
import "./chunk-ECH6PKUQ.js";
|
|
25
|
-
import "./chunk-6XLNIQDB.js";
|
|
26
|
-
import "./chunk-5B2AEOW5.js";
|
|
27
|
-
import "./chunk-CGKSTWHD.js";
|
|
28
|
-
import {
|
|
29
|
-
printError,
|
|
30
|
-
printOk
|
|
31
|
-
} from "./chunk-PPAMZ32Z.js";
|
|
32
|
-
import "./chunk-5TSRNF4G.js";
|
|
33
23
|
import {
|
|
34
24
|
SAFE_EXEC_DEFAULT_TIMEOUT_MS,
|
|
35
25
|
resolveSafeCwd
|
|
36
|
-
} from "./chunk-
|
|
37
|
-
import "./chunk-FQ4SKYE4.js";
|
|
38
|
-
import "./chunk-FCSXB6T2.js";
|
|
26
|
+
} from "./chunk-D4MDIG46.js";
|
|
39
27
|
import {
|
|
40
28
|
require_dist
|
|
41
29
|
} from "./chunk-APJ265NV.js";
|
|
42
|
-
import "./chunk-YXLYO42X.js";
|
|
43
|
-
import "./chunk-BNAZZHFG.js";
|
|
44
|
-
import "./chunk-6EJMN2Y3.js";
|
|
45
30
|
import {
|
|
46
31
|
__toESM,
|
|
47
32
|
init_esm_shims
|
|
48
33
|
} from "./chunk-3R73A4XB.js";
|
|
49
34
|
|
|
50
|
-
// src/cli/verifiers.ts
|
|
51
|
-
init_esm_shims();
|
|
52
|
-
|
|
53
35
|
// src/tools/verify/authoring.ts
|
|
54
36
|
init_esm_shims();
|
|
55
37
|
var import_yaml = __toESM(require_dist(), 1);
|
|
@@ -259,7 +241,7 @@ function pythonProposals(workspaceRoot, diagnostics) {
|
|
|
259
241
|
if (document === null) {
|
|
260
242
|
diagnostics.push(`${pyprojectPath}: invalid TOML; Python discovery skipped.`);
|
|
261
243
|
} else {
|
|
262
|
-
for (const [path2, section, module, id, description,
|
|
244
|
+
for (const [path2, section, module, id, description, tags] of [
|
|
263
245
|
[
|
|
264
246
|
["tool", "pytest", "ini_options"],
|
|
265
247
|
"tool.pytest.ini_options",
|
|
@@ -278,7 +260,7 @@ function pythonProposals(workspaceRoot, diagnostics) {
|
|
|
278
260
|
command: ["python", "-m", module],
|
|
279
261
|
cwd: ".",
|
|
280
262
|
timeoutMs: SAFE_EXEC_DEFAULT_TIMEOUT_MS,
|
|
281
|
-
tags: [...
|
|
263
|
+
tags: [...tags],
|
|
282
264
|
provenance: {
|
|
283
265
|
kind: "python-runner",
|
|
284
266
|
path: pyprojectPath,
|
|
@@ -343,6 +325,52 @@ function pythonProposals(workspaceRoot, diagnostics) {
|
|
|
343
325
|
}
|
|
344
326
|
return proposals;
|
|
345
327
|
}
|
|
328
|
+
function discoverDeclaredProjectCommands(workspaceRoot = process.cwd()) {
|
|
329
|
+
const commands = [];
|
|
330
|
+
const add = (id, command, pathValue, detail, kind) => {
|
|
331
|
+
commands.push({
|
|
332
|
+
id,
|
|
333
|
+
command,
|
|
334
|
+
provenance: { kind, path: pathValue, detail, authority: "project-declared" }
|
|
335
|
+
});
|
|
336
|
+
};
|
|
337
|
+
for (const entry of discoverDeclaredProjectEntriesAtRoot(workspaceRoot)) {
|
|
338
|
+
add(entry.id, entry.command, entry.path, entry.detail, entry.kind);
|
|
339
|
+
}
|
|
340
|
+
const pyprojectText = regularFileText(path.join(workspaceRoot, "pyproject.toml"), workspaceRoot);
|
|
341
|
+
if (typeof pyprojectText === "string") {
|
|
342
|
+
const document = parseTomlDocument(pyprojectText);
|
|
343
|
+
if (document !== null) {
|
|
344
|
+
for (const [tablePath, label] of [
|
|
345
|
+
[["project", "scripts"], "project.scripts"],
|
|
346
|
+
[["tool", "poetry", "scripts"], "tool.poetry.scripts"]
|
|
347
|
+
]) {
|
|
348
|
+
const scripts = tomlTableAt(document, tablePath);
|
|
349
|
+
if (scripts === null) continue;
|
|
350
|
+
for (const [name, target] of Object.entries(scripts).sort(([left], [right]) => compareCodepoints(left, right))) {
|
|
351
|
+
if (typeof target === "string") add(name, [name], "pyproject.toml", `[${label}] entry '${name}'`, "python-runner");
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
for (const [tablePath, module, id, label] of [
|
|
355
|
+
[["tool", "pytest", "ini_options"], "pytest", "pytest", "tool.pytest.ini_options"],
|
|
356
|
+
[["tool", "tox"], "tox", "tox", "tool.tox"],
|
|
357
|
+
[["tool", "nox"], "nox", "nox", "tool.nox"]
|
|
358
|
+
]) {
|
|
359
|
+
if (tomlTableAt(document, tablePath) !== null)
|
|
360
|
+
add(id, ["python", "-m", module], "pyproject.toml", `[${label}]`, "python-runner");
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
const seen = /* @__PURE__ */ new Set();
|
|
365
|
+
return commands.filter((entry) => {
|
|
366
|
+
let id = slug(entry.id, "command");
|
|
367
|
+
let suffix = 2;
|
|
368
|
+
while (seen.has(id)) id = `${slug(entry.id, "command")}-${suffix++}`;
|
|
369
|
+
seen.add(id);
|
|
370
|
+
entry.id = id;
|
|
371
|
+
return true;
|
|
372
|
+
});
|
|
373
|
+
}
|
|
346
374
|
function goProposals(workspaceRoot, diagnostics) {
|
|
347
375
|
const relative = "go.mod";
|
|
348
376
|
const text = regularFileText(path.join(workspaceRoot, relative), workspaceRoot);
|
|
@@ -506,14 +534,14 @@ function validationContractProposals(workspaceRoot, diagnostics) {
|
|
|
506
534
|
const description = typeof record?.description === "string" ? record.description : `Run validation contract command ${JSON.stringify(argv)}`;
|
|
507
535
|
const cwd = typeof record?.cwd === "string" ? record.cwd : ".";
|
|
508
536
|
const timeoutMs = typeof record?.timeoutMs === "number" ? record.timeoutMs : SAFE_EXEC_DEFAULT_TIMEOUT_MS;
|
|
509
|
-
const
|
|
537
|
+
const tags = Array.isArray(record?.tags) ? record.tags.filter((tag) => typeof tag === "string") : [];
|
|
510
538
|
proposals.push({
|
|
511
539
|
preferredId: declaredId,
|
|
512
540
|
description,
|
|
513
541
|
command: argv,
|
|
514
542
|
cwd,
|
|
515
543
|
timeoutMs,
|
|
516
|
-
tags:
|
|
544
|
+
tags: tags.length > 0 ? tags : ["scientific", "validation"],
|
|
517
545
|
provenance: {
|
|
518
546
|
kind: "validation-contract",
|
|
519
547
|
path: relative,
|
|
@@ -640,8 +668,8 @@ function createVerifierDraft(discovery, options = {}) {
|
|
|
640
668
|
...discovery.catalogText === void 0 ? {} : { catalogText: discovery.catalogText }
|
|
641
669
|
};
|
|
642
670
|
}
|
|
643
|
-
function catalogEntry({ id, description, command, cwd, timeoutMs, tags
|
|
644
|
-
return { id, description, command: [...command], cwd, timeoutMs, tags: [...
|
|
671
|
+
function catalogEntry({ id, description, command, cwd, timeoutMs, tags }) {
|
|
672
|
+
return { id, description, command: [...command], cwd, timeoutMs, tags: [...tags] };
|
|
645
673
|
}
|
|
646
674
|
function serializeVerifierDraft(draft) {
|
|
647
675
|
const checks = [...draft.checks].sort((left, right) => compareCodepoints(left.id, right.id));
|
|
@@ -925,296 +953,11 @@ async function runVerifierAuthoringWorkflow(options) {
|
|
|
925
953
|
};
|
|
926
954
|
}
|
|
927
955
|
|
|
928
|
-
// src/cli/verifiers.ts
|
|
929
|
-
var HELP = `Project verifier authoring
|
|
930
|
-
|
|
931
|
-
Usage:
|
|
932
|
-
clio-coder verifiers discover
|
|
933
|
-
clio-coder verifiers author [--exclude <id>] [--rename <old>=<new>] [--dry-run <id>] [--yes]
|
|
934
|
-
clio-coder verifiers validate
|
|
935
|
-
clio-coder verifiers dry-run <id>
|
|
936
|
-
clio-coder verifiers add --id <id> --description <text> --command <json-argv> [fields] [--yes]
|
|
937
|
-
clio-coder verifiers edit <id> [--description <text>] [--command <json-argv>] [fields] [--yes]
|
|
938
|
-
clio-coder verifiers rename <old> <new> [--yes]
|
|
939
|
-
clio-coder verifiers remove <id> [--yes]
|
|
940
|
-
|
|
941
|
-
Fields:
|
|
942
|
-
--cwd <path> repository-relative working directory (default .)
|
|
943
|
-
--timeout-ms <number> bounded timeout in milliseconds (default 120000)
|
|
944
|
-
--tags <a,b> comma-separated catalog tags
|
|
945
|
-
|
|
946
|
-
Discovery and every preview are read-only. Mutating commands write only with
|
|
947
|
-
--yes after printing the exact argv, cwd, timeout, tags, source provenance, and
|
|
948
|
-
effective execution authority. dry-run invokes the production verify path.
|
|
949
|
-
`;
|
|
950
|
-
var VALUE_OPTIONS = /* @__PURE__ */ new Set([
|
|
951
|
-
"--id",
|
|
952
|
-
"--description",
|
|
953
|
-
"--command",
|
|
954
|
-
"--cwd",
|
|
955
|
-
"--timeout-ms",
|
|
956
|
-
"--tags",
|
|
957
|
-
"--exclude",
|
|
958
|
-
"--rename",
|
|
959
|
-
"--dry-run"
|
|
960
|
-
]);
|
|
961
|
-
function parseAuthoringArgs(argv) {
|
|
962
|
-
const positional = [];
|
|
963
|
-
const values = /* @__PURE__ */ new Map();
|
|
964
|
-
let yes = false;
|
|
965
|
-
let help = false;
|
|
966
|
-
for (let index = 0; index < argv.length; index += 1) {
|
|
967
|
-
const arg = argv[index];
|
|
968
|
-
if (arg === "--yes") {
|
|
969
|
-
yes = true;
|
|
970
|
-
continue;
|
|
971
|
-
}
|
|
972
|
-
if (arg === "--help" || arg === "-h") {
|
|
973
|
-
help = true;
|
|
974
|
-
continue;
|
|
975
|
-
}
|
|
976
|
-
if (arg?.startsWith("--") === true) {
|
|
977
|
-
if (!VALUE_OPTIONS.has(arg)) return { yes, help, positional, values, error: `unknown option: ${arg}` };
|
|
978
|
-
const value = argv[index + 1];
|
|
979
|
-
if (value === void 0 || value.startsWith("--")) {
|
|
980
|
-
return { yes, help, positional, values, error: `${arg} requires a value` };
|
|
981
|
-
}
|
|
982
|
-
const prior = values.get(arg) ?? [];
|
|
983
|
-
prior.push(value);
|
|
984
|
-
values.set(arg, prior);
|
|
985
|
-
index += 1;
|
|
986
|
-
continue;
|
|
987
|
-
}
|
|
988
|
-
if (arg !== void 0) positional.push(arg);
|
|
989
|
-
}
|
|
990
|
-
return { yes, help, positional, values };
|
|
991
|
-
}
|
|
992
|
-
function oneValue(parsed, option) {
|
|
993
|
-
return parsed.values.get(option)?.at(-1);
|
|
994
|
-
}
|
|
995
|
-
function parseCommand(value) {
|
|
996
|
-
if (value === void 0) return new Error("--command is required and must be a JSON argv array");
|
|
997
|
-
let parsed;
|
|
998
|
-
try {
|
|
999
|
-
parsed = JSON.parse(value);
|
|
1000
|
-
} catch (error) {
|
|
1001
|
-
return new Error(`--command must be valid JSON: ${error instanceof Error ? error.message : String(error)}`);
|
|
1002
|
-
}
|
|
1003
|
-
if (!Array.isArray(parsed) || parsed.length === 0 || parsed.some((entry) => typeof entry !== "string")) {
|
|
1004
|
-
return new Error("--command must be a non-empty JSON string array");
|
|
1005
|
-
}
|
|
1006
|
-
return parsed;
|
|
1007
|
-
}
|
|
1008
|
-
function parseTimeout(value) {
|
|
1009
|
-
if (value === void 0) return SAFE_EXEC_DEFAULT_TIMEOUT_MS;
|
|
1010
|
-
const parsed = Number(value);
|
|
1011
|
-
if (!Number.isInteger(parsed) || parsed <= 0) return new Error("--timeout-ms must be a positive integer");
|
|
1012
|
-
return parsed;
|
|
1013
|
-
}
|
|
1014
|
-
function tags(value) {
|
|
1015
|
-
return value === void 0 ? [] : value.split(",").map((tag) => tag.trim()).filter((tag) => tag.length > 0);
|
|
1016
|
-
}
|
|
1017
|
-
function requiredValue(parsed, option) {
|
|
1018
|
-
const value = oneValue(parsed, option);
|
|
1019
|
-
return value === void 0 || value.length === 0 ? new Error(`${option} is required`) : value;
|
|
1020
|
-
}
|
|
1021
|
-
function authorRevisions(parsed) {
|
|
1022
|
-
const revisions = [];
|
|
1023
|
-
for (const id of parsed.values.get("--exclude") ?? []) revisions.push({ kind: "remove", id });
|
|
1024
|
-
for (const rename of parsed.values.get("--rename") ?? []) {
|
|
1025
|
-
const separator = rename.indexOf("=");
|
|
1026
|
-
if (separator <= 0 || separator === rename.length - 1) {
|
|
1027
|
-
return new Error("--rename must use <old>=<new>");
|
|
1028
|
-
}
|
|
1029
|
-
revisions.push({ kind: "rename", id: rename.slice(0, separator), newId: rename.slice(separator + 1) });
|
|
1030
|
-
}
|
|
1031
|
-
return revisions;
|
|
1032
|
-
}
|
|
1033
|
-
function addRevision(parsed) {
|
|
1034
|
-
const id = requiredValue(parsed, "--id");
|
|
1035
|
-
if (id instanceof Error) return id;
|
|
1036
|
-
const description = requiredValue(parsed, "--description");
|
|
1037
|
-
if (description instanceof Error) return description;
|
|
1038
|
-
const command = parseCommand(oneValue(parsed, "--command"));
|
|
1039
|
-
if (command instanceof Error) return command;
|
|
1040
|
-
const timeoutMs = parseTimeout(oneValue(parsed, "--timeout-ms"));
|
|
1041
|
-
if (timeoutMs instanceof Error) return timeoutMs;
|
|
1042
|
-
return {
|
|
1043
|
-
kind: "add",
|
|
1044
|
-
check: {
|
|
1045
|
-
id,
|
|
1046
|
-
description,
|
|
1047
|
-
command,
|
|
1048
|
-
cwd: oneValue(parsed, "--cwd") ?? ".",
|
|
1049
|
-
timeoutMs,
|
|
1050
|
-
tags: tags(oneValue(parsed, "--tags"))
|
|
1051
|
-
}
|
|
1052
|
-
};
|
|
1053
|
-
}
|
|
1054
|
-
function editRevision(parsed) {
|
|
1055
|
-
const id = parsed.positional[1];
|
|
1056
|
-
if (id === void 0) return new Error("edit requires a check ID");
|
|
1057
|
-
const changes = {};
|
|
1058
|
-
const description = oneValue(parsed, "--description");
|
|
1059
|
-
if (description !== void 0) changes.description = description;
|
|
1060
|
-
const commandValue = oneValue(parsed, "--command");
|
|
1061
|
-
if (commandValue !== void 0) {
|
|
1062
|
-
const command = parseCommand(commandValue);
|
|
1063
|
-
if (command instanceof Error) return command;
|
|
1064
|
-
changes.command = command;
|
|
1065
|
-
}
|
|
1066
|
-
const cwd = oneValue(parsed, "--cwd");
|
|
1067
|
-
if (cwd !== void 0) changes.cwd = cwd;
|
|
1068
|
-
const timeoutValue = oneValue(parsed, "--timeout-ms");
|
|
1069
|
-
if (timeoutValue !== void 0) {
|
|
1070
|
-
const timeoutMs = parseTimeout(timeoutValue);
|
|
1071
|
-
if (timeoutMs instanceof Error) return timeoutMs;
|
|
1072
|
-
changes.timeoutMs = timeoutMs;
|
|
1073
|
-
}
|
|
1074
|
-
const tagValue = oneValue(parsed, "--tags");
|
|
1075
|
-
if (tagValue !== void 0) changes.tags = tags(tagValue);
|
|
1076
|
-
if (Object.keys(changes).length === 0) return new Error("edit requires at least one changed field");
|
|
1077
|
-
return { kind: "edit", id, changes };
|
|
1078
|
-
}
|
|
1079
|
-
function mutationRevision(parsed) {
|
|
1080
|
-
const command = parsed.positional[0];
|
|
1081
|
-
if (command === "add") return addRevision(parsed);
|
|
1082
|
-
if (command === "edit") return editRevision(parsed);
|
|
1083
|
-
if (command === "rename") {
|
|
1084
|
-
const id = parsed.positional[1];
|
|
1085
|
-
const newId = parsed.positional[2];
|
|
1086
|
-
if (id === void 0 || newId === void 0) return new Error("rename requires <old> and <new> IDs");
|
|
1087
|
-
return { kind: "rename", id, newId };
|
|
1088
|
-
}
|
|
1089
|
-
if (command === "remove") {
|
|
1090
|
-
const id = parsed.positional[1];
|
|
1091
|
-
if (id === void 0) return new Error("remove requires a check ID");
|
|
1092
|
-
return { kind: "remove", id };
|
|
1093
|
-
}
|
|
1094
|
-
return new Error(`unknown verifiers command: ${command ?? "(none)"}`);
|
|
1095
|
-
}
|
|
1096
|
-
function printDryRun(id, result) {
|
|
1097
|
-
if (result.kind === "error") {
|
|
1098
|
-
printError(`dry-run '${id}' failed: ${result.message}`);
|
|
1099
|
-
return 1;
|
|
1100
|
-
}
|
|
1101
|
-
process.stdout.write(`Dry run '${id}':
|
|
1102
|
-
${result.output}${result.output.endsWith("\n") ? "" : "\n"}`);
|
|
1103
|
-
return 0;
|
|
1104
|
-
}
|
|
1105
|
-
async function executeWorkflow(parsed, options) {
|
|
1106
|
-
let printedPreview = false;
|
|
1107
|
-
const dryRunCheckIds = parsed.values.get("--dry-run") ?? [];
|
|
1108
|
-
const result = await runVerifierAuthoringWorkflow({
|
|
1109
|
-
includeProposals: options.includeProposals,
|
|
1110
|
-
initialRevisions: options.revisions,
|
|
1111
|
-
confirmed: parsed.yes,
|
|
1112
|
-
decide(context) {
|
|
1113
|
-
process.stdout.write(`${context.preview}
|
|
1114
|
-
`);
|
|
1115
|
-
printedPreview = true;
|
|
1116
|
-
if (!parsed.yes || context.draft.checks.length === 0 && options.revisions.length === 0) {
|
|
1117
|
-
return { kind: "reject" };
|
|
1118
|
-
}
|
|
1119
|
-
return { kind: "confirm", dryRunCheckIds };
|
|
1120
|
-
}
|
|
1121
|
-
});
|
|
1122
|
-
if (result.status === "invalid") {
|
|
1123
|
-
if (!printedPreview && result.preview !== void 0) process.stdout.write(`${result.preview}
|
|
1124
|
-
`);
|
|
1125
|
-
printError(result.reason);
|
|
1126
|
-
if (result.wrote && result.path !== void 0) {
|
|
1127
|
-
process.stderr.write(` ${result.path} was written; repair or remove it before running a check.
|
|
1128
|
-
`);
|
|
1129
|
-
}
|
|
1130
|
-
return 1;
|
|
1131
|
-
}
|
|
1132
|
-
if (result.status === "rejected") {
|
|
1133
|
-
if (!parsed.yes) {
|
|
1134
|
-
process.stdout.write("Review complete. Nothing changed; rerun the same command with --yes to write this preview.\n");
|
|
1135
|
-
} else {
|
|
1136
|
-
process.stdout.write(
|
|
1137
|
-
"Nothing changed because the preview contains no catalog checks. Package checks remain active; unsupported commands can be added with `clio-coder verifiers add`.\n"
|
|
1138
|
-
);
|
|
1139
|
-
}
|
|
1140
|
-
return 0;
|
|
1141
|
-
}
|
|
1142
|
-
printOk(`wrote ${result.path}; production parser accepted the catalog`);
|
|
1143
|
-
let code = 0;
|
|
1144
|
-
for (const dryRun of result.dryRuns) code = Math.max(code, printDryRun(dryRun.id, dryRun.result));
|
|
1145
|
-
return code;
|
|
1146
|
-
}
|
|
1147
|
-
async function discoverCommand() {
|
|
1148
|
-
const discovery = discoverVerifierAuthoring();
|
|
1149
|
-
if (!discovery.ok) {
|
|
1150
|
-
printError(discovery.reason);
|
|
1151
|
-
process.stderr.write(`${discovery.manualEntry}
|
|
1152
|
-
`);
|
|
1153
|
-
return 1;
|
|
1154
|
-
}
|
|
1155
|
-
process.stdout.write(`${previewVerifierDraft(createVerifierDraft(discovery))}
|
|
1156
|
-
`);
|
|
1157
|
-
return 0;
|
|
1158
|
-
}
|
|
1159
|
-
function validateCommand() {
|
|
1160
|
-
const loaded = loadProjectVerifierCatalog(process.cwd());
|
|
1161
|
-
if (!loaded.ok) {
|
|
1162
|
-
printError(`production catalog parser rejected ${loaded.reason}`);
|
|
1163
|
-
return 1;
|
|
1164
|
-
}
|
|
1165
|
-
if (loaded.source === null) {
|
|
1166
|
-
process.stdout.write(`No ${PROJECT_VERIFIER_CATALOG_RELATIVE_PATH} exists. Run \`clio-coder verifiers author\`.
|
|
1167
|
-
`);
|
|
1168
|
-
return 0;
|
|
1169
|
-
}
|
|
1170
|
-
printOk(
|
|
1171
|
-
`production catalog parser accepted ${PROJECT_VERIFIER_CATALOG_RELATIVE_PATH} (${loaded.source.checks.length} check${loaded.source.checks.length === 1 ? "" : "s"})`
|
|
1172
|
-
);
|
|
1173
|
-
return 0;
|
|
1174
|
-
}
|
|
1175
|
-
async function runVerifiersCommand(argv) {
|
|
1176
|
-
const parsed = parseAuthoringArgs(argv);
|
|
1177
|
-
if (parsed.error !== void 0) {
|
|
1178
|
-
printError(parsed.error);
|
|
1179
|
-
process.stderr.write(HELP);
|
|
1180
|
-
return 2;
|
|
1181
|
-
}
|
|
1182
|
-
if (parsed.help || parsed.positional.length === 0) {
|
|
1183
|
-
process.stdout.write(HELP);
|
|
1184
|
-
return 0;
|
|
1185
|
-
}
|
|
1186
|
-
const command = parsed.positional[0];
|
|
1187
|
-
if (command === "discover") return discoverCommand();
|
|
1188
|
-
if (command === "validate") return validateCommand();
|
|
1189
|
-
if (command === "dry-run") {
|
|
1190
|
-
const id = parsed.positional[1];
|
|
1191
|
-
if (id === void 0) {
|
|
1192
|
-
printError("dry-run requires a check ID");
|
|
1193
|
-
return 2;
|
|
1194
|
-
}
|
|
1195
|
-
return printDryRun(id, await verifyTool.run({ check: id }));
|
|
1196
|
-
}
|
|
1197
|
-
if (command === "author") {
|
|
1198
|
-
const revisions = authorRevisions(parsed);
|
|
1199
|
-
if (revisions instanceof Error) {
|
|
1200
|
-
printError(revisions.message);
|
|
1201
|
-
return 2;
|
|
1202
|
-
}
|
|
1203
|
-
return executeWorkflow(parsed, { includeProposals: true, revisions });
|
|
1204
|
-
}
|
|
1205
|
-
if (["add", "edit", "rename", "remove"].includes(command ?? "")) {
|
|
1206
|
-
const revision = mutationRevision(parsed);
|
|
1207
|
-
if (revision instanceof Error) {
|
|
1208
|
-
printError(revision.message);
|
|
1209
|
-
return 2;
|
|
1210
|
-
}
|
|
1211
|
-
return executeWorkflow(parsed, { includeProposals: false, revisions: [revision] });
|
|
1212
|
-
}
|
|
1213
|
-
printError(`unknown verifiers command: ${command}`);
|
|
1214
|
-
process.stderr.write(HELP);
|
|
1215
|
-
return 2;
|
|
1216
|
-
}
|
|
1217
956
|
export {
|
|
1218
|
-
|
|
957
|
+
discoverDeclaredProjectCommands,
|
|
958
|
+
discoverVerifierAuthoring,
|
|
959
|
+
createVerifierDraft,
|
|
960
|
+
previewVerifierDraft,
|
|
961
|
+
runVerifierAuthoringWorkflow
|
|
1219
962
|
};
|
|
1220
|
-
//# sourceMappingURL=
|
|
963
|
+
//# sourceMappingURL=chunk-YTYFXUI3.js.map
|