@wrongstack/core 0.313.0 → 0.313.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.
Files changed (182) hide show
  1. package/dist/chronicle/index.js +84 -6391
  2. package/dist/chronicle/project-server.js +84 -4868
  3. package/dist/chunk-2BUUIMQB.js +225 -0
  4. package/dist/chunk-2FK4WTFF.js +207 -0
  5. package/dist/chunk-2FQL4PDC.js +292 -0
  6. package/dist/chunk-2KKODIQU.js +2256 -0
  7. package/dist/chunk-2YU4WVBW.js +134 -0
  8. package/dist/chunk-3E244UDA.js +356 -0
  9. package/dist/chunk-3XPVB7BA.js +135 -0
  10. package/dist/chunk-4LJJYBAU.js +388 -0
  11. package/dist/chunk-4VWO3ZXL.js +342 -0
  12. package/dist/chunk-4XV6IR37.js +187 -0
  13. package/dist/chunk-4ZHTKJHM.js +183 -0
  14. package/dist/chunk-52RTVH4M.js +361 -0
  15. package/dist/chunk-57GEWK5X.js +26 -0
  16. package/dist/chunk-5DSMEVA4.js +931 -0
  17. package/dist/chunk-5RP3QTRL.js +1223 -0
  18. package/dist/chunk-5S437PRC.js +50 -0
  19. package/dist/chunk-5XDUGTKN.js +511 -0
  20. package/dist/chunk-62V2AFVG.js +422 -0
  21. package/dist/chunk-65RDIOR2.js +2470 -0
  22. package/dist/chunk-6AKOTGLM.js +597 -0
  23. package/dist/chunk-7ZHZE5EO.js +28 -0
  24. package/dist/chunk-A455ATZB.js +140 -0
  25. package/dist/chunk-AD7ZFZCS.js +46 -0
  26. package/dist/chunk-AI4LLQ2U.js +856 -0
  27. package/dist/chunk-ASX6AW36.js +789 -0
  28. package/dist/chunk-AT4V4XGI.js +3522 -0
  29. package/dist/chunk-AWNQ6ED6.js +311 -0
  30. package/dist/chunk-B4AMLZPB.js +9 -0
  31. package/dist/chunk-BAKVJLEV.js +417 -0
  32. package/dist/chunk-BJHVULHO.js +55 -0
  33. package/dist/chunk-CB2HFKTP.js +9 -0
  34. package/dist/chunk-CE4ZOCOI.js +1640 -0
  35. package/dist/chunk-CQQL4ZOQ.js +151 -0
  36. package/dist/chunk-DEIQMBD2.js +65 -0
  37. package/dist/chunk-E6I5RXVK.js +58 -0
  38. package/dist/chunk-EFEHDQGY.js +1589 -0
  39. package/dist/chunk-EODDVJBM.js +82 -0
  40. package/dist/chunk-EPC3GZD4.js +308 -0
  41. package/dist/chunk-FAYRX2AD.js +13 -0
  42. package/dist/chunk-FFSX2QDQ.js +362 -0
  43. package/dist/chunk-FHAMQS7Q.js +5856 -0
  44. package/dist/chunk-FIV4IJL7.js +2263 -0
  45. package/dist/chunk-FNXVT7HF.js +52 -0
  46. package/dist/chunk-FSWCWSTS.js +395 -0
  47. package/dist/chunk-FW5LDDMJ.js +16464 -0
  48. package/dist/chunk-FXQLIX3K.js +211 -0
  49. package/dist/chunk-G5AAKEEZ.js +228 -0
  50. package/dist/chunk-G5S3S5ZN.js +38 -0
  51. package/dist/chunk-GAZEWQEZ.js +231 -0
  52. package/dist/chunk-GFJOMSHG.js +125 -0
  53. package/dist/chunk-GFXZTHNI.js +158 -0
  54. package/dist/chunk-GM54GJBU.js +960 -0
  55. package/dist/chunk-GPQ3NJPR.js +900 -0
  56. package/dist/chunk-GTCU6DZ3.js +1 -0
  57. package/dist/chunk-H5E77KUJ.js +15 -0
  58. package/dist/chunk-H72H4XDU.js +1023 -0
  59. package/dist/chunk-HA4ZYA6T.js +178 -0
  60. package/dist/chunk-I45KAW2N.js +5020 -0
  61. package/dist/chunk-IQ35HMQL.js +1396 -0
  62. package/dist/chunk-IYFBFX34.js +86 -0
  63. package/dist/chunk-JJPMWPB6.js +109 -0
  64. package/dist/chunk-JTHKOYWU.js +663 -0
  65. package/dist/chunk-JVGPR3TS.js +365 -0
  66. package/dist/chunk-JVKB2TBL.js +48 -0
  67. package/dist/chunk-JX7VBZDK.js +31 -0
  68. package/dist/chunk-K3G6JBUC.js +5232 -0
  69. package/dist/chunk-K4YUNKU7.js +589 -0
  70. package/dist/chunk-KBZGE6LN.js +710 -0
  71. package/dist/chunk-KDQJCT2J.js +45 -0
  72. package/dist/chunk-KI4L2DUL.js +560 -0
  73. package/dist/chunk-KJ2ZTQSL.js +47 -0
  74. package/dist/chunk-KSJ5UTP7.js +154 -0
  75. package/dist/chunk-LHOA5DWA.js +28 -0
  76. package/dist/chunk-LX5QWLBL.js +27 -0
  77. package/dist/chunk-LZDDLNCZ.js +279 -0
  78. package/dist/chunk-M2WF6AXG.js +115 -0
  79. package/dist/chunk-M7BS2K6U.js +1 -0
  80. package/dist/chunk-NDBIPFNY.js +102 -0
  81. package/dist/chunk-NEMIWEXC.js +1199 -0
  82. package/dist/chunk-NFAYHPRH.js +323 -0
  83. package/dist/chunk-O37BQ65S.js +21 -0
  84. package/dist/chunk-O74MJHXU.js +187 -0
  85. package/dist/chunk-OJZEX73F.js +112 -0
  86. package/dist/chunk-PAAWLLZX.js +74 -0
  87. package/dist/chunk-PFXFQQRT.js +339 -0
  88. package/dist/chunk-PFZO3C6H.js +14 -0
  89. package/dist/chunk-PHH7LD45.js +113 -0
  90. package/dist/chunk-QRTG4XTI.js +188 -0
  91. package/dist/chunk-QVOVMXJR.js +1351 -0
  92. package/dist/chunk-RCQYT2I4.js +757 -0
  93. package/dist/chunk-RD6DEE36.js +1178 -0
  94. package/dist/chunk-RJIZEJ42.js +30 -0
  95. package/dist/chunk-RPOA7IAE.js +150 -0
  96. package/dist/chunk-SN2DQRL6.js +1172 -0
  97. package/dist/chunk-SQJVFEBV.js +41 -0
  98. package/dist/chunk-SQP64RCS.js +5391 -0
  99. package/dist/chunk-SVT4RNTR.js +49 -0
  100. package/dist/chunk-SWUFN7XM.js +43 -0
  101. package/dist/chunk-SXMVYC5H.js +174 -0
  102. package/dist/chunk-SZ6AYUIZ.js +23 -0
  103. package/dist/chunk-T3KGZBU5.js +3171 -0
  104. package/dist/chunk-TBRL2RCC.js +9 -0
  105. package/dist/chunk-TRT2HRWZ.js +18 -0
  106. package/dist/chunk-TYW2GI5I.js +1077 -0
  107. package/dist/chunk-UIWONWVG.js +4959 -0
  108. package/dist/chunk-VB3H5WWB.js +151 -0
  109. package/dist/chunk-W4A6QA3D.js +258 -0
  110. package/dist/chunk-WBPVKEEE.js +227 -0
  111. package/dist/chunk-WEBMSQP2.js +123 -0
  112. package/dist/chunk-WOEZV3Q4.js +333 -0
  113. package/dist/chunk-WQQON3SV.js +473 -0
  114. package/dist/chunk-WQTOVMGV.js +119 -0
  115. package/dist/chunk-WZO23AWO.js +2779 -0
  116. package/dist/chunk-XBDP4QPW.js +7 -0
  117. package/dist/chunk-XEBHSJLT.js +103 -0
  118. package/dist/chunk-XQ2ECNK3.js +1 -0
  119. package/dist/chunk-XQ2XGIBF.js +2086 -0
  120. package/dist/chunk-Y2GE5TSI.js +355 -0
  121. package/dist/chunk-YBUJCZ57.js +351 -0
  122. package/dist/chunk-YNCVSFGF.js +149 -0
  123. package/dist/chunk-YUPMXOGP.js +282 -0
  124. package/dist/chunk-YY6APYUM.js +49 -0
  125. package/dist/chunk-Z2IJUO45.js +691 -0
  126. package/dist/chunk-ZEHUCJHY.js +129 -0
  127. package/dist/chunk-ZYU2YOJ6.js +1496 -0
  128. package/dist/chunk-ZZ4V3WIZ.js +163 -0
  129. package/dist/coordination/agents/index.js +145 -6260
  130. package/dist/coordination/index.js +365 -34324
  131. package/dist/coordination/mailbox-project-server.js +48 -3276
  132. package/dist/coordination/provider-status-tracker.d.ts +4 -0
  133. package/dist/core/agent.d.ts +14 -1
  134. package/dist/core/index.js +267 -12480
  135. package/dist/core/model-ref.js +5 -23
  136. package/dist/core/provider-runner.d.ts +36 -1
  137. package/dist/design/index.js +50 -1087
  138. package/dist/execution/index.d.ts +1 -1
  139. package/dist/execution/index.js +1599 -21888
  140. package/dist/execution/prompt-enhancer.js +16 -535
  141. package/dist/execution/retry-policy.d.ts +31 -1
  142. package/dist/extension/index.js +7 -311
  143. package/dist/goal/index.js +33 -3435
  144. package/dist/hooks/index.js +14 -1138
  145. package/dist/hq/index.js +112 -5139
  146. package/dist/hq/protocol.js +21 -668
  147. package/dist/index.js +1410 -92656
  148. package/dist/infrastructure/index.js +64 -4811
  149. package/dist/kernel/events/provider-events.d.ts +15 -0
  150. package/dist/kernel/index.js +14 -992
  151. package/dist/models/index.js +40 -1117
  152. package/dist/notifications/index.js +3 -108
  153. package/dist/observability/index.js +17 -279
  154. package/dist/plugin/index.js +584 -14835
  155. package/dist/prompts/index.js +14 -948
  156. package/dist/registry/index.js +9 -822
  157. package/dist/registry-R23UBE7H.js +14 -0
  158. package/dist/replay/index.js +6 -84
  159. package/dist/review-finding-store-DKAV3AS6.js +21 -0
  160. package/dist/review-report-store-OWY3EC3N.js +19 -0
  161. package/dist/security/index.js +114 -2202
  162. package/dist/session-catalog/index.js +36 -2103
  163. package/dist/session-catalog/project-server.js +42 -1435
  164. package/dist/skills/index.js +35 -1578
  165. package/dist/storage/index.js +182 -15600
  166. package/dist/tasking/index.js +10 -676
  167. package/dist/tools/index.js +52 -9590
  168. package/dist/types/config/autonomy.d.ts +5 -0
  169. package/dist/types/config/ui.d.ts +1 -1
  170. package/dist/types/errors.d.ts +18 -0
  171. package/dist/types/index.js +121 -1342
  172. package/dist/types/provider-runner.d.ts +8 -0
  173. package/dist/types/session-markers.js +8 -144
  174. package/dist/utils/error.js +3 -4
  175. package/dist/utils/expect-defined.js +3 -9
  176. package/dist/utils/heap-watchdog.js +6 -706
  177. package/dist/utils/index.js +269 -5685
  178. package/dist/utils/sage-output-block.js +5 -42
  179. package/dist/wiring/proxy-rewrite.d.ts +18 -0
  180. package/dist/wiring/proxy-rewrite.js +18 -121
  181. package/dist/worktree/index.js +6 -887
  182. package/package.json +4 -4
@@ -0,0 +1,362 @@
1
+ import {
2
+ FORBIDDEN_PROTO_KEYS
3
+ } from "./chunk-DEIQMBD2.js";
4
+ import {
5
+ atomicWrite
6
+ } from "./chunk-7ZHZE5EO.js";
7
+
8
+ // src/utils/config-json.ts
9
+ import * as fs from "node:fs/promises";
10
+ async function readJsonObjectFile(filePath) {
11
+ try {
12
+ const parsed = JSON.parse(await fs.readFile(filePath, "utf8"));
13
+ return isJsonObject(parsed) ? parsed : {};
14
+ } catch {
15
+ return {};
16
+ }
17
+ }
18
+ async function jsonObjectFileExists(filePath) {
19
+ try {
20
+ await fs.access(filePath);
21
+ return true;
22
+ } catch {
23
+ return false;
24
+ }
25
+ }
26
+ async function writeJsonObjectFile(filePath, value) {
27
+ await atomicWrite(filePath, JSON.stringify(value, null, 2), { mode: 384 });
28
+ }
29
+ async function updateJsonObjectFile(filePath, mutator) {
30
+ const config = await readJsonObjectFile(filePath);
31
+ const maybeNext = await mutator(config);
32
+ const next = maybeNext && isJsonObject(maybeNext) ? maybeNext : config;
33
+ await writeJsonObjectFile(filePath, next);
34
+ return next;
35
+ }
36
+ function isForbiddenSegment(segment) {
37
+ return typeof segment === "string" && FORBIDDEN_PROTO_KEYS.has(segment);
38
+ }
39
+ function assertSafePath(path) {
40
+ for (const segment of path) {
41
+ if (isForbiddenSegment(segment)) {
42
+ throw new Error(`Refusing to use reserved key "${String(segment)}" in a JSON path`);
43
+ }
44
+ }
45
+ }
46
+ function getJsonPath(root, path) {
47
+ if (path.some(isForbiddenSegment)) return void 0;
48
+ let current = root;
49
+ for (const segment of path) {
50
+ if (typeof segment === "number") {
51
+ if (!Array.isArray(current)) return void 0;
52
+ current = current[segment];
53
+ continue;
54
+ }
55
+ if (!isJsonObject(current)) return void 0;
56
+ current = current[segment];
57
+ }
58
+ return current;
59
+ }
60
+ function setJsonPath(root, path, value) {
61
+ assertSafePath(path);
62
+ if (path.length === 0) {
63
+ if (!isJsonObject(value)) throw new Error("Root config value must be an object");
64
+ return value;
65
+ }
66
+ const parent = ensureJsonParent(root, path);
67
+ const leaf = lastPathSegment(path);
68
+ if (typeof leaf === "number") {
69
+ if (!Array.isArray(parent))
70
+ throw new Error(`Cannot set numeric segment ${leaf} on non-array parent`);
71
+ parent[leaf] = value;
72
+ } else {
73
+ if (!isJsonObject(parent)) throw new Error(`Cannot set property ${leaf} on non-object parent`);
74
+ parent[leaf] = value;
75
+ }
76
+ return root;
77
+ }
78
+ function removeJsonPath(root, path) {
79
+ if (path.some(isForbiddenSegment)) return false;
80
+ if (path.length === 0) return false;
81
+ const parent = getJsonPath(root, path.slice(0, -1));
82
+ const leaf = lastPathSegment(path);
83
+ if (typeof leaf === "number") {
84
+ if (!Array.isArray(parent) || leaf < 0 || leaf >= parent.length) return false;
85
+ parent.splice(leaf, 1);
86
+ return true;
87
+ }
88
+ if (!isJsonObject(parent) || !(leaf in parent)) return false;
89
+ delete parent[leaf];
90
+ return true;
91
+ }
92
+ async function setJsonPathInFile(filePath, path, value) {
93
+ return updateJsonObjectFile(filePath, (config) => setJsonPath(config, path, value));
94
+ }
95
+ async function removeJsonPathInFile(filePath, path) {
96
+ return updateJsonObjectFile(filePath, (config) => {
97
+ removeJsonPath(config, path);
98
+ });
99
+ }
100
+ function isJsonObject(value) {
101
+ return typeof value === "object" && value !== null && !Array.isArray(value);
102
+ }
103
+ function lastPathSegment(path) {
104
+ const segment = path[path.length - 1];
105
+ if (segment === void 0) throw new Error("Invalid empty JSON path");
106
+ return segment;
107
+ }
108
+ function ensureJsonParent(root, path) {
109
+ assertSafePath(path);
110
+ let current = root;
111
+ for (let i = 0; i < path.length - 1; i += 1) {
112
+ const segment = path[i];
113
+ const nextSegment = path[i + 1];
114
+ if (segment === void 0) throw new Error("Invalid empty JSON path segment");
115
+ const nextContainer = typeof nextSegment === "number" ? [] : {};
116
+ if (typeof segment === "number") {
117
+ if (!Array.isArray(current))
118
+ throw new Error(`Cannot traverse numeric segment ${segment} on non-array parent`);
119
+ if (!isJsonObject(current[segment]) && !Array.isArray(current[segment]))
120
+ current[segment] = nextContainer;
121
+ current = current[segment];
122
+ } else {
123
+ if (!isJsonObject(current))
124
+ throw new Error(`Cannot traverse property ${segment} on non-object parent`);
125
+ if (!isJsonObject(current[segment]) && !Array.isArray(current[segment]))
126
+ current[segment] = nextContainer;
127
+ current = current[segment];
128
+ }
129
+ }
130
+ return current;
131
+ }
132
+
133
+ // src/utils/json-schema-validate.ts
134
+ function validateAgainstSchema(value, schema) {
135
+ const errors = [];
136
+ walk(value, schema, "", errors, 0);
137
+ return { ok: errors.length === 0, errors };
138
+ }
139
+ var MAX_SCHEMA_DEPTH = 64;
140
+ function walk(value, schema, path, errors, depth) {
141
+ if (depth > MAX_SCHEMA_DEPTH) {
142
+ errors.push({
143
+ path: path || "<root>",
144
+ message: `schema nesting exceeds maximum depth (${MAX_SCHEMA_DEPTH})`
145
+ });
146
+ return;
147
+ }
148
+ if (schema.enum !== void 0) {
149
+ if (!enumIncludes(schema.enum, value)) {
150
+ errors.push({
151
+ path: path || "<root>",
152
+ message: `expected one of ${JSON.stringify(schema.enum)}, got ${JSON.stringify(value)}`
153
+ });
154
+ return;
155
+ }
156
+ }
157
+ if (typeof schema.type === "string") {
158
+ if (!checkType(value, schema.type)) {
159
+ errors.push({
160
+ path: path || "<root>",
161
+ message: `expected ${schema.type}, got ${describeType(value)} (${previewValue(value)})`
162
+ });
163
+ return;
164
+ }
165
+ }
166
+ if (schema.type === "object" && isPlainObject(value)) {
167
+ const obj = value;
168
+ for (const req of schema.required ?? []) {
169
+ if (!(req in obj)) {
170
+ const expected = schema.properties?.[req]?.type;
171
+ errors.push({
172
+ path: joinPath(path, req),
173
+ message: `required property missing${typeof expected === "string" ? ` (expected ${expected})` : ""}`
174
+ });
175
+ }
176
+ }
177
+ if (schema.properties) {
178
+ for (const [key, subSchema] of Object.entries(schema.properties)) {
179
+ if (key in obj) {
180
+ walk(obj[key], subSchema, joinPath(path, key), errors, depth + 1);
181
+ }
182
+ }
183
+ }
184
+ }
185
+ if (schema.type === "array" && Array.isArray(value) && schema.items) {
186
+ for (let i = 0; i < value.length; i++) {
187
+ walk(value[i], schema.items, `${path}[${i}]`, errors, depth + 1);
188
+ }
189
+ }
190
+ }
191
+ function coerceAgainstSchema(value, schema) {
192
+ return coerceWalk(value, schema, 0);
193
+ }
194
+ function coerceWalk(value, schema, depth) {
195
+ if (depth > MAX_SCHEMA_DEPTH) return { value, changed: false };
196
+ const type = typeof schema.type === "string" ? schema.type : void 0;
197
+ if (type && !checkType(value, type)) {
198
+ if (type === "string" && (typeof value === "number" || typeof value === "boolean")) {
199
+ return { value: String(value), changed: true };
200
+ }
201
+ if ((type === "number" || type === "integer") && typeof value === "string") {
202
+ const trimmed = value.trim();
203
+ if (trimmed !== "" && /^-?(\d+\.?\d*|\.\d+)([eE][+-]?\d+)?$/.test(trimmed)) {
204
+ const num = Number(trimmed);
205
+ if (!Number.isNaN(num) && (type === "number" || Number.isInteger(num))) {
206
+ return { value: num, changed: true };
207
+ }
208
+ }
209
+ return { value, changed: false };
210
+ }
211
+ if (type === "boolean" && typeof value === "string") {
212
+ const lowered = value.trim().toLowerCase();
213
+ if (lowered === "true") return { value: true, changed: true };
214
+ if (lowered === "false") return { value: false, changed: true };
215
+ return { value, changed: false };
216
+ }
217
+ if ((type === "object" || type === "array") && typeof value === "string") {
218
+ try {
219
+ const parsed = JSON.parse(value);
220
+ if (checkType(parsed, type)) {
221
+ return { value: coerceWalk(parsed, schema, depth + 1).value, changed: true };
222
+ }
223
+ } catch {
224
+ }
225
+ return { value, changed: false };
226
+ }
227
+ return { value, changed: false };
228
+ }
229
+ if (type === "object" && isPlainObject(value) && schema.properties) {
230
+ const obj = value;
231
+ let changed = false;
232
+ const out = { ...obj };
233
+ for (const [key, subSchema] of Object.entries(schema.properties)) {
234
+ if (!(key in obj)) continue;
235
+ const r = coerceWalk(obj[key], subSchema, depth + 1);
236
+ if (r.changed) {
237
+ out[key] = r.value;
238
+ changed = true;
239
+ }
240
+ }
241
+ return changed ? { value: out, changed } : { value, changed: false };
242
+ }
243
+ if (type === "array" && Array.isArray(value) && schema.items) {
244
+ let changed = false;
245
+ const out = value.map((item) => {
246
+ const r = coerceWalk(item, schema.items, depth + 1);
247
+ if (r.changed) changed = true;
248
+ return r.value;
249
+ });
250
+ return changed ? { value: out, changed } : { value, changed: false };
251
+ }
252
+ return { value, changed: false };
253
+ }
254
+ function checkType(value, type) {
255
+ switch (type) {
256
+ case "string":
257
+ return typeof value === "string";
258
+ case "number":
259
+ return typeof value === "number" && !Number.isNaN(value);
260
+ case "integer":
261
+ return typeof value === "number" && Number.isInteger(value);
262
+ case "boolean":
263
+ return typeof value === "boolean";
264
+ case "null":
265
+ return value === null;
266
+ case "array":
267
+ return Array.isArray(value);
268
+ case "object":
269
+ return isPlainObject(value);
270
+ default:
271
+ return true;
272
+ }
273
+ }
274
+ function isPlainObject(v) {
275
+ return typeof v === "object" && v !== null && !Array.isArray(v);
276
+ }
277
+ function describeType(v) {
278
+ if (v === null) return "null";
279
+ if (Array.isArray(v)) return "array";
280
+ return typeof v;
281
+ }
282
+ function previewValue(v) {
283
+ try {
284
+ const s = JSON.stringify(v);
285
+ if (s === void 0) return String(v);
286
+ return s.length > 80 ? `${s.slice(0, 80)}\u2026` : s;
287
+ } catch {
288
+ return String(v);
289
+ }
290
+ }
291
+ function joinPath(parent, key) {
292
+ if (!parent) return key;
293
+ return `${parent}.${key}`;
294
+ }
295
+ function enumIncludes(values, value) {
296
+ if (value === null || typeof value !== "object") return values.includes(value);
297
+ return values.some((candidate) => deepEqual(candidate, value));
298
+ }
299
+ function deepEqual(a, b) {
300
+ if (a === b) return true;
301
+ if (typeof a !== typeof b) return false;
302
+ if (a === null || b === null) return a === b;
303
+ if (Array.isArray(a) && Array.isArray(b)) {
304
+ return a.length === b.length && a.every((v, i) => deepEqual(v, b[i]));
305
+ }
306
+ if (typeof a === "object" && typeof b === "object") {
307
+ const ak = Object.keys(a);
308
+ const bk = Object.keys(b);
309
+ if (ak.length !== bk.length) return false;
310
+ return ak.every(
311
+ (k) => deepEqual(a[k], b[k])
312
+ );
313
+ }
314
+ return false;
315
+ }
316
+
317
+ // src/utils/tool-name.ts
318
+ import { createHash } from "node:crypto";
319
+ var WIRE_TOOL_NAME_MAX_LENGTH = 128;
320
+ var WIRE_TOOL_NAME_PATTERN = /^[a-zA-Z0-9_-]{1,128}$/;
321
+ var MCP_SERVER_SEGMENT_MAX_LENGTH = 48;
322
+ var MCP_IDENTITY_HASH_LENGTH = 10;
323
+ function sanitizeWireToolName(name) {
324
+ const replaced = name.replace(/[^a-zA-Z0-9_-]/g, "_");
325
+ const clamped = replaced.slice(0, WIRE_TOOL_NAME_MAX_LENGTH);
326
+ return clamped.length > 0 ? clamped : "tool";
327
+ }
328
+ function collisionSafeMcpSegment(value, maxLength) {
329
+ const replaced = value.replace(/[^a-zA-Z0-9_-]/g, "_") || "tool";
330
+ if (replaced === value && replaced.length <= maxLength) return replaced;
331
+ const suffix = `_${createHash("sha256").update(value, "utf8").digest("hex").slice(0, MCP_IDENTITY_HASH_LENGTH)}`;
332
+ return `${replaced.slice(0, Math.max(1, maxLength - suffix.length))}${suffix}`;
333
+ }
334
+ function mcpServerToolPrefix(serverName) {
335
+ return `mcp__${collisionSafeMcpSegment(serverName, MCP_SERVER_SEGMENT_MAX_LENGTH)}__`;
336
+ }
337
+ function mcpQualifiedToolName(serverName, toolName) {
338
+ const prefix = mcpServerToolPrefix(serverName);
339
+ const toolSegment = collisionSafeMcpSegment(toolName, WIRE_TOOL_NAME_MAX_LENGTH - prefix.length);
340
+ return `${prefix}${toolSegment}`;
341
+ }
342
+
343
+ export {
344
+ readJsonObjectFile,
345
+ jsonObjectFileExists,
346
+ writeJsonObjectFile,
347
+ updateJsonObjectFile,
348
+ getJsonPath,
349
+ setJsonPath,
350
+ removeJsonPath,
351
+ setJsonPathInFile,
352
+ removeJsonPathInFile,
353
+ isJsonObject,
354
+ validateAgainstSchema,
355
+ coerceAgainstSchema,
356
+ WIRE_TOOL_NAME_MAX_LENGTH,
357
+ WIRE_TOOL_NAME_PATTERN,
358
+ sanitizeWireToolName,
359
+ mcpServerToolPrefix,
360
+ mcpQualifiedToolName
361
+ };
362
+ //# sourceMappingURL=chunk-FFSX2QDQ.js.map