@bragi-gmbh/codebus 1.4.0 → 1.6.1
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/ci-hooks/ci-hooks.js +126 -0
- package/dist/ci-hooks/ci-hooks.js.map +1 -0
- package/dist/commands/adr.js +30 -0
- package/dist/commands/adr.js.map +1 -0
- package/dist/commands/agent.js +175 -0
- package/dist/commands/agent.js.map +1 -0
- package/dist/commands/as.js +1 -1
- package/dist/commands/as.js.map +1 -1
- package/dist/commands/ask.js +1 -1
- package/dist/commands/ask.js.map +1 -1
- package/dist/commands/checkin.js +1 -1
- package/dist/commands/checkin.js.map +1 -1
- package/dist/commands/ci-findings.js +129 -0
- package/dist/commands/ci-findings.js.map +1 -0
- package/dist/commands/ci-reply.js +117 -0
- package/dist/commands/ci-reply.js.map +1 -0
- package/dist/commands/ci-steer-escalate.js +65 -0
- package/dist/commands/ci-steer-escalate.js.map +1 -0
- package/dist/commands/cli-mcp-correlation.js +131 -0
- package/dist/commands/cli-mcp-correlation.js.map +1 -0
- package/dist/commands/connector-attach-detach.js +542 -0
- package/dist/commands/connector-attach-detach.js.map +1 -0
- package/dist/commands/connector.js +513 -0
- package/dist/commands/connector.js.map +1 -0
- package/dist/commands/contract.js +33 -0
- package/dist/commands/contract.js.map +1 -0
- package/dist/commands/correlation.js +194 -0
- package/dist/commands/correlation.js.map +1 -0
- package/dist/commands/decision.js +63 -0
- package/dist/commands/decision.js.map +1 -1
- package/dist/commands/digest.js +14 -3
- package/dist/commands/digest.js.map +1 -1
- package/dist/commands/do.js +127 -0
- package/dist/commands/do.js.map +1 -0
- package/dist/commands/factory-attention.js +106 -0
- package/dist/commands/factory-attention.js.map +1 -0
- package/dist/commands/factory-context-read.js +171 -0
- package/dist/commands/factory-context-read.js.map +1 -0
- package/dist/commands/factory-interventions.js +102 -0
- package/dist/commands/factory-interventions.js.map +1 -0
- package/dist/commands/factory.js +187 -0
- package/dist/commands/factory.js.map +1 -1
- package/dist/commands/github-login.js +109 -53
- package/dist/commands/github-login.js.map +1 -1
- package/dist/commands/graph-pull.js +130 -0
- package/dist/commands/graph-pull.js.map +1 -0
- package/dist/commands/graph.js +5 -1
- package/dist/commands/graph.js.map +1 -1
- package/dist/commands/inbox.js +7 -7
- package/dist/commands/inbox.js.map +1 -1
- package/dist/commands/ingest.js +1 -1
- package/dist/commands/ingest.js.map +1 -1
- package/dist/commands/init.js +10 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/install.js +1160 -55
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/integration-ledger.js +81 -0
- package/dist/commands/integration-ledger.js.map +1 -0
- package/dist/commands/knowledge.js +194 -0
- package/dist/commands/knowledge.js.map +1 -0
- package/dist/commands/links.js +1 -1
- package/dist/commands/links.js.map +1 -1
- package/dist/commands/login.js +1 -1
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/morning.js +50 -1
- package/dist/commands/morning.js.map +1 -1
- package/dist/commands/plan-compiler.js +260 -0
- package/dist/commands/plan-compiler.js.map +1 -0
- package/dist/commands/plan-lint.js +275 -0
- package/dist/commands/plan-lint.js.map +1 -0
- package/dist/commands/plan-score.js +203 -0
- package/dist/commands/plan-score.js.map +1 -0
- package/dist/commands/plan.js +481 -15
- package/dist/commands/plan.js.map +1 -1
- package/dist/commands/product-validity.js +168 -0
- package/dist/commands/product-validity.js.map +1 -0
- package/dist/commands/question.js +1 -1
- package/dist/commands/question.js.map +1 -1
- package/dist/commands/read-policy.js +131 -0
- package/dist/commands/read-policy.js.map +1 -0
- package/dist/commands/read.js +1 -1
- package/dist/commands/read.js.map +1 -1
- package/dist/commands/repo.js +106 -8
- package/dist/commands/repo.js.map +1 -1
- package/dist/commands/repository-protection.js +209 -0
- package/dist/commands/repository-protection.js.map +1 -0
- package/dist/commands/resolve.js +2 -2
- package/dist/commands/resolve.js.map +1 -1
- package/dist/commands/self-healing.js +26 -0
- package/dist/commands/self-healing.js.map +1 -0
- package/dist/commands/send.js +1 -1
- package/dist/commands/send.js.map +1 -1
- package/dist/commands/serial-merge.js +303 -0
- package/dist/commands/serial-merge.js.map +1 -0
- package/dist/commands/session.js +1 -1
- package/dist/commands/session.js.map +1 -1
- package/dist/commands/spend.js +31 -0
- package/dist/commands/spend.js.map +1 -0
- package/dist/commands/task.js +92 -1
- package/dist/commands/task.js.map +1 -1
- package/dist/commands/taxonomy.js +21 -0
- package/dist/commands/taxonomy.js.map +1 -0
- package/dist/commands/verify.js +77 -0
- package/dist/commands/verify.js.map +1 -0
- package/dist/config/self-healing-analysis.json +158 -0
- package/dist/errors.js +18 -4
- package/dist/errors.js.map +1 -1
- package/dist/execution/client.js +53 -0
- package/dist/execution/client.js.map +1 -0
- package/dist/execution/local.js +24 -0
- package/dist/execution/local.js.map +1 -0
- package/dist/execution/ssh.js +38 -0
- package/dist/execution/ssh.js.map +1 -0
- package/dist/graph.js +78 -16
- package/dist/graph.js.map +1 -1
- package/dist/index.js +40 -2
- package/dist/index.js.map +1 -1
- package/dist/json-lite.js +248 -0
- package/dist/json-lite.js.map +1 -0
- package/dist/knowledge-drift.js +40 -0
- package/dist/knowledge-drift.js.map +1 -0
- package/dist/lint/parallelism.js +414 -0
- package/dist/lint/parallelism.js.map +1 -0
- package/dist/mail-latency.js +11 -1
- package/dist/mail-latency.js.map +1 -1
- package/dist/mcp-ci-findings.js +31 -0
- package/dist/mcp-ci-findings.js.map +1 -0
- package/dist/mcp-correlation.js +290 -0
- package/dist/mcp-correlation.js.map +1 -0
- package/dist/mcp-factory-context-read.js +81 -0
- package/dist/mcp-factory-context-read.js.map +1 -0
- package/dist/mcp-registry.js +147 -1
- package/dist/mcp-registry.js.map +1 -1
- package/dist/mcp.js +94 -5
- package/dist/mcp.js.map +1 -1
- package/dist/openrouter-reservation-guard.js +97 -0
- package/dist/openrouter-reservation-guard.js.map +1 -0
- package/dist/self-healing-analysis-loader.js +150 -0
- package/dist/self-healing-analysis-loader.js.map +1 -0
- package/dist/sender.js +11 -9
- package/dist/sender.js.map +1 -1
- package/dist/toml-lite.js +546 -0
- package/dist/toml-lite.js.map +1 -0
- package/dist/version-check.js +23 -7
- package/dist/version-check.js.map +1 -1
- package/package.json +5 -3
package/dist/index.js
CHANGED
|
@@ -20,6 +20,7 @@ import { statuslineCmd } from "./commands/statusline.js";
|
|
|
20
20
|
import { nextCmd } from "./commands/next.js";
|
|
21
21
|
import { registerSession } from "./commands/session.js";
|
|
22
22
|
import { loginCmd } from "./commands/login.js";
|
|
23
|
+
import { spendCmd } from "./commands/spend.js";
|
|
23
24
|
import { doctorCmd } from "./commands/doctor.js";
|
|
24
25
|
import { registerInstall } from "./commands/install.js";
|
|
25
26
|
import { healthCmd } from "./commands/health.js";
|
|
@@ -39,12 +40,30 @@ import { registerAs } from "./commands/as.js";
|
|
|
39
40
|
import { registerCheckin } from "./commands/checkin.js";
|
|
40
41
|
import { registerTick } from "./commands/tick.js";
|
|
41
42
|
import { registerPlan } from "./commands/plan.js";
|
|
43
|
+
import { registerPlanLint } from "./commands/plan-lint.js";
|
|
44
|
+
import { registerPlanScore } from "./commands/plan-score.js";
|
|
42
45
|
import { registerPlanGh } from "./commands/plan-gh.js";
|
|
43
46
|
import { registerMorning } from "./commands/morning.js";
|
|
44
47
|
import { registerUpgrade } from "./commands/upgrade.js";
|
|
45
48
|
import { registerJira } from "./commands/jira.js";
|
|
46
49
|
import { registerFactory } from "./commands/factory.js";
|
|
50
|
+
import { registerFactoryInterventions } from "./commands/factory-interventions.js";
|
|
47
51
|
import { registerDoc } from "./commands/doc.js";
|
|
52
|
+
import { registerContract } from "./commands/contract.js";
|
|
53
|
+
import { registerTaxonomy } from "./commands/taxonomy.js";
|
|
54
|
+
import { registerAdr } from "./commands/adr.js";
|
|
55
|
+
import { registerAgent } from "./commands/agent.js";
|
|
56
|
+
import { registerKnowledge } from "./commands/knowledge.js";
|
|
57
|
+
import { registerDo } from "./commands/do.js";
|
|
58
|
+
import { registerCorrelationCommand } from "./commands/cli-mcp-correlation.js";
|
|
59
|
+
import { registerSerialMerge } from "./commands/serial-merge.js";
|
|
60
|
+
import { registerCorrelation } from "./commands/correlation.js";
|
|
61
|
+
import { registerFactoryContextRead } from "./commands/factory-context-read.js";
|
|
62
|
+
import { registerIntegrationLedger } from "./commands/integration-ledger.js";
|
|
63
|
+
import { registerSelfHealing } from "./commands/self-healing.js";
|
|
64
|
+
import { registerConnector } from "./commands/connector.js";
|
|
65
|
+
import { registerRepositoryProtection } from "./commands/repository-protection.js";
|
|
66
|
+
import { registerProductValidity } from "./commands/product-validity.js";
|
|
48
67
|
const program = new Command();
|
|
49
68
|
// version always mirrors package.json (works from src via tsx and from dist)
|
|
50
69
|
const pkg = createRequire(import.meta.url)("../package.json");
|
|
@@ -53,7 +72,7 @@ const g = (c) => c
|
|
|
53
72
|
.option("--url <url>").option("--token <token>")
|
|
54
73
|
.option("--agent <slug>").option("--workspace <slug>").option("--json", "JSON output");
|
|
55
74
|
g(program.command("init"))
|
|
56
|
-
.option("--anon-key <key>").option("--person <slug>").option("--yes", "non-interactive")
|
|
75
|
+
.option("--anon-key <key>").option("--person <slug>").option("--profile <name>", "named instance: prod|dev (sets URL; anon key resolves at login-time)").option("--yes", "non-interactive")
|
|
57
76
|
.action(initCmd);
|
|
58
77
|
g(program.command("whoami")).action(whoamiCmd);
|
|
59
78
|
g(program.command("send"))
|
|
@@ -94,14 +113,33 @@ registerAs(program, g);
|
|
|
94
113
|
registerCheckin(program, g);
|
|
95
114
|
registerTick(program, g);
|
|
96
115
|
const planCmd = registerPlan(program, g);
|
|
116
|
+
registerPlanLint(planCmd);
|
|
117
|
+
registerPlanScore(planCmd);
|
|
97
118
|
registerPlanGh(planCmd, g);
|
|
98
119
|
registerMorning(program, g);
|
|
99
120
|
registerUpgrade(program, g);
|
|
100
121
|
registerJira(program, g);
|
|
101
122
|
registerFactory(program, g);
|
|
123
|
+
registerFactoryInterventions(program, g);
|
|
102
124
|
registerDoc(program, g);
|
|
125
|
+
registerContract(program, g);
|
|
126
|
+
registerTaxonomy(program, g);
|
|
127
|
+
registerAdr(program, g);
|
|
128
|
+
registerAgent(program, g);
|
|
129
|
+
registerKnowledge(program, g);
|
|
130
|
+
registerDo(program, g);
|
|
131
|
+
registerSerialMerge(program, g);
|
|
132
|
+
registerCorrelation(program, g);
|
|
133
|
+
registerCorrelationCommand(program, g);
|
|
134
|
+
registerFactoryContextRead(program);
|
|
135
|
+
registerIntegrationLedger(program, g);
|
|
136
|
+
registerSelfHealing(program, g);
|
|
137
|
+
registerConnector(program, g);
|
|
138
|
+
registerRepositoryProtection(program, g);
|
|
139
|
+
registerProductValidity(program, g);
|
|
103
140
|
g(program.command("login"))
|
|
104
|
-
.option("--anon-key <key>").option("--github", "sign in with GitHub
|
|
141
|
+
.option("--anon-key <key>").option("--github", "sign in with GitHub (browser OAuth on this machine)").option("--no-browser", "headless/SSH: print the authorize URL, paste back the callback URL or code").action(loginCmd);
|
|
142
|
+
g(program.command("spend")).description("month-to-date spend from plan_spend_v1 ($200 alert line)").action(spendCmd);
|
|
105
143
|
g(program.command("doctor")).option("--anon-key <key>").action(doctorCmd);
|
|
106
144
|
g(program.command("health")).action(healthCmd);
|
|
107
145
|
registerReport(program, g);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* json-lite — a minimal recursive-descent JSON scanner used to locate the
|
|
3
|
+
* exact character span of a value at a given key path, so a caller can
|
|
4
|
+
* splice in a replacement WITHOUT reserializing (and therefore reformatting)
|
|
5
|
+
* the rest of the document.
|
|
6
|
+
*
|
|
7
|
+
* Why this exists: `JSON.parse` + mutate + `JSON.stringify(obj, null, 2)`
|
|
8
|
+
* is semantically correct but not byte-stable — it silently renormalizes
|
|
9
|
+
* indentation, line endings, key ordering, and numeric literal formatting
|
|
10
|
+
* for content that has nothing to do with the key being changed. That's an
|
|
11
|
+
* acceptable cost for a one-time, explicitly-confirmed write (the user sees
|
|
12
|
+
* the JSON that's about to be written and approves it), but not for a
|
|
13
|
+
* targeted repair of a config file the user may have hand-tuned — see
|
|
14
|
+
* install.ts's MCP-pointer drift heal, the only caller of this module.
|
|
15
|
+
*
|
|
16
|
+
* findJsonValueSpan() walks the ENTIRE document with a real (if compact)
|
|
17
|
+
* JSON grammar — objects, arrays, strings with escapes, numbers, literals —
|
|
18
|
+
* so a key name that happens to appear inside an unrelated string value can
|
|
19
|
+
* never be mistaken for a real object key. It returns the span of the value
|
|
20
|
+
* found at the given path, or null if the path doesn't resolve to a value.
|
|
21
|
+
*
|
|
22
|
+
* Duplicate-key safety: `JSON.parse` resolves a duplicate object key by
|
|
23
|
+
* taking the LAST occurrence — the earlier one(s) are simply discarded.
|
|
24
|
+
* A naive "return the first match" scanner disagrees with that silently,
|
|
25
|
+
* which would patch the WRONG (stale, discarded) occurrence while
|
|
26
|
+
* `JSON.parse`-based code elsewhere in the caller reasons about the real
|
|
27
|
+
* (last) value — reporting success while the effective pointer is
|
|
28
|
+
* unchanged. findJsonValueSpan() instead FAILS CLOSED (throws) whenever any
|
|
29
|
+
* key along the requested path repeats within the same object, rather than
|
|
30
|
+
* guessing which occurrence is "the real one."
|
|
31
|
+
*
|
|
32
|
+
* Throws on malformed JSON or an ambiguous (duplicate-key) path — callers
|
|
33
|
+
* are expected to have already confirmed the document parses (e.g. via
|
|
34
|
+
* JSON.parse) before calling this, and must treat a throw here as "cannot
|
|
35
|
+
* safely locate this value," not "value not present."
|
|
36
|
+
*/
|
|
37
|
+
/** True when every element of `shorter` matches the start of `longer`, in order (equal-length arrays included). */
|
|
38
|
+
function isPrefixOf(shorter, longer) {
|
|
39
|
+
if (shorter.length > longer.length)
|
|
40
|
+
return false;
|
|
41
|
+
return shorter.every((k, i) => k === longer[i]);
|
|
42
|
+
}
|
|
43
|
+
export function findJsonValueSpan(text, path) {
|
|
44
|
+
const n = text.length;
|
|
45
|
+
let i = 0;
|
|
46
|
+
let result = null;
|
|
47
|
+
let ambiguous = false;
|
|
48
|
+
function skipWs() {
|
|
49
|
+
while (i < n && (text[i] === " " || text[i] === "\t" || text[i] === "\n" || text[i] === "\r"))
|
|
50
|
+
i++;
|
|
51
|
+
}
|
|
52
|
+
function fail(message) {
|
|
53
|
+
throw new Error(`json-lite: ${message} at offset ${i}`);
|
|
54
|
+
}
|
|
55
|
+
function parseString() {
|
|
56
|
+
if (text[i] !== '"')
|
|
57
|
+
fail("expected string");
|
|
58
|
+
const start = i;
|
|
59
|
+
i++;
|
|
60
|
+
let closed = false;
|
|
61
|
+
while (i < n) {
|
|
62
|
+
const c = text[i];
|
|
63
|
+
if (c === "\\") {
|
|
64
|
+
i += 2;
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
if (c === '"') {
|
|
68
|
+
i++;
|
|
69
|
+
closed = true;
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
if (c === "\n")
|
|
73
|
+
fail("unterminated string");
|
|
74
|
+
i++;
|
|
75
|
+
}
|
|
76
|
+
// Reaching EOF without ever hitting the closing quote (e.g. a trailing
|
|
77
|
+
// backslash right at EOF, or content that simply never closes) must
|
|
78
|
+
// throw, not silently return whatever was scanned as if it were a
|
|
79
|
+
// complete string (Luna/PR#110 finding).
|
|
80
|
+
if (!closed)
|
|
81
|
+
fail("unterminated string");
|
|
82
|
+
return text.slice(start, i);
|
|
83
|
+
}
|
|
84
|
+
function parseValue(currentPath) {
|
|
85
|
+
skipWs();
|
|
86
|
+
const c = text[i];
|
|
87
|
+
if (c === "{")
|
|
88
|
+
return parseObject(currentPath);
|
|
89
|
+
if (c === "[")
|
|
90
|
+
return parseArray(currentPath);
|
|
91
|
+
if (c === '"') {
|
|
92
|
+
parseString();
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
if (text.startsWith("true", i)) {
|
|
96
|
+
i += 4;
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
if (text.startsWith("false", i)) {
|
|
100
|
+
i += 5;
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
if (text.startsWith("null", i)) {
|
|
104
|
+
i += 4;
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
const m = /^-?\d+(\.\d+)?([eE][+-]?\d+)?/.exec(text.slice(i));
|
|
108
|
+
if (!m)
|
|
109
|
+
fail("expected a value");
|
|
110
|
+
i += m[0].length;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Array elements extend the CURRENT path with their numeric index
|
|
114
|
+
* (`currentPath.concat(String(index))`) — NOT reset to `[]` (Luna/PR#110
|
|
115
|
+
* finding: resetting the path here means a document like
|
|
116
|
+
* `{"mcpServers":{"codebus":X},"other":[{"mcpServers":{"codebus":Y}}]}`
|
|
117
|
+
* computes the SAME (wrong) path for the array-nested "codebus" as for
|
|
118
|
+
* the real top-level one, since both start fresh from `[]`. That let
|
|
119
|
+
* `findJsonValueSpan` mistake an unrelated array-nested object elsewhere
|
|
120
|
+
* in the document for the real target — or trip the duplicate-key
|
|
121
|
+
* ambiguity guard over two entries that were never actually the same
|
|
122
|
+
* path at all.
|
|
123
|
+
*
|
|
124
|
+
* Our own callers only ever look up plain object-nested paths (e.g.
|
|
125
|
+
* `["mcpServers","codebus"]`), which can never equal a path containing a
|
|
126
|
+
* numeric index segment, so correctly threading the path through arrays
|
|
127
|
+
* makes any object reachable only via an array elsewhere in the document
|
|
128
|
+
* naturally ineligible to match the target path or its duplicate-key
|
|
129
|
+
* tracking — both fixed by the same change, since "is this nextPath a
|
|
130
|
+
* prefix of the target path" already returns false the moment an index
|
|
131
|
+
* segment doesn't match a target segment.
|
|
132
|
+
*/
|
|
133
|
+
function parseArray(currentPath) {
|
|
134
|
+
i++; // [
|
|
135
|
+
skipWs();
|
|
136
|
+
if (text[i] === "]") {
|
|
137
|
+
i++;
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
let index = 0;
|
|
141
|
+
while (true) {
|
|
142
|
+
parseValue(currentPath.concat(String(index)));
|
|
143
|
+
index++;
|
|
144
|
+
skipWs();
|
|
145
|
+
if (text[i] === ",") {
|
|
146
|
+
i++;
|
|
147
|
+
skipWs();
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
150
|
+
if (text[i] === "]") {
|
|
151
|
+
i++;
|
|
152
|
+
break;
|
|
153
|
+
}
|
|
154
|
+
fail("expected ',' or ']' in array");
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
function parseObject(currentPath) {
|
|
158
|
+
i++; // {
|
|
159
|
+
skipWs();
|
|
160
|
+
// Scoped to THIS object literal only — a sibling object at a different
|
|
161
|
+
// nesting level (even one reached via the same key name one level up)
|
|
162
|
+
// gets its own fresh set. Only keys that participate in reaching (or
|
|
163
|
+
// exactly satisfy) the requested path are tracked, so an unrelated
|
|
164
|
+
// duplicate key (e.g. two "theme" entries) never trips this.
|
|
165
|
+
const seenKeysAlongPath = new Set();
|
|
166
|
+
if (text[i] === "}") {
|
|
167
|
+
i++;
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
while (true) {
|
|
171
|
+
skipWs();
|
|
172
|
+
const keyRaw = parseString();
|
|
173
|
+
const key = JSON.parse(keyRaw);
|
|
174
|
+
skipWs();
|
|
175
|
+
if (text[i] !== ":")
|
|
176
|
+
fail("expected ':'");
|
|
177
|
+
i++;
|
|
178
|
+
skipWs();
|
|
179
|
+
const valueStart = i;
|
|
180
|
+
const nextPath = currentPath.concat(key);
|
|
181
|
+
parseValue(nextPath);
|
|
182
|
+
const valueEnd = i;
|
|
183
|
+
if (isPrefixOf(nextPath, path)) {
|
|
184
|
+
if (seenKeysAlongPath.has(key))
|
|
185
|
+
ambiguous = true;
|
|
186
|
+
seenKeysAlongPath.add(key);
|
|
187
|
+
}
|
|
188
|
+
if (nextPath.length === path.length && nextPath.every((k, idx) => k === path[idx])) {
|
|
189
|
+
// Keep the LAST match seen (matches JSON.parse's own duplicate-key
|
|
190
|
+
// semantics) — moot once `ambiguous` is set, since the caller fails
|
|
191
|
+
// closed regardless, but correct for the unambiguous case.
|
|
192
|
+
result = { start: valueStart, end: valueEnd };
|
|
193
|
+
}
|
|
194
|
+
skipWs();
|
|
195
|
+
if (text[i] === ",") {
|
|
196
|
+
i++;
|
|
197
|
+
continue;
|
|
198
|
+
}
|
|
199
|
+
if (text[i] === "}") {
|
|
200
|
+
i++;
|
|
201
|
+
break;
|
|
202
|
+
}
|
|
203
|
+
fail("expected ',' or '}'");
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
skipWs();
|
|
207
|
+
parseValue([]);
|
|
208
|
+
skipWs();
|
|
209
|
+
// A valid JSON document has nothing left after its one top-level value —
|
|
210
|
+
// "a valid JSON prefix followed by garbage" must throw, not silently
|
|
211
|
+
// return whatever span it found within the valid prefix (Luna/PR#110
|
|
212
|
+
// finding).
|
|
213
|
+
if (i < n)
|
|
214
|
+
fail("unexpected trailing content after top-level JSON value");
|
|
215
|
+
if (ambiguous)
|
|
216
|
+
fail("duplicate key along the requested path — refusing to guess which occurrence is authoritative");
|
|
217
|
+
return result;
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Splices `newValueText` in place of the value found at `path`, preserving
|
|
221
|
+
* every other byte of `text`. Also re-indents continuation lines of a
|
|
222
|
+
* multi-line `newValueText` to match the indentation of the line the
|
|
223
|
+
* original value started on, so a pretty-printed document doesn't grow an
|
|
224
|
+
* oddly-indented island. Returns null (no change made) if `path` isn't
|
|
225
|
+
* found, the document doesn't parse as JSON at all, or the path is
|
|
226
|
+
* ambiguous due to a duplicate key (see findJsonValueSpan) — callers must
|
|
227
|
+
* treat null the same way regardless of which of those it was: don't patch,
|
|
228
|
+
* fall back to whatever the caller's next-safest behavior is.
|
|
229
|
+
*/
|
|
230
|
+
export function replaceJsonValue(text, path, newValueText) {
|
|
231
|
+
let span;
|
|
232
|
+
try {
|
|
233
|
+
span = findJsonValueSpan(text, path);
|
|
234
|
+
}
|
|
235
|
+
catch {
|
|
236
|
+
return null;
|
|
237
|
+
}
|
|
238
|
+
if (span === null)
|
|
239
|
+
return null;
|
|
240
|
+
const lineStart = text.lastIndexOf("\n", span.start - 1) + 1;
|
|
241
|
+
const indent = /^[ \t]*/.exec(text.slice(lineStart, span.start))?.[0] ?? "";
|
|
242
|
+
const indented = newValueText
|
|
243
|
+
.split("\n")
|
|
244
|
+
.map((line, idx) => (idx === 0 ? line : indent + line))
|
|
245
|
+
.join("\n");
|
|
246
|
+
return text.slice(0, span.start) + indented + text.slice(span.end);
|
|
247
|
+
}
|
|
248
|
+
//# sourceMappingURL=json-lite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-lite.js","sourceRoot":"","sources":["../src/json-lite.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAOH,mHAAmH;AACnH,SAAS,UAAU,CAAC,OAAiB,EAAE,MAAgB;IACrD,IAAI,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IACjD,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,IAAc;IAC5D,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;IACtB,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,MAAM,GAAoB,IAAI,CAAC;IACnC,IAAI,SAAS,GAAG,KAAK,CAAC;IAEtB,SAAS,MAAM;QACb,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;YAAE,CAAC,EAAE,CAAC;IACrG,CAAC;IAED,SAAS,IAAI,CAAC,OAAe;QAC3B,MAAM,IAAI,KAAK,CAAC,cAAc,OAAO,cAAc,CAAC,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,SAAS,WAAW;QAClB,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG;YAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC7C,MAAM,KAAK,GAAG,CAAC,CAAC;QAChB,CAAC,EAAE,CAAC;QACJ,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACb,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;gBAAC,CAAC,IAAI,CAAC,CAAC;gBAAC,SAAS;YAAC,CAAC;YACrC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;gBAAC,CAAC,EAAE,CAAC;gBAAC,MAAM,GAAG,IAAI,CAAC;gBAAC,MAAM;YAAC,CAAC;YAC7C,IAAI,CAAC,KAAK,IAAI;gBAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;YAC5C,CAAC,EAAE,CAAC;QACN,CAAC;QACD,uEAAuE;QACvE,oEAAoE;QACpE,kEAAkE;QAClE,yCAAyC;QACzC,IAAI,CAAC,MAAM;YAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACzC,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC9B,CAAC;IAED,SAAS,UAAU,CAAC,WAAqB;QACvC,MAAM,EAAE,CAAC;QACT,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,KAAK,GAAG;YAAE,OAAO,WAAW,CAAC,WAAW,CAAC,CAAC;QAC/C,IAAI,CAAC,KAAK,GAAG;YAAE,OAAO,UAAU,CAAC,WAAW,CAAC,CAAC;QAC9C,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YAAC,WAAW,EAAE,CAAC;YAAC,OAAO;QAAC,CAAC;QACzC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC;YAAC,CAAC,IAAI,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QACnD,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC;YAAC,CAAC,IAAI,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QACpD,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC;YAAC,CAAC,IAAI,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QACnD,MAAM,CAAC,GAAG,+BAA+B,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9D,IAAI,CAAC,CAAC;YAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACjC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACnB,CAAC;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,SAAS,UAAU,CAAC,WAAqB;QACvC,CAAC,EAAE,CAAC,CAAC,IAAI;QACT,MAAM,EAAE,CAAC;QACT,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YAAC,CAAC,EAAE,CAAC;YAAC,OAAO;QAAC,CAAC;QACrC,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,OAAO,IAAI,EAAE,CAAC;YACZ,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC9C,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,CAAC;YACT,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBAAC,CAAC,EAAE,CAAC;gBAAC,MAAM,EAAE,CAAC;gBAAC,SAAS;YAAC,CAAC;YACjD,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBAAC,CAAC,EAAE,CAAC;gBAAC,MAAM;YAAC,CAAC;YACpC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED,SAAS,WAAW,CAAC,WAAqB;QACxC,CAAC,EAAE,CAAC,CAAC,IAAI;QACT,MAAM,EAAE,CAAC;QACT,uEAAuE;QACvE,sEAAsE;QACtE,qEAAqE;QACrE,mEAAmE;QACnE,6DAA6D;QAC7D,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAU,CAAC;QAC5C,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YAAC,CAAC,EAAE,CAAC;YAAC,OAAO;QAAC,CAAC;QACrC,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,EAAE,CAAC;YACT,MAAM,MAAM,GAAG,WAAW,EAAE,CAAC;YAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAW,CAAC;YACzC,MAAM,EAAE,CAAC;YACT,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG;gBAAE,IAAI,CAAC,cAAc,CAAC,CAAC;YAC1C,CAAC,EAAE,CAAC;YACJ,MAAM,EAAE,CAAC;YACT,MAAM,UAAU,GAAG,CAAC,CAAC;YACrB,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACzC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACrB,MAAM,QAAQ,GAAG,CAAC,CAAC;YAEnB,IAAI,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC;gBAC/B,IAAI,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC;oBAAE,SAAS,GAAG,IAAI,CAAC;gBACjD,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC7B,CAAC;YACD,IAAI,QAAQ,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBACnF,mEAAmE;gBACnE,oEAAoE;gBACpE,2DAA2D;gBAC3D,MAAM,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;YAChD,CAAC;YAED,MAAM,EAAE,CAAC;YACT,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBAAC,CAAC,EAAE,CAAC;gBAAC,SAAS;YAAC,CAAC;YACvC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBAAC,CAAC,EAAE,CAAC;gBAAC,MAAM;YAAC,CAAC;YACpC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,MAAM,EAAE,CAAC;IACT,UAAU,CAAC,EAAE,CAAC,CAAC;IACf,MAAM,EAAE,CAAC;IACT,yEAAyE;IACzE,qEAAqE;IACrE,qEAAqE;IACrE,YAAY;IACZ,IAAI,CAAC,GAAG,CAAC;QAAE,IAAI,CAAC,wDAAwD,CAAC,CAAC;IAC1E,IAAI,SAAS;QAAE,IAAI,CAAC,8FAA8F,CAAC,CAAC;IACpH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,IAAc,EAAE,YAAoB;IACjF,IAAI,IAAqB,CAAC;IAC1B,IAAI,CAAC;QACH,IAAI,GAAG,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAE/B,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IAC7D,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5E,MAAM,QAAQ,GAAG,YAAY;SAC1B,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;SACtD,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACrE,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { readFileSync } from "node:fs";
|
|
3
|
+
import { execFileSync } from "node:child_process";
|
|
4
|
+
function compareVersions(left, right) {
|
|
5
|
+
const a = left.split(".").map(Number);
|
|
6
|
+
const b = right.split(".").map(Number);
|
|
7
|
+
for (let i = 0; i < 3; i++)
|
|
8
|
+
if (a[i] !== b[i])
|
|
9
|
+
return a[i] - b[i];
|
|
10
|
+
return 0;
|
|
11
|
+
}
|
|
12
|
+
function compatibleVersion(version, compatibility) {
|
|
13
|
+
if (!version || !compatibility)
|
|
14
|
+
return true;
|
|
15
|
+
if (typeof compatibility.exact === "string" && version !== compatibility.exact)
|
|
16
|
+
return false;
|
|
17
|
+
if (typeof compatibility.min === "string" && compareVersions(version, compatibility.min) < 0)
|
|
18
|
+
return false;
|
|
19
|
+
if (typeof compatibility.max === "string" && compareVersions(version, compatibility.max) > 0)
|
|
20
|
+
return false;
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
/** Production lifecycle + repository evaluator. The offline fixture exercises this same rule set. */
|
|
24
|
+
export function checkKnowledgeDrift(input) {
|
|
25
|
+
if (input.state !== "ratified")
|
|
26
|
+
return "non-ratified";
|
|
27
|
+
if (!input.lifecycleDigest || input.lifecycleDigest !== input.expectedDigest || input.repositoryDigest !== input.expectedDigest || (input.pinnedCommit && input.currentHead && input.pinnedCommit !== input.currentHead))
|
|
28
|
+
return "stale";
|
|
29
|
+
if (input.compatible === false || !compatibleVersion(input.version, input.compatibility))
|
|
30
|
+
return "incompatible";
|
|
31
|
+
if (input.previousVersion && input.version && compareVersions(input.version, input.previousVersion) < 0)
|
|
32
|
+
return "downgrade";
|
|
33
|
+
return "pass";
|
|
34
|
+
}
|
|
35
|
+
export function repositoryDigest(repoRoot, relativePath) {
|
|
36
|
+
const head = execFileSync("git", ["-C", repoRoot, "rev-parse", "HEAD"], { encoding: "utf8" }).trim();
|
|
37
|
+
const body = readFileSync(`${repoRoot}/${relativePath}`);
|
|
38
|
+
return { digest: createHash("sha256").update(body).digest("hex"), head };
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=knowledge-drift.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"knowledge-drift.js","sourceRoot":"","sources":["../src/knowledge-drift.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAiBlD,SAAS,eAAe,CAAC,IAAY,EAAE,KAAa;IAClD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACtC,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;QAAE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAClE,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,iBAAiB,CAAC,OAA2B,EAAE,aAAkD;IACxG,IAAI,CAAC,OAAO,IAAI,CAAC,aAAa;QAAE,OAAO,IAAI,CAAC;IAC5C,IAAI,OAAO,aAAa,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,aAAa,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IAC7F,IAAI,OAAO,aAAa,CAAC,GAAG,KAAK,QAAQ,IAAI,eAAe,CAAC,OAAO,EAAE,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3G,IAAI,OAAO,aAAa,CAAC,GAAG,KAAK,QAAQ,IAAI,eAAe,CAAC,OAAO,EAAE,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3G,OAAO,IAAI,CAAC;AACd,CAAC;AAED,qGAAqG;AACrG,MAAM,UAAU,mBAAmB,CAAC,KAAiB;IACnD,IAAI,KAAK,CAAC,KAAK,KAAK,UAAU;QAAE,OAAO,cAAc,CAAC;IACtD,IAAI,CAAC,KAAK,CAAC,eAAe,IAAI,KAAK,CAAC,eAAe,KAAK,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,gBAAgB,KAAK,KAAK,CAAC,cAAc,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,YAAY,KAAK,KAAK,CAAC,WAAW,CAAC;QAAE,OAAO,OAAO,CAAC;IACzO,IAAI,KAAK,CAAC,UAAU,KAAK,KAAK,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,aAAa,CAAC;QAAE,OAAO,cAAc,CAAC;IAChH,IAAI,KAAK,CAAC,eAAe,IAAI,KAAK,CAAC,OAAO,IAAI,eAAe,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC;QAAE,OAAO,WAAW,CAAC;IAC5H,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,QAAgB,EAAE,YAAoB;IACrE,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACrG,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,QAAQ,IAAI,YAAY,EAAE,CAAC,CAAC;IACzD,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;AAC3E,CAAC"}
|