@they-juanreina/compost-cli 0.1.1 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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/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 +59 -0
- package/dist/commands/import.js.map +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +1 -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 +6 -4
- 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 +2 -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 +143 -0
- package/dist/commands/secrets.js.map +1 -0
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +90 -1
- package/dist/commands/setup.js.map +1 -1
- 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 +13 -2
- 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/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/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/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 +32 -1
- package/dist/lib/artifacts.d.ts.map +1 -1
- package/dist/lib/artifacts.js +156 -22
- package/dist/lib/artifacts.js.map +1 -1
- package/dist/lib/blame.d.ts.map +1 -1
- package/dist/lib/blame.js +3 -2
- package/dist/lib/blame.js.map +1 -1
- 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 +34 -1
- package/dist/lib/events.d.ts.map +1 -1
- package/dist/lib/events.js +35 -1
- 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 -0
- package/dist/lib/journal.d.ts.map +1 -1
- package/dist/lib/journal.js +58 -2
- package/dist/lib/journal.js.map +1 -1
- package/dist/lib/legacyNative.d.ts +24 -0
- package/dist/lib/legacyNative.d.ts.map +1 -0
- package/dist/lib/legacyNative.js +51 -0
- package/dist/lib/legacyNative.js.map +1 -0
- package/dist/lib/migrate.d.ts.map +1 -1
- package/dist/lib/migrate.js +1 -0
- package/dist/lib/migrate.js.map +1 -1
- package/dist/lib/nativeRuntime.d.ts +6 -3
- package/dist/lib/nativeRuntime.d.ts.map +1 -1
- package/dist/lib/nativeRuntime.js +6 -3
- package/dist/lib/nativeRuntime.js.map +1 -1
- package/dist/lib/provisionNative.js +1 -1
- 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/rerun.d.ts +51 -0
- package/dist/lib/rerun.d.ts.map +1 -0
- package/dist/lib/rerun.js +166 -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 +12 -10
- package/dist/lib/retrieve.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 +507 -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.map +1 -1
- package/dist/lib/seedResolve.js +1 -0
- 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 +47 -0
- package/dist/lib/session.js.map +1 -1
- package/dist/lib/setup.d.ts +5 -0
- package/dist/lib/setup.d.ts.map +1 -1
- package/dist/lib/setup.js +78 -14
- package/dist/lib/setup.js.map +1 -1
- package/dist/lib/setupWizard.d.ts +51 -0
- package/dist/lib/setupWizard.d.ts.map +1 -0
- package/dist/lib/setupWizard.js +223 -0
- package/dist/lib/setupWizard.js.map +1 -0
- package/dist/lib/snap.d.ts.map +1 -1
- package/dist/lib/snap.js +2 -5
- 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/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 +70 -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 +73 -0
- package/dist/lib/version.js.map +1 -0
- package/dist/llm/adapter.d.ts.map +1 -1
- package/dist/llm/adapter.js +2 -0
- package/dist/llm/adapter.js.map +1 -1
- package/dist/llm/providers/ollama.d.ts.map +1 -1
- package/dist/llm/providers/ollama.js +6 -0
- package/dist/llm/providers/ollama.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 +81 -9
- package/dist/loops/legacy_worker.js.map +1 -1
- package/dist/loops/supervisor.d.ts +3 -0
- package/dist/loops/supervisor.d.ts.map +1 -1
- package/dist/loops/supervisor.js +12 -0
- 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.map +1 -1
- package/dist/loops/transcribe_worker.js +2 -4
- 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 +22 -2
- package/dist/output.js.map +1 -1
- package/dist/render/human.d.ts +20 -0
- package/dist/render/human.d.ts.map +1 -0
- package/dist/render/human.js +54 -0
- package/dist/render/human.js.map +1 -0
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +17 -2
- package/dist/router.js.map +1 -1
- package/package.json +18 -5
- package/templates/config.toml +6 -1
- package/transcriber/app/__init__.py +3 -0
- package/transcriber/app/asr.py +198 -0
- package/transcriber/app/asr_parakeet.py +174 -0
- package/transcriber/app/cue_parser.py +110 -0
- package/transcriber/app/diarization.py +330 -0
- package/transcriber/app/frame_annotation.py +77 -0
- package/transcriber/app/frames.py +130 -0
- package/transcriber/app/health.py +70 -0
- package/transcriber/app/legacy.py +355 -0
- package/transcriber/app/legacy_cli.py +90 -0
- package/transcriber/app/main.py +30 -0
- package/transcriber/app/pipeline.py +210 -0
- package/transcriber/app/pptx_export.py +42 -0
- package/transcriber/app/prosody.py +128 -0
- package/transcriber/app/routes/__init__.py +1 -0
- package/transcriber/app/routes/legacy.py +117 -0
- package/transcriber/app/routes/transcribe.py +133 -0
- package/transcriber/app/shot_change.py +74 -0
- package/transcriber/app/silence_typer.py +144 -0
- package/transcriber/app/transcribe_cli.py +82 -0
- package/transcriber/app/vad.py +216 -0
- package/transcriber/pyproject.toml +56 -0
package/dist/lib/snap.js
CHANGED
|
@@ -16,11 +16,8 @@ export function parseTimestamp(input) {
|
|
|
16
16
|
throw new CompostError('INVALID_INPUT', `Bad time component "${p}"`);
|
|
17
17
|
return Number(p);
|
|
18
18
|
});
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
seconds = nums[0] * 3600 + nums[1] * 60 + nums[2];
|
|
22
|
-
else
|
|
23
|
-
seconds = nums[0] * 60 + nums[1];
|
|
19
|
+
const [a = 0, b = 0, c = 0] = nums;
|
|
20
|
+
const seconds = nums.length === 3 ? a * 3600 + b * 60 + c : a * 60 + b;
|
|
24
21
|
return Math.round(seconds * 1000);
|
|
25
22
|
}
|
|
26
23
|
throw new CompostError('INVALID_INPUT', `Unrecognized timestamp "${input}" (use ms, mm:ss, or hh:mm:ss)`);
|
package/dist/lib/snap.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snap.js","sourceRoot":"","sources":["../../src/lib/snap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AACzF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAU3C,MAAM,WAAW,GAAG,GAAG,CAAA;AACvB,MAAM,YAAY,GAAG,GAAG,CAAA;AAExB,oEAAoE;AACpE,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;IACxB,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAA;IACzC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC5B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YAC3B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC1B,MAAM,IAAI,YAAY,CAAC,eAAe,EAAE,uBAAuB,CAAC,GAAG,CAAC,CAAA;YACtE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAA;QAClB,CAAC,CAAC,CAAA;QACF,
|
|
1
|
+
{"version":3,"file":"snap.js","sourceRoot":"","sources":["../../src/lib/snap.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { Transcript, TranscriptSpeaker } from './transcript.js';
|
|
2
|
+
/**
|
|
3
|
+
* Speaker labeling (#177). Diarization emits cluster ids (S0, S1, … — pyannote's
|
|
4
|
+
* SPEAKER_NN canonicalized to the schema's S{n} form) with name == id; this maps
|
|
5
|
+
* them to real names. The map is applied to transcript.json
|
|
6
|
+
* AND persisted to a `speakers.json` sidecar next to it, so re-transcription
|
|
7
|
+
* re-applies the names (diarization cluster ids are stable per session).
|
|
8
|
+
*/
|
|
9
|
+
export type SpeakerType = TranscriptSpeaker['type'];
|
|
10
|
+
export interface SpeakerLabel {
|
|
11
|
+
name?: string;
|
|
12
|
+
type?: SpeakerType;
|
|
13
|
+
}
|
|
14
|
+
export type SpeakerMap = Record<string, SpeakerLabel>;
|
|
15
|
+
export declare function sidecarPath(seedPath: string, session: string): string;
|
|
16
|
+
/** Apply a label map to a transcript's speakers[] in place. Returns the cluster
|
|
17
|
+
* ids that matched a real speaker and the map keys that matched none. */
|
|
18
|
+
export declare function applyLabels(transcript: Transcript, map: SpeakerMap): {
|
|
19
|
+
applied: string[];
|
|
20
|
+
unmatched: string[];
|
|
21
|
+
};
|
|
22
|
+
export declare function readSidecar(path: string): SpeakerMap;
|
|
23
|
+
export interface LabelResult {
|
|
24
|
+
session: string;
|
|
25
|
+
applied: string[];
|
|
26
|
+
unmatched: string[];
|
|
27
|
+
transcript_path: string;
|
|
28
|
+
sidecar_path: string;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Label a session's speakers: apply the map to transcript.json, then merge it
|
|
32
|
+
* into the persisted speakers.json sidecar so it survives re-transcription.
|
|
33
|
+
*/
|
|
34
|
+
export declare function labelSession(seedPath: string, session: string, map: SpeakerMap): LabelResult;
|
|
35
|
+
/**
|
|
36
|
+
* Re-apply a session's persisted speaker labels to a freshly-written
|
|
37
|
+
* transcript.json (called from the transcribe finalize step). No-op when there
|
|
38
|
+
* is no sidecar. Returns the cluster ids relabeled.
|
|
39
|
+
*/
|
|
40
|
+
export declare function applySidecar(transcriptJsonPath: string): string[];
|
|
41
|
+
//# sourceMappingURL=speakers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"speakers.d.ts","sourceRoot":"","sources":["../../src/lib/speakers.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAEpE;;;;;;GAMG;AAEH,MAAM,MAAM,WAAW,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAA;AAEnD,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,WAAW,CAAA;CACnB;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;AAErD,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAErE;AAMD;yEACyE;AACzE,wBAAgB,WAAW,CACzB,UAAU,EAAE,UAAU,EACtB,GAAG,EAAE,UAAU,GACd;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAA;CAAE,CAY5C;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAQpD;AAMD,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,eAAe,EAAE,MAAM,CAAA;IACvB,YAAY,EAAE,MAAM,CAAA;CACrB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,GAAG,WAAW,CAiB5F;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,kBAAkB,EAAE,MAAM,GAAG,MAAM,EAAE,CAUjE"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { existsSync, readFileSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { CompostError } from '../errors.js';
|
|
4
|
+
export function sidecarPath(seedPath, session) {
|
|
5
|
+
return join(seedPath, 'sessions', session, 'speakers.json');
|
|
6
|
+
}
|
|
7
|
+
function transcriptPath(seedPath, session) {
|
|
8
|
+
return join(seedPath, 'sessions', session, 'transcript.json');
|
|
9
|
+
}
|
|
10
|
+
/** Apply a label map to a transcript's speakers[] in place. Returns the cluster
|
|
11
|
+
* ids that matched a real speaker and the map keys that matched none. */
|
|
12
|
+
export function applyLabels(transcript, map) {
|
|
13
|
+
const ids = new Set(transcript.speakers.map((s) => s.id));
|
|
14
|
+
const applied = [];
|
|
15
|
+
for (const sp of transcript.speakers) {
|
|
16
|
+
const label = map[sp.id];
|
|
17
|
+
if (label === undefined)
|
|
18
|
+
continue;
|
|
19
|
+
if (label.name !== undefined)
|
|
20
|
+
sp.name = label.name;
|
|
21
|
+
if (label.type !== undefined)
|
|
22
|
+
sp.type = label.type;
|
|
23
|
+
applied.push(sp.id);
|
|
24
|
+
}
|
|
25
|
+
const unmatched = Object.keys(map).filter((id) => !ids.has(id));
|
|
26
|
+
return { applied, unmatched };
|
|
27
|
+
}
|
|
28
|
+
export function readSidecar(path) {
|
|
29
|
+
if (!existsSync(path))
|
|
30
|
+
return {};
|
|
31
|
+
try {
|
|
32
|
+
const parsed = JSON.parse(readFileSync(path, 'utf8'));
|
|
33
|
+
return parsed !== null && typeof parsed === 'object' ? parsed : {};
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return {};
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
function writeJson(path, data) {
|
|
40
|
+
writeFileSync(path, `${JSON.stringify(data, null, 2)}\n`, 'utf8');
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Label a session's speakers: apply the map to transcript.json, then merge it
|
|
44
|
+
* into the persisted speakers.json sidecar so it survives re-transcription.
|
|
45
|
+
*/
|
|
46
|
+
export function labelSession(seedPath, session, map) {
|
|
47
|
+
const tPath = transcriptPath(seedPath, session);
|
|
48
|
+
if (!existsSync(tPath)) {
|
|
49
|
+
throw new CompostError('FILE_NOT_FOUND', `No transcript.json for session ${session} — transcribe it before labeling.`);
|
|
50
|
+
}
|
|
51
|
+
const transcript = JSON.parse(readFileSync(tPath, 'utf8'));
|
|
52
|
+
const { applied, unmatched } = applyLabels(transcript, map);
|
|
53
|
+
writeJson(tPath, transcript);
|
|
54
|
+
const sPath = sidecarPath(seedPath, session);
|
|
55
|
+
const merged = { ...readSidecar(sPath), ...map };
|
|
56
|
+
writeJson(sPath, merged);
|
|
57
|
+
return { session, applied, unmatched, transcript_path: tPath, sidecar_path: sPath };
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Re-apply a session's persisted speaker labels to a freshly-written
|
|
61
|
+
* transcript.json (called from the transcribe finalize step). No-op when there
|
|
62
|
+
* is no sidecar. Returns the cluster ids relabeled.
|
|
63
|
+
*/
|
|
64
|
+
export function applySidecar(transcriptJsonPath) {
|
|
65
|
+
const dir = transcriptJsonPath.slice(0, transcriptJsonPath.lastIndexOf('/'));
|
|
66
|
+
const sPath = join(dir, 'speakers.json');
|
|
67
|
+
if (!existsSync(sPath) || !existsSync(transcriptJsonPath))
|
|
68
|
+
return [];
|
|
69
|
+
const map = readSidecar(sPath);
|
|
70
|
+
if (Object.keys(map).length === 0)
|
|
71
|
+
return [];
|
|
72
|
+
const transcript = JSON.parse(readFileSync(transcriptJsonPath, 'utf8'));
|
|
73
|
+
const { applied } = applyLabels(transcript, map);
|
|
74
|
+
if (applied.length > 0)
|
|
75
|
+
writeJson(transcriptJsonPath, transcript);
|
|
76
|
+
return applied;
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=speakers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"speakers.js","sourceRoot":"","sources":["../../src/lib/speakers.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/status.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/lib/status.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/lib/status.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,aAAa,CAAA;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,MAAM,EAAE,UAAU,CAAA;IAClB;4DACwD;IACxD,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,cAAc,EAAE,KAAK,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,UAAU,EAAE,CAAA;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,MAAM,IAAI,CAAA;CACjB;AAED,wBAAgB,YAAY,CAAC,IAAI,GAAE,aAAkB,GAAG,cAAc,CAgCrE"}
|
package/dist/lib/status.js
CHANGED
|
@@ -2,6 +2,7 @@ import { existsSync, readdirSync, readFileSync, statSync } from 'node:fs';
|
|
|
2
2
|
import { join, resolve } from 'node:path';
|
|
3
3
|
import { CompostError } from '../errors.js';
|
|
4
4
|
import { isCanonicalSession } from './canonicalSessions.js';
|
|
5
|
+
import { JobQueue, stateDbPath } from './queue.js';
|
|
5
6
|
export function gatherStatus(opts = {}) {
|
|
6
7
|
const cwd = opts.cwd ?? process.cwd();
|
|
7
8
|
const now = (opts.now ?? (() => new Date()))();
|
|
@@ -30,6 +31,13 @@ export function gatherStatus(opts = {}) {
|
|
|
30
31
|
function readSeed(name, path) {
|
|
31
32
|
const frontmatter = readFrontmatter(join(path, 'seed.md'));
|
|
32
33
|
const warnings = [];
|
|
34
|
+
// A session without transcript.json counts as "queued" below, but if its job
|
|
35
|
+
// burned all attempts nothing will ever process it — surface that here so
|
|
36
|
+
// "queued" isn't read as "in progress" (#239).
|
|
37
|
+
const deadJobs = countDeadJobs(path);
|
|
38
|
+
if (deadJobs > 0) {
|
|
39
|
+
warnings.push(`${deadJobs} permanently failed job(s) in the queue — run \`compost jobs requeue\``);
|
|
40
|
+
}
|
|
33
41
|
return {
|
|
34
42
|
name,
|
|
35
43
|
path,
|
|
@@ -48,6 +56,19 @@ function readSeed(name, path) {
|
|
|
48
56
|
warnings,
|
|
49
57
|
};
|
|
50
58
|
}
|
|
59
|
+
function countDeadJobs(seedPath) {
|
|
60
|
+
// Guard on existence: status is read-only and must not scaffold .compost/
|
|
61
|
+
// state into a seed that never ran the watcher.
|
|
62
|
+
if (!existsSync(stateDbPath(seedPath)))
|
|
63
|
+
return 0;
|
|
64
|
+
const queue = new JobQueue(stateDbPath(seedPath));
|
|
65
|
+
try {
|
|
66
|
+
return queue.counts().failed;
|
|
67
|
+
}
|
|
68
|
+
finally {
|
|
69
|
+
queue.close();
|
|
70
|
+
}
|
|
71
|
+
}
|
|
51
72
|
function countSessions(sessionsDir, warnings) {
|
|
52
73
|
const counts = { total: 0, transcribed: 0, queued: 0, inbox: 0 };
|
|
53
74
|
if (!existsSync(sessionsDir))
|
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,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":"AA2DA,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,6 +1,8 @@
|
|
|
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';
|
|
5
7
|
import { CUES_TAXONOMY, EVENTS_SCHEMA, FRAMES_TAXONOMY, TRANSCRIPT_SCHEMA, } from './schemas.generated.js';
|
|
6
8
|
const addFormats = addFormatsImport.default ??
|
|
@@ -118,6 +120,73 @@ export function validateCues(path) {
|
|
|
118
120
|
errors: errors.length === 0 ? null : errors,
|
|
119
121
|
};
|
|
120
122
|
}
|
|
123
|
+
/** Validate every event row in a seed's .compost/events.sqlite against the
|
|
124
|
+
* events schema. Null columns are stripped (the schema's optional fields are
|
|
125
|
+
* typed strings, and rows carry NULLs for absent ones); payload is parsed and
|
|
126
|
+
* always kept (it is required). Returns null when there is no event log. */
|
|
127
|
+
function validateSeedEvents(dbPath) {
|
|
128
|
+
if (!existsSync(dbPath))
|
|
129
|
+
return null;
|
|
130
|
+
const db = new Database(dbPath, { readonly: true, fileMustExist: true });
|
|
131
|
+
try {
|
|
132
|
+
const rows = db.prepare('SELECT * FROM events').all();
|
|
133
|
+
const v = getEventsValidator();
|
|
134
|
+
const errors = [];
|
|
135
|
+
for (const [i, row] of rows.entries()) {
|
|
136
|
+
const clean = {};
|
|
137
|
+
for (const [k, val] of Object.entries(row)) {
|
|
138
|
+
if (k === 'payload')
|
|
139
|
+
continue;
|
|
140
|
+
if (val !== null)
|
|
141
|
+
clean[k] = val;
|
|
142
|
+
}
|
|
143
|
+
clean.payload =
|
|
144
|
+
typeof row.payload === 'string' ? JSON.parse(row.payload) : (row.payload ?? null);
|
|
145
|
+
if (!v.fn(clean))
|
|
146
|
+
errors.push({ index: i, id: row.id, errors: v.errors() });
|
|
147
|
+
}
|
|
148
|
+
return {
|
|
149
|
+
ok: errors.length === 0,
|
|
150
|
+
checked: rows.length,
|
|
151
|
+
errors: errors.length === 0 ? null : errors,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
finally {
|
|
155
|
+
db.close();
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Whole-seed validation (#174): validate every session transcript.json and every
|
|
160
|
+
* normalized legacy/*.json against the transcript schema (which already enforces
|
|
161
|
+
* cue kinds and frame triggers via its enums), plus every provenance event in
|
|
162
|
+
* .compost/events.sqlite. Aggregates to a single ok.
|
|
163
|
+
*/
|
|
164
|
+
export function validateSeed(seedPath) {
|
|
165
|
+
if (!existsSync(seedPath)) {
|
|
166
|
+
throw new CompostError('FILE_NOT_FOUND', `No such seed directory: ${seedPath}`);
|
|
167
|
+
}
|
|
168
|
+
const transcripts = [];
|
|
169
|
+
const sessionsDir = join(seedPath, 'sessions');
|
|
170
|
+
if (existsSync(sessionsDir)) {
|
|
171
|
+
for (const entry of readdirSync(sessionsDir)) {
|
|
172
|
+
if (entry === '_inbox' || entry.startsWith('.'))
|
|
173
|
+
continue;
|
|
174
|
+
const tp = join(sessionsDir, entry, 'transcript.json');
|
|
175
|
+
if (existsSync(tp))
|
|
176
|
+
transcripts.push(validateTranscript(tp));
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
const legacyDir = join(seedPath, 'legacy');
|
|
180
|
+
if (existsSync(legacyDir)) {
|
|
181
|
+
for (const f of readdirSync(legacyDir)) {
|
|
182
|
+
if (f.endsWith('.json'))
|
|
183
|
+
transcripts.push(validateTranscript(join(legacyDir, f)));
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
const events = validateSeedEvents(join(seedPath, '.compost', 'events.sqlite'));
|
|
187
|
+
const ok = transcripts.every((t) => t.ok) && (events === null || events.ok);
|
|
188
|
+
return { ok, seed: seedPath, transcripts, events };
|
|
189
|
+
}
|
|
121
190
|
export function validateFrames(path) {
|
|
122
191
|
const data = readJson(path);
|
|
123
192
|
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,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,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC,CAAA;IAC9E,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,CAmBhC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { dirname, join } from 'node:path';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
import { 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
|
+
const controller = new AbortController();
|
|
53
|
+
const timer = setTimeout(() => controller.abort(), deps.timeoutMs ?? 2500);
|
|
54
|
+
try {
|
|
55
|
+
const res = await fetchImpl(`https://registry.npmjs.org/-/package/${PACKAGE_NAME}/dist-tags`, {
|
|
56
|
+
method: 'GET',
|
|
57
|
+
signal: controller.signal,
|
|
58
|
+
});
|
|
59
|
+
if (!res.ok)
|
|
60
|
+
return null;
|
|
61
|
+
const tags = (await res.json());
|
|
62
|
+
if (typeof tags.latest !== 'string')
|
|
63
|
+
return null;
|
|
64
|
+
return { current, latest: tags.latest, behind: compareVersions(current, tags.latest) < 0 };
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
finally {
|
|
70
|
+
clearTimeout(timer);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
//# 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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"}
|