tldr-experts 0.34.0 → 0.36.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/CHANGELOG.md +357 -0
- package/README.md +2 -0
- package/dist/hooks/answer-capture.js +19 -18
- package/dist/hooks/budget-gate.js +9 -9
- package/dist/hooks/{chunk-4d22xm3c.js → chunk-6cptynke.js} +2 -2
- package/dist/hooks/{chunk-jfaarcb1.js → chunk-73h7hmfx.js} +1 -1
- package/dist/hooks/{chunk-sjykymar.js → chunk-7p9vw1s2.js} +1 -1
- package/dist/hooks/{chunk-5q89ffsn.js → chunk-btr3m70g.js} +12 -6
- package/dist/hooks/{chunk-0a3b8w1c.js → chunk-d2g7h2qb.js} +65 -14
- package/dist/hooks/{chunk-bfvcebn6.js → chunk-fbn9q035.js} +60 -4
- package/dist/hooks/{chunk-7ypyp8xk.js → chunk-gqfbnr1h.js} +12 -13
- package/dist/hooks/{chunk-vhn2vz83.js → chunk-h543njq3.js} +1 -1
- package/dist/hooks/{chunk-dw8gggv9.js → chunk-kcwv344p.js} +4 -35
- package/dist/hooks/{chunk-kcrphpwc.js → chunk-mx1g05pq.js} +1 -1
- package/dist/hooks/{chunk-57s4mdhy.js → chunk-qpy8tgtc.js} +1 -1
- package/dist/hooks/{chunk-d3jrf6yy.js → chunk-re1efynj.js} +1 -1
- package/dist/hooks/{chunk-9kzevq39.js → chunk-sqkp3405.js} +3 -3
- package/dist/hooks/{chunk-6jd4dnyg.js → chunk-y0bk666d.js} +1 -1
- package/dist/hooks/claim-sources.js +5 -5
- package/dist/hooks/dod-gate.js +7 -7
- package/dist/hooks/no-reask.js +8 -8
- package/dist/hooks/session-start.js +12 -12
- package/dist/hooks/statusline.js +8 -8
- package/dist/tldrx.js +2279 -1482
- package/package.json +1 -1
- package/plugin/.claude-plugin/plugin.json +1 -1
|
@@ -7695,6 +7695,20 @@ function parseDodBlock(text) {
|
|
|
7695
7695
|
return { present, commands };
|
|
7696
7696
|
}
|
|
7697
7697
|
|
|
7698
|
+
// src/core/detect/argvSplit.ts
|
|
7699
|
+
var TOKEN_RE = /"([^"]*)"|'([^']*)'|([^\s"']+)/g;
|
|
7700
|
+
function tokenizeArgv(command) {
|
|
7701
|
+
const tokens = [];
|
|
7702
|
+
for (const match of command.matchAll(TOKEN_RE)) {
|
|
7703
|
+
if (match[1] !== undefined || match[2] !== undefined) {
|
|
7704
|
+
tokens.push({ text: match[1] ?? match[2] ?? "", quoted: true });
|
|
7705
|
+
continue;
|
|
7706
|
+
}
|
|
7707
|
+
tokens.push({ text: match[3] ?? "", quoted: false });
|
|
7708
|
+
}
|
|
7709
|
+
return tokens;
|
|
7710
|
+
}
|
|
7711
|
+
|
|
7698
7712
|
// src/hooks/lib/story.ts
|
|
7699
7713
|
var DONE_RE = /^\s*(?:[-*]\s*)?(?:\*\*)?status(?:\*\*)?\s*:\s*["'`]?done["'`]?\.?\s*$/i;
|
|
7700
7714
|
var REPO_RE = /^\s*(?:[-*]\s*)?(?:\*\*)?repo(?:\*\*)?\s*:\s*["'`]?([A-Za-z0-9._-]{1,64})["'`]?\s*$/i;
|
|
@@ -7742,19 +7756,13 @@ function splitArgv(command) {
|
|
|
7742
7756
|
if (/[\n\r]/.test(command))
|
|
7743
7757
|
return null;
|
|
7744
7758
|
const argv = [];
|
|
7745
|
-
for (const
|
|
7746
|
-
if (
|
|
7747
|
-
argv.push(match[1] ?? match[2] ?? "");
|
|
7748
|
-
continue;
|
|
7749
|
-
}
|
|
7750
|
-
const bare = match[3] ?? "";
|
|
7751
|
-
if (META_RE.test(bare))
|
|
7759
|
+
for (const token of tokenizeArgv(command)) {
|
|
7760
|
+
if (!token.quoted && META_RE.test(token.text))
|
|
7752
7761
|
return null;
|
|
7753
|
-
argv.push(
|
|
7762
|
+
argv.push(token.text);
|
|
7754
7763
|
}
|
|
7755
7764
|
return argv.length === 0 ? null : argv;
|
|
7756
7765
|
}
|
|
7757
|
-
var TOKEN_RE = /"([^"]*)"|'([^']*)'|([^\s"']+)/g;
|
|
7758
7766
|
class DodCommandRefused extends Error {
|
|
7759
7767
|
}
|
|
7760
7768
|
async function runDodCommand(command, cwd, timeoutMs, allowed) {
|
|
@@ -8188,10 +8196,16 @@ function resolveFact(id, ctx) {
|
|
|
8188
8196
|
if (facts === null) {
|
|
8189
8197
|
return unverified(`no ${PROJECT_FRAMEWORK_DIR}/memory/facts.yml to check ${id} against`);
|
|
8190
8198
|
}
|
|
8191
|
-
|
|
8192
|
-
|
|
8199
|
+
const aliasTarget = facts.aliases.get(id);
|
|
8200
|
+
if (aliasTarget !== undefined && facts.live.has(id)) {
|
|
8201
|
+
return refused(`${id} is ambiguous in facts.yml — it is a live fact AND the was_id alias ${aliasTarget} claims ` + `(invalid: same as validateFactsFile's \`was_id ${id} collides with a live fact id\`)`);
|
|
8193
8202
|
}
|
|
8194
|
-
|
|
8203
|
+
const resolvedId = aliasTarget ?? id;
|
|
8204
|
+
if (facts.retired.has(resolvedId)) {
|
|
8205
|
+
const cite = aliasTarget !== undefined ? `${id} (now ${resolvedId})` : id;
|
|
8206
|
+
return refused(`${cite} is RETIRED in facts.yml — a retired fact is not evidence`);
|
|
8207
|
+
}
|
|
8208
|
+
if (!facts.live.has(resolvedId)) {
|
|
8195
8209
|
const known = facts.live.size === 0 ? "it has no live facts" : `it has ${String(facts.live.size)} live fact(s)`;
|
|
8196
8210
|
return refused(`no such fact ${id} in ${PROJECT_FRAMEWORK_DIR}/memory/facts.yml — ${known}`);
|
|
8197
8211
|
}
|
|
@@ -8531,11 +8545,12 @@ function readFacts(path) {
|
|
|
8531
8545
|
return null;
|
|
8532
8546
|
const live2 = new Set;
|
|
8533
8547
|
const retired = new Set;
|
|
8548
|
+
const aliases = new Map;
|
|
8534
8549
|
try {
|
|
8535
8550
|
const doc = parseYaml(readFileSync(path, "utf8"));
|
|
8536
8551
|
const rows = doc?.facts;
|
|
8537
8552
|
if (!Array.isArray(rows))
|
|
8538
|
-
return { live: live2, retired };
|
|
8553
|
+
return { live: live2, retired, aliases };
|
|
8539
8554
|
for (const row of rows) {
|
|
8540
8555
|
const id = typeof row?.id === "string" ? row.id : null;
|
|
8541
8556
|
if (id === null)
|
|
@@ -8546,11 +8561,14 @@ function readFacts(path) {
|
|
|
8546
8561
|
retired.add(id);
|
|
8547
8562
|
else
|
|
8548
8563
|
live2.add(id);
|
|
8564
|
+
const wasId = typeof row.was_id === "string" ? row.was_id : null;
|
|
8565
|
+
if (wasId !== null)
|
|
8566
|
+
aliases.set(wasId, id);
|
|
8549
8567
|
}
|
|
8550
8568
|
} catch {
|
|
8551
8569
|
return null;
|
|
8552
8570
|
}
|
|
8553
|
-
return { live: live2, retired };
|
|
8571
|
+
return { live: live2, retired, aliases };
|
|
8554
8572
|
}
|
|
8555
8573
|
function loadQuestionIds(runDir) {
|
|
8556
8574
|
const cached = questionsCache.get(runDir);
|
|
@@ -8709,6 +8727,39 @@ function refreshSrcIndexes() {
|
|
|
8709
8727
|
// src/core/detect/probeCommands.ts
|
|
8710
8728
|
var PROBE_STATUSES = ["ok", "failed", "timed-out", "unspawnable", "not-probed", "skipped"];
|
|
8711
8729
|
|
|
8730
|
+
// src/core/detect/walk.ts
|
|
8731
|
+
var SKIPPED_DIRS = new Set([
|
|
8732
|
+
".git",
|
|
8733
|
+
"node_modules",
|
|
8734
|
+
"dist",
|
|
8735
|
+
"build",
|
|
8736
|
+
"out",
|
|
8737
|
+
"bin",
|
|
8738
|
+
"obj",
|
|
8739
|
+
"target",
|
|
8740
|
+
".venv",
|
|
8741
|
+
"venv",
|
|
8742
|
+
"__pycache__",
|
|
8743
|
+
".next",
|
|
8744
|
+
".expo",
|
|
8745
|
+
".gradle",
|
|
8746
|
+
"vendor",
|
|
8747
|
+
"coverage",
|
|
8748
|
+
"graphify-out",
|
|
8749
|
+
".tldrx",
|
|
8750
|
+
"tldrx-work",
|
|
8751
|
+
".idea",
|
|
8752
|
+
".vscode",
|
|
8753
|
+
"Pods",
|
|
8754
|
+
"DerivedData",
|
|
8755
|
+
".terraform",
|
|
8756
|
+
".turbo",
|
|
8757
|
+
".cache",
|
|
8758
|
+
"storybook-static",
|
|
8759
|
+
"playwright-report",
|
|
8760
|
+
"test-results"
|
|
8761
|
+
]);
|
|
8762
|
+
|
|
8712
8763
|
// src/core/schemas/workspace.ts
|
|
8713
8764
|
function commandProbeIssues(probe, path) {
|
|
8714
8765
|
if (!isRecord(probe))
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
withWorkspaceLock,
|
|
4
4
|
workspaceRootOfFactsPath,
|
|
5
5
|
writeAtomic
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-gqfbnr1h.js";
|
|
7
7
|
import {
|
|
8
8
|
FACT_CONFIDENCES,
|
|
9
9
|
FACT_DECIDERS,
|
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
isLive,
|
|
16
16
|
isRetired,
|
|
17
17
|
noteDeprecations
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-7p9vw1s2.js";
|
|
19
19
|
import {
|
|
20
20
|
SRC_PATTERNS,
|
|
21
21
|
asDocument,
|
|
@@ -28,7 +28,7 @@ import {
|
|
|
28
28
|
requireString,
|
|
29
29
|
requireVersion,
|
|
30
30
|
result
|
|
31
|
-
} from "./chunk-
|
|
31
|
+
} from "./chunk-d2g7h2qb.js";
|
|
32
32
|
|
|
33
33
|
// src/core/facts/FactsStore.ts
|
|
34
34
|
import { existsSync, readFileSync } from "node:fs";
|
|
@@ -131,6 +131,29 @@ function validateFactsFile(input) {
|
|
|
131
131
|
issues.push({ path, message: "a fact may be superseded or retired, not both" });
|
|
132
132
|
}
|
|
133
133
|
});
|
|
134
|
+
const wasIdOwners = new Map;
|
|
135
|
+
for (const [id, row] of byId) {
|
|
136
|
+
const wasId = row.was_id;
|
|
137
|
+
if (wasId === undefined)
|
|
138
|
+
continue;
|
|
139
|
+
if (typeof wasId !== "string" || !ID_RE.test(wasId)) {
|
|
140
|
+
issues.push({ path: `facts.${id}.was_id`, message: `was_id must match ${readableSource(ID_RE)} or be absent` });
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
const owner = byId.get(wasId);
|
|
144
|
+
if (owner !== undefined) {
|
|
145
|
+
const ownerRetired = isRecord(owner.retired) && owner.retired.at !== null && owner.retired.at !== undefined;
|
|
146
|
+
if (!ownerRetired) {
|
|
147
|
+
issues.push({ path: `facts.${id}.was_id`, message: `was_id ${wasId} collides with a live fact id` });
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
const existingOwner = wasIdOwners.get(wasId);
|
|
151
|
+
if (existingOwner !== undefined) {
|
|
152
|
+
issues.push({ path: `facts.${id}.was_id`, message: `was_id ${wasId} is already claimed by ${existingOwner}` });
|
|
153
|
+
} else {
|
|
154
|
+
wasIdOwners.set(wasId, id);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
134
157
|
for (const [id, row] of byId) {
|
|
135
158
|
const forward = row.superseded_by;
|
|
136
159
|
if (typeof forward === "string") {
|
|
@@ -204,6 +227,11 @@ function findDuplicate(question, area, facts, threshold = DEFAULT_JACCARD_THRESH
|
|
|
204
227
|
return best;
|
|
205
228
|
}
|
|
206
229
|
|
|
230
|
+
// src/core/facts/normaliseFactText.ts
|
|
231
|
+
function normaliseFactText(text) {
|
|
232
|
+
return text.trim().replace(/\s+/g, " ").toLowerCase();
|
|
233
|
+
}
|
|
234
|
+
|
|
207
235
|
// src/core/facts/FactsStore.ts
|
|
208
236
|
var NEW_FILE_HEADER = `# .tldrx/memory/facts.yml — durable, provenanced answers (spec §2.5).
|
|
209
237
|
` + "# Append-mostly: supersede or retire, never edit. A fact without a source is not a fact.";
|
|
@@ -248,6 +276,13 @@ class FactsStore {
|
|
|
248
276
|
return formatFactId(highest + 1);
|
|
249
277
|
}
|
|
250
278
|
append(input) {
|
|
279
|
+
const target = normaliseFactText(input.fact);
|
|
280
|
+
const existing = this.rows.find((f) => isLive(f) && normaliseFactText(f.fact) === target);
|
|
281
|
+
if (existing !== undefined)
|
|
282
|
+
return { fact: existing, duplicate: true };
|
|
283
|
+
return { fact: this.appendRaw(input), duplicate: false };
|
|
284
|
+
}
|
|
285
|
+
appendRaw(input) {
|
|
251
286
|
const cut = input.fact.length > MAX_FACT_CHARS;
|
|
252
287
|
const fact = {
|
|
253
288
|
id: this.nextId(),
|
|
@@ -287,7 +322,7 @@ class FactsStore {
|
|
|
287
322
|
}
|
|
288
323
|
if (isRetired(old))
|
|
289
324
|
throw new Error(`${oldId} is retired; a retired fact is not superseded`);
|
|
290
|
-
const replacement = this.
|
|
325
|
+
const replacement = this.appendRaw({ ...input, supersedes: oldId });
|
|
291
326
|
this.rows[index] = { ...old, superseded_by: replacement.id };
|
|
292
327
|
return replacement;
|
|
293
328
|
}
|
|
@@ -303,6 +338,27 @@ class FactsStore {
|
|
|
303
338
|
this.rows[index] = retired;
|
|
304
339
|
return retired;
|
|
305
340
|
}
|
|
341
|
+
retireDuplicate(id, by) {
|
|
342
|
+
const index = this.rows.findIndex((f) => f.id === id);
|
|
343
|
+
if (index === -1)
|
|
344
|
+
throw new Error(`cannot supersede ${id}: no such fact`);
|
|
345
|
+
const old = this.rows[index];
|
|
346
|
+
if (old.superseded_by !== null) {
|
|
347
|
+
throw new Error(`${id} is already superseded by ${old.superseded_by}`);
|
|
348
|
+
}
|
|
349
|
+
if (isRetired(old))
|
|
350
|
+
throw new Error(`${id} is retired; a retired fact is not superseded`);
|
|
351
|
+
const byIndex = this.rows.findIndex((f) => f.id === by);
|
|
352
|
+
if (byIndex === -1)
|
|
353
|
+
throw new Error(`cannot supersede ${id} by ${by}: no such fact`);
|
|
354
|
+
const target = this.rows[byIndex];
|
|
355
|
+
if (target.supersedes !== null) {
|
|
356
|
+
throw new Error(`${by} already supersedes ${target.supersedes}; the reciprocal link is one-to-one`);
|
|
357
|
+
}
|
|
358
|
+
this.rows[index] = { ...old, superseded_by: by };
|
|
359
|
+
this.rows[byIndex] = { ...target, supersedes: id };
|
|
360
|
+
return this.rows[index];
|
|
361
|
+
}
|
|
306
362
|
findDuplicate(question, area, threshold) {
|
|
307
363
|
return findDuplicate(question, area, this.active, threshold);
|
|
308
364
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
PROJECT_FRAMEWORK_DIR,
|
|
3
3
|
PROJECT_WORK_DIR
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-d2g7h2qb.js";
|
|
5
5
|
|
|
6
6
|
// src/core/lock/workspaceLock.ts
|
|
7
7
|
import { existsSync as existsSync2, mkdirSync as mkdirSync2, openSync, readFileSync as readFileSync2, rmSync as rmSync2, writeSync, closeSync } from "node:fs";
|
|
@@ -145,16 +145,11 @@ function emitFact(fact, indent = " ") {
|
|
|
145
145
|
const inner = `${indent} `;
|
|
146
146
|
const decidedBy = fact.source.decided_by === undefined ? "" : `, decided_by: ${yamlScalar(fact.source.decided_by)}`;
|
|
147
147
|
const lines = [
|
|
148
|
-
`${indent}- id: ${yamlScalar(fact.id)}
|
|
149
|
-
`${inner}fact: ${yamlScalar(fact.fact)}`,
|
|
150
|
-
`${inner}area: ${yamlScalar(fact.area)}`,
|
|
151
|
-
`${inner}repos: ${inlineList(fact.repos)}`,
|
|
152
|
-
`${inner}kind: ${yamlScalar(fact.kind)}`,
|
|
153
|
-
`${inner}confidence: ${yamlScalar(fact.confidence)}`,
|
|
154
|
-
`${inner}source: {who: ${yamlScalar(fact.source.who)}, when: ${yamlScalar(fact.source.when)}, ` + `run: ${yamlScalar(fact.source.run)}, q: ${yamlScalar(fact.source.q)}${decidedBy}}`,
|
|
155
|
-
`${inner}supersedes: ${yamlScalar(fact.supersedes)}`,
|
|
156
|
-
`${inner}superseded_by: ${yamlScalar(fact.superseded_by)}`
|
|
148
|
+
`${indent}- id: ${yamlScalar(fact.id)}`
|
|
157
149
|
];
|
|
150
|
+
if (fact.was_id !== undefined)
|
|
151
|
+
lines.push(`${inner}was_id: ${yamlScalar(fact.was_id)}`);
|
|
152
|
+
lines.push(`${inner}fact: ${yamlScalar(fact.fact)}`, `${inner}area: ${yamlScalar(fact.area)}`, `${inner}repos: ${inlineList(fact.repos)}`, `${inner}kind: ${yamlScalar(fact.kind)}`, `${inner}confidence: ${yamlScalar(fact.confidence)}`, `${inner}source: {who: ${yamlScalar(fact.source.who)}, when: ${yamlScalar(fact.source.when)}, ` + `run: ${yamlScalar(fact.source.run)}, q: ${yamlScalar(fact.source.q)}${decidedBy}}`, `${inner}supersedes: ${yamlScalar(fact.supersedes)}`, `${inner}superseded_by: ${yamlScalar(fact.superseded_by)}`);
|
|
158
153
|
if (fact.truncated === true)
|
|
159
154
|
lines.push(`${inner}truncated: true`);
|
|
160
155
|
if (fact.conflicts_with !== undefined && fact.conflicts_with.length > 0) {
|
|
@@ -179,9 +174,13 @@ function emitFactsYaml(file, header) {
|
|
|
179
174
|
if (header !== undefined && header !== "")
|
|
180
175
|
out.push(header.replace(/\n$/, ""));
|
|
181
176
|
out.push(`version: ${file.version}`);
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
177
|
+
if (file.facts.length === 0) {
|
|
178
|
+
out.push("facts: []");
|
|
179
|
+
} else {
|
|
180
|
+
out.push("facts:");
|
|
181
|
+
for (const fact of file.facts)
|
|
182
|
+
out.push(emitFact(fact));
|
|
183
|
+
}
|
|
185
184
|
return `${out.join(`
|
|
186
185
|
`)}
|
|
187
186
|
`;
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
EMPTY_SECTION_RULE,
|
|
4
4
|
noneBullet,
|
|
5
5
|
srcRule
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-d2g7h2qb.js";
|
|
7
7
|
|
|
8
8
|
// src/hooks/lib/messages.ts
|
|
9
9
|
var GRAMMAR = "[src: <repo:path:line> | https://… | Q<n> | F<n> | $ <cmd> → exit <n> | graph:<node> | absent:<path>]";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
STAGE_TUNING_DEFAULTS
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-mx1g05pq.js";
|
|
4
4
|
import {
|
|
5
5
|
MAX_PLAN_STORIES,
|
|
6
6
|
MAX_STORIES_PER_WAVE,
|
|
@@ -26,7 +26,7 @@ import {
|
|
|
26
26
|
requireVersion,
|
|
27
27
|
requireVersion1,
|
|
28
28
|
result
|
|
29
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-d2g7h2qb.js";
|
|
30
30
|
|
|
31
31
|
// src/core/budget/spentFigure.ts
|
|
32
32
|
var SPENT_BASES = ["lower-bound", "complete"];
|
|
@@ -308,39 +308,6 @@ function asWavesFile(input) {
|
|
|
308
308
|
return { version: doc.version ?? 1, waves: doc.waves ?? [] };
|
|
309
309
|
}
|
|
310
310
|
|
|
311
|
-
// src/core/detect/walk.ts
|
|
312
|
-
var SKIPPED_DIRS = new Set([
|
|
313
|
-
".git",
|
|
314
|
-
"node_modules",
|
|
315
|
-
"dist",
|
|
316
|
-
"build",
|
|
317
|
-
"out",
|
|
318
|
-
"bin",
|
|
319
|
-
"obj",
|
|
320
|
-
"target",
|
|
321
|
-
".venv",
|
|
322
|
-
"venv",
|
|
323
|
-
"__pycache__",
|
|
324
|
-
".next",
|
|
325
|
-
".expo",
|
|
326
|
-
".gradle",
|
|
327
|
-
"vendor",
|
|
328
|
-
"coverage",
|
|
329
|
-
"graphify-out",
|
|
330
|
-
".tldrx",
|
|
331
|
-
"tldrx-work",
|
|
332
|
-
".idea",
|
|
333
|
-
".vscode",
|
|
334
|
-
"Pods",
|
|
335
|
-
"DerivedData",
|
|
336
|
-
".terraform",
|
|
337
|
-
".turbo",
|
|
338
|
-
".cache",
|
|
339
|
-
"storybook-static",
|
|
340
|
-
"playwright-report",
|
|
341
|
-
"test-results"
|
|
342
|
-
]);
|
|
343
|
-
|
|
344
311
|
// src/core/experts/expertDocument.ts
|
|
345
312
|
import { existsSync as existsSync2, readFileSync as readFileSync2 } from "node:fs";
|
|
346
313
|
import { join as join2 } from "node:path";
|
|
@@ -713,6 +680,7 @@ function stackExpertNames(root, repos) {
|
|
|
713
680
|
|
|
714
681
|
// src/core/facilitator/prompt.ts
|
|
715
682
|
var MAX_PREVIOUS_ATTEMPT_BYTES = 32 * 1024;
|
|
683
|
+
var DEFAULT_FACTS_MAX_BYTES = 32 * 1024;
|
|
716
684
|
|
|
717
685
|
// src/core/text/srcGrammarContract.ts
|
|
718
686
|
var KINDS = {
|
|
@@ -741,6 +709,7 @@ var FINDING_KINDS = ["correctness", "security", "docs", "style"];
|
|
|
741
709
|
var CLAIMED_UNVERIFIED = "claimed-unverified";
|
|
742
710
|
var CLOSED_ON_EPIC = "yes-on-epic";
|
|
743
711
|
var CLAIMING_VERDICTS = new Set(["yes", CLAIMED_UNVERIFIED, CLOSED_ON_EPIC]);
|
|
712
|
+
var STORY_ID_SCAN_RE = new RegExp(`(?<!\\w)${STORY_ID_RE.source.slice(1, -1)}(?!\\w)`, "g");
|
|
744
713
|
|
|
745
714
|
// src/core/build/refusalKind.ts
|
|
746
715
|
var OUTCOME_ALREADY_REPORTED = "the facilitator re-runs the Definition of Done after you and records each command's exit " + "code, so the number the `echo` would print is measured and written down whether you " + "capture it or not";
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import {
|
|
2
2
|
findDuplicate
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-fbn9q035.js";
|
|
4
4
|
import {
|
|
5
5
|
evidencePath,
|
|
6
6
|
gateEvidencePath,
|
|
7
7
|
parseEvidence
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-6cptynke.js";
|
|
9
9
|
import {
|
|
10
10
|
openBlocks,
|
|
11
11
|
parseQuestions
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-7p9vw1s2.js";
|
|
13
13
|
|
|
14
14
|
// src/core/distill/distill.ts
|
|
15
15
|
var CONFLICT_THRESHOLD = 0.6;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
wouldBeContent
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-y0bk666d.js";
|
|
5
5
|
import {
|
|
6
6
|
claimSourcesDeny,
|
|
7
7
|
claimSourcesEmptySectionDeny,
|
|
8
8
|
claimSourcesMalformedDeny,
|
|
9
9
|
claimSourcesUnresolvedDeny
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-h543njq3.js";
|
|
11
11
|
import {
|
|
12
12
|
allow,
|
|
13
13
|
deny,
|
|
@@ -16,8 +16,8 @@ import {
|
|
|
16
16
|
postContext,
|
|
17
17
|
readPayload,
|
|
18
18
|
runHook
|
|
19
|
-
} from "./chunk-
|
|
20
|
-
import"./chunk-
|
|
19
|
+
} from "./chunk-re1efynj.js";
|
|
20
|
+
import"./chunk-73h7hmfx.js";
|
|
21
21
|
import {
|
|
22
22
|
isHandoff,
|
|
23
23
|
loadWorkspace,
|
|
@@ -25,7 +25,7 @@ import {
|
|
|
25
25
|
toSrcContext,
|
|
26
26
|
validateCitations,
|
|
27
27
|
validateHandoff
|
|
28
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-d2g7h2qb.js";
|
|
29
29
|
|
|
30
30
|
// src/hooks/claim-sources.ts
|
|
31
31
|
await runHook("claim-sources", async () => {
|
package/dist/hooks/dod-gate.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
wouldBeContent
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-y0bk666d.js";
|
|
5
5
|
import {
|
|
6
6
|
dodGateDeny,
|
|
7
7
|
dodGateInternalErrorDeny,
|
|
8
8
|
dodGateMissingBlockDeny,
|
|
9
9
|
dodGateRefusedCommandDeny
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-h543njq3.js";
|
|
11
11
|
import {
|
|
12
12
|
allow,
|
|
13
13
|
deny,
|
|
@@ -15,15 +15,15 @@ import {
|
|
|
15
15
|
filePathOf,
|
|
16
16
|
isWriteOrEdit,
|
|
17
17
|
readPayload
|
|
18
|
-
} from "./chunk-
|
|
19
|
-
import"./chunk-
|
|
18
|
+
} from "./chunk-re1efynj.js";
|
|
19
|
+
import"./chunk-73h7hmfx.js";
|
|
20
20
|
import {
|
|
21
21
|
loadRunView
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-qpy8tgtc.js";
|
|
23
23
|
import {
|
|
24
24
|
DEFAULT_TIMEOUT_S,
|
|
25
25
|
buildStageDefaults
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-mx1g05pq.js";
|
|
27
27
|
import {
|
|
28
28
|
DodCommandRefused,
|
|
29
29
|
loadWorkspace,
|
|
@@ -31,7 +31,7 @@ import {
|
|
|
31
31
|
readStory,
|
|
32
32
|
repoPath,
|
|
33
33
|
runDodCommand
|
|
34
|
-
} from "./chunk-
|
|
34
|
+
} from "./chunk-d2g7h2qb.js";
|
|
35
35
|
|
|
36
36
|
// src/hooks/dod-gate.ts
|
|
37
37
|
import { basename, join } from "node:path";
|
package/dist/hooks/no-reask.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
wouldBeContent
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-y0bk666d.js";
|
|
5
5
|
import {
|
|
6
6
|
noReAskDeny
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-h543njq3.js";
|
|
8
8
|
import {
|
|
9
9
|
FactsStore
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-fbn9q035.js";
|
|
11
11
|
import {
|
|
12
12
|
allow,
|
|
13
13
|
deny,
|
|
@@ -15,17 +15,17 @@ import {
|
|
|
15
15
|
isWriteOrEdit,
|
|
16
16
|
readPayload,
|
|
17
17
|
runHook
|
|
18
|
-
} from "./chunk-
|
|
19
|
-
import"./chunk-
|
|
20
|
-
import"./chunk-
|
|
18
|
+
} from "./chunk-re1efynj.js";
|
|
19
|
+
import"./chunk-73h7hmfx.js";
|
|
20
|
+
import"./chunk-gqfbnr1h.js";
|
|
21
21
|
import {
|
|
22
22
|
openBlocks,
|
|
23
23
|
parseQuestions
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-7p9vw1s2.js";
|
|
25
25
|
import {
|
|
26
26
|
factsPath,
|
|
27
27
|
locateWork
|
|
28
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-d2g7h2qb.js";
|
|
29
29
|
|
|
30
30
|
// src/hooks/no-reask.ts
|
|
31
31
|
import { existsSync, readFileSync } from "node:fs";
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
questionsCard
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import"./chunk-
|
|
4
|
+
} from "./chunk-sqkp3405.js";
|
|
5
|
+
import"./chunk-fbn9q035.js";
|
|
6
6
|
import {
|
|
7
7
|
allow,
|
|
8
8
|
readPayload,
|
|
9
9
|
runHook,
|
|
10
10
|
sessionContext
|
|
11
|
-
} from "./chunk-
|
|
12
|
-
import"./chunk-
|
|
11
|
+
} from "./chunk-re1efynj.js";
|
|
12
|
+
import"./chunk-73h7hmfx.js";
|
|
13
13
|
import {
|
|
14
14
|
RunStore,
|
|
15
15
|
closedByMachine,
|
|
@@ -20,7 +20,7 @@ import {
|
|
|
20
20
|
runSnapshot,
|
|
21
21
|
statusWithOutcome,
|
|
22
22
|
whatIsWaiting
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-btr3m70g.js";
|
|
24
24
|
import"./chunk-ae6bkfs5.js";
|
|
25
25
|
import {
|
|
26
26
|
expertsDir,
|
|
@@ -28,19 +28,19 @@ import {
|
|
|
28
28
|
pathsIntersect,
|
|
29
29
|
readExpertDomain,
|
|
30
30
|
stackExpertNames
|
|
31
|
-
} from "./chunk-
|
|
31
|
+
} from "./chunk-kcwv344p.js";
|
|
32
32
|
import {
|
|
33
33
|
isFinished
|
|
34
|
-
} from "./chunk-
|
|
34
|
+
} from "./chunk-6cptynke.js";
|
|
35
35
|
import {
|
|
36
36
|
openRunViews
|
|
37
|
-
} from "./chunk-
|
|
38
|
-
import"./chunk-
|
|
39
|
-
import"./chunk-
|
|
37
|
+
} from "./chunk-qpy8tgtc.js";
|
|
38
|
+
import"./chunk-mx1g05pq.js";
|
|
39
|
+
import"./chunk-gqfbnr1h.js";
|
|
40
40
|
import {
|
|
41
41
|
openBlocks,
|
|
42
42
|
parseQuestions
|
|
43
|
-
} from "./chunk-
|
|
43
|
+
} from "./chunk-7p9vw1s2.js";
|
|
44
44
|
import {
|
|
45
45
|
PROJECT_FRAMEWORK_DIR,
|
|
46
46
|
PROJECT_WORK_DIR,
|
|
@@ -50,7 +50,7 @@ import {
|
|
|
50
50
|
isRecord,
|
|
51
51
|
listRunDirs,
|
|
52
52
|
parseYaml
|
|
53
|
-
} from "./chunk-
|
|
53
|
+
} from "./chunk-d2g7h2qb.js";
|
|
54
54
|
|
|
55
55
|
// src/core/status/PendingItem.ts
|
|
56
56
|
function isPending(item) {
|
package/dist/hooks/statusline.js
CHANGED
|
@@ -2,18 +2,18 @@
|
|
|
2
2
|
import {
|
|
3
3
|
bar,
|
|
4
4
|
runSnapshot
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-btr3m70g.js";
|
|
6
6
|
import"./chunk-ae6bkfs5.js";
|
|
7
|
-
import"./chunk-
|
|
8
|
-
import"./chunk-
|
|
9
|
-
import"./chunk-
|
|
10
|
-
import"./chunk-
|
|
11
|
-
import"./chunk-
|
|
12
|
-
import"./chunk-
|
|
7
|
+
import"./chunk-kcwv344p.js";
|
|
8
|
+
import"./chunk-6cptynke.js";
|
|
9
|
+
import"./chunk-qpy8tgtc.js";
|
|
10
|
+
import"./chunk-mx1g05pq.js";
|
|
11
|
+
import"./chunk-gqfbnr1h.js";
|
|
12
|
+
import"./chunk-7p9vw1s2.js";
|
|
13
13
|
import {
|
|
14
14
|
findWorkspaceRoot,
|
|
15
15
|
runtime
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-d2g7h2qb.js";
|
|
17
17
|
|
|
18
18
|
// src/core/statusline/renderStatusLine.ts
|
|
19
19
|
var NO_SESSION_DATA = "[tldrx] no session data";
|