linersh 0.5.7 → 1.0.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 (98) hide show
  1. package/README.md +65 -165
  2. package/bin/liner.js +82 -44
  3. package/cli-update-docs/ABOUT.md +16 -16
  4. package/cli-update-docs/AI-HANDOFF.md +62 -204
  5. package/cli-update-docs/CURATION.md +48 -19
  6. package/cli-update-docs/JTBD-MASTER-PROMPT-ABOUT.md +9 -12
  7. package/cli-update-docs/JTBD-MASTER-PROMPT.md +1 -1
  8. package/cli-update-docs/LINER-MASTER.md +77 -63
  9. package/cli-update-docs/LINER-MD-PRD.md +531 -0
  10. package/cli-update-docs/MIXTAPE-FORMAT.md +76 -44
  11. package/cli-update-docs/PLATFORM.md +47 -46
  12. package/cli-update-docs/README.md +6 -6
  13. package/cli-update-docs/SKILL.md +72 -37
  14. package/cli-update-docs/TUI-BACKLOG.md +205 -26
  15. package/cli-update-docs/quality-check-tests.md +256 -8
  16. package/cli-update-docs/source-finding-tactics.md +140 -3
  17. package/cli-update-docs/source-quality-hierarchy.md +83 -0
  18. package/cli-update-docs/synthesis-guidance.md +19 -5
  19. package/dist/agents/artifact-validation.js +440 -0
  20. package/dist/agents/artifact-validation.js.map +1 -0
  21. package/dist/agents/candidate-longlist.js +100 -0
  22. package/dist/agents/candidate-longlist.js.map +1 -0
  23. package/dist/agents/detect.js +3 -2
  24. package/dist/agents/detect.js.map +1 -1
  25. package/dist/agents/evaluation-assembly.js +270 -0
  26. package/dist/agents/evaluation-assembly.js.map +1 -0
  27. package/dist/agents/headless-runner.js +227 -0
  28. package/dist/agents/headless-runner.js.map +1 -0
  29. package/dist/agents/jtbd-clarify.js +42 -41
  30. package/dist/agents/jtbd-clarify.js.map +1 -1
  31. package/dist/agents/models.js +6 -7
  32. package/dist/agents/models.js.map +1 -1
  33. package/dist/agents/prompts.js +220 -20
  34. package/dist/agents/prompts.js.map +1 -1
  35. package/dist/agents/runner.js +462 -21
  36. package/dist/agents/runner.js.map +1 -1
  37. package/dist/phases.js +13 -13
  38. package/dist/phases.js.map +1 -1
  39. package/dist/source-inbox.js +297 -0
  40. package/dist/source-inbox.js.map +1 -0
  41. package/dist/version.js +3 -9
  42. package/dist/version.js.map +1 -1
  43. package/dist/yaml-io.js +42 -11
  44. package/dist/yaml-io.js.map +1 -1
  45. package/package.json +26 -23
  46. package/cli-update-docs/JOB-STORY-MIGRATION.md +0 -99
  47. package/dist/App.js +0 -220
  48. package/dist/App.js.map +0 -1
  49. package/dist/colors.js +0 -132
  50. package/dist/colors.js.map +0 -1
  51. package/dist/components/Header.js +0 -15
  52. package/dist/components/Header.js.map +0 -1
  53. package/dist/components/KeyHints.js +0 -17
  54. package/dist/components/KeyHints.js.map +0 -1
  55. package/dist/components/LabeledBox.js +0 -53
  56. package/dist/components/LabeledBox.js.map +0 -1
  57. package/dist/components/NextSteps.js +0 -18
  58. package/dist/components/NextSteps.js.map +0 -1
  59. package/dist/index.js +0 -17
  60. package/dist/index.js.map +0 -1
  61. package/dist/screens/AgentSetup.js +0 -224
  62. package/dist/screens/AgentSetup.js.map +0 -1
  63. package/dist/screens/BootSplash.js +0 -163
  64. package/dist/screens/BootSplash.js.map +0 -1
  65. package/dist/screens/CompileView.js +0 -567
  66. package/dist/screens/CompileView.js.map +0 -1
  67. package/dist/screens/FramingConfirmReview.js +0 -197
  68. package/dist/screens/FramingConfirmReview.js.map +0 -1
  69. package/dist/screens/Gate1Review.js +0 -147
  70. package/dist/screens/Gate1Review.js.map +0 -1
  71. package/dist/screens/Gate2Review.js +0 -162
  72. package/dist/screens/Gate2Review.js.map +0 -1
  73. package/dist/screens/ImportPrompt.js +0 -173
  74. package/dist/screens/ImportPrompt.js.map +0 -1
  75. package/dist/screens/JsSetup.js +0 -77
  76. package/dist/screens/JsSetup.js.map +0 -1
  77. package/dist/screens/LocalFilePicker.js +0 -139
  78. package/dist/screens/LocalFilePicker.js.map +0 -1
  79. package/dist/screens/NewMixtapeWizard.js +0 -662
  80. package/dist/screens/NewMixtapeWizard.js.map +0 -1
  81. package/dist/screens/PhaseRunner.js +0 -1203
  82. package/dist/screens/PhaseRunner.js.map +0 -1
  83. package/dist/screens/ProcessManifest.js +0 -160
  84. package/dist/screens/ProcessManifest.js.map +0 -1
  85. package/dist/screens/ProjectHub.js +0 -557
  86. package/dist/screens/ProjectHub.js.map +0 -1
  87. package/dist/screens/SourceModal.js +0 -269
  88. package/dist/screens/SourceModal.js.map +0 -1
  89. package/dist/screens/TapeBrowser.js +0 -312
  90. package/dist/screens/TapeBrowser.js.map +0 -1
  91. package/dist/screens/TapeDraftReview.js +0 -444
  92. package/dist/screens/TapeDraftReview.js.map +0 -1
  93. package/dist/screens/TapeEditor.js +0 -310
  94. package/dist/screens/TapeEditor.js.map +0 -1
  95. package/dist/screens/cassette-art.js +0 -72
  96. package/dist/screens/cassette-art.js.map +0 -1
  97. package/dist/store.js +0 -10
  98. package/dist/store.js.map +0 -1
@@ -0,0 +1,440 @@
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 validateEvaluation(join(project, "working/03-evaluation.yaml"), {
20
+ expectedCandidateCount: countCandidateUrlsFromLonglist(join(project, "working/02-candidate-longlist.md")),
21
+ });
22
+ case "quality":
23
+ return validateQualityChecks(join(project, "working/04-quality-checks.md"));
24
+ case "synthesis":
25
+ return validateSynthesis(join(project, "synthesis.md"));
26
+ case "assembly":
27
+ return validateAssemblyDraft(join(project, "working/07-tape-draft.yaml"), {
28
+ currentTapePath: join(project, "tape.yaml"),
29
+ evaluationPath: join(project, "working/03-evaluation.yaml"),
30
+ });
31
+ default:
32
+ return { ok: true };
33
+ }
34
+ }
35
+ export function validateCandidateLonglist(path) {
36
+ if (!existsSync(path)) {
37
+ return { ok: false, message: `${path} is missing` };
38
+ }
39
+ const body = readFileSync(path, "utf8");
40
+ if (/(^|\n)\s*(?:[-*]\s*)?TODO\s*(?:[—:-]|$)/i.test(body)) {
41
+ return { ok: false, message: "working/02-candidate-longlist.md still contains TODO placeholders" };
42
+ }
43
+ if (body.includes("https://example.com/...")) {
44
+ return { ok: false, message: "working/02-candidate-longlist.md still contains the example URL placeholder" };
45
+ }
46
+ const candidates = readCandidateLonglist(path);
47
+ if (candidates.length === 0) {
48
+ return { ok: false, message: "working/02-candidate-longlist.md has no URL candidates" };
49
+ }
50
+ return { ok: true };
51
+ }
52
+ export function validateEvaluation(path, options = {}) {
53
+ const parsed = parseYaml(path, "evaluation");
54
+ if (!parsed.ok)
55
+ return parsed;
56
+ if (!isRecord(parsed.value)) {
57
+ return { ok: false, message: "working/03-evaluation.yaml is not a YAML mapping" };
58
+ }
59
+ const candidates = parsed.value["candidates"];
60
+ if (!Array.isArray(candidates) || candidates.length === 0) {
61
+ return { ok: false, message: "working/03-evaluation.yaml has no candidates list" };
62
+ }
63
+ if (options.expectedCandidateCount != null &&
64
+ candidates.length !== options.expectedCandidateCount) {
65
+ return {
66
+ ok: false,
67
+ message: `working/03-evaluation.yaml has ${candidates.length} candidates, ` +
68
+ `but working/02-candidate-longlist.md has ${options.expectedCandidateCount} URL candidates`,
69
+ };
70
+ }
71
+ for (let i = 0; i < candidates.length; i++) {
72
+ const candidate = candidates[i];
73
+ if (!isRecord(candidate)) {
74
+ return { ok: false, message: `working/03-evaluation.yaml candidates[${i}] is not a mapping` };
75
+ }
76
+ const url = stringField(candidate, "url");
77
+ if (!url) {
78
+ return { ok: false, message: `working/03-evaluation.yaml candidates[${i}].url is required` };
79
+ }
80
+ const decision = stringField(candidate, "decision");
81
+ if (!DECISIONS.has(decision)) {
82
+ return {
83
+ ok: false,
84
+ message: `working/03-evaluation.yaml candidates[${i}].decision is invalid: ${decision || "(empty)"}`,
85
+ };
86
+ }
87
+ if (decision === "kept" || decision === "trim") {
88
+ const rating = numericField(candidate, "rating");
89
+ if (rating == null || rating < 1 || rating > 5) {
90
+ return {
91
+ ok: false,
92
+ message: `working/03-evaluation.yaml candidates[${i}].rating must be 1-5 for ${decision}`,
93
+ };
94
+ }
95
+ const jtbdFit = stringField(candidate, "jtbd_fit");
96
+ if (!JTBD_FITS.has(jtbdFit)) {
97
+ return {
98
+ ok: false,
99
+ message: `working/03-evaluation.yaml candidates[${i}].jtbd_fit is invalid: ${jtbdFit || "(empty)"}`,
100
+ };
101
+ }
102
+ if (!stringField(candidate, "section")) {
103
+ return {
104
+ ok: false,
105
+ message: `working/03-evaluation.yaml candidates[${i}].section is required for ${decision}`,
106
+ };
107
+ }
108
+ if (!stringField(candidate, "note")) {
109
+ return {
110
+ ok: false,
111
+ message: `working/03-evaluation.yaml candidates[${i}].note is required for ${decision}`,
112
+ };
113
+ }
114
+ const evidence = validateEvidenceFields(candidate, `working/03-evaluation.yaml candidates[${i}]`, decision);
115
+ if (!evidence.ok)
116
+ return evidence;
117
+ }
118
+ }
119
+ return { ok: true };
120
+ }
121
+ export function validateQualityChecks(path) {
122
+ if (!existsSync(path)) {
123
+ return { ok: false, message: `${path} is missing` };
124
+ }
125
+ const body = readFileSync(path, "utf8");
126
+ if (/(^|\n)\s*(?:[-*]\s*)?TODO\s*(?:[—:-]|$)/i.test(body)) {
127
+ return { ok: false, message: "working/04-quality-checks.md still contains TODO placeholders" };
128
+ }
129
+ const required = [
130
+ "## Test 0",
131
+ "## Test 1",
132
+ "## Test 2",
133
+ "## Test 3",
134
+ "## Test 4",
135
+ "### Perspectives audit",
136
+ "## Test 5",
137
+ "Distribution:",
138
+ "## Test 6",
139
+ "## Test 7",
140
+ "Source-role fit",
141
+ "## Test 8",
142
+ "Capability-pattern fit",
143
+ ];
144
+ for (const marker of required) {
145
+ if (!body.includes(marker)) {
146
+ return { ok: false, message: `working/04-quality-checks.md is missing ${marker}` };
147
+ }
148
+ }
149
+ return { ok: true };
150
+ }
151
+ export function validateSynthesis(path) {
152
+ if (!existsSync(path)) {
153
+ return { ok: false, message: `${path} is missing` };
154
+ }
155
+ const body = readFileSync(path, "utf8");
156
+ if (body.includes("Replace this placeholder") || /(^|\n)\s*(?:[-*]\s*)?TODO\s*(?:[—:-]|$)/i.test(body)) {
157
+ return { ok: false, message: "synthesis.md still contains placeholder text" };
158
+ }
159
+ const required = ["## Generative rules", "## Stances this corpus takes"];
160
+ for (const marker of required) {
161
+ if (!body.includes(marker)) {
162
+ return { ok: false, message: `synthesis.md is missing ${marker}` };
163
+ }
164
+ }
165
+ return { ok: true };
166
+ }
167
+ export function validateAssemblyDraft(path, options = {}) {
168
+ const parsed = parseYaml(path, "assembly draft");
169
+ if (!parsed.ok)
170
+ return parsed;
171
+ if (!isRecord(parsed.value)) {
172
+ return { ok: false, message: "working/07-tape-draft.yaml is not a YAML mapping" };
173
+ }
174
+ const sources = parsed.value["sources"];
175
+ if (!Array.isArray(sources) || sources.length === 0) {
176
+ return { ok: false, message: "working/07-tape-draft.yaml has no sources list" };
177
+ }
178
+ const draftSources = [];
179
+ for (let i = 0; i < sources.length; i++) {
180
+ const source = sources[i];
181
+ if (!isRecord(source)) {
182
+ return { ok: false, message: `working/07-tape-draft.yaml sources[${i}] is not a mapping` };
183
+ }
184
+ draftSources.push(source);
185
+ const type = stringField(source, "type") || "web";
186
+ if (!SOURCE_TYPES.has(type)) {
187
+ return {
188
+ ok: false,
189
+ message: `working/07-tape-draft.yaml sources[${i}].type is invalid: ${type}`,
190
+ };
191
+ }
192
+ if (type === "local_file") {
193
+ if (!stringField(source, "path")) {
194
+ return {
195
+ ok: false,
196
+ message: `working/07-tape-draft.yaml sources[${i}].path is required for local_file`,
197
+ };
198
+ }
199
+ }
200
+ else if (type === "skill") {
201
+ if (!stringField(source, "path") && !stringField(source, "url")) {
202
+ return {
203
+ ok: false,
204
+ message: `working/07-tape-draft.yaml sources[${i}].path or url is required for skill`,
205
+ };
206
+ }
207
+ }
208
+ else if (!stringField(source, "url")) {
209
+ return {
210
+ ok: false,
211
+ message: `working/07-tape-draft.yaml sources[${i}].url is required for ${type}`,
212
+ };
213
+ }
214
+ const priority = stringField(source, "priority");
215
+ if (!PRIORITIES.has(priority)) {
216
+ return {
217
+ ok: false,
218
+ message: `working/07-tape-draft.yaml sources[${i}].priority is invalid: ${priority || "(empty)"}`,
219
+ };
220
+ }
221
+ const kind = stringField(source, "kind");
222
+ if (!KINDS.has(kind)) {
223
+ return {
224
+ ok: false,
225
+ message: `working/07-tape-draft.yaml sources[${i}].kind is invalid: ${kind || "(empty)"}`,
226
+ };
227
+ }
228
+ if (!stringField(source, "section")) {
229
+ return { ok: false, message: `working/07-tape-draft.yaml sources[${i}].section is required` };
230
+ }
231
+ if (!stringField(source, "note")) {
232
+ return { ok: false, message: `working/07-tape-draft.yaml sources[${i}].note is required` };
233
+ }
234
+ }
235
+ if (options.currentTapePath) {
236
+ const preservation = validateExistingCustomSources(draftSources, options.currentTapePath);
237
+ if (!preservation.ok)
238
+ return preservation;
239
+ }
240
+ if (options.evaluationPath) {
241
+ const evidence = validateDraftSourcesAgainstEvaluation(draftSources, options.evaluationPath);
242
+ if (!evidence.ok)
243
+ return evidence;
244
+ }
245
+ return { ok: true };
246
+ }
247
+ function validateEvidenceFields(candidate, label, decision) {
248
+ const fetchStatus = stringField(candidate, "fetch_status");
249
+ if (!FETCH_STATUSES.has(fetchStatus)) {
250
+ return {
251
+ ok: false,
252
+ message: `${label}.fetch_status must be readable, partial, metadata_only, or unavailable for ${decision}`,
253
+ };
254
+ }
255
+ if (!USABLE_FETCH_STATUSES.has(fetchStatus)) {
256
+ return {
257
+ ok: false,
258
+ message: `${label}.fetch_status cannot be ${fetchStatus} for ${decision}; unavailable or metadata-only candidates must be dropped`,
259
+ };
260
+ }
261
+ const contentQuality = stringField(candidate, "content_quality");
262
+ if (!CONTENT_QUALITIES.has(contentQuality)) {
263
+ return {
264
+ ok: false,
265
+ message: `${label}.content_quality must be high, medium, or low for ${decision}`,
266
+ };
267
+ }
268
+ if (!USABLE_CONTENT_QUALITIES.has(contentQuality)) {
269
+ return {
270
+ ok: false,
271
+ message: `${label}.content_quality cannot be low for ${decision}; low-quality content must be dropped`,
272
+ };
273
+ }
274
+ const evidence = stringListField(candidate, "evidence");
275
+ if (evidence.length < 2) {
276
+ return {
277
+ ok: false,
278
+ message: `${label}.evidence needs at least two content-specific bullets for ${decision}`,
279
+ };
280
+ }
281
+ return { ok: true };
282
+ }
283
+ function validateDraftSourcesAgainstEvaluation(draftSources, evaluationPath) {
284
+ const parsed = parseYaml(evaluationPath, "evaluation");
285
+ if (!parsed.ok)
286
+ return parsed;
287
+ if (!isRecord(parsed.value)) {
288
+ return { ok: false, message: "working/03-evaluation.yaml is not a YAML mapping for assembly evidence checks" };
289
+ }
290
+ const candidates = parsed.value["candidates"];
291
+ if (!Array.isArray(candidates)) {
292
+ return { ok: false, message: "working/03-evaluation.yaml has no candidates list for assembly evidence checks" };
293
+ }
294
+ const byUrl = new Map();
295
+ for (const candidate of candidates) {
296
+ if (!isRecord(candidate))
297
+ continue;
298
+ const url = stringField(candidate, "url");
299
+ if (!url)
300
+ continue;
301
+ byUrl.set(normalizeCandidateUrl(url), candidate);
302
+ }
303
+ for (let i = 0; i < draftSources.length; i++) {
304
+ const source = draftSources[i];
305
+ const type = stringField(source, "type") || "web";
306
+ if (type !== "web" && type !== "youtube")
307
+ continue;
308
+ const url = stringField(source, "url");
309
+ const candidate = byUrl.get(normalizeCandidateUrl(url));
310
+ if (!candidate) {
311
+ return {
312
+ ok: false,
313
+ message: `working/07-tape-draft.yaml sources[${i}] has no evaluation evidence for ${url}`,
314
+ };
315
+ }
316
+ const decision = stringField(candidate, "decision");
317
+ if (decision !== "kept" && decision !== "trim") {
318
+ return {
319
+ ok: false,
320
+ message: `working/07-tape-draft.yaml sources[${i}] includes ${url}, but evaluation decision is ${decision || "(empty)"}`,
321
+ };
322
+ }
323
+ const evidence = validateEvidenceFields(candidate, `working/03-evaluation.yaml candidate for ${url}`, decision);
324
+ if (!evidence.ok)
325
+ return evidence;
326
+ }
327
+ return { ok: true };
328
+ }
329
+ function validateExistingCustomSources(draftSources, currentTapePath) {
330
+ const parsed = parseYaml(currentTapePath, "tape");
331
+ if (!parsed.ok) {
332
+ return {
333
+ ok: false,
334
+ message: `tape.yaml could not be parsed for custom-source preservation: ${parsed.message}`,
335
+ };
336
+ }
337
+ if (!isRecord(parsed.value)) {
338
+ return { ok: false, message: "tape.yaml is not a YAML mapping for custom-source preservation" };
339
+ }
340
+ const currentSources = parsed.value["sources"];
341
+ if (!Array.isArray(currentSources))
342
+ return { ok: true };
343
+ const currentCustomSources = currentSources
344
+ .filter(isRecord)
345
+ .filter((source) => {
346
+ const type = stringField(source, "type");
347
+ return type === "local_file" || type === "skill";
348
+ });
349
+ if (currentCustomSources.length === 0)
350
+ return { ok: true };
351
+ const draftKeys = new Set(draftSources
352
+ .map(customSourceKey)
353
+ .filter((key) => key !== null));
354
+ const missing = currentCustomSources.filter((source) => {
355
+ const key = customSourceKey(source);
356
+ return key !== null && !draftKeys.has(key);
357
+ });
358
+ if (missing.length > 0) {
359
+ return {
360
+ ok: false,
361
+ message: `working/07-tape-draft.yaml dropped existing custom source: ${customSourceLabel(missing[0])}`,
362
+ };
363
+ }
364
+ return { ok: true };
365
+ }
366
+ function customSourceKey(source) {
367
+ const type = stringField(source, "type");
368
+ if (type === "local_file") {
369
+ const sourcePath = stringField(source, "path");
370
+ if (!sourcePath)
371
+ return null;
372
+ return `local_file|${sourcePath}|${stringField(source, "citation")}`;
373
+ }
374
+ if (type === "skill") {
375
+ const sourcePath = stringField(source, "path");
376
+ const url = stringField(source, "url");
377
+ if (!sourcePath && !url)
378
+ return null;
379
+ return `skill|${sourcePath}|${url}`;
380
+ }
381
+ return null;
382
+ }
383
+ function customSourceLabel(source) {
384
+ const type = stringField(source, "type") || "unknown";
385
+ return [type, stringField(source, "path") || stringField(source, "url") || stringField(source, "citation") || "(missing id)"]
386
+ .join(" ");
387
+ }
388
+ function parseYaml(path, label) {
389
+ if (!existsSync(path)) {
390
+ return { ok: false, message: `${path} is missing` };
391
+ }
392
+ try {
393
+ return { ok: true, value: YAML.parse(readFileSync(path, "utf8")) };
394
+ }
395
+ catch (error) {
396
+ return {
397
+ ok: false,
398
+ message: `${label} YAML could not be parsed: ${error instanceof Error ? error.message : String(error)}`,
399
+ };
400
+ }
401
+ }
402
+ function isRecord(value) {
403
+ return Boolean(value) && typeof value === "object" && !Array.isArray(value);
404
+ }
405
+ function stringField(record, key) {
406
+ const value = record[key];
407
+ return typeof value === "string" ? value.trim() : "";
408
+ }
409
+ function numericField(record, key) {
410
+ const value = record[key];
411
+ if (typeof value === "number")
412
+ return value;
413
+ if (typeof value !== "string")
414
+ return null;
415
+ const parsed = Number(value);
416
+ return Number.isFinite(parsed) ? parsed : null;
417
+ }
418
+ function stringListField(record, key) {
419
+ const value = record[key];
420
+ if (!Array.isArray(value))
421
+ return [];
422
+ return value
423
+ .map(yamlListItemToString)
424
+ .filter((item) => item !== "");
425
+ }
426
+ function yamlListItemToString(item) {
427
+ if (typeof item === "string")
428
+ return item.trim();
429
+ if (!isRecord(item))
430
+ return "";
431
+ const entries = Object.entries(item);
432
+ if (entries.length !== 1)
433
+ return "";
434
+ const [key, value] = entries[0];
435
+ if (typeof value !== "string" && typeof value !== "number" && typeof value !== "boolean") {
436
+ return "";
437
+ }
438
+ return `${key}: ${String(value)}`.trim();
439
+ }
440
+ //# sourceMappingURL=artifact-validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifact-validation.js","sourceRoot":"","sources":["../../src/agents/artifact-validation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,100 @@
1
+ import { existsSync, readFileSync } from "node:fs";
2
+ const URL_RE = /https?:\/\/[^\s"'<>]+/g;
3
+ export function countCandidateUrlsFromLonglist(path) {
4
+ const candidates = readCandidateLonglist(path);
5
+ return candidates.length > 0 ? candidates.length : undefined;
6
+ }
7
+ export function readCandidateLonglist(path) {
8
+ if (!existsSync(path))
9
+ return [];
10
+ const candidates = [];
11
+ const seen = new Set();
12
+ let section = "";
13
+ let current;
14
+ for (const line of readFileSync(path, "utf8").split("\n")) {
15
+ const heading = line.match(/^##+\s+(.+?)\s*$/);
16
+ if (heading) {
17
+ section = cleanSection(heading[1] ?? "");
18
+ current = undefined;
19
+ continue;
20
+ }
21
+ const url = firstUrl(line);
22
+ if (url) {
23
+ if (seen.has(url)) {
24
+ current = candidates.find((candidate) => candidate.url === url);
25
+ continue;
26
+ }
27
+ current = {
28
+ url,
29
+ title: titleFromCandidateLine(line, url),
30
+ section: section || undefined,
31
+ };
32
+ candidates.push(current);
33
+ seen.add(url);
34
+ continue;
35
+ }
36
+ const reason = line.match(/^\s*[-*]\s*(?:Reason|Rationale):\s*(.+?)\s*$/i);
37
+ if (reason && current) {
38
+ current.reason = reason[1]?.trim();
39
+ }
40
+ }
41
+ return candidates;
42
+ }
43
+ export function groupCandidateLonglist(candidates, maxCandidatesPerGroup = 10) {
44
+ const groupSize = Math.max(1, Math.floor(maxCandidatesPerGroup));
45
+ const bySection = new Map();
46
+ for (const candidate of candidates) {
47
+ const section = candidate.section || "Unsectioned";
48
+ const sectionCandidates = bySection.get(section) ?? [];
49
+ sectionCandidates.push(candidate);
50
+ bySection.set(section, sectionCandidates);
51
+ }
52
+ const pending = [];
53
+ for (const [section, sectionCandidates] of bySection) {
54
+ for (let i = 0; i < sectionCandidates.length; i += groupSize) {
55
+ const chunk = sectionCandidates.slice(i, i + groupSize);
56
+ const chunkNumber = Math.floor(i / groupSize) + 1;
57
+ const chunkCount = Math.ceil(sectionCandidates.length / groupSize);
58
+ const suffix = chunkCount > 1 ? `-${chunkNumber}` : "";
59
+ pending.push({
60
+ section,
61
+ slug: `${slugify(section)}${suffix}`,
62
+ candidates: chunk,
63
+ });
64
+ }
65
+ }
66
+ const total = pending.length;
67
+ return pending.map((group, i) => ({
68
+ ...group,
69
+ index: i + 1,
70
+ total,
71
+ fragmentPath: `working/evaluation-decisions/${String(i + 1).padStart(2, "0")}-${group.slug}.yaml`,
72
+ }));
73
+ }
74
+ export function normalizeCandidateUrl(url) {
75
+ return url.trim().replace(/[)\],.;:]+$/g, "");
76
+ }
77
+ function firstUrl(line) {
78
+ const match = line.match(URL_RE);
79
+ return match?.[0] ? normalizeCandidateUrl(match[0]) : "";
80
+ }
81
+ function cleanSection(section) {
82
+ return section.trim().replace(/^\d+\.\s+/, "");
83
+ }
84
+ function titleFromCandidateLine(line, url) {
85
+ const beforeUrl = line.slice(0, line.indexOf(url));
86
+ const cleaned = beforeUrl
87
+ .replace(/^\s*[-*]\s*/, "")
88
+ .replace(/\*\*/g, "")
89
+ .replace(/[-—:|\s]+$/g, "")
90
+ .trim();
91
+ return cleaned || undefined;
92
+ }
93
+ function slugify(value) {
94
+ const slug = value
95
+ .toLowerCase()
96
+ .replace(/[^a-z0-9]+/g, "-")
97
+ .replace(/^-+|-+$/g, "");
98
+ return slug || "section";
99
+ }
100
+ //# sourceMappingURL=candidate-longlist.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"candidate-longlist.js","sourceRoot":"","sources":["../../src/agents/candidate-longlist.ts"],"names":[],"mappings":"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"}
@@ -75,7 +75,8 @@ export function detectAgents() {
75
75
  * `linersh/cli-update-docs/`, and `import.meta.url` resolves the
76
76
  * symlinks npx puts in front of the package).
77
77
  * 3. Walk up from cwd (covers the dev-from-repo case where the user
78
- * is somewhere inside the liner working tree).
78
+ * is somewhere inside the liner working tree, where the tracked source
79
+ * bundle lives at `docs/curation-skill/`).
79
80
  * 4. Walk up from `process.argv[1]` (legacy global-install case).
80
81
  */
81
82
  export function resolveSkillPath() {
@@ -87,7 +88,7 @@ export function resolveSkillPathWithDiagnostics() {
87
88
  if (envPath && existsSync(join(envPath, "SKILL.md"))) {
88
89
  return { path: envPath, envPath, searched: [join(envPath, "SKILL.md")] };
89
90
  }
90
- const candidates = ["cli-update-docs", "skills/curating-mixtapes"];
91
+ const candidates = ["cli-update-docs", "docs/curation-skill", "skills/curating-mixtapes"];
91
92
  const moduleDir = dirname(fileURLToPath(import.meta.url));
92
93
  const packageRoot = nearestPackageRoot(moduleDir);
93
94
  const searchFromRoots = [
@@ -1 +1 @@
1
- {"version":3,"file":"detect.js","sourceRoot":"","sources":["../../src/agents/detect.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"detect.js","sourceRoot":"","sources":["../../src/agents/detect.ts"],"names":[],"mappings":"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"}