@they-juanreina/compost-cli 0.1.2 → 0.1.4

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 (313) 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/backup.d.ts +3 -0
  6. package/dist/commands/backup.d.ts.map +1 -0
  7. package/dist/commands/backup.js +31 -0
  8. package/dist/commands/backup.js.map +1 -0
  9. package/dist/commands/chat.d.ts.map +1 -1
  10. package/dist/commands/chat.js +3 -2
  11. package/dist/commands/chat.js.map +1 -1
  12. package/dist/commands/create.d.ts +1 -0
  13. package/dist/commands/create.d.ts.map +1 -1
  14. package/dist/commands/create.js +39 -1
  15. package/dist/commands/create.js.map +1 -1
  16. package/dist/commands/export.d.ts.map +1 -1
  17. package/dist/commands/export.js +47 -4
  18. package/dist/commands/export.js.map +1 -1
  19. package/dist/commands/import.d.ts +3 -0
  20. package/dist/commands/import.d.ts.map +1 -0
  21. package/dist/commands/import.js +64 -0
  22. package/dist/commands/import.js.map +1 -0
  23. package/dist/commands/ingest.d.ts.map +1 -1
  24. package/dist/commands/ingest.js +1 -0
  25. package/dist/commands/ingest.js.map +1 -1
  26. package/dist/commands/init.d.ts.map +1 -1
  27. package/dist/commands/init.js +2 -0
  28. package/dist/commands/init.js.map +1 -1
  29. package/dist/commands/jobs.d.ts +3 -0
  30. package/dist/commands/jobs.d.ts.map +1 -0
  31. package/dist/commands/jobs.js +105 -0
  32. package/dist/commands/jobs.js.map +1 -0
  33. package/dist/commands/label.d.ts +3 -0
  34. package/dist/commands/label.d.ts.map +1 -0
  35. package/dist/commands/label.js +67 -0
  36. package/dist/commands/label.js.map +1 -0
  37. package/dist/commands/models.d.ts.map +1 -1
  38. package/dist/commands/models.js +2 -1
  39. package/dist/commands/models.js.map +1 -1
  40. package/dist/commands/recode.d.ts +3 -0
  41. package/dist/commands/recode.d.ts.map +1 -0
  42. package/dist/commands/recode.js +60 -0
  43. package/dist/commands/recode.js.map +1 -0
  44. package/dist/commands/reindex.d.ts.map +1 -1
  45. package/dist/commands/reindex.js +19 -7
  46. package/dist/commands/reindex.js.map +1 -1
  47. package/dist/commands/rerun.d.ts +3 -0
  48. package/dist/commands/rerun.d.ts.map +1 -0
  49. package/dist/commands/rerun.js +91 -0
  50. package/dist/commands/rerun.js.map +1 -0
  51. package/dist/commands/search.d.ts.map +1 -1
  52. package/dist/commands/search.js +12 -1
  53. package/dist/commands/search.js.map +1 -1
  54. package/dist/commands/secrets.d.ts +3 -0
  55. package/dist/commands/secrets.d.ts.map +1 -0
  56. package/dist/commands/secrets.js +145 -0
  57. package/dist/commands/secrets.js.map +1 -0
  58. package/dist/commands/setup.d.ts.map +1 -1
  59. package/dist/commands/setup.js +95 -2
  60. package/dist/commands/setup.js.map +1 -1
  61. package/dist/commands/setupItem.d.ts +26 -0
  62. package/dist/commands/setupItem.d.ts.map +1 -0
  63. package/dist/commands/setupItem.js +145 -0
  64. package/dist/commands/setupItem.js.map +1 -0
  65. package/dist/commands/status.d.ts.map +1 -1
  66. package/dist/commands/status.js +2 -1
  67. package/dist/commands/status.js.map +1 -1
  68. package/dist/commands/transcribe.d.ts.map +1 -1
  69. package/dist/commands/transcribe.js +32 -4
  70. package/dist/commands/transcribe.js.map +1 -1
  71. package/dist/commands/validate.d.ts.map +1 -1
  72. package/dist/commands/validate.js +29 -1
  73. package/dist/commands/validate.js.map +1 -1
  74. package/dist/commands/watch.d.ts.map +1 -1
  75. package/dist/commands/watch.js +53 -6
  76. package/dist/commands/watch.js.map +1 -1
  77. package/dist/engine.d.ts +23 -0
  78. package/dist/engine.d.ts.map +1 -0
  79. package/dist/engine.js +32 -0
  80. package/dist/engine.js.map +1 -0
  81. package/dist/errors.d.ts +5 -1
  82. package/dist/errors.d.ts.map +1 -1
  83. package/dist/errors.js +6 -0
  84. package/dist/errors.js.map +1 -1
  85. package/dist/exporters/pdf.d.ts.map +1 -1
  86. package/dist/exporters/pdf.js +2 -1
  87. package/dist/exporters/pdf.js.map +1 -1
  88. package/dist/exporters/prov.d.ts +11 -0
  89. package/dist/exporters/prov.d.ts.map +1 -0
  90. package/dist/exporters/prov.js +151 -0
  91. package/dist/exporters/prov.js.map +1 -0
  92. package/dist/index.d.ts.map +1 -1
  93. package/dist/index.js +6 -0
  94. package/dist/index.js.map +1 -1
  95. package/dist/legacy_client.d.ts.map +1 -1
  96. package/dist/legacy_client.js +2 -1
  97. package/dist/legacy_client.js.map +1 -1
  98. package/dist/lib/agreement.d.ts +77 -0
  99. package/dist/lib/agreement.d.ts.map +1 -0
  100. package/dist/lib/agreement.js +261 -0
  101. package/dist/lib/agreement.js.map +1 -0
  102. package/dist/lib/artifacts.d.ts +35 -2
  103. package/dist/lib/artifacts.d.ts.map +1 -1
  104. package/dist/lib/artifacts.js +158 -29
  105. package/dist/lib/artifacts.js.map +1 -1
  106. package/dist/lib/backup.d.ts +37 -0
  107. package/dist/lib/backup.d.ts.map +1 -0
  108. package/dist/lib/backup.js +57 -0
  109. package/dist/lib/backup.js.map +1 -0
  110. package/dist/lib/childEnv.d.ts +13 -0
  111. package/dist/lib/childEnv.d.ts.map +1 -0
  112. package/dist/lib/childEnv.js +45 -0
  113. package/dist/lib/childEnv.js.map +1 -0
  114. package/dist/lib/config.d.ts +3 -0
  115. package/dist/lib/config.d.ts.map +1 -1
  116. package/dist/lib/config.js.map +1 -1
  117. package/dist/lib/doctor.d.ts +3 -0
  118. package/dist/lib/doctor.d.ts.map +1 -1
  119. package/dist/lib/doctor.js +24 -1
  120. package/dist/lib/doctor.js.map +1 -1
  121. package/dist/lib/events.d.ts +44 -1
  122. package/dist/lib/events.d.ts.map +1 -1
  123. package/dist/lib/events.js +55 -2
  124. package/dist/lib/events.js.map +1 -1
  125. package/dist/lib/importTranscript.d.ts +16 -0
  126. package/dist/lib/importTranscript.d.ts.map +1 -0
  127. package/dist/lib/importTranscript.js +94 -0
  128. package/dist/lib/importTranscript.js.map +1 -0
  129. package/dist/lib/ingest.d.ts.map +1 -1
  130. package/dist/lib/ingest.js +12 -6
  131. package/dist/lib/ingest.js.map +1 -1
  132. package/dist/lib/journal.d.ts +13 -4
  133. package/dist/lib/journal.d.ts.map +1 -1
  134. package/dist/lib/journal.js +53 -16
  135. package/dist/lib/journal.js.map +1 -1
  136. package/dist/lib/legacyNative.d.ts +17 -0
  137. package/dist/lib/legacyNative.d.ts.map +1 -0
  138. package/dist/lib/legacyNative.js +38 -0
  139. package/dist/lib/legacyNative.js.map +1 -0
  140. package/dist/lib/migrate.d.ts.map +1 -1
  141. package/dist/lib/migrate.js +9 -2
  142. package/dist/lib/migrate.js.map +1 -1
  143. package/dist/lib/nativeRuntime.d.ts +31 -0
  144. package/dist/lib/nativeRuntime.d.ts.map +1 -1
  145. package/dist/lib/nativeRuntime.js +38 -0
  146. package/dist/lib/nativeRuntime.js.map +1 -1
  147. package/dist/lib/pathSafe.d.ts +8 -0
  148. package/dist/lib/pathSafe.d.ts.map +1 -0
  149. package/dist/lib/pathSafe.js +12 -0
  150. package/dist/lib/pathSafe.js.map +1 -0
  151. package/dist/lib/provisionNative.d.ts.map +1 -1
  152. package/dist/lib/provisionNative.js +7 -3
  153. package/dist/lib/provisionNative.js.map +1 -1
  154. package/dist/lib/queue.d.ts +25 -0
  155. package/dist/lib/queue.d.ts.map +1 -1
  156. package/dist/lib/queue.js +70 -3
  157. package/dist/lib/queue.js.map +1 -1
  158. package/dist/lib/reads.d.ts +24 -0
  159. package/dist/lib/reads.d.ts.map +1 -0
  160. package/dist/lib/reads.js +115 -0
  161. package/dist/lib/reads.js.map +1 -0
  162. package/dist/lib/recode.d.ts +19 -0
  163. package/dist/lib/recode.d.ts.map +1 -0
  164. package/dist/lib/recode.js +43 -0
  165. package/dist/lib/recode.js.map +1 -0
  166. package/dist/lib/redact.d.ts +7 -0
  167. package/dist/lib/redact.d.ts.map +1 -0
  168. package/dist/lib/redact.js +45 -0
  169. package/dist/lib/redact.js.map +1 -0
  170. package/dist/lib/rerun.d.ts +51 -0
  171. package/dist/lib/rerun.d.ts.map +1 -0
  172. package/dist/lib/rerun.js +160 -0
  173. package/dist/lib/rerun.js.map +1 -0
  174. package/dist/lib/retrieve.d.ts +8 -4
  175. package/dist/lib/retrieve.d.ts.map +1 -1
  176. package/dist/lib/retrieve.js +14 -3
  177. package/dist/lib/retrieve.js.map +1 -1
  178. package/dist/lib/saturate.js +3 -3
  179. package/dist/lib/saturate.js.map +1 -1
  180. package/dist/lib/schemas.generated.d.ts.map +1 -1
  181. package/dist/lib/schemas.generated.js +28 -0
  182. package/dist/lib/schemas.generated.js.map +1 -1
  183. package/dist/lib/secrets.d.ts +158 -0
  184. package/dist/lib/secrets.d.ts.map +1 -0
  185. package/dist/lib/secrets.js +514 -0
  186. package/dist/lib/secrets.js.map +1 -0
  187. package/dist/lib/seed.d.ts +5 -0
  188. package/dist/lib/seed.d.ts.map +1 -1
  189. package/dist/lib/seed.js +15 -2
  190. package/dist/lib/seed.js.map +1 -1
  191. package/dist/lib/seedResolve.d.ts +5 -0
  192. package/dist/lib/seedResolve.d.ts.map +1 -1
  193. package/dist/lib/seedResolve.js +12 -3
  194. package/dist/lib/seedResolve.js.map +1 -1
  195. package/dist/lib/session.d.ts +14 -0
  196. package/dist/lib/session.d.ts.map +1 -1
  197. package/dist/lib/session.js +53 -4
  198. package/dist/lib/session.js.map +1 -1
  199. package/dist/lib/sessionId.d.ts +9 -0
  200. package/dist/lib/sessionId.d.ts.map +1 -0
  201. package/dist/lib/sessionId.js +37 -0
  202. package/dist/lib/sessionId.js.map +1 -0
  203. package/dist/lib/setup.d.ts +9 -0
  204. package/dist/lib/setup.d.ts.map +1 -1
  205. package/dist/lib/setup.js +97 -29
  206. package/dist/lib/setup.js.map +1 -1
  207. package/dist/lib/setupItem.d.ts +99 -0
  208. package/dist/lib/setupItem.d.ts.map +1 -0
  209. package/dist/lib/setupItem.js +262 -0
  210. package/dist/lib/setupItem.js.map +1 -0
  211. package/dist/lib/setupWizard.d.ts +53 -0
  212. package/dist/lib/setupWizard.d.ts.map +1 -0
  213. package/dist/lib/setupWizard.js +347 -0
  214. package/dist/lib/setupWizard.js.map +1 -0
  215. package/dist/lib/snap.d.ts.map +1 -1
  216. package/dist/lib/snap.js +5 -0
  217. package/dist/lib/snap.js.map +1 -1
  218. package/dist/lib/speakers.d.ts +41 -0
  219. package/dist/lib/speakers.d.ts.map +1 -0
  220. package/dist/lib/speakers.js +78 -0
  221. package/dist/lib/speakers.js.map +1 -0
  222. package/dist/lib/status.d.ts.map +1 -1
  223. package/dist/lib/status.js +21 -0
  224. package/dist/lib/status.js.map +1 -1
  225. package/dist/lib/stdin.d.ts +5 -0
  226. package/dist/lib/stdin.d.ts.map +1 -0
  227. package/dist/lib/stdin.js +12 -0
  228. package/dist/lib/stdin.js.map +1 -0
  229. package/dist/lib/transcribeNative.d.ts +4 -9
  230. package/dist/lib/transcribeNative.d.ts.map +1 -1
  231. package/dist/lib/transcribeNative.js +11 -26
  232. package/dist/lib/transcribeNative.js.map +1 -1
  233. package/dist/lib/userConfig.d.ts +22 -0
  234. package/dist/lib/userConfig.d.ts.map +1 -0
  235. package/dist/lib/userConfig.js +67 -0
  236. package/dist/lib/userConfig.js.map +1 -0
  237. package/dist/lib/validate.d.ts +18 -0
  238. package/dist/lib/validate.d.ts.map +1 -1
  239. package/dist/lib/validate.js +71 -1
  240. package/dist/lib/validate.js.map +1 -1
  241. package/dist/lib/version.d.ts +30 -0
  242. package/dist/lib/version.d.ts.map +1 -0
  243. package/dist/lib/version.js +65 -0
  244. package/dist/lib/version.js.map +1 -0
  245. package/dist/llm/adapter.d.ts +5 -0
  246. package/dist/llm/adapter.d.ts.map +1 -1
  247. package/dist/llm/adapter.js +27 -8
  248. package/dist/llm/adapter.js.map +1 -1
  249. package/dist/llm/http.d.ts +22 -1
  250. package/dist/llm/http.d.ts.map +1 -1
  251. package/dist/llm/http.js +52 -30
  252. package/dist/llm/http.js.map +1 -1
  253. package/dist/llm/providers/anthropic.d.ts.map +1 -1
  254. package/dist/llm/providers/anthropic.js +6 -9
  255. package/dist/llm/providers/anthropic.js.map +1 -1
  256. package/dist/llm/providers/ollama.d.ts.map +1 -1
  257. package/dist/llm/providers/ollama.js +8 -7
  258. package/dist/llm/providers/ollama.js.map +1 -1
  259. package/dist/llm/providers/openai_compatible.d.ts.map +1 -1
  260. package/dist/llm/providers/openai_compatible.js +2 -7
  261. package/dist/llm/providers/openai_compatible.js.map +1 -1
  262. package/dist/logging.d.ts.map +1 -1
  263. package/dist/logging.js +3 -1
  264. package/dist/logging.js.map +1 -1
  265. package/dist/loops/embed_worker.d.ts +3 -0
  266. package/dist/loops/embed_worker.d.ts.map +1 -1
  267. package/dist/loops/embed_worker.js +11 -4
  268. package/dist/loops/embed_worker.js.map +1 -1
  269. package/dist/loops/ingest_watcher.d.ts.map +1 -1
  270. package/dist/loops/ingest_watcher.js +6 -3
  271. package/dist/loops/ingest_watcher.js.map +1 -1
  272. package/dist/loops/legacy_worker.d.ts +28 -1
  273. package/dist/loops/legacy_worker.d.ts.map +1 -1
  274. package/dist/loops/legacy_worker.js +91 -10
  275. package/dist/loops/legacy_worker.js.map +1 -1
  276. package/dist/loops/supervisor.d.ts +7 -0
  277. package/dist/loops/supervisor.d.ts.map +1 -1
  278. package/dist/loops/supervisor.js +17 -2
  279. package/dist/loops/supervisor.js.map +1 -1
  280. package/dist/loops/synthesis.d.ts.map +1 -1
  281. package/dist/loops/synthesis.js +15 -0
  282. package/dist/loops/synthesis.js.map +1 -1
  283. package/dist/loops/transcribe_worker.d.ts +3 -0
  284. package/dist/loops/transcribe_worker.d.ts.map +1 -1
  285. package/dist/loops/transcribe_worker.js +15 -7
  286. package/dist/loops/transcribe_worker.js.map +1 -1
  287. package/dist/output.d.ts +13 -1
  288. package/dist/output.d.ts.map +1 -1
  289. package/dist/output.js +27 -6
  290. package/dist/output.js.map +1 -1
  291. package/dist/render/glyphs.d.ts +30 -0
  292. package/dist/render/glyphs.d.ts.map +1 -0
  293. package/dist/render/glyphs.js +38 -0
  294. package/dist/render/glyphs.js.map +1 -0
  295. package/dist/render/human.d.ts +22 -0
  296. package/dist/render/human.d.ts.map +1 -0
  297. package/dist/render/human.js +62 -0
  298. package/dist/render/human.js.map +1 -0
  299. package/dist/router.d.ts.map +1 -1
  300. package/dist/router.js +32 -4
  301. package/dist/router.js.map +1 -1
  302. package/dist/transcriber_client.d.ts.map +1 -1
  303. package/dist/transcriber_client.js +2 -1
  304. package/dist/transcriber_client.js.map +1 -1
  305. package/package.json +12 -5
  306. package/templates/AGENTS.md +1 -1
  307. package/templates/config.toml +6 -1
  308. package/transcriber/app/diarization.py +36 -6
  309. package/transcriber/app/legacy_cli.py +90 -0
  310. package/transcriber/app/pipeline.py +13 -7
  311. package/transcriber/app/prosody.py +5 -0
  312. package/transcriber/app/transcribe_cli.py +15 -1
  313. package/transcriber/app/vad.py +82 -11
@@ -1,6 +1,7 @@
1
1
  import { existsSync, mkdirSync, readdirSync, renameSync, statSync, writeFileSync } from 'node:fs';
2
2
  import { basename, join } from 'node:path';
3
3
  import { CompostError } from '../errors.js';
4
+ import { seedNameOf } from './seedResolve.js';
4
5
  import { loadTemplate, render } from './templates.js';
5
6
  /** Folders that compost expects in a migrated seed, beyond the renamed legacy dirs. */
6
7
  const SCAFFOLD_DIRS = [
@@ -61,7 +62,7 @@ export function planMigration(seedPath) {
61
62
  scaffoldFiles.push('seed.md');
62
63
  }
63
64
  return {
64
- seed_name: basename(seedPath),
65
+ seed_name: seedNameOf(seedPath),
65
66
  path: seedPath,
66
67
  already_migrated: alreadyMigrated,
67
68
  renames,
@@ -111,7 +112,13 @@ export function migrate(seedPath, opts = {}) {
111
112
  };
112
113
  for (const file of plan.scaffold_files) {
113
114
  const templateName = file === 'seed.md' ? 'seed.md' : basename(file);
114
- writeFileSync(join(seedPath, file), render(loadTemplate(templateName), vars), 'utf8');
115
+ // Write atomically (temp + rename) so a failure mid-write never leaves a
116
+ // truncated config.toml/seed.md that re-runs would keep (existsSync guards
117
+ // the scaffold, so a half-written file would otherwise never be repaired).
118
+ const finalPath = join(seedPath, file);
119
+ const tmpPath = `${finalPath}.tmp`;
120
+ writeFileSync(tmpPath, render(loadTemplate(templateName), vars), 'utf8');
121
+ renameSync(tmpPath, finalPath);
115
122
  }
116
123
  return { ...plan, applied: true };
117
124
  }
@@ -1 +1 @@
1
- {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/lib/migrate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AACjG,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAE1C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAErD,uFAAuF;AACvF,MAAM,aAAa,GAAG;IACpB,UAAU;IACV,YAAY;IACZ,UAAU;IACV,SAAS;IACT,QAAQ;IACR,iBAAiB;IACjB,UAAU;IACV,eAAe;IACf,eAAe;CACP,CAAA;AAEV,MAAM,kBAAkB,GAAG,iBAAiB,CAAA;AAyB5C;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,MAAM,CAAC,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACvC,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,IAAI,CAAA;IAC3B,yIAAyI;IACzI,OAAO,CAAC,CAAC,CAAC,CAAE,CAAC,WAAW,EAAE,CAAA;AAC5B,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,QAAgB;IAC5C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;QAC/D,MAAM,IAAI,YAAY,CAAC,gBAAgB,EAAE,oBAAoB,QAAQ,EAAE,CAAC,CAAA;IAC1E,CAAC;IAED,MAAM,OAAO,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QACjD,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAA;QACnC,OAAO,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA;IAClD,CAAC,CAAC,CAAA;IAEF,MAAM,OAAO,GAAiB,EAAE,CAAA;IAChC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,CAAA;QACnC,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;YACrB,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;QAC3C,CAAC;IACH,CAAC;IAED,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAA;IAEtF,MAAM,YAAY,GAAa,EAAE,CAAA;IACjC,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAChC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YAAE,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC9D,CAAC;IAED,MAAM,aAAa,GAAa,EAAE,CAAA;IAClC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC;QAC3D,aAAa,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAA;IAC5C,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC;QACzD,aAAa,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAA;IAC1C,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC;QAC3C,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAC/B,CAAC;IAED,OAAO;QACL,SAAS,EAAE,QAAQ,CAAC,QAAQ,CAAC;QAC7B,IAAI,EAAE,QAAQ;QACd,gBAAgB,EAAE,eAAe;QACjC,OAAO;QACP,aAAa,EAAE,YAAY;QAC3B,cAAc,EAAE,aAAa;KAC9B,CAAA;AACH,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,QAAgB,EAAE,OAAuB,EAAE;IACjE,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAA;IACpC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,KAAK,IAAI,CAAA;IAEjC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;IACpC,CAAC;IAED,mEAAmE;IACnE,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QAC7B,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,YAAY,CACpB,eAAe,EACf,kBAAkB,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,EAAE,6CAA6C,CAClF,CAAA;QACH,CAAC;IACH,CAAC;IAED,yEAAyE;IACzE,MAAM,SAAS,GAAiB,EAAE,CAAA;IAClC,IAAI,CAAC;QACH,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAC7B,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;YACxD,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACnB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;YACvC,IAAI,CAAC;gBACH,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;YAChE,CAAC;YAAC,MAAM,CAAC;gBACP,oDAAoD;YACtD,CAAC;QACH,CAAC;QACD,MAAM,IAAI,YAAY,CAAC,UAAU,EAAE,6CAA6C,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;IAC9F,CAAC;IAED,8CAA8C;IAC9C,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QACrC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACrD,CAAC;IAED,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,CAAA;IAC9C,MAAM,IAAI,GAA2B;QACnC,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,UAAU,EAAE,GAAG,CAAC,WAAW,EAAE;KAC9B,CAAA;IACD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;QACvC,MAAM,YAAY,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;QACpE,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAA;IACvF,CAAC;IAED,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;AACnC,CAAC"}
1
+ {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/lib/migrate.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { type SpawnSyncReturns } from 'node:child_process';
1
2
  /**
2
3
  * Native (host) transcription runtime resolution (#176, native-first).
3
4
  *
@@ -58,4 +59,34 @@ export declare function diagnoseNativeRuntime(opts?: ResolveNativeOpts): NativeR
58
59
  * Silicon when resolvable, else Docker (the cross-platform fallback).
59
60
  */
60
61
  export declare function pickRuntime(explicit: string | undefined, native: NativeRuntimePaths | null, appleSilicon?: boolean): 'native' | 'docker';
62
+ /** Injectable spawn surface (real `spawnSync` in prod; a fake in tests). */
63
+ export type SpawnImpl = (cmd: string, args: string[], opts: {
64
+ cwd: string;
65
+ env: NodeJS.ProcessEnv;
66
+ encoding: 'utf8';
67
+ maxBuffer: number;
68
+ }) => Pick<SpawnSyncReturns<string>, 'status' | 'stdout' | 'stderr' | 'error'>;
69
+ export interface RunNativeCliOptions {
70
+ cwd: string;
71
+ env: NodeJS.ProcessEnv;
72
+ /** Short noun used in the error messages, e.g. 'transcriber' / 'legacy-ingest'. */
73
+ label: string;
74
+ /** Recovery hint appended to the failed-to-start message. */
75
+ startHint: string;
76
+ spawnImpl?: SpawnImpl;
77
+ }
78
+ export interface NativeCliResult<T> {
79
+ parsed: T;
80
+ status: number | null;
81
+ stderr: string;
82
+ }
83
+ /**
84
+ * Spawn a native `python -m app.<cli>` entrypoint and parse its single JSON-line
85
+ * result. Owns the spawn dispatch, the 64 MiB buffer, the failed-to-start error,
86
+ * and the last-line/parse/object-guard. The caller keeps its own success check
87
+ * (`status !== 0 || parsed.status === 'failed'`) on the returned
88
+ * `{ parsed, status, stderr }`, since the two callers phrase that failure
89
+ * differently. (#176, #184)
90
+ */
91
+ export declare function runNativeCli<T>(python: string, args: string[], opts: RunNativeCliOptions): NativeCliResult<T>;
61
92
  //# sourceMappingURL=nativeRuntime.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"nativeRuntime.d.ts","sourceRoot":"","sources":["../../src/lib/nativeRuntime.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;GAWG;AAEH,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAA;IACd,cAAc,EAAE,MAAM,CAAA;CACvB;AAED,gFAAgF;AAChF,wBAAgB,cAAc,IAAI,OAAO,CAExC;AAED;iEACiE;AACjE,wBAAgB,cAAc,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAI3E;AAED,wDAAwD;AACxD,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAE9E;AAED;;;;;sEAKsE;AACtE,wBAAgB,sBAAsB,CACpC,QAAQ,GAAE,MAAgD,EAC1D,MAAM,GAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAoB,GAC1C,MAAM,GAAG,SAAS,CAUpB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;IACvB,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAA;IAC/B,2CAA2C;IAC3C,kBAAkB,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAA;CAC9C;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,GAAE,iBAAsB,GAAG,kBAAkB,GAAG,IAAI,CAY5F;AAED;;;6DAG6D;AAC7D,MAAM,WAAW,sBAAsB;IACrC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,4EAA4E;IAC5E,YAAY,CAAC,EAAE,UAAU,GAAG,KAAK,GAAG,cAAc,CAAA;IAClD,oBAAoB,CAAC,EAAE,UAAU,GAAG,KAAK,GAAG,WAAW,CAAA;CACxD;AAED,wBAAgB,qBAAqB,CAAC,IAAI,GAAE,iBAAsB,GAAG,sBAAsB,CA4C1F;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,MAAM,EAAE,kBAAkB,GAAG,IAAI,EACjC,YAAY,GAAE,OAA0B,GACvC,QAAQ,GAAG,QAAQ,CAGrB"}
1
+ {"version":3,"file":"nativeRuntime.d.ts","sourceRoot":"","sources":["../../src/lib/nativeRuntime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,gBAAgB,EAAa,MAAM,oBAAoB,CAAA;AAQrE;;;;;;;;;;;GAWG;AAEH,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAA;IACd,cAAc,EAAE,MAAM,CAAA;CACvB;AAED,gFAAgF;AAChF,wBAAgB,cAAc,IAAI,OAAO,CAExC;AAED;iEACiE;AACjE,wBAAgB,cAAc,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAI3E;AAED,wDAAwD;AACxD,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAE9E;AAED;;;;;sEAKsE;AACtE,wBAAgB,sBAAsB,CACpC,QAAQ,GAAE,MAAgD,EAC1D,MAAM,GAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAoB,GAC1C,MAAM,GAAG,SAAS,CAUpB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;IACvB,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAA;IAC/B,2CAA2C;IAC3C,kBAAkB,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAA;CAC9C;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,GAAE,iBAAsB,GAAG,kBAAkB,GAAG,IAAI,CAY5F;AAED;;;6DAG6D;AAC7D,MAAM,WAAW,sBAAsB;IACrC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,4EAA4E;IAC5E,YAAY,CAAC,EAAE,UAAU,GAAG,KAAK,GAAG,cAAc,CAAA;IAClD,oBAAoB,CAAC,EAAE,UAAU,GAAG,KAAK,GAAG,WAAW,CAAA;CACxD;AAED,wBAAgB,qBAAqB,CAAC,IAAI,GAAE,iBAAsB,GAAG,sBAAsB,CA4C1F;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,MAAM,EAAE,kBAAkB,GAAG,IAAI,EACjC,YAAY,GAAE,OAA0B,GACvC,QAAQ,GAAG,QAAQ,CAGrB;AAED,4EAA4E;AAC5E,MAAM,MAAM,SAAS,GAAG,CACtB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,KAC/E,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC,CAAA;AAE7E,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAC,UAAU,CAAA;IACtB,mFAAmF;IACnF,KAAK,EAAE,MAAM,CAAA;IACb,6DAA6D;IAC7D,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,SAAS,CAAA;CACtB;AAED,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,MAAM,EAAE,CAAC,CAAA;IACT,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,MAAM,EAAE,MAAM,CAAA;CACf;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAC5B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,EAAE,mBAAmB,GACxB,eAAe,CAAC,CAAC,CAAC,CA+BpB"}
@@ -1,7 +1,9 @@
1
+ import { spawnSync } from 'node:child_process';
1
2
  import { existsSync } from 'node:fs';
2
3
  import { homedir } from 'node:os';
3
4
  import { dirname, join } from 'node:path';
4
5
  import { fileURLToPath } from 'node:url';
6
+ import { CompostError } from '../errors.js';
5
7
  /** Native Metal/MLX ASR (parakeet-mlx) + pyannote-MPS require Apple Silicon. */
6
8
  export function isAppleSilicon() {
7
9
  return process.platform === 'darwin' && process.arch === 'arm64';
@@ -109,4 +111,40 @@ export function pickRuntime(explicit, native, appleSilicon = isAppleSilicon()) {
109
111
  return explicit;
110
112
  return appleSilicon && native !== null ? 'native' : 'docker';
111
113
  }
114
+ /**
115
+ * Spawn a native `python -m app.<cli>` entrypoint and parse its single JSON-line
116
+ * result. Owns the spawn dispatch, the 64 MiB buffer, the failed-to-start error,
117
+ * and the last-line/parse/object-guard. The caller keeps its own success check
118
+ * (`status !== 0 || parsed.status === 'failed'`) on the returned
119
+ * `{ parsed, status, stderr }`, since the two callers phrase that failure
120
+ * differently. (#176, #184)
121
+ */
122
+ export function runNativeCli(python, args, opts) {
123
+ const spawn = opts.spawnImpl ?? spawnSync;
124
+ const res = spawn(python, args, {
125
+ cwd: opts.cwd,
126
+ env: opts.env,
127
+ encoding: 'utf8',
128
+ maxBuffer: 64 * 1024 * 1024,
129
+ });
130
+ if (res.error) {
131
+ throw new CompostError('PROVIDER_ERROR', `native ${opts.label} failed to start (${python}): ${res.error.message}. ${opts.startHint}`);
132
+ }
133
+ const stderr = res.stderr || '';
134
+ // The entrypoint prints exactly one JSON line; take the last non-empty line.
135
+ const lastLine = (res.stdout || '').trim().split('\n').filter(Boolean).pop() ?? '';
136
+ let parsed;
137
+ try {
138
+ // JSON.parse succeeds on primitives (null, 123, "s"); require an object so a
139
+ // stray non-object line surfaces as the CompostError below, not a TypeError.
140
+ const value = JSON.parse(lastLine);
141
+ if (typeof value !== 'object' || value === null)
142
+ throw new Error('not a JSON object');
143
+ parsed = value;
144
+ }
145
+ catch {
146
+ throw new CompostError('PROVIDER_ERROR', `native ${opts.label} produced no parseable result. stderr: ${stderr.slice(-400)}`);
147
+ }
148
+ return { parsed, status: res.status, stderr };
149
+ }
112
150
  //# sourceMappingURL=nativeRuntime.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"nativeRuntime.js","sourceRoot":"","sources":["../../src/lib/nativeRuntime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"nativeRuntime.js","sourceRoot":"","sources":["../../src/lib/nativeRuntime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * True when `target` resolves to a path strictly inside `root` — not `root`
3
+ * itself, and not escaping via `..`. Lexical only (does not resolve symlinks);
4
+ * the shared predicate behind the seed and session containment guards (#211).
5
+ * Callers that want to allow `target === root` test that case separately.
6
+ */
7
+ export declare function isContainedUnder(root: string, target: string): boolean;
8
+ //# sourceMappingURL=pathSafe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pathSafe.d.ts","sourceRoot":"","sources":["../../src/lib/pathSafe.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAGtE"}
@@ -0,0 +1,12 @@
1
+ import { isAbsolute, relative, sep } from 'node:path';
2
+ /**
3
+ * True when `target` resolves to a path strictly inside `root` — not `root`
4
+ * itself, and not escaping via `..`. Lexical only (does not resolve symlinks);
5
+ * the shared predicate behind the seed and session containment guards (#211).
6
+ * Callers that want to allow `target === root` test that case separately.
7
+ */
8
+ export function isContainedUnder(root, target) {
9
+ const rel = relative(root, target);
10
+ return rel !== '' && !rel.startsWith('..') && !isAbsolute(rel) && !rel.includes(`..${sep}`);
11
+ }
12
+ //# sourceMappingURL=pathSafe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pathSafe.js","sourceRoot":"","sources":["../../src/lib/pathSafe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,WAAW,CAAA;AAErD;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,MAAc;IAC3D,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IAClC,OAAO,GAAG,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,GAAG,EAAE,CAAC,CAAA;AAC7F,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"provisionNative.d.ts","sourceRoot":"","sources":["../../src/lib/provisionNative.ts"],"names":[],"mappings":"AAOA;;;;;;;;;;GAUG;AAEH,iFAAiF;AACjF,eAAO,MAAM,WAAW,UAMvB,CAAA;AAOD,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,OAAO,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;CACf;AACD;yCACyC;AACzC,MAAM,MAAM,aAAa,GAAG,CAC1B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,KACxB,mBAAmB,CAAA;AAExB,MAAM,WAAW,sBAAsB;IACrC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;IACvB,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAA;IAC/B,IAAI,CAAC,EAAE,aAAa,CAAA;IACpB,qEAAqE;IACrE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,4EAA4E;IAC5E,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,kEAAkE;IAClE,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,eAAe,GAAG,aAAa,CAAA;IACvC,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,cAAc,EAAE,MAAM,CAAA;IACtB,KAAK,EAAE,MAAM,EAAE,CAAA;CAChB;AAgCD;iDACiD;AACjD,wBAAgB,mBAAmB,CAAC,IAAI,GAAE,sBAA2B,GAAG,qBAAqB,CA+D5F"}
1
+ {"version":3,"file":"provisionNative.d.ts","sourceRoot":"","sources":["../../src/lib/provisionNative.ts"],"names":[],"mappings":"AAQA;;;;;;;;;;GAUG;AAEH,iFAAiF;AACjF,eAAO,MAAM,WAAW,UAMvB,CAAA;AAOD,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,OAAO,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;CACf;AACD;yCACyC;AACzC,MAAM,MAAM,aAAa,GAAG,CAC1B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,KACxB,mBAAmB,CAAA;AAExB,MAAM,WAAW,sBAAsB;IACrC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;IACvB,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAA;IAC/B,IAAI,CAAC,EAAE,aAAa,CAAA;IACpB,qEAAqE;IACrE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,4EAA4E;IAC5E,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,kEAAkE;IAClE,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,eAAe,GAAG,aAAa,CAAA;IACvC,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,cAAc,EAAE,MAAM,CAAA;IACtB,KAAK,EAAE,MAAM,EAAE,CAAA;CAChB;AAmCD;iDACiD;AACjD,wBAAgB,mBAAmB,CAAC,IAAI,GAAE,sBAA2B,GAAG,qBAAqB,CA+D5F"}
@@ -2,6 +2,7 @@ import { spawnSync } from 'node:child_process';
2
2
  import { existsSync } from 'node:fs';
3
3
  import { join } from 'node:path';
4
4
  import { CompostError } from '../errors.js';
5
+ import { scrubbedEnv } from './childEnv.js';
5
6
  import { findRepoTranscriberDir, managedVenvDir } from './nativeRuntime.js';
6
7
  /**
7
8
  * Provision the managed native transcription venv (#183) so `compost transcribe`
@@ -29,6 +30,8 @@ const MAX_MINOR = 12; // transcriber requires-python = >=3.11,<3.13
29
30
  const defaultExec = (cmd, args, opts) => {
30
31
  const res = spawnSync(cmd, args, {
31
32
  encoding: 'utf8',
33
+ // pip/venv provisioning needs no compost secrets — scrub them (#236).
34
+ env: scrubbedEnv(),
32
35
  // stream → live stdout (download progress) but still capture stderr so a
33
36
  // failure has a diagnostic (inheriting stderr would null it out).
34
37
  stdio: opts?.stream ? ['ignore', 'inherit', 'pipe'] : 'pipe',
@@ -44,12 +47,13 @@ function pyVersion(exec, bin) {
44
47
  return m ? [Number(m[1]), Number(m[2])] : null;
45
48
  }
46
49
  function resolvePython(exec, explicit) {
47
- for (const c of explicit ? [explicit] : PY_CANDIDATES) {
50
+ const candidates = explicit ? [explicit] : PY_CANDIDATES;
51
+ for (const c of candidates) {
48
52
  const v = pyVersion(exec, c);
49
53
  if (v && v[0] === 3 && v[1] >= MIN_MINOR && v[1] <= MAX_MINOR)
50
54
  return c;
51
55
  }
52
- throw new CompostError('INVALID_INPUT', `no Python 3.${MIN_MINOR}–3.${MAX_MINOR} found (tried ${(explicit ? [explicit] : PY_CANDIDATES).join(', ')}). ` +
56
+ throw new CompostError('INVALID_INPUT', `no Python 3.${MIN_MINOR}–3.${MAX_MINOR} found (tried ${candidates.join(', ')}). ` +
53
57
  'Install one — e.g. `brew install python@3.11` — or pass --python-bin.');
54
58
  }
55
59
  /** Create + populate the managed native venv. Idempotent: a venv that already
@@ -61,7 +65,7 @@ export function provisionNativeVenv(opts = {}) {
61
65
  const steps = [];
62
66
  const transcriberDir = opts.transcriberDir ?? env.COMPOST_TRANSCRIBER_DIR ?? findRepoTranscriberDir(undefined, exists);
63
67
  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.');
68
+ 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
69
  }
66
70
  const venvDir = managedVenvDir(env);
67
71
  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":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAE3E;;;;;;;;;;GAUG;AAEH,iFAAiF;AACjF,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,cAAc;IACd,qBAAqB;IACrB,YAAY;IACZ,iBAAiB;IACjB,eAAe;CAChB,CAAA;AAED,MAAM,aAAa,GAAG,CAAC,YAAY,EAAE,YAAY,EAAE,SAAS,CAAC,CAAA;AAC7D,MAAM,cAAc,GAAG,6DAA6D,CAAA;AACpF,MAAM,SAAS,GAAG,EAAE,CAAA;AACpB,MAAM,SAAS,GAAG,EAAE,CAAA,CAAC,6CAA6C;AAoClE,MAAM,WAAW,GAAkB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;IACrD,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE;QAC/B,QAAQ,EAAE,MAAM;QAChB,sEAAsE;QACtE,GAAG,EAAE,WAAW,EAAE;QAClB,yEAAyE;QACzE,kEAAkE;QAClE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM;QAC5D,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;KAC5B,CAAC,CAAA;IACF,OAAO,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,EAAE,EAAE,CAAA;AACnG,CAAC,CAAA;AAED,SAAS,SAAS,CAAC,IAAmB,EAAE,GAAW;IACjD,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,CAAA;IAClC,IAAI,CAAC,CAAC,CAAC,EAAE;QAAE,OAAO,IAAI,CAAA;IACtB,MAAM,CAAC,GAAG,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;IAC/D,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;AAChD,CAAC;AAED,SAAS,aAAa,CAAC,IAAmB,EAAE,QAAiB;IAC3D,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,CAAA;IACxD,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;QAC5B,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS;YAAE,OAAO,CAAC,CAAA;IACzE,CAAC;IACD,MAAM,IAAI,YAAY,CACpB,eAAe,EACf,eAAe,SAAS,MAAM,SAAS,iBAAiB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK;QAChF,uEAAuE,CAC1E,CAAA;AACH,CAAC;AAED;iDACiD;AACjD,MAAM,UAAU,mBAAmB,CAAC,OAA+B,EAAE;IACnE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAA;IACnC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,UAAU,CAAA;IACxC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,WAAW,CAAA;IACrC,MAAM,KAAK,GAAa,EAAE,CAAA;IAE1B,MAAM,cAAc,GAClB,IAAI,CAAC,cAAc,IAAI,GAAG,CAAC,uBAAuB,IAAI,sBAAsB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;IACjG,IAAI,cAAc,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC,EAAE,CAAC;QACpF,MAAM,IAAI,YAAY,CACpB,eAAe,EACf,iQAAiQ,CAClQ,CAAA;IACH,CAAC;IAED,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,CAAA;IACnC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAA;IAEjD,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACrF,OAAO;YACL,MAAM,EAAE,eAAe;YACvB,OAAO;YACP,UAAU;YACV,SAAS,EAAE,IAAI;YACf,cAAc;YACd,KAAK,EAAE,CAAC,0CAA0C,CAAC;SACpD,CAAA;IACH,CAAC;IAED,4EAA4E;IAC5E,iFAAiF;IACjF,IAAI,SAAS,GAAkB,IAAI,CAAA;IACnC,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;QACtC,SAAS,GAAG,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;QAC/C,KAAK,CAAC,IAAI,CAAC,eAAe,SAAS,EAAE,CAAC,CAAA;QACtC,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAA;QACvF,IAAI,CAAC,EAAE,CAAC,EAAE;YACR,MAAM,IAAI,YAAY,CAAC,gBAAgB,EAAE,uBAAuB,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QAC1F,KAAK,CAAC,IAAI,CAAC,mBAAmB,OAAO,EAAE,CAAC,CAAA;IAC1C,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAA;IAC5D,CAAC;IAED,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAA,CAAC,cAAc;IAC5E,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;IAC5F,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;QAChB,MAAM,IAAI,YAAY,CACpB,gBAAgB,EAChB,uBAAuB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,wBAAwB,EAAE,CAChF,CAAA;IACH,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,aAAa,WAAW,CAAC,MAAM,cAAc,CAAC,CAAA;IAEzD,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAA;IACvD,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,MAAM,IAAI,YAAY,CACpB,gBAAgB,EAChB,6CAA6C,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CACzE,CAAA;IACH,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAA;IAE3E,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,cAAc,EAAE,KAAK,EAAE,CAAA;AACzF,CAAC"}
@@ -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":"AACA,OAAO,EAAsB,KAAK,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAKtF;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 { reduce } from '@they-juanreina/compost-provenance';
3
+ import Database from 'better-sqlite3';
4
+ import { eventsDbPath } from './events.js';
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 = eventsDbPath(seedPath);
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