clinkx 0.2.2 → 0.3.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 (145) hide show
  1. package/README.md +40 -1
  2. package/clinkx-workflows/dist/clink-client.js +35 -10
  3. package/clinkx-workflows/dist/clink-client.js.map +1 -1
  4. package/clinkx-workflows/dist/config.d.ts +10 -0
  5. package/clinkx-workflows/dist/config.js +18 -0
  6. package/clinkx-workflows/dist/config.js.map +1 -1
  7. package/clinkx-workflows/dist/council-expander.d.ts +43 -0
  8. package/clinkx-workflows/dist/council-expander.js +330 -0
  9. package/clinkx-workflows/dist/council-expander.js.map +1 -0
  10. package/clinkx-workflows/dist/index.d.ts +14 -0
  11. package/clinkx-workflows/dist/index.js +264 -16
  12. package/clinkx-workflows/dist/index.js.map +1 -1
  13. package/clinkx-workflows/dist/server.d.ts +8 -1
  14. package/clinkx-workflows/dist/server.js +87 -1
  15. package/clinkx-workflows/dist/server.js.map +1 -1
  16. package/clinkx-workflows/dist/shutdown.d.ts +5 -9
  17. package/clinkx-workflows/dist/shutdown.js +6 -23
  18. package/clinkx-workflows/dist/shutdown.js.map +1 -1
  19. package/clinkx-workflows/dist/state.d.ts +13 -0
  20. package/clinkx-workflows/dist/state.js +198 -2
  21. package/clinkx-workflows/dist/state.js.map +1 -1
  22. package/clinkx-workflows/dist/transport.js +24 -8
  23. package/clinkx-workflows/dist/transport.js.map +1 -1
  24. package/clinkx-workflows/dist/workflow-tools.d.ts +14 -1
  25. package/clinkx-workflows/dist/workflow-tools.js +173 -12
  26. package/clinkx-workflows/dist/workflow-tools.js.map +1 -1
  27. package/clinkx-workflows/dist/workflows/index.d.ts +4 -3
  28. package/clinkx-workflows/dist/workflows/index.js +4 -3
  29. package/clinkx-workflows/dist/workflows/index.js.map +1 -1
  30. package/clinkx-workflows/templates/council/answer-chairman.txt +49 -0
  31. package/clinkx-workflows/templates/council/answer-cross-reviewer.txt +37 -0
  32. package/clinkx-workflows/templates/council/answer-specialist.txt +40 -0
  33. package/clinkx-workflows/templates/council/chairman.txt +59 -0
  34. package/clinkx-workflows/templates/council/code-review-chairman.txt +57 -0
  35. package/clinkx-workflows/templates/council/code-review-cross-reviewer.txt +43 -0
  36. package/clinkx-workflows/templates/council/code-review-reviewer.txt +39 -0
  37. package/clinkx-workflows/templates/council/debug-chairman.txt +57 -0
  38. package/clinkx-workflows/templates/council/debug-cross-reviewer.txt +41 -0
  39. package/clinkx-workflows/templates/council/debug-debugger.txt +46 -0
  40. package/clinkx-workflows/templates/council/discover-analyst.txt +38 -0
  41. package/clinkx-workflows/templates/council/discover-chairman.txt +51 -0
  42. package/clinkx-workflows/templates/council/discover-cross-reviewer.txt +40 -0
  43. package/clinkx-workflows/templates/council/member.txt +48 -0
  44. package/clinkx-workflows/templates/council/reviewer.txt +57 -0
  45. package/clinkx-workflows/workflows/council-answer.yaml +147 -0
  46. package/clinkx-workflows/workflows/council-code-review.yaml +152 -0
  47. package/clinkx-workflows/workflows/council-debug.yaml +152 -0
  48. package/clinkx-workflows/workflows/council-default.yaml +147 -0
  49. package/clinkx-workflows/workflows/council-discover.yaml +147 -0
  50. package/conf/prompts/json-codereviewer.txt +1 -0
  51. package/conf/prompts/json.txt +1 -0
  52. package/dist/allowed-roots.d.ts +12 -0
  53. package/dist/allowed-roots.js +94 -0
  54. package/dist/allowed-roots.js.map +1 -0
  55. package/dist/context-builder/anchors.d.ts +11 -0
  56. package/dist/context-builder/anchors.js +19 -0
  57. package/dist/context-builder/anchors.js.map +1 -0
  58. package/dist/context-builder/bundle.d.ts +76 -0
  59. package/dist/context-builder/bundle.js +3573 -0
  60. package/dist/context-builder/bundle.js.map +1 -0
  61. package/dist/context-builder/codemap.d.ts +17 -0
  62. package/dist/context-builder/codemap.js +301 -0
  63. package/dist/context-builder/codemap.js.map +1 -0
  64. package/dist/context-builder/config.d.ts +60 -0
  65. package/dist/context-builder/config.js +204 -0
  66. package/dist/context-builder/config.js.map +1 -0
  67. package/dist/context-builder/delegate-packet.d.ts +182 -0
  68. package/dist/context-builder/delegate-packet.js +898 -0
  69. package/dist/context-builder/delegate-packet.js.map +1 -0
  70. package/dist/context-builder/delegate-reconstruction.d.ts +13 -0
  71. package/dist/context-builder/delegate-reconstruction.js +220 -0
  72. package/dist/context-builder/delegate-reconstruction.js.map +1 -0
  73. package/dist/context-builder/delegate-validation.d.ts +18 -0
  74. package/dist/context-builder/delegate-validation.js +367 -0
  75. package/dist/context-builder/delegate-validation.js.map +1 -0
  76. package/dist/context-builder/delegate.d.ts +24 -0
  77. package/dist/context-builder/delegate.js +133 -0
  78. package/dist/context-builder/delegate.js.map +1 -0
  79. package/dist/context-builder/diagnostics.d.ts +27 -0
  80. package/dist/context-builder/diagnostics.js +74 -0
  81. package/dist/context-builder/diagnostics.js.map +1 -0
  82. package/dist/context-builder/discovery.d.ts +118 -0
  83. package/dist/context-builder/discovery.js +1829 -0
  84. package/dist/context-builder/discovery.js.map +1 -0
  85. package/dist/context-builder/globs.d.ts +14 -0
  86. package/dist/context-builder/globs.js +175 -0
  87. package/dist/context-builder/globs.js.map +1 -0
  88. package/dist/context-builder/handler.d.ts +17 -0
  89. package/dist/context-builder/handler.js +3848 -0
  90. package/dist/context-builder/handler.js.map +1 -0
  91. package/dist/context-builder/path-signals.d.ts +7 -0
  92. package/dist/context-builder/path-signals.js +66 -0
  93. package/dist/context-builder/path-signals.js.map +1 -0
  94. package/dist/context-builder/paths.d.ts +30 -0
  95. package/dist/context-builder/paths.js +153 -0
  96. package/dist/context-builder/paths.js.map +1 -0
  97. package/dist/context-builder/progress.d.ts +15 -0
  98. package/dist/context-builder/progress.js +70 -0
  99. package/dist/context-builder/progress.js.map +1 -0
  100. package/dist/context-builder/receipt.d.ts +89 -0
  101. package/dist/context-builder/receipt.js +169 -0
  102. package/dist/context-builder/receipt.js.map +1 -0
  103. package/dist/context-builder/run-id.d.ts +7 -0
  104. package/dist/context-builder/run-id.js +31 -0
  105. package/dist/context-builder/run-id.js.map +1 -0
  106. package/dist/context-builder/schema.d.ts +431 -0
  107. package/dist/context-builder/schema.js +293 -0
  108. package/dist/context-builder/schema.js.map +1 -0
  109. package/dist/context-builder/secrets.d.ts +13 -0
  110. package/dist/context-builder/secrets.js +222 -0
  111. package/dist/context-builder/secrets.js.map +1 -0
  112. package/dist/context-builder/selection.d.ts +52 -0
  113. package/dist/context-builder/selection.js +1649 -0
  114. package/dist/context-builder/selection.js.map +1 -0
  115. package/dist/context-builder/status.d.ts +45 -0
  116. package/dist/context-builder/status.js +105 -0
  117. package/dist/context-builder/status.js.map +1 -0
  118. package/dist/context-builder/storage.d.ts +85 -0
  119. package/dist/context-builder/storage.js +746 -0
  120. package/dist/context-builder/storage.js.map +1 -0
  121. package/dist/context-builder/token-estimate.d.ts +8 -0
  122. package/dist/context-builder/token-estimate.js +17 -0
  123. package/dist/context-builder/token-estimate.js.map +1 -0
  124. package/dist/index.d.ts +11 -0
  125. package/dist/index.js +246 -14
  126. package/dist/index.js.map +1 -1
  127. package/dist/paths.d.ts +8 -0
  128. package/dist/paths.js +31 -43
  129. package/dist/paths.js.map +1 -1
  130. package/dist/pipeline.d.ts +48 -4
  131. package/dist/pipeline.js +164 -44
  132. package/dist/pipeline.js.map +1 -1
  133. package/dist/runner.d.ts +2 -2
  134. package/dist/runner.js +24 -3
  135. package/dist/runner.js.map +1 -1
  136. package/dist/server.d.ts +1 -0
  137. package/dist/server.js +42 -11
  138. package/dist/server.js.map +1 -1
  139. package/package.json +6 -2
  140. package/clinkx-workflows/dist/workflows/council-default.d.ts +0 -123
  141. package/clinkx-workflows/dist/workflows/council-default.js +0 -141
  142. package/clinkx-workflows/dist/workflows/council-default.js.map +0 -1
  143. package/dist/artifacts.d.ts +0 -9
  144. package/dist/artifacts.js +0 -24
  145. package/dist/artifacts.js.map +0 -1
@@ -0,0 +1,367 @@
1
+ import { z } from "zod";
2
+ import { InvalidParamsError } from "../errors.js";
3
+ import { contextBuilderCandidateId } from "./delegate-packet.js";
4
+ import { normalizeContextBuilderPublicBudget, } from "./schema.js";
5
+ import { hasEmbeddedAbsolutePath } from "./diagnostics.js";
6
+ import { scanHighConfidenceSecretContent, scanSecretPath, } from "./secrets.js";
7
+ const MAX_TEXT_CHARS = 1_000;
8
+ const MAX_SELECTED = 100;
9
+ const MAX_RANGES_PER_SELECTION = 100;
10
+ const MAX_DIAGNOSTICS = 100;
11
+ const SafeTextSchema = z.string().trim().min(1).max(MAX_TEXT_CHARS);
12
+ const CandidateIdSchema = z.string().trim().min(1).max(600);
13
+ const RangeSchema = z
14
+ .object({
15
+ start_line: z.number().int().positive(),
16
+ end_line: z.number().int().positive(),
17
+ reason: SafeTextSchema,
18
+ })
19
+ .strict();
20
+ const SelectionSchema = z
21
+ .object({
22
+ candidate_id: CandidateIdSchema,
23
+ ranges: z.array(RangeSchema).min(1).max(MAX_RANGES_PER_SELECTION),
24
+ reason: SafeTextSchema,
25
+ })
26
+ .strict();
27
+ const CuratorOutputSchema = z
28
+ .object({
29
+ selected: z.array(SelectionSchema).min(1).max(MAX_SELECTED),
30
+ warnings: z.array(SafeTextSchema).max(MAX_DIAGNOSTICS),
31
+ open_questions: z.array(SafeTextSchema).max(MAX_DIAGNOSTICS),
32
+ })
33
+ .strict();
34
+ const FinalizerOutputSchema = z
35
+ .object({
36
+ score: z.number().min(0).max(10),
37
+ approved: z.boolean(),
38
+ selected: z.array(SelectionSchema).min(1).max(MAX_SELECTED),
39
+ warnings: z.array(SafeTextSchema).max(MAX_DIAGNOSTICS),
40
+ omissions: z.array(SafeTextSchema).max(MAX_DIAGNOSTICS),
41
+ })
42
+ .strict();
43
+ const FORBIDDEN_PROVIDER_KEYS = new Set([
44
+ "absolute_path",
45
+ "content",
46
+ "contents",
47
+ "excerpt",
48
+ "preview",
49
+ "root_index",
50
+ "source",
51
+ "text",
52
+ ]);
53
+ export function validateContextBuilderCuratorOutput(output, options) {
54
+ rejectProviderSuppliedSource(output);
55
+ rejectEmptySelectedArray(output, "curator");
56
+ const parsed = parseWithSchema(CuratorOutputSchema, output, "curator");
57
+ const candidates = buildCandidateIndex(options.candidates);
58
+ validateSelections(parsed.selected, candidates);
59
+ validateTextFields([
60
+ ...parsed.selected.flatMap((selection) => [
61
+ selection.reason,
62
+ ...selection.ranges.map((range) => range.reason),
63
+ ]),
64
+ ...parsed.warnings,
65
+ ...parsed.open_questions,
66
+ ]);
67
+ validateBudget(parsed.selected, options.budget);
68
+ return parsed;
69
+ }
70
+ export function validateContextBuilderFinalizerOutput(output, options) {
71
+ rejectProviderSuppliedSource(output);
72
+ rejectEmptySelectedArray(output, "finalizer");
73
+ const parsed = parseWithSchema(FinalizerOutputSchema, output, "finalizer");
74
+ if (parsed.score < options.minScore) {
75
+ throw invalid(`context_builder finalizer score ${parsed.score} is below minimum ${options.minScore}`);
76
+ }
77
+ if (parsed.approved !== true) {
78
+ throw invalid("context_builder finalizer output must be approved");
79
+ }
80
+ if (parsed.omissions.length > 0) {
81
+ throw invalid("context_builder finalizer output cannot approve while reporting omissions");
82
+ }
83
+ validateTextFields([
84
+ ...parsed.selected.flatMap((selection) => [
85
+ selection.reason,
86
+ ...selection.ranges.map((range) => range.reason),
87
+ ]),
88
+ ...parsed.warnings,
89
+ ...parsed.omissions,
90
+ ]);
91
+ const materialWarning = parsed.warnings.find(isMaterialEvidenceGapWarning);
92
+ if (materialWarning != null) {
93
+ throw invalid("context_builder finalizer output cannot hide required evidence gaps in warnings");
94
+ }
95
+ const candidates = buildCandidateIndex(options.candidates);
96
+ validateSelections(parsed.selected, candidates);
97
+ validateBudget(parsed.selected, options.budget);
98
+ return {
99
+ ...parsed,
100
+ approved: true,
101
+ };
102
+ }
103
+ function rejectEmptySelectedArray(output, stage) {
104
+ if (output == null || typeof output !== "object" || Array.isArray(output)) {
105
+ return;
106
+ }
107
+ const selected = output["selected"];
108
+ if (Array.isArray(selected) && selected.length === 0) {
109
+ throw invalid(`Invalid context_builder ${stage} output: selected must contain at least one local candidate when candidates are available`);
110
+ }
111
+ }
112
+ function parseWithSchema(schema, output, stage) {
113
+ const result = schema.safeParse(output);
114
+ if (!result.success) {
115
+ throw invalid(`Invalid context_builder ${stage} output: ${result.error.issues
116
+ .map(formatZodIssue)
117
+ .join("; ")}`);
118
+ }
119
+ return result.data;
120
+ }
121
+ function formatZodIssue(issue) {
122
+ const path = formatZodIssuePath(issue.path);
123
+ if (issue.code === "unrecognized_keys") {
124
+ return `${path}: unrecognized keys are not allowed`;
125
+ }
126
+ if (issue.code === "invalid_type") {
127
+ return `${path}: invalid_type expected=${issue.expected} received=${issue.received}`;
128
+ }
129
+ if (issue.code === "too_small" || issue.code === "too_big") {
130
+ return `${path}: ${issue.code} type=${issue.type}`;
131
+ }
132
+ return `${path}: ${issue.code}`;
133
+ }
134
+ function formatZodIssuePath(path) {
135
+ if (path.length === 0) {
136
+ return "root";
137
+ }
138
+ return path
139
+ .map((segment) => `[${typeof segment === "number" ? "#" : segment}]`)
140
+ .join("");
141
+ }
142
+ function buildCandidateIndex(candidates) {
143
+ const byId = new Map();
144
+ for (const candidate of candidates) {
145
+ if (candidate.id.includes("\u0000") || byId.has(candidate.id)) {
146
+ throw invalid("context_builder delegate candidate universe is invalid");
147
+ }
148
+ if (!isSafeCandidatePath(candidate.path)) {
149
+ throw invalid("context_builder delegate candidate path is unsafe");
150
+ }
151
+ assertCandidateIdentity(candidate);
152
+ byId.set(candidate.id, candidate);
153
+ }
154
+ return { byId };
155
+ }
156
+ function validateSelections(selections, candidates) {
157
+ const seenCandidates = new Set();
158
+ for (const selection of selections) {
159
+ assertSafeCandidateId(selection.candidate_id);
160
+ if (seenCandidates.has(selection.candidate_id)) {
161
+ throw invalid("context_builder delegate output has duplicate candidate_id");
162
+ }
163
+ seenCandidates.add(selection.candidate_id);
164
+ const candidate = candidates.byId.get(selection.candidate_id);
165
+ if (candidate == null) {
166
+ throw invalid("context_builder delegate output references unknown candidate_id");
167
+ }
168
+ if (selection.ranges.length === 0) {
169
+ throw invalid("context_builder delegate output has empty ranges");
170
+ }
171
+ const seenRanges = new Set();
172
+ for (const range of selection.ranges) {
173
+ const key = `${range.start_line}:${range.end_line}`;
174
+ if (seenRanges.has(key)) {
175
+ throw invalid("context_builder delegate output has duplicate range");
176
+ }
177
+ seenRanges.add(key);
178
+ validateRange(candidate, range);
179
+ }
180
+ }
181
+ }
182
+ function validateRange(candidate, range) {
183
+ if (candidate.line_count <= 0) {
184
+ throw invalid("context_builder delegate output selected a range from zero-line candidate");
185
+ }
186
+ if (range.start_line > range.end_line) {
187
+ throw invalid("context_builder delegate output has reversed range");
188
+ }
189
+ if (range.end_line > candidate.line_count) {
190
+ throw invalid("context_builder delegate output range exceeds local line count");
191
+ }
192
+ if (!isCoveredByCandidateRanges(candidate, range)) {
193
+ throw invalid("context_builder delegate output range is outside eligible packet ranges");
194
+ }
195
+ }
196
+ function validateBudget(selections, budget) {
197
+ const effectiveBudget = budget ?? normalizeContextBuilderPublicBudget();
198
+ if (selections.length > effectiveBudget.max_files) {
199
+ throw invalid("context_builder delegate output exceeds max_files budget");
200
+ }
201
+ }
202
+ function validateTextFields(fields) {
203
+ for (const field of fields) {
204
+ if (isUnsafeDelegateText(field)) {
205
+ throw invalid("context_builder delegate output contains unsafe text");
206
+ }
207
+ }
208
+ }
209
+ function isUnsafeDelegateText(text) {
210
+ if (text.includes("\u0000") ||
211
+ scanHighConfidenceSecretContent(text).length > 0 ||
212
+ hasEmbeddedAbsolutePath(text)) {
213
+ return true;
214
+ }
215
+ const decodedText = decodePathToken(text);
216
+ if (decodedText !== text && hasEmbeddedAbsolutePath(decodedText)) {
217
+ return true;
218
+ }
219
+ const tokens = decodedText.split(/\s+/).filter(Boolean);
220
+ return tokens.some((token) => isUnsafePathLikeToken(trimPunctuation(token)));
221
+ }
222
+ function isMaterialEvidenceGapWarning(message) {
223
+ const text = message.toLowerCase();
224
+ if (isNonBlockingDelegateWarning(text)) {
225
+ return false;
226
+ }
227
+ return (/\b(required|requested|focus(?:ed)?)\b.{0,80}\b(missing|missed|incomplete|unavailable|insufficient|omitted|not selected|not selectable|unselectable|not present)\b/.test(text) ||
228
+ /\b(missing|missed|incomplete|unavailable|insufficient|omitted|not selected|not selectable|unselectable|not present)\b.{0,80}\b(required|requested|focus(?:ed)?)\b/.test(text) ||
229
+ /\bselected\b.{0,80}\b(not selectable|unselectable|not present)\b/.test(text) ||
230
+ /\boutside (?:the )?selected ranges?\b/.test(text));
231
+ }
232
+ function isNonBlockingDelegateWarning(text) {
233
+ return (/\bpacket evidence omitted full source excerpts\b/.test(text) ||
234
+ /\bfull source excerpts? (?:were )?omitted\b/.test(text) ||
235
+ /\bfull-file focus ranges?\b.{0,120}\b(?:excerpts?|full source)\b.{0,80}\b(?:omitted|truncated)\b/.test(text) ||
236
+ /\bfull source excerpts?\b.{0,80}\bunavailable\b.{0,120}\bwhole-file focus ranges?\b/.test(text) ||
237
+ /\bblank excerpts?\b.{0,80}\bpacket\b.{0,160}\bselected ranges?\b.{0,80}\bprioritize\b.{0,120}\b(?:deterministic focus ranges?|task-critical)\b/.test(text) ||
238
+ /\blarge integration files?\b.{0,120}\brepresented only by available packet slices\b.{0,160}\bavoid claiming coverage outside selected ranges\b/.test(text) ||
239
+ isSecretSafetyOmissionWarning(text) ||
240
+ /\bomitted from deterministic_selection\b.{0,120}\bbut selected\b/.test(text) ||
241
+ isFocusPreservingSkipWarning(text) ||
242
+ isDeterministicExpansionWarning(text));
243
+ }
244
+ function isSecretSafetyOmissionWarning(text) {
245
+ return (/\b(?:high-confidence secret|secret detection|secret safety|secret[- ]safe|redacted|redacted-safe|redaction)\b/.test(text) &&
246
+ /\b(?:omitted|excluded|not selected|not requested|should not be requested|unavailable)\b/.test(text));
247
+ }
248
+ function isFocusPreservingSkipWarning(text) {
249
+ return (/\b(?:unrelated|irrelevant|out-of-scope|low[- ]signal)\b.{0,120}\b(?:not selected|omitted|skipped)\b.{0,80}\bpreserve focus\b/.test(text) ||
250
+ /\b(?:not selected|omitted|skipped)\b.{0,120}\b(?:unrelated|irrelevant|out-of-scope|low[- ]signal)\b.{0,80}\bpreserve focus\b/.test(text));
251
+ }
252
+ function isDeterministicExpansionWarning(text) {
253
+ return (/\bselection\b.{0,80}\b(?:intentionally\s+)?(?:exceeds|exceeded|expands beyond|expanded beyond|extends beyond|extended beyond)\b.{0,120}\bdeterministic\b.{0,160}\binsufficient\b/.test(text) &&
254
+ !/\b(missing|missed|omitted|not selected|not selectable|unselectable|not present|unavailable)\b/.test(text));
255
+ }
256
+ function trimPunctuation(token) {
257
+ return token.replace(/^[("'`[{]+/, "").replace(/[)"'`,.;:\]}]+$/, "");
258
+ }
259
+ function isUnsafePathLikeToken(token) {
260
+ const decoded = decodePathToken(token);
261
+ const values = decoded === token ? [token] : [token, decoded];
262
+ return values.some((value) => {
263
+ if (value.includes("\u0000")) {
264
+ return true;
265
+ }
266
+ if (value.startsWith("/") ||
267
+ value.startsWith("\\") ||
268
+ value.startsWith("~/") ||
269
+ /^[A-Za-z]:/.test(value) ||
270
+ /^file:\/\//i.test(value) ||
271
+ /^\\\\/.test(value)) {
272
+ return true;
273
+ }
274
+ if (value.includes("/") && value.includes("\\")) {
275
+ return true;
276
+ }
277
+ const slashNormalized = value.replaceAll("\\", "/");
278
+ return (slashNormalized === ".." ||
279
+ slashNormalized.startsWith("../") ||
280
+ slashNormalized.includes("/../") ||
281
+ slashNormalized.endsWith("/.."));
282
+ });
283
+ }
284
+ function decodePathToken(token) {
285
+ try {
286
+ return decodeURIComponent(token);
287
+ }
288
+ catch {
289
+ return token;
290
+ }
291
+ }
292
+ function assertSafeCandidateId(candidateId) {
293
+ const parsed = parseCandidateId(candidateId);
294
+ if (parsed == null ||
295
+ !isSafeCandidatePath(parsed.path) ||
296
+ contextBuilderCandidateId(parsed.rootIndex, parsed.path) !== candidateId) {
297
+ throw invalid("context_builder delegate output has unsafe candidate_id");
298
+ }
299
+ }
300
+ function parseCandidateId(candidateId) {
301
+ const match = /^c:([0-9]+):(.+)$/.exec(candidateId);
302
+ if (match == null) {
303
+ return null;
304
+ }
305
+ const rawRootIndex = match[1];
306
+ const path = match[2];
307
+ if (rawRootIndex == null || path == null) {
308
+ return null;
309
+ }
310
+ const rootIndex = Number(rawRootIndex);
311
+ if (!Number.isSafeInteger(rootIndex)) {
312
+ return null;
313
+ }
314
+ return { rootIndex, path };
315
+ }
316
+ function assertCandidateIdentity(candidate) {
317
+ const expectedId = contextBuilderCandidateId(candidate.root_index, candidate.path);
318
+ if (candidate.id !== expectedId) {
319
+ throw invalid(`context_builder delegate candidate id mismatch: expected ${expectedId} for ${candidate.path}`);
320
+ }
321
+ }
322
+ function isCoveredByCandidateRanges(candidate, range) {
323
+ let nextLine = range.start_line;
324
+ for (const candidateRange of [...candidate.ranges].sort((left, right) => left.start_line - right.start_line || left.end_line - right.end_line)) {
325
+ if (candidateRange.end_line < nextLine) {
326
+ continue;
327
+ }
328
+ if (candidateRange.start_line > nextLine) {
329
+ return false;
330
+ }
331
+ nextLine = Math.max(nextLine, candidateRange.end_line + 1);
332
+ if (nextLine > range.end_line) {
333
+ return true;
334
+ }
335
+ }
336
+ return false;
337
+ }
338
+ function isSafeCandidatePath(path) {
339
+ const decoded = decodePathToken(path);
340
+ const values = decoded === path ? [path] : [path, decoded];
341
+ return (path.length > 0 &&
342
+ !isUnsafePathLikeToken(path) &&
343
+ values.every((value) => scanSecretPath(value).length === 0));
344
+ }
345
+ function rejectProviderSuppliedSource(value) {
346
+ const stack = [value];
347
+ while (stack.length > 0) {
348
+ const current = stack.pop();
349
+ if (current == null || typeof current !== "object") {
350
+ continue;
351
+ }
352
+ if (Array.isArray(current)) {
353
+ stack.push(...current);
354
+ continue;
355
+ }
356
+ for (const [key, child] of Object.entries(current)) {
357
+ if (FORBIDDEN_PROVIDER_KEYS.has(key)) {
358
+ throw invalid(`context_builder delegate output must not include provider-supplied ${key}`);
359
+ }
360
+ stack.push(child);
361
+ }
362
+ }
363
+ }
364
+ function invalid(message) {
365
+ return new InvalidParamsError(message);
366
+ }
367
+ //# sourceMappingURL=delegate-validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delegate-validation.js","sourceRoot":"","sources":["../../src/context-builder/delegate-validation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { type PipelineResult } from "../pipeline.js";
2
+ import type { AdapterRegistry } from "../registry.js";
3
+ import type { ContextBuilderDelegateProviderConfig } from "./schema.js";
4
+ export type ContextBuilderDelegateFailureReason = "pipeline_error" | "empty_output" | "timeout" | "strict_json_fidelity" | "invalid_json";
5
+ export type ContextBuilderDelegateCallInput = {
6
+ prompt: string;
7
+ provider: ContextBuilderDelegateProviderConfig;
8
+ registry: AdapterRegistry;
9
+ timeout_seconds: number;
10
+ max_response_chars: number;
11
+ signal?: AbortSignal;
12
+ };
13
+ export type ContextBuilderDelegateCallResult = {
14
+ ok: true;
15
+ json: Record<string, unknown>;
16
+ raw: string;
17
+ pipeline: PipelineResult;
18
+ } | {
19
+ ok: false;
20
+ reason: ContextBuilderDelegateFailureReason;
21
+ message: string;
22
+ pipeline?: PipelineResult;
23
+ };
24
+ export declare function runContextBuilderDelegateCall(input: ContextBuilderDelegateCallInput): Promise<ContextBuilderDelegateCallResult>;
@@ -0,0 +1,133 @@
1
+ import { CancellationError } from "../errors.js";
2
+ import { executePipeline } from "../pipeline.js";
3
+ export async function runContextBuilderDelegateCall(input) {
4
+ const child = new AbortController();
5
+ let timedOut = false;
6
+ let parentCancelled = input.signal?.aborted === true;
7
+ const timeoutMs = Math.max(0, Math.floor(input.timeout_seconds * 1_000));
8
+ const timeout = setTimeout(() => {
9
+ timedOut = true;
10
+ child.abort();
11
+ }, timeoutMs);
12
+ const abortFromParent = () => {
13
+ parentCancelled = true;
14
+ child.abort();
15
+ };
16
+ if (parentCancelled) {
17
+ child.abort();
18
+ }
19
+ else {
20
+ input.signal?.addEventListener("abort", abortFromParent, { once: true });
21
+ }
22
+ try {
23
+ const clinkInput = {
24
+ prompt: input.prompt,
25
+ cli_name: input.provider.cli_name,
26
+ role: input.provider.role,
27
+ expect_json: true,
28
+ max_response_chars: input.max_response_chars,
29
+ timeout_seconds: input.timeout_seconds,
30
+ debug: false,
31
+ debug_keep_artifacts: false,
32
+ };
33
+ const pipeline = await executePipeline(clinkInput, input.registry, {
34
+ signal: child.signal,
35
+ jsonFidelity: "strict",
36
+ allowTimeoutBelowAdapter: true,
37
+ });
38
+ const termination = pipeline.jsonFidelity?.termination;
39
+ if (parentCancelled) {
40
+ throw new CancellationError();
41
+ }
42
+ if (termination?.timedOut === true || termination?.reason === "wall") {
43
+ return failure("timeout", "context_builder delegate call timed out", pipeline);
44
+ }
45
+ if (termination?.reason === "cancel") {
46
+ throw new CancellationError();
47
+ }
48
+ const fidelity = pipeline.jsonFidelity;
49
+ const strict = fidelity?.strict;
50
+ if (fidelity == null ||
51
+ fidelity.mode !== "strict" ||
52
+ strict?.acceptable !== true) {
53
+ return failure("strict_json_fidelity", strictJsonFidelityMessage(fidelity), pipeline);
54
+ }
55
+ if (pipeline.isError === true) {
56
+ return failure("pipeline_error", "context_builder delegate pipeline returned an error", pipeline);
57
+ }
58
+ const raw = pipeline.content[0]?.text?.trim() ?? "";
59
+ if (raw.length === 0 || raw === "(no output)") {
60
+ return failure("empty_output", "context_builder delegate returned empty output", pipeline);
61
+ }
62
+ try {
63
+ const parsed = JSON.parse(raw);
64
+ if (parsed == null ||
65
+ typeof parsed !== "object" ||
66
+ Array.isArray(parsed)) {
67
+ return failure("invalid_json", "context_builder delegate output must be one JSON object", pipeline);
68
+ }
69
+ return {
70
+ ok: true,
71
+ json: parsed,
72
+ raw,
73
+ pipeline,
74
+ };
75
+ }
76
+ catch {
77
+ return failure("invalid_json", "context_builder delegate output was not valid JSON", pipeline);
78
+ }
79
+ }
80
+ catch (err) {
81
+ if (err instanceof CancellationError) {
82
+ if (parentCancelled) {
83
+ throw err;
84
+ }
85
+ if (timedOut) {
86
+ return failure("timeout", "context_builder delegate call timed out");
87
+ }
88
+ throw err;
89
+ }
90
+ return failure("pipeline_error", err instanceof Error
91
+ ? `context_builder delegate pipeline failed: ${err.message}`
92
+ : "context_builder delegate pipeline failed");
93
+ }
94
+ finally {
95
+ clearTimeout(timeout);
96
+ input.signal?.removeEventListener("abort", abortFromParent);
97
+ }
98
+ }
99
+ function failure(reason, message, pipeline) {
100
+ return {
101
+ ok: false,
102
+ reason,
103
+ message,
104
+ ...(pipeline == null ? {} : { pipeline }),
105
+ };
106
+ }
107
+ function strictJsonFidelityMessage(fidelity) {
108
+ const details = [];
109
+ if (fidelity == null) {
110
+ details.push("missing jsonFidelity metadata");
111
+ }
112
+ else {
113
+ if (fidelity.mode !== "strict") {
114
+ details.push(`mode=${fidelity.mode}`);
115
+ }
116
+ if (fidelity.rejectionReason != null) {
117
+ details.push(`rejection=${fidelity.rejectionReason}`);
118
+ }
119
+ if (fidelity.parseStatus != null) {
120
+ details.push(`parse=${fidelity.parseStatus}`);
121
+ }
122
+ if (fidelity.strict?.acceptable !== true) {
123
+ details.push("strict.acceptable is not true");
124
+ }
125
+ if ((fidelity.strict?.violations.length ?? 0) > 0) {
126
+ details.push(`violations=${fidelity.strict.violations.join(", ")}`);
127
+ }
128
+ }
129
+ return details.length === 0
130
+ ? "context_builder delegate JSON fidelity rejected output"
131
+ : `context_builder delegate JSON fidelity rejected output: ${details.join("; ")}`;
132
+ }
133
+ //# sourceMappingURL=delegate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delegate.js","sourceRoot":"","sources":["../../src/context-builder/delegate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { type ContextBuilderInternalCaps } from "./config.js";
2
+ export type ContextBuilderWarning = {
3
+ code: string;
4
+ message: string;
5
+ };
6
+ export type ContextBuilderOmission = {
7
+ root_index?: number;
8
+ reason: string;
9
+ message: string;
10
+ paths?: string[];
11
+ omitted_path_count?: number;
12
+ };
13
+ export declare const CONTEXT_BUILDER_REQUESTED_EVIDENCE_OMISSION_REASON = "requested_evidence_omission";
14
+ export type ContextBuilderRequestedEvidenceOmissionKind = "unavailable" | "too_large" | "candidate_cap" | "discovery_candidate_cap" | "packet_token_cap" | "pruned";
15
+ export declare function requestedEvidenceOmission(input: {
16
+ root_index?: number;
17
+ kind: ContextBuilderRequestedEvidenceOmissionKind;
18
+ message: string;
19
+ paths?: string[];
20
+ }): ContextBuilderOmission;
21
+ export declare function isRequestedEvidenceOmission(omission: Pick<ContextBuilderOmission, "reason">): boolean;
22
+ export declare function boundContextBuilderWarnings(warnings: ContextBuilderWarning[], caps?: Pick<ContextBuilderInternalCaps, "max_warnings">): ContextBuilderWarning[];
23
+ export declare function boundContextBuilderOmissions(omissions: ContextBuilderOmission[], caps?: Pick<ContextBuilderInternalCaps, "max_omissions" | "max_paths_per_omission">): ContextBuilderOmission[];
24
+ export declare function boundContextBuilderPathList(paths: string[], maxPaths?: number): string[];
25
+ export declare function sanitizeDiagnosticText(text: string): string;
26
+ export declare function hasEmbeddedAbsolutePath(text: string): boolean;
27
+ export declare function sanitizeProgressMessage(message: string): string;
@@ -0,0 +1,74 @@
1
+ import { CONTEXT_BUILDER_INTERNAL_CAP_DEFAULTS, } from "./config.js";
2
+ import { hasHighConfidenceSecret, scanSecretPath } from "./secrets.js";
3
+ export const CONTEXT_BUILDER_REQUESTED_EVIDENCE_OMISSION_REASON = "requested_evidence_omission";
4
+ export function requestedEvidenceOmission(input) {
5
+ return {
6
+ ...(input.root_index == null ? {} : { root_index: input.root_index }),
7
+ reason: CONTEXT_BUILDER_REQUESTED_EVIDENCE_OMISSION_REASON,
8
+ message: `Requested local evidence omitted (${input.kind}): ${input.message}`,
9
+ ...(input.paths == null ? {} : { paths: input.paths }),
10
+ };
11
+ }
12
+ export function isRequestedEvidenceOmission(omission) {
13
+ return omission.reason === CONTEXT_BUILDER_REQUESTED_EVIDENCE_OMISSION_REASON;
14
+ }
15
+ const MAX_DIAGNOSTIC_TEXT_LENGTH = 240;
16
+ const MAX_PROGRESS_TEXT_LENGTH = 120;
17
+ const MAX_PATH_TEXT_LENGTH = 300;
18
+ const EMBEDDED_ABSOLUTE_PATH_PATTERN = /(^|[\s=:(\["'`])((?:~\/|\/(?!\/)|[A-Za-z]:[\\/]|\\\\)[^\s"'`,;)\]}]*)/g;
19
+ export function boundContextBuilderWarnings(warnings, caps = CONTEXT_BUILDER_INTERNAL_CAP_DEFAULTS) {
20
+ return warnings.slice(0, caps.max_warnings).map((warning) => ({
21
+ code: sanitizeDiagnosticText(warning.code),
22
+ message: sanitizeDiagnosticText(warning.message),
23
+ }));
24
+ }
25
+ export function boundContextBuilderOmissions(omissions, caps = CONTEXT_BUILDER_INTERNAL_CAP_DEFAULTS) {
26
+ return omissions.slice(0, caps.max_omissions).map((omission) => ({
27
+ ...(omission.root_index == null ? {} : { root_index: omission.root_index }),
28
+ reason: sanitizeDiagnosticText(omission.reason),
29
+ message: sanitizeDiagnosticText(omission.message),
30
+ ...(omission.paths == null
31
+ ? {}
32
+ : {
33
+ paths: boundContextBuilderPathList(omission.paths, caps.max_paths_per_omission),
34
+ omitted_path_count: Math.max(0, omission.paths.length - caps.max_paths_per_omission),
35
+ }),
36
+ }));
37
+ }
38
+ export function boundContextBuilderPathList(paths, maxPaths = CONTEXT_BUILDER_INTERNAL_CAP_DEFAULTS.max_paths_per_omission) {
39
+ return paths.slice(0, maxPaths).map(sanitizePathText);
40
+ }
41
+ export function sanitizeDiagnosticText(text) {
42
+ const collapsed = redactEmbeddedAbsolutePaths(text.replace(/\s+/g, " ").trim());
43
+ if (hasHighConfidenceSecret(collapsed)) {
44
+ return "[redacted-sensitive]";
45
+ }
46
+ const bounded = collapsed.length > MAX_DIAGNOSTIC_TEXT_LENGTH
47
+ ? `${collapsed.slice(0, MAX_DIAGNOSTIC_TEXT_LENGTH - 3)}...`
48
+ : collapsed;
49
+ return bounded;
50
+ }
51
+ export function hasEmbeddedAbsolutePath(text) {
52
+ EMBEDDED_ABSOLUTE_PATH_PATTERN.lastIndex = 0;
53
+ return EMBEDDED_ABSOLUTE_PATH_PATTERN.test(text);
54
+ }
55
+ function redactEmbeddedAbsolutePaths(text) {
56
+ EMBEDDED_ABSOLUTE_PATH_PATTERN.lastIndex = 0;
57
+ return text.replace(EMBEDDED_ABSOLUTE_PATH_PATTERN, "$1[redacted-absolute-path]");
58
+ }
59
+ export function sanitizeProgressMessage(message) {
60
+ const sanitized = sanitizeDiagnosticText(message);
61
+ return sanitized.length > MAX_PROGRESS_TEXT_LENGTH
62
+ ? `${sanitized.slice(0, MAX_PROGRESS_TEXT_LENGTH - 3)}...`
63
+ : sanitized;
64
+ }
65
+ function sanitizePathText(path) {
66
+ const normalized = path.replace(/[\r\n\u0000]/g, "?");
67
+ if (scanSecretPath(normalized).length > 0 ||
68
+ hasHighConfidenceSecret(normalized)) {
69
+ return "[redacted-sensitive-path]";
70
+ }
71
+ const bounded = normalized.slice(0, MAX_PATH_TEXT_LENGTH);
72
+ return bounded;
73
+ }
74
+ //# sourceMappingURL=diagnostics.js.map