@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
@@ -0,0 +1,145 @@
1
+ import { CompostError, isCompostError } from '../errors.js';
2
+ import { HF_ALIASES, listSecrets, resolveSecret, rmSecret, setSecret, } from '../lib/secrets.js';
3
+ import { readStdin } from '../lib/stdin.js';
4
+ import { emit, emitError, getOutputOpts } from '../output.js';
5
+ import { glyphs } from '../render/glyphs.js';
6
+ /** Aliases to also check when resolving a given primary name. */
7
+ function aliasesFor(name) {
8
+ return name === 'HUGGINGFACE_TOKEN' ? HF_ALIASES : [];
9
+ }
10
+ /** True when the user explicitly forced JSON with the root `--json` flag. */
11
+ function jsonExplicit(cmd) {
12
+ let root = cmd;
13
+ while (root.parent)
14
+ root = root.parent;
15
+ return root.opts().json === true;
16
+ }
17
+ export function registerSecrets(program) {
18
+ const secrets = program
19
+ .command('secrets')
20
+ .description('Store and resolve user secrets (HuggingFace token, LLM API keys). Precedence: env var > OS keychain > ~/.compost/secrets.env (0600).');
21
+ secrets
22
+ .command('set')
23
+ .description('Store a secret in the OS keychain (or a 0600 ~/.compost/secrets.env fallback). Pipe the value via stdin to keep it out of shell history.')
24
+ .argument('<name>', 'Env-var-shaped name, e.g. HUGGINGFACE_TOKEN')
25
+ .argument('[value]', 'Secret value; omit to read from stdin')
26
+ .addHelpText('after', '\nExamples (pipe via stdin to keep the value out of shell history):\n $ printf %s "$HF_TOKEN" | compost secrets set HUGGINGFACE_TOKEN\n $ compost secrets list # shows names + where each is stored, never values')
27
+ .action(async (name, value, _flags, cmd) => {
28
+ const out = getOutputOpts(cmd);
29
+ try {
30
+ // An inline value lands in shell history — nudge toward the stdin pipe.
31
+ if (value !== undefined && process.stdin.isTTY === true) {
32
+ process.stderr.write('warning: passing the value inline puts it in your shell history. Prefer: printf %s "$TOKEN" | compost secrets set NAME\n');
33
+ }
34
+ const raw = value ?? (await readStdin());
35
+ const secret = raw.trim();
36
+ if (secret === '') {
37
+ if (out.human)
38
+ process.stderr.write('No value provided. Pass it as an argument or pipe it: `printf %s "$TOKEN" | compost secrets set NAME`\n');
39
+ throw new CompostError('INVALID_INPUT', `No value provided for ${name}.`);
40
+ }
41
+ const result = setSecret(name, secret);
42
+ emit({ status: 'ok', command: 'secrets set', ...result }, out, (d) => `Stored ${d.name} in ${d.stored_in === 'keychain' ? d.location : `${d.location} (0600)`}.${d.fallback_reason ? `\n (keychain unavailable: ${d.fallback_reason} — used the file fallback)` : ''}`);
43
+ }
44
+ catch (err) {
45
+ if (isCompostError(err))
46
+ emitError(err, out);
47
+ throw err;
48
+ }
49
+ });
50
+ secrets
51
+ .command('get')
52
+ .description('Resolve a secret (env > keychain > secrets.env) and print its value to stdout. Exits non-zero if unset.')
53
+ .argument('<name>')
54
+ .action((name, _flags, cmd) => {
55
+ const out = getOutputOpts(cmd);
56
+ try {
57
+ const resolved = resolveSecret(name, { aliases: aliasesFor(name) });
58
+ if (!resolved) {
59
+ if (jsonExplicit(cmd)) {
60
+ process.stdout.write(`${JSON.stringify({ status: 'not_found', command: 'secrets get', name, value: null, source: null })}\n`);
61
+ }
62
+ else if (out.human) {
63
+ process.stderr.write(`${name} is not set (checked env, keychain, secrets.env)\n`);
64
+ }
65
+ process.exitCode = 1;
66
+ return;
67
+ }
68
+ if (jsonExplicit(cmd)) {
69
+ emit({
70
+ status: 'ok',
71
+ command: 'secrets get',
72
+ name,
73
+ source: resolved.source,
74
+ value: resolved.value,
75
+ }, out);
76
+ return;
77
+ }
78
+ // Default: raw value on stdout so `$(compost secrets get NAME)` works in
79
+ // any context; the source goes to stderr (human mode only).
80
+ process.stdout.write(`${resolved.value}\n`);
81
+ if (out.human)
82
+ process.stderr.write(`source: ${resolved.source}\n`);
83
+ // Footgun guard: at an interactive terminal the value is now in
84
+ // scrollback. Warn on stderr (never affects the stdout value capture).
85
+ if (process.stdout.isTTY === true) {
86
+ process.stderr.write('warning: the secret value was printed to your terminal (now in scrollback). Pipe/capture it instead of reading it on a shared screen.\n');
87
+ }
88
+ }
89
+ catch (err) {
90
+ if (isCompostError(err))
91
+ emitError(err, out);
92
+ throw err;
93
+ }
94
+ });
95
+ secrets
96
+ .command('rm')
97
+ .alias('remove')
98
+ .description('Remove a secret from the keychain and secrets.env (env vars are your shell — unset those yourself).')
99
+ .argument('<name>')
100
+ .action((name, _flags, cmd) => {
101
+ const out = getOutputOpts(cmd);
102
+ try {
103
+ const result = rmSecret(name);
104
+ emit({ status: 'ok', command: 'secrets rm', ...result }, out, (d) => d.removed_from.length === 0
105
+ ? `${d.name}: nothing stored in keychain or secrets.env.`
106
+ : `Removed ${d.name} from ${d.removed_from.join(' and ')}.`);
107
+ }
108
+ catch (err) {
109
+ if (isCompostError(err))
110
+ emitError(err, out);
111
+ throw err;
112
+ }
113
+ });
114
+ secrets
115
+ .command('list')
116
+ .alias('ls')
117
+ .description('List which secrets are set and where (never prints values).')
118
+ .action((_flags, cmd) => {
119
+ const out = getOutputOpts(cmd);
120
+ try {
121
+ const { items, file } = listSecrets();
122
+ emit({
123
+ status: 'ok',
124
+ command: 'secrets list',
125
+ items,
126
+ secrets_env: file.path,
127
+ secrets_env_secure: file.secure,
128
+ }, out, (d) => {
129
+ if (d.secrets_env_secure && d.items.length === 0)
130
+ return 'No secrets set (checked env, keychain, secrets.env).';
131
+ const lines = d.items.map((it) => ` ${it.name.padEnd(20)} ${it.sources.join(', ')}`);
132
+ const warn = d.secrets_env_secure
133
+ ? ''
134
+ : `\n${glyphs().warn} ${d.secrets_env} is group/world-readable and is being ignored — fix: chmod 600 ${d.secrets_env}`;
135
+ return `Secrets (name → source; values never shown):\n${lines.join('\n')}${warn}`;
136
+ });
137
+ }
138
+ catch (err) {
139
+ if (isCompostError(err))
140
+ emitError(err, out);
141
+ throw err;
142
+ }
143
+ });
144
+ }
145
+ //# sourceMappingURL=secrets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets.js","sourceRoot":"","sources":["../../src/commands/secrets.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAaxC,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0CpD"}
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAoExC,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0EpD"}
@@ -1,17 +1,107 @@
1
+ import { spawnSync } from 'node:child_process';
2
+ import { existsSync, readdirSync, statSync } from 'node:fs';
3
+ import { join, resolve } from 'node:path';
4
+ import { createInterface } from 'node:readline/promises';
5
+ import { Writable } from 'node:stream';
1
6
  import { isCompostError } from '../errors.js';
2
7
  import { provisionNativeVenv } from '../lib/provisionNative.js';
3
8
  import { runSetup } from '../lib/setup.js';
9
+ import { runSetupWizard } from '../lib/setupWizard.js';
4
10
  import { emit, emitError, getOutputOpts } from '../output.js';
11
+ import { registerSetupItem } from './setupItem.js';
12
+ /** Terminal IO for the wizard: readline prompts, with echo muted for secrets. */
13
+ function terminalIO() {
14
+ let muted = false;
15
+ const mutable = new Writable({
16
+ write(chunk, _enc, cb) {
17
+ if (!muted)
18
+ process.stdout.write(chunk);
19
+ cb();
20
+ },
21
+ });
22
+ const rl = createInterface({ input: process.stdin, output: mutable, terminal: true });
23
+ const io = {
24
+ say: (text) => process.stdout.write(`${text}\n`),
25
+ ask: async (question, def) => {
26
+ const suffix = def !== undefined ? ` [${def}]` : '';
27
+ const answer = (await rl.question(`${question}${suffix}: `)).trim();
28
+ return answer === '' && def !== undefined ? def : answer;
29
+ },
30
+ confirm: async (question, def) => {
31
+ const hint = def ? 'Y/n' : 'y/N';
32
+ const answer = (await rl.question(`${question} [${hint}] `)).trim().toLowerCase();
33
+ if (answer === '')
34
+ return def;
35
+ return answer === 'y' || answer === 'yes';
36
+ },
37
+ askHidden: async (question) => {
38
+ process.stdout.write(question);
39
+ muted = true;
40
+ try {
41
+ const answer = await rl.question('');
42
+ process.stdout.write('\n');
43
+ return answer;
44
+ }
45
+ finally {
46
+ muted = false;
47
+ }
48
+ },
49
+ };
50
+ return { io, close: () => rl.close() };
51
+ }
52
+ /** Seed dirs under <cwd>/Seeds that already have a config.toml. */
53
+ function existingSeeds(cwd) {
54
+ const root = resolve(cwd, 'Seeds');
55
+ if (!existsSync(root))
56
+ return [];
57
+ try {
58
+ return readdirSync(root)
59
+ .filter((e) => !e.startsWith('.'))
60
+ .map((e) => join(root, e))
61
+ .filter((p) => statSync(p).isDirectory() && existsSync(join(p, '.compost', 'config.toml')));
62
+ }
63
+ catch {
64
+ return [];
65
+ }
66
+ }
5
67
  export function registerSetup(program) {
6
- program
68
+ const setup = program
7
69
  .command('setup')
8
- .description('Health-check prerequisites (Ollama, models, Docker, transcriber, HF token + pyannote license, Seeds/) and report fixes')
70
+ .description('Guided setup at a terminal (checks + confirmed fixes + tokens + chat model); a read-only JSON health report when piped, with --json, or with --check')
71
+ .option('--check', 'Read-only diagnostic report (skip the guided wizard at a TTY)')
9
72
  .option('--provision-native', 'Provision the native transcription venv (parakeet-mlx + pyannote + silero) on Apple Silicon, then re-check')
10
73
  .option('--python-bin <path>', 'Interpreter to build the native venv from (with --provision-native)')
11
74
  .option('--transcriber-dir <path>', 'transcriber/ package dir (with --provision-native; else COMPOST_TRANSCRIBER_DIR or auto-discovered)')
12
75
  .action(async (flags, cmd) => {
13
76
  const out = getOutputOpts(cmd);
14
77
  try {
78
+ // Guided wizard: only at an interactive terminal, only when the human
79
+ // asked for nothing more specific. Agents/CI (no TTY or --json) and
80
+ // explicit --check / --provision-native keep the deterministic paths.
81
+ const interactive = out.human &&
82
+ process.stdin.isTTY === true &&
83
+ process.stdout.isTTY === true &&
84
+ flags.check !== true &&
85
+ flags.provisionNative !== true;
86
+ if (interactive) {
87
+ const { io, close } = terminalIO();
88
+ try {
89
+ const result = await runSetupWizard({
90
+ io,
91
+ cwd: process.cwd(),
92
+ run: (c, args) => ({
93
+ ok: spawnSync(c, args, { stdio: 'inherit' }).status === 0,
94
+ }),
95
+ listSeeds: () => existingSeeds(process.cwd()),
96
+ });
97
+ if (!result.report.ready)
98
+ process.exitCode = 1;
99
+ }
100
+ finally {
101
+ close();
102
+ }
103
+ return;
104
+ }
15
105
  let provision;
16
106
  if (flags.provisionNative) {
17
107
  if (out.human)
@@ -34,5 +124,8 @@ export function registerSetup(program) {
34
124
  throw err;
35
125
  }
36
126
  });
127
+ // Per-item maintenance lives on its own `setup item …` JSON envelope, so the
128
+ // read-only `compost setup` report above stays byte-for-byte unchanged.
129
+ registerSetupItem(setup);
37
130
  }
38
131
  //# sourceMappingURL=setup.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAC1C,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAQ7D,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC5C,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CACV,wHAAwH,CACzH;SACA,MAAM,CACL,oBAAoB,EACpB,4GAA4G,CAC7G;SACA,MAAM,CACL,qBAAqB,EACrB,qEAAqE,CACtE;SACA,MAAM,CACL,0BAA0B,EAC1B,qGAAqG,CACtG;SACA,MAAM,CAAC,KAAK,EAAE,KAAiB,EAAE,GAAY,EAAE,EAAE;QAChD,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,CAAA;QAC9B,IAAI,CAAC;YACH,IAAI,SAA6D,CAAA;YACjE,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC;gBAC1B,IAAI,GAAG,CAAC,KAAK;oBACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,wFAAwF,CACzF,CAAA;gBACH,SAAS,GAAG,mBAAmB,CAAC;oBAC9B,GAAG,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACxE,GAAG,CAAC,KAAK,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACxF,CAAC,CAAA;YACJ,CAAC;YACD,2EAA2E;YAC3E,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;YACrD,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,MAAM,EAAE,EAAE,GAAG,CAAC,CAAA;YAC/E,uEAAuE;YACvE,IAAI,CAAC,MAAM,CAAC,KAAK;gBAAE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;QACzC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,cAAc,CAAC,GAAG,CAAC;gBAAE,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;YAC5C,MAAM,GAAG,CAAA;QACX,CAAC;IACH,CAAC,CAAC,CAAA;AACN,CAAC"}
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import type { Command } from 'commander';
2
+ /**
3
+ * Gate a `setup item run` invocation before it mutates anything. Extracted so
4
+ * the (security-relevant) refusal logic is unit-testable without driving
5
+ * commander: renew/set need a value (piped, so it stays out of shell history),
6
+ * and any mutating action run non-interactively requires an explicit --yes.
7
+ * `interactive` is the REAL terminal signal (`process.stdout.isTTY`), not the
8
+ * `--human` output flag: `--human` is user/agent-forceable even when piped, so
9
+ * gating on it would let an automated caller add `--human` to skip the --yes
10
+ * confirmation. Throws INVALID_INPUT otherwise; returns void when the call may
11
+ * proceed.
12
+ */
13
+ export declare function assertRunAllowed(id: string, action: string, ctx: {
14
+ interactive: boolean;
15
+ yes: boolean;
16
+ value: string;
17
+ }): void;
18
+ /**
19
+ * Register the `compost setup item …` group on the existing `setup` command.
20
+ * This is the per-item maintenance surface: it has its OWN `command:'setup
21
+ * item …'` JSON envelope, so the read-only `compost setup` report is untouched
22
+ * byte-for-byte. The TTY wizard and the plugin skill are meant to wrap these
23
+ * verbs rather than reimplement the behavior.
24
+ */
25
+ export declare function registerSetupItem(setup: Command): void;
26
+ //# sourceMappingURL=setupItem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setupItem.d.ts","sourceRoot":"","sources":["../../src/commands/setupItem.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAqBxC;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,MAAM,EACd,GAAG,EAAE;IAAE,WAAW,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACzD,IAAI,CAaN;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CA8HtD"}
@@ -0,0 +1,145 @@
1
+ import { CompostError, isCompostError } from '../errors.js';
2
+ import { HF_ALIASES, resolveSecret } from '../lib/secrets.js';
3
+ import { runSetup } from '../lib/setup.js';
4
+ import { actionsFor, runItem, validateHfToken, } from '../lib/setupItem.js';
5
+ import { readStdin } from '../lib/stdin.js';
6
+ import { emit, emitError, getOutputOpts } from '../output.js';
7
+ import { statusGlyph } from '../render/glyphs.js';
8
+ /** Everything except `validate` changes state; only renew needs a value. */
9
+ const READONLY = new Set(['validate']);
10
+ const NEEDS_VALUE = new Set(['renew']);
11
+ /**
12
+ * Gate a `setup item run` invocation before it mutates anything. Extracted so
13
+ * the (security-relevant) refusal logic is unit-testable without driving
14
+ * commander: renew/set need a value (piped, so it stays out of shell history),
15
+ * and any mutating action run non-interactively requires an explicit --yes.
16
+ * `interactive` is the REAL terminal signal (`process.stdout.isTTY`), not the
17
+ * `--human` output flag: `--human` is user/agent-forceable even when piped, so
18
+ * gating on it would let an automated caller add `--human` to skip the --yes
19
+ * confirmation. Throws INVALID_INPUT otherwise; returns void when the call may
20
+ * proceed.
21
+ */
22
+ export function assertRunAllowed(id, action, ctx) {
23
+ if (NEEDS_VALUE.has(action) && ctx.value === '') {
24
+ throw new CompostError('INVALID_INPUT', `Pipe the new value: \`printf %s "$TOKEN" | compost setup item run ${id} ${action}\` (keeps it out of shell history).`);
25
+ }
26
+ if (!READONLY.has(action) && !ctx.interactive && ctx.yes !== true) {
27
+ throw new CompostError('INVALID_INPUT', `Refusing a mutating action non-interactively without --yes.`);
28
+ }
29
+ }
30
+ /**
31
+ * Register the `compost setup item …` group on the existing `setup` command.
32
+ * This is the per-item maintenance surface: it has its OWN `command:'setup
33
+ * item …'` JSON envelope, so the read-only `compost setup` report is untouched
34
+ * byte-for-byte. The TTY wizard and the plugin skill are meant to wrap these
35
+ * verbs rather than reimplement the behavior.
36
+ */
37
+ export function registerSetupItem(setup) {
38
+ const item = setup
39
+ .command('item')
40
+ .description('Inspect and fix ONE setup prerequisite at a time — change/renew/revoke a token, re-validate a live credential, repair a single check.');
41
+ // setup item list — the directory of what's addressable + its actions.
42
+ item
43
+ .command('list')
44
+ .description('List every setup item with its status and the lifecycle actions available on it.')
45
+ .action(async (_flags, cmd) => {
46
+ const out = getOutputOpts(cmd);
47
+ try {
48
+ // Reuse the canonical runSetup probes (single source of truth) and
49
+ // filter, rather than maintaining a separate per-id probe. It runs the
50
+ // full check set — acceptable for an on-demand command; a dedicated
51
+ // single-check probe is a future optimization, not a correctness need.
52
+ const report = await runSetup({ cwd: process.cwd() });
53
+ const items = report.checks.map((c) => ({
54
+ id: c.id,
55
+ label: c.label,
56
+ status: c.status,
57
+ actions: actionsFor(c.id),
58
+ }));
59
+ emit({ command: 'setup item list', schema_version: '1.0', items }, out, (d) => d.items
60
+ .map((it) => {
61
+ const acts = it.actions.length
62
+ ? ` actions: ${it.actions.map((a) => a.id).join(', ')}`
63
+ : '';
64
+ return ` ${statusGlyph(it.status)} ${it.id.padEnd(28)} ${it.label}${acts}`;
65
+ })
66
+ .join('\n'));
67
+ }
68
+ catch (err) {
69
+ if (isCompostError(err))
70
+ emitError(err, out);
71
+ throw err;
72
+ }
73
+ });
74
+ // setup item show <id> [--validate] — re-probe ONE item; --validate adds the
75
+ // live credential signal as a SEPARATE field (presence vs validity).
76
+ item
77
+ .command('show')
78
+ .description('Show one setup item: its presence status, fix, and actions. --validate adds a live credential probe.')
79
+ .argument('<id>', 'Stable check id, e.g. hf-token (see `setup item list`)')
80
+ .option('--validate', 'Also probe whether a stored credential is LIVE (network; credential items only)')
81
+ .action(async (id, flags, cmd) => {
82
+ const out = getOutputOpts(cmd);
83
+ try {
84
+ const report = await runSetup({ cwd: process.cwd() });
85
+ const check = report.checks.find((c) => c.id === id);
86
+ if (!check) {
87
+ throw new CompostError('INVALID_INPUT', `Unknown item "${id}". Run \`compost setup item list\` for valid ids.`);
88
+ }
89
+ const actions = actionsFor(id);
90
+ let live;
91
+ if (flags.validate === true && id === 'hf-token') {
92
+ const found = resolveSecret('HUGGINGFACE_TOKEN', { aliases: HF_ALIASES });
93
+ live = found
94
+ ? await validateHfToken(found.value)
95
+ : { status: 'fail', detail: 'no token set to validate' };
96
+ }
97
+ emit({ command: 'setup item show', id, check, actions, ...(live ? { live } : {}) }, out, (d) => {
98
+ const lines = [`${d.check.label} [${d.check.status}] — ${d.check.detail}`];
99
+ if (d.check.fix)
100
+ lines.push(` fix: ${d.check.fix}`);
101
+ if (d.live)
102
+ lines.push(` live: ${d.live.status} — ${d.live.detail}`);
103
+ if (d.actions.length)
104
+ lines.push(` actions: ${d.actions.map((a) => `${a.id} (${a.side})`).join(', ')}`);
105
+ return lines.join('\n');
106
+ });
107
+ if (check.status === 'fail' || live?.status === 'fail')
108
+ process.exitCode = 1;
109
+ }
110
+ catch (err) {
111
+ if (isCompostError(err))
112
+ emitError(err, out);
113
+ throw err;
114
+ }
115
+ });
116
+ // setup item run <id> <action> [--yes] — the generic mutation primitive.
117
+ item
118
+ .command('run')
119
+ .description('Run one lifecycle action on one item, e.g. `setup item run hf-token renew`.')
120
+ .argument('<id>', 'Stable check id, e.g. hf-token, model:bge-m3, secret-perms:<path>')
121
+ .argument('<action>', 'validate | renew | forget | pull | fix')
122
+ .option('-y, --yes', 'Confirm a mutating action when not at a TTY (required for --json / piped use)')
123
+ .action(async (id, action, flags, cmd) => {
124
+ const out = getOutputOpts(cmd);
125
+ try {
126
+ const value = NEEDS_VALUE.has(action) ? (await readStdin()).trim() : '';
127
+ assertRunAllowed(id, action, {
128
+ // Real terminal, not the forceable --human flag (see assertRunAllowed).
129
+ interactive: process.stdout.isTTY === true,
130
+ yes: flags.yes === true,
131
+ value,
132
+ });
133
+ const result = await runItem(id, action, value ? { value } : {});
134
+ emit({ command: 'setup item run', ...result }, out, (d) => `${d.id} ${d.action}: ${d.recheck.status} — ${d.recheck.detail}`);
135
+ if (result.recheck.status === 'fail')
136
+ process.exitCode = 1;
137
+ }
138
+ catch (err) {
139
+ if (isCompostError(err))
140
+ emitError(err, out);
141
+ throw err;
142
+ }
143
+ });
144
+ }
145
+ //# sourceMappingURL=setupItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setupItem.js","sourceRoot":"","sources":["../../src/commands/setupItem.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAUxC,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwBrD"}
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAWxC,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwBrD"}
@@ -1,6 +1,7 @@
1
1
  import { isCompostError } from '../errors.js';
2
2
  import { gatherStatus } from '../lib/status.js';
3
3
  import { emit, emitError, getOutputOpts } from '../output.js';
4
+ import { renderStatus } from '../render/human.js';
4
5
  export function registerStatus(program) {
5
6
  program
6
7
  .command('status')
@@ -13,7 +14,7 @@ export function registerStatus(program) {
13
14
  if (flags.seed !== undefined)
14
15
  opts.seed = flags.seed;
15
16
  const snapshot = gatherStatus(opts);
16
- emit(snapshot, out);
17
+ emit(snapshot, out, renderStatus);
17
18
  }
18
19
  catch (err) {
19
20
  if (isCompostError(err)) {
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAM7D,MAAM,UAAU,cAAc,CAAC,OAAgB;IAC7C,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CACV,2GAA2G,CAC5G;SACA,MAAM,CACL,eAAe,EACf,wEAAwE,CACzE;SACA,MAAM,CAAC,CAAC,KAAkB,EAAE,GAAY,EAAE,EAAE;QAC3C,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,CAAA;QAC9B,IAAI,CAAC;YACH,MAAM,IAAI,GAAsB,EAAE,CAAA;YAClC,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;gBAAE,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAA;YACpD,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;YACnC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;QACrB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxB,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;YACrB,CAAC;YACD,MAAM,GAAG,CAAA;QACX,CAAC;IACH,CAAC,CAAC,CAAA;AACN,CAAC"}
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAMjD,MAAM,UAAU,cAAc,CAAC,OAAgB;IAC7C,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CACV,2GAA2G,CAC5G;SACA,MAAM,CACL,eAAe,EACf,wEAAwE,CACzE;SACA,MAAM,CAAC,CAAC,KAAkB,EAAE,GAAY,EAAE,EAAE;QAC3C,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,CAAA;QAC9B,IAAI,CAAC;YACH,MAAM,IAAI,GAAsB,EAAE,CAAA;YAClC,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;gBAAE,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAA;YACpD,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;YACnC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,YAAY,CAAC,CAAA;QACnC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxB,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;YACrB,CAAC;YACD,MAAM,GAAG,CAAA;QACX,CAAC;IACH,CAAC,CAAC,CAAA;AACN,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"transcribe.d.ts","sourceRoot":"","sources":["../../src/commands/transcribe.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AA6BxC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsHzD"}
1
+ {"version":3,"file":"transcribe.d.ts","sourceRoot":"","sources":["../../src/commands/transcribe.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAwCxC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4IzD"}
@@ -2,7 +2,10 @@ import { existsSync, readdirSync } from 'node:fs';
2
2
  import { join } from 'node:path';
3
3
  import { CompostError, isCompostError } from '../errors.js';
4
4
  import { isAppleSilicon, pickRuntime, resolveNativeRuntime } from '../lib/nativeRuntime.js';
5
+ import { HF_ALIASES, resolveSecret } from '../lib/secrets.js';
5
6
  import { resolveSeedPath } from '../lib/seedResolve.js';
7
+ import { assertSessionContained } from '../lib/sessionId.js';
8
+ import { applySidecar } from '../lib/speakers.js';
6
9
  import { transcribeNative } from '../lib/transcribeNative.js';
7
10
  import { emit, emitError, getOutputOpts } from '../output.js';
8
11
  import { writeTranscriptMd } from '../render/transcript_md.js';
@@ -16,6 +19,14 @@ function resolveSource(seedPath, sessionId) {
16
19
  throw new CompostError('FILE_NOT_FOUND', `No source media in ${dir}`);
17
20
  return join(dir, src);
18
21
  }
22
+ /** After a transcript lands, re-apply persisted speaker names (#177) and render
23
+ * the human-readable transcript.md. No-op if the file isn't there. */
24
+ function finalizeTranscript(path) {
25
+ if (!existsSync(path))
26
+ return;
27
+ applySidecar(path);
28
+ writeTranscriptMd(path);
29
+ }
19
30
  export function registerTranscribe(program) {
20
31
  program
21
32
  .command('transcribe')
@@ -29,10 +40,16 @@ export function registerTranscribe(program) {
29
40
  .option('--model <id>', 'ASR model id (engine default when omitted)')
30
41
  .option('--python <path>', 'Native-runtime venv python (or env COMPOST_TRANSCRIBER_PYTHON)')
31
42
  .option('--transcriber-dir <path>', 'transcriber/ package dir for the native runtime (or env COMPOST_TRANSCRIBER_DIR)')
43
+ .addHelpText('after', '\nExamples:\n $ compost transcribe S001\n $ compost transcribe S001 --language es-CO --runtime native')
32
44
  .action(async (sessionId, flags, cmd) => {
33
45
  const out = getOutputOpts(cmd);
34
46
  try {
35
47
  const seedPath = resolveSeedPath(process.cwd(), flags.seed);
48
+ // Guard both branches: sessionId is passed verbatim to the native Python
49
+ // entrypoint (--session-id, no regex there) and the Docker route. Validate
50
+ // it (regex + containment under <seed>/sessions/) before any path join or
51
+ // subprocess (#211 followup).
52
+ assertSessionContained(seedPath, sessionId);
36
53
  const source = resolveSource(seedPath, sessionId);
37
54
  if (flags.runtime !== undefined &&
38
55
  flags.runtime !== 'native' &&
@@ -56,15 +73,24 @@ export function registerTranscribe(program) {
56
73
  '--python and --transcriber-dir (or set COMPOST_TRANSCRIBER_PYTHON / COMPOST_TRANSCRIBER_DIR), ' +
57
74
  'or run `compost setup` to provision the native venv.');
58
75
  }
76
+ // Resolve the HF token by the documented precedence (env > keychain >
77
+ // secrets.env) and pass it explicitly to the python subprocess, so a
78
+ // keychain-stored token works even though it isn't in process.env.
79
+ const hf = resolveSecret('HUGGINGFACE_TOKEN', { aliases: HF_ALIASES });
80
+ // Native ASR captures the subprocess's stdio, so the terminal is blank
81
+ // for minutes otherwise. Heartbeat to stderr in human mode at a TTY.
82
+ if (out.human && process.stderr.isTTY === true) {
83
+ process.stderr.write(`transcribing ${sessionId} (native; this can take minutes)…\n`);
84
+ }
59
85
  const resp = transcribeNative(seedPath, sessionId, source, {
60
86
  python: native.python,
61
87
  transcriberDir: native.transcriberDir,
62
88
  engine: flags.engine ?? 'parakeet',
63
89
  ...(flags.model !== undefined ? { model: flags.model } : {}),
64
90
  ...(flags.language !== undefined ? { language: flags.language } : {}),
91
+ ...(hf ? { env: { HUGGINGFACE_TOKEN: hf.value } } : {}),
65
92
  });
66
- if (existsSync(resp.transcript_path))
67
- writeTranscriptMd(resp.transcript_path);
93
+ finalizeTranscript(resp.transcript_path);
68
94
  emit({
69
95
  status: resp.status,
70
96
  command: 'transcribe',
@@ -82,9 +108,11 @@ export function registerTranscribe(program) {
82
108
  '`compost setup` to enable native Apple-Silicon transcription (~20× faster).\n');
83
109
  }
84
110
  const client = new TranscriberClient(flags.baseUrl !== undefined ? { baseUrl: flags.baseUrl } : {});
111
+ if (out.human && process.stderr.isTTY === true) {
112
+ process.stderr.write(`transcribing ${sessionId} (docker; this can take minutes)…\n`);
113
+ }
85
114
  const resp = await client.transcribe(source, sessionId, seedPath, flags.language);
86
- if (existsSync(resp.transcript_path))
87
- writeTranscriptMd(resp.transcript_path);
115
+ finalizeTranscript(resp.transcript_path);
88
116
  emit({
89
117
  status: resp.status,
90
118
  command: 'transcribe',
@@ -1 +1 @@
1
- {"version":3,"file":"transcribe.js","sourceRoot":"","sources":["../../src/commands/transcribe.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transcribe.js","sourceRoot":"","sources":["../../src/commands/transcribe.ts"],"names":[],"mappings":"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"}