linersh 1.1.2 → 1.2.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.
- package/README.md +12 -58
- package/bin/liner.js +62 -14
- 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
package/dist/gates.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"gates.js","sourceRoot":"","sources":["../src/gates.ts"],"names":[],"mappings":"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"}
|
package/dist/ipc.js
DELETED
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
// Subprocess spawning + NDJSON event stream parsing.
|
|
2
|
-
import { spawn } from "node:child_process";
|
|
3
|
-
import { createInterface } from "node:readline";
|
|
4
|
-
import { resolveBinary } from "./bin-resolver.js";
|
|
5
|
-
/** Spawn `liner compile --emit-events` and call `onEvent` for each NDJSON line. */
|
|
6
|
-
export function streamCompile(opts, onEvent) {
|
|
7
|
-
const bin = resolveBinary();
|
|
8
|
-
const args = [...bin.args, "compile", opts.folder, "--emit-events"];
|
|
9
|
-
if (opts.cookies)
|
|
10
|
-
args.push("--cookies", opts.cookies);
|
|
11
|
-
if (opts.noCache)
|
|
12
|
-
args.push("--no-cache");
|
|
13
|
-
if (opts.skipOptional)
|
|
14
|
-
args.push("--skip-optional");
|
|
15
|
-
if (opts.maxTranscriptLength != null) {
|
|
16
|
-
args.push("--max-transcript-length", String(opts.maxTranscriptLength));
|
|
17
|
-
}
|
|
18
|
-
if (opts.includeSections && opts.includeSections.length > 0) {
|
|
19
|
-
args.push("--include-sections", opts.includeSections.join(","));
|
|
20
|
-
}
|
|
21
|
-
if (opts.excludeSections && opts.excludeSections.length > 0) {
|
|
22
|
-
args.push("--exclude-sections", opts.excludeSections.join(","));
|
|
23
|
-
}
|
|
24
|
-
const child = spawn(bin.command, args, {
|
|
25
|
-
stdio: ["ignore", "pipe", "pipe"],
|
|
26
|
-
env: { ...process.env, PYTHONUNBUFFERED: "1" },
|
|
27
|
-
});
|
|
28
|
-
if (child.stdout) {
|
|
29
|
-
const rl = createInterface({ input: child.stdout });
|
|
30
|
-
rl.on("line", (line) => {
|
|
31
|
-
const trimmed = line.trim();
|
|
32
|
-
if (!trimmed)
|
|
33
|
-
return;
|
|
34
|
-
try {
|
|
35
|
-
const event = JSON.parse(trimmed);
|
|
36
|
-
onEvent(event);
|
|
37
|
-
}
|
|
38
|
-
catch {
|
|
39
|
-
// ignore non-JSON noise; surface via stderr collector
|
|
40
|
-
}
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
let stderr = "";
|
|
44
|
-
if (child.stderr) {
|
|
45
|
-
child.stderr.on("data", (chunk) => {
|
|
46
|
-
stderr += chunk.toString("utf8");
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
const done = new Promise((resolve) => {
|
|
50
|
-
child.on("close", (code) => resolve({ code, stderr }));
|
|
51
|
-
});
|
|
52
|
-
return {
|
|
53
|
-
child,
|
|
54
|
-
cancel: () => {
|
|
55
|
-
if (!child.killed)
|
|
56
|
-
child.kill("SIGTERM");
|
|
57
|
-
},
|
|
58
|
-
done,
|
|
59
|
-
};
|
|
60
|
-
}
|
|
61
|
-
/** Run `liner list --json --dir <dir>` and return project folder records. */
|
|
62
|
-
export async function listProjects(dir, recursive = false) {
|
|
63
|
-
const bin = resolveBinary();
|
|
64
|
-
const args = [...bin.args, "list", "--json", "--dir", dir];
|
|
65
|
-
if (recursive)
|
|
66
|
-
args.push("--recursive");
|
|
67
|
-
const result = await runCapture(bin.command, args);
|
|
68
|
-
if (result.code !== 0) {
|
|
69
|
-
throw new Error(`liner list failed (${result.code}): ${result.stderr}`);
|
|
70
|
-
}
|
|
71
|
-
if (!result.stdout.trim())
|
|
72
|
-
return [];
|
|
73
|
-
return JSON.parse(result.stdout);
|
|
74
|
-
}
|
|
75
|
-
/** Run `liner init <folder>` to scaffold a project folder. */
|
|
76
|
-
export async function runInit(folder, opts = {}) {
|
|
77
|
-
const bin = resolveBinary();
|
|
78
|
-
const args = [...bin.args, "init", folder];
|
|
79
|
-
if (opts.force)
|
|
80
|
-
args.push("--force");
|
|
81
|
-
const result = await runCapture(bin.command, args);
|
|
82
|
-
if (result.code !== 0) {
|
|
83
|
-
throw new Error(result.stderr.trim() || `liner init failed with code ${result.code}`);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
/** Run `liner share <folder>` and return the archive path. */
|
|
87
|
-
export async function runShare(folder, opts = {}) {
|
|
88
|
-
const bin = resolveBinary();
|
|
89
|
-
const args = [...bin.args, "share", folder];
|
|
90
|
-
if (opts.noWorkingNotes)
|
|
91
|
-
args.push("--no-working-notes");
|
|
92
|
-
if (opts.noSourceContent)
|
|
93
|
-
args.push("--no-source-content");
|
|
94
|
-
if (opts.noPersonal)
|
|
95
|
-
args.push("--no-personal");
|
|
96
|
-
if (opts.minimal)
|
|
97
|
-
args.push("--minimal");
|
|
98
|
-
if (opts.out)
|
|
99
|
-
args.push("--out", opts.out);
|
|
100
|
-
const result = await runCapture(bin.command, args);
|
|
101
|
-
if (result.code !== 0) {
|
|
102
|
-
throw new Error(result.stderr.trim() || `liner share failed with code ${result.code}`);
|
|
103
|
-
}
|
|
104
|
-
// CLI prints "Wrote <path> (N entries)" to stderr (Rich console -> stderr).
|
|
105
|
-
const match = (result.stderr + result.stdout).match(/Wrote\s+(\S+)/);
|
|
106
|
-
if (match && match[1])
|
|
107
|
-
return match[1];
|
|
108
|
-
if (opts.out)
|
|
109
|
-
return opts.out;
|
|
110
|
-
// Fallback: derive default location.
|
|
111
|
-
return folder.replace(/\/+$/, "") + ".mixtape";
|
|
112
|
-
}
|
|
113
|
-
/** Run `liner setup-js --yes` to install/download Playwright Chromium support. */
|
|
114
|
-
export async function runSetupJs() {
|
|
115
|
-
const bin = resolveBinary();
|
|
116
|
-
const result = await runCapture(bin.command, [...bin.args, "setup-js", "--yes"]);
|
|
117
|
-
if (result.code !== 0) {
|
|
118
|
-
throw new Error((result.stderr + result.stdout).trim() ||
|
|
119
|
-
`liner setup-js failed with code ${result.code}`);
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
/** Run `liner import <archive> <dest>`. */
|
|
123
|
-
export async function runImport(archive, destination, opts = {}) {
|
|
124
|
-
const bin = resolveBinary();
|
|
125
|
-
const args = [...bin.args, "import", archive, destination];
|
|
126
|
-
if (opts.noRefetch)
|
|
127
|
-
args.push("--no-refetch");
|
|
128
|
-
if (opts.cookies)
|
|
129
|
-
args.push("--cookies", opts.cookies);
|
|
130
|
-
const result = await runCapture(bin.command, args);
|
|
131
|
-
if (result.code !== 0) {
|
|
132
|
-
throw new Error(result.stderr.trim() || `liner import failed with code ${result.code}`);
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
function runCapture(command, args) {
|
|
136
|
-
return new Promise((resolve) => {
|
|
137
|
-
const child = spawn(command, args, { stdio: ["ignore", "pipe", "pipe"] });
|
|
138
|
-
let stdout = "";
|
|
139
|
-
let stderr = "";
|
|
140
|
-
child.stdout?.on("data", (c) => (stdout += c.toString("utf8")));
|
|
141
|
-
child.stderr?.on("data", (c) => (stderr += c.toString("utf8")));
|
|
142
|
-
child.on("close", (code) => resolve({ code, stdout, stderr }));
|
|
143
|
-
});
|
|
144
|
-
}
|
|
145
|
-
//# sourceMappingURL=ipc.js.map
|
package/dist/ipc.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ipc.js","sourceRoot":"","sources":["../src/ipc.ts"],"names":[],"mappings":"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"}
|
package/dist/open-folder.js
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { spawn } from "node:child_process";
|
|
2
|
-
/**
|
|
3
|
-
* Open a folder in the OS file manager. Cross-platform, best-effort, never
|
|
4
|
-
* throws — opening the folder is a convenience, not load-bearing.
|
|
5
|
-
*
|
|
6
|
-
* macOS → `open <path>`
|
|
7
|
-
* Windows → `explorer <path>`
|
|
8
|
-
* Linux → `xdg-open <path>`
|
|
9
|
-
*
|
|
10
|
-
* Spawned detached + unref'd so it doesn't tie the file manager's lifetime to
|
|
11
|
-
* the TUI, and stdio is ignored so the opener can't corrupt the terminal.
|
|
12
|
-
*/
|
|
13
|
-
export function openFolder(path) {
|
|
14
|
-
const cmd = process.platform === "darwin"
|
|
15
|
-
? "open"
|
|
16
|
-
: process.platform === "win32"
|
|
17
|
-
? "explorer"
|
|
18
|
-
: "xdg-open";
|
|
19
|
-
try {
|
|
20
|
-
const child = spawn(cmd, [path], { detached: true, stdio: "ignore" });
|
|
21
|
-
child.unref();
|
|
22
|
-
return true;
|
|
23
|
-
}
|
|
24
|
-
catch {
|
|
25
|
-
return false;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
//# sourceMappingURL=open-folder.js.map
|
package/dist/open-folder.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"open-folder.js","sourceRoot":"","sources":["../src/open-folder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C;;;;;;;;;;GAUG;AACH,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,MAAM,GAAG,GACP,OAAO,CAAC,QAAQ,KAAK,QAAQ;QAC3B,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO;YAC5B,CAAC,CAAC,UAAU;YACZ,CAAC,CAAC,UAAU,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACtE,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
package/dist/phases.js
DELETED
|
@@ -1,346 +0,0 @@
|
|
|
1
|
-
// Phase model for the curating-mixtapes methodology.
|
|
2
|
-
//
|
|
3
|
-
// Status is driven by a single progress cursor (see progress.ts), not by
|
|
4
|
-
// per-artifact filesystem checks. Detail strings still pull from the
|
|
5
|
-
// filesystem for context (source counts, character counts, etc.) but they
|
|
6
|
-
// no longer drive the ✓ / ◐ / ○ badge — the cursor does. This eliminates
|
|
7
|
-
// the swiss-cheese view where a later phase showed complete while earlier
|
|
8
|
-
// ones were empty just because some artifact happened to be on disk.
|
|
9
|
-
import { existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
10
|
-
import { join } from "node:path";
|
|
11
|
-
import { PHASE_ORDER, TOTAL_STEPS } from "./progress.js";
|
|
12
|
-
const GATE_FILE = ".liner-gates.json";
|
|
13
|
-
export function readGateState(folder) {
|
|
14
|
-
const path = join(folder.path, GATE_FILE);
|
|
15
|
-
if (!existsSync(path)) {
|
|
16
|
-
return { gate0Accepted: false, gate1Accepted: false, gate2Accepted: false };
|
|
17
|
-
}
|
|
18
|
-
try {
|
|
19
|
-
const parsed = JSON.parse(readFileSync(path, "utf8"));
|
|
20
|
-
return {
|
|
21
|
-
gate0Accepted: Boolean(parsed.gate0Accepted),
|
|
22
|
-
gate1Accepted: Boolean(parsed.gate1Accepted),
|
|
23
|
-
gate2Accepted: Boolean(parsed.gate2Accepted),
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
catch {
|
|
27
|
-
return { gate0Accepted: false, gate1Accepted: false, gate2Accepted: false };
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
export function writeGateState(folder, state) {
|
|
31
|
-
const path = join(folder.path, GATE_FILE);
|
|
32
|
-
writeFileSync(path, JSON.stringify(state, null, 2), "utf8");
|
|
33
|
-
}
|
|
34
|
-
// ---------------------------------------------------------------------------
|
|
35
|
-
// Phase list construction
|
|
36
|
-
// ---------------------------------------------------------------------------
|
|
37
|
-
// Phase `number` is the user-visible step indicator in the TUI. We renumber
|
|
38
|
-
// the methodology's 1-8 (with Phase 3 = Fetching) into sequential 1-7 for
|
|
39
|
-
// the curator — fetching happens implicitly at compile time, so the user
|
|
40
|
-
// shouldn't see a "Phase 4 — Evaluation" come right after "Phase 2 — Candidate
|
|
41
|
-
// discovery" and wonder where Phase 3 went. The methodology numbering is
|
|
42
|
-
// still preserved in the artifact filenames (working/01-, 02-, 03-, 04-, 05-)
|
|
43
|
-
// — those follow the spec's canonical naming.
|
|
44
|
-
const PHASE_TEMPLATES = {
|
|
45
|
-
framing: {
|
|
46
|
-
id: "framing",
|
|
47
|
-
number: "1",
|
|
48
|
-
label: "Framing",
|
|
49
|
-
summary: "Define the capability brief and sketch a knowledge map.",
|
|
50
|
-
artifact: "working/01-jtbd-and-knowledge-map.md",
|
|
51
|
-
},
|
|
52
|
-
gate0: {
|
|
53
|
-
id: "gate0",
|
|
54
|
-
number: "↳",
|
|
55
|
-
label: "Confirm framing",
|
|
56
|
-
summary: "Review the knowledge map before any candidate search.",
|
|
57
|
-
artifact: null,
|
|
58
|
-
},
|
|
59
|
-
candidates: {
|
|
60
|
-
id: "candidates",
|
|
61
|
-
number: "2",
|
|
62
|
-
label: "Candidate discovery",
|
|
63
|
-
summary: "Long-list of candidate sources (URLs only — no fetching).",
|
|
64
|
-
artifact: "working/02-candidate-longlist.md",
|
|
65
|
-
},
|
|
66
|
-
gate1: {
|
|
67
|
-
id: "gate1",
|
|
68
|
-
number: "↳",
|
|
69
|
-
label: "Confirm candidates",
|
|
70
|
-
summary: "Review the long-list before any fetching.",
|
|
71
|
-
artifact: null,
|
|
72
|
-
},
|
|
73
|
-
evaluation: {
|
|
74
|
-
id: "evaluation",
|
|
75
|
-
number: "3",
|
|
76
|
-
label: "Evaluation",
|
|
77
|
-
summary: "Keep / trim / drop with curator notes.",
|
|
78
|
-
artifact: "working/03-evaluation.yaml",
|
|
79
|
-
},
|
|
80
|
-
quality: {
|
|
81
|
-
id: "quality",
|
|
82
|
-
number: "4",
|
|
83
|
-
label: "Quality checks",
|
|
84
|
-
summary: "Redundancy, coverage, disagreement, framing-gap tests.",
|
|
85
|
-
artifact: "working/04-quality-checks.md",
|
|
86
|
-
},
|
|
87
|
-
gate2: {
|
|
88
|
-
id: "gate2",
|
|
89
|
-
number: "↳",
|
|
90
|
-
label: "Confirm evaluation",
|
|
91
|
-
summary: "Review keep-list and findings before synthesis.",
|
|
92
|
-
artifact: null,
|
|
93
|
-
},
|
|
94
|
-
synthesis: {
|
|
95
|
-
id: "synthesis",
|
|
96
|
-
number: "5",
|
|
97
|
-
label: "Synthesis",
|
|
98
|
-
summary: "Curator's distilled understanding (800–2000 words).",
|
|
99
|
-
artifact: "synthesis.md",
|
|
100
|
-
},
|
|
101
|
-
assembly: {
|
|
102
|
-
id: "assembly",
|
|
103
|
-
number: "6",
|
|
104
|
-
label: "Assembly",
|
|
105
|
-
summary: "Write tape.yaml — sources with curator notes, sections, order.",
|
|
106
|
-
artifact: "tape.yaml",
|
|
107
|
-
},
|
|
108
|
-
improvement: {
|
|
109
|
-
id: "improvement",
|
|
110
|
-
number: "↻",
|
|
111
|
-
label: "Improve Corpus",
|
|
112
|
-
summary: "Stage a focused Source delta against the accepted corpus.",
|
|
113
|
-
artifact: ".liner-runs/improvement/delta.yaml",
|
|
114
|
-
},
|
|
115
|
-
compile: {
|
|
116
|
-
id: "compile",
|
|
117
|
-
number: "→",
|
|
118
|
-
label: "Compile",
|
|
119
|
-
summary: "Final mix is assembled. Compile fetches sources and writes MIXTAPE.md.",
|
|
120
|
-
artifact: null,
|
|
121
|
-
},
|
|
122
|
-
};
|
|
123
|
-
/**
|
|
124
|
-
* Compute the phase list for display. Status comes from `progress.step`;
|
|
125
|
-
* detail strings are informational and pull from the filesystem for context.
|
|
126
|
-
*/
|
|
127
|
-
export function computePhases(folder, tape, progress) {
|
|
128
|
-
return PHASE_ORDER.map((phaseId, index) => {
|
|
129
|
-
const template = PHASE_TEMPLATES[phaseId];
|
|
130
|
-
const status = statusForIndex(index, progress.step);
|
|
131
|
-
const detail = detailFor(phaseId, status, folder, tape);
|
|
132
|
-
const subSteps = subStepsFor(phaseId, status, folder, tape);
|
|
133
|
-
return subSteps
|
|
134
|
-
? { ...template, status, detail, subSteps }
|
|
135
|
-
: { ...template, status, detail };
|
|
136
|
-
});
|
|
137
|
-
}
|
|
138
|
-
/**
|
|
139
|
-
* Build the optional sub-step checklist for a phase. Returns undefined for
|
|
140
|
-
* phases that have one unit of work (most of them). Currently only Framing
|
|
141
|
-
* uses this — the wizard supplies the capability goal up front, but the
|
|
142
|
-
* capability brief and knowledge map are the agent's job, so we want both shown
|
|
143
|
-
* even though the phase isn't done yet.
|
|
144
|
-
*/
|
|
145
|
-
function subStepsFor(phaseId, status, folder, tape) {
|
|
146
|
-
if (phaseId !== "framing")
|
|
147
|
-
return undefined;
|
|
148
|
-
const jtbdSet = Boolean(tape.jtbd?.trim());
|
|
149
|
-
const clarsCount = tape.jtbd_clarifications?.length ?? 0;
|
|
150
|
-
const chars = readChars(join(folder.path, "working/01-jtbd-and-knowledge-map.md"));
|
|
151
|
-
// Knowledge map is "drafted" once the placeholder sentinel is gone AND
|
|
152
|
-
// the file has substantial content. We approximate via the
|
|
153
|
-
// artifact-has-real-content rule the progress migration uses.
|
|
154
|
-
const mapDrafted = status === "complete";
|
|
155
|
-
const steps = [];
|
|
156
|
-
steps.push({
|
|
157
|
-
done: jtbdSet,
|
|
158
|
-
text: "Goal set",
|
|
159
|
-
hint: jtbdSet ? undefined : "wizard or hand-edit working/01",
|
|
160
|
-
});
|
|
161
|
-
if (clarsCount > 0) {
|
|
162
|
-
steps.push({
|
|
163
|
-
done: true,
|
|
164
|
-
text: "Clarifications captured",
|
|
165
|
-
hint: `${clarsCount} answered`,
|
|
166
|
-
});
|
|
167
|
-
}
|
|
168
|
-
steps.push({
|
|
169
|
-
done: mapDrafted,
|
|
170
|
-
text: "Capability brief drafted",
|
|
171
|
-
hint: mapDrafted
|
|
172
|
-
? `${chars.toLocaleString()} chars`
|
|
173
|
-
: status === "in_progress"
|
|
174
|
-
? "press enter to draft"
|
|
175
|
-
: undefined,
|
|
176
|
-
});
|
|
177
|
-
return steps;
|
|
178
|
-
}
|
|
179
|
-
function statusForIndex(index, step) {
|
|
180
|
-
if (index < step)
|
|
181
|
-
return "complete";
|
|
182
|
-
if (index === step)
|
|
183
|
-
return "in_progress";
|
|
184
|
-
return "not_started";
|
|
185
|
-
}
|
|
186
|
-
function detailFor(phaseId, status, folder, tape) {
|
|
187
|
-
switch (phaseId) {
|
|
188
|
-
case "framing": {
|
|
189
|
-
const jtbdSet = Boolean(tape.jtbd?.trim());
|
|
190
|
-
const chars = readChars(join(folder.path, "working/01-jtbd-and-knowledge-map.md"));
|
|
191
|
-
if (status === "complete") {
|
|
192
|
-
return `goal set · capability brief drafted (${chars.toLocaleString()} chars)`;
|
|
193
|
-
}
|
|
194
|
-
if (status === "in_progress") {
|
|
195
|
-
return jtbdSet
|
|
196
|
-
? `goal set — press enter to draft the capability brief`
|
|
197
|
-
: `no AI-agent goal yet — press enter to set one`;
|
|
198
|
-
}
|
|
199
|
-
return "not yet";
|
|
200
|
-
}
|
|
201
|
-
case "gate0": {
|
|
202
|
-
if (status === "complete")
|
|
203
|
-
return "accepted";
|
|
204
|
-
if (status === "in_progress")
|
|
205
|
-
return tape.mode === "methodology"
|
|
206
|
-
? "press enter to review the knowledge map"
|
|
207
|
-
: "auto-accept on advance (quick mode)";
|
|
208
|
-
return "not yet";
|
|
209
|
-
}
|
|
210
|
-
case "candidates": {
|
|
211
|
-
const chars = readChars(join(folder.path, "working/02-candidate-longlist.md"));
|
|
212
|
-
if (status === "complete")
|
|
213
|
-
return `${chars.toLocaleString()} chars in long-list`;
|
|
214
|
-
if (status === "in_progress")
|
|
215
|
-
return "press enter to start researching candidate sources";
|
|
216
|
-
return "not yet";
|
|
217
|
-
}
|
|
218
|
-
case "gate1": {
|
|
219
|
-
if (status === "complete")
|
|
220
|
-
return "accepted";
|
|
221
|
-
if (status === "in_progress")
|
|
222
|
-
return tape.mode === "methodology"
|
|
223
|
-
? "press enter to review and accept"
|
|
224
|
-
: "auto-accept on advance (quick mode)";
|
|
225
|
-
return "not yet";
|
|
226
|
-
}
|
|
227
|
-
case "evaluation": {
|
|
228
|
-
const chars = readChars(join(folder.path, "working/03-evaluation.yaml"));
|
|
229
|
-
if (status === "complete")
|
|
230
|
-
return `${chars.toLocaleString()} chars · keep/trim/drop set`;
|
|
231
|
-
if (status === "in_progress")
|
|
232
|
-
return "press enter to run evaluation";
|
|
233
|
-
return "not yet";
|
|
234
|
-
}
|
|
235
|
-
case "quality": {
|
|
236
|
-
const chars = readChars(join(folder.path, "working/04-quality-checks.md"));
|
|
237
|
-
if (status === "complete")
|
|
238
|
-
return `${chars.toLocaleString()} chars in findings`;
|
|
239
|
-
if (status === "in_progress")
|
|
240
|
-
return "press enter to run the four quality tests";
|
|
241
|
-
return "not yet";
|
|
242
|
-
}
|
|
243
|
-
case "gate2": {
|
|
244
|
-
if (status === "complete")
|
|
245
|
-
return "accepted";
|
|
246
|
-
if (status === "in_progress")
|
|
247
|
-
return tape.mode === "methodology"
|
|
248
|
-
? "press enter to review and accept"
|
|
249
|
-
: "auto-accept on advance (quick mode)";
|
|
250
|
-
return "not yet";
|
|
251
|
-
}
|
|
252
|
-
case "synthesis": {
|
|
253
|
-
const chars = readChars(folder.synthesisPath);
|
|
254
|
-
if (status === "complete")
|
|
255
|
-
return `synthesis written (${chars.toLocaleString()} chars)`;
|
|
256
|
-
if (status === "in_progress")
|
|
257
|
-
return "press enter to draft the synthesis";
|
|
258
|
-
return "not yet";
|
|
259
|
-
}
|
|
260
|
-
case "assembly": {
|
|
261
|
-
const n = tape.sources.length;
|
|
262
|
-
if (status === "complete")
|
|
263
|
-
return `${n} source${n === 1 ? "" : "s"} on tape`;
|
|
264
|
-
if (status === "in_progress")
|
|
265
|
-
return "press enter — agent proposes a draft to review";
|
|
266
|
-
return "not yet";
|
|
267
|
-
}
|
|
268
|
-
case "improvement": {
|
|
269
|
-
const chars = readChars(join(folder.path, ".liner-runs/improvement/delta.yaml"));
|
|
270
|
-
if (chars > 0)
|
|
271
|
-
return `${chars.toLocaleString()} chars in staged delta`;
|
|
272
|
-
return "not staged";
|
|
273
|
-
}
|
|
274
|
-
case "compile": {
|
|
275
|
-
if (status === "complete")
|
|
276
|
-
return "MIXTAPE.md on disk";
|
|
277
|
-
if (status === "in_progress")
|
|
278
|
-
return "press enter — write MIXTAPE.md and sources/";
|
|
279
|
-
return "not yet";
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
function readChars(path) {
|
|
284
|
-
if (!existsSync(path))
|
|
285
|
-
return 0;
|
|
286
|
-
try {
|
|
287
|
-
return readFileSync(path, "utf8").trim().length;
|
|
288
|
-
}
|
|
289
|
-
catch {
|
|
290
|
-
return 0;
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
// ---------------------------------------------------------------------------
|
|
294
|
-
// Status display helpers (used by all hub UI bits)
|
|
295
|
-
// ---------------------------------------------------------------------------
|
|
296
|
-
export function statusGlyph(status) {
|
|
297
|
-
switch (status) {
|
|
298
|
-
case "complete":
|
|
299
|
-
return "✓";
|
|
300
|
-
case "in_progress":
|
|
301
|
-
return "▶";
|
|
302
|
-
case "needs_review":
|
|
303
|
-
return "⚠";
|
|
304
|
-
case "blocked":
|
|
305
|
-
return "·";
|
|
306
|
-
case "not_started":
|
|
307
|
-
return "○";
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
export function statusColor(status) {
|
|
311
|
-
switch (status) {
|
|
312
|
-
case "complete":
|
|
313
|
-
return "green";
|
|
314
|
-
case "in_progress":
|
|
315
|
-
return "cyan";
|
|
316
|
-
case "needs_review":
|
|
317
|
-
return "magenta";
|
|
318
|
-
case "blocked":
|
|
319
|
-
return undefined;
|
|
320
|
-
case "not_started":
|
|
321
|
-
return undefined;
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
|
-
export function statusLabel(status) {
|
|
325
|
-
switch (status) {
|
|
326
|
-
case "complete":
|
|
327
|
-
return "complete";
|
|
328
|
-
case "in_progress":
|
|
329
|
-
return "current";
|
|
330
|
-
case "needs_review":
|
|
331
|
-
return "needs review";
|
|
332
|
-
case "blocked":
|
|
333
|
-
return "blocked";
|
|
334
|
-
case "not_started":
|
|
335
|
-
return "not started";
|
|
336
|
-
}
|
|
337
|
-
}
|
|
338
|
-
/**
|
|
339
|
-
* True when every corpus-build phase is complete. Compile is the last Ink
|
|
340
|
-
* fallback phase, so this means MIXTAPE.md is ready; the Go TUI owns the
|
|
341
|
-
* Operating Layer and Project Complete flow.
|
|
342
|
-
*/
|
|
343
|
-
export function everythingComplete(progress) {
|
|
344
|
-
return progress.step >= TOTAL_STEPS;
|
|
345
|
-
}
|
|
346
|
-
//# sourceMappingURL=phases.js.map
|
package/dist/phases.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"phases.js","sourceRoot":"","sources":["../src/phases.ts"],"names":[],"mappings":"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"}
|