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.
- package/README.md +15 -61
- package/bin/liner.js +60 -16
- package/package.json +10 -17
- package/cli-update-docs/README.md +0 -129
- package/cli-update-docs/SKILL.md +0 -294
- package/cli-update-docs/curator-notes.md +0 -85
- package/cli-update-docs/quality-check-tests.md +0 -435
- package/cli-update-docs/source-finding-tactics.md +0 -224
- package/cli-update-docs/source-quality-hierarchy.md +0 -209
- package/cli-update-docs/synthesis-guidance.md +0 -151
- package/dist/agents/artifact-validation.js +0 -567
- package/dist/agents/artifact-validation.js.map +0 -1
- package/dist/agents/candidate-longlist.js +0 -116
- package/dist/agents/candidate-longlist.js.map +0 -1
- package/dist/agents/detect.js +0 -169
- package/dist/agents/detect.js.map +0 -1
- package/dist/agents/evaluation-assembly.js +0 -270
- package/dist/agents/evaluation-assembly.js.map +0 -1
- package/dist/agents/events.js +0 -8
- package/dist/agents/events.js.map +0 -1
- package/dist/agents/headless-runner.js +0 -432
- package/dist/agents/headless-runner.js.map +0 -1
- package/dist/agents/jtbd-clarify.js +0 -169
- package/dist/agents/jtbd-clarify.js.map +0 -1
- package/dist/agents/models.js +0 -98
- package/dist/agents/models.js.map +0 -1
- package/dist/agents/parsers.js +0 -316
- package/dist/agents/parsers.js.map +0 -1
- package/dist/agents/prompts.js +0 -522
- package/dist/agents/prompts.js.map +0 -1
- package/dist/agents/run-log.js +0 -71
- package/dist/agents/run-log.js.map +0 -1
- package/dist/agents/runner.js +0 -906
- package/dist/agents/runner.js.map +0 -1
- package/dist/agents/types.js +0 -2
- package/dist/agents/types.js.map +0 -1
- package/dist/bin-resolver.js +0 -92
- package/dist/bin-resolver.js.map +0 -1
- package/dist/config.js +0 -282
- package/dist/config.js.map +0 -1
- package/dist/editor.js +0 -40
- package/dist/editor.js.map +0 -1
- package/dist/gates.js +0 -121
- package/dist/gates.js.map +0 -1
- package/dist/ipc.js +0 -145
- package/dist/ipc.js.map +0 -1
- package/dist/open-folder.js +0 -28
- package/dist/open-folder.js.map +0 -1
- package/dist/phases.js +0 -346
- package/dist/phases.js.map +0 -1
- package/dist/progress.js +0 -184
- package/dist/progress.js.map +0 -1
- package/dist/source-inbox.js +0 -297
- package/dist/source-inbox.js.map +0 -1
- package/dist/types.js +0 -3
- package/dist/types.js.map +0 -1
- package/dist/version.js +0 -18
- package/dist/version.js.map +0 -1
- package/dist/yaml-io.js +0 -376
- package/dist/yaml-io.js.map +0 -1
- package/maintenance-skill/SKILL.md +0 -18
- package/maintenance-skill/agents/openai.yaml +0 -4
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
-
const URL_RE = /https?:\/\/[^\s"'<>]+/g;
|
|
3
|
-
const MARKDOWN_LINK_RE = /\[([^\]\n]+)\]\((https?:\/\/[^)\s]+)\)/;
|
|
4
|
-
export function countCandidateUrlsFromLonglist(path) {
|
|
5
|
-
const candidates = readCandidateLonglist(path);
|
|
6
|
-
return candidates.length > 0 ? candidates.length : undefined;
|
|
7
|
-
}
|
|
8
|
-
export function readCandidateLonglist(path) {
|
|
9
|
-
if (!existsSync(path))
|
|
10
|
-
return [];
|
|
11
|
-
const candidates = [];
|
|
12
|
-
const seen = new Set();
|
|
13
|
-
let section = "";
|
|
14
|
-
let candidateTitle = "";
|
|
15
|
-
let current;
|
|
16
|
-
for (const line of readFileSync(path, "utf8").split("\n")) {
|
|
17
|
-
const sectionHeading = line.match(/^##\s+(.+?)\s*$/);
|
|
18
|
-
if (sectionHeading) {
|
|
19
|
-
section = cleanSection(sectionHeading[1] ?? "");
|
|
20
|
-
candidateTitle = "";
|
|
21
|
-
current = undefined;
|
|
22
|
-
continue;
|
|
23
|
-
}
|
|
24
|
-
const candidateHeading = line.match(/^###\s+(.+?)\s*$/);
|
|
25
|
-
if (candidateHeading) {
|
|
26
|
-
candidateTitle = candidateHeading[1]?.trim() ?? "";
|
|
27
|
-
current = undefined;
|
|
28
|
-
continue;
|
|
29
|
-
}
|
|
30
|
-
const url = firstUrl(line);
|
|
31
|
-
if (url) {
|
|
32
|
-
if (seen.has(url)) {
|
|
33
|
-
current = candidates.find((candidate) => candidate.url === url);
|
|
34
|
-
continue;
|
|
35
|
-
}
|
|
36
|
-
current = {
|
|
37
|
-
url,
|
|
38
|
-
title: candidateTitle || titleFromCandidateLine(line, url),
|
|
39
|
-
section: section || undefined,
|
|
40
|
-
};
|
|
41
|
-
candidates.push(current);
|
|
42
|
-
seen.add(url);
|
|
43
|
-
candidateTitle = "";
|
|
44
|
-
continue;
|
|
45
|
-
}
|
|
46
|
-
const reason = line.match(/^\s*[-*]\s*(?:Candidate\s+reason|Reason|Rationale):\s*(.+?)\s*$/i);
|
|
47
|
-
if (reason && current) {
|
|
48
|
-
current.reason = reason[1]?.trim();
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
return candidates;
|
|
52
|
-
}
|
|
53
|
-
export function groupCandidateLonglist(candidates, maxCandidatesPerGroup = 10) {
|
|
54
|
-
const groupSize = Math.max(1, Math.floor(maxCandidatesPerGroup));
|
|
55
|
-
const bySection = new Map();
|
|
56
|
-
for (const candidate of candidates) {
|
|
57
|
-
const section = candidate.section || "Unsectioned";
|
|
58
|
-
const sectionCandidates = bySection.get(section) ?? [];
|
|
59
|
-
sectionCandidates.push(candidate);
|
|
60
|
-
bySection.set(section, sectionCandidates);
|
|
61
|
-
}
|
|
62
|
-
const pending = [];
|
|
63
|
-
for (const [section, sectionCandidates] of bySection) {
|
|
64
|
-
for (let i = 0; i < sectionCandidates.length; i += groupSize) {
|
|
65
|
-
const chunk = sectionCandidates.slice(i, i + groupSize);
|
|
66
|
-
const chunkNumber = Math.floor(i / groupSize) + 1;
|
|
67
|
-
const chunkCount = Math.ceil(sectionCandidates.length / groupSize);
|
|
68
|
-
const suffix = chunkCount > 1 ? `-${chunkNumber}` : "";
|
|
69
|
-
pending.push({
|
|
70
|
-
section,
|
|
71
|
-
slug: `${slugify(section)}${suffix}`,
|
|
72
|
-
candidates: chunk,
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
const total = pending.length;
|
|
77
|
-
return pending.map((group, i) => ({
|
|
78
|
-
...group,
|
|
79
|
-
index: i + 1,
|
|
80
|
-
total,
|
|
81
|
-
fragmentPath: `working/evaluation-decisions/${String(i + 1).padStart(2, "0")}-${group.slug}.yaml`,
|
|
82
|
-
}));
|
|
83
|
-
}
|
|
84
|
-
export function normalizeCandidateUrl(url) {
|
|
85
|
-
return url.trim().replace(/[)\],.;:]+$/g, "");
|
|
86
|
-
}
|
|
87
|
-
function firstUrl(line) {
|
|
88
|
-
const markdownLink = line.match(MARKDOWN_LINK_RE);
|
|
89
|
-
if (markdownLink?.[2])
|
|
90
|
-
return normalizeCandidateUrl(markdownLink[2]);
|
|
91
|
-
const match = line.match(URL_RE);
|
|
92
|
-
return match?.[0] ? normalizeCandidateUrl(match[0]) : "";
|
|
93
|
-
}
|
|
94
|
-
function cleanSection(section) {
|
|
95
|
-
return section.trim().replace(/^\d+\.\s+/, "");
|
|
96
|
-
}
|
|
97
|
-
function titleFromCandidateLine(line, url) {
|
|
98
|
-
const markdownLink = line.match(MARKDOWN_LINK_RE);
|
|
99
|
-
if (markdownLink?.[1])
|
|
100
|
-
return markdownLink[1].trim();
|
|
101
|
-
const beforeUrl = line.slice(0, line.indexOf(url));
|
|
102
|
-
const cleaned = beforeUrl
|
|
103
|
-
.replace(/^\s*[-*]\s*/, "")
|
|
104
|
-
.replace(/\*\*/g, "")
|
|
105
|
-
.replace(/[-—:|\s]+$/g, "")
|
|
106
|
-
.trim();
|
|
107
|
-
return cleaned || undefined;
|
|
108
|
-
}
|
|
109
|
-
function slugify(value) {
|
|
110
|
-
const slug = value
|
|
111
|
-
.toLowerCase()
|
|
112
|
-
.replace(/[^a-z0-9]+/g, "-")
|
|
113
|
-
.replace(/^-+|-+$/g, "");
|
|
114
|
-
return slug || "section";
|
|
115
|
-
}
|
|
116
|
-
//# sourceMappingURL=candidate-longlist.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"candidate-longlist.js","sourceRoot":"","sources":["../../src/agents/candidate-longlist.ts"],"names":[],"mappings":"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"}
|
package/dist/agents/detect.js
DELETED
|
@@ -1,169 +0,0 @@
|
|
|
1
|
-
import { spawnSync } from "node:child_process";
|
|
2
|
-
import { createRequire } from "node:module";
|
|
3
|
-
import { existsSync } from "node:fs";
|
|
4
|
-
import { homedir } from "node:os";
|
|
5
|
-
import { join, dirname, basename } from "node:path";
|
|
6
|
-
import { fileURLToPath } from "node:url";
|
|
7
|
-
/**
|
|
8
|
-
* Resolve an agent binary path. Resolution order:
|
|
9
|
-
*
|
|
10
|
-
* 1. Explicit env override (`LINER_CLAUDE_BIN` / `LINER_CODEX_BIN`).
|
|
11
|
-
* Honored even if the path is missing — we surface the path the user
|
|
12
|
-
* named so they can see exactly what was tried.
|
|
13
|
-
* 2. `which <name>` against the inherited PATH. Fast and correct for the
|
|
14
|
-
* common case (user launched the TUI from their normal shell).
|
|
15
|
-
* 3. `bash -lc 'command -v <name>'` against the *login* shell. Costs ~50ms
|
|
16
|
-
* but sources the user's shell init (.bashrc / .zshrc / fnm / nvm /
|
|
17
|
-
* asdf), catching version-manager shims that aren't in the TUI's
|
|
18
|
-
* inherited PATH — e.g. cmux-launched sessions where fnm hasn't run.
|
|
19
|
-
*
|
|
20
|
-
* Returning null means "definitely not installed" — both shells failed and
|
|
21
|
-
* no env override was set.
|
|
22
|
-
*/
|
|
23
|
-
function resolveBin(name, envVar) {
|
|
24
|
-
const override = process.env[envVar];
|
|
25
|
-
if (override && override.trim())
|
|
26
|
-
return override.trim();
|
|
27
|
-
const direct = spawnSync("which", [name], { encoding: "utf8" });
|
|
28
|
-
if (direct.status === 0) {
|
|
29
|
-
const out = direct.stdout.trim();
|
|
30
|
-
if (out)
|
|
31
|
-
return out;
|
|
32
|
-
}
|
|
33
|
-
// Fall back to a login shell so shims (fnm / nvm / asdf / pyenv / etc.)
|
|
34
|
-
// get a chance to register. `command -v` is POSIX-portable; `-l` makes
|
|
35
|
-
// bash source the login profile that puts those shims on PATH.
|
|
36
|
-
const viaLoginShell = spawnSync("bash", ["-lc", `command -v ${name}`], {
|
|
37
|
-
encoding: "utf8",
|
|
38
|
-
});
|
|
39
|
-
if (viaLoginShell.status === 0) {
|
|
40
|
-
const out = viaLoginShell.stdout.trim();
|
|
41
|
-
if (out)
|
|
42
|
-
return out;
|
|
43
|
-
}
|
|
44
|
-
return null;
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Names the env var that overrides binary detection for an agent. Mirrors
|
|
48
|
-
* the LINER_BIN pattern from bin-resolver — explicit > inferred.
|
|
49
|
-
*/
|
|
50
|
-
export function envVarForAgent(id) {
|
|
51
|
-
return id === "claude" ? "LINER_CLAUDE_BIN" : "LINER_CODEX_BIN";
|
|
52
|
-
}
|
|
53
|
-
export function configHomeForAgent(id) {
|
|
54
|
-
const linerOverride = process.env[id === "claude" ? "LINER_CLAUDE_HOME" : "LINER_CODEX_HOME"]?.trim();
|
|
55
|
-
if (linerOverride)
|
|
56
|
-
return linerOverride;
|
|
57
|
-
const nativeOverride = process.env[id === "claude" ? "CLAUDE_CONFIG_DIR" : "CODEX_HOME"]?.trim();
|
|
58
|
-
if (nativeOverride)
|
|
59
|
-
return nativeOverride;
|
|
60
|
-
return join(homedir(), id === "claude" ? ".claude" : ".codex");
|
|
61
|
-
}
|
|
62
|
-
/** Catalog of agents the TUI knows how to drive. Single source of truth so
|
|
63
|
-
* `detectAgents` and the "not detected" UI in AgentSetup stay in sync. */
|
|
64
|
-
export const KNOWN_AGENTS = [
|
|
65
|
-
{ id: "claude", name: "Claude", envVar: "LINER_CLAUDE_BIN" },
|
|
66
|
-
{ id: "codex", name: "OpenAI", envVar: "LINER_CODEX_BIN" },
|
|
67
|
-
];
|
|
68
|
-
export function detectAgents() {
|
|
69
|
-
const found = [];
|
|
70
|
-
for (const meta of KNOWN_AGENTS) {
|
|
71
|
-
const bin = resolveBin(meta.id, meta.envVar);
|
|
72
|
-
if (bin)
|
|
73
|
-
found.push({
|
|
74
|
-
id: meta.id,
|
|
75
|
-
name: meta.name,
|
|
76
|
-
bin,
|
|
77
|
-
configHome: configHomeForAgent(meta.id),
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
return found;
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* Find the curating-mixtapes skill bundle on disk.
|
|
84
|
-
*
|
|
85
|
-
* Resolution order:
|
|
86
|
-
* 1. `LINER_SKILL_PATH` env var (must contain SKILL.md).
|
|
87
|
-
* 2. Walk up from this module's own location (covers the npm-installed
|
|
88
|
-
* case — the skill bundle ships inside the package at
|
|
89
|
-
* `linersh/cli-update-docs/`, and `import.meta.url` resolves the
|
|
90
|
-
* symlinks npx puts in front of the package).
|
|
91
|
-
* 3. Walk up from cwd (covers the dev-from-repo case where the user
|
|
92
|
-
* is somewhere inside the liner working tree, where the tracked source
|
|
93
|
-
* bundle lives at `docs/curation-skill/`).
|
|
94
|
-
* 4. Walk up from `process.argv[1]` (legacy global-install case).
|
|
95
|
-
*/
|
|
96
|
-
export function resolveSkillPath() {
|
|
97
|
-
return resolveSkillPathWithDiagnostics().path;
|
|
98
|
-
}
|
|
99
|
-
export function resolveSkillPathWithDiagnostics() {
|
|
100
|
-
const env = process.env["LINER_SKILL_PATH"];
|
|
101
|
-
const envPath = env && env.trim() ? normalizeSkillPathInput(env.trim()) : null;
|
|
102
|
-
if (envPath && existsSync(join(envPath, "SKILL.md"))) {
|
|
103
|
-
return { path: envPath, envPath, searched: [join(envPath, "SKILL.md")] };
|
|
104
|
-
}
|
|
105
|
-
const candidates = ["cli-update-docs", "docs/curation-skill", "skills/curating-mixtapes"];
|
|
106
|
-
const moduleDir = dirname(fileURLToPath(import.meta.url));
|
|
107
|
-
const packageRoot = nearestPackageRoot(moduleDir);
|
|
108
|
-
const searchFromRoots = [
|
|
109
|
-
moduleDir,
|
|
110
|
-
packageRoot,
|
|
111
|
-
selfPackageRoot(),
|
|
112
|
-
process.cwd(),
|
|
113
|
-
dirname(process.argv[1] ?? ""),
|
|
114
|
-
].filter((root) => Boolean(root));
|
|
115
|
-
const searched = envPath ? [join(envPath, "SKILL.md")] : [];
|
|
116
|
-
for (const root of searchFromRoots) {
|
|
117
|
-
const hit = walkUp(root, candidates, searched);
|
|
118
|
-
if (hit)
|
|
119
|
-
return { path: hit, envPath, searched };
|
|
120
|
-
}
|
|
121
|
-
return { path: null, envPath, searched };
|
|
122
|
-
}
|
|
123
|
-
function normalizeSkillPathInput(input) {
|
|
124
|
-
const expanded = input === "~"
|
|
125
|
-
? homedir()
|
|
126
|
-
: input.startsWith("~/")
|
|
127
|
-
? join(homedir(), input.slice(2))
|
|
128
|
-
: input;
|
|
129
|
-
return basename(expanded) === "SKILL.md" ? dirname(expanded) : expanded;
|
|
130
|
-
}
|
|
131
|
-
function nearestPackageRoot(start) {
|
|
132
|
-
let dir = start;
|
|
133
|
-
for (let i = 0; i < 12; i++) {
|
|
134
|
-
if (existsSync(join(dir, "package.json")))
|
|
135
|
-
return dir;
|
|
136
|
-
const parent = dirname(dir);
|
|
137
|
-
if (parent === dir)
|
|
138
|
-
return null;
|
|
139
|
-
dir = parent;
|
|
140
|
-
}
|
|
141
|
-
return null;
|
|
142
|
-
}
|
|
143
|
-
function selfPackageRoot() {
|
|
144
|
-
try {
|
|
145
|
-
const require = createRequire(import.meta.url);
|
|
146
|
-
return dirname(require.resolve("linersh/package.json"));
|
|
147
|
-
}
|
|
148
|
-
catch {
|
|
149
|
-
return null;
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
function walkUp(start, candidates, searched) {
|
|
153
|
-
let dir = start;
|
|
154
|
-
for (let i = 0; i < 12; i++) {
|
|
155
|
-
for (const rel of candidates) {
|
|
156
|
-
const guess = join(dir, rel);
|
|
157
|
-
const skillFile = join(guess, "SKILL.md");
|
|
158
|
-
searched.push(skillFile);
|
|
159
|
-
if (existsSync(skillFile))
|
|
160
|
-
return guess;
|
|
161
|
-
}
|
|
162
|
-
const parent = dirname(dir);
|
|
163
|
-
if (parent === dir)
|
|
164
|
-
return null;
|
|
165
|
-
dir = parent;
|
|
166
|
-
}
|
|
167
|
-
return null;
|
|
168
|
-
}
|
|
169
|
-
//# sourceMappingURL=detect.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"detect.js","sourceRoot":"","sources":["../../src/agents/detect.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,270 +0,0 @@
|
|
|
1
|
-
import { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync } 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
|
-
import { validateEvaluation } from "./artifact-validation.js";
|
|
6
|
-
const DECISIONS = new Set(["kept", "trim", "trimmed", "dropped"]);
|
|
7
|
-
const JTBD_FITS = new Set(["direct", "bridge", "background"]);
|
|
8
|
-
const FETCH_STATUSES = new Set(["readable", "partial", "metadata_only", "unavailable"]);
|
|
9
|
-
const USABLE_FETCH_STATUSES = new Set(["readable", "partial"]);
|
|
10
|
-
const CONTENT_QUALITIES = new Set(["high", "medium", "low"]);
|
|
11
|
-
const USABLE_CONTENT_QUALITIES = new Set(["high", "medium"]);
|
|
12
|
-
export function ensureEvaluationArtifact(project) {
|
|
13
|
-
const finalPath = join(project, "working/03-evaluation.yaml");
|
|
14
|
-
const expectedCandidateCount = countCandidateUrlsFromLonglist(join(project, "working/02-candidate-longlist.md"));
|
|
15
|
-
const existing = validateEvaluation(finalPath, { expectedCandidateCount });
|
|
16
|
-
if (existing.ok)
|
|
17
|
-
return { ok: true, assembled: false };
|
|
18
|
-
const assembled = assembleEvaluationFromFragments(project);
|
|
19
|
-
if (!assembled.ok) {
|
|
20
|
-
return {
|
|
21
|
-
ok: false,
|
|
22
|
-
message: `${existing.message}; fragment assembly failed: ${assembled.message}`,
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
const validation = validateEvaluation(finalPath, { expectedCandidateCount });
|
|
26
|
-
if (!validation.ok) {
|
|
27
|
-
return {
|
|
28
|
-
ok: false,
|
|
29
|
-
message: `assembled working/03-evaluation.yaml is invalid: ${validation.message}`,
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
return {
|
|
33
|
-
ok: true,
|
|
34
|
-
assembled: true,
|
|
35
|
-
message: `Assembled working/03-evaluation.yaml with ${assembled.count} Evaluation decisions from fragments.`,
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
export function assembleEvaluationFromFragments(project) {
|
|
39
|
-
const longlistPath = join(project, "working/02-candidate-longlist.md");
|
|
40
|
-
const candidates = readCandidateLonglist(longlistPath);
|
|
41
|
-
if (candidates.length === 0) {
|
|
42
|
-
return { ok: false, message: "working/02-candidate-longlist.md has no URL candidates" };
|
|
43
|
-
}
|
|
44
|
-
const fragments = readEvaluationFragments(join(project, "working/evaluation-decisions"));
|
|
45
|
-
if (fragments.length === 0) {
|
|
46
|
-
return { ok: false, message: "working/evaluation-decisions has no YAML decision fragments" };
|
|
47
|
-
}
|
|
48
|
-
const byUrl = new Map();
|
|
49
|
-
for (const fragment of fragments) {
|
|
50
|
-
const url = stringField(fragment, "url");
|
|
51
|
-
if (!url)
|
|
52
|
-
return { ok: false, message: "a decision fragment is missing url" };
|
|
53
|
-
const decision = normalizeDecision(stringField(fragment, "decision"));
|
|
54
|
-
if (!DECISIONS.has(decision)) {
|
|
55
|
-
return { ok: false, message: `decision fragment for ${url} has invalid decision: ${decision || "(empty)"}` };
|
|
56
|
-
}
|
|
57
|
-
byUrl.set(normalizeCandidateUrl(url), { ...fragment, decision });
|
|
58
|
-
}
|
|
59
|
-
const missing = candidates.filter((candidate) => !byUrl.has(candidate.url));
|
|
60
|
-
if (missing.length > 0) {
|
|
61
|
-
return {
|
|
62
|
-
ok: false,
|
|
63
|
-
message: `missing decision fragments for ${missing.length} candidates, first: ${missing[0]?.url}`,
|
|
64
|
-
};
|
|
65
|
-
}
|
|
66
|
-
const assembled = candidates.map((candidate) => normalizeDecisionRecord(candidate, byUrl.get(candidate.url)));
|
|
67
|
-
const outputPath = join(project, "working/03-evaluation.yaml");
|
|
68
|
-
mkdirSync(join(project, "working"), { recursive: true });
|
|
69
|
-
writeFileSync(outputPath, YAML.stringify({ candidates: assembled }), "utf8");
|
|
70
|
-
return { ok: true, path: outputPath, count: assembled.length };
|
|
71
|
-
}
|
|
72
|
-
export function validateEvaluationFragment(path, candidates) {
|
|
73
|
-
const parsed = readEvaluationFragmentFile(path);
|
|
74
|
-
if (!parsed.ok)
|
|
75
|
-
return parsed;
|
|
76
|
-
const expectedUrls = new Set(candidates.map((candidate) => candidate.url));
|
|
77
|
-
const candidateByUrl = new Map(candidates.map((candidate) => [candidate.url, candidate]));
|
|
78
|
-
const seen = new Set();
|
|
79
|
-
for (const [i, fragment] of parsed.records.entries()) {
|
|
80
|
-
const rawUrl = stringField(fragment, "url");
|
|
81
|
-
if (!rawUrl)
|
|
82
|
-
return { ok: false, message: `fragment candidates[${i}].url is required` };
|
|
83
|
-
const url = normalizeCandidateUrl(rawUrl);
|
|
84
|
-
if (!expectedUrls.has(url)) {
|
|
85
|
-
return { ok: false, message: `fragment includes unexpected URL: ${url}` };
|
|
86
|
-
}
|
|
87
|
-
if (seen.has(url)) {
|
|
88
|
-
return { ok: false, message: `fragment includes duplicate URL: ${url}` };
|
|
89
|
-
}
|
|
90
|
-
seen.add(url);
|
|
91
|
-
const decision = normalizeDecision(stringField(fragment, "decision"));
|
|
92
|
-
if (!DECISIONS.has(decision)) {
|
|
93
|
-
return {
|
|
94
|
-
ok: false,
|
|
95
|
-
message: `fragment candidate ${url} has invalid decision: ${decision || "(empty)"}`,
|
|
96
|
-
};
|
|
97
|
-
}
|
|
98
|
-
if (decision === "kept" || decision === "trim") {
|
|
99
|
-
const rating = numericField(fragment, "rating");
|
|
100
|
-
if (rating == null || rating < 1 || rating > 5) {
|
|
101
|
-
return { ok: false, message: `fragment candidate ${url} rating must be 1-5 for ${decision}` };
|
|
102
|
-
}
|
|
103
|
-
const jtbdFit = stringField(fragment, "jtbd_fit");
|
|
104
|
-
if (!JTBD_FITS.has(jtbdFit)) {
|
|
105
|
-
return { ok: false, message: `fragment candidate ${url} jtbd_fit is invalid: ${jtbdFit || "(empty)"}` };
|
|
106
|
-
}
|
|
107
|
-
if (!stringField(fragment, "section") && !candidateByUrl.get(url)?.section) {
|
|
108
|
-
return { ok: false, message: `fragment candidate ${url} section is required for ${decision}` };
|
|
109
|
-
}
|
|
110
|
-
if (!stringField(fragment, "note")) {
|
|
111
|
-
return { ok: false, message: `fragment candidate ${url} note is required for ${decision}` };
|
|
112
|
-
}
|
|
113
|
-
const evidence = validateFragmentEvidence(fragment, url, decision);
|
|
114
|
-
if (!evidence.ok)
|
|
115
|
-
return evidence;
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
const missing = candidates.filter((candidate) => !seen.has(candidate.url));
|
|
119
|
-
if (missing.length > 0) {
|
|
120
|
-
return {
|
|
121
|
-
ok: false,
|
|
122
|
-
message: `fragment is missing ${missing.length} candidate(s), first: ${missing[0]?.url}`,
|
|
123
|
-
};
|
|
124
|
-
}
|
|
125
|
-
return { ok: true, count: seen.size };
|
|
126
|
-
}
|
|
127
|
-
function readEvaluationFragments(dir) {
|
|
128
|
-
if (!existsSync(dir))
|
|
129
|
-
return [];
|
|
130
|
-
const records = [];
|
|
131
|
-
for (const name of readdirSync(dir).filter((file) => /\.ya?ml$/i.test(file)).sort()) {
|
|
132
|
-
const path = join(dir, name);
|
|
133
|
-
const parsed = readEvaluationFragmentFile(path);
|
|
134
|
-
if (parsed.ok)
|
|
135
|
-
records.push(...parsed.records);
|
|
136
|
-
}
|
|
137
|
-
return records;
|
|
138
|
-
}
|
|
139
|
-
function readEvaluationFragmentFile(path) {
|
|
140
|
-
if (!existsSync(path))
|
|
141
|
-
return { ok: false, message: `${path} is missing` };
|
|
142
|
-
let parsed;
|
|
143
|
-
try {
|
|
144
|
-
parsed = YAML.parse(readFileSync(path, "utf8"));
|
|
145
|
-
}
|
|
146
|
-
catch (error) {
|
|
147
|
-
return {
|
|
148
|
-
ok: false,
|
|
149
|
-
message: `fragment YAML could not be parsed: ${error instanceof Error ? error.message : String(error)}`,
|
|
150
|
-
};
|
|
151
|
-
}
|
|
152
|
-
if (Array.isArray(parsed)) {
|
|
153
|
-
return { ok: true, records: parsed.filter(isRecord) };
|
|
154
|
-
}
|
|
155
|
-
if (!isRecord(parsed))
|
|
156
|
-
return { ok: false, message: "fragment is not a YAML mapping or list" };
|
|
157
|
-
const candidates = parsed["candidates"];
|
|
158
|
-
if (Array.isArray(candidates)) {
|
|
159
|
-
return { ok: true, records: candidates.filter(isRecord) };
|
|
160
|
-
}
|
|
161
|
-
if (stringField(parsed, "url")) {
|
|
162
|
-
return { ok: true, records: [parsed] };
|
|
163
|
-
}
|
|
164
|
-
return { ok: false, message: "fragment has no candidates list" };
|
|
165
|
-
}
|
|
166
|
-
function normalizeDecisionRecord(candidate, fragment) {
|
|
167
|
-
const decision = normalizeDecision(stringField(fragment, "decision"));
|
|
168
|
-
const out = {
|
|
169
|
-
url: candidate.url,
|
|
170
|
-
title: stringField(fragment, "title") || candidate.title,
|
|
171
|
-
decision,
|
|
172
|
-
section: stringField(fragment, "section") || candidate.section,
|
|
173
|
-
};
|
|
174
|
-
const rationale = stringField(fragment, "rationale");
|
|
175
|
-
if (rationale)
|
|
176
|
-
out["rationale"] = rationale;
|
|
177
|
-
if (decision === "kept" || decision === "trim") {
|
|
178
|
-
const rating = numericField(fragment, "rating");
|
|
179
|
-
if (rating != null)
|
|
180
|
-
out["rating"] = rating;
|
|
181
|
-
const jtbdFit = stringField(fragment, "jtbd_fit");
|
|
182
|
-
if (jtbdFit)
|
|
183
|
-
out["jtbd_fit"] = jtbdFit;
|
|
184
|
-
const note = stringField(fragment, "note");
|
|
185
|
-
if (note)
|
|
186
|
-
out["note"] = note;
|
|
187
|
-
const fetchStatus = stringField(fragment, "fetch_status");
|
|
188
|
-
if (fetchStatus)
|
|
189
|
-
out["fetch_status"] = fetchStatus;
|
|
190
|
-
const contentQuality = stringField(fragment, "content_quality");
|
|
191
|
-
if (contentQuality)
|
|
192
|
-
out["content_quality"] = contentQuality;
|
|
193
|
-
const evidence = stringListField(fragment, "evidence");
|
|
194
|
-
if (evidence.length > 0)
|
|
195
|
-
out["evidence"] = evidence;
|
|
196
|
-
}
|
|
197
|
-
return Object.fromEntries(Object.entries(out).filter(([, value]) => value != null && value !== ""));
|
|
198
|
-
}
|
|
199
|
-
function validateFragmentEvidence(fragment, url, decision) {
|
|
200
|
-
const fetchStatus = stringField(fragment, "fetch_status");
|
|
201
|
-
if (!FETCH_STATUSES.has(fetchStatus)) {
|
|
202
|
-
return { ok: false, message: `fragment candidate ${url} fetch_status is required for ${decision}` };
|
|
203
|
-
}
|
|
204
|
-
if (!USABLE_FETCH_STATUSES.has(fetchStatus)) {
|
|
205
|
-
return {
|
|
206
|
-
ok: false,
|
|
207
|
-
message: `fragment candidate ${url} fetch_status cannot be ${fetchStatus} for ${decision}`,
|
|
208
|
-
};
|
|
209
|
-
}
|
|
210
|
-
const contentQuality = stringField(fragment, "content_quality");
|
|
211
|
-
if (!CONTENT_QUALITIES.has(contentQuality)) {
|
|
212
|
-
return { ok: false, message: `fragment candidate ${url} content_quality is required for ${decision}` };
|
|
213
|
-
}
|
|
214
|
-
if (!USABLE_CONTENT_QUALITIES.has(contentQuality)) {
|
|
215
|
-
return {
|
|
216
|
-
ok: false,
|
|
217
|
-
message: `fragment candidate ${url} content_quality cannot be low for ${decision}`,
|
|
218
|
-
};
|
|
219
|
-
}
|
|
220
|
-
const evidence = stringListField(fragment, "evidence");
|
|
221
|
-
if (evidence.length < 2) {
|
|
222
|
-
return {
|
|
223
|
-
ok: false,
|
|
224
|
-
message: `fragment candidate ${url} evidence needs at least two content-specific bullets for ${decision}`,
|
|
225
|
-
};
|
|
226
|
-
}
|
|
227
|
-
return { ok: true, count: 1 };
|
|
228
|
-
}
|
|
229
|
-
function normalizeDecision(decision) {
|
|
230
|
-
return decision === "trimmed" ? "trim" : decision;
|
|
231
|
-
}
|
|
232
|
-
function isRecord(value) {
|
|
233
|
-
return Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
234
|
-
}
|
|
235
|
-
function stringField(record, key) {
|
|
236
|
-
const value = record[key];
|
|
237
|
-
return typeof value === "string" ? value.trim() : "";
|
|
238
|
-
}
|
|
239
|
-
function numericField(record, key) {
|
|
240
|
-
const value = record[key];
|
|
241
|
-
if (typeof value === "number")
|
|
242
|
-
return value;
|
|
243
|
-
if (typeof value !== "string")
|
|
244
|
-
return null;
|
|
245
|
-
const parsed = Number(value);
|
|
246
|
-
return Number.isFinite(parsed) ? parsed : null;
|
|
247
|
-
}
|
|
248
|
-
function stringListField(record, key) {
|
|
249
|
-
const value = record[key];
|
|
250
|
-
if (!Array.isArray(value))
|
|
251
|
-
return [];
|
|
252
|
-
return value
|
|
253
|
-
.map(yamlListItemToString)
|
|
254
|
-
.filter((item) => item !== "");
|
|
255
|
-
}
|
|
256
|
-
function yamlListItemToString(item) {
|
|
257
|
-
if (typeof item === "string")
|
|
258
|
-
return item.trim();
|
|
259
|
-
if (!isRecord(item))
|
|
260
|
-
return "";
|
|
261
|
-
const entries = Object.entries(item);
|
|
262
|
-
if (entries.length !== 1)
|
|
263
|
-
return "";
|
|
264
|
-
const [key, value] = entries[0];
|
|
265
|
-
if (typeof value !== "string" && typeof value !== "number" && typeof value !== "boolean") {
|
|
266
|
-
return "";
|
|
267
|
-
}
|
|
268
|
-
return `${key}: ${String(value)}`.trim();
|
|
269
|
-
}
|
|
270
|
-
//# sourceMappingURL=evaluation-assembly.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"evaluation-assembly.js","sourceRoot":"","sources":["../../src/agents/evaluation-assembly.ts"],"names":[],"mappings":"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"}
|
package/dist/agents/events.js
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
// Normalized event stream used by the TUI to render agent progress.
|
|
2
|
-
//
|
|
3
|
-
// Both Claude (`--output-format stream-json --verbose`) and Codex (`--json`)
|
|
4
|
-
// emit newline-delimited JSON. Their schemas differ; per-CLI parsers in this
|
|
5
|
-
// directory convert each line into one of the AgentEvent variants below so
|
|
6
|
-
// the PhaseRunner UI is agent-agnostic.
|
|
7
|
-
export {};
|
|
8
|
-
//# sourceMappingURL=events.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/agents/events.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,EAAE;AACF,6EAA6E;AAC7E,6EAA6E;AAC7E,2EAA2E;AAC3E,wCAAwC"}
|