linersh 1.1.3 → 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.
Files changed (62) hide show
  1. package/README.md +12 -58
  2. package/bin/liner.js +15 -7
  3. package/package.json +10 -17
  4. package/cli-update-docs/README.md +0 -129
  5. package/cli-update-docs/SKILL.md +0 -294
  6. package/cli-update-docs/curator-notes.md +0 -85
  7. package/cli-update-docs/quality-check-tests.md +0 -435
  8. package/cli-update-docs/source-finding-tactics.md +0 -224
  9. package/cli-update-docs/source-quality-hierarchy.md +0 -209
  10. package/cli-update-docs/synthesis-guidance.md +0 -151
  11. package/dist/agents/artifact-validation.js +0 -567
  12. package/dist/agents/artifact-validation.js.map +0 -1
  13. package/dist/agents/candidate-longlist.js +0 -116
  14. package/dist/agents/candidate-longlist.js.map +0 -1
  15. package/dist/agents/detect.js +0 -169
  16. package/dist/agents/detect.js.map +0 -1
  17. package/dist/agents/evaluation-assembly.js +0 -270
  18. package/dist/agents/evaluation-assembly.js.map +0 -1
  19. package/dist/agents/events.js +0 -8
  20. package/dist/agents/events.js.map +0 -1
  21. package/dist/agents/headless-runner.js +0 -432
  22. package/dist/agents/headless-runner.js.map +0 -1
  23. package/dist/agents/jtbd-clarify.js +0 -169
  24. package/dist/agents/jtbd-clarify.js.map +0 -1
  25. package/dist/agents/models.js +0 -98
  26. package/dist/agents/models.js.map +0 -1
  27. package/dist/agents/parsers.js +0 -316
  28. package/dist/agents/parsers.js.map +0 -1
  29. package/dist/agents/prompts.js +0 -522
  30. package/dist/agents/prompts.js.map +0 -1
  31. package/dist/agents/run-log.js +0 -71
  32. package/dist/agents/run-log.js.map +0 -1
  33. package/dist/agents/runner.js +0 -906
  34. package/dist/agents/runner.js.map +0 -1
  35. package/dist/agents/types.js +0 -2
  36. package/dist/agents/types.js.map +0 -1
  37. package/dist/bin-resolver.js +0 -92
  38. package/dist/bin-resolver.js.map +0 -1
  39. package/dist/config.js +0 -282
  40. package/dist/config.js.map +0 -1
  41. package/dist/editor.js +0 -40
  42. package/dist/editor.js.map +0 -1
  43. package/dist/gates.js +0 -121
  44. package/dist/gates.js.map +0 -1
  45. package/dist/ipc.js +0 -145
  46. package/dist/ipc.js.map +0 -1
  47. package/dist/open-folder.js +0 -28
  48. package/dist/open-folder.js.map +0 -1
  49. package/dist/phases.js +0 -346
  50. package/dist/phases.js.map +0 -1
  51. package/dist/progress.js +0 -184
  52. package/dist/progress.js.map +0 -1
  53. package/dist/source-inbox.js +0 -297
  54. package/dist/source-inbox.js.map +0 -1
  55. package/dist/types.js +0 -3
  56. package/dist/types.js.map +0 -1
  57. package/dist/version.js +0 -18
  58. package/dist/version.js.map +0 -1
  59. package/dist/yaml-io.js +0 -376
  60. package/dist/yaml-io.js.map +0 -1
  61. package/maintenance-skill/SKILL.md +0 -18
  62. package/maintenance-skill/agents/openai.yaml +0 -4
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"progress.js","sourceRoot":"","sources":["../src/progress.ts"],"names":[],"mappings":"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"}
@@ -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
@@ -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
@@ -1,3 +0,0 @@
1
- // Shared TS types that mirror the Python core's tape + event shapes.
2
- export {};
3
- //# sourceMappingURL=types.js.map
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
@@ -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"}