@they-juanreina/compost-cli 0.1.2 → 0.1.3

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 (209) hide show
  1. package/dist/commands/agreement.d.ts +3 -0
  2. package/dist/commands/agreement.d.ts.map +1 -0
  3. package/dist/commands/agreement.js +35 -0
  4. package/dist/commands/agreement.js.map +1 -0
  5. package/dist/commands/create.d.ts +1 -0
  6. package/dist/commands/create.d.ts.map +1 -1
  7. package/dist/commands/create.js +39 -1
  8. package/dist/commands/create.js.map +1 -1
  9. package/dist/commands/export.d.ts.map +1 -1
  10. package/dist/commands/export.js +47 -4
  11. package/dist/commands/export.js.map +1 -1
  12. package/dist/commands/import.d.ts +3 -0
  13. package/dist/commands/import.d.ts.map +1 -0
  14. package/dist/commands/import.js +59 -0
  15. package/dist/commands/import.js.map +1 -0
  16. package/dist/commands/init.d.ts.map +1 -1
  17. package/dist/commands/init.js +1 -0
  18. package/dist/commands/init.js.map +1 -1
  19. package/dist/commands/jobs.d.ts +3 -0
  20. package/dist/commands/jobs.d.ts.map +1 -0
  21. package/dist/commands/jobs.js +105 -0
  22. package/dist/commands/jobs.js.map +1 -0
  23. package/dist/commands/label.d.ts +3 -0
  24. package/dist/commands/label.d.ts.map +1 -0
  25. package/dist/commands/label.js +67 -0
  26. package/dist/commands/label.js.map +1 -0
  27. package/dist/commands/models.d.ts.map +1 -1
  28. package/dist/commands/models.js +2 -1
  29. package/dist/commands/models.js.map +1 -1
  30. package/dist/commands/recode.d.ts +3 -0
  31. package/dist/commands/recode.d.ts.map +1 -0
  32. package/dist/commands/recode.js +60 -0
  33. package/dist/commands/recode.js.map +1 -0
  34. package/dist/commands/reindex.d.ts.map +1 -1
  35. package/dist/commands/reindex.js +6 -4
  36. package/dist/commands/reindex.js.map +1 -1
  37. package/dist/commands/rerun.d.ts +3 -0
  38. package/dist/commands/rerun.d.ts.map +1 -0
  39. package/dist/commands/rerun.js +91 -0
  40. package/dist/commands/rerun.js.map +1 -0
  41. package/dist/commands/search.d.ts.map +1 -1
  42. package/dist/commands/search.js +2 -1
  43. package/dist/commands/search.js.map +1 -1
  44. package/dist/commands/secrets.d.ts +3 -0
  45. package/dist/commands/secrets.d.ts.map +1 -0
  46. package/dist/commands/secrets.js +143 -0
  47. package/dist/commands/secrets.js.map +1 -0
  48. package/dist/commands/setup.d.ts.map +1 -1
  49. package/dist/commands/setup.js +90 -1
  50. package/dist/commands/setup.js.map +1 -1
  51. package/dist/commands/status.d.ts.map +1 -1
  52. package/dist/commands/status.js +2 -1
  53. package/dist/commands/status.js.map +1 -1
  54. package/dist/commands/transcribe.d.ts.map +1 -1
  55. package/dist/commands/transcribe.js +13 -2
  56. package/dist/commands/transcribe.js.map +1 -1
  57. package/dist/commands/validate.d.ts.map +1 -1
  58. package/dist/commands/validate.js +29 -1
  59. package/dist/commands/validate.js.map +1 -1
  60. package/dist/engine.d.ts +23 -0
  61. package/dist/engine.d.ts.map +1 -0
  62. package/dist/engine.js +32 -0
  63. package/dist/engine.js.map +1 -0
  64. package/dist/exporters/prov.d.ts +11 -0
  65. package/dist/exporters/prov.d.ts.map +1 -0
  66. package/dist/exporters/prov.js +151 -0
  67. package/dist/exporters/prov.js.map +1 -0
  68. package/dist/index.d.ts.map +1 -1
  69. package/dist/index.js +6 -0
  70. package/dist/index.js.map +1 -1
  71. package/dist/lib/agreement.d.ts +77 -0
  72. package/dist/lib/agreement.d.ts.map +1 -0
  73. package/dist/lib/agreement.js +261 -0
  74. package/dist/lib/agreement.js.map +1 -0
  75. package/dist/lib/artifacts.d.ts +32 -1
  76. package/dist/lib/artifacts.d.ts.map +1 -1
  77. package/dist/lib/artifacts.js +156 -22
  78. package/dist/lib/artifacts.js.map +1 -1
  79. package/dist/lib/config.d.ts +3 -0
  80. package/dist/lib/config.d.ts.map +1 -1
  81. package/dist/lib/config.js.map +1 -1
  82. package/dist/lib/doctor.d.ts +3 -0
  83. package/dist/lib/doctor.d.ts.map +1 -1
  84. package/dist/lib/doctor.js +24 -1
  85. package/dist/lib/doctor.js.map +1 -1
  86. package/dist/lib/events.d.ts +34 -1
  87. package/dist/lib/events.d.ts.map +1 -1
  88. package/dist/lib/events.js +35 -1
  89. package/dist/lib/events.js.map +1 -1
  90. package/dist/lib/importTranscript.d.ts +16 -0
  91. package/dist/lib/importTranscript.d.ts.map +1 -0
  92. package/dist/lib/importTranscript.js +94 -0
  93. package/dist/lib/importTranscript.js.map +1 -0
  94. package/dist/lib/ingest.d.ts.map +1 -1
  95. package/dist/lib/ingest.js +12 -6
  96. package/dist/lib/ingest.js.map +1 -1
  97. package/dist/lib/journal.d.ts +13 -0
  98. package/dist/lib/journal.d.ts.map +1 -1
  99. package/dist/lib/journal.js +49 -2
  100. package/dist/lib/journal.js.map +1 -1
  101. package/dist/lib/legacyNative.d.ts +24 -0
  102. package/dist/lib/legacyNative.d.ts.map +1 -0
  103. package/dist/lib/legacyNative.js +51 -0
  104. package/dist/lib/legacyNative.js.map +1 -0
  105. package/dist/lib/provisionNative.js +1 -1
  106. package/dist/lib/provisionNative.js.map +1 -1
  107. package/dist/lib/queue.d.ts +25 -0
  108. package/dist/lib/queue.d.ts.map +1 -1
  109. package/dist/lib/queue.js +70 -3
  110. package/dist/lib/queue.js.map +1 -1
  111. package/dist/lib/reads.d.ts +24 -0
  112. package/dist/lib/reads.d.ts.map +1 -0
  113. package/dist/lib/reads.js +115 -0
  114. package/dist/lib/reads.js.map +1 -0
  115. package/dist/lib/recode.d.ts +19 -0
  116. package/dist/lib/recode.d.ts.map +1 -0
  117. package/dist/lib/recode.js +43 -0
  118. package/dist/lib/recode.js.map +1 -0
  119. package/dist/lib/rerun.d.ts +51 -0
  120. package/dist/lib/rerun.d.ts.map +1 -0
  121. package/dist/lib/rerun.js +166 -0
  122. package/dist/lib/rerun.js.map +1 -0
  123. package/dist/lib/retrieve.d.ts +8 -4
  124. package/dist/lib/retrieve.d.ts.map +1 -1
  125. package/dist/lib/retrieve.js +12 -2
  126. package/dist/lib/retrieve.js.map +1 -1
  127. package/dist/lib/schemas.generated.d.ts.map +1 -1
  128. package/dist/lib/schemas.generated.js +28 -0
  129. package/dist/lib/schemas.generated.js.map +1 -1
  130. package/dist/lib/secrets.d.ts +158 -0
  131. package/dist/lib/secrets.d.ts.map +1 -0
  132. package/dist/lib/secrets.js +507 -0
  133. package/dist/lib/secrets.js.map +1 -0
  134. package/dist/lib/seed.d.ts +5 -0
  135. package/dist/lib/seed.d.ts.map +1 -1
  136. package/dist/lib/seed.js +15 -2
  137. package/dist/lib/seed.js.map +1 -1
  138. package/dist/lib/session.d.ts +14 -0
  139. package/dist/lib/session.d.ts.map +1 -1
  140. package/dist/lib/session.js +47 -0
  141. package/dist/lib/session.js.map +1 -1
  142. package/dist/lib/setup.d.ts +5 -0
  143. package/dist/lib/setup.d.ts.map +1 -1
  144. package/dist/lib/setup.js +69 -6
  145. package/dist/lib/setup.js.map +1 -1
  146. package/dist/lib/setupWizard.d.ts +51 -0
  147. package/dist/lib/setupWizard.d.ts.map +1 -0
  148. package/dist/lib/setupWizard.js +223 -0
  149. package/dist/lib/setupWizard.js.map +1 -0
  150. package/dist/lib/speakers.d.ts +41 -0
  151. package/dist/lib/speakers.d.ts.map +1 -0
  152. package/dist/lib/speakers.js +78 -0
  153. package/dist/lib/speakers.js.map +1 -0
  154. package/dist/lib/status.d.ts.map +1 -1
  155. package/dist/lib/status.js +21 -0
  156. package/dist/lib/status.js.map +1 -1
  157. package/dist/lib/userConfig.d.ts +22 -0
  158. package/dist/lib/userConfig.d.ts.map +1 -0
  159. package/dist/lib/userConfig.js +67 -0
  160. package/dist/lib/userConfig.js.map +1 -0
  161. package/dist/lib/validate.d.ts +18 -0
  162. package/dist/lib/validate.d.ts.map +1 -1
  163. package/dist/lib/validate.js +70 -1
  164. package/dist/lib/validate.js.map +1 -1
  165. package/dist/lib/version.d.ts +30 -0
  166. package/dist/lib/version.d.ts.map +1 -0
  167. package/dist/lib/version.js +73 -0
  168. package/dist/lib/version.js.map +1 -0
  169. package/dist/llm/adapter.d.ts.map +1 -1
  170. package/dist/llm/adapter.js +2 -0
  171. package/dist/llm/adapter.js.map +1 -1
  172. package/dist/llm/providers/ollama.d.ts.map +1 -1
  173. package/dist/llm/providers/ollama.js +6 -0
  174. package/dist/llm/providers/ollama.js.map +1 -1
  175. package/dist/loops/ingest_watcher.d.ts.map +1 -1
  176. package/dist/loops/ingest_watcher.js +6 -3
  177. package/dist/loops/ingest_watcher.js.map +1 -1
  178. package/dist/loops/legacy_worker.d.ts +28 -1
  179. package/dist/loops/legacy_worker.d.ts.map +1 -1
  180. package/dist/loops/legacy_worker.js +81 -9
  181. package/dist/loops/legacy_worker.js.map +1 -1
  182. package/dist/loops/supervisor.d.ts +3 -0
  183. package/dist/loops/supervisor.d.ts.map +1 -1
  184. package/dist/loops/supervisor.js +11 -0
  185. package/dist/loops/supervisor.js.map +1 -1
  186. package/dist/loops/synthesis.d.ts.map +1 -1
  187. package/dist/loops/synthesis.js +15 -0
  188. package/dist/loops/synthesis.js.map +1 -1
  189. package/dist/loops/transcribe_worker.d.ts.map +1 -1
  190. package/dist/loops/transcribe_worker.js +2 -3
  191. package/dist/loops/transcribe_worker.js.map +1 -1
  192. package/dist/output.d.ts +13 -1
  193. package/dist/output.d.ts.map +1 -1
  194. package/dist/output.js +22 -2
  195. package/dist/output.js.map +1 -1
  196. package/dist/render/human.d.ts +20 -0
  197. package/dist/render/human.d.ts.map +1 -0
  198. package/dist/render/human.js +54 -0
  199. package/dist/render/human.js.map +1 -0
  200. package/dist/router.d.ts.map +1 -1
  201. package/dist/router.js +17 -2
  202. package/dist/router.js.map +1 -1
  203. package/package.json +12 -5
  204. package/templates/config.toml +6 -1
  205. package/transcriber/app/diarization.py +36 -6
  206. package/transcriber/app/legacy_cli.py +90 -0
  207. package/transcriber/app/pipeline.py +13 -7
  208. package/transcriber/app/prosody.py +5 -0
  209. package/transcriber/app/vad.py +82 -11
@@ -0,0 +1,51 @@
1
+ import { spawnSync } from 'node:child_process';
2
+ import { CompostError } from '../errors.js';
3
+ /**
4
+ * Native (host) legacy-ingest path (#184): shell out to `app.legacy_cli` so
5
+ * PDF/DOCX/PPTX/CSV/XLSX/TXT ingest works without the Docker transcriber. Returns
6
+ * the same shape as the `/legacy-ingest` route, so the legacy-worker is agnostic
7
+ * to which path ran. Throws CompostError on spawn failure / non-zero exit.
8
+ */
9
+ export function legacyIngestNative(req, opts) {
10
+ const args = [
11
+ '-m',
12
+ 'app.legacy_cli',
13
+ '--seed-path',
14
+ req.seed_path,
15
+ '--source-path',
16
+ req.source_path,
17
+ ];
18
+ if (req.text_col !== undefined)
19
+ args.push('--text-col', req.text_col);
20
+ if (req.speaker_col !== undefined)
21
+ args.push('--speaker-col', req.speaker_col);
22
+ if (req.sheet !== undefined)
23
+ args.push('--sheet', req.sheet);
24
+ const spawn = opts.spawnImpl ?? spawnSync;
25
+ const res = spawn(opts.python, args, {
26
+ cwd: opts.transcriberDir,
27
+ env: { ...process.env },
28
+ encoding: 'utf8',
29
+ maxBuffer: 64 * 1024 * 1024,
30
+ });
31
+ if (res.error) {
32
+ throw new CompostError('PROVIDER_ERROR', `native legacy-ingest failed to start (${opts.python}): ${res.error.message}. ` +
33
+ 'Run `compost setup` to provision the native venv, or start the Docker fallback.');
34
+ }
35
+ const lastLine = (res.stdout || '').trim().split('\n').filter(Boolean).pop() ?? '';
36
+ let parsed;
37
+ try {
38
+ const value = JSON.parse(lastLine);
39
+ if (typeof value !== 'object' || value === null)
40
+ throw new Error('not a JSON object');
41
+ parsed = value;
42
+ }
43
+ catch {
44
+ throw new CompostError('PROVIDER_ERROR', `native legacy-ingest produced no parseable result. stderr: ${(res.stderr || '').slice(-400)}`);
45
+ }
46
+ if (res.status !== 0 || parsed.status === 'failed') {
47
+ throw new CompostError('PROVIDER_ERROR', `native legacy-ingest failed (${parsed.kind ?? 'error'}): ${parsed.error ?? (res.stderr || '').slice(-400)}`);
48
+ }
49
+ return parsed;
50
+ }
51
+ //# sourceMappingURL=legacyNative.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legacyNative.js","sourceRoot":"","sources":["../../src/lib/legacyNative.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,SAAS,EAAE,MAAM,oBAAoB,CAAA;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAkB3C;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAChC,GAAwB,EACxB,IAAyB;IAEzB,MAAM,IAAI,GAAG;QACX,IAAI;QACJ,gBAAgB;QAChB,aAAa;QACb,GAAG,CAAC,SAAS;QACb,eAAe;QACf,GAAG,CAAC,WAAW;KAChB,CAAA;IACD,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS;QAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAA;IACrE,IAAI,GAAG,CAAC,WAAW,KAAK,SAAS;QAAE,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,CAAC,WAAW,CAAC,CAAA;IAC9E,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS;QAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,KAAK,CAAC,CAAA;IAE5D,MAAM,KAAK,GAAc,IAAI,CAAC,SAAS,IAAK,SAAkC,CAAA;IAC9E,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE;QACnC,GAAG,EAAE,IAAI,CAAC,cAAc;QACxB,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE;QACvB,QAAQ,EAAE,MAAM;QAChB,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;KAC5B,CAAC,CAAA;IAEF,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;QACd,MAAM,IAAI,YAAY,CACpB,gBAAgB,EAChB,yCAAyC,IAAI,CAAC,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI;YAC7E,iFAAiF,CACpF,CAAA;IACH,CAAC;IACD,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAA;IAClF,IAAI,MAAgE,CAAA;IACpE,IAAI,CAAC;QACH,MAAM,KAAK,GAAY,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;QAC3C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAA;QACrF,MAAM,GAAG,KAAiE,CAAA;IAC5E,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,YAAY,CACpB,gBAAgB,EAChB,8DAA8D,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAC/F,CAAA;IACH,CAAC;IACD,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QACnD,MAAM,IAAI,YAAY,CACpB,gBAAgB,EAChB,gCAAgC,MAAM,CAAC,IAAI,IAAI,OAAO,MAAM,MAAM,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAC7G,CAAA;IACH,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC"}
@@ -61,7 +61,7 @@ export function provisionNativeVenv(opts = {}) {
61
61
  const steps = [];
62
62
  const transcriberDir = opts.transcriberDir ?? env.COMPOST_TRANSCRIBER_DIR ?? findRepoTranscriberDir(undefined, exists);
63
63
  if (transcriberDir === undefined || !exists(join(transcriberDir, 'pyproject.toml'))) {
64
- throw new CompostError('INVALID_INPUT', 'could not locate the transcriber/ package. Pass --transcriber-dir or set COMPOST_TRANSCRIBER_DIR.');
64
+ throw new CompostError('INVALID_INPUT', 'could not locate the transcriber/ package — it ships inside the npm package since v0.1.2, so an outdated install is the usual cause. Upgrade with `npm install -g @they-juanreina/compost-cli@latest`, or pass --transcriber-dir / set COMPOST_TRANSCRIBER_DIR.');
65
65
  }
66
66
  const venvDir = managedVenvDir(env);
67
67
  const venvPython = join(venvDir, 'bin', 'python');
@@ -1 +1 @@
1
- {"version":3,"file":"provisionNative.js","sourceRoot":"","sources":["../../src/lib/provisionNative.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provisionNative.js","sourceRoot":"","sources":["../../src/lib/provisionNative.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,8 @@
1
1
  export type JobKind = 'transcribe' | 'legacy-ingest';
2
2
  export type JobStatus = 'queued' | 'running' | 'done' | 'failed';
3
+ /** Attempts before a job moves to permanent `failed` status. Shared by the
4
+ * workers and surfaced in user-facing messages (`compost jobs requeue`). */
5
+ export declare const MAX_ATTEMPTS = 3;
3
6
  export interface Job {
4
7
  id: number;
5
8
  kind: JobKind;
@@ -30,7 +33,29 @@ export declare class JobQueue {
30
33
  complete(id: number): void;
31
34
  fail(id: number, error: string, maxAttempts?: number): void;
32
35
  list(status?: JobStatus): Job[];
36
+ counts(): Record<JobStatus, number>;
37
+ /** Reset permanently-failed jobs to `queued` with a fresh attempt budget.
38
+ * The last error is kept on the row until the retry overwrites it, so
39
+ * `compost jobs` still shows why the job died. Pass an id to requeue one
40
+ * job; omit it to requeue every failed job. Returns the requeued jobs. */
41
+ requeue(id?: number): Job[];
33
42
  close(): void;
34
43
  }
35
44
  export declare function stateDbPath(seedPath: string): string;
45
+ /**
46
+ * Paths stored in the queue (and event log) are seed-relative whenever the
47
+ * file lives inside the seed, so a study folder moved or renamed in Finder
48
+ * keeps a working queue (#240). Paths outside the seed (`compost ingest
49
+ * ~/elsewhere/file.mp3`) stay absolute — they're machine-pinned either way.
50
+ */
51
+ export declare function toSeedRelative(seedPath: string, p: string): string;
52
+ /**
53
+ * Resolve a stored source path against the seed root. Relative rows (the
54
+ * current format) just join. Absolute rows are legacy (pre-#240) — when the
55
+ * recorded location no longer exists (the seed was moved), recover by
56
+ * re-rooting the `sessions/…` tail under the current seed; if nothing
57
+ * resolves, return the original so the worker fails with the real path in
58
+ * the error.
59
+ */
60
+ export declare function resolveJobSource(seedPath: string, p: string): string;
36
61
  //# sourceMappingURL=queue.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../src/lib/queue.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,OAAO,GAAG,YAAY,GAAG,eAAe,CAAA;AACpD,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAA;AAEhE,MAAM,WAAW,GAAG;IAClB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,OAAO,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAChC,MAAM,EAAE,SAAS,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CACrB;AA4CD,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,EAAE,MAAM,IAAI,CAAA;CACjB;AAED,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAmB;IACtC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAY;gBAEpB,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,YAAiB;IAQnD;+EAC2E;IAC3E,OAAO,CACL,IAAI,EAAE,OAAO,EACb,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACpC;QACD,EAAE,EAAE,MAAM,CAAA;QACV,QAAQ,EAAE,OAAO,CAAA;KAClB;IAeD;4EACwE;IACxE,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,GAAG,GAAG,IAAI;IAuBjC,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAM1B,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,SAAI,GAAG,IAAI;IAUtD,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,GAAG,GAAG,EAAE;IAS/B,KAAK,IAAI,IAAI;CAGd;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEpD"}
1
+ {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../src/lib/queue.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,OAAO,GAAG,YAAY,GAAG,eAAe,CAAA;AACpD,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAA;AAEhE;4EAC4E;AAC5E,eAAO,MAAM,YAAY,IAAI,CAAA;AAE7B,MAAM,WAAW,GAAG;IAClB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,OAAO,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAChC,MAAM,EAAE,SAAS,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CACrB;AA4CD,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,EAAE,MAAM,IAAI,CAAA;CACjB;AAED,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAmB;IACtC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAY;gBAEpB,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,YAAiB;IAQnD;+EAC2E;IAC3E,OAAO,CACL,IAAI,EAAE,OAAO,EACb,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACpC;QACD,EAAE,EAAE,MAAM,CAAA;QACV,QAAQ,EAAE,OAAO,CAAA;KAClB;IAeD;4EACwE;IACxE,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,GAAG,GAAG,IAAI;IAuBjC,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAM1B,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,SAAe,GAAG,IAAI;IAUjE,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,GAAG,GAAG,EAAE;IAS/B,MAAM,IAAI,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC;IASnC;;;8EAG0E;IAC1E,OAAO,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,GAAG,EAAE;IAkB3B,KAAK,IAAI,IAAI;CAGd;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAKlE;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAUpE"}
package/dist/lib/queue.js CHANGED
@@ -1,6 +1,9 @@
1
- import { mkdirSync } from 'node:fs';
2
- import { dirname, join } from 'node:path';
1
+ import { existsSync, mkdirSync } from 'node:fs';
2
+ import { dirname, isAbsolute, join, relative, sep } from 'node:path';
3
3
  import Database from 'better-sqlite3';
4
+ /** Attempts before a job moves to permanent `failed` status. Shared by the
5
+ * workers and surfaced in user-facing messages (`compost jobs requeue`). */
6
+ export const MAX_ATTEMPTS = 3;
4
7
  const SCHEMA = `
5
8
  CREATE TABLE IF NOT EXISTS jobs (
6
9
  id INTEGER PRIMARY KEY AUTOINCREMENT,
@@ -79,7 +82,7 @@ export class JobQueue {
79
82
  .prepare("UPDATE jobs SET status = 'done', updated_at = ?, error = NULL WHERE id = ?")
80
83
  .run(this.now().toISOString(), id);
81
84
  }
82
- fail(id, error, maxAttempts = 3) {
85
+ fail(id, error, maxAttempts = MAX_ATTEMPTS) {
83
86
  const row = this.db.prepare('SELECT attempts FROM jobs WHERE id = ?').get(id);
84
87
  const status = row !== undefined && row.attempts >= maxAttempts ? 'failed' : 'queued';
85
88
  this.db
@@ -92,6 +95,34 @@ export class JobQueue {
92
95
  : this.db.prepare('SELECT * FROM jobs WHERE status = ? ORDER BY id').all(status));
93
96
  return rows.map(rowToJob);
94
97
  }
98
+ counts() {
99
+ const rows = this.db
100
+ .prepare('SELECT status, COUNT(*) AS n FROM jobs GROUP BY status')
101
+ .all();
102
+ const out = { queued: 0, running: 0, done: 0, failed: 0 };
103
+ for (const r of rows)
104
+ out[r.status] = r.n;
105
+ return out;
106
+ }
107
+ /** Reset permanently-failed jobs to `queued` with a fresh attempt budget.
108
+ * The last error is kept on the row until the retry overwrites it, so
109
+ * `compost jobs` still shows why the job died. Pass an id to requeue one
110
+ * job; omit it to requeue every failed job. Returns the requeued jobs. */
111
+ requeue(id) {
112
+ const tx = this.db.transaction(() => {
113
+ const rows = (id === undefined
114
+ ? this.db.prepare("SELECT * FROM jobs WHERE status = 'failed' ORDER BY id").all()
115
+ : this.db.prepare("SELECT * FROM jobs WHERE status = 'failed' AND id = ?").all(id));
116
+ const ts = this.now().toISOString();
117
+ for (const row of rows) {
118
+ this.db
119
+ .prepare("UPDATE jobs SET status = 'queued', attempts = 0, updated_at = ? WHERE id = ?")
120
+ .run(ts, row.id);
121
+ }
122
+ return rows.map((row) => rowToJob({ ...row, status: 'queued', attempts: 0, updated_at: ts }));
123
+ });
124
+ return tx();
125
+ }
95
126
  close() {
96
127
  this.db.close();
97
128
  }
@@ -99,4 +130,40 @@ export class JobQueue {
99
130
  export function stateDbPath(seedPath) {
100
131
  return join(seedPath, '.compost', 'state.sqlite');
101
132
  }
133
+ /**
134
+ * Paths stored in the queue (and event log) are seed-relative whenever the
135
+ * file lives inside the seed, so a study folder moved or renamed in Finder
136
+ * keeps a working queue (#240). Paths outside the seed (`compost ingest
137
+ * ~/elsewhere/file.mp3`) stay absolute — they're machine-pinned either way.
138
+ */
139
+ export function toSeedRelative(seedPath, p) {
140
+ if (!isAbsolute(p))
141
+ return p;
142
+ const rel = relative(seedPath, p);
143
+ if (rel.startsWith(`..${sep}`) || rel === '..' || isAbsolute(rel))
144
+ return p;
145
+ return rel;
146
+ }
147
+ /**
148
+ * Resolve a stored source path against the seed root. Relative rows (the
149
+ * current format) just join. Absolute rows are legacy (pre-#240) — when the
150
+ * recorded location no longer exists (the seed was moved), recover by
151
+ * re-rooting the `sessions/…` tail under the current seed; if nothing
152
+ * resolves, return the original so the worker fails with the real path in
153
+ * the error.
154
+ */
155
+ export function resolveJobSource(seedPath, p) {
156
+ if (!isAbsolute(p))
157
+ return join(seedPath, p);
158
+ if (existsSync(p))
159
+ return p;
160
+ const marker = `${sep}sessions${sep}`;
161
+ const at = p.indexOf(marker);
162
+ if (at !== -1) {
163
+ const rerooted = join(seedPath, p.slice(at + 1));
164
+ if (existsSync(rerooted))
165
+ return rerooted;
166
+ }
167
+ return p;
168
+ }
102
169
  //# sourceMappingURL=queue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"queue.js","sourceRoot":"","sources":["../../src/lib/queue.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"queue.js","sourceRoot":"","sources":["../../src/lib/queue.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { type Snapshot } from '@they-juanreina/compost-provenance';
2
+ /** A current snapshot plus the timestamp of its latest event, so callers can
3
+ * sort by recency ("recent activity on top") without a second query. */
4
+ export interface SnapshotView extends Snapshot {
5
+ last_event_ts: string;
6
+ }
7
+ /**
8
+ * List the current snapshots of every artifact of `kind`, newest activity first.
9
+ * Reads the append-only event log and folds each artifact's events with the
10
+ * provenance reducer (no snapshot-table writes, so it's safe on a read-only DB).
11
+ * Returns [] when the seed has no event log yet. Archived (rejected) artifacts
12
+ * are excluded unless `includeArchived` is set.
13
+ */
14
+ export declare function listArtifacts(seedPath: string, kind: string, opts?: {
15
+ includeArchived?: boolean;
16
+ }): SnapshotView[];
17
+ /**
18
+ * Resolve a single artifact's current snapshot by ref — its human id
19
+ * (`H-001`, `C-slug`, `T-slug`, stored in the create payload's `id`) or a
20
+ * SHA256 artifact_id prefix. Returns null when the seed has no event log or no
21
+ * matching artifact.
22
+ */
23
+ export declare function getArtifact(seedPath: string, kind: string, ref: string): SnapshotView | null;
24
+ //# sourceMappingURL=reads.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reads.d.ts","sourceRoot":"","sources":["../../src/lib/reads.ts"],"names":[],"mappings":"AAEA,OAAO,EAAsB,KAAK,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAGtF;wEACwE;AACxE,MAAM,WAAW,YAAa,SAAQ,QAAQ;IAC5C,aAAa,EAAE,MAAM,CAAA;CACtB;AAiDD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE;IAAE,eAAe,CAAC,EAAE,OAAO,CAAA;CAAO,GACvC,YAAY,EAAE,CAkChB;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAiC5F"}
@@ -0,0 +1,115 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { reduce } from '@they-juanreina/compost-provenance';
4
+ import Database from 'better-sqlite3';
5
+ function rowToEvent(r) {
6
+ return {
7
+ id: r.id,
8
+ ts: r.ts,
9
+ artifact_kind: r.artifact_kind,
10
+ artifact_id: r.artifact_id,
11
+ action: r.action,
12
+ actor_type: r.actor_type,
13
+ actor_id: r.actor_id,
14
+ payload: JSON.parse(r.payload),
15
+ parent_event: r.parent_event,
16
+ batch_id: r.batch_id,
17
+ ...(r.agent_name !== null ? { agent_name: r.agent_name } : {}),
18
+ ...(r.agent_version !== null ? { agent_version: r.agent_version } : {}),
19
+ ...(r.prompt_hash !== null ? { prompt_hash: r.prompt_hash } : {}),
20
+ ...(r.model !== null ? { model: r.model } : {}),
21
+ ...(r.input_id !== null ? { input_id: r.input_id } : {}),
22
+ };
23
+ }
24
+ function openReadonly(seedPath) {
25
+ const dbPath = join(seedPath, '.compost', 'events.sqlite');
26
+ if (!existsSync(dbPath))
27
+ return null;
28
+ return new Database(dbPath, { readonly: true, fileMustExist: true });
29
+ }
30
+ const EVENT_COLUMNS = 'id, ts, artifact_kind, artifact_id, action, actor_type, actor_id, agent_name, agent_version, prompt_hash, model, input_id, payload, parent_event, batch_id';
31
+ /**
32
+ * List the current snapshots of every artifact of `kind`, newest activity first.
33
+ * Reads the append-only event log and folds each artifact's events with the
34
+ * provenance reducer (no snapshot-table writes, so it's safe on a read-only DB).
35
+ * Returns [] when the seed has no event log yet. Archived (rejected) artifacts
36
+ * are excluded unless `includeArchived` is set.
37
+ */
38
+ export function listArtifacts(seedPath, kind, opts = {}) {
39
+ const db = openReadonly(seedPath);
40
+ if (db === null)
41
+ return [];
42
+ try {
43
+ const rows = db
44
+ .prepare(`SELECT ${EVENT_COLUMNS} FROM events WHERE artifact_kind = ? ORDER BY ts, rowid`)
45
+ .all(kind);
46
+ const byArtifact = new Map();
47
+ for (const row of rows) {
48
+ const bucket = byArtifact.get(row.artifact_id);
49
+ if (bucket === undefined) {
50
+ byArtifact.set(row.artifact_id, { events: [rowToEvent(row)], lastTs: row.ts });
51
+ }
52
+ else {
53
+ bucket.events.push(rowToEvent(row));
54
+ bucket.lastTs = row.ts; // rows are ts-ordered, so the last seen is newest
55
+ }
56
+ }
57
+ const views = [];
58
+ for (const { events, lastTs } of byArtifact.values()) {
59
+ const snapshot = reduce(events);
60
+ if (snapshot === null)
61
+ continue;
62
+ if (snapshot.archived && opts.includeArchived !== true)
63
+ continue;
64
+ views.push({ ...snapshot, last_event_ts: lastTs });
65
+ }
66
+ // Newest activity first.
67
+ views.sort((a, b) => a.last_event_ts < b.last_event_ts ? 1 : a.last_event_ts > b.last_event_ts ? -1 : 0);
68
+ return views;
69
+ }
70
+ finally {
71
+ db.close();
72
+ }
73
+ }
74
+ /**
75
+ * Resolve a single artifact's current snapshot by ref — its human id
76
+ * (`H-001`, `C-slug`, `T-slug`, stored in the create payload's `id`) or a
77
+ * SHA256 artifact_id prefix. Returns null when the seed has no event log or no
78
+ * matching artifact.
79
+ */
80
+ export function getArtifact(seedPath, kind, ref) {
81
+ const db = openReadonly(seedPath);
82
+ if (db === null)
83
+ return null;
84
+ try {
85
+ let artifactId;
86
+ // Human id stored in the create event payload.
87
+ const byHuman = db
88
+ .prepare("SELECT artifact_id FROM events WHERE artifact_kind = ? AND action = 'create' AND json_extract(payload, '$.id') = ? ORDER BY ts, rowid LIMIT 1")
89
+ .get(kind, ref);
90
+ if (byHuman !== undefined) {
91
+ artifactId = byHuman.artifact_id;
92
+ }
93
+ else if (/^[a-f0-9]{8,64}$/i.test(ref)) {
94
+ const bySha = db
95
+ .prepare("SELECT artifact_id FROM events WHERE artifact_kind = ? AND action = 'create' AND artifact_id LIKE ? ORDER BY ts, rowid LIMIT 1")
96
+ .get(kind, `${ref.toLowerCase()}%`);
97
+ artifactId = bySha?.artifact_id;
98
+ }
99
+ if (artifactId === undefined)
100
+ return null;
101
+ const rows = db
102
+ .prepare(`SELECT ${EVENT_COLUMNS} FROM events WHERE artifact_id = ? ORDER BY ts, rowid`)
103
+ .all(artifactId);
104
+ if (rows.length === 0)
105
+ return null;
106
+ const snapshot = reduce(rows.map(rowToEvent));
107
+ if (snapshot === null)
108
+ return null;
109
+ return { ...snapshot, last_event_ts: rows[rows.length - 1]?.ts ?? '' };
110
+ }
111
+ finally {
112
+ db.close();
113
+ }
114
+ }
115
+ //# sourceMappingURL=reads.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reads.js","sourceRoot":"","sources":["../../src/lib/reads.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export interface BlindRecodeResult {
2
+ codings: number;
3
+ highlights: number;
4
+ batch_id: string;
5
+ }
6
+ /**
7
+ * Record a researcher's INDEPENDENT (blind) codings for intercoder agreement.
8
+ *
9
+ * Each (highlight, code) becomes a researcher `link` event on a `coding` artifact,
10
+ * flagged `blind: true`, so `compost agreement` can tell genuine double-coding from
11
+ * reactive endorsement. The "blind" guarantee is procedural — the researcher codes
12
+ * without seeing the machine's codes; this just records the result. Idempotent at
13
+ * the metric level (duplicate (highlight, code) pairs collapse).
14
+ */
15
+ export declare function blindRecode(seedPath: string, input: {
16
+ assignments: Record<string, string[]>;
17
+ researcherId: string;
18
+ }): BlindRecodeResult;
19
+ //# sourceMappingURL=recode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recode.d.ts","sourceRoot":"","sources":["../../src/lib/recode.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GACrE,iBAAiB,CA6BnB"}
@@ -0,0 +1,43 @@
1
+ import { CompostError } from '../errors.js';
2
+ import { artifactId, openSeedEvents } from './events.js';
3
+ /**
4
+ * Record a researcher's INDEPENDENT (blind) codings for intercoder agreement.
5
+ *
6
+ * Each (highlight, code) becomes a researcher `link` event on a `coding` artifact,
7
+ * flagged `blind: true`, so `compost agreement` can tell genuine double-coding from
8
+ * reactive endorsement. The "blind" guarantee is procedural — the researcher codes
9
+ * without seeing the machine's codes; this just records the result. Idempotent at
10
+ * the metric level (duplicate (highlight, code) pairs collapse).
11
+ */
12
+ export function blindRecode(seedPath, input) {
13
+ const events = openSeedEvents(seedPath);
14
+ const batchId = `blind-recode:${new Date().toISOString()}`;
15
+ try {
16
+ const rows = [];
17
+ for (const [highlight, codes] of Object.entries(input.assignments)) {
18
+ for (const code of new Set(codes)) {
19
+ rows.push({
20
+ artifact_kind: 'coding',
21
+ artifact_id: artifactId({ coder: 'researcher-blind', highlight, code }),
22
+ action: 'link',
23
+ actor_type: 'researcher',
24
+ actor_id: input.researcherId,
25
+ payload: { code, highlight, blind: true },
26
+ });
27
+ }
28
+ }
29
+ if (rows.length === 0) {
30
+ throw new CompostError('INVALID_INPUT', 'No codings to record (assignments were empty).');
31
+ }
32
+ events.appendBatch(rows, batchId);
33
+ return {
34
+ codings: rows.length,
35
+ highlights: Object.keys(input.assignments).length,
36
+ batch_id: batchId,
37
+ };
38
+ }
39
+ finally {
40
+ events.close();
41
+ }
42
+ }
43
+ //# sourceMappingURL=recode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recode.js","sourceRoot":"","sources":["../../src/lib/recode.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAQxD;;;;;;;;GAQG;AACH,MAAM,UAAU,WAAW,CACzB,QAAgB,EAChB,KAAsE;IAEtE,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAA;IACvC,MAAM,OAAO,GAAG,gBAAgB,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAA;IAC1D,IAAI,CAAC;QACH,MAAM,IAAI,GAAiB,EAAE,CAAA;QAC7B,KAAK,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;YACnE,KAAK,MAAM,IAAI,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClC,IAAI,CAAC,IAAI,CAAC;oBACR,aAAa,EAAE,QAAQ;oBACvB,WAAW,EAAE,UAAU,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;oBACvE,MAAM,EAAE,MAAM;oBACd,UAAU,EAAE,YAAY;oBACxB,QAAQ,EAAE,KAAK,CAAC,YAAY;oBAC5B,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE;iBAC1C,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,YAAY,CAAC,eAAe,EAAE,gDAAgD,CAAC,CAAA;QAC3F,CAAC;QACD,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QACjC,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,MAAM;YACpB,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,MAAM;YACjD,QAAQ,EAAE,OAAO;SAClB,CAAA;IACH,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,KAAK,EAAE,CAAA;IAChB,CAAC;AACH,CAAC"}
@@ -0,0 +1,51 @@
1
+ import { type AiInputRow } from '@they-juanreina/compost-provenance';
2
+ export interface RerunReport {
3
+ status: 'verified' | 'regenerated';
4
+ artifact_id: string;
5
+ artifact_kind: string;
6
+ create_event_id: string;
7
+ actor_type: string;
8
+ model: string | null;
9
+ /** Did the stored bundle hash back to the event's input_id? */
10
+ integrity_ok: boolean;
11
+ /** Regeneration (only with apply). */
12
+ regenerated_event_id?: string;
13
+ applied_model?: string;
14
+ diff?: PayloadDiff;
15
+ note?: string;
16
+ }
17
+ export interface PayloadDiff {
18
+ changed: boolean;
19
+ fields: Array<{
20
+ field: string;
21
+ before: unknown;
22
+ after: unknown;
23
+ }>;
24
+ }
25
+ /** Shallow field-level diff between two payload objects. */
26
+ export declare function diffPayload(before: unknown, after: unknown): PayloadDiff;
27
+ /** Regenerate an output from its captured inputs (model may be overridden).
28
+ * Returns the new artifact payload. Injected so the LLM/provider dependency is
29
+ * mockable; the CLI wires a default that calls the LLM adapter for `ai` bundles. */
30
+ export type Regenerator = (inputs: AiInputRow, ctx: {
31
+ actorType: string;
32
+ modelOverride?: string;
33
+ }) => Promise<Record<string, unknown>>;
34
+ export interface RerunOptions {
35
+ ref: string;
36
+ apply?: boolean;
37
+ modelOverride?: string;
38
+ regenerate?: Regenerator;
39
+ researcherId?: string;
40
+ }
41
+ /**
42
+ * Rerun an AI/agent generation from its captured inputs.
43
+ *
44
+ * Default (no apply): VERIFY — confirm the stored bundle hashes back to the
45
+ * event's input_id (the inputs are intact and reconstructable). With `apply`:
46
+ * REGENERATE via the injected generator, emit a new event chained to the original
47
+ * (parent_event), and diff the payloads. LLM regeneration is non-deterministic, so
48
+ * an `ai` diff is fuzzy; a deterministic `agent` reproduces exactly.
49
+ */
50
+ export declare function rerunEvent(seedPath: string, opts: RerunOptions): Promise<RerunReport>;
51
+ //# sourceMappingURL=rerun.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rerun.d.ts","sourceRoot":"","sources":["../../src/lib/rerun.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,UAAU,EAAwB,MAAM,oCAAoC,CAAA;AA8D1F,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,UAAU,GAAG,aAAa,CAAA;IAClC,WAAW,EAAE,MAAM,CAAA;IACnB,aAAa,EAAE,MAAM,CAAA;IACrB,eAAe,EAAE,MAAM,CAAA;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,+DAA+D;IAC/D,YAAY,EAAE,OAAO,CAAA;IACrB,sCAAsC;IACtC,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC,CAAA;CAClE;AAED,4DAA4D;AAC5D,wBAAgB,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,WAAW,CAWxE;AAED;;oFAEoF;AACpF,MAAM,MAAM,WAAW,GAAG,CACxB,MAAM,EAAE,UAAU,EAClB,GAAG,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,KAC/C,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;AAErC,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,UAAU,CAAC,EAAE,WAAW,CAAA;IACxB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED;;;;;;;;GAQG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CA0G3F"}