@they-juanreina/compost-cli 0.1.0-rc.1
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/LICENSE +21 -0
- package/README.md +5 -0
- package/bin/compost.js +7 -0
- package/dist/commands/_stub.d.ts +9 -0
- package/dist/commands/_stub.d.ts.map +1 -0
- package/dist/commands/_stub.js +27 -0
- package/dist/commands/_stub.js.map +1 -0
- package/dist/commands/blame.d.ts +3 -0
- package/dist/commands/blame.d.ts.map +1 -0
- package/dist/commands/blame.js +31 -0
- package/dist/commands/blame.js.map +1 -0
- package/dist/commands/chat.d.ts +8 -0
- package/dist/commands/chat.d.ts.map +1 -0
- package/dist/commands/chat.js +99 -0
- package/dist/commands/chat.js.map +1 -0
- package/dist/commands/code.d.ts +3 -0
- package/dist/commands/code.d.ts.map +1 -0
- package/dist/commands/code.js +70 -0
- package/dist/commands/code.js.map +1 -0
- package/dist/commands/config.d.ts +3 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +76 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/create.d.ts +20 -0
- package/dist/commands/create.d.ts.map +1 -0
- package/dist/commands/create.js +148 -0
- package/dist/commands/create.js.map +1 -0
- package/dist/commands/endorse.d.ts +3 -0
- package/dist/commands/endorse.d.ts.map +1 -0
- package/dist/commands/endorse.js +31 -0
- package/dist/commands/endorse.js.map +1 -0
- package/dist/commands/evals.d.ts +3 -0
- package/dist/commands/evals.d.ts.map +1 -0
- package/dist/commands/evals.js +54 -0
- package/dist/commands/evals.js.map +1 -0
- package/dist/commands/export.d.ts +3 -0
- package/dist/commands/export.d.ts.map +1 -0
- package/dist/commands/export.js +54 -0
- package/dist/commands/export.js.map +1 -0
- package/dist/commands/ingest.d.ts +3 -0
- package/dist/commands/ingest.d.ts.map +1 -0
- package/dist/commands/ingest.js +26 -0
- package/dist/commands/ingest.js.map +1 -0
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +51 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/migrate.d.ts +3 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/migrate.js +28 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/commands/models.d.ts +3 -0
- package/dist/commands/models.d.ts.map +1 -0
- package/dist/commands/models.js +32 -0
- package/dist/commands/models.js.map +1 -0
- package/dist/commands/query.d.ts +3 -0
- package/dist/commands/query.d.ts.map +1 -0
- package/dist/commands/query.js +13 -0
- package/dist/commands/query.js.map +1 -0
- package/dist/commands/reindex.d.ts +3 -0
- package/dist/commands/reindex.d.ts.map +1 -0
- package/dist/commands/reindex.js +53 -0
- package/dist/commands/reindex.js.map +1 -0
- package/dist/commands/rescan.d.ts +3 -0
- package/dist/commands/rescan.d.ts.map +1 -0
- package/dist/commands/rescan.js +60 -0
- package/dist/commands/rescan.js.map +1 -0
- package/dist/commands/saturate.d.ts +3 -0
- package/dist/commands/saturate.d.ts.map +1 -0
- package/dist/commands/saturate.js +35 -0
- package/dist/commands/saturate.js.map +1 -0
- package/dist/commands/search.d.ts +3 -0
- package/dist/commands/search.d.ts.map +1 -0
- package/dist/commands/search.js +52 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/serve.d.ts +3 -0
- package/dist/commands/serve.d.ts.map +1 -0
- package/dist/commands/serve.js +9 -0
- package/dist/commands/serve.js.map +1 -0
- package/dist/commands/session.d.ts +3 -0
- package/dist/commands/session.d.ts.map +1 -0
- package/dist/commands/session.js +25 -0
- package/dist/commands/session.js.map +1 -0
- package/dist/commands/setup.d.ts +3 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +38 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/snap.d.ts +3 -0
- package/dist/commands/snap.d.ts.map +1 -0
- package/dist/commands/snap.js +27 -0
- package/dist/commands/snap.js.map +1 -0
- package/dist/commands/status.d.ts +3 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +26 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/synthesize.d.ts +3 -0
- package/dist/commands/synthesize.d.ts.map +1 -0
- package/dist/commands/synthesize.js +13 -0
- package/dist/commands/synthesize.js.map +1 -0
- package/dist/commands/tag.d.ts +3 -0
- package/dist/commands/tag.d.ts.map +1 -0
- package/dist/commands/tag.js +46 -0
- package/dist/commands/tag.js.map +1 -0
- package/dist/commands/transcribe.d.ts +3 -0
- package/dist/commands/transcribe.d.ts.map +1 -0
- package/dist/commands/transcribe.js +110 -0
- package/dist/commands/transcribe.js.map +1 -0
- package/dist/commands/validate.d.ts +3 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +81 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/commands/watch.d.ts +3 -0
- package/dist/commands/watch.d.ts.map +1 -0
- package/dist/commands/watch.js +50 -0
- package/dist/commands/watch.js.map +1 -0
- package/dist/errors.d.ts +9 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +12 -0
- package/dist/errors.js.map +1 -0
- package/dist/exporters/csv.d.ts +8 -0
- package/dist/exporters/csv.d.ts.map +1 -0
- package/dist/exporters/csv.js +44 -0
- package/dist/exporters/csv.js.map +1 -0
- package/dist/exporters/eaf.d.ts +3 -0
- package/dist/exporters/eaf.d.ts.map +1 -0
- package/dist/exporters/eaf.js +91 -0
- package/dist/exporters/eaf.js.map +1 -0
- package/dist/exporters/html.d.ts +8 -0
- package/dist/exporters/html.d.ts.map +1 -0
- package/dist/exporters/html.js +47 -0
- package/dist/exporters/html.js.map +1 -0
- package/dist/exporters/md.d.ts +3 -0
- package/dist/exporters/md.d.ts.map +1 -0
- package/dist/exporters/md.js +43 -0
- package/dist/exporters/md.js.map +1 -0
- package/dist/exporters/pdf.d.ts +9 -0
- package/dist/exporters/pdf.d.ts.map +1 -0
- package/dist/exporters/pdf.js +40 -0
- package/dist/exporters/pdf.js.map +1 -0
- package/dist/exporters/report.d.ts +43 -0
- package/dist/exporters/report.d.ts.map +1 -0
- package/dist/exporters/report.js +49 -0
- package/dist/exporters/report.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/legacy_client.d.ts +38 -0
- package/dist/legacy_client.d.ts.map +1 -0
- package/dist/legacy_client.js +44 -0
- package/dist/legacy_client.js.map +1 -0
- package/dist/lib/answerSchema.d.ts +2 -0
- package/dist/lib/answerSchema.d.ts.map +1 -0
- package/dist/lib/answerSchema.js +27 -0
- package/dist/lib/answerSchema.js.map +1 -0
- package/dist/lib/artifacts.d.ts +64 -0
- package/dist/lib/artifacts.d.ts.map +1 -0
- package/dist/lib/artifacts.js +254 -0
- package/dist/lib/artifacts.js.map +1 -0
- package/dist/lib/blame.d.ts +30 -0
- package/dist/lib/blame.d.ts.map +1 -0
- package/dist/lib/blame.js +164 -0
- package/dist/lib/blame.js.map +1 -0
- package/dist/lib/canonicalSessions.d.ts +24 -0
- package/dist/lib/canonicalSessions.d.ts.map +1 -0
- package/dist/lib/canonicalSessions.js +48 -0
- package/dist/lib/canonicalSessions.js.map +1 -0
- package/dist/lib/chat.d.ts +24 -0
- package/dist/lib/chat.d.ts.map +1 -0
- package/dist/lib/chat.js +50 -0
- package/dist/lib/chat.js.map +1 -0
- package/dist/lib/config.d.ts +45 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +143 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/dispatch.d.ts +10 -0
- package/dist/lib/dispatch.d.ts.map +1 -0
- package/dist/lib/dispatch.js +31 -0
- package/dist/lib/dispatch.js.map +1 -0
- package/dist/lib/doctor.d.ts +19 -0
- package/dist/lib/doctor.d.ts.map +1 -0
- package/dist/lib/doctor.js +43 -0
- package/dist/lib/doctor.js.map +1 -0
- package/dist/lib/events.d.ts +42 -0
- package/dist/lib/events.d.ts.map +1 -0
- package/dist/lib/events.js +57 -0
- package/dist/lib/events.js.map +1 -0
- package/dist/lib/export.d.ts +14 -0
- package/dist/lib/export.d.ts.map +1 -0
- package/dist/lib/export.js +36 -0
- package/dist/lib/export.js.map +1 -0
- package/dist/lib/ingest.d.ts +21 -0
- package/dist/lib/ingest.d.ts.map +1 -0
- package/dist/lib/ingest.js +68 -0
- package/dist/lib/ingest.js.map +1 -0
- package/dist/lib/journal.d.ts +23 -0
- package/dist/lib/journal.d.ts.map +1 -0
- package/dist/lib/journal.js +95 -0
- package/dist/lib/journal.js.map +1 -0
- package/dist/lib/migrate.d.ts +29 -0
- package/dist/lib/migrate.d.ts.map +1 -0
- package/dist/lib/migrate.js +117 -0
- package/dist/lib/migrate.js.map +1 -0
- package/dist/lib/nativeRuntime.d.ts +46 -0
- package/dist/lib/nativeRuntime.d.ts.map +1 -0
- package/dist/lib/nativeRuntime.js +61 -0
- package/dist/lib/nativeRuntime.js.map +1 -0
- package/dist/lib/provisionNative.d.ts +46 -0
- package/dist/lib/provisionNative.d.ts.map +1 -0
- package/dist/lib/provisionNative.js +105 -0
- package/dist/lib/provisionNative.js.map +1 -0
- package/dist/lib/queue.d.ts +36 -0
- package/dist/lib/queue.d.ts.map +1 -0
- package/dist/lib/queue.js +102 -0
- package/dist/lib/queue.js.map +1 -0
- package/dist/lib/retrieve.d.ts +51 -0
- package/dist/lib/retrieve.d.ts.map +1 -0
- package/dist/lib/retrieve.js +92 -0
- package/dist/lib/retrieve.js.map +1 -0
- package/dist/lib/saturate.d.ts +21 -0
- package/dist/lib/saturate.d.ts.map +1 -0
- package/dist/lib/saturate.js +132 -0
- package/dist/lib/saturate.js.map +1 -0
- package/dist/lib/schemas.generated.d.ts +15 -0
- package/dist/lib/schemas.generated.d.ts.map +1 -0
- package/dist/lib/schemas.generated.js +975 -0
- package/dist/lib/schemas.generated.js.map +1 -0
- package/dist/lib/seed.d.ts +16 -0
- package/dist/lib/seed.d.ts.map +1 -0
- package/dist/lib/seed.js +64 -0
- package/dist/lib/seed.js.map +1 -0
- package/dist/lib/seedResolve.d.ts +6 -0
- package/dist/lib/seedResolve.d.ts.map +1 -0
- package/dist/lib/seedResolve.js +27 -0
- package/dist/lib/seedResolve.js.map +1 -0
- package/dist/lib/session.d.ts +19 -0
- package/dist/lib/session.d.ts.map +1 -0
- package/dist/lib/session.js +61 -0
- package/dist/lib/session.js.map +1 -0
- package/dist/lib/setup.d.ts +44 -0
- package/dist/lib/setup.d.ts.map +1 -0
- package/dist/lib/setup.js +249 -0
- package/dist/lib/setup.js.map +1 -0
- package/dist/lib/snap.d.ts +15 -0
- package/dist/lib/snap.d.ts.map +1 -0
- package/dist/lib/snap.js +115 -0
- package/dist/lib/snap.js.map +1 -0
- package/dist/lib/status.d.ts +39 -0
- package/dist/lib/status.d.ts.map +1 -0
- package/dist/lib/status.js +174 -0
- package/dist/lib/status.js.map +1 -0
- package/dist/lib/tagcode.d.ts +26 -0
- package/dist/lib/tagcode.d.ts.map +1 -0
- package/dist/lib/tagcode.js +231 -0
- package/dist/lib/tagcode.js.map +1 -0
- package/dist/lib/templates.d.ts +3 -0
- package/dist/lib/templates.d.ts.map +1 -0
- package/dist/lib/templates.js +21 -0
- package/dist/lib/templates.js.map +1 -0
- package/dist/lib/transcribeNative.d.ts +44 -0
- package/dist/lib/transcribeNative.d.ts.map +1 -0
- package/dist/lib/transcribeNative.js +53 -0
- package/dist/lib/transcribeNative.js.map +1 -0
- package/dist/lib/transcript.d.ts +68 -0
- package/dist/lib/transcript.d.ts.map +1 -0
- package/dist/lib/transcript.js +10 -0
- package/dist/lib/transcript.js.map +1 -0
- package/dist/lib/validate.d.ts +16 -0
- package/dist/lib/validate.d.ts.map +1 -0
- package/dist/lib/validate.js +155 -0
- package/dist/lib/validate.js.map +1 -0
- package/dist/llm/adapter.d.ts +33 -0
- package/dist/llm/adapter.d.ts.map +1 -0
- package/dist/llm/adapter.js +106 -0
- package/dist/llm/adapter.js.map +1 -0
- package/dist/llm/http.d.ts +9 -0
- package/dist/llm/http.d.ts.map +1 -0
- package/dist/llm/http.js +56 -0
- package/dist/llm/http.js.map +1 -0
- package/dist/llm/providers/anthropic.d.ts +14 -0
- package/dist/llm/providers/anthropic.d.ts.map +1 -0
- package/dist/llm/providers/anthropic.js +66 -0
- package/dist/llm/providers/anthropic.js.map +1 -0
- package/dist/llm/providers/lmstudio.d.ts +7 -0
- package/dist/llm/providers/lmstudio.d.ts.map +1 -0
- package/dist/llm/providers/lmstudio.js +8 -0
- package/dist/llm/providers/lmstudio.js.map +1 -0
- package/dist/llm/providers/ollama.d.ts +12 -0
- package/dist/llm/providers/ollama.d.ts.map +1 -0
- package/dist/llm/providers/ollama.js +87 -0
- package/dist/llm/providers/ollama.js.map +1 -0
- package/dist/llm/providers/openai.d.ts +7 -0
- package/dist/llm/providers/openai.d.ts.map +1 -0
- package/dist/llm/providers/openai.js +8 -0
- package/dist/llm/providers/openai.js.map +1 -0
- package/dist/llm/providers/openai_compatible.d.ts +18 -0
- package/dist/llm/providers/openai_compatible.d.ts.map +1 -0
- package/dist/llm/providers/openai_compatible.js +70 -0
- package/dist/llm/providers/openai_compatible.js.map +1 -0
- package/dist/llm/types.d.ts +60 -0
- package/dist/llm/types.d.ts.map +1 -0
- package/dist/llm/types.js +2 -0
- package/dist/llm/types.js.map +1 -0
- package/dist/logging.d.ts +22 -0
- package/dist/logging.d.ts.map +1 -0
- package/dist/logging.js +58 -0
- package/dist/logging.js.map +1 -0
- package/dist/loops/embed_worker.d.ts +44 -0
- package/dist/loops/embed_worker.d.ts.map +1 -0
- package/dist/loops/embed_worker.js +144 -0
- package/dist/loops/embed_worker.js.map +1 -0
- package/dist/loops/eval_grader.d.ts +19 -0
- package/dist/loops/eval_grader.d.ts.map +1 -0
- package/dist/loops/eval_grader.js +22 -0
- package/dist/loops/eval_grader.js.map +1 -0
- package/dist/loops/ingest_watcher.d.ts +17 -0
- package/dist/loops/ingest_watcher.d.ts.map +1 -0
- package/dist/loops/ingest_watcher.js +66 -0
- package/dist/loops/ingest_watcher.js.map +1 -0
- package/dist/loops/legacy_worker.d.ts +26 -0
- package/dist/loops/legacy_worker.d.ts.map +1 -0
- package/dist/loops/legacy_worker.js +102 -0
- package/dist/loops/legacy_worker.js.map +1 -0
- package/dist/loops/supervisor.d.ts +71 -0
- package/dist/loops/supervisor.d.ts.map +1 -0
- package/dist/loops/supervisor.js +122 -0
- package/dist/loops/supervisor.js.map +1 -0
- package/dist/loops/synthesis.d.ts +31 -0
- package/dist/loops/synthesis.d.ts.map +1 -0
- package/dist/loops/synthesis.js +71 -0
- package/dist/loops/synthesis.js.map +1 -0
- package/dist/loops/transcribe_worker.d.ts +22 -0
- package/dist/loops/transcribe_worker.d.ts.map +1 -0
- package/dist/loops/transcribe_worker.js +77 -0
- package/dist/loops/transcribe_worker.js.map +1 -0
- package/dist/output.d.ts +8 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +26 -0
- package/dist/output.js.map +1 -0
- package/dist/render/transcript_md.d.ts +5 -0
- package/dist/render/transcript_md.d.ts.map +1 -0
- package/dist/render/transcript_md.js +14 -0
- package/dist/render/transcript_md.js.map +1 -0
- package/dist/router.d.ts +3 -0
- package/dist/router.d.ts.map +1 -0
- package/dist/router.js +68 -0
- package/dist/router.js.map +1 -0
- package/dist/transcriber_client.d.ts +42 -0
- package/dist/transcriber_client.d.ts.map +1 -0
- package/dist/transcriber_client.js +72 -0
- package/dist/transcriber_client.js.map +1 -0
- package/package.json +45 -0
- package/templates/AGENTS.md +25 -0
- package/templates/config.toml +56 -0
- package/templates/sample-seed/codebook/desire-for-manual-override.md +8 -0
- package/templates/sample-seed/codebook/distrust-of-automation.md +8 -0
- package/templates/sample-seed/highlights/H-001.md +9 -0
- package/templates/sample-seed/highlights/H-002.md +9 -0
- package/templates/sample-seed/seed.md +17 -0
- package/templates/sample-seed/sessions/S001/transcript.json +74 -0
- package/templates/sample-seed/synthesis/themes/control-earns-trust.md +13 -0
- package/templates/seed.md +21 -0
|
@@ -0,0 +1,975 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GENERATED — DO NOT EDIT. Run `pnpm --filter compost-cli run build` to regenerate.
|
|
3
|
+
*
|
|
4
|
+
* Embeds every schema/*.json file as a typed constant so validate.ts can use
|
|
5
|
+
* them without filesystem IO. The CLI can be published standalone without
|
|
6
|
+
* the schema/ tree because the schemas are now part of the compiled bundle.
|
|
7
|
+
*/
|
|
8
|
+
/* eslint-disable */
|
|
9
|
+
export const ANSWER_SCHEMA = {
|
|
10
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
11
|
+
"$id": "https://compost.dev/schema/answer/1.0.json",
|
|
12
|
+
"title": "Compost Grounded Answer",
|
|
13
|
+
"description": "A RAG answer whose every claim carries a citation. Used by the deterministic citation validator for non-Anthropic providers (#46).",
|
|
14
|
+
"type": "object",
|
|
15
|
+
"required": [
|
|
16
|
+
"answer",
|
|
17
|
+
"claims"
|
|
18
|
+
],
|
|
19
|
+
"additionalProperties": false,
|
|
20
|
+
"properties": {
|
|
21
|
+
"answer": {
|
|
22
|
+
"type": "string",
|
|
23
|
+
"minLength": 1
|
|
24
|
+
},
|
|
25
|
+
"claims": {
|
|
26
|
+
"type": "array",
|
|
27
|
+
"items": {
|
|
28
|
+
"$ref": "#/$defs/claim"
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
"insufficient_evidence": {
|
|
32
|
+
"type": "boolean",
|
|
33
|
+
"description": "True when retrieval came up short; answer should say so and claims may be empty."
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
"$defs": {
|
|
37
|
+
"claim": {
|
|
38
|
+
"type": "object",
|
|
39
|
+
"required": [
|
|
40
|
+
"quote",
|
|
41
|
+
"utterance_id",
|
|
42
|
+
"session_id",
|
|
43
|
+
"confidence"
|
|
44
|
+
],
|
|
45
|
+
"additionalProperties": false,
|
|
46
|
+
"properties": {
|
|
47
|
+
"quote": {
|
|
48
|
+
"type": "string",
|
|
49
|
+
"minLength": 1
|
|
50
|
+
},
|
|
51
|
+
"utterance_id": {
|
|
52
|
+
"type": "string",
|
|
53
|
+
"pattern": "^U-[0-9]{4,}$"
|
|
54
|
+
},
|
|
55
|
+
"session_id": {
|
|
56
|
+
"type": "string"
|
|
57
|
+
},
|
|
58
|
+
"confidence": {
|
|
59
|
+
"type": "number",
|
|
60
|
+
"minimum": 0,
|
|
61
|
+
"maximum": 1
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
export const CUES_TAXONOMY = {
|
|
68
|
+
"version": "1.0",
|
|
69
|
+
"title": "Compost Audio Cue Taxonomy",
|
|
70
|
+
"description": "Canonical catalog of audio cue kinds. The transcript schema's cue.kind enum (schema/transcript.schema.json#/$defs/cue/properties/kind) is kept in sync with this list. Compost cues are audio-only by design — no pose or gesture classification.",
|
|
71
|
+
"kinds": [
|
|
72
|
+
{
|
|
73
|
+
"kind": "laughter",
|
|
74
|
+
"description": "Voiced laughter from a speaker — short bursts (\"ha\") or sustained chuckles. Detected by Whisper-AT / Calm-Whisper event-tag tokens.",
|
|
75
|
+
"confidence_floor": 0.7,
|
|
76
|
+
"source": "audio"
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"kind": "sigh",
|
|
80
|
+
"description": "Audible voiced exhale, typically signaling resignation, relief, or thinking-out-loud. Detected by event-tag tokens.",
|
|
81
|
+
"confidence_floor": 0.6,
|
|
82
|
+
"source": "audio"
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"kind": "cough",
|
|
86
|
+
"description": "Single or chained cough. High-energy short burst; distinctive spectral signature.",
|
|
87
|
+
"confidence_floor": 0.75,
|
|
88
|
+
"source": "audio"
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"kind": "throat-clear",
|
|
92
|
+
"description": "Brief vocal-fry clear of the throat, often before a new utterance.",
|
|
93
|
+
"confidence_floor": 0.65,
|
|
94
|
+
"source": "audio"
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
"kind": "unintelligible",
|
|
98
|
+
"description": "Speech the ASR could not transcribe with acceptable confidence. Boundary inherited from the failed Whisper segment.",
|
|
99
|
+
"confidence_floor": 0.5,
|
|
100
|
+
"source": "audio"
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"kind": "code-switching",
|
|
104
|
+
"description": "Speaker switched languages mid-utterance. Whisper-large-v3 emits language tokens that mark the transition.",
|
|
105
|
+
"confidence_floor": 0.7,
|
|
106
|
+
"source": "audio"
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
"kind": "overlap",
|
|
110
|
+
"description": "Two or more speakers vocalizing simultaneously. Detected by pyannote-audio overlap detection.",
|
|
111
|
+
"confidence_floor": 0.7,
|
|
112
|
+
"source": "audio"
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
"kind": "interruption",
|
|
116
|
+
"description": "Turn-stealing overlap where speaker B begins while speaker A is still speaking and A yields. Heuristic over overlap + turn-change.",
|
|
117
|
+
"confidence_floor": 0.65,
|
|
118
|
+
"source": "audio"
|
|
119
|
+
}
|
|
120
|
+
]
|
|
121
|
+
};
|
|
122
|
+
export const EVENTS_SCHEMA = {
|
|
123
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
124
|
+
"$id": "https://compost.dev/schema/event/1.0.json",
|
|
125
|
+
"title": "Compost Provenance Event",
|
|
126
|
+
"description": "Append-only event recording a change to a compost artifact. Mirrors the .compost/events.sqlite row shape. Three-actor model: researcher | agent | ai.",
|
|
127
|
+
"type": "object",
|
|
128
|
+
"required": [
|
|
129
|
+
"id",
|
|
130
|
+
"ts",
|
|
131
|
+
"artifact_kind",
|
|
132
|
+
"artifact_id",
|
|
133
|
+
"action",
|
|
134
|
+
"actor_type",
|
|
135
|
+
"actor_id",
|
|
136
|
+
"payload"
|
|
137
|
+
],
|
|
138
|
+
"additionalProperties": false,
|
|
139
|
+
"properties": {
|
|
140
|
+
"id": {
|
|
141
|
+
"type": "string",
|
|
142
|
+
"pattern": "^[0-9A-HJKMNP-TV-Z]{26}$",
|
|
143
|
+
"description": "ULID (Crockford base32, 26 chars). Sortable and globally unique."
|
|
144
|
+
},
|
|
145
|
+
"ts": {
|
|
146
|
+
"type": "string",
|
|
147
|
+
"format": "date-time",
|
|
148
|
+
"description": "ISO 8601 UTC timestamp the event was recorded."
|
|
149
|
+
},
|
|
150
|
+
"artifact_kind": {
|
|
151
|
+
"type": "string",
|
|
152
|
+
"minLength": 1,
|
|
153
|
+
"description": "Kind of artifact this event affects: highlight, code, theme, term, insight, comment, frame, frame_annotation, utterance_annotation, code_theme_link, term_utterance_link, etc. Free-form string to allow extension without schema migration."
|
|
154
|
+
},
|
|
155
|
+
"artifact_id": {
|
|
156
|
+
"type": "string",
|
|
157
|
+
"pattern": "^[a-f0-9]{64}$",
|
|
158
|
+
"description": "SHA256 of the artifact's initial state. Stable across the artifact's lifetime."
|
|
159
|
+
},
|
|
160
|
+
"action": {
|
|
161
|
+
"enum": [
|
|
162
|
+
"create",
|
|
163
|
+
"update",
|
|
164
|
+
"endorse",
|
|
165
|
+
"reject",
|
|
166
|
+
"link",
|
|
167
|
+
"unlink"
|
|
168
|
+
],
|
|
169
|
+
"description": "Lifecycle action. AI-authored artifacts surface as un-endorsed (human_approved=false) until an `endorse` event from a researcher promotes them."
|
|
170
|
+
},
|
|
171
|
+
"actor_type": {
|
|
172
|
+
"enum": [
|
|
173
|
+
"researcher",
|
|
174
|
+
"agent",
|
|
175
|
+
"ai"
|
|
176
|
+
],
|
|
177
|
+
"description": "researcher = human, accountable. agent = deterministic-ish software actor (skill, loop, slash command). ai = raw LLM output, untrusted by default."
|
|
178
|
+
},
|
|
179
|
+
"actor_id": {
|
|
180
|
+
"type": "string",
|
|
181
|
+
"minLength": 1,
|
|
182
|
+
"description": "For researchers: handle or email. For agents: name@semver. For ai: model identifier (e.g. anthropic:claude-opus-4-7)."
|
|
183
|
+
},
|
|
184
|
+
"agent_name": {
|
|
185
|
+
"type": "string",
|
|
186
|
+
"description": "Required when actor_type=agent. Identifies the software actor (e.g. cross-session-similarity-scanner)."
|
|
187
|
+
},
|
|
188
|
+
"agent_version": {
|
|
189
|
+
"type": "string",
|
|
190
|
+
"description": "Required when actor_type=agent. Semver."
|
|
191
|
+
},
|
|
192
|
+
"prompt_hash": {
|
|
193
|
+
"type": "string",
|
|
194
|
+
"pattern": "^[a-f0-9]{64}$",
|
|
195
|
+
"description": "Required when actor_type=ai or actor_type=agent and the agent invoked an LLM. SHA256(prompt + model + temperature + context_window)."
|
|
196
|
+
},
|
|
197
|
+
"model": {
|
|
198
|
+
"type": "string",
|
|
199
|
+
"description": "Required when actor_type=ai. The model that produced the suggestion (e.g. anthropic:claude-opus-4-7, ollama:llama3.1:8b)."
|
|
200
|
+
},
|
|
201
|
+
"payload": {
|
|
202
|
+
"description": "Action-specific JSON payload. The structure varies by (artifact_kind, action) pair and is validated separately by the CLI when serializing/deserializing.",
|
|
203
|
+
"oneOf": [
|
|
204
|
+
{
|
|
205
|
+
"type": "object"
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
"type": "array"
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
"type": "null"
|
|
212
|
+
}
|
|
213
|
+
]
|
|
214
|
+
},
|
|
215
|
+
"parent_event": {
|
|
216
|
+
"type": [
|
|
217
|
+
"string",
|
|
218
|
+
"null"
|
|
219
|
+
],
|
|
220
|
+
"pattern": "^[0-9A-HJKMNP-TV-Z]{26}$",
|
|
221
|
+
"description": "ULID of the event this one continues from. null for root events. Endorse/reject/update/unlink events MUST reference the event being acted on; link events may have null parent_event for the first link of a relationship."
|
|
222
|
+
},
|
|
223
|
+
"batch_id": {
|
|
224
|
+
"type": [
|
|
225
|
+
"string",
|
|
226
|
+
"null"
|
|
227
|
+
],
|
|
228
|
+
"minLength": 1,
|
|
229
|
+
"description": "Optional opaque grouping for events emitted by one loop run, for transactional rollback and audit."
|
|
230
|
+
}
|
|
231
|
+
},
|
|
232
|
+
"allOf": [
|
|
233
|
+
{
|
|
234
|
+
"if": {
|
|
235
|
+
"properties": {
|
|
236
|
+
"actor_type": {
|
|
237
|
+
"const": "agent"
|
|
238
|
+
}
|
|
239
|
+
},
|
|
240
|
+
"required": [
|
|
241
|
+
"actor_type"
|
|
242
|
+
]
|
|
243
|
+
},
|
|
244
|
+
"then": {
|
|
245
|
+
"required": [
|
|
246
|
+
"agent_name",
|
|
247
|
+
"agent_version"
|
|
248
|
+
]
|
|
249
|
+
}
|
|
250
|
+
},
|
|
251
|
+
{
|
|
252
|
+
"if": {
|
|
253
|
+
"properties": {
|
|
254
|
+
"actor_type": {
|
|
255
|
+
"const": "ai"
|
|
256
|
+
}
|
|
257
|
+
},
|
|
258
|
+
"required": [
|
|
259
|
+
"actor_type"
|
|
260
|
+
]
|
|
261
|
+
},
|
|
262
|
+
"then": {
|
|
263
|
+
"required": [
|
|
264
|
+
"model",
|
|
265
|
+
"prompt_hash"
|
|
266
|
+
]
|
|
267
|
+
}
|
|
268
|
+
},
|
|
269
|
+
{
|
|
270
|
+
"if": {
|
|
271
|
+
"properties": {
|
|
272
|
+
"action": {
|
|
273
|
+
"enum": [
|
|
274
|
+
"endorse",
|
|
275
|
+
"reject",
|
|
276
|
+
"update",
|
|
277
|
+
"unlink"
|
|
278
|
+
]
|
|
279
|
+
}
|
|
280
|
+
},
|
|
281
|
+
"required": [
|
|
282
|
+
"action"
|
|
283
|
+
]
|
|
284
|
+
},
|
|
285
|
+
"then": {
|
|
286
|
+
"required": [
|
|
287
|
+
"parent_event"
|
|
288
|
+
]
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
]
|
|
292
|
+
};
|
|
293
|
+
export const FRAMES_TAXONOMY = {
|
|
294
|
+
"version": "1.0",
|
|
295
|
+
"title": "Compost Frame Trigger Catalog",
|
|
296
|
+
"description": "Canonical catalog of frame triggers — the reasons a screenshot may be captured from the video stream during transcription. The transcript schema's frame.trigger enum (schema/transcript.schema.json#/$defs/frame/properties/trigger) is kept in sync with this list. default_enabled reflects the 'balanced' default profile (decision #73).",
|
|
297
|
+
"triggers": [
|
|
298
|
+
{
|
|
299
|
+
"trigger": "silence_after_question",
|
|
300
|
+
"description": "Frame captured during a silence the silence-typer classified as after_question. Pauses after moderator questions are high-signal.",
|
|
301
|
+
"default_enabled": true
|
|
302
|
+
},
|
|
303
|
+
{
|
|
304
|
+
"trigger": "silence_mid_utterance",
|
|
305
|
+
"description": "Frame captured during a mid-utterance silence — speaker paused inside their own turn, often searching for a word.",
|
|
306
|
+
"default_enabled": true
|
|
307
|
+
},
|
|
308
|
+
{
|
|
309
|
+
"trigger": "silence_thinking",
|
|
310
|
+
"description": "Frame captured during a thinking silence — speaker hasn't committed to answering yet.",
|
|
311
|
+
"default_enabled": true
|
|
312
|
+
},
|
|
313
|
+
{
|
|
314
|
+
"trigger": "silence_interruption",
|
|
315
|
+
"description": "Frame captured at a silence inside an interruption — turn-stealing dynamics often visible.",
|
|
316
|
+
"default_enabled": true
|
|
317
|
+
},
|
|
318
|
+
{
|
|
319
|
+
"trigger": "audio_cue",
|
|
320
|
+
"description": "Frame captured when an audio cue fires (laughter, sigh, cough, throat-clear). Linked to the cue id.",
|
|
321
|
+
"default_enabled": true
|
|
322
|
+
},
|
|
323
|
+
{
|
|
324
|
+
"trigger": "shot_change",
|
|
325
|
+
"description": "Frame captured when the perceptual-hash distance between consecutive sampled frames crosses the shot-change threshold. Catches camera/screen-share switches.",
|
|
326
|
+
"default_enabled": true
|
|
327
|
+
},
|
|
328
|
+
{
|
|
329
|
+
"trigger": "highlight",
|
|
330
|
+
"description": "Frame captured at the moment a researcher creates a highlight. The contemporaneous frame is auto-linked to the highlight.",
|
|
331
|
+
"default_enabled": true
|
|
332
|
+
},
|
|
333
|
+
{
|
|
334
|
+
"trigger": "manual",
|
|
335
|
+
"description": "Frame captured on explicit researcher request via `compost snap` or a one-click control in the web player.",
|
|
336
|
+
"default_enabled": true
|
|
337
|
+
},
|
|
338
|
+
{
|
|
339
|
+
"trigger": "sampling",
|
|
340
|
+
"description": "Fallback frame captured at fixed intervals (60s default) when none of the other triggers have fired recently. Ensures every minute of every session has at least one frame.",
|
|
341
|
+
"default_enabled": true
|
|
342
|
+
}
|
|
343
|
+
]
|
|
344
|
+
};
|
|
345
|
+
export const STATUS_SCHEMA = {
|
|
346
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
347
|
+
"$id": "https://compost.dev/schema/status/1.0.json",
|
|
348
|
+
"title": "Compost Status Snapshot",
|
|
349
|
+
"description": "Structured snapshot of every seed in the working tree. Stable contract for agents calling `compost status --json`.",
|
|
350
|
+
"type": "object",
|
|
351
|
+
"required": [
|
|
352
|
+
"schema_version",
|
|
353
|
+
"generated_at",
|
|
354
|
+
"root",
|
|
355
|
+
"seeds"
|
|
356
|
+
],
|
|
357
|
+
"additionalProperties": false,
|
|
358
|
+
"properties": {
|
|
359
|
+
"schema_version": {
|
|
360
|
+
"const": "1.0"
|
|
361
|
+
},
|
|
362
|
+
"generated_at": {
|
|
363
|
+
"type": "string",
|
|
364
|
+
"format": "date-time"
|
|
365
|
+
},
|
|
366
|
+
"root": {
|
|
367
|
+
"type": "string",
|
|
368
|
+
"description": "Absolute path of the Seeds/ root that was scanned."
|
|
369
|
+
},
|
|
370
|
+
"seeds": {
|
|
371
|
+
"type": "array",
|
|
372
|
+
"items": {
|
|
373
|
+
"$ref": "#/$defs/seed"
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
},
|
|
377
|
+
"$defs": {
|
|
378
|
+
"seed": {
|
|
379
|
+
"type": "object",
|
|
380
|
+
"required": [
|
|
381
|
+
"name",
|
|
382
|
+
"path",
|
|
383
|
+
"counts"
|
|
384
|
+
],
|
|
385
|
+
"additionalProperties": false,
|
|
386
|
+
"properties": {
|
|
387
|
+
"name": {
|
|
388
|
+
"type": "string"
|
|
389
|
+
},
|
|
390
|
+
"path": {
|
|
391
|
+
"type": "string"
|
|
392
|
+
},
|
|
393
|
+
"status": {
|
|
394
|
+
"type": [
|
|
395
|
+
"string",
|
|
396
|
+
"null"
|
|
397
|
+
],
|
|
398
|
+
"description": "From seed.md frontmatter. Common values: planning | active | synthesis | done."
|
|
399
|
+
},
|
|
400
|
+
"owners": {
|
|
401
|
+
"type": "array",
|
|
402
|
+
"items": {
|
|
403
|
+
"type": "string"
|
|
404
|
+
}
|
|
405
|
+
},
|
|
406
|
+
"created_at": {
|
|
407
|
+
"type": [
|
|
408
|
+
"string",
|
|
409
|
+
"null"
|
|
410
|
+
]
|
|
411
|
+
},
|
|
412
|
+
"counts": {
|
|
413
|
+
"$ref": "#/$defs/counts"
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
},
|
|
417
|
+
"counts": {
|
|
418
|
+
"type": "object",
|
|
419
|
+
"required": [
|
|
420
|
+
"sessions",
|
|
421
|
+
"highlights",
|
|
422
|
+
"codes",
|
|
423
|
+
"themes",
|
|
424
|
+
"frames",
|
|
425
|
+
"insights",
|
|
426
|
+
"legacy_assets"
|
|
427
|
+
],
|
|
428
|
+
"additionalProperties": false,
|
|
429
|
+
"properties": {
|
|
430
|
+
"sessions": {
|
|
431
|
+
"$ref": "#/$defs/sessionCounts"
|
|
432
|
+
},
|
|
433
|
+
"highlights": {
|
|
434
|
+
"type": "integer",
|
|
435
|
+
"minimum": 0
|
|
436
|
+
},
|
|
437
|
+
"codes": {
|
|
438
|
+
"type": "integer",
|
|
439
|
+
"minimum": 0
|
|
440
|
+
},
|
|
441
|
+
"themes": {
|
|
442
|
+
"type": "integer",
|
|
443
|
+
"minimum": 0
|
|
444
|
+
},
|
|
445
|
+
"frames": {
|
|
446
|
+
"type": "integer",
|
|
447
|
+
"minimum": 0
|
|
448
|
+
},
|
|
449
|
+
"insights": {
|
|
450
|
+
"type": "integer",
|
|
451
|
+
"minimum": 0
|
|
452
|
+
},
|
|
453
|
+
"legacy_assets": {
|
|
454
|
+
"type": "integer",
|
|
455
|
+
"minimum": 0
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
},
|
|
459
|
+
"sessionCounts": {
|
|
460
|
+
"type": "object",
|
|
461
|
+
"required": [
|
|
462
|
+
"total",
|
|
463
|
+
"transcribed",
|
|
464
|
+
"queued",
|
|
465
|
+
"inbox"
|
|
466
|
+
],
|
|
467
|
+
"additionalProperties": false,
|
|
468
|
+
"properties": {
|
|
469
|
+
"total": {
|
|
470
|
+
"type": "integer",
|
|
471
|
+
"minimum": 0
|
|
472
|
+
},
|
|
473
|
+
"transcribed": {
|
|
474
|
+
"type": "integer",
|
|
475
|
+
"minimum": 0
|
|
476
|
+
},
|
|
477
|
+
"queued": {
|
|
478
|
+
"type": "integer",
|
|
479
|
+
"minimum": 0
|
|
480
|
+
},
|
|
481
|
+
"inbox": {
|
|
482
|
+
"type": "integer",
|
|
483
|
+
"minimum": 0
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
};
|
|
489
|
+
export const TRANSCRIPT_SCHEMA = {
|
|
490
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
491
|
+
"$id": "https://compost.dev/schema/transcript/1.0.json",
|
|
492
|
+
"title": "Compost Rich Transcript",
|
|
493
|
+
"description": "Per-session rich transcript with utterances, typed silences, audio cues, frames, prosody hints, and provenance pointer.",
|
|
494
|
+
"type": "object",
|
|
495
|
+
"required": [
|
|
496
|
+
"schema_version",
|
|
497
|
+
"session_id",
|
|
498
|
+
"source",
|
|
499
|
+
"language",
|
|
500
|
+
"duration_ms",
|
|
501
|
+
"modality",
|
|
502
|
+
"speakers",
|
|
503
|
+
"utterances",
|
|
504
|
+
"provenance"
|
|
505
|
+
],
|
|
506
|
+
"additionalProperties": false,
|
|
507
|
+
"properties": {
|
|
508
|
+
"schema_version": {
|
|
509
|
+
"const": "1.0",
|
|
510
|
+
"description": "Locked at 1.0 for this contract. Breaking changes bump the major."
|
|
511
|
+
},
|
|
512
|
+
"kind": {
|
|
513
|
+
"enum": [
|
|
514
|
+
"session",
|
|
515
|
+
"document"
|
|
516
|
+
],
|
|
517
|
+
"default": "session",
|
|
518
|
+
"description": "session = recorded interview; document = legacy PDF/DOCX/PPTX/CSV normalized into a transcript-shaped doc."
|
|
519
|
+
},
|
|
520
|
+
"session_id": {
|
|
521
|
+
"type": "string",
|
|
522
|
+
"pattern": "^[A-Za-z0-9_-]+$",
|
|
523
|
+
"description": "Stable, filesystem-safe session identifier (e.g. \"S023\")."
|
|
524
|
+
},
|
|
525
|
+
"source": {
|
|
526
|
+
"type": "string",
|
|
527
|
+
"description": "Path to the source media file, relative to the seed root."
|
|
528
|
+
},
|
|
529
|
+
"language": {
|
|
530
|
+
"type": "string",
|
|
531
|
+
"description": "BCP-47 language tag (e.g. \"es-CO\", \"en-US\")."
|
|
532
|
+
},
|
|
533
|
+
"duration_ms": {
|
|
534
|
+
"type": "integer",
|
|
535
|
+
"minimum": 0
|
|
536
|
+
},
|
|
537
|
+
"modality": {
|
|
538
|
+
"type": "array",
|
|
539
|
+
"items": {
|
|
540
|
+
"enum": [
|
|
541
|
+
"audio",
|
|
542
|
+
"video",
|
|
543
|
+
"document"
|
|
544
|
+
]
|
|
545
|
+
},
|
|
546
|
+
"minItems": 1,
|
|
547
|
+
"uniqueItems": true
|
|
548
|
+
},
|
|
549
|
+
"speakers": {
|
|
550
|
+
"type": "array",
|
|
551
|
+
"items": {
|
|
552
|
+
"$ref": "#/$defs/speaker"
|
|
553
|
+
}
|
|
554
|
+
},
|
|
555
|
+
"utterances": {
|
|
556
|
+
"type": "array",
|
|
557
|
+
"items": {
|
|
558
|
+
"$ref": "#/$defs/utterance"
|
|
559
|
+
}
|
|
560
|
+
},
|
|
561
|
+
"silences": {
|
|
562
|
+
"type": "array",
|
|
563
|
+
"default": [],
|
|
564
|
+
"items": {
|
|
565
|
+
"$ref": "#/$defs/silence"
|
|
566
|
+
}
|
|
567
|
+
},
|
|
568
|
+
"cues": {
|
|
569
|
+
"type": "array",
|
|
570
|
+
"default": [],
|
|
571
|
+
"items": {
|
|
572
|
+
"$ref": "#/$defs/cue"
|
|
573
|
+
}
|
|
574
|
+
},
|
|
575
|
+
"frames": {
|
|
576
|
+
"type": "array",
|
|
577
|
+
"default": [],
|
|
578
|
+
"items": {
|
|
579
|
+
"$ref": "#/$defs/frame"
|
|
580
|
+
}
|
|
581
|
+
},
|
|
582
|
+
"glossary_refs": {
|
|
583
|
+
"type": "array",
|
|
584
|
+
"default": [],
|
|
585
|
+
"items": {
|
|
586
|
+
"$ref": "#/$defs/sessionGlossaryRef"
|
|
587
|
+
},
|
|
588
|
+
"description": "Optional session-level rollup of glossary term mentions; derivable from utterances[].glossary_refs."
|
|
589
|
+
},
|
|
590
|
+
"provenance": {
|
|
591
|
+
"$ref": "#/$defs/provenance"
|
|
592
|
+
}
|
|
593
|
+
},
|
|
594
|
+
"$defs": {
|
|
595
|
+
"speaker": {
|
|
596
|
+
"type": "object",
|
|
597
|
+
"required": [
|
|
598
|
+
"id",
|
|
599
|
+
"type"
|
|
600
|
+
],
|
|
601
|
+
"additionalProperties": false,
|
|
602
|
+
"properties": {
|
|
603
|
+
"id": {
|
|
604
|
+
"type": "string",
|
|
605
|
+
"pattern": "^S[0-9]+$",
|
|
606
|
+
"description": "Speaker handle, e.g. \"S1\", \"S2\"."
|
|
607
|
+
},
|
|
608
|
+
"name": {
|
|
609
|
+
"type": "string"
|
|
610
|
+
},
|
|
611
|
+
"type": {
|
|
612
|
+
"enum": [
|
|
613
|
+
"moderator",
|
|
614
|
+
"participant",
|
|
615
|
+
"other"
|
|
616
|
+
]
|
|
617
|
+
}
|
|
618
|
+
}
|
|
619
|
+
},
|
|
620
|
+
"utterance": {
|
|
621
|
+
"type": "object",
|
|
622
|
+
"required": [
|
|
623
|
+
"id",
|
|
624
|
+
"speaker_id",
|
|
625
|
+
"turn",
|
|
626
|
+
"start_ms",
|
|
627
|
+
"end_ms",
|
|
628
|
+
"text"
|
|
629
|
+
],
|
|
630
|
+
"additionalProperties": false,
|
|
631
|
+
"properties": {
|
|
632
|
+
"id": {
|
|
633
|
+
"type": "string",
|
|
634
|
+
"pattern": "^U-[0-9]{4,}$",
|
|
635
|
+
"description": "Zero-padded ordinal, e.g. \"U-0001\"."
|
|
636
|
+
},
|
|
637
|
+
"speaker_id": {
|
|
638
|
+
"type": "string",
|
|
639
|
+
"pattern": "^S[0-9]+$"
|
|
640
|
+
},
|
|
641
|
+
"turn": {
|
|
642
|
+
"type": "integer",
|
|
643
|
+
"minimum": 1
|
|
644
|
+
},
|
|
645
|
+
"start_ms": {
|
|
646
|
+
"type": "integer",
|
|
647
|
+
"minimum": 0
|
|
648
|
+
},
|
|
649
|
+
"end_ms": {
|
|
650
|
+
"type": "integer",
|
|
651
|
+
"minimum": 0
|
|
652
|
+
},
|
|
653
|
+
"text": {
|
|
654
|
+
"type": "string"
|
|
655
|
+
},
|
|
656
|
+
"source_page": {
|
|
657
|
+
"type": "integer",
|
|
658
|
+
"minimum": 1,
|
|
659
|
+
"description": "For document-kind transcripts: the 1-based source page/slide/row the utterance came from."
|
|
660
|
+
},
|
|
661
|
+
"words": {
|
|
662
|
+
"type": "array",
|
|
663
|
+
"items": {
|
|
664
|
+
"$ref": "#/$defs/word"
|
|
665
|
+
}
|
|
666
|
+
},
|
|
667
|
+
"prosody": {
|
|
668
|
+
"$ref": "#/$defs/prosody"
|
|
669
|
+
},
|
|
670
|
+
"annotation": {
|
|
671
|
+
"type": "string",
|
|
672
|
+
"description": "Free-text editorial layer. May be human-authored, agent-authored, or AI-suggested. Provenance lives in .compost/events.sqlite — this field is a snapshot of current text only."
|
|
673
|
+
},
|
|
674
|
+
"glossary_refs": {
|
|
675
|
+
"type": "array",
|
|
676
|
+
"items": {
|
|
677
|
+
"$ref": "#/$defs/utteranceGlossaryRef"
|
|
678
|
+
}
|
|
679
|
+
}
|
|
680
|
+
}
|
|
681
|
+
},
|
|
682
|
+
"word": {
|
|
683
|
+
"type": "object",
|
|
684
|
+
"required": [
|
|
685
|
+
"w",
|
|
686
|
+
"s",
|
|
687
|
+
"e"
|
|
688
|
+
],
|
|
689
|
+
"additionalProperties": false,
|
|
690
|
+
"properties": {
|
|
691
|
+
"w": {
|
|
692
|
+
"type": "string"
|
|
693
|
+
},
|
|
694
|
+
"s": {
|
|
695
|
+
"type": "integer",
|
|
696
|
+
"minimum": 0
|
|
697
|
+
},
|
|
698
|
+
"e": {
|
|
699
|
+
"type": "integer",
|
|
700
|
+
"minimum": 0
|
|
701
|
+
},
|
|
702
|
+
"conf": {
|
|
703
|
+
"type": "number",
|
|
704
|
+
"minimum": 0,
|
|
705
|
+
"maximum": 1
|
|
706
|
+
}
|
|
707
|
+
}
|
|
708
|
+
},
|
|
709
|
+
"prosody": {
|
|
710
|
+
"type": "object",
|
|
711
|
+
"additionalProperties": false,
|
|
712
|
+
"description": "Deterministic prosody hints derived from word confidence + VAD energy + speech rate. Not ML predictions.",
|
|
713
|
+
"properties": {
|
|
714
|
+
"volume": {
|
|
715
|
+
"enum": [
|
|
716
|
+
"low",
|
|
717
|
+
"normal",
|
|
718
|
+
"high"
|
|
719
|
+
]
|
|
720
|
+
},
|
|
721
|
+
"pace": {
|
|
722
|
+
"enum": [
|
|
723
|
+
"slow",
|
|
724
|
+
"normal",
|
|
725
|
+
"fast"
|
|
726
|
+
]
|
|
727
|
+
},
|
|
728
|
+
"hesitations": {
|
|
729
|
+
"type": "integer",
|
|
730
|
+
"minimum": 0
|
|
731
|
+
}
|
|
732
|
+
}
|
|
733
|
+
},
|
|
734
|
+
"silence": {
|
|
735
|
+
"type": "object",
|
|
736
|
+
"required": [
|
|
737
|
+
"id",
|
|
738
|
+
"start_ms",
|
|
739
|
+
"end_ms",
|
|
740
|
+
"duration_ms",
|
|
741
|
+
"context"
|
|
742
|
+
],
|
|
743
|
+
"additionalProperties": false,
|
|
744
|
+
"properties": {
|
|
745
|
+
"id": {
|
|
746
|
+
"type": "string",
|
|
747
|
+
"pattern": "^SIL-[0-9]{3,}$"
|
|
748
|
+
},
|
|
749
|
+
"start_ms": {
|
|
750
|
+
"type": "integer",
|
|
751
|
+
"minimum": 0
|
|
752
|
+
},
|
|
753
|
+
"end_ms": {
|
|
754
|
+
"type": "integer",
|
|
755
|
+
"minimum": 0
|
|
756
|
+
},
|
|
757
|
+
"duration_ms": {
|
|
758
|
+
"type": "integer",
|
|
759
|
+
"minimum": 0
|
|
760
|
+
},
|
|
761
|
+
"context": {
|
|
762
|
+
"enum": [
|
|
763
|
+
"after_question",
|
|
764
|
+
"mid_utterance",
|
|
765
|
+
"thinking",
|
|
766
|
+
"interruption"
|
|
767
|
+
],
|
|
768
|
+
"description": "Semantic typing from the silence-typer heuristic. Versioned rules; researcher can override."
|
|
769
|
+
},
|
|
770
|
+
"annotation": {
|
|
771
|
+
"type": "string"
|
|
772
|
+
}
|
|
773
|
+
}
|
|
774
|
+
},
|
|
775
|
+
"cue": {
|
|
776
|
+
"type": "object",
|
|
777
|
+
"required": [
|
|
778
|
+
"id",
|
|
779
|
+
"kind",
|
|
780
|
+
"start_ms",
|
|
781
|
+
"end_ms",
|
|
782
|
+
"source"
|
|
783
|
+
],
|
|
784
|
+
"additionalProperties": false,
|
|
785
|
+
"properties": {
|
|
786
|
+
"id": {
|
|
787
|
+
"type": "string",
|
|
788
|
+
"pattern": "^CUE-[0-9]{3,}$"
|
|
789
|
+
},
|
|
790
|
+
"kind": {
|
|
791
|
+
"enum": [
|
|
792
|
+
"laughter",
|
|
793
|
+
"sigh",
|
|
794
|
+
"cough",
|
|
795
|
+
"throat-clear",
|
|
796
|
+
"unintelligible",
|
|
797
|
+
"code-switching",
|
|
798
|
+
"overlap",
|
|
799
|
+
"interruption"
|
|
800
|
+
],
|
|
801
|
+
"description": "See cues.taxonomy.json for confidence floors per kind."
|
|
802
|
+
},
|
|
803
|
+
"start_ms": {
|
|
804
|
+
"type": "integer",
|
|
805
|
+
"minimum": 0
|
|
806
|
+
},
|
|
807
|
+
"end_ms": {
|
|
808
|
+
"type": "integer",
|
|
809
|
+
"minimum": 0
|
|
810
|
+
},
|
|
811
|
+
"source": {
|
|
812
|
+
"const": "audio",
|
|
813
|
+
"description": "Compost cues are audio-only by design. No pose/gesture classification."
|
|
814
|
+
},
|
|
815
|
+
"speaker_id": {
|
|
816
|
+
"type": "string",
|
|
817
|
+
"pattern": "^S[0-9]+$"
|
|
818
|
+
},
|
|
819
|
+
"confidence": {
|
|
820
|
+
"type": "number",
|
|
821
|
+
"minimum": 0,
|
|
822
|
+
"maximum": 1
|
|
823
|
+
},
|
|
824
|
+
"annotation": {
|
|
825
|
+
"type": "string"
|
|
826
|
+
}
|
|
827
|
+
}
|
|
828
|
+
},
|
|
829
|
+
"frame": {
|
|
830
|
+
"type": "object",
|
|
831
|
+
"required": [
|
|
832
|
+
"id",
|
|
833
|
+
"at_ms",
|
|
834
|
+
"path",
|
|
835
|
+
"trigger"
|
|
836
|
+
],
|
|
837
|
+
"additionalProperties": false,
|
|
838
|
+
"properties": {
|
|
839
|
+
"id": {
|
|
840
|
+
"type": "string",
|
|
841
|
+
"pattern": "^FR-[0-9]{3,}$"
|
|
842
|
+
},
|
|
843
|
+
"at_ms": {
|
|
844
|
+
"type": "integer",
|
|
845
|
+
"minimum": 0
|
|
846
|
+
},
|
|
847
|
+
"path": {
|
|
848
|
+
"type": "string",
|
|
849
|
+
"description": "Path to the captured frame, relative to the seed root."
|
|
850
|
+
},
|
|
851
|
+
"trigger": {
|
|
852
|
+
"enum": [
|
|
853
|
+
"silence_after_question",
|
|
854
|
+
"silence_mid_utterance",
|
|
855
|
+
"silence_thinking",
|
|
856
|
+
"silence_interruption",
|
|
857
|
+
"audio_cue",
|
|
858
|
+
"shot_change",
|
|
859
|
+
"highlight",
|
|
860
|
+
"manual",
|
|
861
|
+
"sampling"
|
|
862
|
+
],
|
|
863
|
+
"description": "See frames.taxonomy.json for trigger semantics. Silence triggers are split by silence context so a frame can carry the same semantic type as its linked silence."
|
|
864
|
+
},
|
|
865
|
+
"linked_utterance_id": {
|
|
866
|
+
"type": "string",
|
|
867
|
+
"pattern": "^U-[0-9]{4,}$"
|
|
868
|
+
},
|
|
869
|
+
"annotation": {
|
|
870
|
+
"type": "string",
|
|
871
|
+
"description": "Optional one-sentence description from a vision-capable LLM. AI-authored events surface as [draft] until endorsed."
|
|
872
|
+
}
|
|
873
|
+
}
|
|
874
|
+
},
|
|
875
|
+
"utteranceGlossaryRef": {
|
|
876
|
+
"type": "object",
|
|
877
|
+
"required": [
|
|
878
|
+
"term_id",
|
|
879
|
+
"span"
|
|
880
|
+
],
|
|
881
|
+
"additionalProperties": false,
|
|
882
|
+
"properties": {
|
|
883
|
+
"term_id": {
|
|
884
|
+
"type": "string",
|
|
885
|
+
"pattern": "^T-[A-Za-z0-9_-]+$"
|
|
886
|
+
},
|
|
887
|
+
"span": {
|
|
888
|
+
"type": "array",
|
|
889
|
+
"items": {
|
|
890
|
+
"type": "integer",
|
|
891
|
+
"minimum": 0
|
|
892
|
+
},
|
|
893
|
+
"minItems": 2,
|
|
894
|
+
"maxItems": 2,
|
|
895
|
+
"description": "[start, end] character offsets into the parent utterance.text."
|
|
896
|
+
}
|
|
897
|
+
}
|
|
898
|
+
},
|
|
899
|
+
"sessionGlossaryRef": {
|
|
900
|
+
"type": "object",
|
|
901
|
+
"required": [
|
|
902
|
+
"term_id",
|
|
903
|
+
"utterance_id",
|
|
904
|
+
"span"
|
|
905
|
+
],
|
|
906
|
+
"additionalProperties": false,
|
|
907
|
+
"properties": {
|
|
908
|
+
"term_id": {
|
|
909
|
+
"type": "string",
|
|
910
|
+
"pattern": "^T-[A-Za-z0-9_-]+$"
|
|
911
|
+
},
|
|
912
|
+
"utterance_id": {
|
|
913
|
+
"type": "string",
|
|
914
|
+
"pattern": "^U-[0-9]{4,}$"
|
|
915
|
+
},
|
|
916
|
+
"span": {
|
|
917
|
+
"type": "array",
|
|
918
|
+
"items": {
|
|
919
|
+
"type": "integer",
|
|
920
|
+
"minimum": 0
|
|
921
|
+
},
|
|
922
|
+
"minItems": 2,
|
|
923
|
+
"maxItems": 2
|
|
924
|
+
}
|
|
925
|
+
}
|
|
926
|
+
},
|
|
927
|
+
"provenance": {
|
|
928
|
+
"type": "object",
|
|
929
|
+
"required": [
|
|
930
|
+
"transcriber"
|
|
931
|
+
],
|
|
932
|
+
"additionalProperties": false,
|
|
933
|
+
"description": "Tool+version pointers describing how this transcript was produced. Per-artifact event provenance lives in .compost/events.sqlite.",
|
|
934
|
+
"properties": {
|
|
935
|
+
"transcriber": {
|
|
936
|
+
"type": "string",
|
|
937
|
+
"description": "Tool@version that produced this transcript (e.g. \"compost-transcriber@0.3.1\")."
|
|
938
|
+
},
|
|
939
|
+
"asr_model": {
|
|
940
|
+
"type": "string"
|
|
941
|
+
},
|
|
942
|
+
"diarizer": {
|
|
943
|
+
"type": "string"
|
|
944
|
+
},
|
|
945
|
+
"audio_cues": {
|
|
946
|
+
"type": "string"
|
|
947
|
+
},
|
|
948
|
+
"frame_capture": {
|
|
949
|
+
"type": "string"
|
|
950
|
+
},
|
|
951
|
+
"frame_annotation": {
|
|
952
|
+
"type": "string"
|
|
953
|
+
},
|
|
954
|
+
"text_col_resolved": {
|
|
955
|
+
"type": "string",
|
|
956
|
+
"description": "For CSV/XLSX legacy ingest: which column was actually used as the text source (auto-detected or explicit). Optional; absent on audio/video transcripts."
|
|
957
|
+
},
|
|
958
|
+
"xlsx_rows_skipped_empty_text": {
|
|
959
|
+
"type": "integer",
|
|
960
|
+
"minimum": 0,
|
|
961
|
+
"description": "For XLSX legacy ingest: count of rows where other columns had data but the text column was empty. Often signals un-evaluated formulas — open the file in Excel once or export to CSV. Absent when zero."
|
|
962
|
+
}
|
|
963
|
+
}
|
|
964
|
+
}
|
|
965
|
+
}
|
|
966
|
+
};
|
|
967
|
+
export const ALL_SCHEMAS = {
|
|
968
|
+
"answer.schema.json": ANSWER_SCHEMA,
|
|
969
|
+
"cues.taxonomy.json": CUES_TAXONOMY,
|
|
970
|
+
"events.schema.json": EVENTS_SCHEMA,
|
|
971
|
+
"frames.taxonomy.json": FRAMES_TAXONOMY,
|
|
972
|
+
"status.schema.json": STATUS_SCHEMA,
|
|
973
|
+
"transcript.schema.json": TRANSCRIPT_SCHEMA,
|
|
974
|
+
};
|
|
975
|
+
//# sourceMappingURL=schemas.generated.js.map
|