@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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secrets.js","sourceRoot":"","sources":["../../src/lib/secrets.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/seed.d.ts
CHANGED
|
@@ -4,6 +4,8 @@ export interface InitOptions {
|
|
|
4
4
|
now?: () => Date;
|
|
5
5
|
/** Unpack the bundled sample seed (a redacted single-session corpus). */
|
|
6
6
|
fromSample?: boolean;
|
|
7
|
+
/** Env for resolving the user-level config overlay (tests pass COMPOST_HOME). */
|
|
8
|
+
env?: NodeJS.ProcessEnv;
|
|
7
9
|
}
|
|
8
10
|
export interface InitResult {
|
|
9
11
|
seed_name: string;
|
|
@@ -11,6 +13,9 @@ export interface InitResult {
|
|
|
11
13
|
created_at: string;
|
|
12
14
|
files: string[];
|
|
13
15
|
directories: string[];
|
|
16
|
+
/** Non-fatal foot-gun notices, e.g. running init from inside a Seeds/ folder
|
|
17
|
+
* (which nests Seeds/Seeds/ — #241). Empty when nothing looks off. */
|
|
18
|
+
warnings: string[];
|
|
14
19
|
}
|
|
15
20
|
export declare function initSeed(name: string, opts?: InitOptions): InitResult;
|
|
16
21
|
//# sourceMappingURL=seed.d.ts.map
|
package/dist/lib/seed.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seed.d.ts","sourceRoot":"","sources":["../../src/lib/seed.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"seed.d.ts","sourceRoot":"","sources":["../../src/lib/seed.ts"],"names":[],"mappings":"AA2BA,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,GAAG,CAAC,EAAE,MAAM,IAAI,CAAA;IAChB,yEAAyE;IACzE,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,iFAAiF;IACjF,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB;0EACsE;IACtE,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,WAAgB,GAAG,UAAU,CAuEzE"}
|
package/dist/lib/seed.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { cpSync, existsSync, mkdirSync, writeFileSync } from 'node:fs';
|
|
2
|
-
import { dirname, join, resolve } from 'node:path';
|
|
2
|
+
import { basename, dirname, join, resolve } from 'node:path';
|
|
3
3
|
import { fileURLToPath } from 'node:url';
|
|
4
4
|
import { CompostError } from '../errors.js';
|
|
5
5
|
import { loadTemplate, render } from './templates.js';
|
|
6
|
+
import { applyUserConfig, loadUserConfig } from './userConfig.js';
|
|
6
7
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
7
8
|
// templates/ is a sibling of src/ and dist/ (lib/ → ../../templates).
|
|
8
9
|
const SAMPLE_SEED_DIR = join(__dirname, '..', '..', 'templates', 'sample-seed');
|
|
@@ -39,10 +40,14 @@ export function initSeed(name, opts = {}) {
|
|
|
39
40
|
createdDirs.push(dir);
|
|
40
41
|
}
|
|
41
42
|
const vars = { seed_name: name, created_at: createdAt };
|
|
43
|
+
// The setup wizard's machine-wide answers (model routing, provider tweaks)
|
|
44
|
+
// overlay the template, so a new seed starts with routes that actually
|
|
45
|
+
// resolve on this machine instead of the template's guesses.
|
|
46
|
+
const configToml = applyUserConfig(render(loadTemplate('config.toml'), vars), loadUserConfig(opts.env ?? process.env));
|
|
42
47
|
const files = [
|
|
43
48
|
{ path: 'seed.md', content: render(loadTemplate('seed.md'), vars) },
|
|
44
49
|
{ path: '.compost/AGENTS.md', content: render(loadTemplate('AGENTS.md'), vars) },
|
|
45
|
-
{ path: '.compost/config.toml', content:
|
|
50
|
+
{ path: '.compost/config.toml', content: configToml },
|
|
46
51
|
];
|
|
47
52
|
for (const file of files) {
|
|
48
53
|
writeFileSync(join(seedPath, file.path), file.content, 'utf8');
|
|
@@ -53,12 +58,20 @@ export function initSeed(name, opts = {}) {
|
|
|
53
58
|
if (opts.fromSample === true) {
|
|
54
59
|
cpSync(SAMPLE_SEED_DIR, seedPath, { recursive: true });
|
|
55
60
|
}
|
|
61
|
+
const warnings = [];
|
|
62
|
+
if (basename(cwd) === 'Seeds') {
|
|
63
|
+
// Init always scaffolds <cwd>/Seeds/<name>; run from inside a folder named
|
|
64
|
+
// Seeds that nests Seeds/Seeds/ — almost always a walkthrough mistake, and
|
|
65
|
+
// hand-moving the seed afterwards strands its job queue (#241, #240).
|
|
66
|
+
warnings.push(`the current folder is itself named Seeds, so the seed was created at ${seedPath} (note the nested Seeds/Seeds/). If you meant ${resolve(cwd, name)}, remove the new tree and rerun compost init from ${resolve(cwd, '..')}.`);
|
|
67
|
+
}
|
|
56
68
|
return {
|
|
57
69
|
seed_name: name,
|
|
58
70
|
path: seedPath,
|
|
59
71
|
created_at: createdAt,
|
|
60
72
|
files: files.map((f) => f.path),
|
|
61
73
|
directories: createdDirs,
|
|
74
|
+
warnings,
|
|
62
75
|
};
|
|
63
76
|
}
|
|
64
77
|
//# sourceMappingURL=seed.js.map
|
package/dist/lib/seed.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seed.js","sourceRoot":"","sources":["../../src/lib/seed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AACtE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"seed.js","sourceRoot":"","sources":["../../src/lib/seed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AACtE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAExC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAEjE,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;AACzD,sEAAsE;AACtE,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,aAAa,CAAC,CAAA;AAE/E,MAAM,gBAAgB,GAAG;IACvB,MAAM;IACN,UAAU;IACV,iBAAiB;IACjB,UAAU;IACV,YAAY;IACZ,UAAU;IACV,WAAW;IACX,SAAS;IACT,QAAQ;IACR,UAAU;IACV,eAAe;IACf,eAAe;CACP,CAAA;AAuBV,MAAM,UAAU,QAAQ,CAAC,IAAY,EAAE,OAAoB,EAAE;IAC3D,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,YAAY,CACpB,eAAe,EACf,oDAAoD,IAAI,IAAI,CAC7D,CAAA;IACH,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAA;IACrC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,KAAK,IAAI,CAAA;IACjC,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,CAAA;IAC9C,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;IAC5C,MAAM,SAAS,GAAG,GAAG,CAAC,WAAW,EAAE,CAAA;IAEnC,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACnC,MAAM,IAAI,YAAY,CACpB,eAAe,EACf,0BAA0B,QAAQ,6BAA6B,CAChE,CAAA;IACH,CAAC;IAED,MAAM,WAAW,GAAa,EAAE,CAAA;IAChC,KAAK,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;QAC/B,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACnC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACvB,CAAC;IAED,MAAM,IAAI,GAA2B,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,CAAA;IAC/E,2EAA2E;IAC3E,uEAAuE;IACvE,6DAA6D;IAC7D,MAAM,UAAU,GAAG,eAAe,CAChC,MAAM,CAAC,YAAY,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC,EACzC,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,CACxC,CAAA;IACD,MAAM,KAAK,GAA6C;QACtD,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,EAAE;QACnE,EAAE,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,EAAE;QAChF,EAAE,IAAI,EAAE,sBAAsB,EAAE,OAAO,EAAE,UAAU,EAAE;KACtD,CAAA;IAED,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IAChE,CAAC;IAED,0EAA0E;IAC1E,yEAAyE;IACzE,gBAAgB;IAChB,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;QAC7B,MAAM,CAAC,eAAe,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACxD,CAAC;IAED,MAAM,QAAQ,GAAa,EAAE,CAAA;IAC7B,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC;QAC9B,2EAA2E;QAC3E,2EAA2E;QAC3E,sEAAsE;QACtE,QAAQ,CAAC,IAAI,CACX,wEAAwE,QAAQ,iDAAiD,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,qDAAqD,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAC9N,CAAA;IACH,CAAC;IAED,OAAO;QACL,SAAS,EAAE,IAAI;QACf,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,SAAS;QACrB,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/B,WAAW,EAAE,WAAW;QACxB,QAAQ;KACT,CAAA;AACH,CAAC"}
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
/** The seed's display name: its directory basename. The single way to derive a
|
|
2
|
+
* name from a seed path — replaces an ad-hoc mix of `split('/').pop() ?? 'seed'`
|
|
3
|
+
* (which mishandles Windows separators) and bare `basename`. Named `…Of` so it
|
|
4
|
+
* doesn't shadow the conventional `const seedName` at call sites. */
|
|
5
|
+
export declare function seedNameOf(seedPath: string): string;
|
|
1
6
|
/**
|
|
2
7
|
* Resolve a seed directory path. If `seed` is given, use Seeds/<seed>.
|
|
3
8
|
* Otherwise require exactly one seed under ./Seeds and return it.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seedResolve.d.ts","sourceRoot":"","sources":["../../src/lib/seedResolve.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"seedResolve.d.ts","sourceRoot":"","sources":["../../src/lib/seedResolve.ts"],"names":[],"mappings":"AAMA;;;qEAGqE;AACrE,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEnD;AA6CD;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CA0BlE"}
|
package/dist/lib/seedResolve.js
CHANGED
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
import { existsSync, readdirSync, statSync } from 'node:fs';
|
|
2
|
-
import { isAbsolute, join,
|
|
2
|
+
import { basename, isAbsolute, join, resolve, sep } from 'node:path';
|
|
3
3
|
import { CompostError } from '../errors.js';
|
|
4
|
+
import { isContainedUnder } from './pathSafe.js';
|
|
5
|
+
/** The seed's display name: its directory basename. The single way to derive a
|
|
6
|
+
* name from a seed path — replaces an ad-hoc mix of `split('/').pop() ?? 'seed'`
|
|
7
|
+
* (which mishandles Windows separators) and bare `basename`. Named `…Of` so it
|
|
8
|
+
* doesn't shadow the conventional `const seedName` at call sites. */
|
|
9
|
+
export function seedNameOf(seedPath) {
|
|
10
|
+
return basename(seedPath);
|
|
11
|
+
}
|
|
4
12
|
/**
|
|
5
13
|
* Seed names are labels, not paths (#211). We reject the patterns that let an
|
|
6
14
|
* attacker escape the Seeds/ root: path separators, `..` segments, absolute
|
|
@@ -27,8 +35,9 @@ function assertSeedName(seed) {
|
|
|
27
35
|
}
|
|
28
36
|
}
|
|
29
37
|
function assertContainedUnder(seedPath, root) {
|
|
30
|
-
|
|
31
|
-
|
|
38
|
+
// seed is non-empty (assertSeedName), so seedPath never equals root here —
|
|
39
|
+
// the strict isContainedUnder is equivalent for every reachable input.
|
|
40
|
+
if (!isContainedUnder(root, seedPath)) {
|
|
32
41
|
throw new CompostError('INVALID_INPUT', `--seed resolves outside the Seeds/ root: ${seedPath}`);
|
|
33
42
|
}
|
|
34
43
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seedResolve.js","sourceRoot":"","sources":["../../src/lib/seedResolve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAC3D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"seedResolve.js","sourceRoot":"","sources":["../../src/lib/seedResolve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAC3D,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAA;AAEpE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAEhD;;;qEAGqE;AACrE,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAA;AAC3B,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,cAAc,CAAC,IAAY;IAClC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,YAAY,CAAC,eAAe,EAAE,wBAAwB,CAAC,CAAA;IACnE,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,YAAY,CACpB,eAAe,EACf,8CAA8C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CACrE,CAAA;IACH,CAAC;IACD,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACpE,MAAM,IAAI,YAAY,CACpB,eAAe,EACf,4CAA4C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CACnE,CAAA;IACH,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,YAAY,CACpB,eAAe,EACf,oDAAoD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAC3E,CAAA;IACH,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,QAAgB,EAAE,IAAY;IAC1D,2EAA2E;IAC3E,uEAAuE;IACvE,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,YAAY,CAAC,eAAe,EAAE,4CAA4C,QAAQ,EAAE,CAAC,CAAA;IACjG,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAAC,GAAW,EAAE,IAAa;IACxD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IAClC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,YAAY,CAAC,aAAa,EAAE,0BAA0B,IAAI,EAAE,CAAC,CAAA;IACzE,CAAC;IACD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,cAAc,CAAC,IAAI,CAAC,CAAA;QACpB,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QAC7B,oBAAoB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;QAC7B,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;YACnB,MAAM,IAAI,YAAY,CAAC,aAAa,EAAE,SAAS,IAAI,qBAAqB,IAAI,EAAE,CAAC,CAAA;QACjF,CAAC;QACD,OAAO,CAAC,CAAA;IACV,CAAC;IACD,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,CACtC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CACnE,CAAA;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,YAAY,CAAC,aAAa,EAAE,kBAAkB,IAAI,EAAE,CAAC,CAAA;IACzF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,YAAY,CACpB,eAAe,EACf,wBAAwB,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAC5E,CAAA;IACH,CAAC;IACD,8HAA8H;IAC9H,OAAO,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAE,CAAC,CAAA;AACnC,CAAC"}
|
package/dist/lib/session.d.ts
CHANGED
|
@@ -10,6 +10,20 @@ export interface SessionView {
|
|
|
10
10
|
path: string;
|
|
11
11
|
}>;
|
|
12
12
|
}
|
|
13
|
+
export interface SessionSummary {
|
|
14
|
+
session_id: string;
|
|
15
|
+
has_transcript: boolean;
|
|
16
|
+
utterance_count: number;
|
|
17
|
+
frame_count: number;
|
|
18
|
+
duration_ms: number | null;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* List a seed's sessions with lightweight counts for the seed home page and the
|
|
22
|
+
* sessions API. Cheap: parses each transcript.json only for top-level counts,
|
|
23
|
+
* tolerates sessions still queued/transcribing (has_transcript=false). Sorted
|
|
24
|
+
* by session id so the listing is stable.
|
|
25
|
+
*/
|
|
26
|
+
export declare function listSessions(seedPath: string): SessionSummary[];
|
|
13
27
|
/**
|
|
14
28
|
* Read a session's transcript.json plus a derived frame index. Used by the
|
|
15
29
|
* `compost session` command and the `compost_get_session` MCP tool so the host
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/lib/session.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/lib/session.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,eAAe,EAAE,MAAM,CAAA;IACvB,UAAU,EAAE,OAAO,CAAA;IACnB,MAAM,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAC5E;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAA;IAClB,cAAc,EAAE,OAAO,CAAA;IACvB,eAAe,EAAE,MAAM,CAAA;IACvB,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;CAC3B;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,EAAE,CA2C/D;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,WAAW,CA8B3E"}
|
package/dist/lib/session.js
CHANGED
|
@@ -1,15 +1,64 @@
|
|
|
1
1
|
import { existsSync, readdirSync, readFileSync } from 'node:fs';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
3
|
import { CompostError } from '../errors.js';
|
|
4
|
+
import { seedNameOf } from './seedResolve.js';
|
|
5
|
+
import { assertSessionContained } from './sessionId.js';
|
|
6
|
+
/**
|
|
7
|
+
* List a seed's sessions with lightweight counts for the seed home page and the
|
|
8
|
+
* sessions API. Cheap: parses each transcript.json only for top-level counts,
|
|
9
|
+
* tolerates sessions still queued/transcribing (has_transcript=false). Sorted
|
|
10
|
+
* by session id so the listing is stable.
|
|
11
|
+
*/
|
|
12
|
+
export function listSessions(seedPath) {
|
|
13
|
+
const dir = join(seedPath, 'sessions');
|
|
14
|
+
if (!existsSync(dir))
|
|
15
|
+
return [];
|
|
16
|
+
const ids = readdirSync(dir, { withFileTypes: true })
|
|
17
|
+
.filter((e) => e.isDirectory() && !e.name.startsWith('_') && !e.name.startsWith('.'))
|
|
18
|
+
.map((e) => e.name)
|
|
19
|
+
.sort();
|
|
20
|
+
return ids.map((session_id) => {
|
|
21
|
+
const transcriptPath = join(dir, session_id, 'transcript.json');
|
|
22
|
+
if (!existsSync(transcriptPath)) {
|
|
23
|
+
return {
|
|
24
|
+
session_id,
|
|
25
|
+
has_transcript: false,
|
|
26
|
+
utterance_count: 0,
|
|
27
|
+
frame_count: 0,
|
|
28
|
+
duration_ms: null,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
try {
|
|
32
|
+
const t = JSON.parse(readFileSync(transcriptPath, 'utf8'));
|
|
33
|
+
return {
|
|
34
|
+
session_id,
|
|
35
|
+
has_transcript: true,
|
|
36
|
+
utterance_count: Array.isArray(t.utterances) ? t.utterances.length : 0,
|
|
37
|
+
frame_count: Array.isArray(t.frames) ? t.frames.length : 0,
|
|
38
|
+
duration_ms: typeof t.duration_ms === 'number' ? t.duration_ms : null,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
// Malformed transcript: list the session but mark it as not-yet-readable.
|
|
43
|
+
return {
|
|
44
|
+
session_id,
|
|
45
|
+
has_transcript: false,
|
|
46
|
+
utterance_count: 0,
|
|
47
|
+
frame_count: 0,
|
|
48
|
+
duration_ms: null,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
}
|
|
4
53
|
/**
|
|
5
54
|
* Read a session's transcript.json plus a derived frame index. Used by the
|
|
6
55
|
* `compost session` command and the `compost_get_session` MCP tool so the host
|
|
7
56
|
* agent can pull a full session into context.
|
|
8
57
|
*/
|
|
9
58
|
export function getSession(seedPath, sessionId) {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
59
|
+
// Validate the id (regex) AND assert it stays under <seed>/sessions/ before
|
|
60
|
+
// any fs op — the containment backstop is belt-and-braces over the regex.
|
|
61
|
+
assertSessionContained(seedPath, sessionId);
|
|
13
62
|
const dir = join(seedPath, 'sessions', sessionId);
|
|
14
63
|
if (!existsSync(dir)) {
|
|
15
64
|
throw new CompostError('FILE_NOT_FOUND', `No session "${sessionId}" under ${seedPath}/sessions`);
|
|
@@ -27,7 +76,7 @@ export function getSession(seedPath, sessionId) {
|
|
|
27
76
|
}
|
|
28
77
|
return {
|
|
29
78
|
session_id: sessionId,
|
|
30
|
-
seed: seedPath
|
|
79
|
+
seed: seedNameOf(seedPath),
|
|
31
80
|
transcript_path: transcriptPath,
|
|
32
81
|
transcript,
|
|
33
82
|
frames: deriveFrameIndex(transcript, dir),
|
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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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** Throw INVALID_INPUT unless `sessionId` is a bare, path-safe label. */
|
|
2
|
+
export declare function assertSessionId(sessionId: string): void;
|
|
3
|
+
/**
|
|
4
|
+
* Resolve `<seedPath>/sessions/<sessionId>` and assert it stays under the
|
|
5
|
+
* seed's `sessions/` root. Returns the validated absolute directory. Catches
|
|
6
|
+
* any escape the deny-list regex might miss before any fs op runs.
|
|
7
|
+
*/
|
|
8
|
+
export declare function assertSessionContained(seedPath: string, sessionId: string): string;
|
|
9
|
+
//# sourceMappingURL=sessionId.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionId.d.ts","sourceRoot":"","sources":["../../src/lib/sessionId.ts"],"names":[],"mappings":"AAmBA,yEAAyE;AACzE,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAOvD;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAQlF"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { resolve } from 'node:path';
|
|
2
|
+
import { CompostError } from '../errors.js';
|
|
3
|
+
import { isContainedUnder } from './pathSafe.js';
|
|
4
|
+
/**
|
|
5
|
+
* Session ids are bare labels, not paths (#211 followup). A session id indexes
|
|
6
|
+
* into `<seed>/sessions/<id>/`, so a value containing a path separator or a `..`
|
|
7
|
+
* segment would let a write/exec path escape the seed. The read path
|
|
8
|
+
* (`getSession`, session.ts) and the Docker transcriber HTTP route already
|
|
9
|
+
* enforce this regex; this module is the single source of truth so every
|
|
10
|
+
* write/exec entry (import, snap, native transcribe) validates identically.
|
|
11
|
+
*
|
|
12
|
+
* The pattern intentionally disallows `.` entirely, so `.`, `..`, and `./`
|
|
13
|
+
* cannot appear — `assertSessionContained` below is belt-and-braces in the
|
|
14
|
+
* spirit of `assertContainedUnder` in seedResolve.ts.
|
|
15
|
+
*/
|
|
16
|
+
const SESSION_ID_RE = /^[A-Za-z0-9_-]+$/;
|
|
17
|
+
/** Throw INVALID_INPUT unless `sessionId` is a bare, path-safe label. */
|
|
18
|
+
export function assertSessionId(sessionId) {
|
|
19
|
+
if (!SESSION_ID_RE.test(sessionId)) {
|
|
20
|
+
throw new CompostError('INVALID_INPUT', `Invalid session id ${JSON.stringify(sessionId)} — use letters, digits, '-' or '_' only (no path separators or '..').`);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Resolve `<seedPath>/sessions/<sessionId>` and assert it stays under the
|
|
25
|
+
* seed's `sessions/` root. Returns the validated absolute directory. Catches
|
|
26
|
+
* any escape the deny-list regex might miss before any fs op runs.
|
|
27
|
+
*/
|
|
28
|
+
export function assertSessionContained(seedPath, sessionId) {
|
|
29
|
+
assertSessionId(sessionId);
|
|
30
|
+
const sessionsRoot = resolve(seedPath, 'sessions');
|
|
31
|
+
const dir = resolve(sessionsRoot, sessionId);
|
|
32
|
+
if (!isContainedUnder(sessionsRoot, dir)) {
|
|
33
|
+
throw new CompostError('INVALID_INPUT', `Session id resolves outside the seed: ${dir}`);
|
|
34
|
+
}
|
|
35
|
+
return dir;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=sessionId.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionId.js","sourceRoot":"","sources":["../../src/lib/sessionId.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAEhD;;;;;;;;;;;GAWG;AACH,MAAM,aAAa,GAAG,kBAAkB,CAAA;AAExC,yEAAyE;AACzE,MAAM,UAAU,eAAe,CAAC,SAAiB;IAC/C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,YAAY,CACpB,eAAe,EACf,sBAAsB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,uEAAuE,CACvH,CAAA;IACH,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,QAAgB,EAAE,SAAiB;IACxE,eAAe,CAAC,SAAS,CAAC,CAAA;IAC1B,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;IAClD,MAAM,GAAG,GAAG,OAAO,CAAC,YAAY,EAAE,SAAS,CAAC,CAAA;IAC5C,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,GAAG,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,YAAY,CAAC,eAAe,EAAE,yCAAyC,GAAG,EAAE,CAAC,CAAA;IACzF,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC"}
|
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,7 +34,15 @@ 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
|
}
|
|
42
|
+
/** Per-repo timeout for the gated-license probe — a slow/hanging HuggingFace
|
|
43
|
+
* response must never stall `compost setup`, which is meant to be cheap and
|
|
44
|
+
* deterministic. On timeout the check degrades to a "could not verify" warn. */
|
|
45
|
+
export declare const LICENSE_PROBE_TIMEOUT_MS = 5000;
|
|
37
46
|
/**
|
|
38
47
|
* Run every prerequisite probe and return a checklist. Read-only: probes,
|
|
39
48
|
* never installs. The `/compost-setup` skill reads this JSON and offers to run
|
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;AAGhD,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;AAID;;gFAEgF;AAChF,eAAO,MAAM,wBAAwB,OAAO,CAAA;AAe5C;;;;;GAKG;AACH,wBAAsB,QAAQ,CAAC,IAAI,GAAE,SAAc,GAAG,OAAO,CAAC,WAAW,CAAC,CA6TzE"}
|
package/dist/lib/setup.js
CHANGED
|
@@ -2,14 +2,22 @@ import { execFile } from 'node:child_process';
|
|
|
2
2
|
import { existsSync, readdirSync } from 'node:fs';
|
|
3
3
|
import { join, resolve } from 'node:path';
|
|
4
4
|
import { promisify } from 'node:util';
|
|
5
|
-
import { resolveFetch } from '../llm/http.js';
|
|
5
|
+
import { fetchWithTimeout, resolveFetch } from '../llm/http.js';
|
|
6
|
+
import { scrubbedEnv } from './childEnv.js';
|
|
6
7
|
import { diagnoseNativeRuntime, isAppleSilicon, resolveNativeRuntime } from './nativeRuntime.js';
|
|
8
|
+
import { auditSecretsPerms, HF_ALIASES, resolveSecret } from './secrets.js';
|
|
9
|
+
import { checkVersionStatus, UPGRADE_COMMAND } from './version.js';
|
|
7
10
|
const execFileAsync = promisify(execFile);
|
|
8
11
|
const PYANNOTE_GATED_REPOS = ['pyannote/speaker-diarization-3.1', 'pyannote/segmentation-3.0'];
|
|
12
|
+
/** Per-repo timeout for the gated-license probe — a slow/hanging HuggingFace
|
|
13
|
+
* response must never stall `compost setup`, which is meant to be cheap and
|
|
14
|
+
* deterministic. On timeout the check degrades to a "could not verify" warn. */
|
|
15
|
+
export const LICENSE_PROBE_TIMEOUT_MS = 5000;
|
|
9
16
|
const DEFAULT_REQUIRED_MODELS = ['bge-m3'];
|
|
10
17
|
const defaultExec = async (cmd, args) => {
|
|
11
18
|
try {
|
|
12
|
-
|
|
19
|
+
// Probes (docker info, python import checks) need no compost secrets (#236).
|
|
20
|
+
const { stdout } = await execFileAsync(cmd, args, { timeout: 5000, env: scrubbedEnv() });
|
|
13
21
|
return { stdout, ok: true };
|
|
14
22
|
}
|
|
15
23
|
catch (err) {
|
|
@@ -32,6 +40,28 @@ export async function runSetup(deps = {}) {
|
|
|
32
40
|
const transcriberUrl = (deps.transcriberUrl ?? 'http://localhost:7862').replace(/\/$/, '');
|
|
33
41
|
const requiredModels = deps.requiredOllamaModels ?? DEFAULT_REQUIRED_MODELS;
|
|
34
42
|
const checks = [];
|
|
43
|
+
// 0. Is this install current? An outdated CLI misses bundled components and
|
|
44
|
+
// produces failures that look like machine problems (#245 — a field user on
|
|
45
|
+
// an old rc spent a session debugging exactly that). Best-effort: the check
|
|
46
|
+
// is silently skipped offline or when the registry doesn't answer fast.
|
|
47
|
+
const version = await checkVersionStatus(deps.fetchImpl !== undefined ? { fetchImpl: deps.fetchImpl } : {});
|
|
48
|
+
if (version !== null) {
|
|
49
|
+
checks.push(version.behind
|
|
50
|
+
? {
|
|
51
|
+
id: 'version',
|
|
52
|
+
label: 'CLI version',
|
|
53
|
+
status: 'warn',
|
|
54
|
+
detail: `${version.current} installed, ${version.latest} available — old versions miss bundled components`,
|
|
55
|
+
fix: UPGRADE_COMMAND,
|
|
56
|
+
}
|
|
57
|
+
: {
|
|
58
|
+
id: 'version',
|
|
59
|
+
label: 'CLI version',
|
|
60
|
+
status: 'ok',
|
|
61
|
+
detail: `${version.current} (latest)`,
|
|
62
|
+
fix: null,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
35
65
|
// 1. Ollama reachable + 2. required models present (one probe, two checks).
|
|
36
66
|
let ollamaTags = null;
|
|
37
67
|
try {
|
|
@@ -173,15 +203,39 @@ export async function runSetup(deps = {}) {
|
|
|
173
203
|
});
|
|
174
204
|
}
|
|
175
205
|
}
|
|
176
|
-
//
|
|
177
|
-
|
|
178
|
-
|
|
206
|
+
// 4c. Derived: is ANY ingest engine available? Document ingest (PDF/DOCX/…)
|
|
207
|
+
// rides the same engine as transcription, so a machine with neither the
|
|
208
|
+
// native runtime nor the Docker service cannot process a single inbox file —
|
|
209
|
+
// that is a FAIL, not an accumulation of warns (#242). The individual checks
|
|
210
|
+
// above stay warn-level because either one alone is sufficient.
|
|
211
|
+
const nativeOk = checks.some((c) => c.id === 'native-transcribe' && c.status === 'ok');
|
|
212
|
+
if (!transcriberOk && !nativeOk) {
|
|
213
|
+
checks.push({
|
|
214
|
+
id: 'ingest-engine',
|
|
215
|
+
label: 'Ingest engine',
|
|
216
|
+
status: 'fail',
|
|
217
|
+
detail: 'no transcription engine available — audio AND document (PDF/DOCX/…) ingest will fail',
|
|
218
|
+
fix: (deps.appleSilicon ?? isAppleSilicon())
|
|
219
|
+
? 'compost setup (guided; or compost setup --provision-native)'
|
|
220
|
+
: 'compost setup (guided; or start the Docker transcriber)',
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
// 5. HuggingFace token present. Resolved by the documented precedence:
|
|
224
|
+
// env > OS keychain > ~/.compost/secrets.env (0600). A keychain- or
|
|
225
|
+
// file-stored token counts as "set" here just like an exported env var.
|
|
226
|
+
const secretsDeps = {
|
|
227
|
+
env,
|
|
228
|
+
...(deps.home !== undefined ? { home: deps.home } : {}),
|
|
229
|
+
...(deps.keychain !== undefined ? { keychain: deps.keychain } : {}),
|
|
230
|
+
};
|
|
231
|
+
const hf = resolveSecret('HUGGINGFACE_TOKEN', { ...secretsDeps, aliases: HF_ALIASES });
|
|
232
|
+
if (!hf) {
|
|
179
233
|
checks.push({
|
|
180
234
|
id: 'hf-token',
|
|
181
235
|
label: 'HuggingFace token',
|
|
182
236
|
status: 'warn',
|
|
183
|
-
detail: '
|
|
184
|
-
fix: '
|
|
237
|
+
detail: 'not set in env, keychain, or ~/.compost/secrets.env (needed for pyannote diarization)',
|
|
238
|
+
fix: 'compost secrets set HUGGINGFACE_TOKEN (or export HUGGINGFACE_TOKEN=hf_…)',
|
|
185
239
|
});
|
|
186
240
|
}
|
|
187
241
|
else {
|
|
@@ -189,38 +243,38 @@ export async function runSetup(deps = {}) {
|
|
|
189
243
|
id: 'hf-token',
|
|
190
244
|
label: 'HuggingFace token',
|
|
191
245
|
status: 'ok',
|
|
192
|
-
detail:
|
|
246
|
+
detail: `set (source: ${hf.source})`,
|
|
193
247
|
fix: null,
|
|
194
248
|
});
|
|
249
|
+
const hfToken = hf.value;
|
|
195
250
|
// 6. pyannote license — must be a FILE fetch, not a metadata ping (the
|
|
196
251
|
// /api/models endpoint returns 200 even when the license isn't accepted).
|
|
197
252
|
for (const repo of PYANNOTE_GATED_REPOS) {
|
|
198
|
-
|
|
253
|
+
const id = `pyannote:${repo}`;
|
|
254
|
+
const label = `pyannote license: ${repo}`;
|
|
199
255
|
try {
|
|
200
|
-
const res = await fetchImpl
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
256
|
+
const res = await fetchWithTimeout(fetchImpl, `https://huggingface.co/${repo}/resolve/main/config.yaml`, { method: 'GET', headers: { Authorization: `Bearer ${hfToken}` } }, LICENSE_PROBE_TIMEOUT_MS);
|
|
257
|
+
checks.push(res.ok
|
|
258
|
+
? { id, label, status: 'ok', detail: 'accepted', fix: null }
|
|
259
|
+
: {
|
|
260
|
+
id,
|
|
261
|
+
label,
|
|
262
|
+
status: 'warn',
|
|
263
|
+
detail: 'license not accepted (403 on the gated model file)',
|
|
264
|
+
fix: `Accept at https://huggingface.co/${repo} (logged in as the token's account)`,
|
|
265
|
+
});
|
|
205
266
|
}
|
|
206
267
|
catch {
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
label: `pyannote license: ${repo}`,
|
|
213
|
-
status: 'ok',
|
|
214
|
-
detail: 'accepted',
|
|
215
|
-
fix: null,
|
|
216
|
-
}
|
|
217
|
-
: {
|
|
218
|
-
id: `pyannote:${repo}`,
|
|
219
|
-
label: `pyannote license: ${repo}`,
|
|
268
|
+
// Network failure or the probe timed out — can't verify, but a flaky or
|
|
269
|
+
// slow HuggingFace must not fail setup; surface an unverified warn.
|
|
270
|
+
checks.push({
|
|
271
|
+
id,
|
|
272
|
+
label,
|
|
220
273
|
status: 'warn',
|
|
221
|
-
detail: '
|
|
222
|
-
fix: `
|
|
274
|
+
detail: 'could not verify license (HuggingFace unreachable or timed out)',
|
|
275
|
+
fix: `Check at https://huggingface.co/${repo}`,
|
|
223
276
|
});
|
|
277
|
+
}
|
|
224
278
|
}
|
|
225
279
|
}
|
|
226
280
|
// 7. Seeds/ directory present.
|
|
@@ -247,6 +301,20 @@ export async function runSetup(deps = {}) {
|
|
|
247
301
|
fix: 'compost init <name> (scaffolds .compost/config.toml)',
|
|
248
302
|
});
|
|
249
303
|
}
|
|
304
|
+
// 9. Secret-file permissions. A group/world-readable token file is a real
|
|
305
|
+
// leak, but with a one-line fix — surface it as a warn (the startup
|
|
306
|
+
// autoloader independently *refuses* to read an insecure secrets.env). Only
|
|
307
|
+
// emitted when there's something to flag; POSIX-only (Windows uses ACLs).
|
|
308
|
+
const permIssues = auditSecretsPerms(secretsDeps);
|
|
309
|
+
for (const issue of permIssues) {
|
|
310
|
+
checks.push({
|
|
311
|
+
id: `secret-perms:${issue.path}`,
|
|
312
|
+
label: 'Secret file permissions',
|
|
313
|
+
status: 'warn',
|
|
314
|
+
detail: `${issue.path} is ${issue.mode} — ${issue.detail}`,
|
|
315
|
+
fix: issue.fix,
|
|
316
|
+
});
|
|
317
|
+
}
|
|
250
318
|
const ready = checks.every((c) => c.status !== 'fail');
|
|
251
319
|
return { schema_version: '1.0', ready, checks };
|
|
252
320
|
}
|