@duo-director/cli 0.2.1 → 0.2.2
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/dist/THIRD_PARTY_NOTICES.md +3 -3
- package/dist/{cli-WTCBCBVN.js → cli-QTN5SRNE.js} +61 -15
- package/dist/duoctl.js +1 -1
- package/dist/runtime-tree.json +12 -12
- package/dist/ui/app.js +2 -2
- package/node_modules/@modelcontextprotocol/client/dist/{index-CEk3qkZM.d.cts → index-D_CiY-T3.d.cts} +3 -1
- package/node_modules/@modelcontextprotocol/client/dist/index-D_CiY-T3.d.cts.map +1 -0
- package/node_modules/@modelcontextprotocol/client/dist/{index-BCtJi0p5.d.mts → index-D_QDtbiv.d.mts} +3 -1
- package/node_modules/@modelcontextprotocol/client/dist/index-D_QDtbiv.d.mts.map +1 -0
- package/node_modules/@modelcontextprotocol/client/dist/index.cjs +100 -55
- package/node_modules/@modelcontextprotocol/client/dist/index.cjs.map +1 -1
- package/node_modules/@modelcontextprotocol/client/dist/index.d.cts +157 -30
- package/node_modules/@modelcontextprotocol/client/dist/index.d.cts.map +1 -1
- package/node_modules/@modelcontextprotocol/client/dist/index.d.mts +157 -30
- package/node_modules/@modelcontextprotocol/client/dist/index.d.mts.map +1 -1
- package/node_modules/@modelcontextprotocol/client/dist/index.mjs +100 -55
- package/node_modules/@modelcontextprotocol/client/dist/index.mjs.map +1 -1
- package/node_modules/@modelcontextprotocol/client/dist/shimsWorkerd.cjs +1 -1
- package/node_modules/@modelcontextprotocol/client/dist/shimsWorkerd.mjs +1 -1
- package/node_modules/@modelcontextprotocol/client/dist/{src-D0qEN74R.cjs → src-oZBjf3U1.cjs} +21 -4
- package/node_modules/@modelcontextprotocol/client/dist/src-oZBjf3U1.cjs.map +1 -0
- package/node_modules/@modelcontextprotocol/client/dist/{src-DDAAhLnO.mjs → src-xKF0PJN-.mjs} +16 -5
- package/node_modules/@modelcontextprotocol/client/dist/src-xKF0PJN-.mjs.map +1 -0
- package/node_modules/@modelcontextprotocol/client/dist/stdio.cjs +1 -1
- package/node_modules/@modelcontextprotocol/client/dist/stdio.d.cts +1 -1
- package/node_modules/@modelcontextprotocol/client/dist/stdio.d.mts +1 -1
- package/node_modules/@modelcontextprotocol/client/dist/stdio.mjs +1 -1
- package/node_modules/@modelcontextprotocol/client/package.json +3 -3
- package/node_modules/@modelcontextprotocol/core/dist/{auth--n_Yzytt.d.cts → auth-Anm-lwWi.d.mts} +9 -8
- package/node_modules/@modelcontextprotocol/core/dist/{auth--n_Yzytt.d.cts.map → auth-Anm-lwWi.d.mts.map} +1 -1
- package/node_modules/@modelcontextprotocol/core/dist/{auth-CGP0BDVq.mjs → auth-BNDyLTqp.mjs} +5 -3
- package/node_modules/@modelcontextprotocol/core/dist/{auth-CGP0BDVq.mjs.map → auth-BNDyLTqp.mjs.map} +1 -1
- package/node_modules/@modelcontextprotocol/core/dist/{auth-4-zilcqg.cjs → auth-D1CeV_Jr.cjs} +5 -3
- package/node_modules/@modelcontextprotocol/core/dist/{auth-4-zilcqg.cjs.map → auth-D1CeV_Jr.cjs.map} +1 -1
- package/node_modules/@modelcontextprotocol/core/dist/{auth-YUQV3RRv.d.mts → auth-V9XJSCfa.d.cts} +9 -8
- package/node_modules/@modelcontextprotocol/core/dist/{auth-YUQV3RRv.d.mts.map → auth-V9XJSCfa.d.cts.map} +1 -1
- package/node_modules/@modelcontextprotocol/core/dist/index.cjs +1 -1
- package/node_modules/@modelcontextprotocol/core/dist/index.d.cts +1 -1
- package/node_modules/@modelcontextprotocol/core/dist/index.d.mts +1 -1
- package/node_modules/@modelcontextprotocol/core/dist/index.mjs +1 -1
- package/node_modules/@modelcontextprotocol/core/dist/internal.cjs +1 -1
- package/node_modules/@modelcontextprotocol/core/dist/internal.d.cts +1 -1
- package/node_modules/@modelcontextprotocol/core/dist/internal.d.mts +1 -1
- package/node_modules/@modelcontextprotocol/core/dist/internal.mjs +1 -1
- package/node_modules/@modelcontextprotocol/core/package.json +1 -1
- package/node_modules/@modelcontextprotocol/server/dist/{createMcpHandler-Bt6U_Fqb.d.mts → createMcpHandler-CfX6zgs1.d.mts} +3 -1
- package/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-CfX6zgs1.d.mts.map +1 -0
- package/node_modules/@modelcontextprotocol/server/dist/{createMcpHandler-BLVe3qmU.d.cts → createMcpHandler-LSKhyqpU.d.cts} +3 -1
- package/node_modules/@modelcontextprotocol/server/dist/{createMcpHandler-BLVe3qmU.d.cts.map → createMcpHandler-LSKhyqpU.d.cts.map} +1 -1
- package/node_modules/@modelcontextprotocol/server/dist/index.cjs +5 -3
- package/node_modules/@modelcontextprotocol/server/dist/index.cjs.map +1 -1
- package/node_modules/@modelcontextprotocol/server/dist/index.d.cts +1 -1
- package/node_modules/@modelcontextprotocol/server/dist/index.d.mts +1 -1
- package/node_modules/@modelcontextprotocol/server/dist/index.d.mts.map +1 -1
- package/node_modules/@modelcontextprotocol/server/dist/index.mjs +5 -3
- package/node_modules/@modelcontextprotocol/server/dist/index.mjs.map +1 -1
- package/node_modules/@modelcontextprotocol/server/dist/{mcp-Dw2OlZ1f.mjs → mcp-DYuW2ZSs.mjs} +6 -2
- package/node_modules/@modelcontextprotocol/server/dist/mcp-DYuW2ZSs.mjs.map +1 -0
- package/node_modules/@modelcontextprotocol/server/dist/{mcp-DUcCQSTW.cjs → mcp-TfXCpFsH.cjs} +6 -2
- package/node_modules/@modelcontextprotocol/server/dist/mcp-TfXCpFsH.cjs.map +1 -0
- package/node_modules/@modelcontextprotocol/server/dist/shimsWorkerd.cjs +1 -1
- package/node_modules/@modelcontextprotocol/server/dist/shimsWorkerd.mjs +1 -1
- package/node_modules/@modelcontextprotocol/server/dist/{src-D-y6h4N7.mjs → src-BHSMhZ_W.mjs} +8 -4
- package/node_modules/@modelcontextprotocol/server/dist/src-BHSMhZ_W.mjs.map +1 -0
- package/node_modules/@modelcontextprotocol/server/dist/{src-CgFsfg3E.cjs → src-BtQ5YSyq.cjs} +8 -4
- package/node_modules/@modelcontextprotocol/server/dist/src-BtQ5YSyq.cjs.map +1 -0
- package/node_modules/@modelcontextprotocol/server/dist/stdio.cjs +2 -2
- package/node_modules/@modelcontextprotocol/server/dist/stdio.d.cts +1 -1
- package/node_modules/@modelcontextprotocol/server/dist/stdio.d.mts +1 -1
- package/node_modules/@modelcontextprotocol/server/dist/stdio.mjs +2 -2
- package/node_modules/@modelcontextprotocol/server/package.json +3 -3
- package/package.json +3 -3
- package/node_modules/@modelcontextprotocol/client/dist/index-BCtJi0p5.d.mts.map +0 -1
- package/node_modules/@modelcontextprotocol/client/dist/index-CEk3qkZM.d.cts.map +0 -1
- package/node_modules/@modelcontextprotocol/client/dist/src-D0qEN74R.cjs.map +0 -1
- package/node_modules/@modelcontextprotocol/client/dist/src-DDAAhLnO.mjs.map +0 -1
- package/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-Bt6U_Fqb.d.mts.map +0 -1
- package/node_modules/@modelcontextprotocol/server/dist/mcp-DUcCQSTW.cjs.map +0 -1
- package/node_modules/@modelcontextprotocol/server/dist/mcp-Dw2OlZ1f.mjs.map +0 -1
- package/node_modules/@modelcontextprotocol/server/dist/src-CgFsfg3E.cjs.map +0 -1
- package/node_modules/@modelcontextprotocol/server/dist/src-D-y6h4N7.mjs.map +0 -1
|
@@ -97,7 +97,7 @@ Each WASM file is accompanied by its license in dist/grammars/LICENSE-<package>;
|
|
|
97
97
|
|
|
98
98
|
These packages are inside this package (bundleDependencies): the release lock installed from registry.npmjs.org, files unchanged, each package with its own license files in node_modules/. A file a package publishes outside its own "files" list is not packed by npm (listed as notPacked). Paths, versions, integrity and content hashes are in dist/runtime-tree.json.
|
|
99
99
|
|
|
100
|
-
### @modelcontextprotocol/client@2.
|
|
100
|
+
### @modelcontextprotocol/client@2.2.0 (MIT)
|
|
101
101
|
|
|
102
102
|
node_modules/@modelcontextprotocol/client/LICENSE:
|
|
103
103
|
|
|
@@ -320,7 +320,7 @@ CC-BY-4.0. See https://creativecommons.org/licenses/by/4.0/legalcode for
|
|
|
320
320
|
the full license text.
|
|
321
321
|
```
|
|
322
322
|
|
|
323
|
-
### @modelcontextprotocol/core@2.
|
|
323
|
+
### @modelcontextprotocol/core@2.2.0 (MIT)
|
|
324
324
|
|
|
325
325
|
node_modules/@modelcontextprotocol/core/LICENSE:
|
|
326
326
|
|
|
@@ -543,7 +543,7 @@ CC-BY-4.0. See https://creativecommons.org/licenses/by/4.0/legalcode for
|
|
|
543
543
|
the full license text.
|
|
544
544
|
```
|
|
545
545
|
|
|
546
|
-
### @modelcontextprotocol/server@2.
|
|
546
|
+
### @modelcontextprotocol/server@2.2.0 (MIT)
|
|
547
547
|
|
|
548
548
|
node_modules/@modelcontextprotocol/server/LICENSE:
|
|
549
549
|
|
|
@@ -159,6 +159,8 @@ var DIAGNOSTIC_SEVERITY = {
|
|
|
159
159
|
DECISION_LOCK_BUSY: "error",
|
|
160
160
|
/** A confirmed Decision's lock.digest does not match its content fields (a detection aid, not a signature). */
|
|
161
161
|
DECISION_LOCK_MISMATCH: "warning",
|
|
162
|
+
/** T40 (N1): an authoritative operation refused partial Project Truth; the loader errors follow it. */
|
|
163
|
+
PROJECT_TRUTH_INVALID: "error",
|
|
162
164
|
/** A SourceLocation that does not address its canonical source text (a producer bug, T09.1). */
|
|
163
165
|
SOURCE_LOCATION_INVALID: "error",
|
|
164
166
|
/** Context Compiler: the request cannot be compiled (empty task, budget out of range or below the packet frame, unknown profile). */
|
|
@@ -298,6 +300,7 @@ var DIAGNOSTIC_PERSISTENCE = {
|
|
|
298
300
|
DECISION_TARGET_UNSUPPORTED: T,
|
|
299
301
|
DECISION_SUPERSEDE_TARGET_INVALID: T,
|
|
300
302
|
DECISION_LOCK_BUSY: T,
|
|
303
|
+
PROJECT_TRUTH_INVALID: T,
|
|
301
304
|
DECISION_LOCK_MISMATCH: P,
|
|
302
305
|
SOURCE_LOCATION_INVALID: P,
|
|
303
306
|
CONTEXT_REQUEST_INVALID: T,
|
|
@@ -2183,6 +2186,23 @@ function loadProjectTruth(root, options = {}) {
|
|
|
2183
2186
|
return { value: { truth, trace: trace2.model }, diagnostics: diagnostics.sort(compareDiagnostics) };
|
|
2184
2187
|
}
|
|
2185
2188
|
|
|
2189
|
+
// packages/core/dist/loader/authority.js
|
|
2190
|
+
var NON_BLOCKING_TRUTH_ERRORS = /* @__PURE__ */ new Set(["BROKEN_REFERENCE", "REFERENCE_TYPE_MISMATCH"]);
|
|
2191
|
+
function truthAuthorityErrors(diagnostics) {
|
|
2192
|
+
return diagnostics.filter((d) => d.severity === "error" && !NON_BLOCKING_TRUTH_ERRORS.has(d.code));
|
|
2193
|
+
}
|
|
2194
|
+
function projectTruthInvalid(errors) {
|
|
2195
|
+
const files = [...new Set(errors.map((e) => e.source?.path).filter((p) => p !== void 0))];
|
|
2196
|
+
const where = files.length === 0 ? "" : `: ${files.slice(0, 3).join(", ")}${files.length > 3 ? ` and ${files.length - 3} more` : ""}`;
|
|
2197
|
+
return createDiagnostic("PROJECT_TRUTH_INVALID", `Project Truth could not be read completely (${errors.length} error${errors.length === 1 ? "" : "s"}${where}). DUO does not review, compile context or change Decisions on partial Truth. Fix the file; DUO does not change it.`);
|
|
2198
|
+
}
|
|
2199
|
+
function requireCompleteTruth(loaded) {
|
|
2200
|
+
if (loaded.value === void 0)
|
|
2201
|
+
return loaded;
|
|
2202
|
+
const errors = truthAuthorityErrors(loaded.diagnostics);
|
|
2203
|
+
return errors.length === 0 ? loaded : { diagnostics: [projectTruthInvalid(errors), ...errors] };
|
|
2204
|
+
}
|
|
2205
|
+
|
|
2186
2206
|
// packages/core/dist/decisions/service.js
|
|
2187
2207
|
import os from "node:os";
|
|
2188
2208
|
|
|
@@ -2419,8 +2439,9 @@ function createDecisionService(options) {
|
|
|
2419
2439
|
await fs28.remove(file);
|
|
2420
2440
|
}
|
|
2421
2441
|
}
|
|
2422
|
-
function load() {
|
|
2423
|
-
const
|
|
2442
|
+
function load(complete = true) {
|
|
2443
|
+
const raw = loadProjectTruth(root);
|
|
2444
|
+
const loaded = complete ? requireCompleteTruth(raw) : raw;
|
|
2424
2445
|
return loaded.value === void 0 ? failure(loaded.diagnostics) : success(loaded.value.truth, loaded.diagnostics);
|
|
2425
2446
|
}
|
|
2426
2447
|
const isServiceFile = (d) => d.location.path === decisionPath(d.id);
|
|
@@ -2475,13 +2496,13 @@ function createDecisionService(options) {
|
|
|
2475
2496
|
}
|
|
2476
2497
|
return { repaired, diagnostics };
|
|
2477
2498
|
}
|
|
2478
|
-
async function prepare() {
|
|
2479
|
-
let loaded = load();
|
|
2499
|
+
async function prepare(complete = true) {
|
|
2500
|
+
let loaded = load(complete);
|
|
2480
2501
|
if (loaded.value === void 0)
|
|
2481
2502
|
return failure(loaded.diagnostics);
|
|
2482
2503
|
const fixed = await repairWith(loaded.value);
|
|
2483
2504
|
if (fixed.repaired.length > 0) {
|
|
2484
|
-
loaded = load();
|
|
2505
|
+
loaded = load(complete);
|
|
2485
2506
|
if (loaded.value === void 0)
|
|
2486
2507
|
return failure(loaded.diagnostics);
|
|
2487
2508
|
}
|
|
@@ -2541,7 +2562,7 @@ function createDecisionService(options) {
|
|
|
2541
2562
|
if (denied.length > 0)
|
|
2542
2563
|
return failure(denied);
|
|
2543
2564
|
return withLock(async () => {
|
|
2544
|
-
const prepared = await prepare();
|
|
2565
|
+
const prepared = await prepare(false);
|
|
2545
2566
|
if (prepared.value === void 0)
|
|
2546
2567
|
return failure(prepared.diagnostics);
|
|
2547
2568
|
const { truth, repaired } = prepared.value;
|
|
@@ -11017,7 +11038,7 @@ async function captureAdoptionBaseline(root, options) {
|
|
|
11017
11038
|
if (options.actor.kind !== "human") {
|
|
11018
11039
|
return failure([createDiagnostic("ADOPTION_FORBIDDEN", `${options.actor.kind} "${options.actor.name}" cannot capture the Adoption Baseline; adoption is a human decision`)]);
|
|
11019
11040
|
}
|
|
11020
|
-
const loaded = loadProjectTruth(root);
|
|
11041
|
+
const loaded = requireCompleteTruth(loadProjectTruth(root));
|
|
11021
11042
|
if (loaded.value === void 0)
|
|
11022
11043
|
return failure(loaded.diagnostics);
|
|
11023
11044
|
const { truth } = loaded.value;
|
|
@@ -12739,7 +12760,7 @@ async function compileContext(root, request, options) {
|
|
|
12739
12760
|
const idle = (status, signals, extra = {}) => success({ status, freshness, signals, cache: { status: "off", written: false }, performance: perf(), diagnostics: canonicalDiagnostics(diagnostics), ...extra }, canonicalDiagnostics(diagnostics));
|
|
12740
12761
|
if (inspected.value.status !== "current")
|
|
12741
12762
|
return idle("index-required", []);
|
|
12742
|
-
const loaded = loadProjectTruth(root);
|
|
12763
|
+
const loaded = requireCompleteTruth(loadProjectTruth(root));
|
|
12743
12764
|
if (loaded.value === void 0)
|
|
12744
12765
|
return failure(loaded.diagnostics);
|
|
12745
12766
|
const { truth } = loaded.value;
|
|
@@ -14773,7 +14794,7 @@ async function reviewChanges(root, request, options) {
|
|
|
14773
14794
|
if (inspected.value.status !== "current") {
|
|
14774
14795
|
return success({ result: { format: "duo.review/1", status: "index-required", request: requestIdentity, baseline, freshness, seeds: [], verdictBasis: { blocking: [], ask: [], warn: [] }, claims: [], evidence: [], limitations: [], semanticAssist: noAssist, metrics: zeroMetrics, diagnostics: [] }, performance: perf() });
|
|
14775
14796
|
}
|
|
14776
|
-
const loaded = loadProjectTruth(root);
|
|
14797
|
+
const loaded = requireCompleteTruth(loadProjectTruth(root));
|
|
14777
14798
|
if (loaded.value === void 0)
|
|
14778
14799
|
return { diagnostics: loaded.diagnostics };
|
|
14779
14800
|
const { truth } = loaded.value;
|
|
@@ -15410,7 +15431,7 @@ async function withGraphWriter(root, fn) {
|
|
|
15410
15431
|
function project(root) {
|
|
15411
15432
|
const loaded = loadProjectTruth(root);
|
|
15412
15433
|
if (loaded.value !== void 0)
|
|
15413
|
-
return { value: loaded.value };
|
|
15434
|
+
return { value: loaded.value, diagnostics: loaded.diagnostics };
|
|
15414
15435
|
const missing = loaded.diagnostics.some((d) => d.code === "PROJECT_FILE_MISSING");
|
|
15415
15436
|
return { outcome: missing ? { kind: "not-initialized", diagnostics: loaded.diagnostics } : { kind: "failed", diagnostics: loaded.diagnostics } };
|
|
15416
15437
|
}
|
|
@@ -15433,6 +15454,7 @@ function projectStatus(root, options = {}) {
|
|
|
15433
15454
|
if (p.value === void 0)
|
|
15434
15455
|
return p.outcome;
|
|
15435
15456
|
const { truth } = p.value;
|
|
15457
|
+
const truthErrors = truthAuthorityErrors(p.diagnostics ?? []);
|
|
15436
15458
|
const inspection = await withRegistry(options.registry, (registry) => withGraphReader(root, (graph) => inspectIndex(root, { graph, registry })));
|
|
15437
15459
|
const baseline = await getAdoptionBaselineStatus(root);
|
|
15438
15460
|
const pending = listDecisionProposals(truth).filter((e) => e.status === "pending");
|
|
@@ -15441,12 +15463,19 @@ function projectStatus(root, options = {}) {
|
|
|
15441
15463
|
const llm = llmPoolOf(options).forConfig(truth.config.llm);
|
|
15442
15464
|
return {
|
|
15443
15465
|
kind: "ok",
|
|
15444
|
-
diagnostics: errorsOf([...inspection.diagnostics, ...baseline.diagnostics]),
|
|
15466
|
+
diagnostics: errorsOf([...truthErrors, ...inspection.diagnostics, ...baseline.diagnostics]),
|
|
15445
15467
|
payload: {
|
|
15446
15468
|
format: STATUS_FORMAT,
|
|
15447
15469
|
initialized: true,
|
|
15448
15470
|
project: { name: truth.config.name, vision: truth.vision?.status ?? "missing", currentMilestone: truth.config.currentMilestone },
|
|
15449
|
-
truth: {
|
|
15471
|
+
truth: {
|
|
15472
|
+
requirements: truth.requirements.length,
|
|
15473
|
+
decisions: truth.decisions.length,
|
|
15474
|
+
constraints: truth.constraints.length,
|
|
15475
|
+
declaredGaps: truth.gaps.length,
|
|
15476
|
+
// T40 (additive): loader errors that make review, context and Decision confirm refuse this Truth. Empty when Truth loaded completely.
|
|
15477
|
+
errors: truthErrors.map((d) => ({ code: d.code, message: d.message, ...d.source === void 0 ? {} : { path: d.source.path, ...d.source.startLine === void 0 ? {} : { line: d.source.startLine } } }))
|
|
15478
|
+
},
|
|
15450
15479
|
index: i === void 0 ? null : {
|
|
15451
15480
|
status: i.status,
|
|
15452
15481
|
fullRebuildReason: i.fullRebuildReason ?? null,
|
|
@@ -16846,7 +16875,11 @@ async function projectDoctor(rootArg, options) {
|
|
|
16846
16875
|
let project2;
|
|
16847
16876
|
if (runs("truth.project", "git.repository")) {
|
|
16848
16877
|
const loaded = loadProjectTruth(root);
|
|
16849
|
-
|
|
16878
|
+
const authority = loaded.value === void 0 ? [] : truthAuthorityErrors(loaded.diagnostics);
|
|
16879
|
+
if (loaded.value !== void 0 && authority.length > 0) {
|
|
16880
|
+
const problems = authority.slice(0, LIST_LIMIT).map((d) => ({ code: d.code, ...d.source?.path === void 0 ? {} : { path: d.source.path } }));
|
|
16881
|
+
set("truth.project", "error", "invalid", { problems }, [{ id: "fix-truth", commands: [], params: { path: problems.find((p) => p.path !== void 0)?.path ?? ".duo-project/project.yaml" } }]);
|
|
16882
|
+
} else if (loaded.value !== void 0) {
|
|
16850
16883
|
project2 = loaded.value;
|
|
16851
16884
|
const t2 = project2.truth;
|
|
16852
16885
|
set("truth.project", "ok", "valid", { name: t2.config.name, requirements: t2.requirements.length, decisions: t2.decisions.length, constraints: t2.constraints.length });
|
|
@@ -17745,6 +17778,7 @@ var EN = {
|
|
|
17745
17778
|
"status.analysis": "Analysis: {languages}",
|
|
17746
17779
|
"status.baseline": "Adoption baseline: {status}{detail}",
|
|
17747
17780
|
"status.pending": "Pending decisions: {n}",
|
|
17781
|
+
"status.truth-errors": "Truth errors: {n}. These files were not read, so the counts above leave them out. Review, context and Decision confirm refuse to run until they are fixed (DUO does not change them):",
|
|
17748
17782
|
"status.llm": "LLM: {state}",
|
|
17749
17783
|
"index.done": "Indexed ({mode}{reason}) \xB7 {files} files \xB7 {analyzed} parsed \xB7 {changed} changed \xB7 graph {written}",
|
|
17750
17784
|
"index.required": "INDEX_REQUIRED: the index is {status}. Run duoctl index (or pass --refresh).",
|
|
@@ -17768,6 +17802,7 @@ var EN = {
|
|
|
17768
17802
|
"decision.confirmed": "confirmed as {id} \xB7 {path}",
|
|
17769
17803
|
"decision.rejected": "rejected {id}",
|
|
17770
17804
|
"decision.none": "No pending decisions.",
|
|
17805
|
+
"decision.truth-errors": "Not listed: {n} Truth error(s). These files could not be read; confirm and reject refuse to run until they are fixed:",
|
|
17771
17806
|
"stats.none": "No metrics yet.",
|
|
17772
17807
|
"not-initialized": "Not a DUO project (no .duo-project/project.yaml). Run duoctl init.",
|
|
17773
17808
|
"not-implemented": "'{command}' is not implemented yet ({task}).",
|
|
@@ -17937,6 +17972,7 @@ var KO = {
|
|
|
17937
17972
|
"status.analysis": "\uBD84\uC11D \uC218\uC900: {languages}",
|
|
17938
17973
|
"status.baseline": "Adoption baseline: {status}{detail}",
|
|
17939
17974
|
"status.pending": "\uB300\uAE30 \uC911 decision: {n}",
|
|
17975
|
+
"status.truth-errors": "Truth \uC624\uB958: {n}. \uC544\uB798 \uD30C\uC77C\uC740 \uC77D\uC9C0 \uBABB\uD574 \uC704 \uAC1C\uC218\uC5D0\uC11C \uBE60\uC84C\uC2B5\uB2C8\uB2E4. \uACE0\uCE60 \uB54C\uAE4C\uC9C0 review, context, Decision \uD655\uC815\uC740 \uC2E4\uD589\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4(DUO\uB294 \uC774 \uD30C\uC77C\uC744 \uACE0\uCE58\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4):",
|
|
17940
17976
|
"status.llm": "LLM: {state}",
|
|
17941
17977
|
"index.done": "Index \uC644\uB8CC({mode}{reason}) \xB7 \uD30C\uC77C {files} \xB7 parse {analyzed} \xB7 \uBCC0\uACBD {changed} \xB7 graph {written}",
|
|
17942
17978
|
"index.required": "INDEX_REQUIRED: index\uAC00 {status}\uC785\uB2C8\uB2E4. duoctl index\uB97C \uC2E4\uD589\uD558\uC138\uC694(\uB610\uB294 --refresh).",
|
|
@@ -17960,6 +17996,7 @@ var KO = {
|
|
|
17960
17996
|
"decision.confirmed": "{id}\uB85C \uD655\uC815 \xB7 {path}",
|
|
17961
17997
|
"decision.rejected": "{id} \uAC70\uC808",
|
|
17962
17998
|
"decision.none": "\uB300\uAE30 \uC911 decision\uC774 \uC5C6\uC2B5\uB2C8\uB2E4.",
|
|
17999
|
+
"decision.truth-errors": "\uBAA9\uB85D\uC5D0 \uC5C6\uC74C: Truth \uC624\uB958 {n}\uAC1C. \uC544\uB798 \uD30C\uC77C\uC744 \uC77D\uC9C0 \uBABB\uD588\uC73C\uBA70, \uACE0\uCE60 \uB54C\uAE4C\uC9C0 \uD655\uC815\uACFC \uAC70\uC808\uC740 \uC2E4\uD589\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4:",
|
|
17963
18000
|
"stats.none": "\uC9C0\uD45C\uAC00 \uC544\uC9C1 \uC5C6\uC2B5\uB2C8\uB2E4.",
|
|
17964
18001
|
"not-initialized": "DUO project\uAC00 \uC544\uB2D9\uB2C8\uB2E4(.duo-project/project.yaml \uC5C6\uC74C). duoctl init\uC744 \uC2E4\uD589\uD558\uC138\uC694.",
|
|
17965
18002
|
"not-implemented": "'{command}'\uB294 \uC544\uC9C1 \uAD6C\uD604\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4({task}).",
|
|
@@ -18230,8 +18267,12 @@ async function decisionCommand(env, sub, id3, reason) {
|
|
|
18230
18267
|
if (sub === "list" || sub === void 0) {
|
|
18231
18268
|
const pending = entries.filter((e) => e.status === "pending");
|
|
18232
18269
|
const proposedDecisions = truth.decisions.filter((d) => d.state === "proposed");
|
|
18233
|
-
const
|
|
18234
|
-
|
|
18270
|
+
const unread = truthAuthorityErrors(project2.diagnostics);
|
|
18271
|
+
const human = [
|
|
18272
|
+
...pending.length + proposedDecisions.length === 0 ? [t(env.locale, "decision.none")] : [...pending.map((e) => `${e.id} ${e.proposal.title} (${e.proposal.question} = ${e.proposal.answer})`), ...proposedDecisions.map((d) => `${d.id} ${d.title} (proposed Decision)`)],
|
|
18273
|
+
...unread.length === 0 ? [] : [t(env.locale, "decision.truth-errors", { n: unread.length }), ...unread.map((d) => ` ${d.code} ${d.source?.path ?? ""}${d.source?.startLine === void 0 ? "" : `:${d.source.startLine}`} ${d.message}`)]
|
|
18274
|
+
];
|
|
18275
|
+
return { command: "decision", exitCode: EXIT.OK, diagnostics: unread, human, result: { pending: pending.map((e) => ({ id: e.id, title: e.proposal.title, question: e.proposal.question, answer: e.proposal.answer })), proposedDecisions: proposedDecisions.map((d) => ({ id: d.id, title: d.title })) } };
|
|
18235
18276
|
}
|
|
18236
18277
|
if (sub !== "confirm" && sub !== "reject")
|
|
18237
18278
|
return usage("decision", "usage: duoctl decision list | confirm <id> | reject <id> [--reason <text>]");
|
|
@@ -18941,6 +18982,11 @@ async function statusCommand(env) {
|
|
|
18941
18982
|
const human = [
|
|
18942
18983
|
t(L, "status.project", { name: s.project.name, goal: s.project.vision, milestone: s.project.currentMilestone ?? "-" }),
|
|
18943
18984
|
t(L, "status.truth", { requirements: s.truth.requirements, decisions: s.truth.decisions, constraints: s.truth.constraints, gaps: s.truth.declaredGaps }),
|
|
18985
|
+
// T40 (N1): what the loader left out, so a lower Decision count is never silent.
|
|
18986
|
+
...(s.truth.errors ?? []).length === 0 ? [] : [
|
|
18987
|
+
t(L, "status.truth-errors", { n: s.truth.errors?.length ?? 0 }),
|
|
18988
|
+
...(s.truth.errors ?? []).map((e) => ` ${e.code} ${e.path ?? ""}${e.line === void 0 ? "" : `:${e.line}`} ${e.message}`)
|
|
18989
|
+
],
|
|
18944
18990
|
t(L, "status.index", { status: s.index?.status ?? "unknown", reason: s.index?.fullRebuildReason == null ? "" : ` (full rebuild: ${s.index.fullRebuildReason})` }),
|
|
18945
18991
|
...indexNeedsRun ? [t(L, "status.index-remediation")] : [],
|
|
18946
18992
|
...c === void 0 ? [] : [t(L, "status.changes", { files: c.files, analysis: c.analysisStale, modules: c.modulesToResolve, calls: c.callsMaybeRecomputed })],
|
package/dist/duoctl.js
CHANGED
package/dist/runtime-tree.json
CHANGED
|
@@ -1,39 +1,39 @@
|
|
|
1
1
|
{
|
|
2
2
|
"format": "duo.runtime-tree/1",
|
|
3
|
-
"package": "@duo-director/cli@0.2.
|
|
3
|
+
"package": "@duo-director/cli@0.2.2",
|
|
4
4
|
"delivery": "bundleDependencies",
|
|
5
5
|
"lock": {
|
|
6
6
|
"file": "apps/cli/npm-shrinkwrap.json",
|
|
7
|
-
"sha256": "
|
|
7
|
+
"sha256": "653189b4540d05ad0560d0c22d637f59e962d927c3ba3ec596fbc53e384348b7",
|
|
8
8
|
"registry": "https://registry.npmjs.org/"
|
|
9
9
|
},
|
|
10
10
|
"packages": [
|
|
11
11
|
{
|
|
12
12
|
"path": "node_modules/@modelcontextprotocol/client",
|
|
13
13
|
"name": "@modelcontextprotocol/client",
|
|
14
|
-
"version": "2.
|
|
15
|
-
"integrity": "sha512-
|
|
14
|
+
"version": "2.2.0",
|
|
15
|
+
"integrity": "sha512-LxCou/CSYQ6dwEnjhLZY0KnEuc8V4UJ3IEQCl/uR2yHobSQIEdJKUlKLRYRF5i5FqRGHy1eK7une3aAWDHLtig==",
|
|
16
16
|
"license": "MIT",
|
|
17
17
|
"files": 85,
|
|
18
|
-
"contentHash": "
|
|
18
|
+
"contentHash": "59c7d17d5cce46b4ba69c3f8e6818b7f9baecffde043e4b3f5b32e8df009bfc8"
|
|
19
19
|
},
|
|
20
20
|
{
|
|
21
21
|
"path": "node_modules/@modelcontextprotocol/core",
|
|
22
22
|
"name": "@modelcontextprotocol/core",
|
|
23
|
-
"version": "2.
|
|
24
|
-
"integrity": "sha512-
|
|
23
|
+
"version": "2.2.0",
|
|
24
|
+
"integrity": "sha512-iLhmprRmWI8EcosOA3wVvww22z02NkgqhV4fBH6f/odQBsi7xnJc0HGmi21yWO+/iKw2yzqVE127Zhna5/+JXw==",
|
|
25
25
|
"license": "MIT",
|
|
26
26
|
"files": 21,
|
|
27
|
-
"contentHash": "
|
|
27
|
+
"contentHash": "4cc7bef28cbc2be2b6da978e479e07ce72110842c628573d763fbbf11f8b4b70"
|
|
28
28
|
},
|
|
29
29
|
{
|
|
30
30
|
"path": "node_modules/@modelcontextprotocol/server",
|
|
31
31
|
"name": "@modelcontextprotocol/server",
|
|
32
|
-
"version": "2.
|
|
33
|
-
"integrity": "sha512-
|
|
32
|
+
"version": "2.2.0",
|
|
33
|
+
"integrity": "sha512-qFnltjus6Gk8Lx6J1w2RXmr3YPN22MNT6qD6zjAkaiWIlFIFxWClz0rXHNuJF/KSUyn5YGhkSvXkWDbQHVLFEQ==",
|
|
34
34
|
"license": "MIT",
|
|
35
35
|
"files": 85,
|
|
36
|
-
"contentHash": "
|
|
36
|
+
"contentHash": "a7d3d12260408317939b1325474705066200b0b2ea944866c9b1c73d78628647"
|
|
37
37
|
},
|
|
38
38
|
{
|
|
39
39
|
"path": "node_modules/@types/debug",
|
|
@@ -615,5 +615,5 @@
|
|
|
615
615
|
"contentHash": "27c427165151653de59dcea1a8e94fdde9925eb1579d7bb118f1aeb63fbf9d73"
|
|
616
616
|
}
|
|
617
617
|
],
|
|
618
|
-
"treeHash": "
|
|
618
|
+
"treeHash": "264ab643bb960f509d537f4097c56120b4f368123fe729fd5d1b330d64d09251"
|
|
619
619
|
}
|