@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.
Files changed (313) hide show
  1. package/dist/commands/agreement.d.ts +3 -0
  2. package/dist/commands/agreement.d.ts.map +1 -0
  3. package/dist/commands/agreement.js +35 -0
  4. package/dist/commands/agreement.js.map +1 -0
  5. package/dist/commands/backup.d.ts +3 -0
  6. package/dist/commands/backup.d.ts.map +1 -0
  7. package/dist/commands/backup.js +31 -0
  8. package/dist/commands/backup.js.map +1 -0
  9. package/dist/commands/chat.d.ts.map +1 -1
  10. package/dist/commands/chat.js +3 -2
  11. package/dist/commands/chat.js.map +1 -1
  12. package/dist/commands/create.d.ts +1 -0
  13. package/dist/commands/create.d.ts.map +1 -1
  14. package/dist/commands/create.js +39 -1
  15. package/dist/commands/create.js.map +1 -1
  16. package/dist/commands/export.d.ts.map +1 -1
  17. package/dist/commands/export.js +47 -4
  18. package/dist/commands/export.js.map +1 -1
  19. package/dist/commands/import.d.ts +3 -0
  20. package/dist/commands/import.d.ts.map +1 -0
  21. package/dist/commands/import.js +64 -0
  22. package/dist/commands/import.js.map +1 -0
  23. package/dist/commands/ingest.d.ts.map +1 -1
  24. package/dist/commands/ingest.js +1 -0
  25. package/dist/commands/ingest.js.map +1 -1
  26. package/dist/commands/init.d.ts.map +1 -1
  27. package/dist/commands/init.js +2 -0
  28. package/dist/commands/init.js.map +1 -1
  29. package/dist/commands/jobs.d.ts +3 -0
  30. package/dist/commands/jobs.d.ts.map +1 -0
  31. package/dist/commands/jobs.js +105 -0
  32. package/dist/commands/jobs.js.map +1 -0
  33. package/dist/commands/label.d.ts +3 -0
  34. package/dist/commands/label.d.ts.map +1 -0
  35. package/dist/commands/label.js +67 -0
  36. package/dist/commands/label.js.map +1 -0
  37. package/dist/commands/models.d.ts.map +1 -1
  38. package/dist/commands/models.js +2 -1
  39. package/dist/commands/models.js.map +1 -1
  40. package/dist/commands/recode.d.ts +3 -0
  41. package/dist/commands/recode.d.ts.map +1 -0
  42. package/dist/commands/recode.js +60 -0
  43. package/dist/commands/recode.js.map +1 -0
  44. package/dist/commands/reindex.d.ts.map +1 -1
  45. package/dist/commands/reindex.js +19 -7
  46. package/dist/commands/reindex.js.map +1 -1
  47. package/dist/commands/rerun.d.ts +3 -0
  48. package/dist/commands/rerun.d.ts.map +1 -0
  49. package/dist/commands/rerun.js +91 -0
  50. package/dist/commands/rerun.js.map +1 -0
  51. package/dist/commands/search.d.ts.map +1 -1
  52. package/dist/commands/search.js +12 -1
  53. package/dist/commands/search.js.map +1 -1
  54. package/dist/commands/secrets.d.ts +3 -0
  55. package/dist/commands/secrets.d.ts.map +1 -0
  56. package/dist/commands/secrets.js +145 -0
  57. package/dist/commands/secrets.js.map +1 -0
  58. package/dist/commands/setup.d.ts.map +1 -1
  59. package/dist/commands/setup.js +95 -2
  60. package/dist/commands/setup.js.map +1 -1
  61. package/dist/commands/setupItem.d.ts +26 -0
  62. package/dist/commands/setupItem.d.ts.map +1 -0
  63. package/dist/commands/setupItem.js +145 -0
  64. package/dist/commands/setupItem.js.map +1 -0
  65. package/dist/commands/status.d.ts.map +1 -1
  66. package/dist/commands/status.js +2 -1
  67. package/dist/commands/status.js.map +1 -1
  68. package/dist/commands/transcribe.d.ts.map +1 -1
  69. package/dist/commands/transcribe.js +32 -4
  70. package/dist/commands/transcribe.js.map +1 -1
  71. package/dist/commands/validate.d.ts.map +1 -1
  72. package/dist/commands/validate.js +29 -1
  73. package/dist/commands/validate.js.map +1 -1
  74. package/dist/commands/watch.d.ts.map +1 -1
  75. package/dist/commands/watch.js +53 -6
  76. package/dist/commands/watch.js.map +1 -1
  77. package/dist/engine.d.ts +23 -0
  78. package/dist/engine.d.ts.map +1 -0
  79. package/dist/engine.js +32 -0
  80. package/dist/engine.js.map +1 -0
  81. package/dist/errors.d.ts +5 -1
  82. package/dist/errors.d.ts.map +1 -1
  83. package/dist/errors.js +6 -0
  84. package/dist/errors.js.map +1 -1
  85. package/dist/exporters/pdf.d.ts.map +1 -1
  86. package/dist/exporters/pdf.js +2 -1
  87. package/dist/exporters/pdf.js.map +1 -1
  88. package/dist/exporters/prov.d.ts +11 -0
  89. package/dist/exporters/prov.d.ts.map +1 -0
  90. package/dist/exporters/prov.js +151 -0
  91. package/dist/exporters/prov.js.map +1 -0
  92. package/dist/index.d.ts.map +1 -1
  93. package/dist/index.js +6 -0
  94. package/dist/index.js.map +1 -1
  95. package/dist/legacy_client.d.ts.map +1 -1
  96. package/dist/legacy_client.js +2 -1
  97. package/dist/legacy_client.js.map +1 -1
  98. package/dist/lib/agreement.d.ts +77 -0
  99. package/dist/lib/agreement.d.ts.map +1 -0
  100. package/dist/lib/agreement.js +261 -0
  101. package/dist/lib/agreement.js.map +1 -0
  102. package/dist/lib/artifacts.d.ts +35 -2
  103. package/dist/lib/artifacts.d.ts.map +1 -1
  104. package/dist/lib/artifacts.js +158 -29
  105. package/dist/lib/artifacts.js.map +1 -1
  106. package/dist/lib/backup.d.ts +37 -0
  107. package/dist/lib/backup.d.ts.map +1 -0
  108. package/dist/lib/backup.js +57 -0
  109. package/dist/lib/backup.js.map +1 -0
  110. package/dist/lib/childEnv.d.ts +13 -0
  111. package/dist/lib/childEnv.d.ts.map +1 -0
  112. package/dist/lib/childEnv.js +45 -0
  113. package/dist/lib/childEnv.js.map +1 -0
  114. package/dist/lib/config.d.ts +3 -0
  115. package/dist/lib/config.d.ts.map +1 -1
  116. package/dist/lib/config.js.map +1 -1
  117. package/dist/lib/doctor.d.ts +3 -0
  118. package/dist/lib/doctor.d.ts.map +1 -1
  119. package/dist/lib/doctor.js +24 -1
  120. package/dist/lib/doctor.js.map +1 -1
  121. package/dist/lib/events.d.ts +44 -1
  122. package/dist/lib/events.d.ts.map +1 -1
  123. package/dist/lib/events.js +55 -2
  124. package/dist/lib/events.js.map +1 -1
  125. package/dist/lib/importTranscript.d.ts +16 -0
  126. package/dist/lib/importTranscript.d.ts.map +1 -0
  127. package/dist/lib/importTranscript.js +94 -0
  128. package/dist/lib/importTranscript.js.map +1 -0
  129. package/dist/lib/ingest.d.ts.map +1 -1
  130. package/dist/lib/ingest.js +12 -6
  131. package/dist/lib/ingest.js.map +1 -1
  132. package/dist/lib/journal.d.ts +13 -4
  133. package/dist/lib/journal.d.ts.map +1 -1
  134. package/dist/lib/journal.js +53 -16
  135. package/dist/lib/journal.js.map +1 -1
  136. package/dist/lib/legacyNative.d.ts +17 -0
  137. package/dist/lib/legacyNative.d.ts.map +1 -0
  138. package/dist/lib/legacyNative.js +38 -0
  139. package/dist/lib/legacyNative.js.map +1 -0
  140. package/dist/lib/migrate.d.ts.map +1 -1
  141. package/dist/lib/migrate.js +9 -2
  142. package/dist/lib/migrate.js.map +1 -1
  143. package/dist/lib/nativeRuntime.d.ts +31 -0
  144. package/dist/lib/nativeRuntime.d.ts.map +1 -1
  145. package/dist/lib/nativeRuntime.js +38 -0
  146. package/dist/lib/nativeRuntime.js.map +1 -1
  147. package/dist/lib/pathSafe.d.ts +8 -0
  148. package/dist/lib/pathSafe.d.ts.map +1 -0
  149. package/dist/lib/pathSafe.js +12 -0
  150. package/dist/lib/pathSafe.js.map +1 -0
  151. package/dist/lib/provisionNative.d.ts.map +1 -1
  152. package/dist/lib/provisionNative.js +7 -3
  153. package/dist/lib/provisionNative.js.map +1 -1
  154. package/dist/lib/queue.d.ts +25 -0
  155. package/dist/lib/queue.d.ts.map +1 -1
  156. package/dist/lib/queue.js +70 -3
  157. package/dist/lib/queue.js.map +1 -1
  158. package/dist/lib/reads.d.ts +24 -0
  159. package/dist/lib/reads.d.ts.map +1 -0
  160. package/dist/lib/reads.js +115 -0
  161. package/dist/lib/reads.js.map +1 -0
  162. package/dist/lib/recode.d.ts +19 -0
  163. package/dist/lib/recode.d.ts.map +1 -0
  164. package/dist/lib/recode.js +43 -0
  165. package/dist/lib/recode.js.map +1 -0
  166. package/dist/lib/redact.d.ts +7 -0
  167. package/dist/lib/redact.d.ts.map +1 -0
  168. package/dist/lib/redact.js +45 -0
  169. package/dist/lib/redact.js.map +1 -0
  170. package/dist/lib/rerun.d.ts +51 -0
  171. package/dist/lib/rerun.d.ts.map +1 -0
  172. package/dist/lib/rerun.js +160 -0
  173. package/dist/lib/rerun.js.map +1 -0
  174. package/dist/lib/retrieve.d.ts +8 -4
  175. package/dist/lib/retrieve.d.ts.map +1 -1
  176. package/dist/lib/retrieve.js +14 -3
  177. package/dist/lib/retrieve.js.map +1 -1
  178. package/dist/lib/saturate.js +3 -3
  179. package/dist/lib/saturate.js.map +1 -1
  180. package/dist/lib/schemas.generated.d.ts.map +1 -1
  181. package/dist/lib/schemas.generated.js +28 -0
  182. package/dist/lib/schemas.generated.js.map +1 -1
  183. package/dist/lib/secrets.d.ts +158 -0
  184. package/dist/lib/secrets.d.ts.map +1 -0
  185. package/dist/lib/secrets.js +514 -0
  186. package/dist/lib/secrets.js.map +1 -0
  187. package/dist/lib/seed.d.ts +5 -0
  188. package/dist/lib/seed.d.ts.map +1 -1
  189. package/dist/lib/seed.js +15 -2
  190. package/dist/lib/seed.js.map +1 -1
  191. package/dist/lib/seedResolve.d.ts +5 -0
  192. package/dist/lib/seedResolve.d.ts.map +1 -1
  193. package/dist/lib/seedResolve.js +12 -3
  194. package/dist/lib/seedResolve.js.map +1 -1
  195. package/dist/lib/session.d.ts +14 -0
  196. package/dist/lib/session.d.ts.map +1 -1
  197. package/dist/lib/session.js +53 -4
  198. package/dist/lib/session.js.map +1 -1
  199. package/dist/lib/sessionId.d.ts +9 -0
  200. package/dist/lib/sessionId.d.ts.map +1 -0
  201. package/dist/lib/sessionId.js +37 -0
  202. package/dist/lib/sessionId.js.map +1 -0
  203. package/dist/lib/setup.d.ts +9 -0
  204. package/dist/lib/setup.d.ts.map +1 -1
  205. package/dist/lib/setup.js +97 -29
  206. package/dist/lib/setup.js.map +1 -1
  207. package/dist/lib/setupItem.d.ts +99 -0
  208. package/dist/lib/setupItem.d.ts.map +1 -0
  209. package/dist/lib/setupItem.js +262 -0
  210. package/dist/lib/setupItem.js.map +1 -0
  211. package/dist/lib/setupWizard.d.ts +53 -0
  212. package/dist/lib/setupWizard.d.ts.map +1 -0
  213. package/dist/lib/setupWizard.js +347 -0
  214. package/dist/lib/setupWizard.js.map +1 -0
  215. package/dist/lib/snap.d.ts.map +1 -1
  216. package/dist/lib/snap.js +5 -0
  217. package/dist/lib/snap.js.map +1 -1
  218. package/dist/lib/speakers.d.ts +41 -0
  219. package/dist/lib/speakers.d.ts.map +1 -0
  220. package/dist/lib/speakers.js +78 -0
  221. package/dist/lib/speakers.js.map +1 -0
  222. package/dist/lib/status.d.ts.map +1 -1
  223. package/dist/lib/status.js +21 -0
  224. package/dist/lib/status.js.map +1 -1
  225. package/dist/lib/stdin.d.ts +5 -0
  226. package/dist/lib/stdin.d.ts.map +1 -0
  227. package/dist/lib/stdin.js +12 -0
  228. package/dist/lib/stdin.js.map +1 -0
  229. package/dist/lib/transcribeNative.d.ts +4 -9
  230. package/dist/lib/transcribeNative.d.ts.map +1 -1
  231. package/dist/lib/transcribeNative.js +11 -26
  232. package/dist/lib/transcribeNative.js.map +1 -1
  233. package/dist/lib/userConfig.d.ts +22 -0
  234. package/dist/lib/userConfig.d.ts.map +1 -0
  235. package/dist/lib/userConfig.js +67 -0
  236. package/dist/lib/userConfig.js.map +1 -0
  237. package/dist/lib/validate.d.ts +18 -0
  238. package/dist/lib/validate.d.ts.map +1 -1
  239. package/dist/lib/validate.js +71 -1
  240. package/dist/lib/validate.js.map +1 -1
  241. package/dist/lib/version.d.ts +30 -0
  242. package/dist/lib/version.d.ts.map +1 -0
  243. package/dist/lib/version.js +65 -0
  244. package/dist/lib/version.js.map +1 -0
  245. package/dist/llm/adapter.d.ts +5 -0
  246. package/dist/llm/adapter.d.ts.map +1 -1
  247. package/dist/llm/adapter.js +27 -8
  248. package/dist/llm/adapter.js.map +1 -1
  249. package/dist/llm/http.d.ts +22 -1
  250. package/dist/llm/http.d.ts.map +1 -1
  251. package/dist/llm/http.js +52 -30
  252. package/dist/llm/http.js.map +1 -1
  253. package/dist/llm/providers/anthropic.d.ts.map +1 -1
  254. package/dist/llm/providers/anthropic.js +6 -9
  255. package/dist/llm/providers/anthropic.js.map +1 -1
  256. package/dist/llm/providers/ollama.d.ts.map +1 -1
  257. package/dist/llm/providers/ollama.js +8 -7
  258. package/dist/llm/providers/ollama.js.map +1 -1
  259. package/dist/llm/providers/openai_compatible.d.ts.map +1 -1
  260. package/dist/llm/providers/openai_compatible.js +2 -7
  261. package/dist/llm/providers/openai_compatible.js.map +1 -1
  262. package/dist/logging.d.ts.map +1 -1
  263. package/dist/logging.js +3 -1
  264. package/dist/logging.js.map +1 -1
  265. package/dist/loops/embed_worker.d.ts +3 -0
  266. package/dist/loops/embed_worker.d.ts.map +1 -1
  267. package/dist/loops/embed_worker.js +11 -4
  268. package/dist/loops/embed_worker.js.map +1 -1
  269. package/dist/loops/ingest_watcher.d.ts.map +1 -1
  270. package/dist/loops/ingest_watcher.js +6 -3
  271. package/dist/loops/ingest_watcher.js.map +1 -1
  272. package/dist/loops/legacy_worker.d.ts +28 -1
  273. package/dist/loops/legacy_worker.d.ts.map +1 -1
  274. package/dist/loops/legacy_worker.js +91 -10
  275. package/dist/loops/legacy_worker.js.map +1 -1
  276. package/dist/loops/supervisor.d.ts +7 -0
  277. package/dist/loops/supervisor.d.ts.map +1 -1
  278. package/dist/loops/supervisor.js +17 -2
  279. package/dist/loops/supervisor.js.map +1 -1
  280. package/dist/loops/synthesis.d.ts.map +1 -1
  281. package/dist/loops/synthesis.js +15 -0
  282. package/dist/loops/synthesis.js.map +1 -1
  283. package/dist/loops/transcribe_worker.d.ts +3 -0
  284. package/dist/loops/transcribe_worker.d.ts.map +1 -1
  285. package/dist/loops/transcribe_worker.js +15 -7
  286. package/dist/loops/transcribe_worker.js.map +1 -1
  287. package/dist/output.d.ts +13 -1
  288. package/dist/output.d.ts.map +1 -1
  289. package/dist/output.js +27 -6
  290. package/dist/output.js.map +1 -1
  291. package/dist/render/glyphs.d.ts +30 -0
  292. package/dist/render/glyphs.d.ts.map +1 -0
  293. package/dist/render/glyphs.js +38 -0
  294. package/dist/render/glyphs.js.map +1 -0
  295. package/dist/render/human.d.ts +22 -0
  296. package/dist/render/human.d.ts.map +1 -0
  297. package/dist/render/human.js +62 -0
  298. package/dist/render/human.js.map +1 -0
  299. package/dist/router.d.ts.map +1 -1
  300. package/dist/router.js +32 -4
  301. package/dist/router.js.map +1 -1
  302. package/dist/transcriber_client.d.ts.map +1 -1
  303. package/dist/transcriber_client.js +2 -1
  304. package/dist/transcriber_client.js.map +1 -1
  305. package/package.json +12 -5
  306. package/templates/AGENTS.md +1 -1
  307. package/templates/config.toml +6 -1
  308. package/transcriber/app/diarization.py +36 -6
  309. package/transcriber/app/legacy_cli.py +90 -0
  310. package/transcriber/app/pipeline.py +13 -7
  311. package/transcriber/app/prosody.py +5 -0
  312. package/transcriber/app/transcribe_cli.py +15 -1
  313. 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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"}
@@ -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;AAGrC,OAAO,EAAE,KAAK,MAAM,EAAuD,MAAM,aAAa,CAAA;AAE9F,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;CACjB;AA8ED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;CACf;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,GAAG,eAAe,CA+B9F;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;CACf;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,eAAe,CA2BpF;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;CACf;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,GAAG,eAAe,CA4BtF;AAID,UAAU,cAAc;IACtB,EAAE,EAAE,MAAM,CAAA;IACV,aAAa,EAAE,MAAM,CAAA;CACtB;AAED;;;;;GAKG;AACH,eAAO,MAAM,YAAY,QAA2B,CAAA;AAEpD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,GAAG,EAAE,MAAM,GACV,CAAC,cAAc,GAAG;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,SAAS,CAOxD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GACnB;IACD,WAAW,EAAE,MAAM,CAAA;IACnB,gBAAgB,EAAE,MAAM,CAAA;IACxB,eAAe,EAAE,MAAM,CAAA;IACvB,gBAAgB,CAAC,EAAE,IAAI,CAAA;CACxB,CAmFA;AAED,gFAAgF;AAChF,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C"}
1
+ {"version":3,"file":"artifacts.d.ts","sourceRoot":"","sources":["../../src/lib/artifacts.ts"],"names":[],"mappings":"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"}