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/progress.js
DELETED
|
@@ -1,184 +0,0 @@
|
|
|
1
|
-
// A single source of truth for "how far has the curator walked through the
|
|
2
|
-
// methodology" — replaces the swiss-cheese per-artifact status detection
|
|
3
|
-
// that produced check-marks out of order whenever a previous run or
|
|
4
|
-
// hand-edit had touched a later artifact first.
|
|
5
|
-
//
|
|
6
|
-
// The file is dead-simple: one integer plus a timestamp.
|
|
7
|
-
//
|
|
8
|
-
// { "step": 4, "lastTouched": "2026-05-19T22:00:00.000Z" }
|
|
9
|
-
//
|
|
10
|
-
// `step` is the count of completed phases. With 10 phases in PHASE_ORDER,
|
|
11
|
-
// step ranges 0..10:
|
|
12
|
-
//
|
|
13
|
-
// 0 → nothing done; user is currently on PHASE_ORDER[0] (Framing)
|
|
14
|
-
// N → N phases done; user is currently on PHASE_ORDER[N]
|
|
15
|
-
// 10 → everything done (Compile is the last phase; compiled = complete)
|
|
16
|
-
import { existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
17
|
-
import { join } from "node:path";
|
|
18
|
-
import { projectFolder } from "./yaml-io.js";
|
|
19
|
-
const PROGRESS_FILE = ".liner-progress.json";
|
|
20
|
-
/** Walk order. Position in this array IS the step value the user is "on". */
|
|
21
|
-
export const PHASE_ORDER = [
|
|
22
|
-
"framing",
|
|
23
|
-
"gate0",
|
|
24
|
-
"candidates",
|
|
25
|
-
"gate1",
|
|
26
|
-
"evaluation",
|
|
27
|
-
"quality",
|
|
28
|
-
"gate2",
|
|
29
|
-
"synthesis",
|
|
30
|
-
"assembly",
|
|
31
|
-
"compile",
|
|
32
|
-
];
|
|
33
|
-
export const TOTAL_STEPS = PHASE_ORDER.length;
|
|
34
|
-
export function readProgress(folder) {
|
|
35
|
-
const path = join(folder, PROGRESS_FILE);
|
|
36
|
-
if (!existsSync(path)) {
|
|
37
|
-
return { step: 0, lastTouched: new Date().toISOString() };
|
|
38
|
-
}
|
|
39
|
-
try {
|
|
40
|
-
const raw = JSON.parse(readFileSync(path, "utf8"));
|
|
41
|
-
return {
|
|
42
|
-
step: typeof raw.step === "number"
|
|
43
|
-
? Math.max(0, Math.min(TOTAL_STEPS, Math.floor(raw.step)))
|
|
44
|
-
: 0,
|
|
45
|
-
lastTouched: typeof raw.lastTouched === "string"
|
|
46
|
-
? raw.lastTouched
|
|
47
|
-
: new Date().toISOString(),
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
catch {
|
|
51
|
-
return { step: 0, lastTouched: new Date().toISOString() };
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
export function writeProgress(folder, state) {
|
|
55
|
-
const path = join(folder, PROGRESS_FILE);
|
|
56
|
-
writeFileSync(path, JSON.stringify(state, null, 2) + "\n", "utf8");
|
|
57
|
-
}
|
|
58
|
-
export function progressFileExists(folder) {
|
|
59
|
-
return existsSync(join(folder, PROGRESS_FILE));
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Advance the progress cursor when a phase completes. Idempotent: calling
|
|
63
|
-
* twice for the same phase is a no-op. Calling for a phase that isn't the
|
|
64
|
-
* current one is also a no-op (we don't skip ahead silently).
|
|
65
|
-
*/
|
|
66
|
-
export function markPhaseComplete(folder, phaseId) {
|
|
67
|
-
const current = readProgress(folder);
|
|
68
|
-
const expected = PHASE_ORDER.indexOf(phaseId);
|
|
69
|
-
if (expected === -1)
|
|
70
|
-
return current;
|
|
71
|
-
if (current.step !== expected) {
|
|
72
|
-
// Out of sync — caller is asking us to advance from somewhere we aren't.
|
|
73
|
-
// Don't move the cursor. Caller should reconcile before retrying.
|
|
74
|
-
return current;
|
|
75
|
-
}
|
|
76
|
-
const next = {
|
|
77
|
-
step: Math.min(TOTAL_STEPS, current.step + 1),
|
|
78
|
-
lastTouched: new Date().toISOString(),
|
|
79
|
-
};
|
|
80
|
-
writeProgress(folder, next);
|
|
81
|
-
return next;
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* One-time inference for projects that predate progress.json. Walks
|
|
85
|
-
* PHASE_ORDER and finds the longest consecutive prefix of "done" phases,
|
|
86
|
-
* then commits that as the starting step.
|
|
87
|
-
*
|
|
88
|
-
* "Done" here uses the same artifact heuristics that drove status in the
|
|
89
|
-
* old per-phase model — so a project where the agent ran Phase 1 and Phase 2
|
|
90
|
-
* before this rewrite migrates to step = 2 cleanly. Out-of-order artifacts
|
|
91
|
-
* (Phase 7 done but Phase 2 empty) are ignored — the consecutive-prefix
|
|
92
|
-
* rule reflects what the curator has *actually walked through*, not what
|
|
93
|
-
* files happen to be on disk.
|
|
94
|
-
*/
|
|
95
|
-
export function migrateProgress(folder, tape) {
|
|
96
|
-
const project = projectFolder(folder);
|
|
97
|
-
const gateState = readGateStateInline(folder);
|
|
98
|
-
let step = 0;
|
|
99
|
-
for (const phaseId of PHASE_ORDER) {
|
|
100
|
-
if (!isPhaseComplete(phaseId, folder, project, tape, gateState))
|
|
101
|
-
break;
|
|
102
|
-
step++;
|
|
103
|
-
}
|
|
104
|
-
const state = {
|
|
105
|
-
step,
|
|
106
|
-
lastTouched: new Date().toISOString(),
|
|
107
|
-
};
|
|
108
|
-
writeProgress(folder, state);
|
|
109
|
-
return state;
|
|
110
|
-
}
|
|
111
|
-
function readGateStateInline(folder) {
|
|
112
|
-
// Cheap re-read — kept local to avoid a circular import with phases.ts.
|
|
113
|
-
const path = join(folder, ".liner-gates.json");
|
|
114
|
-
if (!existsSync(path)) {
|
|
115
|
-
return { gate0Accepted: false, gate1Accepted: false, gate2Accepted: false };
|
|
116
|
-
}
|
|
117
|
-
try {
|
|
118
|
-
const raw = JSON.parse(readFileSync(path, "utf8"));
|
|
119
|
-
return {
|
|
120
|
-
gate0Accepted: Boolean(raw.gate0Accepted),
|
|
121
|
-
gate1Accepted: Boolean(raw.gate1Accepted),
|
|
122
|
-
gate2Accepted: Boolean(raw.gate2Accepted),
|
|
123
|
-
};
|
|
124
|
-
}
|
|
125
|
-
catch {
|
|
126
|
-
return { gate0Accepted: false, gate1Accepted: false, gate2Accepted: false };
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
function isPhaseComplete(phaseId, folder, project, tape, gates) {
|
|
130
|
-
switch (phaseId) {
|
|
131
|
-
case "framing":
|
|
132
|
-
return artifactHasRealContent(join(folder, "working/01-jtbd-and-knowledge-map.md")) &&
|
|
133
|
-
Boolean(tape.jtbd?.trim());
|
|
134
|
-
case "gate0":
|
|
135
|
-
return gates.gate0Accepted;
|
|
136
|
-
case "candidates":
|
|
137
|
-
return artifactHasRealContent(join(folder, "working/02-candidate-longlist.md"));
|
|
138
|
-
case "gate1":
|
|
139
|
-
return gates.gate1Accepted;
|
|
140
|
-
case "evaluation":
|
|
141
|
-
return artifactHasRealContent(join(folder, "working/03-evaluation.yaml"));
|
|
142
|
-
case "quality":
|
|
143
|
-
return artifactHasRealContent(join(folder, "working/04-quality-checks.md"));
|
|
144
|
-
case "gate2":
|
|
145
|
-
return gates.gate2Accepted;
|
|
146
|
-
case "synthesis": {
|
|
147
|
-
if (!existsSync(project.synthesisPath))
|
|
148
|
-
return false;
|
|
149
|
-
const text = readFileSync(project.synthesisPath, "utf8");
|
|
150
|
-
return text.trim().length > 0 && !text.includes("Replace this placeholder");
|
|
151
|
-
}
|
|
152
|
-
case "assembly":
|
|
153
|
-
return tape.sources.length > 0;
|
|
154
|
-
case "improvement":
|
|
155
|
-
return artifactHasRealContent(join(folder, ".liner-runs/improvement/delta.yaml"));
|
|
156
|
-
case "compile":
|
|
157
|
-
return existsSync(project.mixtapePath);
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
const PLACEHOLDER_MARKERS = [
|
|
161
|
-
"TODO — a single specific sentence",
|
|
162
|
-
// Knowledge-map section placeholder — survives the wizard's JTBD pre-fill
|
|
163
|
-
// (which only strips the JTBD-specific TODO above) and gets removed by
|
|
164
|
-
// Phase 1 when the agent writes real sections. Without this marker, the
|
|
165
|
-
// freshly-pre-filled working/01 would falsely register as "Framing done."
|
|
166
|
-
"TODO — Phase 1 replaces this",
|
|
167
|
-
"Quantity over precision",
|
|
168
|
-
"candidates: []",
|
|
169
|
-
"Run each test deliberately",
|
|
170
|
-
];
|
|
171
|
-
function artifactHasRealContent(path) {
|
|
172
|
-
if (!existsSync(path))
|
|
173
|
-
return false;
|
|
174
|
-
const text = readFileSync(path, "utf8");
|
|
175
|
-
const trimmed = text.trim();
|
|
176
|
-
if (trimmed.length === 0)
|
|
177
|
-
return false;
|
|
178
|
-
for (const marker of PLACEHOLDER_MARKERS) {
|
|
179
|
-
if (text.includes(marker))
|
|
180
|
-
return false;
|
|
181
|
-
}
|
|
182
|
-
return true;
|
|
183
|
-
}
|
|
184
|
-
//# sourceMappingURL=progress.js.map
|
package/dist/progress.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"progress.js","sourceRoot":"","sources":["../src/progress.ts"],"names":[],"mappings":"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"}
|
package/dist/source-inbox.js
DELETED
|
@@ -1,297 +0,0 @@
|
|
|
1
|
-
import { copyFileSync, existsSync, mkdirSync, statSync, writeFileSync } from "node:fs";
|
|
2
|
-
import { basename, extname, join, resolve } from "node:path";
|
|
3
|
-
import { detectSourceType } from "./yaml-io.js";
|
|
4
|
-
const LOCAL_FILE_EXTENSIONS = new Set([".md", ".txt", ".html", ".htm", ".pdf"]);
|
|
5
|
-
const CONTENT_BLOCK_SEPARATOR = /^\s*---+\s*(?:source|article|capture)?\s*---+\s*$/gim;
|
|
6
|
-
export function importSourceInboxText(input, projectFolder) {
|
|
7
|
-
ensureLocalSourceFolders(projectFolder);
|
|
8
|
-
const blocks = splitContentBlocks(input);
|
|
9
|
-
if (blocks.length > 1) {
|
|
10
|
-
const sources = [];
|
|
11
|
-
const warnings = [];
|
|
12
|
-
for (const block of blocks) {
|
|
13
|
-
const result = importSourceInboxText(block, projectFolder);
|
|
14
|
-
sources.push(...result.sources);
|
|
15
|
-
warnings.push(...result.warnings);
|
|
16
|
-
}
|
|
17
|
-
return { sources, warnings };
|
|
18
|
-
}
|
|
19
|
-
if (looksLikePastedContent(input) && !looksLikeSourceReferenceBatch(input)) {
|
|
20
|
-
return { sources: [writePastedContentSource(input, projectFolder)], warnings: [] };
|
|
21
|
-
}
|
|
22
|
-
const tokens = parseSourceInboxTokens(input);
|
|
23
|
-
const sources = [];
|
|
24
|
-
const warnings = [];
|
|
25
|
-
const unrecognized = [];
|
|
26
|
-
for (const token of tokens) {
|
|
27
|
-
const source = sourceFromToken(token, projectFolder);
|
|
28
|
-
if (source == null) {
|
|
29
|
-
unrecognized.push(token);
|
|
30
|
-
continue;
|
|
31
|
-
}
|
|
32
|
-
sources.push(source);
|
|
33
|
-
}
|
|
34
|
-
if (looksLikePastedContent(unrecognized.join("\n"))) {
|
|
35
|
-
sources.push(writePastedContentSource(input, projectFolder));
|
|
36
|
-
}
|
|
37
|
-
else {
|
|
38
|
-
warnings.push(...unrecognized.map((token) => `Skipped: ${token}`));
|
|
39
|
-
}
|
|
40
|
-
return { sources, warnings };
|
|
41
|
-
}
|
|
42
|
-
export function ensureLocalSourceFolders(projectFolder) {
|
|
43
|
-
mkdirSync(join(projectFolder, "local-sources"), { recursive: true });
|
|
44
|
-
mkdirSync(join(projectFolder, "local-sources", "captured"), { recursive: true });
|
|
45
|
-
mkdirSync(join(projectFolder, "local-sources", "skills"), { recursive: true });
|
|
46
|
-
}
|
|
47
|
-
export function parseSourceInboxTokens(input) {
|
|
48
|
-
const normalized = input.replace(/\r/g, "\n");
|
|
49
|
-
const rough = normalized
|
|
50
|
-
.split(/[\n,]+/)
|
|
51
|
-
.map(cleanLine)
|
|
52
|
-
.filter(Boolean);
|
|
53
|
-
const out = [];
|
|
54
|
-
for (const item of rough) {
|
|
55
|
-
const urlMatches = Array.from(item.matchAll(/https?:\/\/[^\s)>\]]+/g));
|
|
56
|
-
if (urlMatches.length > 0) {
|
|
57
|
-
let cursor = 0;
|
|
58
|
-
for (const match of urlMatches) {
|
|
59
|
-
const index = match.index ?? cursor;
|
|
60
|
-
pushAtomicText(out, item.slice(cursor, index));
|
|
61
|
-
out.push(trimTrailingPunctuation(match[0]));
|
|
62
|
-
cursor = index + match[0].length;
|
|
63
|
-
}
|
|
64
|
-
pushAtomicText(out, item.slice(cursor));
|
|
65
|
-
continue;
|
|
66
|
-
}
|
|
67
|
-
const whitespaceParts = item.split(/\s+/).filter(Boolean);
|
|
68
|
-
if (whitespaceParts.length > 1 && whitespaceParts.every(looksAtomic)) {
|
|
69
|
-
out.push(...whitespaceParts);
|
|
70
|
-
}
|
|
71
|
-
else {
|
|
72
|
-
out.push(item);
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
return Array.from(new Set(out.map(trimTrailingPunctuation).filter(Boolean)));
|
|
76
|
-
}
|
|
77
|
-
function pushAtomicText(out, text) {
|
|
78
|
-
for (const part of text.split(/\s+/).filter(Boolean)) {
|
|
79
|
-
if (looksAtomic(part))
|
|
80
|
-
out.push(part);
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
function sourceFromToken(token, projectFolder) {
|
|
84
|
-
const trimmed = token.trim();
|
|
85
|
-
if (!trimmed)
|
|
86
|
-
return null;
|
|
87
|
-
if (isUrl(trimmed)) {
|
|
88
|
-
const sourceType = detectSourceType(trimmed);
|
|
89
|
-
if (sourceType === "youtube")
|
|
90
|
-
return baseSource({ type: "youtube", url: trimmed });
|
|
91
|
-
if (sourceType === "skill") {
|
|
92
|
-
return baseSource({
|
|
93
|
-
type: "skill",
|
|
94
|
-
url: trimmed,
|
|
95
|
-
path: null,
|
|
96
|
-
note: "Imported as a skill source. Treat as reference material, not active instructions.",
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
|
-
return baseSource({ type: "web", url: trimmed });
|
|
100
|
-
}
|
|
101
|
-
const expanded = expandHome(trimmed);
|
|
102
|
-
const absolute = resolve(expanded);
|
|
103
|
-
if (existsSync(absolute)) {
|
|
104
|
-
const stat = statSync(absolute);
|
|
105
|
-
if (stat.isDirectory() || basename(absolute) === "SKILL.md") {
|
|
106
|
-
return baseSource({
|
|
107
|
-
type: "skill",
|
|
108
|
-
path: absolute,
|
|
109
|
-
url: "",
|
|
110
|
-
note: "Imported as a skill source. Treat as reference material, not active instructions.",
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
if (stat.isFile()) {
|
|
114
|
-
const ext = extname(absolute).toLowerCase();
|
|
115
|
-
if (!LOCAL_FILE_EXTENSIONS.has(ext))
|
|
116
|
-
return null;
|
|
117
|
-
const relPath = copyIntoLocalSources(absolute, projectFolder);
|
|
118
|
-
return baseSource({
|
|
119
|
-
type: "local_file",
|
|
120
|
-
url: "",
|
|
121
|
-
path: relPath,
|
|
122
|
-
citation: basename(absolute),
|
|
123
|
-
note: "Imported from the source inbox.",
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
if (trimmed.startsWith("local-sources/") || trimmed.startsWith("personal/")) {
|
|
128
|
-
const ext = extname(trimmed).toLowerCase();
|
|
129
|
-
if (LOCAL_FILE_EXTENSIONS.has(ext)) {
|
|
130
|
-
return baseSource({
|
|
131
|
-
type: "local_file",
|
|
132
|
-
url: "",
|
|
133
|
-
path: trimmed,
|
|
134
|
-
citation: basename(trimmed),
|
|
135
|
-
note: "Imported from the source inbox.",
|
|
136
|
-
});
|
|
137
|
-
}
|
|
138
|
-
if (trimmed.includes("/skills/") || trimmed.endsWith("/SKILL.md")) {
|
|
139
|
-
return baseSource({
|
|
140
|
-
type: "skill",
|
|
141
|
-
path: trimmed,
|
|
142
|
-
url: "",
|
|
143
|
-
note: "Imported as a skill source. Treat as reference material, not active instructions.",
|
|
144
|
-
});
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
if (looksLikeSkillName(trimmed)) {
|
|
148
|
-
return baseSource({
|
|
149
|
-
type: "skill",
|
|
150
|
-
path: trimmed,
|
|
151
|
-
url: "",
|
|
152
|
-
note: "Imported as a skill source. Treat as reference material, not active instructions.",
|
|
153
|
-
});
|
|
154
|
-
}
|
|
155
|
-
return null;
|
|
156
|
-
}
|
|
157
|
-
function baseSource(overrides) {
|
|
158
|
-
return {
|
|
159
|
-
type: overrides.type,
|
|
160
|
-
url: overrides.url ?? "",
|
|
161
|
-
path: overrides.path ?? null,
|
|
162
|
-
citation: overrides.citation ?? null,
|
|
163
|
-
note: overrides.note ?? "Imported from the source inbox.",
|
|
164
|
-
section: null,
|
|
165
|
-
priority: "required",
|
|
166
|
-
render: null,
|
|
167
|
-
kind: null,
|
|
168
|
-
};
|
|
169
|
-
}
|
|
170
|
-
function copyIntoLocalSources(sourcePath, projectFolder) {
|
|
171
|
-
const dir = join(projectFolder, "local-sources");
|
|
172
|
-
mkdirSync(dir, { recursive: true });
|
|
173
|
-
const name = uniqueBasename(dir, basename(sourcePath));
|
|
174
|
-
const dest = join(dir, name);
|
|
175
|
-
copyFileSync(sourcePath, dest);
|
|
176
|
-
return `local-sources/${name}`;
|
|
177
|
-
}
|
|
178
|
-
function writePastedContentSource(input, projectFolder) {
|
|
179
|
-
const content = input.trim();
|
|
180
|
-
const capturedAt = new Date().toISOString();
|
|
181
|
-
const isHtml = looksLikeHtml(content);
|
|
182
|
-
const title = titleFromPastedContent(content);
|
|
183
|
-
const ext = isHtml ? ".html" : ".md";
|
|
184
|
-
const dir = join(projectFolder, "local-sources", "captured");
|
|
185
|
-
mkdirSync(dir, { recursive: true });
|
|
186
|
-
const filename = uniqueBasename(dir, `${slugify(title)}-${timestampForFilename(capturedAt)}${ext}`);
|
|
187
|
-
const dest = join(dir, filename);
|
|
188
|
-
const body = isHtml
|
|
189
|
-
? content
|
|
190
|
-
: `# ${title}\n\nCaptured: ${capturedAt}\n\n---\n\n${content}\n`;
|
|
191
|
-
writeFileSync(dest, body, "utf8");
|
|
192
|
-
return baseSource({
|
|
193
|
-
type: "local_file",
|
|
194
|
-
url: "",
|
|
195
|
-
path: `local-sources/captured/${filename}`,
|
|
196
|
-
citation: title,
|
|
197
|
-
note: "Pasted website content captured from the source inbox.",
|
|
198
|
-
});
|
|
199
|
-
}
|
|
200
|
-
function splitContentBlocks(input) {
|
|
201
|
-
CONTENT_BLOCK_SEPARATOR.lastIndex = 0;
|
|
202
|
-
if (!CONTENT_BLOCK_SEPARATOR.test(input))
|
|
203
|
-
return [input];
|
|
204
|
-
CONTENT_BLOCK_SEPARATOR.lastIndex = 0;
|
|
205
|
-
return input
|
|
206
|
-
.split(CONTENT_BLOCK_SEPARATOR)
|
|
207
|
-
.map((block) => block.trim())
|
|
208
|
-
.filter(Boolean);
|
|
209
|
-
}
|
|
210
|
-
function uniqueBasename(dir, name) {
|
|
211
|
-
const ext = extname(name);
|
|
212
|
-
const stem = name.slice(0, name.length - ext.length);
|
|
213
|
-
let candidate = name;
|
|
214
|
-
let suffix = 2;
|
|
215
|
-
while (existsSync(join(dir, candidate))) {
|
|
216
|
-
candidate = `${stem}-${suffix}${ext}`;
|
|
217
|
-
suffix += 1;
|
|
218
|
-
}
|
|
219
|
-
return candidate;
|
|
220
|
-
}
|
|
221
|
-
function cleanLine(line) {
|
|
222
|
-
return line
|
|
223
|
-
.trim()
|
|
224
|
-
.replace(/^[-*]\s+/, "")
|
|
225
|
-
.replace(/^\d+[.)]\s+/, "")
|
|
226
|
-
.replace(/^\[[ xX]\]\s+/, "")
|
|
227
|
-
.trim();
|
|
228
|
-
}
|
|
229
|
-
function looksAtomic(value) {
|
|
230
|
-
return isUrl(value) || value.includes("/") || looksLikeDelimitedSkillName(value);
|
|
231
|
-
}
|
|
232
|
-
function looksLikeDelimitedSkillName(value) {
|
|
233
|
-
return /^[A-Za-z0-9_.:@-]+$/.test(value) && /[-_:@]/.test(value) && !value.includes(".");
|
|
234
|
-
}
|
|
235
|
-
function looksLikePastedContent(value) {
|
|
236
|
-
const compact = value.trim();
|
|
237
|
-
if (!compact)
|
|
238
|
-
return false;
|
|
239
|
-
if (looksLikeHtml(compact))
|
|
240
|
-
return compact.length >= 80;
|
|
241
|
-
const words = compact.match(/\b[\p{L}\p{N}'-]+\b/gu) ?? [];
|
|
242
|
-
const lineCount = compact.split(/\n+/).filter((line) => line.trim().length > 0).length;
|
|
243
|
-
return words.length >= 25 || (compact.length >= 180 && lineCount >= 2);
|
|
244
|
-
}
|
|
245
|
-
function looksLikeSourceReferenceBatch(value) {
|
|
246
|
-
const strippedUrls = value.replace(/https?:\/\/[^\s)>\]]+/g, " ");
|
|
247
|
-
const parts = strippedUrls
|
|
248
|
-
.split(/[\n,]+/)
|
|
249
|
-
.map(cleanLine)
|
|
250
|
-
.flatMap((line) => line.split(/\s+/))
|
|
251
|
-
.filter(Boolean);
|
|
252
|
-
return parts.length === 0 || parts.every(looksAtomic);
|
|
253
|
-
}
|
|
254
|
-
function looksLikeHtml(value) {
|
|
255
|
-
return /<!doctype\s+html|<html[\s>]|<article[\s>]|<body[\s>]|<p[\s>]/i.test(value);
|
|
256
|
-
}
|
|
257
|
-
function titleFromPastedContent(value) {
|
|
258
|
-
const firstUsefulLine = value
|
|
259
|
-
.split(/\n+/)
|
|
260
|
-
.map((line) => line.replace(/<[^>]+>/g, " ").replace(/\s+/g, " ").trim())
|
|
261
|
-
.find((line) => line.length >= 4 && !isUrl(line)) ?? "Pasted website content";
|
|
262
|
-
return firstUsefulLine.length > 90 ? `${firstUsefulLine.slice(0, 87).trim()}...` : firstUsefulLine;
|
|
263
|
-
}
|
|
264
|
-
function slugify(value) {
|
|
265
|
-
const slug = value
|
|
266
|
-
.toLowerCase()
|
|
267
|
-
.replace(/[^a-z0-9]+/g, "-")
|
|
268
|
-
.replace(/^-+|-+$/g, "")
|
|
269
|
-
.slice(0, 54);
|
|
270
|
-
return slug || "pasted-website-content";
|
|
271
|
-
}
|
|
272
|
-
function timestampForFilename(value) {
|
|
273
|
-
return value.replace(/\D/g, "").slice(0, 14);
|
|
274
|
-
}
|
|
275
|
-
function looksLikeSkillName(value) {
|
|
276
|
-
return /^[A-Za-z0-9_.:@-]+$/.test(value) && !value.includes(".");
|
|
277
|
-
}
|
|
278
|
-
function isUrl(value) {
|
|
279
|
-
try {
|
|
280
|
-
const url = new URL(value);
|
|
281
|
-
return url.protocol === "http:" || url.protocol === "https:";
|
|
282
|
-
}
|
|
283
|
-
catch {
|
|
284
|
-
return false;
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
function trimTrailingPunctuation(value) {
|
|
288
|
-
return value.replace(/[).,;]+$/g, "");
|
|
289
|
-
}
|
|
290
|
-
function expandHome(value) {
|
|
291
|
-
if (value === "~")
|
|
292
|
-
return process.env["HOME"] ?? value;
|
|
293
|
-
if (value.startsWith("~/"))
|
|
294
|
-
return join(process.env["HOME"] ?? "", value.slice(2));
|
|
295
|
-
return value;
|
|
296
|
-
}
|
|
297
|
-
//# sourceMappingURL=source-inbox.js.map
|
package/dist/source-inbox.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"source-inbox.js","sourceRoot":"","sources":["../src/source-inbox.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
DELETED
package/dist/types.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,qEAAqE"}
|
package/dist/version.js
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { readFileSync } from "node:fs";
|
|
2
|
-
import { fileURLToPath } from "node:url";
|
|
3
|
-
import { dirname, join } from "node:path";
|
|
4
|
-
// Single source of truth for the npm shim version. Read from package.json at
|
|
5
|
-
// runtime so `liner --version` never drifts from the published package version.
|
|
6
|
-
// The only number to bump on release is package.json's `version`.
|
|
7
|
-
function readVersion() {
|
|
8
|
-
try {
|
|
9
|
-
const here = dirname(fileURLToPath(import.meta.url));
|
|
10
|
-
const pkg = JSON.parse(readFileSync(join(here, "..", "package.json"), "utf8"));
|
|
11
|
-
return typeof pkg.version === "string" ? pkg.version : "unknown";
|
|
12
|
-
}
|
|
13
|
-
catch {
|
|
14
|
-
return "unknown";
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
export const VERSION = readVersion();
|
|
18
|
-
//# sourceMappingURL=version.js.map
|
package/dist/version.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,6EAA6E;AAC7E,gFAAgF;AAChF,kEAAkE;AAClE,SAAS,WAAW;IAClB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACrD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAE5E,CAAC;QACF,OAAO,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IACnE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC"}
|