@they-juanreina/compost-cli 0.1.2 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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/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 +49 -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/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 -2
- 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/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 +69 -6
- 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/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 +11 -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 -3
- 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 +12 -5
- 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/vad.py +82 -11
package/dist/lib/session.js
CHANGED
|
@@ -1,6 +1,53 @@
|
|
|
1
1
|
import { existsSync, readdirSync, readFileSync } from 'node:fs';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
3
|
import { CompostError } from '../errors.js';
|
|
4
|
+
/**
|
|
5
|
+
* List a seed's sessions with lightweight counts for the seed home page and the
|
|
6
|
+
* sessions API. Cheap: parses each transcript.json only for top-level counts,
|
|
7
|
+
* tolerates sessions still queued/transcribing (has_transcript=false). Sorted
|
|
8
|
+
* by session id so the listing is stable.
|
|
9
|
+
*/
|
|
10
|
+
export function listSessions(seedPath) {
|
|
11
|
+
const dir = join(seedPath, 'sessions');
|
|
12
|
+
if (!existsSync(dir))
|
|
13
|
+
return [];
|
|
14
|
+
const ids = readdirSync(dir, { withFileTypes: true })
|
|
15
|
+
.filter((e) => e.isDirectory() && !e.name.startsWith('_') && !e.name.startsWith('.'))
|
|
16
|
+
.map((e) => e.name)
|
|
17
|
+
.sort();
|
|
18
|
+
return ids.map((session_id) => {
|
|
19
|
+
const transcriptPath = join(dir, session_id, 'transcript.json');
|
|
20
|
+
if (!existsSync(transcriptPath)) {
|
|
21
|
+
return {
|
|
22
|
+
session_id,
|
|
23
|
+
has_transcript: false,
|
|
24
|
+
utterance_count: 0,
|
|
25
|
+
frame_count: 0,
|
|
26
|
+
duration_ms: null,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
try {
|
|
30
|
+
const t = JSON.parse(readFileSync(transcriptPath, 'utf8'));
|
|
31
|
+
return {
|
|
32
|
+
session_id,
|
|
33
|
+
has_transcript: true,
|
|
34
|
+
utterance_count: Array.isArray(t.utterances) ? t.utterances.length : 0,
|
|
35
|
+
frame_count: Array.isArray(t.frames) ? t.frames.length : 0,
|
|
36
|
+
duration_ms: typeof t.duration_ms === 'number' ? t.duration_ms : null,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
// Malformed transcript: list the session but mark it as not-yet-readable.
|
|
41
|
+
return {
|
|
42
|
+
session_id,
|
|
43
|
+
has_transcript: false,
|
|
44
|
+
utterance_count: 0,
|
|
45
|
+
frame_count: 0,
|
|
46
|
+
duration_ms: null,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
}
|
|
4
51
|
/**
|
|
5
52
|
* Read a session's transcript.json plus a derived frame index. Used by the
|
|
6
53
|
* `compost session` command and the `compost_get_session` MCP tool so the host
|
package/dist/lib/session.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/lib/session.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,YAAY,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/lib/session.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/setup.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { FetchLike } from '../llm/types.js';
|
|
2
|
+
import { type KeychainBackend } from './secrets.js';
|
|
2
3
|
export type CheckStatus = 'ok' | 'warn' | 'fail';
|
|
3
4
|
export interface SetupCheck {
|
|
4
5
|
/** Stable id, e.g. "ollama", "pyannote-license". */
|
|
@@ -33,6 +34,10 @@ export interface SetupDeps {
|
|
|
33
34
|
requiredOllamaModels?: string[];
|
|
34
35
|
/** Override Apple-Silicon detection (tests). Defaults to the host arch. */
|
|
35
36
|
appleSilicon?: boolean;
|
|
37
|
+
/** `~/.compost` root override for the secrets perms audit (tests). */
|
|
38
|
+
home?: string;
|
|
39
|
+
/** Keychain backend for HF-token resolution; `null` forces file-only (tests). */
|
|
40
|
+
keychain?: KeychainBackend | null;
|
|
36
41
|
}
|
|
37
42
|
/**
|
|
38
43
|
* Run every prerequisite probe and return a checklist. Read-only: probes,
|
package/dist/lib/setup.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/lib/setup.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/lib/setup.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAEhD,OAAO,EAAiC,KAAK,eAAe,EAAiB,MAAM,cAAc,CAAA;AAKjG,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,CAAA;AAEhD,MAAM,WAAW,UAAU;IACzB,oDAAoD;IACpD,EAAE,EAAE,MAAM,CAAA;IACV,uBAAuB;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,WAAW,CAAA;IACnB,wBAAwB;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,4DAA4D;IAC5D,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,cAAc,EAAE,KAAK,CAAA;IACrB,KAAK,EAAE,OAAO,CAAA;IACd,MAAM,EAAE,UAAU,EAAE,CAAA;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,wEAAwE;IACxE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,OAAO,CAAA;KAAE,CAAC,CAAA;IAChF,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;IACvB,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,4DAA4D;IAC5D,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,iEAAiE;IACjE,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC/B,2EAA2E;IAC3E,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,sEAAsE;IACtE,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,iFAAiF;IACjF,QAAQ,CAAC,EAAE,eAAe,GAAG,IAAI,CAAA;CAClC;AAgBD;;;;;GAKG;AACH,wBAAsB,QAAQ,CAAC,IAAI,GAAE,SAAc,GAAG,OAAO,CAAC,WAAW,CAAC,CAyTzE"}
|
package/dist/lib/setup.js
CHANGED
|
@@ -4,6 +4,8 @@ import { join, resolve } from 'node:path';
|
|
|
4
4
|
import { promisify } from 'node:util';
|
|
5
5
|
import { resolveFetch } from '../llm/http.js';
|
|
6
6
|
import { diagnoseNativeRuntime, isAppleSilicon, resolveNativeRuntime } from './nativeRuntime.js';
|
|
7
|
+
import { auditSecretsPerms, HF_ALIASES, resolveSecret } from './secrets.js';
|
|
8
|
+
import { checkVersionStatus, UPGRADE_COMMAND } from './version.js';
|
|
7
9
|
const execFileAsync = promisify(execFile);
|
|
8
10
|
const PYANNOTE_GATED_REPOS = ['pyannote/speaker-diarization-3.1', 'pyannote/segmentation-3.0'];
|
|
9
11
|
const DEFAULT_REQUIRED_MODELS = ['bge-m3'];
|
|
@@ -32,6 +34,28 @@ export async function runSetup(deps = {}) {
|
|
|
32
34
|
const transcriberUrl = (deps.transcriberUrl ?? 'http://localhost:7862').replace(/\/$/, '');
|
|
33
35
|
const requiredModels = deps.requiredOllamaModels ?? DEFAULT_REQUIRED_MODELS;
|
|
34
36
|
const checks = [];
|
|
37
|
+
// 0. Is this install current? An outdated CLI misses bundled components and
|
|
38
|
+
// produces failures that look like machine problems (#245 — a field user on
|
|
39
|
+
// an old rc spent a session debugging exactly that). Best-effort: the check
|
|
40
|
+
// is silently skipped offline or when the registry doesn't answer fast.
|
|
41
|
+
const version = await checkVersionStatus(deps.fetchImpl !== undefined ? { fetchImpl: deps.fetchImpl } : {});
|
|
42
|
+
if (version !== null) {
|
|
43
|
+
checks.push(version.behind
|
|
44
|
+
? {
|
|
45
|
+
id: 'version',
|
|
46
|
+
label: 'CLI version',
|
|
47
|
+
status: 'warn',
|
|
48
|
+
detail: `${version.current} installed, ${version.latest} available — old versions miss bundled components`,
|
|
49
|
+
fix: UPGRADE_COMMAND,
|
|
50
|
+
}
|
|
51
|
+
: {
|
|
52
|
+
id: 'version',
|
|
53
|
+
label: 'CLI version',
|
|
54
|
+
status: 'ok',
|
|
55
|
+
detail: `${version.current} (latest)`,
|
|
56
|
+
fix: null,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
35
59
|
// 1. Ollama reachable + 2. required models present (one probe, two checks).
|
|
36
60
|
let ollamaTags = null;
|
|
37
61
|
try {
|
|
@@ -173,15 +197,39 @@ export async function runSetup(deps = {}) {
|
|
|
173
197
|
});
|
|
174
198
|
}
|
|
175
199
|
}
|
|
176
|
-
//
|
|
177
|
-
|
|
178
|
-
|
|
200
|
+
// 4c. Derived: is ANY ingest engine available? Document ingest (PDF/DOCX/…)
|
|
201
|
+
// rides the same engine as transcription, so a machine with neither the
|
|
202
|
+
// native runtime nor the Docker service cannot process a single inbox file —
|
|
203
|
+
// that is a FAIL, not an accumulation of warns (#242). The individual checks
|
|
204
|
+
// above stay warn-level because either one alone is sufficient.
|
|
205
|
+
const nativeOk = checks.some((c) => c.id === 'native-transcribe' && c.status === 'ok');
|
|
206
|
+
if (!transcriberOk && !nativeOk) {
|
|
207
|
+
checks.push({
|
|
208
|
+
id: 'ingest-engine',
|
|
209
|
+
label: 'Ingest engine',
|
|
210
|
+
status: 'fail',
|
|
211
|
+
detail: 'no transcription engine available — audio AND document (PDF/DOCX/…) ingest will fail',
|
|
212
|
+
fix: (deps.appleSilicon ?? isAppleSilicon())
|
|
213
|
+
? 'compost setup (guided; or compost setup --provision-native)'
|
|
214
|
+
: 'compost setup (guided; or start the Docker transcriber)',
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
// 5. HuggingFace token present. Resolved by the documented precedence:
|
|
218
|
+
// env > OS keychain > ~/.compost/secrets.env (0600). A keychain- or
|
|
219
|
+
// file-stored token counts as "set" here just like an exported env var.
|
|
220
|
+
const secretsDeps = {
|
|
221
|
+
env,
|
|
222
|
+
...(deps.home !== undefined ? { home: deps.home } : {}),
|
|
223
|
+
...(deps.keychain !== undefined ? { keychain: deps.keychain } : {}),
|
|
224
|
+
};
|
|
225
|
+
const hf = resolveSecret('HUGGINGFACE_TOKEN', { ...secretsDeps, aliases: HF_ALIASES });
|
|
226
|
+
if (!hf) {
|
|
179
227
|
checks.push({
|
|
180
228
|
id: 'hf-token',
|
|
181
229
|
label: 'HuggingFace token',
|
|
182
230
|
status: 'warn',
|
|
183
|
-
detail: '
|
|
184
|
-
fix: '
|
|
231
|
+
detail: 'not set in env, keychain, or ~/.compost/secrets.env (needed for pyannote diarization)',
|
|
232
|
+
fix: 'compost secrets set HUGGINGFACE_TOKEN (or export HUGGINGFACE_TOKEN=hf_…)',
|
|
185
233
|
});
|
|
186
234
|
}
|
|
187
235
|
else {
|
|
@@ -189,9 +237,10 @@ export async function runSetup(deps = {}) {
|
|
|
189
237
|
id: 'hf-token',
|
|
190
238
|
label: 'HuggingFace token',
|
|
191
239
|
status: 'ok',
|
|
192
|
-
detail:
|
|
240
|
+
detail: `set (source: ${hf.source})`,
|
|
193
241
|
fix: null,
|
|
194
242
|
});
|
|
243
|
+
const hfToken = hf.value;
|
|
195
244
|
// 6. pyannote license — must be a FILE fetch, not a metadata ping (the
|
|
196
245
|
// /api/models endpoint returns 200 even when the license isn't accepted).
|
|
197
246
|
for (const repo of PYANNOTE_GATED_REPOS) {
|
|
@@ -247,6 +296,20 @@ export async function runSetup(deps = {}) {
|
|
|
247
296
|
fix: 'compost init <name> (scaffolds .compost/config.toml)',
|
|
248
297
|
});
|
|
249
298
|
}
|
|
299
|
+
// 9. Secret-file permissions. A group/world-readable token file is a real
|
|
300
|
+
// leak, but with a one-line fix — surface it as a warn (the startup
|
|
301
|
+
// autoloader independently *refuses* to read an insecure secrets.env). Only
|
|
302
|
+
// emitted when there's something to flag; POSIX-only (Windows uses ACLs).
|
|
303
|
+
const permIssues = auditSecretsPerms(secretsDeps);
|
|
304
|
+
for (const issue of permIssues) {
|
|
305
|
+
checks.push({
|
|
306
|
+
id: `secret-perms:${issue.path}`,
|
|
307
|
+
label: 'Secret file permissions',
|
|
308
|
+
status: 'warn',
|
|
309
|
+
detail: `${issue.path} is ${issue.mode} — ${issue.detail}`,
|
|
310
|
+
fix: issue.fix,
|
|
311
|
+
});
|
|
312
|
+
}
|
|
250
313
|
const ready = checks.every((c) => c.status !== 'fail');
|
|
251
314
|
return { schema_version: '1.0', ready, checks };
|
|
252
315
|
}
|
package/dist/lib/setup.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/lib/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AACjD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAE7C,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/lib/setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { FetchLike } from '../llm/types.js';
|
|
2
|
+
import { provisionNativeVenv } from './provisionNative.js';
|
|
3
|
+
import { setSecret } from './secrets.js';
|
|
4
|
+
import { runSetup, type SetupReport } from './setup.js';
|
|
5
|
+
import { saveUserConfig } from './userConfig.js';
|
|
6
|
+
/** Per-task routes the wizard writes for each chat-model choice. The local
|
|
7
|
+
* default matches the seed template's quick_chat model; the cloud routes keep
|
|
8
|
+
* the template's synthesis model and add a fast model for the local tasks. */
|
|
9
|
+
export declare const LOCAL_CHAT_MODEL = "llama3.1:8b";
|
|
10
|
+
export declare const CLOUD_FAST_MODEL = "anthropic:claude-haiku-4-5";
|
|
11
|
+
export declare const CLOUD_SYNTHESIS_MODEL = "anthropic:claude-opus-4-7";
|
|
12
|
+
export interface WizardIO {
|
|
13
|
+
say(text: string): void;
|
|
14
|
+
/** Yes/no with a default. */
|
|
15
|
+
confirm(question: string, def: boolean): Promise<boolean>;
|
|
16
|
+
/** Free-text with a default shown in brackets. */
|
|
17
|
+
ask(question: string, def?: string): Promise<string>;
|
|
18
|
+
/** Input that must not echo (tokens, API keys). Empty string = skipped. */
|
|
19
|
+
askHidden(question: string): Promise<string>;
|
|
20
|
+
}
|
|
21
|
+
export interface WizardDeps {
|
|
22
|
+
io: WizardIO;
|
|
23
|
+
cwd?: string;
|
|
24
|
+
env?: NodeJS.ProcessEnv;
|
|
25
|
+
appleSilicon?: boolean;
|
|
26
|
+
fetchImpl?: FetchLike;
|
|
27
|
+
/** Diagnostic pass (injectable for tests). */
|
|
28
|
+
check?: typeof runSetup;
|
|
29
|
+
/** Run a streaming shell command the user just confirmed (install, pull). */
|
|
30
|
+
run?: (cmd: string, args: string[]) => {
|
|
31
|
+
ok: boolean;
|
|
32
|
+
};
|
|
33
|
+
provision?: typeof provisionNativeVenv;
|
|
34
|
+
storeSecret?: typeof setSecret;
|
|
35
|
+
saveDefaults?: typeof saveUserConfig;
|
|
36
|
+
/** Existing seed dirs whose config.toml the wizard offers to update. */
|
|
37
|
+
listSeeds?: () => string[];
|
|
38
|
+
}
|
|
39
|
+
export interface WizardResult {
|
|
40
|
+
report: SetupReport;
|
|
41
|
+
actions: string[];
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Guided setup: walk every fixable gap with a per-step confirmed fix, collect
|
|
45
|
+
* the secrets the pipeline needs (HF token, optional LLM key), and let the
|
|
46
|
+
* user pick how `compost chat` should run on this machine. Every mutation is
|
|
47
|
+
* proposed before it runs; declining any step just moves on. The non-TTY
|
|
48
|
+
* `compost setup` diagnostic is unchanged — this runs only at a terminal.
|
|
49
|
+
*/
|
|
50
|
+
export declare function runSetupWizard(deps: WizardDeps): Promise<WizardResult>;
|
|
51
|
+
//# sourceMappingURL=setupWizard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setupWizard.d.ts","sourceRoot":"","sources":["../../src/lib/setupWizard.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAGhD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAmB,KAAK,WAAW,EAAE,MAAM,YAAY,CAAA;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAEhD;;8EAE8E;AAC9E,eAAO,MAAM,gBAAgB,gBAAgB,CAAA;AAC7C,eAAO,MAAM,gBAAgB,+BAA+B,CAAA;AAC5D,eAAO,MAAM,qBAAqB,8BAA8B,CAAA;AAIhE,MAAM,WAAW,QAAQ;IACvB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,6BAA6B;IAC7B,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACzD,kDAAkD;IAClD,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACpD,2EAA2E;IAC3E,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;CAC7C;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,QAAQ,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;IACvB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,8CAA8C;IAC9C,KAAK,CAAC,EAAE,OAAO,QAAQ,CAAA;IACvB,6EAA6E;IAC7E,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK;QAAE,EAAE,EAAE,OAAO,CAAA;KAAE,CAAA;IACtD,SAAS,CAAC,EAAE,OAAO,mBAAmB,CAAA;IACtC,WAAW,CAAC,EAAE,OAAO,SAAS,CAAA;IAC9B,YAAY,CAAC,EAAE,OAAO,cAAc,CAAA;IACpC,wEAAwE;IACxE,SAAS,CAAC,EAAE,MAAM,MAAM,EAAE,CAAA;CAC3B;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,WAAW,CAAA;IACnB,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB;AAqBD;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,CA4N5E"}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { resolveFetch } from '../llm/http.js';
|
|
4
|
+
import { loadConfig, saveConfig, setConfigValue } from './config.js';
|
|
5
|
+
import { diagnoseNativeRuntime, isAppleSilicon } from './nativeRuntime.js';
|
|
6
|
+
import { provisionNativeVenv } from './provisionNative.js';
|
|
7
|
+
import { setSecret } from './secrets.js';
|
|
8
|
+
import { runSetup } from './setup.js';
|
|
9
|
+
import { saveUserConfig } from './userConfig.js';
|
|
10
|
+
/** Per-task routes the wizard writes for each chat-model choice. The local
|
|
11
|
+
* default matches the seed template's quick_chat model; the cloud routes keep
|
|
12
|
+
* the template's synthesis model and add a fast model for the local tasks. */
|
|
13
|
+
export const LOCAL_CHAT_MODEL = 'llama3.1:8b';
|
|
14
|
+
export const CLOUD_FAST_MODEL = 'anthropic:claude-haiku-4-5';
|
|
15
|
+
export const CLOUD_SYNTHESIS_MODEL = 'anthropic:claude-opus-4-7';
|
|
16
|
+
const PYANNOTE_GATED_REPOS = ['pyannote/speaker-diarization-3.1', 'pyannote/segmentation-3.0'];
|
|
17
|
+
function checkById(report, id) {
|
|
18
|
+
return report.checks.find((c) => c.id === id);
|
|
19
|
+
}
|
|
20
|
+
function notOk(report, id) {
|
|
21
|
+
const c = checkById(report, id);
|
|
22
|
+
return c !== undefined && c.status !== 'ok';
|
|
23
|
+
}
|
|
24
|
+
function statusGlyph(c) {
|
|
25
|
+
return c.status === 'ok' ? '✓' : c.status === 'warn' ? '!' : '✗';
|
|
26
|
+
}
|
|
27
|
+
function printReport(io, report) {
|
|
28
|
+
for (const c of report.checks) {
|
|
29
|
+
io.say(` ${statusGlyph(c)} ${c.label} — ${c.detail}`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Guided setup: walk every fixable gap with a per-step confirmed fix, collect
|
|
34
|
+
* the secrets the pipeline needs (HF token, optional LLM key), and let the
|
|
35
|
+
* user pick how `compost chat` should run on this machine. Every mutation is
|
|
36
|
+
* proposed before it runs; declining any step just moves on. The non-TTY
|
|
37
|
+
* `compost setup` diagnostic is unchanged — this runs only at a terminal.
|
|
38
|
+
*/
|
|
39
|
+
export async function runSetupWizard(deps) {
|
|
40
|
+
const io = deps.io;
|
|
41
|
+
const cwd = deps.cwd ?? process.cwd();
|
|
42
|
+
const env = deps.env ?? process.env;
|
|
43
|
+
const apple = deps.appleSilicon ?? isAppleSilicon();
|
|
44
|
+
const check = deps.check ?? runSetup;
|
|
45
|
+
const run = deps.run ?? (() => ({ ok: false }));
|
|
46
|
+
const provision = deps.provision ?? provisionNativeVenv;
|
|
47
|
+
const storeSecret = deps.storeSecret ?? setSecret;
|
|
48
|
+
const saveDefaults = deps.saveDefaults ?? saveUserConfig;
|
|
49
|
+
const fetchImpl = resolveFetch(deps.fetchImpl);
|
|
50
|
+
const actions = [];
|
|
51
|
+
io.say('compost setup — guided');
|
|
52
|
+
io.say(`platform: ${process.platform}/${process.arch}${apple ? ' (native transcription)' : ' (Docker transcription fallback)'}`);
|
|
53
|
+
io.say('');
|
|
54
|
+
let report = await check({ cwd, env });
|
|
55
|
+
printReport(io, report);
|
|
56
|
+
io.say('');
|
|
57
|
+
// ── Outdated install: fix this first — everything else may be its symptom ─
|
|
58
|
+
if (notOk(report, 'version')) {
|
|
59
|
+
const detail = checkById(report, 'version')?.detail ?? '';
|
|
60
|
+
io.say(`This install is outdated (${detail}).`);
|
|
61
|
+
if (await io.confirm('Upgrade now (npm install -g @they-juanreina/compost-cli@latest)?', true)) {
|
|
62
|
+
const ok = run('npm', ['install', '-g', '@they-juanreina/compost-cli@latest']).ok;
|
|
63
|
+
actions.push(ok ? 'upgraded CLI — rerun `compost setup` on the new version' : 'upgrade failed');
|
|
64
|
+
if (ok) {
|
|
65
|
+
io.say('Upgraded. Rerun `compost setup` so the new version takes it from here.');
|
|
66
|
+
return { report, actions };
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// ── Ollama: the embeddings (and optionally chat) engine ──────────────────
|
|
71
|
+
if (notOk(report, 'ollama')) {
|
|
72
|
+
io.say('Ollama powers search embeddings and local chat. It is not running.');
|
|
73
|
+
const brewAvailable = process.platform === 'darwin' && run('which', ['brew']).ok;
|
|
74
|
+
if (brewAvailable) {
|
|
75
|
+
if (await io.confirm('Install and start Ollama via Homebrew (brew install ollama)?', true)) {
|
|
76
|
+
const installed = run('brew', ['install', 'ollama']).ok;
|
|
77
|
+
const started = installed && run('brew', ['services', 'start', 'ollama']).ok;
|
|
78
|
+
actions.push(started ? 'installed + started Ollama' : 'Ollama install attempted — check output above');
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
io.say('Install it from https://ollama.com/download, then open the app (or run `ollama serve`).');
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// ── Embedding model ───────────────────────────────────────────────────────
|
|
86
|
+
if (notOk(report, 'model:bge-m3')) {
|
|
87
|
+
if (await io.confirm('Pull the embedding model bge-m3 (~1.2 GB)?', true)) {
|
|
88
|
+
const ok = run('ollama', ['pull', 'bge-m3']).ok;
|
|
89
|
+
actions.push(ok ? 'pulled bge-m3' : 'bge-m3 pull failed — is Ollama running?');
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
// ── Transcription engine (also required for PDF/document ingest) ─────────
|
|
93
|
+
if (apple && notOk(report, 'native-transcribe')) {
|
|
94
|
+
io.say('');
|
|
95
|
+
io.say('Transcription runs natively on Apple Silicon (the same engine also ingests PDFs and documents).');
|
|
96
|
+
if (await io.confirm('Provision the native engine now (downloads ~1 GB of Python wheels, a few minutes)?', true)) {
|
|
97
|
+
try {
|
|
98
|
+
const result = provision({});
|
|
99
|
+
actions.push(`native engine: ${result.status}`);
|
|
100
|
+
}
|
|
101
|
+
catch (err) {
|
|
102
|
+
io.say(` provisioning failed: ${err instanceof Error ? err.message : err}`);
|
|
103
|
+
actions.push('native provisioning failed');
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
else if (!apple && notOk(report, 'transcriber')) {
|
|
108
|
+
const transcriberDir = diagnoseNativeRuntime({ env }).transcriberDir;
|
|
109
|
+
if (transcriberDir !== undefined && existsSync(join(transcriberDir, 'compose.yaml'))) {
|
|
110
|
+
io.say('');
|
|
111
|
+
io.say('Transcription (and PDF/document ingest) runs in Docker on this platform.');
|
|
112
|
+
if (await io.confirm('Build and start the transcriber container (first build downloads several GB)?', true)) {
|
|
113
|
+
const ok = run('docker', [
|
|
114
|
+
'compose',
|
|
115
|
+
'-f',
|
|
116
|
+
join(transcriberDir, 'compose.yaml'),
|
|
117
|
+
'up',
|
|
118
|
+
'--build',
|
|
119
|
+
'-d',
|
|
120
|
+
]).ok;
|
|
121
|
+
actions.push(ok ? 'transcriber container started' : 'docker compose failed — is Docker running?');
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
io.say('Could not locate the bundled transcriber sources — reinstall @they-juanreina/compost-cli.');
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
// ── HuggingFace token (audio diarization only) ────────────────────────────
|
|
129
|
+
if (notOk(report, 'hf-token')) {
|
|
130
|
+
io.say('');
|
|
131
|
+
io.say('Audio transcription labels who is speaking (diarization), which needs a free HuggingFace account:');
|
|
132
|
+
io.say(' 1. Token: https://hf.co/settings/tokens (a "read" token is enough)');
|
|
133
|
+
io.say(' 2. Licenses: accept on BOTH model pages, logged in as the same account —');
|
|
134
|
+
for (const repo of PYANNOTE_GATED_REPOS)
|
|
135
|
+
io.say(` https://huggingface.co/${repo}`);
|
|
136
|
+
io.say('PDF and document ingest do not need this — Enter skips, and `compost setup` can add it later.');
|
|
137
|
+
const token = (await io.askHidden('HuggingFace token (hidden, Enter to skip): ')).trim();
|
|
138
|
+
if (token !== '') {
|
|
139
|
+
const stored = storeSecret('HUGGINGFACE_TOKEN', token);
|
|
140
|
+
actions.push(`HF token stored in ${stored.stored_in}`);
|
|
141
|
+
for (const repo of PYANNOTE_GATED_REPOS) {
|
|
142
|
+
let accepted = false;
|
|
143
|
+
try {
|
|
144
|
+
const res = await fetchImpl(`https://huggingface.co/${repo}/resolve/main/config.yaml`, {
|
|
145
|
+
method: 'GET',
|
|
146
|
+
headers: { Authorization: `Bearer ${token}` },
|
|
147
|
+
});
|
|
148
|
+
accepted = res.ok;
|
|
149
|
+
}
|
|
150
|
+
catch {
|
|
151
|
+
accepted = false;
|
|
152
|
+
}
|
|
153
|
+
io.say(accepted
|
|
154
|
+
? ` ✓ license accepted: ${repo}`
|
|
155
|
+
: ` ! license NOT accepted yet: https://huggingface.co/${repo}`);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
// ── Chat model: how should `compost chat` answer on this machine? ────────
|
|
160
|
+
io.say('');
|
|
161
|
+
io.say('`compost chat` answers questions from your transcripts. Pick how it should run:');
|
|
162
|
+
io.say(` [1] local — pull ${LOCAL_CHAT_MODEL} (~5 GB) and run offline via Ollama`);
|
|
163
|
+
io.say(' [2] cloud — use an Anthropic API key (best quality; sends excerpts to the API)');
|
|
164
|
+
io.say(' [3] skip for now');
|
|
165
|
+
const choice = (await io.ask('Choice', '1')).trim();
|
|
166
|
+
let routes = null;
|
|
167
|
+
if (choice === '1') {
|
|
168
|
+
const model = (await io.ask('Local model to pull', LOCAL_CHAT_MODEL)).trim() || LOCAL_CHAT_MODEL;
|
|
169
|
+
const ok = run('ollama', ['pull', model]).ok;
|
|
170
|
+
if (ok) {
|
|
171
|
+
routes = {
|
|
172
|
+
quick_chat: `ollama:${model}`,
|
|
173
|
+
verification: `ollama:${model}`,
|
|
174
|
+
synthesis: `ollama:${model}`,
|
|
175
|
+
};
|
|
176
|
+
actions.push(`chat: local via ollama:${model}`);
|
|
177
|
+
io.say(' (cloud-quality synthesis can be added any time: rerun `compost setup` and pick cloud.)');
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
io.say(` pull failed — is Ollama running? Rerun \`compost setup\` to retry.`);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
else if (choice === '2') {
|
|
184
|
+
const key = (await io.askHidden('Anthropic API key (hidden): ')).trim();
|
|
185
|
+
if (key !== '') {
|
|
186
|
+
const stored = storeSecret('ANTHROPIC_API_KEY', key);
|
|
187
|
+
routes = {
|
|
188
|
+
quick_chat: CLOUD_FAST_MODEL,
|
|
189
|
+
verification: CLOUD_FAST_MODEL,
|
|
190
|
+
synthesis: CLOUD_SYNTHESIS_MODEL,
|
|
191
|
+
};
|
|
192
|
+
actions.push(`chat: cloud (key in ${stored.stored_in})`);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
if (routes !== null) {
|
|
196
|
+
const path = saveDefaults({ defaults: routes }, env);
|
|
197
|
+
io.say(` routing saved to ${path} — new seeds inherit it automatically.`);
|
|
198
|
+
const seeds = (deps.listSeeds ?? (() => []))();
|
|
199
|
+
for (const seedPath of seeds) {
|
|
200
|
+
if (await io.confirm(`Update model routing in the existing seed ${seedPath}?`, true)) {
|
|
201
|
+
const raw = loadConfig(seedPath).raw;
|
|
202
|
+
for (const [task, route] of Object.entries(routes)) {
|
|
203
|
+
setConfigValue(raw, `defaults.${task}`, route);
|
|
204
|
+
}
|
|
205
|
+
saveConfig(seedPath, raw);
|
|
206
|
+
actions.push(`updated routing: ${seedPath}`);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
// ── Re-check and summarize ────────────────────────────────────────────────
|
|
211
|
+
io.say('');
|
|
212
|
+
report = await check({ cwd, env });
|
|
213
|
+
printReport(io, report);
|
|
214
|
+
io.say('');
|
|
215
|
+
io.say(report.ready
|
|
216
|
+
? 'Ready. Next steps:'
|
|
217
|
+
: 'Some checks still need attention (see above). Next steps:');
|
|
218
|
+
io.say(' compost init <study-name> # create a study');
|
|
219
|
+
io.say(' open Seeds/<study-name>/sessions/_inbox # drop a recording or PDF in');
|
|
220
|
+
io.say(' compost watch --once # process it');
|
|
221
|
+
return { report, actions };
|
|
222
|
+
}
|
|
223
|
+
//# sourceMappingURL=setupWizard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setupWizard.js","sourceRoot":"","sources":["../../src/lib/setupWizard.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"}
|