@bragi-gmbh/codebus 1.3.0 → 1.6.0

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.
Files changed (132) hide show
  1. package/dist/ci-hooks/ci-hooks.js +126 -0
  2. package/dist/ci-hooks/ci-hooks.js.map +1 -0
  3. package/dist/commands/agent.js +137 -0
  4. package/dist/commands/agent.js.map +1 -0
  5. package/dist/commands/as.js +1 -1
  6. package/dist/commands/as.js.map +1 -1
  7. package/dist/commands/ask.js +1 -1
  8. package/dist/commands/ask.js.map +1 -1
  9. package/dist/commands/ci-findings.js +129 -0
  10. package/dist/commands/ci-findings.js.map +1 -0
  11. package/dist/commands/ci-reply.js +117 -0
  12. package/dist/commands/ci-reply.js.map +1 -0
  13. package/dist/commands/ci-steer-escalate.js +65 -0
  14. package/dist/commands/ci-steer-escalate.js.map +1 -0
  15. package/dist/commands/cli-mcp-correlation.js +131 -0
  16. package/dist/commands/cli-mcp-correlation.js.map +1 -0
  17. package/dist/commands/connector-attach-detach.js +542 -0
  18. package/dist/commands/connector-attach-detach.js.map +1 -0
  19. package/dist/commands/connector.js +513 -0
  20. package/dist/commands/connector.js.map +1 -0
  21. package/dist/commands/correlation.js +194 -0
  22. package/dist/commands/correlation.js.map +1 -0
  23. package/dist/commands/decision.js +63 -0
  24. package/dist/commands/decision.js.map +1 -1
  25. package/dist/commands/digest.js +14 -3
  26. package/dist/commands/digest.js.map +1 -1
  27. package/dist/commands/do.js +127 -0
  28. package/dist/commands/do.js.map +1 -0
  29. package/dist/commands/doc.js +276 -0
  30. package/dist/commands/doc.js.map +1 -0
  31. package/dist/commands/factory-attention.js +106 -0
  32. package/dist/commands/factory-attention.js.map +1 -0
  33. package/dist/commands/factory-context-read.js +171 -0
  34. package/dist/commands/factory-context-read.js.map +1 -0
  35. package/dist/commands/factory-interventions.js +102 -0
  36. package/dist/commands/factory-interventions.js.map +1 -0
  37. package/dist/commands/factory.js +187 -0
  38. package/dist/commands/factory.js.map +1 -1
  39. package/dist/commands/graph-pull.js +130 -0
  40. package/dist/commands/graph-pull.js.map +1 -0
  41. package/dist/commands/graph.js +5 -1
  42. package/dist/commands/graph.js.map +1 -1
  43. package/dist/commands/inbox.js +7 -7
  44. package/dist/commands/inbox.js.map +1 -1
  45. package/dist/commands/ingest.js +1 -1
  46. package/dist/commands/ingest.js.map +1 -1
  47. package/dist/commands/install.js +1160 -55
  48. package/dist/commands/install.js.map +1 -1
  49. package/dist/commands/integration-ledger.js +81 -0
  50. package/dist/commands/integration-ledger.js.map +1 -0
  51. package/dist/commands/knowledge.js +178 -0
  52. package/dist/commands/knowledge.js.map +1 -0
  53. package/dist/commands/links.js +1 -1
  54. package/dist/commands/links.js.map +1 -1
  55. package/dist/commands/morning.js +50 -1
  56. package/dist/commands/morning.js.map +1 -1
  57. package/dist/commands/plan-compiler.js +260 -0
  58. package/dist/commands/plan-compiler.js.map +1 -0
  59. package/dist/commands/plan-lint.js +275 -0
  60. package/dist/commands/plan-lint.js.map +1 -0
  61. package/dist/commands/plan-score.js +203 -0
  62. package/dist/commands/plan-score.js.map +1 -0
  63. package/dist/commands/plan.js +481 -15
  64. package/dist/commands/plan.js.map +1 -1
  65. package/dist/commands/product-validity.js +168 -0
  66. package/dist/commands/product-validity.js.map +1 -0
  67. package/dist/commands/question.js +1 -1
  68. package/dist/commands/question.js.map +1 -1
  69. package/dist/commands/read-policy.js +131 -0
  70. package/dist/commands/read-policy.js.map +1 -0
  71. package/dist/commands/read.js +1 -1
  72. package/dist/commands/read.js.map +1 -1
  73. package/dist/commands/repo.js +106 -8
  74. package/dist/commands/repo.js.map +1 -1
  75. package/dist/commands/repository-protection.js +209 -0
  76. package/dist/commands/repository-protection.js.map +1 -0
  77. package/dist/commands/resolve.js +2 -2
  78. package/dist/commands/resolve.js.map +1 -1
  79. package/dist/commands/self-healing.js +26 -0
  80. package/dist/commands/self-healing.js.map +1 -0
  81. package/dist/commands/send.js +1 -1
  82. package/dist/commands/send.js.map +1 -1
  83. package/dist/commands/serial-merge.js +303 -0
  84. package/dist/commands/serial-merge.js.map +1 -0
  85. package/dist/commands/session.js +1 -1
  86. package/dist/commands/session.js.map +1 -1
  87. package/dist/commands/task.js +92 -1
  88. package/dist/commands/task.js.map +1 -1
  89. package/dist/commands/verify.js +77 -0
  90. package/dist/commands/verify.js.map +1 -0
  91. package/dist/config/self-healing-analysis.json +158 -0
  92. package/dist/errors.js +18 -4
  93. package/dist/errors.js.map +1 -1
  94. package/dist/execution/client.js +53 -0
  95. package/dist/execution/client.js.map +1 -0
  96. package/dist/execution/local.js +24 -0
  97. package/dist/execution/local.js.map +1 -0
  98. package/dist/execution/ssh.js +38 -0
  99. package/dist/execution/ssh.js.map +1 -0
  100. package/dist/graph.js +78 -16
  101. package/dist/graph.js.map +1 -1
  102. package/dist/index.js +32 -0
  103. package/dist/index.js.map +1 -1
  104. package/dist/json-lite.js +248 -0
  105. package/dist/json-lite.js.map +1 -0
  106. package/dist/knowledge-drift.js +40 -0
  107. package/dist/knowledge-drift.js.map +1 -0
  108. package/dist/lint/parallelism.js +414 -0
  109. package/dist/lint/parallelism.js.map +1 -0
  110. package/dist/mail-latency.js +11 -1
  111. package/dist/mail-latency.js.map +1 -1
  112. package/dist/mcp-ci-findings.js +31 -0
  113. package/dist/mcp-ci-findings.js.map +1 -0
  114. package/dist/mcp-correlation.js +290 -0
  115. package/dist/mcp-correlation.js.map +1 -0
  116. package/dist/mcp-factory-context-read.js +81 -0
  117. package/dist/mcp-factory-context-read.js.map +1 -0
  118. package/dist/mcp-registry.js +202 -1
  119. package/dist/mcp-registry.js.map +1 -1
  120. package/dist/mcp.js +94 -5
  121. package/dist/mcp.js.map +1 -1
  122. package/dist/openrouter-reservation-guard.js +97 -0
  123. package/dist/openrouter-reservation-guard.js.map +1 -0
  124. package/dist/self-healing-analysis-loader.js +150 -0
  125. package/dist/self-healing-analysis-loader.js.map +1 -0
  126. package/dist/sender.js +11 -9
  127. package/dist/sender.js.map +1 -1
  128. package/dist/toml-lite.js +546 -0
  129. package/dist/toml-lite.js.map +1 -0
  130. package/dist/version-check.js +23 -7
  131. package/dist/version-check.js.map +1 -1
  132. package/package.json +5 -3
@@ -1 +1 @@
1
- {"version":3,"file":"sender.js","sourceRoot":"","sources":["../src/sender.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,EAAE;AACF,8EAA8E;AAC9E,gFAAgF;AAChF,gFAAgF;AAChF,qBAAqB;AACrB,EAAE;AACF,8EAA8E;AAC9E,6EAA6E;AAC7E,8EAA8E;AAC9E,2EAA2E;AAC3E,EAAE;AACF,2EAA2E;AAC3E,6EAA6E;AAC7E,yEAAyE;AACzE,iFAAiF;AACjF,EAAE;AACF,sEAAsE;AACtE,+EAA+E;AAC/E,gFAAgF;AAChF,4EAA4E;AAC5E,gFAAgF;AAEhF,uDAAuD;AACvD,wEAAwE;AACxE,uEAAuE;AACvE,gFAAgF;AAChF,2EAA2E;AAC3E,iDAAiD;AACjD,MAAM,CAAC,MAAM,YAAY,GAAG,2DAA2D,CAAC;AAiBxF,SAAS,GAAG,CAAI,CAAc;IAC5B,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;AACzD,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAAC,GAAiC;IAC7D,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC/B,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAClC,MAAM,UAAU,GAAG,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACxC,IAAI,UAAU;QAAE,OAAO,UAAU,CAAC;IAClC,MAAM,SAAS,GAAG,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACtC,IAAI,SAAS;QAAE,OAAO,SAAS,CAAC;IAChC,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"sender.js","sourceRoot":"","sources":["../src/sender.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,EAAE;AACF,8EAA8E;AAC9E,gFAAgF;AAChF,gFAAgF;AAChF,qBAAqB;AACrB,EAAE;AACF,8EAA8E;AAC9E,6EAA6E;AAC7E,8EAA8E;AAC9E,2EAA2E;AAC3E,EAAE;AACF,8EAA8E;AAC9E,6EAA6E;AAC7E,yEAAyE;AACzE,iFAAiF;AACjF,EAAE;AACF,sEAAsE;AACtE,6EAA6E;AAC7E,gFAAgF;AAChF,4EAA4E;AAC5E,gFAAgF;AAEhF,2DAA2D;AAC3D,wEAAwE;AACxE,uEAAuE;AACvE,mFAAmF;AACnF,gFAAgF;AAChF,2EAA2E;AAC3E,iDAAiD;AACjD,MAAM,CAAC,MAAM,YAAY,GAAG,+FAA+F,CAAC;AAsB5H,SAAS,GAAG,CAAI,CAAc;IAC5B,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;AACzD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,GAAiC;IAC7D,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC/B,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAClC,MAAM,WAAW,GAAG,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;IACzF,MAAM,MAAM,GAAG,QAAQ,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;IACrE,MAAM,UAAU,GAAG,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACxC,IAAI,UAAU;QAAE,OAAO,UAAU,CAAC;IAClC,MAAM,SAAS,GAAG,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACtC,IAAI,SAAS;QAAE,OAAO,SAAS,CAAC;IAChC,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,546 @@
1
+ /**
2
+ * toml-lite — a deliberately NARROW TOML lexical scanner. NOT a general TOML
3
+ * parser: it exists only to answer, safely, the two questions install.ts's
4
+ * Codex MCP registration needs answered about `~/.codex/config.toml` (a file
5
+ * we never own outright — Codex configs carry other hand-written
6
+ * `mcp_servers` sections we must never corrupt):
7
+ *
8
+ * 1. findTopLevelTableBlock() — does a GENUINE top-level table with the
9
+ * given dotted key (e.g. ["mcp_servers","codebus"]) exist, and if so
10
+ * what is its raw text span? "Genuine" means: the `[...]` header sits
11
+ * at the true start of a physical line (so a header-shaped fragment
12
+ * inside a `#` comment can never match — a comment line's first
13
+ * non-whitespace character is `#`, never `[`) AND doesn't fall inside a
14
+ * multi-line string literal elsewhere in the file (checked against a
15
+ * real string/comment lexical scan, not a raw substring search).
16
+ * 2. parseSimpleTomlTable() — what are that table's simple
17
+ * `key = "string"` / `key = ["string", ...]` assignments? Any line
18
+ * inside the block that ISN'T one of those two exact shapes (a nested
19
+ * table, an inline table, a multi-line value, a bare number/boolean/
20
+ * date, a dotted key, …) makes the whole table "not safely
21
+ * reasoned about" — the function returns null, and callers treat that
22
+ * the same as "hand-edited/unrecognized" (leave it alone) rather than
23
+ * guessing. This is intentionally conservative: it only ever proves
24
+ * structure it's certain about; unfamiliar structure fails CLOSED, in
25
+ * the direction of not touching the user's file.
26
+ *
27
+ * Security-audit context: a prior version of this file's caller located
28
+ * `[mcp_servers.codebus]` with a raw `text.indexOf("[mcp_servers.codebus]")`
29
+ * substring search. That is unsound both ways: it matches the same text
30
+ * sitting inside an unrelated table's COMMENT (silently corrupting that
31
+ * other table's real fields), and it MISSES a real header written with
32
+ * different whitespace or quoting (risking a duplicate, invalid table on
33
+ * append). This module replaces that with lexically-aware matching for
34
+ * exactly the shapes we need to reason about.
35
+ */
36
+ /**
37
+ * Single left-to-right pass classifying every string literal and comment in
38
+ * the text. Deliberately simple: it does not validate escape sequences or
39
+ * TOML's exact closing-quote-count rules for multi-line strings (e.g. up to
40
+ * two extra quote chars allowed inside `"""..."""`) — it just finds the next
41
+ * matching delimiter. Getting a boundary slightly wrong inside a value we
42
+ * don't otherwise understand only ever affects OUR OWN safety checks, never
43
+ * the file itself (we do not rewrite based on assumptions here beyond "is
44
+ * this index inside a string/comment").
45
+ */
46
+ function scanTomlLexicalRanges(text) {
47
+ const strings = [];
48
+ const comments = [];
49
+ const n = text.length;
50
+ let i = 0;
51
+ while (i < n) {
52
+ const c = text[i];
53
+ if (c === "#") {
54
+ const start = i;
55
+ while (i < n && text[i] !== "\n")
56
+ i++;
57
+ comments.push([start, i]);
58
+ continue;
59
+ }
60
+ if (text.startsWith('"""', i)) {
61
+ // Multi-line BASIC string — DOES process escapes, so an escaped
62
+ // `\"""` right before the true closing delimiter must not end the
63
+ // string early (sol round-2 finding #3). A naive `indexOf('"""')`
64
+ // would stop there, misclassifying everything after as "outside the
65
+ // string" — including, in the worst case, a header-shaped fragment
66
+ // that's actually still inside this value.
67
+ const start = i;
68
+ i += 3;
69
+ while (i < n) {
70
+ if (text[i] === "\\") {
71
+ i += 2;
72
+ continue;
73
+ }
74
+ if (text.startsWith('"""', i)) {
75
+ i += 3;
76
+ break;
77
+ }
78
+ i++;
79
+ }
80
+ strings.push([start, i]);
81
+ continue;
82
+ }
83
+ if (text.startsWith("'''", i)) {
84
+ // Multi-line LITERAL string — no escapes at all, so a plain substring
85
+ // search for the closing delimiter is correct here.
86
+ const start = i;
87
+ i += 3;
88
+ const end = text.indexOf("'''", i);
89
+ i = end === -1 ? n : end + 3;
90
+ strings.push([start, i]);
91
+ continue;
92
+ }
93
+ if (c === '"') {
94
+ const start = i;
95
+ i++;
96
+ while (i < n && text[i] !== "\n") {
97
+ if (text[i] === "\\") {
98
+ i += 2;
99
+ continue;
100
+ }
101
+ if (text[i] === '"') {
102
+ i++;
103
+ break;
104
+ }
105
+ i++;
106
+ }
107
+ strings.push([start, i]);
108
+ continue;
109
+ }
110
+ if (c === "'") {
111
+ // TOML literal strings have no escapes at all — the first `'` closes it.
112
+ const start = i;
113
+ i++;
114
+ while (i < n && text[i] !== "\n" && text[i] !== "'")
115
+ i++;
116
+ if (i < n && text[i] === "'")
117
+ i++;
118
+ strings.push([start, i]);
119
+ continue;
120
+ }
121
+ i++;
122
+ }
123
+ return { strings, comments };
124
+ }
125
+ /** Ranges are produced in strictly increasing start order — linear scan is fine for our file sizes. */
126
+ function isInsideRanges(idx, ranges) {
127
+ for (const [s, e] of ranges) {
128
+ if (idx >= s && idx < e)
129
+ return true;
130
+ if (idx < s)
131
+ break;
132
+ }
133
+ return false;
134
+ }
135
+ /** First index in [from,to) equal to `char` that isn't inside any excluded range. */
136
+ function findFirstUnexcluded(text, from, to, char, excluded) {
137
+ for (let idx = from; idx < to; idx++) {
138
+ if (text[idx] === char && !isInsideRanges(idx, excluded))
139
+ return idx;
140
+ }
141
+ return -1;
142
+ }
143
+ // ── Dotted-key parsing (for table headers) ─────────────────────────────────
144
+ /**
145
+ * Decodes a TOML basic (double-quoted) string's escape sequences per the
146
+ * TOML v1.0 spec: `\b \t \n \f \r \" \\ \uXXXX \UXXXXXXXX`. Deliberately
147
+ * narrow — not a general TOML string grammar, just these fixed escapes —
148
+ * but complete for them, unlike delegating to `JSON.parse` (sol round-4
149
+ * finding #2): JSON only supports `\uXXXX` (4-hex), NOT TOML's `\UXXXXXXXX`
150
+ * (8-hex, for code points beyond the BMP), so a validly-escaped header
151
+ * segment using `\U` was invisible to `parseDottedKey` entirely — the
152
+ * lexer would conclude "no match" for a header that, decoded, IS
153
+ * `mcp_servers.codebus`, and append a duplicate table right next to it.
154
+ * `String.fromCodePoint` handles the UTF-16 surrogate-pair conversion for
155
+ * an astral (>U+FFFF) code point correctly on its own — no manual surrogate
156
+ * math needed. `raw` includes the surrounding quotes. Returns null on any
157
+ * unrecognized or malformed/truncated escape — callers must treat that as
158
+ * "can't decode this segment," never guess at what it might mean.
159
+ */
160
+ function decodeTomlBasicString(raw) {
161
+ if (raw.length < 2 || raw[0] !== '"' || raw[raw.length - 1] !== '"')
162
+ return null;
163
+ const inner = raw.slice(1, -1);
164
+ let out = "";
165
+ let i = 0;
166
+ while (i < inner.length) {
167
+ const c = inner[i];
168
+ if (c !== "\\") {
169
+ out += c;
170
+ i++;
171
+ continue;
172
+ }
173
+ const next = inner[i + 1];
174
+ if (next === undefined)
175
+ return null; // trailing backslash — malformed
176
+ switch (next) {
177
+ case "b":
178
+ out += "\b";
179
+ i += 2;
180
+ break;
181
+ case "t":
182
+ out += "\t";
183
+ i += 2;
184
+ break;
185
+ case "n":
186
+ out += "\n";
187
+ i += 2;
188
+ break;
189
+ case "f":
190
+ out += "\f";
191
+ i += 2;
192
+ break;
193
+ case "r":
194
+ out += "\r";
195
+ i += 2;
196
+ break;
197
+ case '"':
198
+ out += '"';
199
+ i += 2;
200
+ break;
201
+ case "\\":
202
+ out += "\\";
203
+ i += 2;
204
+ break;
205
+ case "u": {
206
+ const hex = inner.slice(i + 2, i + 6);
207
+ if (!/^[0-9A-Fa-f]{4}$/.test(hex))
208
+ return null;
209
+ out += String.fromCharCode(parseInt(hex, 16));
210
+ i += 6;
211
+ break;
212
+ }
213
+ case "U": {
214
+ const hex = inner.slice(i + 2, i + 10);
215
+ if (!/^[0-9A-Fa-f]{8}$/.test(hex))
216
+ return null;
217
+ const codePoint = parseInt(hex, 16);
218
+ if (codePoint > 0x10ffff)
219
+ return null; // beyond the valid Unicode range
220
+ out += String.fromCodePoint(codePoint); // correctly emits a surrogate pair if codePoint > 0xFFFF
221
+ i += 10;
222
+ break;
223
+ }
224
+ default:
225
+ return null; // unrecognized escape
226
+ }
227
+ }
228
+ return out;
229
+ }
230
+ /**
231
+ * Parses the inside-the-brackets text of a table header (e.g.
232
+ * `mcp_servers.codebus` or ` mcp_servers . "codebus" ` or an escaped form
233
+ * like `"mcp_servers"."code\U00000062us"`) into its dotted key segments,
234
+ * unquoting AND unescaping quoted segments (via decodeTomlBasicString for
235
+ * basic strings) so an escaped spelling is correctly recognized as equal to
236
+ * its literal form. A literal (single-quoted) segment has NO escapes at all
237
+ * per the TOML spec, so it's used verbatim. Returns null for anything it
238
+ * isn't confident about (empty segment, unmatched/unparseable/unsupported
239
+ * escape, disallowed bare-key chars) — such a header simply never matches a
240
+ * dotted-key lookup, which is safe: the worst case is "not found," never a
241
+ * wrong match.
242
+ *
243
+ * Known, accepted limitation: a quoted segment containing a literal `.` is
244
+ * not handled (this naive version splits on every `.` first). That only
245
+ * risks a rare false negative for exotic keys neither of our own writers
246
+ * nor Codex's own real configs use for `mcp_servers.codebus` — not one of
247
+ * the drift shapes this module exists to catch.
248
+ */
249
+ function parseDottedKey(raw) {
250
+ const parts = raw.split(".");
251
+ const result = [];
252
+ for (const part of parts) {
253
+ const trimmed = part.trim();
254
+ if (trimmed.length === 0)
255
+ return null;
256
+ if (trimmed.startsWith('"') && trimmed.endsWith('"') && trimmed.length >= 2) {
257
+ const decoded = decodeTomlBasicString(trimmed);
258
+ if (decoded === null)
259
+ return null;
260
+ result.push(decoded);
261
+ }
262
+ else if (trimmed.startsWith("'") && trimmed.endsWith("'") && trimmed.length >= 2) {
263
+ result.push(trimmed.slice(1, -1)); // literal string: no escape processing at all
264
+ }
265
+ else if (/^[A-Za-z0-9_-]+$/.test(trimmed)) {
266
+ result.push(trimmed);
267
+ }
268
+ else {
269
+ return null;
270
+ }
271
+ }
272
+ return result;
273
+ }
274
+ /**
275
+ * Finds every genuine top-level `[a.b.c]` table header in the text.
276
+ * "Genuine" = the `[` is the first non-whitespace character of its physical
277
+ * line (so a `#`-comment line, whose first non-whitespace char is `#`, can
278
+ * never produce a match here — no substring search involved) AND that
279
+ * position doesn't fall inside a string literal recorded by
280
+ * scanTomlLexicalRanges (guards the rarer case of a multi-line string
281
+ * elsewhere in the file containing header-shaped text). Array-of-tables
282
+ * (`[[...]]`) headers never match the regex below (the second `[` breaks
283
+ * the "no nested brackets" character class) and are correctly ignored — we
284
+ * don't use or expect them for `mcp_servers.*`.
285
+ */
286
+ // A leading U+FEFF (byte-order mark) some editors — notably on Windows —
287
+ // prepend to the file. It can only ever appear at absolute position 0, so
288
+ // this only ever matters for a header on the very first line (sol round-2
289
+ // finding #3: a BOM-prefixed header was previously missed entirely, since
290
+ // `[ \t]*` doesn't match U+FEFF). Built via `new RegExp` with an explicit
291
+ // \uFEFF escape rather than embedding the literal character in source,
292
+ // which editors/tools can silently mishandle or strip.
293
+ //
294
+ // The trailing `\r?` (Luna/PR#110 finding) tolerates a CRLF line ending
295
+ // (Windows-written files, or any editor configured for it). JS regex `$`
296
+ // in multiline mode only asserts "right before a bare \n (or EOF)" — it
297
+ // does NOT treat `\r\n` as one unit, so without this, a header like
298
+ // `[mcp_servers.codebus]\r\n` never matched at all on a CRLF file:
299
+ // findTopLevelTableBlock() would report the table absent, falling through
300
+ // to the loose mightReferenceOurTable() sniff and being treated as
301
+ // "unrecognized" (safe — leave-alone, never corrupts — but breaks the
302
+ // intended self-heal/idempotent-matching on any CRLF file). `.` (used in
303
+ // `(#.*)?`) never matches a line terminator either, so the comment group
304
+ // already stops cleanly before a trailing `\r` — appending `\r?` here is
305
+ // enough, no need to touch the comment group itself. Consuming the `\r`
306
+ // INTO the match (rather than excluding it) also keeps HeaderMatch.lineEnd
307
+ // pointing at the index of the line's `\n` consistently for both line-
308
+ // ending styles.
309
+ const TOP_LEVEL_HEADER_RE = new RegExp("^\\uFEFF?[ \\t]*\\[([^[\\]\\n]*)\\][ \\t]*(#.*)?\\r?$", "gm");
310
+ function findAllTopLevelHeaders(text) {
311
+ const { strings } = scanTomlLexicalRanges(text);
312
+ const headerRe = new RegExp(TOP_LEVEL_HEADER_RE.source, TOP_LEVEL_HEADER_RE.flags); // fresh lastIndex per call
313
+ const matches = [];
314
+ let m;
315
+ while ((m = headerRe.exec(text)) !== null) {
316
+ if (isInsideRanges(m.index, strings))
317
+ continue;
318
+ matches.push({
319
+ lineStart: m.index,
320
+ lineEnd: m.index + m[0].length,
321
+ dottedKey: parseDottedKey(m[1]),
322
+ });
323
+ }
324
+ return matches;
325
+ }
326
+ /**
327
+ * Locate a genuine top-level table by its dotted key. Null if not present —
328
+ * OR if a second, genuinely separate occurrence of the SAME dotted key
329
+ * exists anywhere else in the file (Luna/PR#110 finding). Two
330
+ * `[mcp_servers.codebus]` headers is invalid/ambiguous TOML (a real parser
331
+ * may reject the file outright, or resolve the two differently — TOML's own
332
+ * spec forbids redefining a table); silently returning the FIRST match and
333
+ * treating the second as irrelevant would patch only one, report success,
334
+ * and leave a stale/duplicate table sitting right next to the "fixed" one.
335
+ * Deliberately returns null (rather than a distinct third outcome) here:
336
+ * install.ts's caller already has an established fallback for exactly this
337
+ * shape of ambiguity — findTopLevelTableBlock() returning null when
338
+ * mightReferenceOurTable() still finds a trace of the marker in the text is
339
+ * already read as "unrecognized, leave it alone, needs a human" (sol
340
+ * round-2 finding #3) rather than "genuinely absent, safe to append a fresh
341
+ * section" — and a second real header is exactly such a trace, so this
342
+ * reuses that fail-closed path instead of inventing a parallel one.
343
+ */
344
+ export function findTopLevelTableBlock(text, dottedKey) {
345
+ const headers = findAllTopLevelHeaders(text);
346
+ const matchingIndices = [];
347
+ for (let idx = 0; idx < headers.length; idx++) {
348
+ const h = headers[idx];
349
+ if (h.dottedKey && h.dottedKey.length === dottedKey.length && h.dottedKey.every((k, i) => k === dottedKey[i])) {
350
+ matchingIndices.push(idx);
351
+ }
352
+ }
353
+ if (matchingIndices.length !== 1)
354
+ return null; // 0 = genuinely absent; 2+ = duplicate, fail closed
355
+ const idx = matchingIndices[0];
356
+ const h = headers[idx];
357
+ const blockStart = Math.min(h.lineEnd + 1, text.length);
358
+ const blockEnd = idx + 1 < headers.length ? headers[idx + 1].lineStart : text.length;
359
+ return { headerStart: h.lineStart, blockStart, blockEnd };
360
+ }
361
+ /**
362
+ * Tokenizes a table body into one record per physical line: blank/comment
363
+ * lines get key=null; `key = value` lines get the key, the RAW value span
364
+ * (excluding a trailing comment), and the value parsed IF it's a plain JSON-
365
+ * compatible double-quoted string or an array of such strings (our own
366
+ * writer only ever emits those two shapes via JSON.stringify — a TOML
367
+ * basic string's escaping is a compatible subset of JSON's for the plain
368
+ * ASCII file paths we deal with). Any other line shape (nested/inline
369
+ * table, TOML literal string, number, boolean, date, dotted key, a
370
+ * multi-line value, …) returns null for the WHOLE table — callers must
371
+ * treat that as "can't safely reason about this table", not attempt a
372
+ * partial edit.
373
+ */
374
+ function tokenizeSimpleTomlBody(blockText) {
375
+ // Only STRING ranges are used to guard the '=' and '#' searches below — a
376
+ // "comment" range, by definition, starts AT its own '#' character, so
377
+ // excluding comment ranges here would make that very '#' un-findable
378
+ // (it would always test as "inside its own range").
379
+ const { strings } = scanTomlLexicalRanges(blockText);
380
+ const n = blockText.length;
381
+ const lines = [];
382
+ // Luna/PR#110 finding: a duplicate `key = ` line within the SAME table
383
+ // body is invalid TOML (the spec forbids redefining a key), but this
384
+ // tokenizer used to just let a later line silently win in the returned
385
+ // map (and replaceSimpleTomlValues would then rewrite EVERY occurrence to
386
+ // the same new value, papering over — not fixing — the fact that the
387
+ // source file has two authoritative values for one key). Tracked here,
388
+ // case-sensitively (TOML bare/quoted keys are), and — matching this
389
+ // function's own established contract ("any line we can't safely reason
390
+ // about invalidates the WHOLE table, not just that one line") — a
391
+ // duplicate makes the whole body return null: "unrecognized, don't touch."
392
+ const seenKeys = new Set();
393
+ let lineStart = 0;
394
+ while (lineStart <= n) {
395
+ let lineEnd = blockText.indexOf("\n", lineStart);
396
+ if (lineEnd === -1)
397
+ lineEnd = n;
398
+ const trimmed = blockText.slice(lineStart, lineEnd).trim();
399
+ if (trimmed === "" || trimmed.startsWith("#")) {
400
+ lines.push({ lineStart, lineEnd, key: null, valueStart: lineEnd, valueEnd: lineEnd, value: undefined });
401
+ lineStart = lineEnd + 1;
402
+ continue;
403
+ }
404
+ if (trimmed.startsWith("["))
405
+ return null; // a nested table header — shouldn't happen; bail safe if it does
406
+ const eqIdx = findFirstUnexcluded(blockText, lineStart, lineEnd, "=", strings);
407
+ if (eqIdx === -1)
408
+ return null; // not a `key = value` line — unsupported shape
409
+ const rawKey = blockText.slice(lineStart, eqIdx).trim();
410
+ let key;
411
+ if (/^[A-Za-z0-9_-]+$/.test(rawKey)) {
412
+ key = rawKey;
413
+ }
414
+ else if ((rawKey.startsWith('"') && rawKey.endsWith('"') && rawKey.length >= 2) ||
415
+ (rawKey.startsWith("'") && rawKey.endsWith("'") && rawKey.length >= 2)) {
416
+ key = rawKey.slice(1, -1);
417
+ }
418
+ else {
419
+ return null; // dotted or otherwise-unsupported key shape
420
+ }
421
+ if (seenKeys.has(key))
422
+ return null; // duplicate key within this table — invalid TOML, fail closed
423
+ seenKeys.add(key);
424
+ const commentIdx = findFirstUnexcluded(blockText, eqIdx + 1, lineEnd, "#", strings);
425
+ const rawValueEnd = commentIdx === -1 ? lineEnd : commentIdx;
426
+ // Trim whitespace around the value by scanning for the first/last
427
+ // non-whitespace offsets directly (avoids ambiguity from `.indexOf` on a
428
+ // char that could recur inside the value itself).
429
+ let vs = eqIdx + 1;
430
+ while (vs < rawValueEnd && /\s/.test(blockText[vs]))
431
+ vs++;
432
+ let ve = rawValueEnd;
433
+ while (ve > vs && /\s/.test(blockText[ve - 1]))
434
+ ve--;
435
+ let value;
436
+ const raw = blockText.slice(vs, ve);
437
+ if (raw.length > 0 && (raw[0] === '"' || raw[0] === "[")) {
438
+ try {
439
+ const parsed = JSON.parse(raw);
440
+ if (typeof parsed === "string")
441
+ value = parsed;
442
+ else if (Array.isArray(parsed) && parsed.every((x) => typeof x === "string"))
443
+ value = parsed;
444
+ }
445
+ catch {
446
+ /* leave undefined — unsupported value shape */
447
+ }
448
+ }
449
+ if (value === undefined)
450
+ return null; // unsupported value shape (number/bool/date/literal-string/inline-table/…)
451
+ lines.push({ lineStart, lineEnd, key, valueStart: vs, valueEnd: ve, value });
452
+ lineStart = lineEnd + 1;
453
+ }
454
+ return lines;
455
+ }
456
+ /**
457
+ * Returns the table body's simple key→value map, or null if any line inside
458
+ * it isn't one of the supported simple shapes (see tokenizeSimpleTomlBody).
459
+ * Includes EVERY key found, not just ones the caller expects — this is how
460
+ * callers detect an unexpected extra key (e.g. a hand-added `env`) as part
461
+ * of deciding whether a table is safely CodeBus-owned.
462
+ */
463
+ export function parseSimpleTomlTable(blockText) {
464
+ const lines = tokenizeSimpleTomlBody(blockText);
465
+ if (lines === null)
466
+ return null;
467
+ const result = {};
468
+ for (const line of lines) {
469
+ if (line.key !== null && line.value !== undefined)
470
+ result[line.key] = line.value;
471
+ }
472
+ return result;
473
+ }
474
+ /**
475
+ * Rewrites ONLY the value portion of `key = value` lines whose key appears
476
+ * in `replacements`, leaving every other byte of the block — blank lines,
477
+ * comments, unrelated keys, trailing per-line comments, whitespace — exactly
478
+ * as it was. Caller must have already confirmed (via parseSimpleTomlTable)
479
+ * that the block tokenizes cleanly; returns null otherwise so a caller can
480
+ * fail closed instead of guessing.
481
+ */
482
+ export function replaceSimpleTomlValues(blockText, replacements) {
483
+ const lines = tokenizeSimpleTomlBody(blockText);
484
+ if (lines === null)
485
+ return null;
486
+ let out = "";
487
+ let cursor = 0;
488
+ for (const line of lines) {
489
+ if (line.key !== null && Object.prototype.hasOwnProperty.call(replacements, line.key)) {
490
+ const newValue = replacements[line.key];
491
+ const encoded = Array.isArray(newValue) ? `[${newValue.map((v) => JSON.stringify(v)).join(", ")}]` : JSON.stringify(newValue);
492
+ out += blockText.slice(cursor, line.valueStart) + encoded;
493
+ cursor = line.valueEnd;
494
+ }
495
+ }
496
+ out += blockText.slice(cursor);
497
+ return out;
498
+ }
499
+ /**
500
+ * Replaces `\uXXXX` and `\UXXXXXXXX` escapes with their literal characters
501
+ * ANYWHERE in the text, ignoring every other escape and all unescaped
502
+ * content — a crude, best-effort widening used ONLY by
503
+ * mightReferenceOurTable() below, never by anything that actually parses or
504
+ * edits the file. A malformed/out-of-range escape is left exactly as-is
505
+ * (this is a sniff, not a validator: under-decoding just means the sniff's
506
+ * regex might miss it, which is the same "safe absence conclusion" risk
507
+ * mightReferenceOurTable already exists to shrink, not a new hazard).
508
+ */
509
+ function crudelyWidenUnicodeEscapes(text) {
510
+ return text
511
+ .replace(/\\u([0-9A-Fa-f]{4})/g, (m, hex) => String.fromCharCode(parseInt(hex, 16)))
512
+ .replace(/\\U([0-9A-Fa-f]{8})/g, (m, hex) => {
513
+ const codePoint = parseInt(hex, 16);
514
+ return codePoint <= 0x10ffff ? String.fromCodePoint(codePoint) : m;
515
+ });
516
+ }
517
+ /**
518
+ * Cheap, deliberately LOOSE sniff test: does ANYTHING in the text look even
519
+ * vaguely like it could be introducing an `mcp_servers.codebus` table —
520
+ * including forms findTopLevelTableBlock() doesn't structurally support
521
+ * (array-of-tables `[[mcp_servers.codebus]]`, a header form our lexer
522
+ * failed to fully validate, an edge case neither of us anticipated) —
523
+ * INCLUDING an escaped spelling like `[[mcp_servers."codebus"]]` (sol
524
+ * round-4 finding #2: the literal words "mcp_servers"/"codebus" don't
525
+ * appear as consecutive characters in an escaped header, so the regex alone
526
+ * would miss it; this widens the text first via crudelyWidenUnicodeEscapes
527
+ * so an escaped spelling is decoded to its literal one before matching)?
528
+ *
529
+ * Why this exists (sol round-2 finding #3): findTopLevelTableBlock()
530
+ * returning null is supposed to mean "genuinely absent," and install.ts
531
+ * treats that as safe to APPEND a fresh section. But null is *also* what a
532
+ * structurally-unsupported-but-real header produces (e.g. array-of-tables),
533
+ * and appending our own `[mcp_servers.codebus]` next to one of those risks
534
+ * invalid/duplicate/conflicting TOML. This loose regex — unanchored,
535
+ * tolerant of quoting and whitespace, matching even a single or double
536
+ * bracket — is used ONLY to upgrade that ambiguous "null" into "unrecognized,
537
+ * needs a human to look" rather than "absent, safe to append." It is NOT
538
+ * used for anything that actually gets parsed or edited; a false positive
539
+ * here only costs an extra "please check manually" message, never a wrong
540
+ * edit — the safe direction to err in.
541
+ */
542
+ export function mightReferenceOurTable(text) {
543
+ const widened = crudelyWidenUnicodeEscapes(text);
544
+ return /\[\s*\[?\s*['"]?mcp_servers['"]?\s*\.\s*['"]?codebus['"]?\s*\]?\s*\]/.test(widened);
545
+ }
546
+ //# sourceMappingURL=toml-lite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toml-lite.js","sourceRoot":"","sources":["../src/toml-lite.ts"],"names":[],"mappings":"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"}
@@ -18,20 +18,36 @@ function packageDir() {
18
18
  return dirname(dirname(fileURLToPath(import.meta.url)));
19
19
  }
20
20
  /**
21
- * True when the CLI runs from a source/linked checkout rather than a published
22
- * install. The published tarball ships only `bin` + `dist` (package.json
23
- * "files"), so a `src/` directory next to package.json means this is a dev
24
- * checkout — exactly the "arbitrary build from my own side" a user should move
25
- * off of onto the registry release.
21
+ * True when the given package root looks like a source/linked checkout
22
+ * rather than a published install. The published tarball ships only `bin` +
23
+ * `dist` (package.json "files"), so a `src/` directory next to package.json
24
+ * means this is a dev checkout — exactly the "arbitrary build from my own
25
+ * side" a user should move off of onto the registry release.
26
+ *
27
+ * Exported (not just isDevLinkedInstall()) so callers who need to classify
28
+ * a DIFFERENT install's package root — not this process's own — can reuse
29
+ * the exact same signal instead of re-deriving it. install.ts's MCP-pointer
30
+ * drift detection is the motivating case: it needs to know whether an
31
+ * ALREADY-REGISTERED pointer (found in some other config file, possibly
32
+ * pointing at a totally different machine path) was itself written from a
33
+ * checkout, which isDevLinkedInstall() alone can't answer (it only speaks to
34
+ * the CURRENTLY RUNNING process).
26
35
  */
27
- export function isDevLinkedInstall() {
36
+ export function isCheckoutShapedPackageRoot(pkgRoot) {
28
37
  try {
29
- return existsSync(join(packageDir(), "src"));
38
+ return existsSync(join(pkgRoot, "src"));
30
39
  }
31
40
  catch {
32
41
  return false;
33
42
  }
34
43
  }
44
+ /**
45
+ * True when the CLI runs from a source/linked checkout rather than a published
46
+ * install. See isCheckoutShapedPackageRoot() for the underlying signal.
47
+ */
48
+ export function isDevLinkedInstall() {
49
+ return isCheckoutShapedPackageRoot(packageDir());
50
+ }
35
51
  /** Parse "1.2.3" (ignoring any pre-release suffix) → [1,2,3]; null if bad. */
36
52
  function parse(v) {
37
53
  const m = /^v?(\d+)\.(\d+)\.(\d+)/.exec((v ?? "").trim());
@@ -1 +1 @@
1
- {"version":3,"file":"version-check.js","sourceRoot":"","sources":["../src/version-check.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"version-check.js","sourceRoot":"","sources":["../src/version-check.ts"],"names":[],"mappings":"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"}