@they-juanreina/compost-cli 0.1.2 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/agreement.d.ts +3 -0
- package/dist/commands/agreement.d.ts.map +1 -0
- package/dist/commands/agreement.js +35 -0
- package/dist/commands/agreement.js.map +1 -0
- package/dist/commands/backup.d.ts +3 -0
- package/dist/commands/backup.d.ts.map +1 -0
- package/dist/commands/backup.js +31 -0
- package/dist/commands/backup.js.map +1 -0
- package/dist/commands/chat.d.ts.map +1 -1
- package/dist/commands/chat.js +3 -2
- package/dist/commands/chat.js.map +1 -1
- package/dist/commands/create.d.ts +1 -0
- package/dist/commands/create.d.ts.map +1 -1
- package/dist/commands/create.js +39 -1
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/export.d.ts.map +1 -1
- package/dist/commands/export.js +47 -4
- package/dist/commands/export.js.map +1 -1
- package/dist/commands/import.d.ts +3 -0
- package/dist/commands/import.d.ts.map +1 -0
- package/dist/commands/import.js +64 -0
- package/dist/commands/import.js.map +1 -0
- package/dist/commands/ingest.d.ts.map +1 -1
- package/dist/commands/ingest.js +1 -0
- package/dist/commands/ingest.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +2 -0
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/jobs.d.ts +3 -0
- package/dist/commands/jobs.d.ts.map +1 -0
- package/dist/commands/jobs.js +105 -0
- package/dist/commands/jobs.js.map +1 -0
- package/dist/commands/label.d.ts +3 -0
- package/dist/commands/label.d.ts.map +1 -0
- package/dist/commands/label.js +67 -0
- package/dist/commands/label.js.map +1 -0
- package/dist/commands/models.d.ts.map +1 -1
- package/dist/commands/models.js +2 -1
- package/dist/commands/models.js.map +1 -1
- package/dist/commands/recode.d.ts +3 -0
- package/dist/commands/recode.d.ts.map +1 -0
- package/dist/commands/recode.js +60 -0
- package/dist/commands/recode.js.map +1 -0
- package/dist/commands/reindex.d.ts.map +1 -1
- package/dist/commands/reindex.js +19 -7
- package/dist/commands/reindex.js.map +1 -1
- package/dist/commands/rerun.d.ts +3 -0
- package/dist/commands/rerun.d.ts.map +1 -0
- package/dist/commands/rerun.js +91 -0
- package/dist/commands/rerun.js.map +1 -0
- package/dist/commands/search.d.ts.map +1 -1
- package/dist/commands/search.js +12 -1
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/secrets.d.ts +3 -0
- package/dist/commands/secrets.d.ts.map +1 -0
- package/dist/commands/secrets.js +145 -0
- package/dist/commands/secrets.js.map +1 -0
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +95 -2
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/setupItem.d.ts +26 -0
- package/dist/commands/setupItem.d.ts.map +1 -0
- package/dist/commands/setupItem.js +145 -0
- package/dist/commands/setupItem.js.map +1 -0
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +2 -1
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/transcribe.d.ts.map +1 -1
- package/dist/commands/transcribe.js +32 -4
- package/dist/commands/transcribe.js.map +1 -1
- package/dist/commands/validate.d.ts.map +1 -1
- package/dist/commands/validate.js +29 -1
- package/dist/commands/validate.js.map +1 -1
- package/dist/commands/watch.d.ts.map +1 -1
- package/dist/commands/watch.js +53 -6
- package/dist/commands/watch.js.map +1 -1
- package/dist/engine.d.ts +23 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js +32 -0
- package/dist/engine.js.map +1 -0
- package/dist/errors.d.ts +5 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +6 -0
- package/dist/errors.js.map +1 -1
- package/dist/exporters/pdf.d.ts.map +1 -1
- package/dist/exporters/pdf.js +2 -1
- package/dist/exporters/pdf.js.map +1 -1
- package/dist/exporters/prov.d.ts +11 -0
- package/dist/exporters/prov.d.ts.map +1 -0
- package/dist/exporters/prov.js +151 -0
- package/dist/exporters/prov.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/legacy_client.d.ts.map +1 -1
- package/dist/legacy_client.js +2 -1
- package/dist/legacy_client.js.map +1 -1
- package/dist/lib/agreement.d.ts +77 -0
- package/dist/lib/agreement.d.ts.map +1 -0
- package/dist/lib/agreement.js +261 -0
- package/dist/lib/agreement.js.map +1 -0
- package/dist/lib/artifacts.d.ts +35 -2
- package/dist/lib/artifacts.d.ts.map +1 -1
- package/dist/lib/artifacts.js +158 -29
- package/dist/lib/artifacts.js.map +1 -1
- package/dist/lib/backup.d.ts +37 -0
- package/dist/lib/backup.d.ts.map +1 -0
- package/dist/lib/backup.js +57 -0
- package/dist/lib/backup.js.map +1 -0
- package/dist/lib/childEnv.d.ts +13 -0
- package/dist/lib/childEnv.d.ts.map +1 -0
- package/dist/lib/childEnv.js +45 -0
- package/dist/lib/childEnv.js.map +1 -0
- package/dist/lib/config.d.ts +3 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/doctor.d.ts +3 -0
- package/dist/lib/doctor.d.ts.map +1 -1
- package/dist/lib/doctor.js +24 -1
- package/dist/lib/doctor.js.map +1 -1
- package/dist/lib/events.d.ts +44 -1
- package/dist/lib/events.d.ts.map +1 -1
- package/dist/lib/events.js +55 -2
- package/dist/lib/events.js.map +1 -1
- package/dist/lib/importTranscript.d.ts +16 -0
- package/dist/lib/importTranscript.d.ts.map +1 -0
- package/dist/lib/importTranscript.js +94 -0
- package/dist/lib/importTranscript.js.map +1 -0
- package/dist/lib/ingest.d.ts.map +1 -1
- package/dist/lib/ingest.js +12 -6
- package/dist/lib/ingest.js.map +1 -1
- package/dist/lib/journal.d.ts +13 -4
- package/dist/lib/journal.d.ts.map +1 -1
- package/dist/lib/journal.js +53 -16
- package/dist/lib/journal.js.map +1 -1
- package/dist/lib/legacyNative.d.ts +17 -0
- package/dist/lib/legacyNative.d.ts.map +1 -0
- package/dist/lib/legacyNative.js +38 -0
- package/dist/lib/legacyNative.js.map +1 -0
- package/dist/lib/migrate.d.ts.map +1 -1
- package/dist/lib/migrate.js +9 -2
- package/dist/lib/migrate.js.map +1 -1
- package/dist/lib/nativeRuntime.d.ts +31 -0
- package/dist/lib/nativeRuntime.d.ts.map +1 -1
- package/dist/lib/nativeRuntime.js +38 -0
- package/dist/lib/nativeRuntime.js.map +1 -1
- package/dist/lib/pathSafe.d.ts +8 -0
- package/dist/lib/pathSafe.d.ts.map +1 -0
- package/dist/lib/pathSafe.js +12 -0
- package/dist/lib/pathSafe.js.map +1 -0
- package/dist/lib/provisionNative.d.ts.map +1 -1
- package/dist/lib/provisionNative.js +7 -3
- package/dist/lib/provisionNative.js.map +1 -1
- package/dist/lib/queue.d.ts +25 -0
- package/dist/lib/queue.d.ts.map +1 -1
- package/dist/lib/queue.js +70 -3
- package/dist/lib/queue.js.map +1 -1
- package/dist/lib/reads.d.ts +24 -0
- package/dist/lib/reads.d.ts.map +1 -0
- package/dist/lib/reads.js +115 -0
- package/dist/lib/reads.js.map +1 -0
- package/dist/lib/recode.d.ts +19 -0
- package/dist/lib/recode.d.ts.map +1 -0
- package/dist/lib/recode.js +43 -0
- package/dist/lib/recode.js.map +1 -0
- package/dist/lib/redact.d.ts +7 -0
- package/dist/lib/redact.d.ts.map +1 -0
- package/dist/lib/redact.js +45 -0
- package/dist/lib/redact.js.map +1 -0
- package/dist/lib/rerun.d.ts +51 -0
- package/dist/lib/rerun.d.ts.map +1 -0
- package/dist/lib/rerun.js +160 -0
- package/dist/lib/rerun.js.map +1 -0
- package/dist/lib/retrieve.d.ts +8 -4
- package/dist/lib/retrieve.d.ts.map +1 -1
- package/dist/lib/retrieve.js +14 -3
- package/dist/lib/retrieve.js.map +1 -1
- package/dist/lib/saturate.js +3 -3
- package/dist/lib/saturate.js.map +1 -1
- package/dist/lib/schemas.generated.d.ts.map +1 -1
- package/dist/lib/schemas.generated.js +28 -0
- package/dist/lib/schemas.generated.js.map +1 -1
- package/dist/lib/secrets.d.ts +158 -0
- package/dist/lib/secrets.d.ts.map +1 -0
- package/dist/lib/secrets.js +514 -0
- package/dist/lib/secrets.js.map +1 -0
- package/dist/lib/seed.d.ts +5 -0
- package/dist/lib/seed.d.ts.map +1 -1
- package/dist/lib/seed.js +15 -2
- package/dist/lib/seed.js.map +1 -1
- package/dist/lib/seedResolve.d.ts +5 -0
- package/dist/lib/seedResolve.d.ts.map +1 -1
- package/dist/lib/seedResolve.js +12 -3
- package/dist/lib/seedResolve.js.map +1 -1
- package/dist/lib/session.d.ts +14 -0
- package/dist/lib/session.d.ts.map +1 -1
- package/dist/lib/session.js +53 -4
- package/dist/lib/session.js.map +1 -1
- package/dist/lib/sessionId.d.ts +9 -0
- package/dist/lib/sessionId.d.ts.map +1 -0
- package/dist/lib/sessionId.js +37 -0
- package/dist/lib/sessionId.js.map +1 -0
- package/dist/lib/setup.d.ts +9 -0
- package/dist/lib/setup.d.ts.map +1 -1
- package/dist/lib/setup.js +97 -29
- package/dist/lib/setup.js.map +1 -1
- package/dist/lib/setupItem.d.ts +99 -0
- package/dist/lib/setupItem.d.ts.map +1 -0
- package/dist/lib/setupItem.js +262 -0
- package/dist/lib/setupItem.js.map +1 -0
- package/dist/lib/setupWizard.d.ts +53 -0
- package/dist/lib/setupWizard.d.ts.map +1 -0
- package/dist/lib/setupWizard.js +347 -0
- package/dist/lib/setupWizard.js.map +1 -0
- package/dist/lib/snap.d.ts.map +1 -1
- package/dist/lib/snap.js +5 -0
- package/dist/lib/snap.js.map +1 -1
- package/dist/lib/speakers.d.ts +41 -0
- package/dist/lib/speakers.d.ts.map +1 -0
- package/dist/lib/speakers.js +78 -0
- package/dist/lib/speakers.js.map +1 -0
- package/dist/lib/status.d.ts.map +1 -1
- package/dist/lib/status.js +21 -0
- package/dist/lib/status.js.map +1 -1
- package/dist/lib/stdin.d.ts +5 -0
- package/dist/lib/stdin.d.ts.map +1 -0
- package/dist/lib/stdin.js +12 -0
- package/dist/lib/stdin.js.map +1 -0
- package/dist/lib/transcribeNative.d.ts +4 -9
- package/dist/lib/transcribeNative.d.ts.map +1 -1
- package/dist/lib/transcribeNative.js +11 -26
- package/dist/lib/transcribeNative.js.map +1 -1
- package/dist/lib/userConfig.d.ts +22 -0
- package/dist/lib/userConfig.d.ts.map +1 -0
- package/dist/lib/userConfig.js +67 -0
- package/dist/lib/userConfig.js.map +1 -0
- package/dist/lib/validate.d.ts +18 -0
- package/dist/lib/validate.d.ts.map +1 -1
- package/dist/lib/validate.js +71 -1
- package/dist/lib/validate.js.map +1 -1
- package/dist/lib/version.d.ts +30 -0
- package/dist/lib/version.d.ts.map +1 -0
- package/dist/lib/version.js +65 -0
- package/dist/lib/version.js.map +1 -0
- package/dist/llm/adapter.d.ts +5 -0
- package/dist/llm/adapter.d.ts.map +1 -1
- package/dist/llm/adapter.js +27 -8
- package/dist/llm/adapter.js.map +1 -1
- package/dist/llm/http.d.ts +22 -1
- package/dist/llm/http.d.ts.map +1 -1
- package/dist/llm/http.js +52 -30
- package/dist/llm/http.js.map +1 -1
- package/dist/llm/providers/anthropic.d.ts.map +1 -1
- package/dist/llm/providers/anthropic.js +6 -9
- package/dist/llm/providers/anthropic.js.map +1 -1
- package/dist/llm/providers/ollama.d.ts.map +1 -1
- package/dist/llm/providers/ollama.js +8 -7
- package/dist/llm/providers/ollama.js.map +1 -1
- package/dist/llm/providers/openai_compatible.d.ts.map +1 -1
- package/dist/llm/providers/openai_compatible.js +2 -7
- package/dist/llm/providers/openai_compatible.js.map +1 -1
- package/dist/logging.d.ts.map +1 -1
- package/dist/logging.js +3 -1
- package/dist/logging.js.map +1 -1
- package/dist/loops/embed_worker.d.ts +3 -0
- package/dist/loops/embed_worker.d.ts.map +1 -1
- package/dist/loops/embed_worker.js +11 -4
- package/dist/loops/embed_worker.js.map +1 -1
- package/dist/loops/ingest_watcher.d.ts.map +1 -1
- package/dist/loops/ingest_watcher.js +6 -3
- package/dist/loops/ingest_watcher.js.map +1 -1
- package/dist/loops/legacy_worker.d.ts +28 -1
- package/dist/loops/legacy_worker.d.ts.map +1 -1
- package/dist/loops/legacy_worker.js +91 -10
- package/dist/loops/legacy_worker.js.map +1 -1
- package/dist/loops/supervisor.d.ts +7 -0
- package/dist/loops/supervisor.d.ts.map +1 -1
- package/dist/loops/supervisor.js +17 -2
- package/dist/loops/supervisor.js.map +1 -1
- package/dist/loops/synthesis.d.ts.map +1 -1
- package/dist/loops/synthesis.js +15 -0
- package/dist/loops/synthesis.js.map +1 -1
- package/dist/loops/transcribe_worker.d.ts +3 -0
- package/dist/loops/transcribe_worker.d.ts.map +1 -1
- package/dist/loops/transcribe_worker.js +15 -7
- package/dist/loops/transcribe_worker.js.map +1 -1
- package/dist/output.d.ts +13 -1
- package/dist/output.d.ts.map +1 -1
- package/dist/output.js +27 -6
- package/dist/output.js.map +1 -1
- package/dist/render/glyphs.d.ts +30 -0
- package/dist/render/glyphs.d.ts.map +1 -0
- package/dist/render/glyphs.js +38 -0
- package/dist/render/glyphs.js.map +1 -0
- package/dist/render/human.d.ts +22 -0
- package/dist/render/human.d.ts.map +1 -0
- package/dist/render/human.js +62 -0
- package/dist/render/human.js.map +1 -0
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +32 -4
- package/dist/router.js.map +1 -1
- package/dist/transcriber_client.d.ts.map +1 -1
- package/dist/transcriber_client.js +2 -1
- package/dist/transcriber_client.js.map +1 -1
- package/package.json +12 -5
- package/templates/AGENTS.md +1 -1
- package/templates/config.toml +6 -1
- package/transcriber/app/diarization.py +36 -6
- package/transcriber/app/legacy_cli.py +90 -0
- package/transcriber/app/pipeline.py +13 -7
- package/transcriber/app/prosody.py +5 -0
- package/transcriber/app/transcribe_cli.py +15 -1
- package/transcriber/app/vad.py +82 -11
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Human↔machine intercoder agreement (§4).
|
|
3
|
+
*
|
|
4
|
+
* compost's *native* workflow produces endorse/reject decisions, which are
|
|
5
|
+
* reactive (the human sees the AI code first) — a κ computed on that violates κ's
|
|
6
|
+
* independence assumption. So legitimate agreement requires INDEPENDENT double
|
|
7
|
+
* coding: a researcher codes a sampled highlight set against the shared codebook
|
|
8
|
+
* WITHOUT seeing the machine's codes (`compost recode --blind`), and we compare
|
|
9
|
+
* those blind human codings to the machine codings on the doubly-coded units.
|
|
10
|
+
*
|
|
11
|
+
* A unit (highlight) can carry multiple codes, so we model each (unit, code) as a
|
|
12
|
+
* binary present/absent decision and compute, over the doubly-coded set:
|
|
13
|
+
* - Cohen's κ per code and pooled over all (unit, code) cells (2 coders),
|
|
14
|
+
* - Krippendorff's nominal α over the pooled cells (cross-check; handles the
|
|
15
|
+
* general case).
|
|
16
|
+
*/
|
|
17
|
+
export type Coder = 'human' | 'machine';
|
|
18
|
+
/** One coder asserting one code applies to one unit (highlight). */
|
|
19
|
+
export interface Coding {
|
|
20
|
+
coder: Coder;
|
|
21
|
+
unit: string;
|
|
22
|
+
code: string;
|
|
23
|
+
}
|
|
24
|
+
export interface KappaResult {
|
|
25
|
+
kappa: number | null;
|
|
26
|
+
po: number;
|
|
27
|
+
pe: number;
|
|
28
|
+
n: number;
|
|
29
|
+
}
|
|
30
|
+
export interface PerCodeAgreement {
|
|
31
|
+
code: string;
|
|
32
|
+
kappa: number | null;
|
|
33
|
+
support: number;
|
|
34
|
+
}
|
|
35
|
+
export interface AgreementReport {
|
|
36
|
+
status: 'ok' | 'insufficient';
|
|
37
|
+
doubly_coded_units: number;
|
|
38
|
+
codes: number;
|
|
39
|
+
per_code: PerCodeAgreement[];
|
|
40
|
+
pooled_kappa: number | null;
|
|
41
|
+
krippendorff_alpha: number | null;
|
|
42
|
+
interpretation: string;
|
|
43
|
+
excluded_unnamed_machine_codes: number;
|
|
44
|
+
note?: string;
|
|
45
|
+
}
|
|
46
|
+
/** Cohen's κ for a single binary variable across paired ratings. */
|
|
47
|
+
export declare function cohensKappaBinary(a: boolean[], b: boolean[]): KappaResult;
|
|
48
|
+
/**
|
|
49
|
+
* Krippendorff's α (nominal metric) over a units × coders matrix. Cells may be
|
|
50
|
+
* null (a coder didn't code that unit). Units with fewer than two values are
|
|
51
|
+
* dropped (not pairable). General coincidence-matrix algorithm.
|
|
52
|
+
*/
|
|
53
|
+
export declare function krippendorffAlphaNominal(units: Array<Array<string | null>>): number | null;
|
|
54
|
+
export interface AgreementOptions {
|
|
55
|
+
/** Minimum doubly-coded units below which κ is statistical noise. */
|
|
56
|
+
minUnits?: number;
|
|
57
|
+
excludedUnnamedMachineCodes?: number;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Compute agreement from a flat list of (coder, unit, code) codings. Only units
|
|
61
|
+
* coded by BOTH coders count (the doubly-coded set); the codebook is the union of
|
|
62
|
+
* codes either coder used on those units.
|
|
63
|
+
*/
|
|
64
|
+
export declare function computeAgreement(codings: Coding[], opts?: AgreementOptions): AgreementReport;
|
|
65
|
+
/**
|
|
66
|
+
* Extract codings from a seed's event log. Machine codings come from named `code`
|
|
67
|
+
* create events (actor ai/agent) via their `evidence` highlight ids; unnamed
|
|
68
|
+
* cluster codes (similarity-scanner `members`) have no shared label and are
|
|
69
|
+
* excluded (counted, never silently dropped). Human codings come from blind
|
|
70
|
+
* `coding` link events (actor researcher, payload.blind === true). Artifacts with
|
|
71
|
+
* a reject/unlink event are excluded.
|
|
72
|
+
*/
|
|
73
|
+
export declare function readCodings(eventsDbPath: string): {
|
|
74
|
+
codings: Coding[];
|
|
75
|
+
excludedUnnamedMachineCodes: number;
|
|
76
|
+
};
|
|
77
|
+
//# sourceMappingURL=agreement.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agreement.d.ts","sourceRoot":"","sources":["../../src/lib/agreement.ts"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,MAAM,KAAK,GAAG,OAAO,GAAG,SAAS,CAAA;AAEvC,oEAAoE;AACpE,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,KAAK,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,EAAE,EAAE,MAAM,CAAA;IACV,EAAE,EAAE,MAAM,CAAA;IACV,CAAC,EAAE,MAAM,CAAA;CACV;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,IAAI,GAAG,cAAc,CAAA;IAC7B,kBAAkB,EAAE,MAAM,CAAA;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,gBAAgB,EAAE,CAAA;IAC5B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,cAAc,EAAE,MAAM,CAAA;IACtB,8BAA8B,EAAE,MAAM,CAAA;IACtC,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAID,oEAAoE;AACpE,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,WAAW,CAuBzE;AAID;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI,CAiD1F;AAcD,MAAM,WAAW,gBAAgB;IAC/B,qEAAqE;IACrE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,2BAA2B,CAAC,EAAE,MAAM,CAAA;CACrC;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,GAAE,gBAAqB,GAAG,eAAe,CA8EhG;AAUD;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,YAAY,EAAE,MAAM,GAAG;IACjD,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,2BAA2B,EAAE,MAAM,CAAA;CACpC,CAuDA"}
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import Database from 'better-sqlite3';
|
|
3
|
+
import { CompostError } from '../errors.js';
|
|
4
|
+
// ---------------------------------------------------------------- κ (binary)
|
|
5
|
+
/** Cohen's κ for a single binary variable across paired ratings. */
|
|
6
|
+
export function cohensKappaBinary(a, b) {
|
|
7
|
+
if (a.length !== b.length)
|
|
8
|
+
throw new Error('cohensKappaBinary: rating arrays differ in length');
|
|
9
|
+
const n = a.length;
|
|
10
|
+
if (n === 0)
|
|
11
|
+
return { kappa: null, po: 0, pe: 0, n: 0 };
|
|
12
|
+
let n11 = 0;
|
|
13
|
+
let n00 = 0;
|
|
14
|
+
let aTrue = 0;
|
|
15
|
+
let bTrue = 0;
|
|
16
|
+
for (let i = 0; i < n; i++) {
|
|
17
|
+
if (a[i])
|
|
18
|
+
aTrue++;
|
|
19
|
+
if (b[i])
|
|
20
|
+
bTrue++;
|
|
21
|
+
if (a[i] && b[i])
|
|
22
|
+
n11++;
|
|
23
|
+
if (!a[i] && !b[i])
|
|
24
|
+
n00++;
|
|
25
|
+
}
|
|
26
|
+
const po = (n11 + n00) / n;
|
|
27
|
+
const pYesA = aTrue / n;
|
|
28
|
+
const pYesB = bTrue / n;
|
|
29
|
+
const pe = pYesA * pYesB + (1 - pYesA) * (1 - pYesB);
|
|
30
|
+
if (1 - pe === 0) {
|
|
31
|
+
// Degenerate: both marginals saturated. κ is conventionally 1 iff perfect.
|
|
32
|
+
return { kappa: po === 1 ? 1 : 0, po, pe, n };
|
|
33
|
+
}
|
|
34
|
+
return { kappa: (po - pe) / (1 - pe), po, pe, n };
|
|
35
|
+
}
|
|
36
|
+
// ------------------------------------------------- Krippendorff α (nominal)
|
|
37
|
+
/**
|
|
38
|
+
* Krippendorff's α (nominal metric) over a units × coders matrix. Cells may be
|
|
39
|
+
* null (a coder didn't code that unit). Units with fewer than two values are
|
|
40
|
+
* dropped (not pairable). General coincidence-matrix algorithm.
|
|
41
|
+
*/
|
|
42
|
+
export function krippendorffAlphaNominal(units) {
|
|
43
|
+
// Coincidence matrix o[c][k] and value marginals.
|
|
44
|
+
const o = new Map();
|
|
45
|
+
const bump = (c, k, by) => {
|
|
46
|
+
if (!o.has(c))
|
|
47
|
+
o.set(c, new Map());
|
|
48
|
+
const row = o.get(c);
|
|
49
|
+
row.set(k, (row.get(k) ?? 0) + by);
|
|
50
|
+
};
|
|
51
|
+
for (const unit of units) {
|
|
52
|
+
const vals = unit.filter((v) => v !== null);
|
|
53
|
+
const m = vals.length;
|
|
54
|
+
if (m < 2)
|
|
55
|
+
continue;
|
|
56
|
+
for (let i = 0; i < m; i++) {
|
|
57
|
+
for (let j = 0; j < m; j++) {
|
|
58
|
+
if (i === j)
|
|
59
|
+
continue;
|
|
60
|
+
bump(vals[i], vals[j], 1 / (m - 1));
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
const values = [...o.keys()];
|
|
65
|
+
let n = 0;
|
|
66
|
+
const marginal = new Map();
|
|
67
|
+
for (const c of values) {
|
|
68
|
+
let rowSum = 0;
|
|
69
|
+
for (const k of values)
|
|
70
|
+
rowSum += o.get(c)?.get(k) ?? 0;
|
|
71
|
+
marginal.set(c, rowSum);
|
|
72
|
+
n += rowSum;
|
|
73
|
+
}
|
|
74
|
+
if (n < 2)
|
|
75
|
+
return null;
|
|
76
|
+
// Observed disagreement (nominal δ = 1 when c≠k).
|
|
77
|
+
let Do = 0;
|
|
78
|
+
for (const c of values) {
|
|
79
|
+
for (const k of values) {
|
|
80
|
+
if (c === k)
|
|
81
|
+
continue;
|
|
82
|
+
Do += o.get(c)?.get(k) ?? 0;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
Do /= n;
|
|
86
|
+
// Expected disagreement.
|
|
87
|
+
let De = 0;
|
|
88
|
+
for (const c of values) {
|
|
89
|
+
for (const k of values) {
|
|
90
|
+
if (c === k)
|
|
91
|
+
continue;
|
|
92
|
+
De += marginal.get(c) * marginal.get(k);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
De /= n * (n - 1);
|
|
96
|
+
if (De === 0)
|
|
97
|
+
return Do === 0 ? 1 : 0;
|
|
98
|
+
return 1 - Do / De;
|
|
99
|
+
}
|
|
100
|
+
// ------------------------------------------------------- agreement over codings
|
|
101
|
+
function landisKoch(k) {
|
|
102
|
+
if (k === null)
|
|
103
|
+
return 'undefined';
|
|
104
|
+
if (k < 0)
|
|
105
|
+
return 'poor (worse than chance)';
|
|
106
|
+
if (k <= 0.2)
|
|
107
|
+
return 'slight';
|
|
108
|
+
if (k <= 0.4)
|
|
109
|
+
return 'fair';
|
|
110
|
+
if (k <= 0.6)
|
|
111
|
+
return 'moderate';
|
|
112
|
+
if (k <= 0.8)
|
|
113
|
+
return 'substantial';
|
|
114
|
+
return 'almost perfect';
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Compute agreement from a flat list of (coder, unit, code) codings. Only units
|
|
118
|
+
* coded by BOTH coders count (the doubly-coded set); the codebook is the union of
|
|
119
|
+
* codes either coder used on those units.
|
|
120
|
+
*/
|
|
121
|
+
export function computeAgreement(codings, opts = {}) {
|
|
122
|
+
const minUnits = opts.minUnits ?? 10;
|
|
123
|
+
const excluded = opts.excludedUnnamedMachineCodes ?? 0;
|
|
124
|
+
const byCoderUnit = {
|
|
125
|
+
human: new Map(),
|
|
126
|
+
machine: new Map(),
|
|
127
|
+
};
|
|
128
|
+
const allCodes = new Set();
|
|
129
|
+
for (const { coder, unit, code } of codings) {
|
|
130
|
+
if (!byCoderUnit[coder].has(unit))
|
|
131
|
+
byCoderUnit[coder].set(unit, new Set());
|
|
132
|
+
byCoderUnit[coder].get(unit)?.add(code);
|
|
133
|
+
allCodes.add(code);
|
|
134
|
+
}
|
|
135
|
+
const doublyCoded = [...byCoderUnit.human.keys()].filter((u) => byCoderUnit.machine.has(u)).sort();
|
|
136
|
+
const codes = [...allCodes].sort();
|
|
137
|
+
const base = {
|
|
138
|
+
doubly_coded_units: doublyCoded.length,
|
|
139
|
+
codes: codes.length,
|
|
140
|
+
excluded_unnamed_machine_codes: excluded,
|
|
141
|
+
};
|
|
142
|
+
if (doublyCoded.length < minUnits) {
|
|
143
|
+
return {
|
|
144
|
+
status: 'insufficient',
|
|
145
|
+
...base,
|
|
146
|
+
per_code: [],
|
|
147
|
+
pooled_kappa: null,
|
|
148
|
+
krippendorff_alpha: null,
|
|
149
|
+
interpretation: 'undefined',
|
|
150
|
+
note: `Only ${doublyCoded.length} doubly-coded unit(s); need ≥ ${minUnits} for a meaningful κ. Code more highlights with \`compost recode --blind\`.`,
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
const has = (coder, unit, code) => byCoderUnit[coder].get(unit)?.has(code) ?? false;
|
|
154
|
+
// Per-code binary κ.
|
|
155
|
+
const perCode = [];
|
|
156
|
+
for (const code of codes) {
|
|
157
|
+
const a = [];
|
|
158
|
+
const b = [];
|
|
159
|
+
let support = 0;
|
|
160
|
+
for (const u of doublyCoded) {
|
|
161
|
+
const h = has('human', u, code);
|
|
162
|
+
const m = has('machine', u, code);
|
|
163
|
+
a.push(h);
|
|
164
|
+
b.push(m);
|
|
165
|
+
if (h || m)
|
|
166
|
+
support++;
|
|
167
|
+
}
|
|
168
|
+
perCode.push({ code, kappa: cohensKappaBinary(a, b).kappa, support });
|
|
169
|
+
}
|
|
170
|
+
// Pooled κ over every (unit, code) cell, and α as a cross-check on the same cells.
|
|
171
|
+
const pooledA = [];
|
|
172
|
+
const pooledB = [];
|
|
173
|
+
const alphaUnits = [];
|
|
174
|
+
for (const u of doublyCoded) {
|
|
175
|
+
for (const code of codes) {
|
|
176
|
+
const h = has('human', u, code);
|
|
177
|
+
const m = has('machine', u, code);
|
|
178
|
+
pooledA.push(h);
|
|
179
|
+
pooledB.push(m);
|
|
180
|
+
alphaUnits.push([h ? 'present' : 'absent', m ? 'present' : 'absent']);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
const pooled = cohensKappaBinary(pooledA, pooledB).kappa;
|
|
184
|
+
return {
|
|
185
|
+
status: 'ok',
|
|
186
|
+
...base,
|
|
187
|
+
per_code: perCode,
|
|
188
|
+
pooled_kappa: pooled,
|
|
189
|
+
krippendorff_alpha: krippendorffAlphaNominal(alphaUnits),
|
|
190
|
+
interpretation: landisKoch(pooled),
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Extract codings from a seed's event log. Machine codings come from named `code`
|
|
195
|
+
* create events (actor ai/agent) via their `evidence` highlight ids; unnamed
|
|
196
|
+
* cluster codes (similarity-scanner `members`) have no shared label and are
|
|
197
|
+
* excluded (counted, never silently dropped). Human codings come from blind
|
|
198
|
+
* `coding` link events (actor researcher, payload.blind === true). Artifacts with
|
|
199
|
+
* a reject/unlink event are excluded.
|
|
200
|
+
*/
|
|
201
|
+
export function readCodings(eventsDbPath) {
|
|
202
|
+
if (!existsSync(eventsDbPath)) {
|
|
203
|
+
throw new CompostError('FILE_NOT_FOUND', `No events.sqlite at ${eventsDbPath}`);
|
|
204
|
+
}
|
|
205
|
+
const db = new Database(eventsDbPath, { readonly: true, fileMustExist: true });
|
|
206
|
+
try {
|
|
207
|
+
const archived = new Set(db
|
|
208
|
+
.prepare("SELECT DISTINCT artifact_id FROM events WHERE action IN ('reject','unlink')")
|
|
209
|
+
.all().map((r) => r.artifact_id));
|
|
210
|
+
const codings = [];
|
|
211
|
+
let excludedUnnamed = 0;
|
|
212
|
+
const machineRows = db
|
|
213
|
+
.prepare("SELECT artifact_id, actor_type, payload FROM events WHERE action='create' AND artifact_kind='code' AND actor_type IN ('ai','agent')")
|
|
214
|
+
.all();
|
|
215
|
+
for (const row of machineRows) {
|
|
216
|
+
if (archived.has(row.artifact_id))
|
|
217
|
+
continue;
|
|
218
|
+
const p = safeParse(row.payload);
|
|
219
|
+
const code = typeof p.name === 'string' ? p.name : undefined;
|
|
220
|
+
const units = (p.evidence ?? p.members);
|
|
221
|
+
if (code === undefined) {
|
|
222
|
+
if (Array.isArray(units) && units.length > 0)
|
|
223
|
+
excludedUnnamed++;
|
|
224
|
+
continue;
|
|
225
|
+
}
|
|
226
|
+
if (!Array.isArray(units))
|
|
227
|
+
continue;
|
|
228
|
+
for (const u of units) {
|
|
229
|
+
if (typeof u === 'string')
|
|
230
|
+
codings.push({ coder: 'machine', unit: u, code });
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
const humanRows = db
|
|
234
|
+
.prepare("SELECT artifact_id, actor_type, payload FROM events WHERE action='link' AND artifact_kind='coding' AND actor_type='researcher'")
|
|
235
|
+
.all();
|
|
236
|
+
for (const row of humanRows) {
|
|
237
|
+
if (archived.has(row.artifact_id))
|
|
238
|
+
continue;
|
|
239
|
+
const p = safeParse(row.payload);
|
|
240
|
+
if (p.blind !== true)
|
|
241
|
+
continue;
|
|
242
|
+
if (typeof p.code === 'string' && typeof p.highlight === 'string') {
|
|
243
|
+
codings.push({ coder: 'human', unit: p.highlight, code: p.code });
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
return { codings, excludedUnnamedMachineCodes: excludedUnnamed };
|
|
247
|
+
}
|
|
248
|
+
finally {
|
|
249
|
+
db.close();
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
function safeParse(s) {
|
|
253
|
+
try {
|
|
254
|
+
const v = JSON.parse(s);
|
|
255
|
+
return v !== null && typeof v === 'object' ? v : {};
|
|
256
|
+
}
|
|
257
|
+
catch {
|
|
258
|
+
return {};
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
//# sourceMappingURL=agreement.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agreement.js","sourceRoot":"","sources":["../../src/lib/agreement.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/artifacts.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import Database from 'better-sqlite3';
|
|
2
|
-
import { type Author } from './events.js';
|
|
1
|
+
import type Database from 'better-sqlite3';
|
|
2
|
+
import { type AiInputBundle, type Author } from './events.js';
|
|
3
3
|
export interface CreatedArtifact {
|
|
4
4
|
id: string;
|
|
5
5
|
artifact_id: string;
|
|
@@ -12,6 +12,7 @@ export interface CreateHighlightInput {
|
|
|
12
12
|
span: [number, number];
|
|
13
13
|
text: string;
|
|
14
14
|
author: Author;
|
|
15
|
+
inputs?: AiInputBundle;
|
|
15
16
|
}
|
|
16
17
|
export declare function createHighlight(seedPath: string, input: CreateHighlightInput): CreatedArtifact;
|
|
17
18
|
export interface CreateCodeInput {
|
|
@@ -19,6 +20,7 @@ export interface CreateCodeInput {
|
|
|
19
20
|
definition: string;
|
|
20
21
|
evidence?: string[];
|
|
21
22
|
author: Author;
|
|
23
|
+
inputs?: AiInputBundle;
|
|
22
24
|
}
|
|
23
25
|
export declare function createCode(seedPath: string, input: CreateCodeInput): CreatedArtifact;
|
|
24
26
|
export interface CreateThemeInput {
|
|
@@ -26,11 +28,14 @@ export interface CreateThemeInput {
|
|
|
26
28
|
summary: string;
|
|
27
29
|
codes?: string[];
|
|
28
30
|
author: Author;
|
|
31
|
+
inputs?: AiInputBundle;
|
|
29
32
|
}
|
|
30
33
|
export declare function createTheme(seedPath: string, input: CreateThemeInput): CreatedArtifact;
|
|
31
34
|
interface CreateEventRow {
|
|
32
35
|
id: string;
|
|
33
36
|
artifact_kind: string;
|
|
37
|
+
/** actor_id of the create event — used to refuse a self-endorse (#236). */
|
|
38
|
+
actor_id: string;
|
|
34
39
|
}
|
|
35
40
|
/**
|
|
36
41
|
* Human-id form for an artifact ref: `H-NNN`, `C-slug`, `T-slug` — the id
|
|
@@ -58,6 +63,34 @@ export declare function endorseArtifact(seedPath: string, artifactRef: string, r
|
|
|
58
63
|
parent_event_id: string;
|
|
59
64
|
already_endorsed?: true;
|
|
60
65
|
};
|
|
66
|
+
/**
|
|
67
|
+
* Resolve an artifact ref to its create event, then emit a researcher reject
|
|
68
|
+
* chaining the artifact's latest event. Reject archives (current_state is
|
|
69
|
+
* preserved for audit) — the three-actor model's "delete", where nothing is
|
|
70
|
+
* ever truly removed. Idempotent: a second reject by the same researcher is a
|
|
71
|
+
* no-op returning the existing reject.
|
|
72
|
+
*/
|
|
73
|
+
export declare function rejectArtifact(seedPath: string, artifactRef: string, researcherId: string, note?: string): {
|
|
74
|
+
artifact_id: string;
|
|
75
|
+
reject_event_id: string;
|
|
76
|
+
parent_event_id: string;
|
|
77
|
+
already_rejected?: true;
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* Resolve an artifact ref, then emit a field-level update chaining the latest
|
|
81
|
+
* event. The event log records `{ field, before, after }` so blame shows what
|
|
82
|
+
* changed. `before` is best-effort context for the audit trail; the reducer
|
|
83
|
+
* applies only `after`.
|
|
84
|
+
*/
|
|
85
|
+
export declare function updateArtifact(seedPath: string, artifactRef: string, patch: {
|
|
86
|
+
field: string;
|
|
87
|
+
before?: unknown;
|
|
88
|
+
after: unknown;
|
|
89
|
+
}, author: Author): {
|
|
90
|
+
artifact_id: string;
|
|
91
|
+
update_event_id: string;
|
|
92
|
+
parent_event_id: string;
|
|
93
|
+
};
|
|
61
94
|
/** Read the configured researcher identity: COMPOST_USER env, else fallback. */
|
|
62
95
|
export declare function defaultResearcherId(): string;
|
|
63
96
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifacts.d.ts","sourceRoot":"","sources":["../../src/lib/artifacts.ts"],"names":[],"mappings":"AAGA,OAAO,QAAQ,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"artifacts.d.ts","sourceRoot":"","sources":["../../src/lib/artifacts.ts"],"names":[],"mappings":"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"}
|