linersh 1.1.3 → 1.2.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 (62) hide show
  1. package/README.md +15 -61
  2. package/bin/liner.js +60 -16
  3. package/package.json +10 -17
  4. package/cli-update-docs/README.md +0 -129
  5. package/cli-update-docs/SKILL.md +0 -294
  6. package/cli-update-docs/curator-notes.md +0 -85
  7. package/cli-update-docs/quality-check-tests.md +0 -435
  8. package/cli-update-docs/source-finding-tactics.md +0 -224
  9. package/cli-update-docs/source-quality-hierarchy.md +0 -209
  10. package/cli-update-docs/synthesis-guidance.md +0 -151
  11. package/dist/agents/artifact-validation.js +0 -567
  12. package/dist/agents/artifact-validation.js.map +0 -1
  13. package/dist/agents/candidate-longlist.js +0 -116
  14. package/dist/agents/candidate-longlist.js.map +0 -1
  15. package/dist/agents/detect.js +0 -169
  16. package/dist/agents/detect.js.map +0 -1
  17. package/dist/agents/evaluation-assembly.js +0 -270
  18. package/dist/agents/evaluation-assembly.js.map +0 -1
  19. package/dist/agents/events.js +0 -8
  20. package/dist/agents/events.js.map +0 -1
  21. package/dist/agents/headless-runner.js +0 -432
  22. package/dist/agents/headless-runner.js.map +0 -1
  23. package/dist/agents/jtbd-clarify.js +0 -169
  24. package/dist/agents/jtbd-clarify.js.map +0 -1
  25. package/dist/agents/models.js +0 -98
  26. package/dist/agents/models.js.map +0 -1
  27. package/dist/agents/parsers.js +0 -316
  28. package/dist/agents/parsers.js.map +0 -1
  29. package/dist/agents/prompts.js +0 -522
  30. package/dist/agents/prompts.js.map +0 -1
  31. package/dist/agents/run-log.js +0 -71
  32. package/dist/agents/run-log.js.map +0 -1
  33. package/dist/agents/runner.js +0 -906
  34. package/dist/agents/runner.js.map +0 -1
  35. package/dist/agents/types.js +0 -2
  36. package/dist/agents/types.js.map +0 -1
  37. package/dist/bin-resolver.js +0 -92
  38. package/dist/bin-resolver.js.map +0 -1
  39. package/dist/config.js +0 -282
  40. package/dist/config.js.map +0 -1
  41. package/dist/editor.js +0 -40
  42. package/dist/editor.js.map +0 -1
  43. package/dist/gates.js +0 -121
  44. package/dist/gates.js.map +0 -1
  45. package/dist/ipc.js +0 -145
  46. package/dist/ipc.js.map +0 -1
  47. package/dist/open-folder.js +0 -28
  48. package/dist/open-folder.js.map +0 -1
  49. package/dist/phases.js +0 -346
  50. package/dist/phases.js.map +0 -1
  51. package/dist/progress.js +0 -184
  52. package/dist/progress.js.map +0 -1
  53. package/dist/source-inbox.js +0 -297
  54. package/dist/source-inbox.js.map +0 -1
  55. package/dist/types.js +0 -3
  56. package/dist/types.js.map +0 -1
  57. package/dist/version.js +0 -18
  58. package/dist/version.js.map +0 -1
  59. package/dist/yaml-io.js +0 -376
  60. package/dist/yaml-io.js.map +0 -1
  61. package/maintenance-skill/SKILL.md +0 -18
  62. package/maintenance-skill/agents/openai.yaml +0 -4
@@ -1,567 +0,0 @@
1
- import { existsSync, readFileSync } from "node:fs";
2
- import { join } from "node:path";
3
- import * as YAML from "yaml";
4
- import { countCandidateUrlsFromLonglist, normalizeCandidateUrl, readCandidateLonglist } from "./candidate-longlist.js";
5
- const DECISIONS = new Set(["kept", "trim", "dropped"]);
6
- const SOURCE_TYPES = new Set(["web", "youtube", "local_file", "skill"]);
7
- const PRIORITIES = new Set(["required", "optional"]);
8
- const KINDS = new Set(["reference", "principle", "prescription", "example"]);
9
- const JTBD_FITS = new Set(["direct", "bridge", "background"]);
10
- const FETCH_STATUSES = new Set(["readable", "partial", "metadata_only", "unavailable"]);
11
- const USABLE_FETCH_STATUSES = new Set(["readable", "partial"]);
12
- const CONTENT_QUALITIES = new Set(["high", "medium", "low"]);
13
- const USABLE_CONTENT_QUALITIES = new Set(["high", "medium"]);
14
- export function validatePhaseArtifact(project, phaseId) {
15
- switch (phaseId) {
16
- case "candidates":
17
- return validateCandidateLonglist(join(project, "working/02-candidate-longlist.md"));
18
- case "evaluation":
19
- return validateProjectEvaluation(project);
20
- case "quality": {
21
- const quality = validateQualityChecks(join(project, "working/04-quality-checks.md"));
22
- if (!quality.ok)
23
- return quality;
24
- const evaluation = validateProjectEvaluation(project);
25
- if (!evaluation.ok) {
26
- return {
27
- ok: false,
28
- message: `working/03-evaluation.yaml is invalid after quality checks: ${evaluation.message}`,
29
- };
30
- }
31
- return quality;
32
- }
33
- case "synthesis":
34
- return validateSynthesis(join(project, "synthesis.md"));
35
- case "assembly":
36
- return validateAssemblyDraft(join(project, "working/07-tape-draft.yaml"), {
37
- currentTapePath: join(project, "tape.yaml"),
38
- evaluationPath: join(project, "working/03-evaluation.yaml"),
39
- sourceManifestPath: join(project, "local-sources/sources-manifest.yaml"),
40
- });
41
- case "improvement":
42
- return validateImprovementDelta(join(project, ".liner-runs/improvement/delta.yaml"));
43
- default:
44
- return { ok: true };
45
- }
46
- }
47
- function validateProjectEvaluation(project) {
48
- return validateEvaluation(join(project, "working/03-evaluation.yaml"), {
49
- expectedCandidateCount: countCandidateUrlsFromLonglist(join(project, "working/02-candidate-longlist.md")),
50
- });
51
- }
52
- export function validateImprovementDelta(path) {
53
- const parsed = parseYaml(path, "improvement delta");
54
- if (!parsed.ok)
55
- return parsed;
56
- if (!isRecord(parsed.value)) {
57
- return { ok: false, message: ".liner-runs/improvement/delta.yaml is not a YAML mapping" };
58
- }
59
- if (stringField(parsed.value, "contract") !== "liner.improvement_delta" || parsed.value["version"] !== 1) {
60
- return { ok: false, message: ".liner-runs/improvement/delta.yaml has an unsupported contract or version" };
61
- }
62
- if (!stringField(parsed.value, "summary")) {
63
- return { ok: false, message: ".liner-runs/improvement/delta.yaml summary is required" };
64
- }
65
- const removals = parsed.value["removals"];
66
- const replacements = parsed.value["replacements"];
67
- if (!Array.isArray(removals) || removals.length !== 0 || !Array.isArray(replacements) || replacements.length !== 0) {
68
- return { ok: false, message: "Improve Corpus requires separate explicit curator intent for removals or replacements" };
69
- }
70
- const additions = parsed.value["additions"];
71
- if (!Array.isArray(additions) || additions.length === 0) {
72
- return { ok: false, message: ".liner-runs/improvement/delta.yaml must contain at least one focused addition" };
73
- }
74
- for (let i = 0; i < additions.length; i++) {
75
- const source = additions[i];
76
- if (!isRecord(source)) {
77
- return { ok: false, message: `.liner-runs/improvement/delta.yaml additions[${i}] is not a mapping` };
78
- }
79
- const type = stringField(source, "type");
80
- if (!SOURCE_TYPES.has(type)) {
81
- return { ok: false, message: `.liner-runs/improvement/delta.yaml additions[${i}].type is invalid: ${type || "(empty)"}` };
82
- }
83
- if ((type === "web" || type === "youtube") && !stringField(source, "url")) {
84
- return { ok: false, message: `.liner-runs/improvement/delta.yaml additions[${i}].url is required` };
85
- }
86
- if (type === "local_file" && !stringField(source, "path")) {
87
- return { ok: false, message: `.liner-runs/improvement/delta.yaml additions[${i}].path is required` };
88
- }
89
- if (type === "skill" && !stringField(source, "path") && !stringField(source, "url")) {
90
- return { ok: false, message: `.liner-runs/improvement/delta.yaml additions[${i}] needs path or url` };
91
- }
92
- const priority = stringField(source, "priority");
93
- const kind = stringField(source, "kind");
94
- if (!PRIORITIES.has(priority) || !KINDS.has(kind)) {
95
- return { ok: false, message: `.liner-runs/improvement/delta.yaml additions[${i}] needs valid priority and kind` };
96
- }
97
- }
98
- return { ok: true };
99
- }
100
- export function validateCandidateLonglist(path) {
101
- if (!existsSync(path)) {
102
- return { ok: false, message: `${path} is missing` };
103
- }
104
- const body = readFileSync(path, "utf8");
105
- if (/(^|\n)\s*(?:[-*]\s*)?TODO\s*(?:[—:-]|$)/i.test(body)) {
106
- return { ok: false, message: "working/02-candidate-longlist.md still contains TODO placeholders" };
107
- }
108
- if (body.includes("https://example.com/...")) {
109
- return { ok: false, message: "working/02-candidate-longlist.md still contains the example URL placeholder" };
110
- }
111
- const candidates = readCandidateLonglist(path);
112
- if (candidates.length === 0) {
113
- return { ok: false, message: "working/02-candidate-longlist.md has no URL candidates" };
114
- }
115
- return { ok: true };
116
- }
117
- export function validateEvaluation(path, options = {}) {
118
- const parsed = parseYaml(path, "evaluation");
119
- if (!parsed.ok)
120
- return parsed;
121
- if (!isRecord(parsed.value)) {
122
- return { ok: false, message: "working/03-evaluation.yaml is not a YAML mapping" };
123
- }
124
- const candidates = parsed.value["candidates"];
125
- if (!Array.isArray(candidates) || candidates.length === 0) {
126
- return { ok: false, message: "working/03-evaluation.yaml has no candidates list" };
127
- }
128
- if (options.expectedCandidateCount != null &&
129
- candidates.length !== options.expectedCandidateCount) {
130
- return {
131
- ok: false,
132
- message: `working/03-evaluation.yaml has ${candidates.length} candidates, ` +
133
- `but working/02-candidate-longlist.md has ${options.expectedCandidateCount} URL candidates`,
134
- };
135
- }
136
- for (let i = 0; i < candidates.length; i++) {
137
- const candidate = candidates[i];
138
- if (!isRecord(candidate)) {
139
- return { ok: false, message: `working/03-evaluation.yaml candidates[${i}] is not a mapping` };
140
- }
141
- const url = stringField(candidate, "url");
142
- if (!url) {
143
- return { ok: false, message: `working/03-evaluation.yaml candidates[${i}].url is required` };
144
- }
145
- const decision = stringField(candidate, "decision");
146
- if (!DECISIONS.has(decision)) {
147
- return {
148
- ok: false,
149
- message: `working/03-evaluation.yaml candidates[${i}].decision is invalid: ${decision || "(empty)"}`,
150
- };
151
- }
152
- if (decision === "kept" || decision === "trim") {
153
- const rating = numericField(candidate, "rating");
154
- if (rating == null || rating < 1 || rating > 5) {
155
- return {
156
- ok: false,
157
- message: `working/03-evaluation.yaml candidates[${i}].rating must be 1-5 for ${decision}`,
158
- };
159
- }
160
- const jtbdFit = stringField(candidate, "jtbd_fit");
161
- if (!JTBD_FITS.has(jtbdFit)) {
162
- return {
163
- ok: false,
164
- message: `working/03-evaluation.yaml candidates[${i}].jtbd_fit is invalid: ${jtbdFit || "(empty)"}`,
165
- };
166
- }
167
- if (!stringField(candidate, "section")) {
168
- return {
169
- ok: false,
170
- message: `working/03-evaluation.yaml candidates[${i}].section is required for ${decision}`,
171
- };
172
- }
173
- if (!stringField(candidate, "note")) {
174
- return {
175
- ok: false,
176
- message: `working/03-evaluation.yaml candidates[${i}].note is required for ${decision}`,
177
- };
178
- }
179
- const evidence = validateEvidenceFields(candidate, `working/03-evaluation.yaml candidates[${i}]`, decision);
180
- if (!evidence.ok)
181
- return evidence;
182
- }
183
- }
184
- return { ok: true };
185
- }
186
- export function validateQualityChecks(path) {
187
- if (!existsSync(path)) {
188
- return { ok: false, message: `${path} is missing` };
189
- }
190
- const body = readFileSync(path, "utf8");
191
- if (/(^|\n)\s*(?:[-*]\s*)?TODO\s*(?:[—:-]|$)/i.test(body)) {
192
- return { ok: false, message: "working/04-quality-checks.md still contains TODO placeholders" };
193
- }
194
- const required = [
195
- "## Test 0",
196
- "## Test 1",
197
- "## Test 2",
198
- "## Test 3",
199
- "## Test 4",
200
- "### Perspectives audit",
201
- "## Test 5",
202
- "Distribution:",
203
- "## Test 6",
204
- "## Test 7",
205
- "Source-role fit",
206
- "## Test 8",
207
- "Capability-pattern fit",
208
- ];
209
- for (const marker of required) {
210
- if (!body.includes(marker)) {
211
- return { ok: false, message: `working/04-quality-checks.md is missing ${marker}` };
212
- }
213
- }
214
- return { ok: true };
215
- }
216
- export function validateSynthesis(path) {
217
- if (!existsSync(path)) {
218
- return { ok: false, message: `${path} is missing` };
219
- }
220
- const body = readFileSync(path, "utf8");
221
- if (body.includes("Replace this placeholder") || /(^|\n)\s*(?:[-*]\s*)?TODO\s*(?:[—:-]|$)/i.test(body)) {
222
- return { ok: false, message: "synthesis.md still contains placeholder text" };
223
- }
224
- const required = ["## Generative rules", "## Stances this corpus takes"];
225
- for (const marker of required) {
226
- if (!body.includes(marker)) {
227
- return { ok: false, message: `synthesis.md is missing ${marker}` };
228
- }
229
- }
230
- return { ok: true };
231
- }
232
- export function validateAssemblyDraft(path, options = {}) {
233
- const parsed = parseYaml(path, "assembly draft");
234
- if (!parsed.ok)
235
- return parsed;
236
- if (!isRecord(parsed.value)) {
237
- return { ok: false, message: "working/07-tape-draft.yaml is not a YAML mapping" };
238
- }
239
- const sources = parsed.value["sources"];
240
- if (!Array.isArray(sources) || sources.length === 0) {
241
- return { ok: false, message: "working/07-tape-draft.yaml has no sources list" };
242
- }
243
- const draftSources = [];
244
- for (let i = 0; i < sources.length; i++) {
245
- const source = sources[i];
246
- if (!isRecord(source)) {
247
- return { ok: false, message: `working/07-tape-draft.yaml sources[${i}] is not a mapping` };
248
- }
249
- draftSources.push(source);
250
- const type = stringField(source, "type") || "web";
251
- if (!SOURCE_TYPES.has(type)) {
252
- return {
253
- ok: false,
254
- message: `working/07-tape-draft.yaml sources[${i}].type is invalid: ${type}`,
255
- };
256
- }
257
- if (type === "local_file") {
258
- if (!stringField(source, "path")) {
259
- return {
260
- ok: false,
261
- message: `working/07-tape-draft.yaml sources[${i}].path is required for local_file`,
262
- };
263
- }
264
- }
265
- else if (type === "skill") {
266
- if (!stringField(source, "path") && !stringField(source, "url")) {
267
- return {
268
- ok: false,
269
- message: `working/07-tape-draft.yaml sources[${i}].path or url is required for skill`,
270
- };
271
- }
272
- }
273
- else if (!stringField(source, "url")) {
274
- return {
275
- ok: false,
276
- message: `working/07-tape-draft.yaml sources[${i}].url is required for ${type}`,
277
- };
278
- }
279
- const priority = stringField(source, "priority");
280
- if (!PRIORITIES.has(priority)) {
281
- return {
282
- ok: false,
283
- message: `working/07-tape-draft.yaml sources[${i}].priority is invalid: ${priority || "(empty)"}`,
284
- };
285
- }
286
- const kind = stringField(source, "kind");
287
- if (!KINDS.has(kind)) {
288
- return {
289
- ok: false,
290
- message: `working/07-tape-draft.yaml sources[${i}].kind is invalid: ${kind || "(empty)"}`,
291
- };
292
- }
293
- if (!stringField(source, "section")) {
294
- return { ok: false, message: `working/07-tape-draft.yaml sources[${i}].section is required` };
295
- }
296
- if (!stringField(source, "note")) {
297
- return { ok: false, message: `working/07-tape-draft.yaml sources[${i}].note is required` };
298
- }
299
- }
300
- if (options.currentTapePath) {
301
- const preservation = validateExistingCustomSources(draftSources, options.currentTapePath);
302
- if (!preservation.ok)
303
- return preservation;
304
- }
305
- const activeManifestKeys = options.sourceManifestPath
306
- ? activeManifestSourceKeys(options.sourceManifestPath)
307
- : new Set();
308
- if (options.sourceManifestPath) {
309
- const preservation = validateActiveManifestSources(draftSources, options.sourceManifestPath);
310
- if (!preservation.ok)
311
- return preservation;
312
- }
313
- if (options.evaluationPath) {
314
- const evidence = validateDraftSourcesAgainstEvaluation(draftSources, options.evaluationPath, activeManifestKeys);
315
- if (!evidence.ok)
316
- return evidence;
317
- }
318
- return { ok: true };
319
- }
320
- function validateEvidenceFields(candidate, label, decision) {
321
- const fetchStatus = stringField(candidate, "fetch_status");
322
- if (!FETCH_STATUSES.has(fetchStatus)) {
323
- return {
324
- ok: false,
325
- message: `${label}.fetch_status must be readable, partial, metadata_only, or unavailable for ${decision}`,
326
- };
327
- }
328
- if (!USABLE_FETCH_STATUSES.has(fetchStatus)) {
329
- return {
330
- ok: false,
331
- message: `${label}.fetch_status cannot be ${fetchStatus} for ${decision}; unavailable or metadata-only candidates must be dropped`,
332
- };
333
- }
334
- const contentQuality = stringField(candidate, "content_quality");
335
- if (!CONTENT_QUALITIES.has(contentQuality)) {
336
- return {
337
- ok: false,
338
- message: `${label}.content_quality must be high, medium, or low for ${decision}`,
339
- };
340
- }
341
- if (!USABLE_CONTENT_QUALITIES.has(contentQuality)) {
342
- return {
343
- ok: false,
344
- message: `${label}.content_quality cannot be low for ${decision}; low-quality content must be dropped`,
345
- };
346
- }
347
- const evidence = stringListField(candidate, "evidence");
348
- if (evidence.length < 2) {
349
- return {
350
- ok: false,
351
- message: `${label}.evidence needs at least two content-specific bullets for ${decision}`,
352
- };
353
- }
354
- return { ok: true };
355
- }
356
- function validateDraftSourcesAgainstEvaluation(draftSources, evaluationPath, protectedSourceKeys = new Set()) {
357
- const parsed = parseYaml(evaluationPath, "evaluation");
358
- if (!parsed.ok)
359
- return parsed;
360
- if (!isRecord(parsed.value)) {
361
- return { ok: false, message: "working/03-evaluation.yaml is not a YAML mapping for assembly evidence checks" };
362
- }
363
- const candidates = parsed.value["candidates"];
364
- if (!Array.isArray(candidates)) {
365
- return { ok: false, message: "working/03-evaluation.yaml has no candidates list for assembly evidence checks" };
366
- }
367
- const byUrl = new Map();
368
- for (const candidate of candidates) {
369
- if (!isRecord(candidate))
370
- continue;
371
- const url = stringField(candidate, "url");
372
- if (!url)
373
- continue;
374
- byUrl.set(normalizeCandidateUrl(url), candidate);
375
- }
376
- for (let i = 0; i < draftSources.length; i++) {
377
- const source = draftSources[i];
378
- const type = stringField(source, "type") || "web";
379
- if (type !== "web" && type !== "youtube")
380
- continue;
381
- const url = stringField(source, "url");
382
- const key = customSourceKey(source);
383
- if (key && protectedSourceKeys.has(key))
384
- continue;
385
- const candidate = byUrl.get(normalizeCandidateUrl(url));
386
- if (!candidate) {
387
- return {
388
- ok: false,
389
- message: `working/07-tape-draft.yaml sources[${i}] has no evaluation evidence for ${url}`,
390
- };
391
- }
392
- const decision = stringField(candidate, "decision");
393
- if (decision !== "kept" && decision !== "trim") {
394
- return {
395
- ok: false,
396
- message: `working/07-tape-draft.yaml sources[${i}] includes ${url}, but evaluation decision is ${decision || "(empty)"}`,
397
- };
398
- }
399
- const evidence = validateEvidenceFields(candidate, `working/03-evaluation.yaml candidate for ${url}`, decision);
400
- if (!evidence.ok)
401
- return evidence;
402
- }
403
- return { ok: true };
404
- }
405
- function validateActiveManifestSources(draftSources, sourceManifestPath) {
406
- const manifest = activeManifestSources(sourceManifestPath);
407
- if (manifest.length === 0)
408
- return { ok: true };
409
- const draftKeys = new Set(draftSources
410
- .map(customSourceKey)
411
- .filter((key) => key !== null));
412
- const missing = manifest.filter((source) => {
413
- const key = customSourceKey(source);
414
- return key !== null && !draftKeys.has(key);
415
- });
416
- if (missing.length > 0) {
417
- return {
418
- ok: false,
419
- message: `working/07-tape-draft.yaml dropped active custom source: ${customSourceLabel(missing[0])}`,
420
- };
421
- }
422
- return { ok: true };
423
- }
424
- function activeManifestSourceKeys(sourceManifestPath) {
425
- return new Set(activeManifestSources(sourceManifestPath)
426
- .map(customSourceKey)
427
- .filter((key) => key !== null));
428
- }
429
- function activeManifestSources(sourceManifestPath) {
430
- if (!existsSync(sourceManifestPath))
431
- return [];
432
- const parsed = parseYaml(sourceManifestPath, "source manifest");
433
- if (!parsed.ok || !isRecord(parsed.value))
434
- return [];
435
- const items = parsed.value["sources"];
436
- if (!Array.isArray(items))
437
- return [];
438
- const sources = [];
439
- for (const item of items) {
440
- if (!isRecord(item))
441
- continue;
442
- if (item["active"] === false)
443
- continue;
444
- const source = item["source"];
445
- if (isRecord(source))
446
- sources.push(source);
447
- }
448
- return sources;
449
- }
450
- function validateExistingCustomSources(draftSources, currentTapePath) {
451
- const parsed = parseYaml(currentTapePath, "tape");
452
- if (!parsed.ok) {
453
- return {
454
- ok: false,
455
- message: `tape.yaml could not be parsed for custom-source preservation: ${parsed.message}`,
456
- };
457
- }
458
- if (!isRecord(parsed.value)) {
459
- return { ok: false, message: "tape.yaml is not a YAML mapping for custom-source preservation" };
460
- }
461
- const currentSources = parsed.value["sources"];
462
- if (!Array.isArray(currentSources))
463
- return { ok: true };
464
- const currentCustomSources = currentSources
465
- .filter(isRecord)
466
- .filter((source) => {
467
- const type = stringField(source, "type");
468
- return type === "local_file" || type === "skill";
469
- });
470
- if (currentCustomSources.length === 0)
471
- return { ok: true };
472
- const draftKeys = new Set(draftSources
473
- .map(customSourceKey)
474
- .filter((key) => key !== null));
475
- const missing = currentCustomSources.filter((source) => {
476
- const key = customSourceKey(source);
477
- return key !== null && !draftKeys.has(key);
478
- });
479
- if (missing.length > 0) {
480
- return {
481
- ok: false,
482
- message: `working/07-tape-draft.yaml dropped existing custom source: ${customSourceLabel(missing[0])}`,
483
- };
484
- }
485
- return { ok: true };
486
- }
487
- function customSourceKey(source) {
488
- const type = stringField(source, "type");
489
- if (type === "web" || type === "youtube") {
490
- const url = stringField(source, "url");
491
- if (!url)
492
- return null;
493
- return `${type}|${normalizeCandidateUrl(url)}`;
494
- }
495
- if (type === "local_file") {
496
- const sourcePath = stringField(source, "path");
497
- if (!sourcePath)
498
- return null;
499
- return `local_file|${sourcePath}|${stringField(source, "citation")}`;
500
- }
501
- if (type === "skill") {
502
- const sourcePath = stringField(source, "path");
503
- const url = stringField(source, "url");
504
- if (!sourcePath && !url)
505
- return null;
506
- return `skill|${sourcePath}|${url}`;
507
- }
508
- return null;
509
- }
510
- function customSourceLabel(source) {
511
- const type = stringField(source, "type") || "unknown";
512
- return [type, stringField(source, "path") || stringField(source, "url") || stringField(source, "citation") || "(missing id)"]
513
- .join(" ");
514
- }
515
- function parseYaml(path, label) {
516
- if (!existsSync(path)) {
517
- return { ok: false, message: `${path} is missing` };
518
- }
519
- try {
520
- return { ok: true, value: YAML.parse(readFileSync(path, "utf8")) };
521
- }
522
- catch (error) {
523
- return {
524
- ok: false,
525
- message: `${label} YAML could not be parsed: ${error instanceof Error ? error.message : String(error)}`,
526
- };
527
- }
528
- }
529
- function isRecord(value) {
530
- return Boolean(value) && typeof value === "object" && !Array.isArray(value);
531
- }
532
- function stringField(record, key) {
533
- const value = record[key];
534
- return typeof value === "string" ? value.trim() : "";
535
- }
536
- function numericField(record, key) {
537
- const value = record[key];
538
- if (typeof value === "number")
539
- return value;
540
- if (typeof value !== "string")
541
- return null;
542
- const parsed = Number(value);
543
- return Number.isFinite(parsed) ? parsed : null;
544
- }
545
- function stringListField(record, key) {
546
- const value = record[key];
547
- if (!Array.isArray(value))
548
- return [];
549
- return value
550
- .map(yamlListItemToString)
551
- .filter((item) => item !== "");
552
- }
553
- function yamlListItemToString(item) {
554
- if (typeof item === "string")
555
- return item.trim();
556
- if (!isRecord(item))
557
- return "";
558
- const entries = Object.entries(item);
559
- if (entries.length !== 1)
560
- return "";
561
- const [key, value] = entries[0];
562
- if (typeof value !== "string" && typeof value !== "number" && typeof value !== "boolean") {
563
- return "";
564
- }
565
- return `${key}: ${String(value)}`.trim();
566
- }
567
- //# sourceMappingURL=artifact-validation.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"artifact-validation.js","sourceRoot":"","sources":["../../src/agents/artifact-validation.ts"],"names":[],"mappings":"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"}