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.
@@ -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 match of command.matchAll(TOKEN_RE)) {
7746
- if (match[1] !== undefined || match[2] !== undefined) {
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(bare);
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
- if (facts.retired.has(id)) {
8192
- return refused(`${id} is RETIRED in facts.yml — a retired fact is not evidence`);
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
- if (!facts.live.has(id)) {
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-7ypyp8xk.js";
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-sjykymar.js";
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-0a3b8w1c.js";
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.append({ ...input, supersedes: oldId });
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-0a3b8w1c.js";
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
- out.push("facts:");
183
- for (const fact of file.facts)
184
- out.push(emitFact(fact));
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-0a3b8w1c.js";
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-kcrphpwc.js";
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-0a3b8w1c.js";
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";
@@ -6,7 +6,7 @@ import {
6
6
  isRecord,
7
7
  loadWorkspace,
8
8
  parseYaml
9
- } from "./chunk-0a3b8w1c.js";
9
+ } from "./chunk-d2g7h2qb.js";
10
10
 
11
11
  // src/core/run/workflowPreset.ts
12
12
  import { existsSync, readFileSync } from "node:fs";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  listRunDirs,
3
3
  parseYaml
4
- } from "./chunk-0a3b8w1c.js";
4
+ } from "./chunk-d2g7h2qb.js";
5
5
 
6
6
  // src/hooks/lib/runFile.ts
7
7
  import { existsSync, readFileSync } from "node:fs";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  parseHookInput,
3
3
  readStdin
4
- } from "./chunk-jfaarcb1.js";
4
+ } from "./chunk-73h7hmfx.js";
5
5
 
6
6
  // src/hooks/lib/decide.ts
7
7
  function deny(reason) {
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  findDuplicate
3
- } from "./chunk-bfvcebn6.js";
3
+ } from "./chunk-fbn9q035.js";
4
4
  import {
5
5
  evidencePath,
6
6
  gateEvidencePath,
7
7
  parseEvidence
8
- } from "./chunk-4d22xm3c.js";
8
+ } from "./chunk-6cptynke.js";
9
9
  import {
10
10
  openBlocks,
11
11
  parseQuestions
12
- } from "./chunk-sjykymar.js";
12
+ } from "./chunk-7p9vw1s2.js";
13
13
 
14
14
  // src/core/distill/distill.ts
15
15
  var CONFLICT_THRESHOLD = 0.6;
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  toolInput
3
- } from "./chunk-d3jrf6yy.js";
3
+ } from "./chunk-re1efynj.js";
4
4
 
5
5
  // src/hooks/lib/wouldBe.ts
6
6
  import { existsSync, readFileSync } from "node:fs";
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  wouldBeContent
4
- } from "./chunk-6jd4dnyg.js";
4
+ } from "./chunk-y0bk666d.js";
5
5
  import {
6
6
  claimSourcesDeny,
7
7
  claimSourcesEmptySectionDeny,
8
8
  claimSourcesMalformedDeny,
9
9
  claimSourcesUnresolvedDeny
10
- } from "./chunk-vhn2vz83.js";
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-d3jrf6yy.js";
20
- import"./chunk-jfaarcb1.js";
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-0a3b8w1c.js";
28
+ } from "./chunk-d2g7h2qb.js";
29
29
 
30
30
  // src/hooks/claim-sources.ts
31
31
  await runHook("claim-sources", async () => {
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  wouldBeContent
4
- } from "./chunk-6jd4dnyg.js";
4
+ } from "./chunk-y0bk666d.js";
5
5
  import {
6
6
  dodGateDeny,
7
7
  dodGateInternalErrorDeny,
8
8
  dodGateMissingBlockDeny,
9
9
  dodGateRefusedCommandDeny
10
- } from "./chunk-vhn2vz83.js";
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-d3jrf6yy.js";
19
- import"./chunk-jfaarcb1.js";
18
+ } from "./chunk-re1efynj.js";
19
+ import"./chunk-73h7hmfx.js";
20
20
  import {
21
21
  loadRunView
22
- } from "./chunk-57s4mdhy.js";
22
+ } from "./chunk-qpy8tgtc.js";
23
23
  import {
24
24
  DEFAULT_TIMEOUT_S,
25
25
  buildStageDefaults
26
- } from "./chunk-kcrphpwc.js";
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-0a3b8w1c.js";
34
+ } from "./chunk-d2g7h2qb.js";
35
35
 
36
36
  // src/hooks/dod-gate.ts
37
37
  import { basename, join } from "node:path";
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  wouldBeContent
4
- } from "./chunk-6jd4dnyg.js";
4
+ } from "./chunk-y0bk666d.js";
5
5
  import {
6
6
  noReAskDeny
7
- } from "./chunk-vhn2vz83.js";
7
+ } from "./chunk-h543njq3.js";
8
8
  import {
9
9
  FactsStore
10
- } from "./chunk-bfvcebn6.js";
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-d3jrf6yy.js";
19
- import"./chunk-jfaarcb1.js";
20
- import"./chunk-7ypyp8xk.js";
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-sjykymar.js";
24
+ } from "./chunk-7p9vw1s2.js";
25
25
  import {
26
26
  factsPath,
27
27
  locateWork
28
- } from "./chunk-0a3b8w1c.js";
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-9kzevq39.js";
5
- import"./chunk-bfvcebn6.js";
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-d3jrf6yy.js";
12
- import"./chunk-jfaarcb1.js";
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-5q89ffsn.js";
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-dw8gggv9.js";
31
+ } from "./chunk-kcwv344p.js";
32
32
  import {
33
33
  isFinished
34
- } from "./chunk-4d22xm3c.js";
34
+ } from "./chunk-6cptynke.js";
35
35
  import {
36
36
  openRunViews
37
- } from "./chunk-57s4mdhy.js";
38
- import"./chunk-kcrphpwc.js";
39
- import"./chunk-7ypyp8xk.js";
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-sjykymar.js";
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-0a3b8w1c.js";
53
+ } from "./chunk-d2g7h2qb.js";
54
54
 
55
55
  // src/core/status/PendingItem.ts
56
56
  function isPending(item) {
@@ -2,18 +2,18 @@
2
2
  import {
3
3
  bar,
4
4
  runSnapshot
5
- } from "./chunk-5q89ffsn.js";
5
+ } from "./chunk-btr3m70g.js";
6
6
  import"./chunk-ae6bkfs5.js";
7
- import"./chunk-dw8gggv9.js";
8
- import"./chunk-4d22xm3c.js";
9
- import"./chunk-57s4mdhy.js";
10
- import"./chunk-kcrphpwc.js";
11
- import"./chunk-7ypyp8xk.js";
12
- import"./chunk-sjykymar.js";
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-0a3b8w1c.js";
16
+ } from "./chunk-d2g7h2qb.js";
17
17
 
18
18
  // src/core/statusline/renderStatusLine.ts
19
19
  var NO_SESSION_DATA = "[tldrx] no session data";