@they-juanreina/compost-cli 0.1.2 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/agreement.d.ts +3 -0
- package/dist/commands/agreement.d.ts.map +1 -0
- package/dist/commands/agreement.js +35 -0
- package/dist/commands/agreement.js.map +1 -0
- package/dist/commands/backup.d.ts +3 -0
- package/dist/commands/backup.d.ts.map +1 -0
- package/dist/commands/backup.js +31 -0
- package/dist/commands/backup.js.map +1 -0
- package/dist/commands/chat.d.ts.map +1 -1
- package/dist/commands/chat.js +3 -2
- package/dist/commands/chat.js.map +1 -1
- package/dist/commands/create.d.ts +1 -0
- package/dist/commands/create.d.ts.map +1 -1
- package/dist/commands/create.js +39 -1
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/export.d.ts.map +1 -1
- package/dist/commands/export.js +47 -4
- package/dist/commands/export.js.map +1 -1
- package/dist/commands/import.d.ts +3 -0
- package/dist/commands/import.d.ts.map +1 -0
- package/dist/commands/import.js +64 -0
- package/dist/commands/import.js.map +1 -0
- package/dist/commands/ingest.d.ts.map +1 -1
- package/dist/commands/ingest.js +1 -0
- package/dist/commands/ingest.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +2 -0
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/jobs.d.ts +3 -0
- package/dist/commands/jobs.d.ts.map +1 -0
- package/dist/commands/jobs.js +105 -0
- package/dist/commands/jobs.js.map +1 -0
- package/dist/commands/label.d.ts +3 -0
- package/dist/commands/label.d.ts.map +1 -0
- package/dist/commands/label.js +67 -0
- package/dist/commands/label.js.map +1 -0
- package/dist/commands/models.d.ts.map +1 -1
- package/dist/commands/models.js +2 -1
- package/dist/commands/models.js.map +1 -1
- package/dist/commands/recode.d.ts +3 -0
- package/dist/commands/recode.d.ts.map +1 -0
- package/dist/commands/recode.js +60 -0
- package/dist/commands/recode.js.map +1 -0
- package/dist/commands/reindex.d.ts.map +1 -1
- package/dist/commands/reindex.js +19 -7
- package/dist/commands/reindex.js.map +1 -1
- package/dist/commands/rerun.d.ts +3 -0
- package/dist/commands/rerun.d.ts.map +1 -0
- package/dist/commands/rerun.js +91 -0
- package/dist/commands/rerun.js.map +1 -0
- package/dist/commands/search.d.ts.map +1 -1
- package/dist/commands/search.js +12 -1
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/secrets.d.ts +3 -0
- package/dist/commands/secrets.d.ts.map +1 -0
- package/dist/commands/secrets.js +145 -0
- package/dist/commands/secrets.js.map +1 -0
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +95 -2
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/setupItem.d.ts +26 -0
- package/dist/commands/setupItem.d.ts.map +1 -0
- package/dist/commands/setupItem.js +145 -0
- package/dist/commands/setupItem.js.map +1 -0
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +2 -1
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/transcribe.d.ts.map +1 -1
- package/dist/commands/transcribe.js +32 -4
- package/dist/commands/transcribe.js.map +1 -1
- package/dist/commands/validate.d.ts.map +1 -1
- package/dist/commands/validate.js +29 -1
- package/dist/commands/validate.js.map +1 -1
- package/dist/commands/watch.d.ts.map +1 -1
- package/dist/commands/watch.js +53 -6
- package/dist/commands/watch.js.map +1 -1
- package/dist/engine.d.ts +23 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js +32 -0
- package/dist/engine.js.map +1 -0
- package/dist/errors.d.ts +5 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +6 -0
- package/dist/errors.js.map +1 -1
- package/dist/exporters/pdf.d.ts.map +1 -1
- package/dist/exporters/pdf.js +2 -1
- package/dist/exporters/pdf.js.map +1 -1
- package/dist/exporters/prov.d.ts +11 -0
- package/dist/exporters/prov.d.ts.map +1 -0
- package/dist/exporters/prov.js +151 -0
- package/dist/exporters/prov.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/legacy_client.d.ts.map +1 -1
- package/dist/legacy_client.js +2 -1
- package/dist/legacy_client.js.map +1 -1
- package/dist/lib/agreement.d.ts +77 -0
- package/dist/lib/agreement.d.ts.map +1 -0
- package/dist/lib/agreement.js +261 -0
- package/dist/lib/agreement.js.map +1 -0
- package/dist/lib/artifacts.d.ts +35 -2
- package/dist/lib/artifacts.d.ts.map +1 -1
- package/dist/lib/artifacts.js +158 -29
- package/dist/lib/artifacts.js.map +1 -1
- package/dist/lib/backup.d.ts +37 -0
- package/dist/lib/backup.d.ts.map +1 -0
- package/dist/lib/backup.js +57 -0
- package/dist/lib/backup.js.map +1 -0
- package/dist/lib/childEnv.d.ts +13 -0
- package/dist/lib/childEnv.d.ts.map +1 -0
- package/dist/lib/childEnv.js +45 -0
- package/dist/lib/childEnv.js.map +1 -0
- package/dist/lib/config.d.ts +3 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/doctor.d.ts +3 -0
- package/dist/lib/doctor.d.ts.map +1 -1
- package/dist/lib/doctor.js +24 -1
- package/dist/lib/doctor.js.map +1 -1
- package/dist/lib/events.d.ts +44 -1
- package/dist/lib/events.d.ts.map +1 -1
- package/dist/lib/events.js +55 -2
- package/dist/lib/events.js.map +1 -1
- package/dist/lib/importTranscript.d.ts +16 -0
- package/dist/lib/importTranscript.d.ts.map +1 -0
- package/dist/lib/importTranscript.js +94 -0
- package/dist/lib/importTranscript.js.map +1 -0
- package/dist/lib/ingest.d.ts.map +1 -1
- package/dist/lib/ingest.js +12 -6
- package/dist/lib/ingest.js.map +1 -1
- package/dist/lib/journal.d.ts +13 -4
- package/dist/lib/journal.d.ts.map +1 -1
- package/dist/lib/journal.js +53 -16
- package/dist/lib/journal.js.map +1 -1
- package/dist/lib/legacyNative.d.ts +17 -0
- package/dist/lib/legacyNative.d.ts.map +1 -0
- package/dist/lib/legacyNative.js +38 -0
- package/dist/lib/legacyNative.js.map +1 -0
- package/dist/lib/migrate.d.ts.map +1 -1
- package/dist/lib/migrate.js +9 -2
- package/dist/lib/migrate.js.map +1 -1
- package/dist/lib/nativeRuntime.d.ts +31 -0
- package/dist/lib/nativeRuntime.d.ts.map +1 -1
- package/dist/lib/nativeRuntime.js +38 -0
- package/dist/lib/nativeRuntime.js.map +1 -1
- package/dist/lib/pathSafe.d.ts +8 -0
- package/dist/lib/pathSafe.d.ts.map +1 -0
- package/dist/lib/pathSafe.js +12 -0
- package/dist/lib/pathSafe.js.map +1 -0
- package/dist/lib/provisionNative.d.ts.map +1 -1
- package/dist/lib/provisionNative.js +7 -3
- package/dist/lib/provisionNative.js.map +1 -1
- package/dist/lib/queue.d.ts +25 -0
- package/dist/lib/queue.d.ts.map +1 -1
- package/dist/lib/queue.js +70 -3
- package/dist/lib/queue.js.map +1 -1
- package/dist/lib/reads.d.ts +24 -0
- package/dist/lib/reads.d.ts.map +1 -0
- package/dist/lib/reads.js +115 -0
- package/dist/lib/reads.js.map +1 -0
- package/dist/lib/recode.d.ts +19 -0
- package/dist/lib/recode.d.ts.map +1 -0
- package/dist/lib/recode.js +43 -0
- package/dist/lib/recode.js.map +1 -0
- package/dist/lib/redact.d.ts +7 -0
- package/dist/lib/redact.d.ts.map +1 -0
- package/dist/lib/redact.js +45 -0
- package/dist/lib/redact.js.map +1 -0
- package/dist/lib/rerun.d.ts +51 -0
- package/dist/lib/rerun.d.ts.map +1 -0
- package/dist/lib/rerun.js +160 -0
- package/dist/lib/rerun.js.map +1 -0
- package/dist/lib/retrieve.d.ts +8 -4
- package/dist/lib/retrieve.d.ts.map +1 -1
- package/dist/lib/retrieve.js +14 -3
- package/dist/lib/retrieve.js.map +1 -1
- package/dist/lib/saturate.js +3 -3
- package/dist/lib/saturate.js.map +1 -1
- package/dist/lib/schemas.generated.d.ts.map +1 -1
- package/dist/lib/schemas.generated.js +28 -0
- package/dist/lib/schemas.generated.js.map +1 -1
- package/dist/lib/secrets.d.ts +158 -0
- package/dist/lib/secrets.d.ts.map +1 -0
- package/dist/lib/secrets.js +514 -0
- package/dist/lib/secrets.js.map +1 -0
- package/dist/lib/seed.d.ts +5 -0
- package/dist/lib/seed.d.ts.map +1 -1
- package/dist/lib/seed.js +15 -2
- package/dist/lib/seed.js.map +1 -1
- package/dist/lib/seedResolve.d.ts +5 -0
- package/dist/lib/seedResolve.d.ts.map +1 -1
- package/dist/lib/seedResolve.js +12 -3
- package/dist/lib/seedResolve.js.map +1 -1
- package/dist/lib/session.d.ts +14 -0
- package/dist/lib/session.d.ts.map +1 -1
- package/dist/lib/session.js +53 -4
- package/dist/lib/session.js.map +1 -1
- package/dist/lib/sessionId.d.ts +9 -0
- package/dist/lib/sessionId.d.ts.map +1 -0
- package/dist/lib/sessionId.js +37 -0
- package/dist/lib/sessionId.js.map +1 -0
- package/dist/lib/setup.d.ts +9 -0
- package/dist/lib/setup.d.ts.map +1 -1
- package/dist/lib/setup.js +97 -29
- package/dist/lib/setup.js.map +1 -1
- package/dist/lib/setupItem.d.ts +99 -0
- package/dist/lib/setupItem.d.ts.map +1 -0
- package/dist/lib/setupItem.js +262 -0
- package/dist/lib/setupItem.js.map +1 -0
- package/dist/lib/setupWizard.d.ts +53 -0
- package/dist/lib/setupWizard.d.ts.map +1 -0
- package/dist/lib/setupWizard.js +347 -0
- package/dist/lib/setupWizard.js.map +1 -0
- package/dist/lib/snap.d.ts.map +1 -1
- package/dist/lib/snap.js +5 -0
- package/dist/lib/snap.js.map +1 -1
- package/dist/lib/speakers.d.ts +41 -0
- package/dist/lib/speakers.d.ts.map +1 -0
- package/dist/lib/speakers.js +78 -0
- package/dist/lib/speakers.js.map +1 -0
- package/dist/lib/status.d.ts.map +1 -1
- package/dist/lib/status.js +21 -0
- package/dist/lib/status.js.map +1 -1
- package/dist/lib/stdin.d.ts +5 -0
- package/dist/lib/stdin.d.ts.map +1 -0
- package/dist/lib/stdin.js +12 -0
- package/dist/lib/stdin.js.map +1 -0
- package/dist/lib/transcribeNative.d.ts +4 -9
- package/dist/lib/transcribeNative.d.ts.map +1 -1
- package/dist/lib/transcribeNative.js +11 -26
- package/dist/lib/transcribeNative.js.map +1 -1
- package/dist/lib/userConfig.d.ts +22 -0
- package/dist/lib/userConfig.d.ts.map +1 -0
- package/dist/lib/userConfig.js +67 -0
- package/dist/lib/userConfig.js.map +1 -0
- package/dist/lib/validate.d.ts +18 -0
- package/dist/lib/validate.d.ts.map +1 -1
- package/dist/lib/validate.js +71 -1
- package/dist/lib/validate.js.map +1 -1
- package/dist/lib/version.d.ts +30 -0
- package/dist/lib/version.d.ts.map +1 -0
- package/dist/lib/version.js +65 -0
- package/dist/lib/version.js.map +1 -0
- package/dist/llm/adapter.d.ts +5 -0
- package/dist/llm/adapter.d.ts.map +1 -1
- package/dist/llm/adapter.js +27 -8
- package/dist/llm/adapter.js.map +1 -1
- package/dist/llm/http.d.ts +22 -1
- package/dist/llm/http.d.ts.map +1 -1
- package/dist/llm/http.js +52 -30
- package/dist/llm/http.js.map +1 -1
- package/dist/llm/providers/anthropic.d.ts.map +1 -1
- package/dist/llm/providers/anthropic.js +6 -9
- package/dist/llm/providers/anthropic.js.map +1 -1
- package/dist/llm/providers/ollama.d.ts.map +1 -1
- package/dist/llm/providers/ollama.js +8 -7
- package/dist/llm/providers/ollama.js.map +1 -1
- package/dist/llm/providers/openai_compatible.d.ts.map +1 -1
- package/dist/llm/providers/openai_compatible.js +2 -7
- package/dist/llm/providers/openai_compatible.js.map +1 -1
- package/dist/logging.d.ts.map +1 -1
- package/dist/logging.js +3 -1
- package/dist/logging.js.map +1 -1
- package/dist/loops/embed_worker.d.ts +3 -0
- package/dist/loops/embed_worker.d.ts.map +1 -1
- package/dist/loops/embed_worker.js +11 -4
- package/dist/loops/embed_worker.js.map +1 -1
- package/dist/loops/ingest_watcher.d.ts.map +1 -1
- package/dist/loops/ingest_watcher.js +6 -3
- package/dist/loops/ingest_watcher.js.map +1 -1
- package/dist/loops/legacy_worker.d.ts +28 -1
- package/dist/loops/legacy_worker.d.ts.map +1 -1
- package/dist/loops/legacy_worker.js +91 -10
- package/dist/loops/legacy_worker.js.map +1 -1
- package/dist/loops/supervisor.d.ts +7 -0
- package/dist/loops/supervisor.d.ts.map +1 -1
- package/dist/loops/supervisor.js +17 -2
- package/dist/loops/supervisor.js.map +1 -1
- package/dist/loops/synthesis.d.ts.map +1 -1
- package/dist/loops/synthesis.js +15 -0
- package/dist/loops/synthesis.js.map +1 -1
- package/dist/loops/transcribe_worker.d.ts +3 -0
- package/dist/loops/transcribe_worker.d.ts.map +1 -1
- package/dist/loops/transcribe_worker.js +15 -7
- package/dist/loops/transcribe_worker.js.map +1 -1
- package/dist/output.d.ts +13 -1
- package/dist/output.d.ts.map +1 -1
- package/dist/output.js +27 -6
- package/dist/output.js.map +1 -1
- package/dist/render/glyphs.d.ts +30 -0
- package/dist/render/glyphs.d.ts.map +1 -0
- package/dist/render/glyphs.js +38 -0
- package/dist/render/glyphs.js.map +1 -0
- package/dist/render/human.d.ts +22 -0
- package/dist/render/human.d.ts.map +1 -0
- package/dist/render/human.js +62 -0
- package/dist/render/human.js.map +1 -0
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +32 -4
- package/dist/router.js.map +1 -1
- package/dist/transcriber_client.d.ts.map +1 -1
- package/dist/transcriber_client.js +2 -1
- package/dist/transcriber_client.js.map +1 -1
- package/package.json +12 -5
- package/templates/AGENTS.md +1 -1
- package/templates/config.toml +6 -1
- package/transcriber/app/diarization.py +36 -6
- package/transcriber/app/legacy_cli.py +90 -0
- package/transcriber/app/pipeline.py +13 -7
- package/transcriber/app/prosody.py +5 -0
- package/transcriber/app/transcribe_cli.py +15 -1
- package/transcriber/app/vad.py +82 -11
package/dist/lib/artifacts.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { existsSync, mkdirSync, readdirSync, rmSync, writeFileSync } from 'node:fs';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
|
-
import Database from 'better-sqlite3';
|
|
4
3
|
import { CompostError } from '../errors.js';
|
|
5
|
-
import { artifactId, emitCreate, emitEndorse, openSeedEvents } from './events.js';
|
|
4
|
+
import { artifactId, emitCreate, emitEndorse, emitReject, emitUpdate, openReadonlyEvents, openSeedEvents, } from './events.js';
|
|
6
5
|
// ---------------------------------------------------------------- helpers
|
|
7
6
|
/** Next sequential H-NNN in highlights/, scanning existing files. */
|
|
8
7
|
function nextHighlightId(dir) {
|
|
@@ -96,6 +95,7 @@ export function createHighlight(seedPath, input) {
|
|
|
96
95
|
artifactKind: 'highlight',
|
|
97
96
|
initialState,
|
|
98
97
|
author: input.author,
|
|
98
|
+
...(input.inputs !== undefined ? { inputs: input.inputs } : {}),
|
|
99
99
|
});
|
|
100
100
|
return { id, artifact_id: sha, path, event_id };
|
|
101
101
|
}
|
|
@@ -122,6 +122,7 @@ export function createCode(seedPath, input) {
|
|
|
122
122
|
artifactKind: 'code',
|
|
123
123
|
initialState,
|
|
124
124
|
author: input.author,
|
|
125
|
+
...(input.inputs !== undefined ? { inputs: input.inputs } : {}),
|
|
125
126
|
});
|
|
126
127
|
return { id, artifact_id: sha, path, event_id };
|
|
127
128
|
}
|
|
@@ -149,6 +150,7 @@ export function createTheme(seedPath, input) {
|
|
|
149
150
|
artifactKind: 'theme',
|
|
150
151
|
initialState,
|
|
151
152
|
author: input.author,
|
|
153
|
+
...(input.inputs !== undefined ? { inputs: input.inputs } : {}),
|
|
152
154
|
});
|
|
153
155
|
return { id, artifact_id: sha, path, event_id };
|
|
154
156
|
}
|
|
@@ -168,47 +170,63 @@ export function tryResolveHumanRef(db, ref) {
|
|
|
168
170
|
if (!HUMAN_REF_RE.test(ref))
|
|
169
171
|
return undefined;
|
|
170
172
|
return db
|
|
171
|
-
.prepare("SELECT id, artifact_kind, artifact_id FROM events WHERE action = 'create' AND json_extract(payload, '$.id') = ? ORDER BY ts, rowid LIMIT 1")
|
|
173
|
+
.prepare("SELECT id, artifact_kind, artifact_id, actor_id FROM events WHERE action = 'create' AND json_extract(payload, '$.id') = ? ORDER BY ts, rowid LIMIT 1")
|
|
172
174
|
.get(ref);
|
|
173
175
|
}
|
|
176
|
+
/**
|
|
177
|
+
* Resolve an artifact ref (human id, full/prefix SHA, or `latest:<kind>=<seed>`)
|
|
178
|
+
* to its create event row. Shared by endorse/reject/update so every mutation
|
|
179
|
+
* path accepts the same refs `compost create`/blame print (#168). Throws
|
|
180
|
+
* INVALID_INPUT only when the ref is neither human-, SHA-, nor latest-shaped;
|
|
181
|
+
* returns undefined when it's well-shaped but matches no create event (callers
|
|
182
|
+
* raise a clearer FILE_NOT_FOUND).
|
|
183
|
+
*/
|
|
184
|
+
function findCreateEvent(db, artifactRef) {
|
|
185
|
+
const human = tryResolveHumanRef(db, artifactRef);
|
|
186
|
+
if (human !== undefined)
|
|
187
|
+
return human;
|
|
188
|
+
const latest = /^latest:(\w+)=(.+)$/.exec(artifactRef);
|
|
189
|
+
if (latest) {
|
|
190
|
+
const kind = latest[1];
|
|
191
|
+
return db
|
|
192
|
+
.prepare("SELECT id, artifact_kind, artifact_id, actor_id FROM events WHERE artifact_kind = ? AND action = 'create' ORDER BY ts DESC, rowid DESC LIMIT 1")
|
|
193
|
+
.get(kind);
|
|
194
|
+
}
|
|
195
|
+
if (/^[a-f0-9]{8,64}$/i.test(artifactRef)) {
|
|
196
|
+
return db
|
|
197
|
+
.prepare("SELECT id, artifact_kind, artifact_id, actor_id FROM events WHERE artifact_id LIKE ? AND action = 'create' ORDER BY ts, rowid LIMIT 1")
|
|
198
|
+
.get(`${artifactRef.toLowerCase()}%`);
|
|
199
|
+
}
|
|
200
|
+
if (!HUMAN_REF_RE.test(artifactRef)) {
|
|
201
|
+
// Not human-shaped, not SHA-shaped, not latest: → user typed something
|
|
202
|
+
// unparseable. (Human-shaped refs that didn't resolve return undefined so
|
|
203
|
+
// callers raise FILE_NOT_FOUND with a clearer message.)
|
|
204
|
+
throw new CompostError('INVALID_INPUT', `Invalid artifact ref "${artifactRef}". Use the id from \`compost create\` (e.g. C-slug, H-001), a SHA256 prefix, or latest:<kind>=<seed>.`);
|
|
205
|
+
}
|
|
206
|
+
return undefined;
|
|
207
|
+
}
|
|
208
|
+
/** Latest event id on an artifact's timeline — the parent a new reject/update
|
|
209
|
+
* event chains to (vs endorse, which chains to create for #168 round-tripping). */
|
|
210
|
+
function latestEventId(db, artifactId) {
|
|
211
|
+
const row = db
|
|
212
|
+
.prepare('SELECT id FROM events WHERE artifact_id = ? ORDER BY ts DESC, rowid DESC LIMIT 1')
|
|
213
|
+
.get(artifactId);
|
|
214
|
+
return row?.id;
|
|
215
|
+
}
|
|
174
216
|
/**
|
|
175
217
|
* Resolve an artifact ref (human id, full/prefix SHA, or `latest:<kind>=<seed>`)
|
|
176
218
|
* to its create event, then emit a researcher endorse chaining it. Mirrors
|
|
177
219
|
* blame's ref resolution so `compost endorse <id-from-create>` works (#168).
|
|
178
220
|
*/
|
|
179
221
|
export function endorseArtifact(seedPath, artifactRef, researcherId) {
|
|
180
|
-
const
|
|
181
|
-
if (!existsSync(eventsDb)) {
|
|
182
|
-
throw new CompostError('FILE_NOT_FOUND', `No events.sqlite in seed; nothing to endorse.`);
|
|
183
|
-
}
|
|
184
|
-
const db = new Database(eventsDb, { readonly: true, fileMustExist: true });
|
|
222
|
+
const db = openReadonlyEvents(seedPath, 'No events.sqlite in seed; nothing to endorse.');
|
|
185
223
|
let createRow;
|
|
186
224
|
// Same (artifact_id, researcher) endorse already on the timeline → idempotent
|
|
187
225
|
// no-op (#169). Looked up alongside the create row so we hold the read-only
|
|
188
226
|
// connection once and avoid a stat/open dance.
|
|
189
227
|
let existingEndorse;
|
|
190
228
|
try {
|
|
191
|
-
createRow =
|
|
192
|
-
if (createRow === undefined) {
|
|
193
|
-
const latest = /^latest:(\w+)=(.+)$/.exec(artifactRef);
|
|
194
|
-
if (latest) {
|
|
195
|
-
const kind = latest[1];
|
|
196
|
-
createRow = db
|
|
197
|
-
.prepare("SELECT id, artifact_kind, artifact_id FROM events WHERE artifact_kind = ? AND action = 'create' ORDER BY ts DESC, rowid DESC LIMIT 1")
|
|
198
|
-
.get(kind);
|
|
199
|
-
}
|
|
200
|
-
else if (/^[a-f0-9]{8,64}$/i.test(artifactRef)) {
|
|
201
|
-
createRow = db
|
|
202
|
-
.prepare("SELECT id, artifact_kind, artifact_id FROM events WHERE artifact_id LIKE ? AND action = 'create' ORDER BY ts, rowid LIMIT 1")
|
|
203
|
-
.get(`${artifactRef.toLowerCase()}%`);
|
|
204
|
-
}
|
|
205
|
-
else if (!HUMAN_REF_RE.test(artifactRef)) {
|
|
206
|
-
// Not human-shaped, not SHA-shaped, not latest: → user typed something
|
|
207
|
-
// unparseable. (Human-shaped refs that didn't resolve fall through to
|
|
208
|
-
// the FILE_NOT_FOUND below with a clearer message.)
|
|
209
|
-
throw new CompostError('INVALID_INPUT', `Invalid artifact ref "${artifactRef}". Use the id from \`compost create\` (e.g. C-slug, H-001), a SHA256 prefix, or latest:<kind>=<seed>.`);
|
|
210
|
-
}
|
|
211
|
-
}
|
|
229
|
+
createRow = findCreateEvent(db, artifactRef);
|
|
212
230
|
if (createRow !== undefined) {
|
|
213
231
|
existingEndorse = db
|
|
214
232
|
.prepare("SELECT id, parent_event FROM events WHERE artifact_id = ? AND action = 'endorse' AND actor_id = ? ORDER BY ts, rowid LIMIT 1")
|
|
@@ -221,6 +239,14 @@ export function endorseArtifact(seedPath, artifactRef, researcherId) {
|
|
|
221
239
|
if (createRow === undefined) {
|
|
222
240
|
throw new CompostError('FILE_NOT_FOUND', `No create event found for ref "${artifactRef}".`);
|
|
223
241
|
}
|
|
242
|
+
// Refuse a self-endorse: the actor who created an artifact can't also be the
|
|
243
|
+
// one who endorses it (#236, defense-in-depth). The [draft]→endorsed gate is a
|
|
244
|
+
// human approving an AI/agent suggestion; an agent endorsing under the same
|
|
245
|
+
// actor_id it created with would collapse the gate. The endorsing identity is
|
|
246
|
+
// bound to $COMPOST_USER server-side (commands/endorse.ts), not a tool arg.
|
|
247
|
+
if (researcherId === createRow.actor_id) {
|
|
248
|
+
throw new CompostError('INVALID_INPUT', `Refusing to self-endorse: "${researcherId}" is the actor that created this artifact. Endorsement is a second actor approving it — set COMPOST_USER (or pass --researcher) to a human reviewer distinct from the author.`);
|
|
249
|
+
}
|
|
224
250
|
if (existingEndorse !== undefined) {
|
|
225
251
|
return {
|
|
226
252
|
artifact_id: createRow.artifact_id,
|
|
@@ -247,6 +273,109 @@ export function endorseArtifact(seedPath, artifactRef, researcherId) {
|
|
|
247
273
|
events.close();
|
|
248
274
|
}
|
|
249
275
|
}
|
|
276
|
+
/**
|
|
277
|
+
* Resolve an artifact ref to its create event, then emit a researcher reject
|
|
278
|
+
* chaining the artifact's latest event. Reject archives (current_state is
|
|
279
|
+
* preserved for audit) — the three-actor model's "delete", where nothing is
|
|
280
|
+
* ever truly removed. Idempotent: a second reject by the same researcher is a
|
|
281
|
+
* no-op returning the existing reject.
|
|
282
|
+
*/
|
|
283
|
+
export function rejectArtifact(seedPath, artifactRef, researcherId, note) {
|
|
284
|
+
const db = openReadonlyEvents(seedPath, 'No events.sqlite in seed; nothing to reject.');
|
|
285
|
+
let resolved;
|
|
286
|
+
let existingReject;
|
|
287
|
+
try {
|
|
288
|
+
const createRow = findCreateEvent(db, artifactRef);
|
|
289
|
+
if (createRow !== undefined) {
|
|
290
|
+
existingReject = db
|
|
291
|
+
.prepare("SELECT id, parent_event FROM events WHERE artifact_id = ? AND action = 'reject' AND actor_id = ? ORDER BY ts, rowid LIMIT 1")
|
|
292
|
+
.get(createRow.artifact_id, researcherId);
|
|
293
|
+
resolved = {
|
|
294
|
+
createRow,
|
|
295
|
+
parentEventId: latestEventId(db, createRow.artifact_id) ?? createRow.id,
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
finally {
|
|
300
|
+
db.close();
|
|
301
|
+
}
|
|
302
|
+
if (resolved === undefined) {
|
|
303
|
+
throw new CompostError('FILE_NOT_FOUND', `No create event found for ref "${artifactRef}".`);
|
|
304
|
+
}
|
|
305
|
+
const { createRow, parentEventId } = resolved;
|
|
306
|
+
if (existingReject !== undefined) {
|
|
307
|
+
return {
|
|
308
|
+
artifact_id: createRow.artifact_id,
|
|
309
|
+
reject_event_id: existingReject.id,
|
|
310
|
+
parent_event_id: existingReject.parent_event ?? createRow.id,
|
|
311
|
+
already_rejected: true,
|
|
312
|
+
};
|
|
313
|
+
}
|
|
314
|
+
const events = openSeedEvents(seedPath);
|
|
315
|
+
try {
|
|
316
|
+
const reject = emitReject(events, {
|
|
317
|
+
artifactKind: createRow.artifact_kind,
|
|
318
|
+
artifactId: createRow.artifact_id,
|
|
319
|
+
parentEventId,
|
|
320
|
+
researcherId,
|
|
321
|
+
...(note !== undefined ? { note } : {}),
|
|
322
|
+
});
|
|
323
|
+
return {
|
|
324
|
+
artifact_id: createRow.artifact_id,
|
|
325
|
+
reject_event_id: reject.id,
|
|
326
|
+
parent_event_id: parentEventId,
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
finally {
|
|
330
|
+
events.close();
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
/**
|
|
334
|
+
* Resolve an artifact ref, then emit a field-level update chaining the latest
|
|
335
|
+
* event. The event log records `{ field, before, after }` so blame shows what
|
|
336
|
+
* changed. `before` is best-effort context for the audit trail; the reducer
|
|
337
|
+
* applies only `after`.
|
|
338
|
+
*/
|
|
339
|
+
export function updateArtifact(seedPath, artifactRef, patch, author) {
|
|
340
|
+
const db = openReadonlyEvents(seedPath, 'No events.sqlite in seed; nothing to update.');
|
|
341
|
+
let resolved;
|
|
342
|
+
try {
|
|
343
|
+
const createRow = findCreateEvent(db, artifactRef);
|
|
344
|
+
if (createRow !== undefined) {
|
|
345
|
+
resolved = {
|
|
346
|
+
createRow,
|
|
347
|
+
parentEventId: latestEventId(db, createRow.artifact_id) ?? createRow.id,
|
|
348
|
+
};
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
finally {
|
|
352
|
+
db.close();
|
|
353
|
+
}
|
|
354
|
+
if (resolved === undefined) {
|
|
355
|
+
throw new CompostError('FILE_NOT_FOUND', `No create event found for ref "${artifactRef}".`);
|
|
356
|
+
}
|
|
357
|
+
const { createRow, parentEventId } = resolved;
|
|
358
|
+
const events = openSeedEvents(seedPath);
|
|
359
|
+
try {
|
|
360
|
+
const update = emitUpdate(events, {
|
|
361
|
+
artifactKind: createRow.artifact_kind,
|
|
362
|
+
artifactId: createRow.artifact_id,
|
|
363
|
+
parentEventId,
|
|
364
|
+
author,
|
|
365
|
+
field: patch.field,
|
|
366
|
+
before: patch.before,
|
|
367
|
+
after: patch.after,
|
|
368
|
+
});
|
|
369
|
+
return {
|
|
370
|
+
artifact_id: createRow.artifact_id,
|
|
371
|
+
update_event_id: update.id,
|
|
372
|
+
parent_event_id: parentEventId,
|
|
373
|
+
};
|
|
374
|
+
}
|
|
375
|
+
finally {
|
|
376
|
+
events.close();
|
|
377
|
+
}
|
|
378
|
+
}
|
|
250
379
|
/** Read the configured researcher identity: COMPOST_USER env, else fallback. */
|
|
251
380
|
export function defaultResearcherId() {
|
|
252
381
|
return process.env.COMPOST_USER || process.env.USER || 'researcher';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../../src/lib/artifacts.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../../src/lib/artifacts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Back up a seed's canonical provenance (#236 readiness follow-up).
|
|
3
|
+
*
|
|
4
|
+
* `.compost/events.sqlite` is the append-only event log every artifact's lineage
|
|
5
|
+
* reduces from — it is NOT rebuildable (snapshots/markdown derive from it, never
|
|
6
|
+
* the reverse), yet it lives inside the per-seed `.compost/`, which is gitignored
|
|
7
|
+
* and excluded from backups-of-tracked-files. Losing it makes every claim
|
|
8
|
+
* unattributable. This produces a portable bundle (a copy of the ledger plus a
|
|
9
|
+
* human-auditable W3C PROV-O JSON-LD serialization) in the seed's `exports/`
|
|
10
|
+
* (which IS tracked/synced), so the provenance can travel with the seed.
|
|
11
|
+
*
|
|
12
|
+
* `verify: true` reads the ledger without writing — a cheap pre-move/pre-backup
|
|
13
|
+
* consistency check (a corrupt db throws here rather than silently producing a
|
|
14
|
+
* bad backup).
|
|
15
|
+
*/
|
|
16
|
+
export interface BackupOptions {
|
|
17
|
+
/** Output directory. Defaults to `<seed>/exports`. */
|
|
18
|
+
outDir?: string;
|
|
19
|
+
/** Read-and-check only; write nothing. */
|
|
20
|
+
verify?: boolean;
|
|
21
|
+
/** ISO timestamp for the filenames (injected in tests; defaults to now). */
|
|
22
|
+
now?: () => Date;
|
|
23
|
+
}
|
|
24
|
+
export interface BackupResult {
|
|
25
|
+
seed: string;
|
|
26
|
+
events_db: string;
|
|
27
|
+
mode: 'backup' | 'verify';
|
|
28
|
+
/** Provenance graph counts — double as the consistency summary. */
|
|
29
|
+
entities: number;
|
|
30
|
+
activities: number;
|
|
31
|
+
agents: number;
|
|
32
|
+
/** Written paths (absent in verify mode). */
|
|
33
|
+
ledger_copy?: string;
|
|
34
|
+
provenance?: string;
|
|
35
|
+
}
|
|
36
|
+
export declare function backupSeed(seedPath: string, opts?: BackupOptions): BackupResult;
|
|
37
|
+
//# sourceMappingURL=backup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backup.d.ts","sourceRoot":"","sources":["../../src/lib/backup.ts"],"names":[],"mappings":"AAUA;;;;;;;;;;;;;;GAcG;AAEH,MAAM,WAAW,aAAa;IAC5B,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,0CAA0C;IAC1C,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,4EAA4E;IAC5E,GAAG,CAAC,EAAE,MAAM,IAAI,CAAA;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAA;IACzB,mEAAmE;IACnE,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,6CAA6C;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAE,aAAkB,GAAG,YAAY,CAsDnF"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import Database from 'better-sqlite3';
|
|
4
|
+
import { CompostError } from '../errors.js';
|
|
5
|
+
import { eventsToProvO } from '../exporters/prov.js';
|
|
6
|
+
import { eventsDbPath } from './events.js';
|
|
7
|
+
import { seedNameOf } from './seedResolve.js';
|
|
8
|
+
export function backupSeed(seedPath, opts = {}) {
|
|
9
|
+
const eventsDb = eventsDbPath(seedPath);
|
|
10
|
+
if (!existsSync(eventsDb)) {
|
|
11
|
+
throw new CompostError('FILE_NOT_FOUND', `No events.sqlite at ${eventsDb}. Nothing to back up yet — no artifacts have been created in this seed.`);
|
|
12
|
+
}
|
|
13
|
+
// Reading the full event log doubles as a consistency check: a corrupt ledger
|
|
14
|
+
// throws here instead of silently producing a bad backup.
|
|
15
|
+
const prov = eventsToProvO(eventsDb);
|
|
16
|
+
const seedName = seedNameOf(seedPath);
|
|
17
|
+
if (opts.verify === true) {
|
|
18
|
+
return {
|
|
19
|
+
seed: seedPath,
|
|
20
|
+
events_db: eventsDb,
|
|
21
|
+
mode: 'verify',
|
|
22
|
+
entities: prov.entities,
|
|
23
|
+
activities: prov.activities,
|
|
24
|
+
agents: prov.agents,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
const outDir = opts.outDir ?? join(seedPath, 'exports');
|
|
28
|
+
mkdirSync(outDir, { recursive: true });
|
|
29
|
+
const stamp = (opts.now ?? (() => new Date()))().toISOString().replace(/[:.]/g, '-');
|
|
30
|
+
const ledgerCopy = join(outDir, `${seedName}-events-${stamp}.sqlite`);
|
|
31
|
+
const provenance = join(outDir, `${seedName}-provenance-${stamp}.jsonld`);
|
|
32
|
+
// A *consistent* snapshot, not a raw byte copy. `copyFileSync` of a live db can
|
|
33
|
+
// tear if `compost watch` is emitting events during the backup, and in WAL mode
|
|
34
|
+
// it omits un-checkpointed frames — exactly the way to corrupt the one ledger
|
|
35
|
+
// this feature exists to protect. `VACUUM INTO` takes a transactional read
|
|
36
|
+
// snapshot into a fresh file; it runs on the read-only connection and never
|
|
37
|
+
// mutates the source. Single-quotes in the path are escaped for the SQL literal.
|
|
38
|
+
const src = new Database(eventsDb, { readonly: true, fileMustExist: true });
|
|
39
|
+
try {
|
|
40
|
+
src.exec(`VACUUM INTO '${ledgerCopy.replace(/'/g, "''")}'`);
|
|
41
|
+
}
|
|
42
|
+
finally {
|
|
43
|
+
src.close();
|
|
44
|
+
}
|
|
45
|
+
writeFileSync(provenance, JSON.stringify(prov.document, null, 2), 'utf8');
|
|
46
|
+
return {
|
|
47
|
+
seed: seedPath,
|
|
48
|
+
events_db: eventsDb,
|
|
49
|
+
mode: 'backup',
|
|
50
|
+
entities: prov.entities,
|
|
51
|
+
activities: prov.activities,
|
|
52
|
+
agents: prov.agents,
|
|
53
|
+
ledger_copy: ledgerCopy,
|
|
54
|
+
provenance,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=backup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backup.js","sourceRoot":"","sources":["../../src/lib/backup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAC9D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,OAAO,QAAQ,MAAM,gBAAgB,CAAA;AAErC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAwC7C,MAAM,UAAU,UAAU,CAAC,QAAgB,EAAE,OAAsB,EAAE;IACnE,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAA;IACvC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,YAAY,CACpB,gBAAgB,EAChB,uBAAuB,QAAQ,yEAAyE,CACzG,CAAA;IACH,CAAC;IAED,8EAA8E;IAC9E,0DAA0D;IAC1D,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAA;IACpC,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAA;IAErC,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;QACzB,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,SAAS,EAAE,QAAQ;YACnB,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAA;IACH,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;IACvD,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACtC,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;IACpF,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,QAAQ,WAAW,KAAK,SAAS,CAAC,CAAA;IACrE,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,QAAQ,eAAe,KAAK,SAAS,CAAC,CAAA;IACzE,gFAAgF;IAChF,gFAAgF;IAChF,8EAA8E;IAC9E,2EAA2E;IAC3E,4EAA4E;IAC5E,iFAAiF;IACjF,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAA;IAC3E,IAAI,CAAC;QACH,GAAG,CAAC,IAAI,CAAC,gBAAgB,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAA;IAC7D,CAAC;YAAS,CAAC;QACT,GAAG,CAAC,KAAK,EAAE,CAAA;IACb,CAAC;IACD,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;IAEzE,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,SAAS,EAAE,QAAQ;QACnB,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,WAAW,EAAE,UAAU;QACvB,UAAU;KACX,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** True when `name` looks like it holds a secret and should not be inherited
|
|
2
|
+
* by a child that didn't explicitly ask for it. */
|
|
3
|
+
export declare function isSecretName(name: string): boolean;
|
|
4
|
+
/** A copy of `base` with secret-shaped names removed. Children still inherit
|
|
5
|
+
* PATH/HOME/locale/etc. — just not the user's tokens. */
|
|
6
|
+
export declare function scrubbedEnv(base?: NodeJS.ProcessEnv): NodeJS.ProcessEnv;
|
|
7
|
+
/**
|
|
8
|
+
* A scrubbed env with an explicit allow-list of secrets re-added. Use for a
|
|
9
|
+
* child that needs exactly one secret (e.g. the transcriber needs only
|
|
10
|
+
* `HUGGINGFACE_TOKEN`). Empty/undefined values are dropped.
|
|
11
|
+
*/
|
|
12
|
+
export declare function childEnv(allow?: NodeJS.ProcessEnv, base?: NodeJS.ProcessEnv): NodeJS.ProcessEnv;
|
|
13
|
+
//# sourceMappingURL=childEnv.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"childEnv.d.ts","sourceRoot":"","sources":["../../src/lib/childEnv.ts"],"names":[],"mappings":"AAqBA;mDACmD;AACnD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAElD;AAED;yDACyD;AACzD,wBAAgB,WAAW,CAAC,IAAI,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAAC,UAAU,CAMpF;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CACtB,KAAK,GAAE,MAAM,CAAC,UAAe,EAC7B,IAAI,GAAE,MAAM,CAAC,UAAwB,GACpC,MAAM,CAAC,UAAU,CAMnB"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { KNOWN_SECRET_NAMES } from './secrets.js';
|
|
2
|
+
/**
|
|
3
|
+
* Least-privilege env for spawned child processes (#236 readiness follow-up).
|
|
4
|
+
*
|
|
5
|
+
* Startup autoload copies `~/.compost/secrets.env` into `process.env` so the
|
|
6
|
+
* parent resolves file-stored secrets everywhere. The side effect is that any
|
|
7
|
+
* child spawned with the inherited environment would also receive every secret
|
|
8
|
+
* — a `git commit`, a `docker info` probe, an `ollama pull`, or `pip install`
|
|
9
|
+
* has no need for `ANTHROPIC_API_KEY`/`OPENAI_API_KEY`/`HUGGINGFACE_TOKEN`.
|
|
10
|
+
* Pass `scrubbedEnv()` (no secrets) or `childEnv({ NAME: value })` (a scrubbed
|
|
11
|
+
* env plus exactly the secrets that child needs) instead of the raw inherit.
|
|
12
|
+
*/
|
|
13
|
+
/** Suffix shapes that mark an env var as secret-bearing, so a future provider
|
|
14
|
+
* key (e.g. `MISTRAL_API_KEY`) is scrubbed without editing this list. */
|
|
15
|
+
const SECRET_SHAPE_RE = /(_TOKEN|_API_KEY|_SECRET_KEY|_ACCESS_KEY|_SECRET|_PASSWORD|_PASSWD|_CREDENTIALS?)$/i;
|
|
16
|
+
const KNOWN = new Set(KNOWN_SECRET_NAMES);
|
|
17
|
+
/** True when `name` looks like it holds a secret and should not be inherited
|
|
18
|
+
* by a child that didn't explicitly ask for it. */
|
|
19
|
+
export function isSecretName(name) {
|
|
20
|
+
return KNOWN.has(name) || SECRET_SHAPE_RE.test(name);
|
|
21
|
+
}
|
|
22
|
+
/** A copy of `base` with secret-shaped names removed. Children still inherit
|
|
23
|
+
* PATH/HOME/locale/etc. — just not the user's tokens. */
|
|
24
|
+
export function scrubbedEnv(base = process.env) {
|
|
25
|
+
const out = {};
|
|
26
|
+
for (const [k, v] of Object.entries(base)) {
|
|
27
|
+
if (!isSecretName(k))
|
|
28
|
+
out[k] = v;
|
|
29
|
+
}
|
|
30
|
+
return out;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* A scrubbed env with an explicit allow-list of secrets re-added. Use for a
|
|
34
|
+
* child that needs exactly one secret (e.g. the transcriber needs only
|
|
35
|
+
* `HUGGINGFACE_TOKEN`). Empty/undefined values are dropped.
|
|
36
|
+
*/
|
|
37
|
+
export function childEnv(allow = {}, base = process.env) {
|
|
38
|
+
const out = scrubbedEnv(base);
|
|
39
|
+
for (const [k, v] of Object.entries(allow)) {
|
|
40
|
+
if (v !== undefined && v !== '')
|
|
41
|
+
out[k] = v;
|
|
42
|
+
}
|
|
43
|
+
return out;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=childEnv.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"childEnv.js","sourceRoot":"","sources":["../../src/lib/childEnv.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAEjD;;;;;;;;;;GAUG;AAEH;yEACyE;AACzE,MAAM,eAAe,GACnB,qFAAqF,CAAA;AAEvF,MAAM,KAAK,GAAG,IAAI,GAAG,CAAS,kBAAuC,CAAC,CAAA;AAEtE;mDACmD;AACnD,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACtD,CAAC;AAED;yDACyD;AACzD,MAAM,UAAU,WAAW,CAAC,OAA0B,OAAO,CAAC,GAAG;IAC/D,MAAM,GAAG,GAAsB,EAAE,CAAA;IACjC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1C,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;YAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IAClC,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CACtB,QAA2B,EAAE,EAC7B,OAA0B,OAAO,CAAC,GAAG;IAErC,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,CAAA;IAC7B,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3C,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE;YAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IAC7C,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC"}
|
package/dist/lib/config.d.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
export interface ProviderSettings {
|
|
2
2
|
base_url?: string;
|
|
3
3
|
api_key_env?: string;
|
|
4
|
+
/** Per-request timeout override (ms). Large local models can need more than
|
|
5
|
+
* the 120s default just to load into memory. */
|
|
6
|
+
timeout_ms?: number;
|
|
4
7
|
}
|
|
5
8
|
export interface CompostConfig {
|
|
6
9
|
providers: Record<string, ProviderSettings>;
|
package/dist/lib/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;oDACgD;IAChD,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;IAC3C,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC7B;AASD,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,CAU3D;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,CAM1D;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAEnF;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAQ9F;AAED;0DAC0D;AAC1D,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CASjF;AAED,gEAAgE;AAChE,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,CAAA;AAE1E;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,IAAI,GAAE,eAA0B,GAC/B,IAAI,CAeN;AAsDD,8DAA8D;AAC9D,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAG/E;AAED,iFAAiF;AACjF,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAS7E"}
|
package/dist/lib/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,WAAW,CAAA;AAE1E,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/doctor.d.ts
CHANGED
|
@@ -13,6 +13,9 @@ export interface DoctorReport {
|
|
|
13
13
|
schema_version: '1.0';
|
|
14
14
|
providers: Record<string, ProviderHealth>;
|
|
15
15
|
tasks: TaskReport[];
|
|
16
|
+
/** Bidirectional reconcile (#175): models a provider has pulled but no
|
|
17
|
+
* `[defaults]` route uses. Informational — not an error. Keyed by provider. */
|
|
18
|
+
unused_models: Record<string, string[]>;
|
|
16
19
|
ok: boolean;
|
|
17
20
|
}
|
|
18
21
|
export declare function runDoctor(adapter: LLMAdapter, config: CompostConfig): Promise<DoctorReport>;
|
package/dist/lib/doctor.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/lib/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAGhD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,IAAI,GAAG,eAAe,GAAG,eAAe,GAAG,YAAY,CAAA;IAC/D,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,cAAc,EAAE,KAAK,CAAA;IACrB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;IACzC,KAAK,EAAE,UAAU,EAAE,CAAA;IACnB,EAAE,EAAE,OAAO,CAAA;CACZ;AAUD,wBAAsB,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/lib/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAGhD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,IAAI,GAAG,eAAe,GAAG,eAAe,GAAG,YAAY,CAAA;IAC/D,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,cAAc,EAAE,KAAK,CAAA;IACrB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;IACzC,KAAK,EAAE,UAAU,EAAE,CAAA;IACnB;mFAC+E;IAC/E,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;IACvC,EAAE,EAAE,OAAO,CAAA;CACZ;AAUD,wBAAsB,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CA0DjG"}
|
package/dist/lib/doctor.js
CHANGED
|
@@ -9,6 +9,19 @@ export async function runDoctor(adapter, config) {
|
|
|
9
9
|
const providers = await adapter.healthAll();
|
|
10
10
|
const tasks = [];
|
|
11
11
|
let ok = true;
|
|
12
|
+
// Configured model per provider, for the pulled-but-unused reconcile below.
|
|
13
|
+
const configuredByProvider = new Map();
|
|
14
|
+
for (const route of Object.values(config.defaults)) {
|
|
15
|
+
try {
|
|
16
|
+
const { provider, model } = parseRoute(route);
|
|
17
|
+
if (!configuredByProvider.has(provider))
|
|
18
|
+
configuredByProvider.set(provider, new Set());
|
|
19
|
+
configuredByProvider.get(provider)?.add(model);
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
// unroutable — handled per-task below
|
|
23
|
+
}
|
|
24
|
+
}
|
|
12
25
|
for (const [task, route] of Object.entries(config.defaults)) {
|
|
13
26
|
let provider = '';
|
|
14
27
|
let model = '';
|
|
@@ -38,6 +51,16 @@ export async function runDoctor(adapter, config) {
|
|
|
38
51
|
}
|
|
39
52
|
tasks.push({ task, route, provider, model, status: 'ok' });
|
|
40
53
|
}
|
|
41
|
-
|
|
54
|
+
// Reconcile the other direction: models a provider has pulled but nothing routes to.
|
|
55
|
+
const unused_models = {};
|
|
56
|
+
for (const [provider, health] of Object.entries(providers)) {
|
|
57
|
+
if (!health.ok || health.model_list.length === 0)
|
|
58
|
+
continue;
|
|
59
|
+
const configured = configuredByProvider.get(provider) ?? new Set();
|
|
60
|
+
const unused = health.model_list.filter((m) => !configured.has(m) && ![...configured].some((c) => m === c || m.startsWith(`${c}:`)));
|
|
61
|
+
if (unused.length > 0)
|
|
62
|
+
unused_models[provider] = unused;
|
|
63
|
+
}
|
|
64
|
+
return { schema_version: '1.0', providers, tasks, unused_models, ok };
|
|
42
65
|
}
|
|
43
66
|
//# sourceMappingURL=doctor.js.map
|
package/dist/lib/doctor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/lib/doctor.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/lib/doctor.ts"],"names":[],"mappings":"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"}
|