@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.
- package/dist/commands/agreement.d.ts +3 -0
- package/dist/commands/agreement.d.ts.map +1 -0
- package/dist/commands/agreement.js +35 -0
- package/dist/commands/agreement.js.map +1 -0
- package/dist/commands/backup.d.ts +3 -0
- package/dist/commands/backup.d.ts.map +1 -0
- package/dist/commands/backup.js +31 -0
- package/dist/commands/backup.js.map +1 -0
- package/dist/commands/chat.d.ts.map +1 -1
- package/dist/commands/chat.js +3 -2
- package/dist/commands/chat.js.map +1 -1
- package/dist/commands/create.d.ts +1 -0
- package/dist/commands/create.d.ts.map +1 -1
- package/dist/commands/create.js +39 -1
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/export.d.ts.map +1 -1
- package/dist/commands/export.js +47 -4
- package/dist/commands/export.js.map +1 -1
- package/dist/commands/import.d.ts +3 -0
- package/dist/commands/import.d.ts.map +1 -0
- package/dist/commands/import.js +64 -0
- package/dist/commands/import.js.map +1 -0
- package/dist/commands/ingest.d.ts.map +1 -1
- package/dist/commands/ingest.js +1 -0
- package/dist/commands/ingest.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +2 -0
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/jobs.d.ts +3 -0
- package/dist/commands/jobs.d.ts.map +1 -0
- package/dist/commands/jobs.js +105 -0
- package/dist/commands/jobs.js.map +1 -0
- package/dist/commands/label.d.ts +3 -0
- package/dist/commands/label.d.ts.map +1 -0
- package/dist/commands/label.js +67 -0
- package/dist/commands/label.js.map +1 -0
- package/dist/commands/models.d.ts.map +1 -1
- package/dist/commands/models.js +2 -1
- package/dist/commands/models.js.map +1 -1
- package/dist/commands/recode.d.ts +3 -0
- package/dist/commands/recode.d.ts.map +1 -0
- package/dist/commands/recode.js +60 -0
- package/dist/commands/recode.js.map +1 -0
- package/dist/commands/reindex.d.ts.map +1 -1
- package/dist/commands/reindex.js +19 -7
- package/dist/commands/reindex.js.map +1 -1
- package/dist/commands/rerun.d.ts +3 -0
- package/dist/commands/rerun.d.ts.map +1 -0
- package/dist/commands/rerun.js +91 -0
- package/dist/commands/rerun.js.map +1 -0
- package/dist/commands/search.d.ts.map +1 -1
- package/dist/commands/search.js +12 -1
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/secrets.d.ts +3 -0
- package/dist/commands/secrets.d.ts.map +1 -0
- package/dist/commands/secrets.js +145 -0
- package/dist/commands/secrets.js.map +1 -0
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +95 -2
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/setupItem.d.ts +26 -0
- package/dist/commands/setupItem.d.ts.map +1 -0
- package/dist/commands/setupItem.js +145 -0
- package/dist/commands/setupItem.js.map +1 -0
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +2 -1
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/transcribe.d.ts.map +1 -1
- package/dist/commands/transcribe.js +32 -4
- package/dist/commands/transcribe.js.map +1 -1
- package/dist/commands/validate.d.ts.map +1 -1
- package/dist/commands/validate.js +29 -1
- package/dist/commands/validate.js.map +1 -1
- package/dist/commands/watch.d.ts.map +1 -1
- package/dist/commands/watch.js +53 -6
- package/dist/commands/watch.js.map +1 -1
- package/dist/engine.d.ts +23 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js +32 -0
- package/dist/engine.js.map +1 -0
- package/dist/errors.d.ts +5 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +6 -0
- package/dist/errors.js.map +1 -1
- package/dist/exporters/pdf.d.ts.map +1 -1
- package/dist/exporters/pdf.js +2 -1
- package/dist/exporters/pdf.js.map +1 -1
- package/dist/exporters/prov.d.ts +11 -0
- package/dist/exporters/prov.d.ts.map +1 -0
- package/dist/exporters/prov.js +151 -0
- package/dist/exporters/prov.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/legacy_client.d.ts.map +1 -1
- package/dist/legacy_client.js +2 -1
- package/dist/legacy_client.js.map +1 -1
- package/dist/lib/agreement.d.ts +77 -0
- package/dist/lib/agreement.d.ts.map +1 -0
- package/dist/lib/agreement.js +261 -0
- package/dist/lib/agreement.js.map +1 -0
- package/dist/lib/artifacts.d.ts +35 -2
- package/dist/lib/artifacts.d.ts.map +1 -1
- package/dist/lib/artifacts.js +158 -29
- package/dist/lib/artifacts.js.map +1 -1
- package/dist/lib/backup.d.ts +37 -0
- package/dist/lib/backup.d.ts.map +1 -0
- package/dist/lib/backup.js +57 -0
- package/dist/lib/backup.js.map +1 -0
- package/dist/lib/childEnv.d.ts +13 -0
- package/dist/lib/childEnv.d.ts.map +1 -0
- package/dist/lib/childEnv.js +45 -0
- package/dist/lib/childEnv.js.map +1 -0
- package/dist/lib/config.d.ts +3 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/doctor.d.ts +3 -0
- package/dist/lib/doctor.d.ts.map +1 -1
- package/dist/lib/doctor.js +24 -1
- package/dist/lib/doctor.js.map +1 -1
- package/dist/lib/events.d.ts +44 -1
- package/dist/lib/events.d.ts.map +1 -1
- package/dist/lib/events.js +55 -2
- package/dist/lib/events.js.map +1 -1
- package/dist/lib/importTranscript.d.ts +16 -0
- package/dist/lib/importTranscript.d.ts.map +1 -0
- package/dist/lib/importTranscript.js +94 -0
- package/dist/lib/importTranscript.js.map +1 -0
- package/dist/lib/ingest.d.ts.map +1 -1
- package/dist/lib/ingest.js +12 -6
- package/dist/lib/ingest.js.map +1 -1
- package/dist/lib/journal.d.ts +13 -4
- package/dist/lib/journal.d.ts.map +1 -1
- package/dist/lib/journal.js +53 -16
- package/dist/lib/journal.js.map +1 -1
- package/dist/lib/legacyNative.d.ts +17 -0
- package/dist/lib/legacyNative.d.ts.map +1 -0
- package/dist/lib/legacyNative.js +38 -0
- package/dist/lib/legacyNative.js.map +1 -0
- package/dist/lib/migrate.d.ts.map +1 -1
- package/dist/lib/migrate.js +9 -2
- package/dist/lib/migrate.js.map +1 -1
- package/dist/lib/nativeRuntime.d.ts +31 -0
- package/dist/lib/nativeRuntime.d.ts.map +1 -1
- package/dist/lib/nativeRuntime.js +38 -0
- package/dist/lib/nativeRuntime.js.map +1 -1
- package/dist/lib/pathSafe.d.ts +8 -0
- package/dist/lib/pathSafe.d.ts.map +1 -0
- package/dist/lib/pathSafe.js +12 -0
- package/dist/lib/pathSafe.js.map +1 -0
- package/dist/lib/provisionNative.d.ts.map +1 -1
- package/dist/lib/provisionNative.js +7 -3
- package/dist/lib/provisionNative.js.map +1 -1
- package/dist/lib/queue.d.ts +25 -0
- package/dist/lib/queue.d.ts.map +1 -1
- package/dist/lib/queue.js +70 -3
- package/dist/lib/queue.js.map +1 -1
- package/dist/lib/reads.d.ts +24 -0
- package/dist/lib/reads.d.ts.map +1 -0
- package/dist/lib/reads.js +115 -0
- package/dist/lib/reads.js.map +1 -0
- package/dist/lib/recode.d.ts +19 -0
- package/dist/lib/recode.d.ts.map +1 -0
- package/dist/lib/recode.js +43 -0
- package/dist/lib/recode.js.map +1 -0
- package/dist/lib/redact.d.ts +7 -0
- package/dist/lib/redact.d.ts.map +1 -0
- package/dist/lib/redact.js +45 -0
- package/dist/lib/redact.js.map +1 -0
- package/dist/lib/rerun.d.ts +51 -0
- package/dist/lib/rerun.d.ts.map +1 -0
- package/dist/lib/rerun.js +160 -0
- package/dist/lib/rerun.js.map +1 -0
- package/dist/lib/retrieve.d.ts +8 -4
- package/dist/lib/retrieve.d.ts.map +1 -1
- package/dist/lib/retrieve.js +14 -3
- package/dist/lib/retrieve.js.map +1 -1
- package/dist/lib/saturate.js +3 -3
- package/dist/lib/saturate.js.map +1 -1
- package/dist/lib/schemas.generated.d.ts.map +1 -1
- package/dist/lib/schemas.generated.js +28 -0
- package/dist/lib/schemas.generated.js.map +1 -1
- package/dist/lib/secrets.d.ts +158 -0
- package/dist/lib/secrets.d.ts.map +1 -0
- package/dist/lib/secrets.js +514 -0
- package/dist/lib/secrets.js.map +1 -0
- package/dist/lib/seed.d.ts +5 -0
- package/dist/lib/seed.d.ts.map +1 -1
- package/dist/lib/seed.js +15 -2
- package/dist/lib/seed.js.map +1 -1
- package/dist/lib/seedResolve.d.ts +5 -0
- package/dist/lib/seedResolve.d.ts.map +1 -1
- package/dist/lib/seedResolve.js +12 -3
- package/dist/lib/seedResolve.js.map +1 -1
- package/dist/lib/session.d.ts +14 -0
- package/dist/lib/session.d.ts.map +1 -1
- package/dist/lib/session.js +53 -4
- package/dist/lib/session.js.map +1 -1
- package/dist/lib/sessionId.d.ts +9 -0
- package/dist/lib/sessionId.d.ts.map +1 -0
- package/dist/lib/sessionId.js +37 -0
- package/dist/lib/sessionId.js.map +1 -0
- package/dist/lib/setup.d.ts +9 -0
- package/dist/lib/setup.d.ts.map +1 -1
- package/dist/lib/setup.js +97 -29
- package/dist/lib/setup.js.map +1 -1
- package/dist/lib/setupItem.d.ts +99 -0
- package/dist/lib/setupItem.d.ts.map +1 -0
- package/dist/lib/setupItem.js +262 -0
- package/dist/lib/setupItem.js.map +1 -0
- package/dist/lib/setupWizard.d.ts +53 -0
- package/dist/lib/setupWizard.d.ts.map +1 -0
- package/dist/lib/setupWizard.js +347 -0
- package/dist/lib/setupWizard.js.map +1 -0
- package/dist/lib/snap.d.ts.map +1 -1
- package/dist/lib/snap.js +5 -0
- package/dist/lib/snap.js.map +1 -1
- package/dist/lib/speakers.d.ts +41 -0
- package/dist/lib/speakers.d.ts.map +1 -0
- package/dist/lib/speakers.js +78 -0
- package/dist/lib/speakers.js.map +1 -0
- package/dist/lib/status.d.ts.map +1 -1
- package/dist/lib/status.js +21 -0
- package/dist/lib/status.js.map +1 -1
- package/dist/lib/stdin.d.ts +5 -0
- package/dist/lib/stdin.d.ts.map +1 -0
- package/dist/lib/stdin.js +12 -0
- package/dist/lib/stdin.js.map +1 -0
- package/dist/lib/transcribeNative.d.ts +4 -9
- package/dist/lib/transcribeNative.d.ts.map +1 -1
- package/dist/lib/transcribeNative.js +11 -26
- package/dist/lib/transcribeNative.js.map +1 -1
- package/dist/lib/userConfig.d.ts +22 -0
- package/dist/lib/userConfig.d.ts.map +1 -0
- package/dist/lib/userConfig.js +67 -0
- package/dist/lib/userConfig.js.map +1 -0
- package/dist/lib/validate.d.ts +18 -0
- package/dist/lib/validate.d.ts.map +1 -1
- package/dist/lib/validate.js +71 -1
- package/dist/lib/validate.js.map +1 -1
- package/dist/lib/version.d.ts +30 -0
- package/dist/lib/version.d.ts.map +1 -0
- package/dist/lib/version.js +65 -0
- package/dist/lib/version.js.map +1 -0
- package/dist/llm/adapter.d.ts +5 -0
- package/dist/llm/adapter.d.ts.map +1 -1
- package/dist/llm/adapter.js +27 -8
- package/dist/llm/adapter.js.map +1 -1
- package/dist/llm/http.d.ts +22 -1
- package/dist/llm/http.d.ts.map +1 -1
- package/dist/llm/http.js +52 -30
- package/dist/llm/http.js.map +1 -1
- package/dist/llm/providers/anthropic.d.ts.map +1 -1
- package/dist/llm/providers/anthropic.js +6 -9
- package/dist/llm/providers/anthropic.js.map +1 -1
- package/dist/llm/providers/ollama.d.ts.map +1 -1
- package/dist/llm/providers/ollama.js +8 -7
- package/dist/llm/providers/ollama.js.map +1 -1
- package/dist/llm/providers/openai_compatible.d.ts.map +1 -1
- package/dist/llm/providers/openai_compatible.js +2 -7
- package/dist/llm/providers/openai_compatible.js.map +1 -1
- package/dist/logging.d.ts.map +1 -1
- package/dist/logging.js +3 -1
- package/dist/logging.js.map +1 -1
- package/dist/loops/embed_worker.d.ts +3 -0
- package/dist/loops/embed_worker.d.ts.map +1 -1
- package/dist/loops/embed_worker.js +11 -4
- package/dist/loops/embed_worker.js.map +1 -1
- package/dist/loops/ingest_watcher.d.ts.map +1 -1
- package/dist/loops/ingest_watcher.js +6 -3
- package/dist/loops/ingest_watcher.js.map +1 -1
- package/dist/loops/legacy_worker.d.ts +28 -1
- package/dist/loops/legacy_worker.d.ts.map +1 -1
- package/dist/loops/legacy_worker.js +91 -10
- package/dist/loops/legacy_worker.js.map +1 -1
- package/dist/loops/supervisor.d.ts +7 -0
- package/dist/loops/supervisor.d.ts.map +1 -1
- package/dist/loops/supervisor.js +17 -2
- package/dist/loops/supervisor.js.map +1 -1
- package/dist/loops/synthesis.d.ts.map +1 -1
- package/dist/loops/synthesis.js +15 -0
- package/dist/loops/synthesis.js.map +1 -1
- package/dist/loops/transcribe_worker.d.ts +3 -0
- package/dist/loops/transcribe_worker.d.ts.map +1 -1
- package/dist/loops/transcribe_worker.js +15 -7
- package/dist/loops/transcribe_worker.js.map +1 -1
- package/dist/output.d.ts +13 -1
- package/dist/output.d.ts.map +1 -1
- package/dist/output.js +27 -6
- package/dist/output.js.map +1 -1
- package/dist/render/glyphs.d.ts +30 -0
- package/dist/render/glyphs.d.ts.map +1 -0
- package/dist/render/glyphs.js +38 -0
- package/dist/render/glyphs.js.map +1 -0
- package/dist/render/human.d.ts +22 -0
- package/dist/render/human.d.ts.map +1 -0
- package/dist/render/human.js +62 -0
- package/dist/render/human.js.map +1 -0
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +32 -4
- package/dist/router.js.map +1 -1
- package/dist/transcriber_client.d.ts.map +1 -1
- package/dist/transcriber_client.js +2 -1
- package/dist/transcriber_client.js.map +1 -1
- package/package.json +12 -5
- package/templates/AGENTS.md +1 -1
- package/templates/config.toml +6 -1
- package/transcriber/app/diarization.py +36 -6
- package/transcriber/app/legacy_cli.py +90 -0
- package/transcriber/app/pipeline.py +13 -7
- package/transcriber/app/prosody.py +5 -0
- package/transcriber/app/transcribe_cli.py +15 -1
- package/transcriber/app/vad.py +82 -11
package/dist/lib/status.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/lib/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AACzE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEzC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/lib/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** Read all of stdin to a string — used for piped secret values (e.g. a token
|
|
2
|
+
* fed via `printf %s "$TOKEN" | compost …`) so they never land in shell
|
|
3
|
+
* history. Returns '' when stdin is an interactive TTY (nothing piped). */
|
|
4
|
+
export declare function readStdin(): Promise<string>;
|
|
5
|
+
//# sourceMappingURL=stdin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stdin.d.ts","sourceRoot":"","sources":["../../src/lib/stdin.ts"],"names":[],"mappings":"AAAA;;2EAE2E;AAC3E,wBAAsB,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAKjD"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** Read all of stdin to a string — used for piped secret values (e.g. a token
|
|
2
|
+
* fed via `printf %s "$TOKEN" | compost …`) so they never land in shell
|
|
3
|
+
* history. Returns '' when stdin is an interactive TTY (nothing piped). */
|
|
4
|
+
export async function readStdin() {
|
|
5
|
+
if (process.stdin.isTTY)
|
|
6
|
+
return '';
|
|
7
|
+
const chunks = [];
|
|
8
|
+
for await (const chunk of process.stdin)
|
|
9
|
+
chunks.push(Buffer.from(chunk));
|
|
10
|
+
return Buffer.concat(chunks).toString('utf8');
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=stdin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stdin.js","sourceRoot":"","sources":["../../src/lib/stdin.ts"],"names":[],"mappings":"AAAA;;2EAE2E;AAC3E,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK;QAAE,OAAO,EAAE,CAAA;IAClC,MAAM,MAAM,GAAa,EAAE,CAAA;IAC3B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK;QAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;IACxE,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;AAC/C,CAAC"}
|
|
@@ -1,11 +1,4 @@
|
|
|
1
|
-
import { type
|
|
2
|
-
/** Injectable spawn surface (real `spawnSync` in prod; a fake in tests). */
|
|
3
|
-
export type SpawnImpl = (cmd: string, args: string[], opts: {
|
|
4
|
-
cwd: string;
|
|
5
|
-
env: NodeJS.ProcessEnv;
|
|
6
|
-
encoding: 'utf8';
|
|
7
|
-
maxBuffer: number;
|
|
8
|
-
}) => Pick<SpawnSyncReturns<string>, 'status' | 'stdout' | 'stderr' | 'error'>;
|
|
1
|
+
import { type SpawnImpl } from './nativeRuntime.js';
|
|
9
2
|
/**
|
|
10
3
|
* Native (host) transcription path (#176): shell out to the transcriber
|
|
11
4
|
* package's `app.transcribe_cli` running in a host Python venv, so Apple-Silicon
|
|
@@ -24,7 +17,9 @@ export interface NativeTranscribeOptions {
|
|
|
24
17
|
model?: string;
|
|
25
18
|
/** Optional language hint (recorded; Parakeet v3 auto-detects). */
|
|
26
19
|
language?: string;
|
|
27
|
-
/** Extra env (e.g. HUGGINGFACE_TOKEN for pyannote).
|
|
20
|
+
/** Extra env (e.g. HUGGINGFACE_TOKEN for pyannote). Layered over a *scrubbed*
|
|
21
|
+
* process.env — the child gets PATH/locale/etc. and only the secrets passed
|
|
22
|
+
* here, never the parent's other tokens (LLM API keys). */
|
|
28
23
|
env?: NodeJS.ProcessEnv;
|
|
29
24
|
/** Injectable spawn (tests). Defaults to node:child_process spawnSync. */
|
|
30
25
|
spawnImpl?: SpawnImpl;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transcribeNative.d.ts","sourceRoot":"","sources":["../../src/lib/transcribeNative.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"transcribeNative.d.ts","sourceRoot":"","sources":["../../src/lib/transcribeNative.ts"],"names":[],"mappings":"AAEA,OAAO,EAAgB,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAEjE;;;;;;GAMG;AAEH,MAAM,WAAW,uBAAuB;IACtC,2EAA2E;IAC3E,MAAM,EAAE,MAAM,CAAA;IACd,sEAAsE;IACtE,cAAc,EAAE,MAAM,CAAA;IACtB,mEAAmE;IACnE,MAAM,EAAE,MAAM,CAAA;IACd,2DAA2D;IAC3D,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,mEAAmE;IACnE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;+DAE2D;IAC3D,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;IACvB,0EAA0E;IAC1E,SAAS,CAAC,EAAE,SAAS,CAAA;CACtB;AAED,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAA;IAClB,eAAe,EAAE,MAAM,CAAA;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;iCAEiC;AACjC,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,uBAAuB,GAC5B,sBAAsB,CAgCxB"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { spawnSync } from 'node:child_process';
|
|
2
1
|
import { CompostError } from '../errors.js';
|
|
2
|
+
import { childEnv } from './childEnv.js';
|
|
3
|
+
import { runNativeCli } from './nativeRuntime.js';
|
|
3
4
|
/** Run the native transcriber entrypoint synchronously and return its parsed
|
|
4
5
|
* JSON result. Throws a CompostError on spawn failure, non-zero exit, or a
|
|
5
6
|
* `status: "failed"` payload. */
|
|
@@ -20,33 +21,17 @@ export function transcribeNative(seedPath, sessionId, sourcePath, opts) {
|
|
|
20
21
|
args.push('--model', opts.model);
|
|
21
22
|
if (opts.language)
|
|
22
23
|
args.push('--language', opts.language);
|
|
23
|
-
const
|
|
24
|
-
const res = spawn(opts.python, args, {
|
|
24
|
+
const { parsed, status, stderr } = runNativeCli(opts.python, args, {
|
|
25
25
|
cwd: opts.transcriberDir,
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
26
|
+
// Scrub LLM/other secrets from the inherited env; re-add only what the
|
|
27
|
+
// caller passed (the HF token for pyannote) — least privilege (#236).
|
|
28
|
+
env: childEnv(opts.env),
|
|
29
|
+
label: 'transcriber',
|
|
30
|
+
startHint: 'Run `compost setup` to provision the native transcription venv.',
|
|
31
|
+
...(opts.spawnImpl ? { spawnImpl: opts.spawnImpl } : {}),
|
|
29
32
|
});
|
|
30
|
-
if (
|
|
31
|
-
throw new CompostError('PROVIDER_ERROR', `native
|
|
32
|
-
'Run `compost setup` to provision the native transcription venv.');
|
|
33
|
-
}
|
|
34
|
-
// The entrypoint prints exactly one JSON line; take the last non-empty line.
|
|
35
|
-
const lastLine = (res.stdout || '').trim().split('\n').filter(Boolean).pop() ?? '';
|
|
36
|
-
let parsed;
|
|
37
|
-
try {
|
|
38
|
-
// JSON.parse succeeds on primitives (null, 123, "s"); require an object so a
|
|
39
|
-
// stray non-object line surfaces as the CompostError below, not a raw TypeError.
|
|
40
|
-
const value = JSON.parse(lastLine);
|
|
41
|
-
if (typeof value !== 'object' || value === null)
|
|
42
|
-
throw new Error('not a JSON object');
|
|
43
|
-
parsed = value;
|
|
44
|
-
}
|
|
45
|
-
catch {
|
|
46
|
-
throw new CompostError('PROVIDER_ERROR', `native transcriber produced no parseable result. stderr: ${(res.stderr || '').slice(-400)}`);
|
|
47
|
-
}
|
|
48
|
-
if (res.status !== 0 || parsed.status === 'failed') {
|
|
49
|
-
throw new CompostError('PROVIDER_ERROR', `native transcription failed: ${parsed.error ?? (res.stderr || '').slice(-400)}`);
|
|
33
|
+
if (status !== 0 || parsed.status === 'failed') {
|
|
34
|
+
throw new CompostError('PROVIDER_ERROR', `native transcription failed: ${parsed.error ?? stderr.slice(-400)}`);
|
|
50
35
|
}
|
|
51
36
|
return parsed;
|
|
52
37
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transcribeNative.js","sourceRoot":"","sources":["../../src/lib/transcribeNative.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"transcribeNative.js","sourceRoot":"","sources":["../../src/lib/transcribeNative.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,YAAY,EAAkB,MAAM,oBAAoB,CAAA;AAsCjE;;iCAEiC;AACjC,MAAM,UAAU,gBAAgB,CAC9B,QAAgB,EAChB,SAAiB,EACjB,UAAkB,EAClB,IAA6B;IAE7B,MAAM,IAAI,GAAG;QACX,IAAI;QACJ,oBAAoB;QACpB,aAAa;QACb,QAAQ;QACR,cAAc;QACd,SAAS;QACT,eAAe;QACf,UAAU;QACV,UAAU;QACV,IAAI,CAAC,MAAM;KACZ,CAAA;IACD,IAAI,IAAI,CAAC,KAAK;QAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;IAChD,IAAI,IAAI,CAAC,QAAQ;QAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;IAEzD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,CAAyB,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE;QACzF,GAAG,EAAE,IAAI,CAAC,cAAc;QACxB,uEAAuE;QACvE,sEAAsE;QACtE,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;QACvB,KAAK,EAAE,aAAa;QACpB,SAAS,EAAE,iEAAiE;QAC5E,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACzD,CAAC,CAAA;IACF,IAAI,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/C,MAAM,IAAI,YAAY,CACpB,gBAAgB,EAChB,gCAAgC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CACrE,CAAA;IACH,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* User-level config at `~/.compost/config.toml`: machine-wide answers the
|
|
3
|
+
* setup wizard collects once (model routing, provider tweaks) so every seed
|
|
4
|
+
* scaffolded afterwards inherits them instead of the template's guesses.
|
|
5
|
+
* Seeds stay the source of truth — this file is only an overlay applied at
|
|
6
|
+
* `compost init` time, never read at run time, so a shared seed behaves the
|
|
7
|
+
* same on every machine.
|
|
8
|
+
*/
|
|
9
|
+
export interface UserConfig {
|
|
10
|
+
defaults?: Record<string, string>;
|
|
11
|
+
providers?: Record<string, Record<string, unknown>>;
|
|
12
|
+
}
|
|
13
|
+
export declare function userConfigPath(env?: NodeJS.ProcessEnv): string;
|
|
14
|
+
export declare function loadUserConfig(env?: NodeJS.ProcessEnv): UserConfig | null;
|
|
15
|
+
/** Merge new values into the user config on disk and return its path. */
|
|
16
|
+
export declare function saveUserConfig(update: UserConfig, env?: NodeJS.ProcessEnv): string;
|
|
17
|
+
/** Overlay the user config onto a freshly-rendered seed config.toml. Comments
|
|
18
|
+
* in the template are lost for the overridden file — acceptable at scaffold
|
|
19
|
+
* time, where the researcher hasn't edited anything yet. Returns the input
|
|
20
|
+
* unchanged when there's nothing to overlay. */
|
|
21
|
+
export declare function applyUserConfig(seedConfigToml: string, user: UserConfig | null): string;
|
|
22
|
+
//# sourceMappingURL=userConfig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"userConfig.d.ts","sourceRoot":"","sources":["../../src/lib/userConfig.ts"],"names":[],"mappings":"AAMA;;;;;;;GAOG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;CACpD;AAED,wBAAgB,cAAc,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAG3E;AAED,wBAAgB,cAAc,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,UAAU,GAAG,IAAI,CAiBtF;AAED,yEAAyE;AACzE,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAa/F;AAED;;;gDAGgD;AAChD,wBAAgB,eAAe,CAAC,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI,GAAG,MAAM,CAgBvF"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { homedir } from 'node:os';
|
|
3
|
+
import { dirname, join } from 'node:path';
|
|
4
|
+
import { parse as parseToml, stringify as stringifyToml } from 'smol-toml';
|
|
5
|
+
export function userConfigPath(env = process.env) {
|
|
6
|
+
const home = env.COMPOST_HOME ?? join(homedir(), '.compost');
|
|
7
|
+
return join(home, 'config.toml');
|
|
8
|
+
}
|
|
9
|
+
export function loadUserConfig(env = process.env) {
|
|
10
|
+
const path = userConfigPath(env);
|
|
11
|
+
if (!existsSync(path))
|
|
12
|
+
return null;
|
|
13
|
+
try {
|
|
14
|
+
const parsed = parseToml(readFileSync(path, 'utf8'));
|
|
15
|
+
const out = {};
|
|
16
|
+
if (typeof parsed.defaults === 'object' && parsed.defaults !== null) {
|
|
17
|
+
out.defaults = parsed.defaults;
|
|
18
|
+
}
|
|
19
|
+
if (typeof parsed.providers === 'object' && parsed.providers !== null) {
|
|
20
|
+
out.providers = parsed.providers;
|
|
21
|
+
}
|
|
22
|
+
return out;
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
// A hand-edited broken file must not take `compost init` down with it.
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/** Merge new values into the user config on disk and return its path. */
|
|
30
|
+
export function saveUserConfig(update, env = process.env) {
|
|
31
|
+
const path = userConfigPath(env);
|
|
32
|
+
const existing = loadUserConfig(env) ?? {};
|
|
33
|
+
const merged = {
|
|
34
|
+
defaults: { ...existing.defaults, ...update.defaults },
|
|
35
|
+
providers: { ...existing.providers, ...update.providers },
|
|
36
|
+
};
|
|
37
|
+
const doc = {};
|
|
38
|
+
if (merged.defaults && Object.keys(merged.defaults).length > 0)
|
|
39
|
+
doc.defaults = merged.defaults;
|
|
40
|
+
if (merged.providers && Object.keys(merged.providers).length > 0)
|
|
41
|
+
doc.providers = merged.providers;
|
|
42
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
43
|
+
writeFileSync(path, `${stringifyToml(doc)}\n`, 'utf8');
|
|
44
|
+
return path;
|
|
45
|
+
}
|
|
46
|
+
/** Overlay the user config onto a freshly-rendered seed config.toml. Comments
|
|
47
|
+
* in the template are lost for the overridden file — acceptable at scaffold
|
|
48
|
+
* time, where the researcher hasn't edited anything yet. Returns the input
|
|
49
|
+
* unchanged when there's nothing to overlay. */
|
|
50
|
+
export function applyUserConfig(seedConfigToml, user) {
|
|
51
|
+
if (user === null || (user.defaults === undefined && user.providers === undefined)) {
|
|
52
|
+
return seedConfigToml;
|
|
53
|
+
}
|
|
54
|
+
const doc = parseToml(seedConfigToml);
|
|
55
|
+
if (user.defaults) {
|
|
56
|
+
doc.defaults = { ...doc.defaults, ...user.defaults };
|
|
57
|
+
}
|
|
58
|
+
if (user.providers) {
|
|
59
|
+
const providers = { ...doc.providers };
|
|
60
|
+
for (const [name, settings] of Object.entries(user.providers)) {
|
|
61
|
+
providers[name] = { ...providers[name], ...settings };
|
|
62
|
+
}
|
|
63
|
+
doc.providers = providers;
|
|
64
|
+
}
|
|
65
|
+
return `${stringifyToml(doc)}\n`;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=userConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"userConfig.js","sourceRoot":"","sources":["../../src/lib/userConfig.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/validate.d.ts
CHANGED
|
@@ -12,5 +12,23 @@ export declare function validateEventsExport(path: string): ValidateResult;
|
|
|
12
12
|
* (sanity check of its own shape).
|
|
13
13
|
*/
|
|
14
14
|
export declare function validateCues(path: string): ValidateResult;
|
|
15
|
+
export interface SeedEventsResult {
|
|
16
|
+
ok: boolean;
|
|
17
|
+
checked: number;
|
|
18
|
+
errors: unknown;
|
|
19
|
+
}
|
|
20
|
+
export interface SeedValidateResult {
|
|
21
|
+
ok: boolean;
|
|
22
|
+
seed: string;
|
|
23
|
+
transcripts: ValidateResult[];
|
|
24
|
+
events: SeedEventsResult | null;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Whole-seed validation (#174): validate every session transcript.json and every
|
|
28
|
+
* normalized legacy/*.json against the transcript schema (which already enforces
|
|
29
|
+
* cue kinds and frame triggers via its enums), plus every provenance event in
|
|
30
|
+
* .compost/events.sqlite. Aggregates to a single ok.
|
|
31
|
+
*/
|
|
32
|
+
export declare function validateSeed(seedPath: string): SeedValidateResult;
|
|
15
33
|
export declare function validateFrames(path: string): ValidateResult;
|
|
16
34
|
//# sourceMappingURL=validate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/lib/validate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/lib/validate.ts"],"names":[],"mappings":"AA4DA,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,OAAO,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,OAAO,CAAA;CAChB;AAaD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAU/D;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAwBjE;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAuCzD;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,OAAO,CAAA;IACX,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,OAAO,CAAA;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,OAAO,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,cAAc,EAAE,CAAA;IAC7B,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAAA;CAChC;AAiCD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,kBAAkB,CAsBjE;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAqC3D"}
|
package/dist/lib/validate.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
import { existsSync, readFileSync } from 'node:fs';
|
|
1
|
+
import { existsSync, readdirSync, readFileSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
2
3
|
import { Ajv2020 } from 'ajv/dist/2020.js';
|
|
3
4
|
import addFormatsImport from 'ajv-formats';
|
|
5
|
+
import Database from 'better-sqlite3';
|
|
4
6
|
import { CompostError } from '../errors.js';
|
|
7
|
+
import { eventsDbPath } from './events.js';
|
|
5
8
|
import { CUES_TAXONOMY, EVENTS_SCHEMA, FRAMES_TAXONOMY, TRANSCRIPT_SCHEMA, } from './schemas.generated.js';
|
|
6
9
|
const addFormats = addFormatsImport.default ??
|
|
7
10
|
addFormatsImport;
|
|
@@ -118,6 +121,73 @@ export function validateCues(path) {
|
|
|
118
121
|
errors: errors.length === 0 ? null : errors,
|
|
119
122
|
};
|
|
120
123
|
}
|
|
124
|
+
/** Validate every event row in a seed's .compost/events.sqlite against the
|
|
125
|
+
* events schema. Null columns are stripped (the schema's optional fields are
|
|
126
|
+
* typed strings, and rows carry NULLs for absent ones); payload is parsed and
|
|
127
|
+
* always kept (it is required). Returns null when there is no event log. */
|
|
128
|
+
function validateSeedEvents(dbPath) {
|
|
129
|
+
if (!existsSync(dbPath))
|
|
130
|
+
return null;
|
|
131
|
+
const db = new Database(dbPath, { readonly: true, fileMustExist: true });
|
|
132
|
+
try {
|
|
133
|
+
const rows = db.prepare('SELECT * FROM events').all();
|
|
134
|
+
const v = getEventsValidator();
|
|
135
|
+
const errors = [];
|
|
136
|
+
for (const [i, row] of rows.entries()) {
|
|
137
|
+
const clean = {};
|
|
138
|
+
for (const [k, val] of Object.entries(row)) {
|
|
139
|
+
if (k === 'payload')
|
|
140
|
+
continue;
|
|
141
|
+
if (val !== null)
|
|
142
|
+
clean[k] = val;
|
|
143
|
+
}
|
|
144
|
+
clean.payload =
|
|
145
|
+
typeof row.payload === 'string' ? JSON.parse(row.payload) : (row.payload ?? null);
|
|
146
|
+
if (!v.fn(clean))
|
|
147
|
+
errors.push({ index: i, id: row.id, errors: v.errors() });
|
|
148
|
+
}
|
|
149
|
+
return {
|
|
150
|
+
ok: errors.length === 0,
|
|
151
|
+
checked: rows.length,
|
|
152
|
+
errors: errors.length === 0 ? null : errors,
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
finally {
|
|
156
|
+
db.close();
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Whole-seed validation (#174): validate every session transcript.json and every
|
|
161
|
+
* normalized legacy/*.json against the transcript schema (which already enforces
|
|
162
|
+
* cue kinds and frame triggers via its enums), plus every provenance event in
|
|
163
|
+
* .compost/events.sqlite. Aggregates to a single ok.
|
|
164
|
+
*/
|
|
165
|
+
export function validateSeed(seedPath) {
|
|
166
|
+
if (!existsSync(seedPath)) {
|
|
167
|
+
throw new CompostError('FILE_NOT_FOUND', `No such seed directory: ${seedPath}`);
|
|
168
|
+
}
|
|
169
|
+
const transcripts = [];
|
|
170
|
+
const sessionsDir = join(seedPath, 'sessions');
|
|
171
|
+
if (existsSync(sessionsDir)) {
|
|
172
|
+
for (const entry of readdirSync(sessionsDir)) {
|
|
173
|
+
if (entry === '_inbox' || entry.startsWith('.'))
|
|
174
|
+
continue;
|
|
175
|
+
const tp = join(sessionsDir, entry, 'transcript.json');
|
|
176
|
+
if (existsSync(tp))
|
|
177
|
+
transcripts.push(validateTranscript(tp));
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
const legacyDir = join(seedPath, 'legacy');
|
|
181
|
+
if (existsSync(legacyDir)) {
|
|
182
|
+
for (const f of readdirSync(legacyDir)) {
|
|
183
|
+
if (f.endsWith('.json'))
|
|
184
|
+
transcripts.push(validateTranscript(join(legacyDir, f)));
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
const events = validateSeedEvents(eventsDbPath(seedPath));
|
|
188
|
+
const ok = transcripts.every((t) => t.ok) && (events === null || events.ok);
|
|
189
|
+
return { ok, seed: seedPath, transcripts, events };
|
|
190
|
+
}
|
|
121
191
|
export function validateFrames(path) {
|
|
122
192
|
const data = readJson(path);
|
|
123
193
|
const taxonomy = getFramesTaxonomy();
|
package/dist/lib/validate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/lib/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/lib/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC1C,OAAO,gBAAgB,MAAM,aAAa,CAAA;AAC1C,OAAO,QAAQ,MAAM,gBAAgB,CAAA;AAErC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EACL,aAAa,EACb,aAAa,EACb,eAAe,EACf,iBAAiB,GAClB,MAAM,wBAAwB,CAAA;AAK/B,MAAM,UAAU,GACb,gBAA0D,CAAC,OAAO;IAClE,gBAA4C,CAAA;AAE/C,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;AAC3D,UAAU,CAAC,GAAG,CAAC,CAAA;AASf,IAAI,mBAAmB,GAA6B,IAAI,CAAA;AACxD,IAAI,eAAe,GAA6B,IAAI,CAAA;AAEpD,SAAS,sBAAsB;IAC7B,IAAI,mBAAmB,KAAK,IAAI,EAAE,CAAC;QACjC,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAA;QACzC,mBAAmB,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAA;IACvD,CAAC;IACD,OAAO,mBAAmB,CAAA;AAC5B,CAAC;AAED,SAAS,kBAAkB;IACzB,IAAI,eAAe,KAAK,IAAI,EAAE,CAAC;QAC7B,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;QACrC,eAAe,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAA;IACnD,CAAC;IACD,OAAO,eAAe,CAAA;AACxB,CAAC;AAED,SAAS,eAAe;IACtB,OAAO,aAAmD,CAAA;AAC5D,CAAC;AAED,SAAS,iBAAiB;IACxB,OAAO,eAA2D,CAAA;AACpE,CAAC;AASD,SAAS,QAAQ,CAAC,IAAY;IAC5B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,YAAY,CAAC,gBAAgB,EAAE,iBAAiB,IAAI,EAAE,CAAC,CAAA;IACnE,CAAC;IACD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAA;IAC/C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,YAAY,CAAC,eAAe,EAAE,2BAA2B,IAAI,KAAK,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IAC5F,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;IAC3B,MAAM,CAAC,GAAG,sBAAsB,EAAE,CAAA;IAClC,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA;IACrB,OAAO;QACL,EAAE;QACF,IAAI;QACJ,MAAM,EAAE,wBAAwB;QAChC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE;KAC/B,CAAA;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,4EAA4E;IAC5E,8EAA8E;IAC9E,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;IAC3B,MAAM,CAAC,GAAG,kBAAkB,EAAE,CAAA;IAC9B,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,MAAM,MAAM,GAAc,EAAE,CAAA;QAC5B,KAAK,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YACtC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC;gBAAE,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;QAC/D,CAAC;QACD,OAAO;YACL,EAAE,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;YACvB,IAAI;YACJ,MAAM,EAAE,oBAAoB;YAC5B,MAAM,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM;SAC5C,CAAA;IACH,CAAC;IACD,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA;IACrB,OAAO;QACL,EAAE;QACF,IAAI;QACJ,MAAM,EAAE,oBAAoB;QAC5B,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE;KAC/B,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;IAC3B,MAAM,QAAQ,GAAG,eAAe,EAAE,CAAA;IAClC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;IAE1D,IAAI,KAAK,CAAC,OAAO,CAAE,IAA4B,CAAC,KAAK,CAAC,EAAE,CAAC;QACvD,2CAA2C;QAC3C,MAAM,MAAM,GAAa,EAAE,CAAA;QAC3B,KAAK,MAAM,CAAC,IAAK,IAAkC,CAAC,KAAK,EAAE,CAAC;YAC1D,IACE,OAAO,CAAC,KAAK,QAAQ;gBACrB,CAAC,KAAK,IAAI;gBACV,OAAQ,CAAwB,CAAC,IAAI,KAAK,QAAQ,EAClD,CAAC;gBACD,MAAM,CAAC,IAAI,CAAC,yCAAyC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;YAC3E,CAAC;QACH,CAAC;QACD,OAAO;YACL,EAAE,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;YACvB,IAAI;YACJ,MAAM,EAAE,oBAAoB;YAC5B,MAAM,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM;SAC5C,CAAA;IACH,CAAC;IAED,yEAAyE;IACzE,MAAM,IAAI,GAAI,IAA6C,CAAC,IAAI,IAAI,EAAE,CAAA;IACtE,MAAM,MAAM,GAA4D,EAAE,CAAA;IAC1E,KAAK,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;QACtC,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3D,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAC,CAAA;QAC3E,CAAC;IACH,CAAC;IACD,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;QACvB,IAAI;QACJ,MAAM,EAAE,oBAAoB;QAC5B,MAAM,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM;KAC5C,CAAA;AACH,CAAC;AAeD;;;4EAG4E;AAC5E,SAAS,kBAAkB,CAAC,MAAc;IACxC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAA;IACpC,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAA;IACxE,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC,GAAG,EAAoC,CAAA;QACvF,MAAM,CAAC,GAAG,kBAAkB,EAAE,CAAA;QAC9B,MAAM,MAAM,GAAc,EAAE,CAAA;QAC5B,KAAK,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YACtC,MAAM,KAAK,GAA4B,EAAE,CAAA;YACzC,KAAK,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC3C,IAAI,CAAC,KAAK,SAAS;oBAAE,SAAQ;gBAC7B,IAAI,GAAG,KAAK,IAAI;oBAAE,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAA;YAClC,CAAC;YACD,KAAK,CAAC,OAAO;gBACX,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,CAAA;YACnF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;gBAAE,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;QAC7E,CAAC;QACD,OAAO;YACL,EAAE,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;YACvB,OAAO,EAAE,IAAI,CAAC,MAAM;YACpB,MAAM,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM;SAC5C,CAAA;IACH,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAA;IACZ,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,YAAY,CAAC,gBAAgB,EAAE,2BAA2B,QAAQ,EAAE,CAAC,CAAA;IACjF,CAAC;IACD,MAAM,WAAW,GAAqB,EAAE,CAAA;IACxC,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;IAC9C,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5B,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7C,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAQ;YACzD,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAA;YACtD,IAAI,UAAU,CAAC,EAAE,CAAC;gBAAE,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,CAAA;QAC9D,CAAC;IACH,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;IAC1C,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1B,KAAK,MAAM,CAAC,IAAI,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;YACvC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAAE,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QACnF,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GAAG,kBAAkB,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAA;IACzD,MAAM,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,EAAE,CAAC,CAAA;IAC3E,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,CAAA;AACpD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;IAC3B,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAA;IACpC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAA;IAEhE,IAAI,KAAK,CAAC,OAAO,CAAE,IAA+B,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7D,MAAM,MAAM,GAAa,EAAE,CAAA;QAC3B,KAAK,MAAM,CAAC,IAAK,IAAqC,CAAC,QAAQ,EAAE,CAAC;YAChE,IACE,OAAO,CAAC,KAAK,QAAQ;gBACrB,CAAC,KAAK,IAAI;gBACV,OAAQ,CAA2B,CAAC,OAAO,KAAK,QAAQ,EACxD,CAAC;gBACD,MAAM,CAAC,IAAI,CAAC,4CAA4C,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;YAC9E,CAAC;QACH,CAAC;QACD,OAAO;YACL,EAAE,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;YACvB,IAAI;YACJ,MAAM,EAAE,sBAAsB;YAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM;SAC5C,CAAA;IACH,CAAC;IAED,MAAM,MAAM,GAAI,IAAkD,CAAC,MAAM,IAAI,EAAE,CAAA;IAC/E,MAAM,MAAM,GAA+D,EAAE,CAAA;IAC7E,KAAK,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;QAC1C,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YACrE,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,wBAAwB,EAAE,CAAC,CAAA;QACrF,CAAC;IACH,CAAC;IACD,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;QACvB,IAAI;QACJ,MAAM,EAAE,sBAAsB;QAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM;KAC5C,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { FetchLike } from '../llm/types.js';
|
|
2
|
+
export declare const PACKAGE_NAME = "@they-juanreina/compost-cli";
|
|
3
|
+
export declare const UPGRADE_COMMAND = "npm install -g @they-juanreina/compost-cli@latest";
|
|
4
|
+
/** The version of the running CLI, read from the package manifest (single
|
|
5
|
+
* source of truth — works for src/lib and dist/lib alike, both two levels
|
|
6
|
+
* below the package root). */
|
|
7
|
+
export declare function currentCliVersion(): string;
|
|
8
|
+
/**
|
|
9
|
+
* Semver-ish comparison sufficient for our own release stream: numeric
|
|
10
|
+
* major.minor.patch, with any prerelease ordering BELOW its release
|
|
11
|
+
* (`0.1.0-rc.2 < 0.1.0 < 0.1.2`). Returns <0, 0, >0 like a comparator.
|
|
12
|
+
*/
|
|
13
|
+
export declare function compareVersions(a: string, b: string): number;
|
|
14
|
+
export interface VersionStatus {
|
|
15
|
+
current: string;
|
|
16
|
+
latest: string;
|
|
17
|
+
behind: boolean;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Best-effort staleness probe against the npm registry (#245). Returns null on
|
|
21
|
+
* ANY failure — offline machines and registry hiccups must never degrade
|
|
22
|
+
* `compost setup`, they just skip the check. The timeout is deliberately
|
|
23
|
+
* short: this is a courtesy warning, not a gate.
|
|
24
|
+
*/
|
|
25
|
+
export declare function checkVersionStatus(deps: {
|
|
26
|
+
fetchImpl?: FetchLike;
|
|
27
|
+
current?: string;
|
|
28
|
+
timeoutMs?: number;
|
|
29
|
+
}): Promise<VersionStatus | null>;
|
|
30
|
+
//# sourceMappingURL=version.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/lib/version.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAIhD,eAAO,MAAM,YAAY,gCAAgC,CAAA;AACzD,eAAO,MAAM,eAAe,sDAA0C,CAAA;AAEtE;;8BAE8B;AAC9B,wBAAgB,iBAAiB,IAAI,MAAM,CAK1C;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAkB5D;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,OAAO,CAAA;CAChB;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE;IAC7C,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAiBhC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { dirname, join } from 'node:path';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
import { fetchWithTimeout, resolveFetch } from '../llm/http.js';
|
|
5
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
6
|
+
export const PACKAGE_NAME = '@they-juanreina/compost-cli';
|
|
7
|
+
export const UPGRADE_COMMAND = `npm install -g ${PACKAGE_NAME}@latest`;
|
|
8
|
+
/** The version of the running CLI, read from the package manifest (single
|
|
9
|
+
* source of truth — works for src/lib and dist/lib alike, both two levels
|
|
10
|
+
* below the package root). */
|
|
11
|
+
export function currentCliVersion() {
|
|
12
|
+
const manifest = JSON.parse(readFileSync(join(__dirname, '..', '..', 'package.json'), 'utf8'));
|
|
13
|
+
return manifest.version ?? '0.0.0';
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Semver-ish comparison sufficient for our own release stream: numeric
|
|
17
|
+
* major.minor.patch, with any prerelease ordering BELOW its release
|
|
18
|
+
* (`0.1.0-rc.2 < 0.1.0 < 0.1.2`). Returns <0, 0, >0 like a comparator.
|
|
19
|
+
*/
|
|
20
|
+
export function compareVersions(a, b) {
|
|
21
|
+
const parse = (v) => {
|
|
22
|
+
const [core = '', ...preParts] = v.replace(/^v/, '').split('-');
|
|
23
|
+
return {
|
|
24
|
+
nums: core.split('.').map((n) => Number.parseInt(n, 10) || 0),
|
|
25
|
+
pre: preParts.join('-'),
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
const pa = parse(a);
|
|
29
|
+
const pb = parse(b);
|
|
30
|
+
for (let i = 0; i < 3; i++) {
|
|
31
|
+
const diff = (pa.nums[i] ?? 0) - (pb.nums[i] ?? 0);
|
|
32
|
+
if (diff !== 0)
|
|
33
|
+
return diff;
|
|
34
|
+
}
|
|
35
|
+
if (pa.pre === pb.pre)
|
|
36
|
+
return 0;
|
|
37
|
+
if (pa.pre === '')
|
|
38
|
+
return 1; // release > its prereleases
|
|
39
|
+
if (pb.pre === '')
|
|
40
|
+
return -1;
|
|
41
|
+
return pa.pre < pb.pre ? -1 : 1;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Best-effort staleness probe against the npm registry (#245). Returns null on
|
|
45
|
+
* ANY failure — offline machines and registry hiccups must never degrade
|
|
46
|
+
* `compost setup`, they just skip the check. The timeout is deliberately
|
|
47
|
+
* short: this is a courtesy warning, not a gate.
|
|
48
|
+
*/
|
|
49
|
+
export async function checkVersionStatus(deps) {
|
|
50
|
+
const fetchImpl = resolveFetch(deps.fetchImpl);
|
|
51
|
+
const current = deps.current ?? currentCliVersion();
|
|
52
|
+
try {
|
|
53
|
+
const res = await fetchWithTimeout(fetchImpl, `https://registry.npmjs.org/-/package/${PACKAGE_NAME}/dist-tags`, { method: 'GET' }, deps.timeoutMs ?? 2500);
|
|
54
|
+
if (!res.ok)
|
|
55
|
+
return null;
|
|
56
|
+
const tags = (await res.json());
|
|
57
|
+
if (typeof tags.latest !== 'string')
|
|
58
|
+
return null;
|
|
59
|
+
return { current, latest: tags.latest, behind: compareVersions(current, tags.latest) < 0 };
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/lib/version.ts"],"names":[],"mappings":"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"}
|
package/dist/llm/adapter.d.ts
CHANGED
|
@@ -22,6 +22,11 @@ export declare class LLMAdapter {
|
|
|
22
22
|
maxTokens?: number;
|
|
23
23
|
}): Promise<ChatResponse>;
|
|
24
24
|
embed(task: string, input: string[]): Promise<EmbedResponse>;
|
|
25
|
+
/** Turn a 401/403 from a key-requiring provider into an actionable
|
|
26
|
+
* PROVIDER_AUTH error (the key is present but rejected — revoked/expired/wrong
|
|
27
|
+
* scope), instead of a raw `POST … → 401` string surfacing as code INTERNAL.
|
|
28
|
+
* Mirrors the HF-token UX. Non-auth errors pass through unchanged. */
|
|
29
|
+
private tagAuthError;
|
|
25
30
|
/** Fail fast with an actionable message when a task routes to a key-requiring
|
|
26
31
|
* provider whose key isn't set — instead of a raw 401 from the HTTP layer. A
|
|
27
32
|
* provider needs a key iff it declares `api_key_env` in [providers] (local
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/llm/adapter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,aAAa,EAA+C,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/llm/adapter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,aAAa,EAA+C,MAAM,kBAAkB,CAAA;AAMlG,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,aAAa,EACb,SAAS,EACT,QAAQ,EACR,cAAc,EACf,MAAM,YAAY,CAAA;AAEnB,MAAM,WAAW,cAAc;IAC7B,4EAA4E;IAC5E,SAAS,CAAC,EAAE,SAAS,CAAA;CACtB;AAED,qBAAa,UAAU;IAInB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAJvB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA8B;gBAGrC,MAAM,EAAE,aAAa,EACrB,IAAI,GAAE,cAAmB;IAG5C,4DAA4D;IAC5D,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ;IAmCnC,4EAA4E;IAC5E,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE;IAQxD,IAAI,CACR,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,WAAW,EAAE,EACvB,KAAK,GAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAO,GACzF,OAAO,CAAC,YAAY,CAAC;IAUlB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC;IAUlE;;;0EAGsE;IACtE,OAAO,CAAC,YAAY;IAUpB;;;gDAG4C;IAC5C,OAAO,CAAC,oBAAoB;IAW5B,oFAAoF;IAC9E,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CAqB3D"}
|
package/dist/llm/adapter.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { CompostError } from '../errors.js';
|
|
2
2
|
import { parseRoute, providerApiKey, providerBaseUrl } from '../lib/config.js';
|
|
3
|
+
import { failedHealth, HttpError } from './http.js';
|
|
3
4
|
import { AnthropicProvider } from './providers/anthropic.js';
|
|
4
5
|
import { LMStudioProvider } from './providers/lmstudio.js';
|
|
5
6
|
import { OllamaProvider } from './providers/ollama.js';
|
|
@@ -19,9 +20,11 @@ export class LLMAdapter {
|
|
|
19
20
|
return cached;
|
|
20
21
|
const baseUrl = providerBaseUrl(this.config, name);
|
|
21
22
|
const apiKey = providerApiKey(this.config, name);
|
|
23
|
+
const timeoutMs = this.config.providers[name]?.timeout_ms;
|
|
22
24
|
const cfg = {
|
|
23
25
|
baseUrl,
|
|
24
26
|
...(apiKey !== undefined ? { apiKey } : {}),
|
|
27
|
+
...(timeoutMs !== undefined ? { timeoutMs } : {}),
|
|
25
28
|
...(this.opts.fetchImpl ? { fetchImpl: this.opts.fetchImpl } : {}),
|
|
26
29
|
};
|
|
27
30
|
let provider;
|
|
@@ -55,12 +58,33 @@ export class LLMAdapter {
|
|
|
55
58
|
async chat(task, messages, extra = {}) {
|
|
56
59
|
const { provider, model } = this.resolveTask(task);
|
|
57
60
|
this.assertProviderHasKey(task, provider);
|
|
58
|
-
|
|
61
|
+
try {
|
|
62
|
+
return await this.getProvider(provider).chat({ model, messages, ...extra });
|
|
63
|
+
}
|
|
64
|
+
catch (err) {
|
|
65
|
+
throw this.tagAuthError(err, provider);
|
|
66
|
+
}
|
|
59
67
|
}
|
|
60
68
|
async embed(task, input) {
|
|
61
69
|
const { provider, model } = this.resolveTask(task);
|
|
62
70
|
this.assertProviderHasKey(task, provider);
|
|
63
|
-
|
|
71
|
+
try {
|
|
72
|
+
return await this.getProvider(provider).embed({ model, input });
|
|
73
|
+
}
|
|
74
|
+
catch (err) {
|
|
75
|
+
throw this.tagAuthError(err, provider);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/** Turn a 401/403 from a key-requiring provider into an actionable
|
|
79
|
+
* PROVIDER_AUTH error (the key is present but rejected — revoked/expired/wrong
|
|
80
|
+
* scope), instead of a raw `POST … → 401` string surfacing as code INTERNAL.
|
|
81
|
+
* Mirrors the HF-token UX. Non-auth errors pass through unchanged. */
|
|
82
|
+
tagAuthError(err, provider) {
|
|
83
|
+
if (!(err instanceof HttpError) || (err.status !== 401 && err.status !== 403))
|
|
84
|
+
return err;
|
|
85
|
+
const envName = this.config.providers[provider]?.api_key_env;
|
|
86
|
+
const renew = envName ? `renew it and update ${envName}` : `renew the ${provider} API key`;
|
|
87
|
+
return new CompostError('PROVIDER_AUTH', `${provider} rejected the API key (HTTP ${err.status}) — it is revoked, expired, or lacks the required scope. ${renew}, or route to a local model (e.g. \`compost chat --task quick_chat\`).`);
|
|
64
88
|
}
|
|
65
89
|
/** Fail fast with an actionable message when a task routes to a key-requiring
|
|
66
90
|
* provider whose key isn't set — instead of a raw 401 from the HTTP layer. A
|
|
@@ -92,12 +116,7 @@ export class LLMAdapter {
|
|
|
92
116
|
out[name] = await this.getProvider(name).health();
|
|
93
117
|
}
|
|
94
118
|
catch (err) {
|
|
95
|
-
out[name] =
|
|
96
|
-
ok: false,
|
|
97
|
-
latency_ms: 0,
|
|
98
|
-
model_list: [],
|
|
99
|
-
error: err instanceof Error ? err.message : String(err),
|
|
100
|
-
};
|
|
119
|
+
out[name] = failedHealth(err);
|
|
101
120
|
}
|
|
102
121
|
}));
|
|
103
122
|
return out;
|