@tenphi/akno-core 0.12.0 → 0.13.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.
Files changed (302) hide show
  1. package/config/default.jsonc +12 -2
  2. package/dist/bench/graph.d.ts +2 -0
  3. package/dist/bench/graph.d.ts.map +1 -1
  4. package/dist/bench/graph.js +4 -0
  5. package/dist/bench/graph.js.map +1 -1
  6. package/dist/bench/language-corpus-v10.d.ts +4 -0
  7. package/dist/bench/language-corpus-v10.d.ts.map +1 -0
  8. package/dist/bench/language-corpus-v10.js +569 -0
  9. package/dist/bench/language-corpus-v10.js.map +1 -0
  10. package/dist/bench/language-corpus-v11.d.ts +4 -0
  11. package/dist/bench/language-corpus-v11.d.ts.map +1 -0
  12. package/dist/bench/language-corpus-v11.js +594 -0
  13. package/dist/bench/language-corpus-v11.js.map +1 -0
  14. package/dist/bench/language-corpus-v12.d.ts +4 -0
  15. package/dist/bench/language-corpus-v12.d.ts.map +1 -0
  16. package/dist/bench/language-corpus-v12.js +584 -0
  17. package/dist/bench/language-corpus-v12.js.map +1 -0
  18. package/dist/bench/language-corpus-v13.d.ts +4 -0
  19. package/dist/bench/language-corpus-v13.d.ts.map +1 -0
  20. package/dist/bench/language-corpus-v13.js +584 -0
  21. package/dist/bench/language-corpus-v13.js.map +1 -0
  22. package/dist/bench/language-corpus-v14.d.ts +4 -0
  23. package/dist/bench/language-corpus-v14.d.ts.map +1 -0
  24. package/dist/bench/language-corpus-v14.js +584 -0
  25. package/dist/bench/language-corpus-v14.js.map +1 -0
  26. package/dist/bench/language-corpus-v15.d.ts +4 -0
  27. package/dist/bench/language-corpus-v15.d.ts.map +1 -0
  28. package/dist/bench/language-corpus-v15.js +305 -0
  29. package/dist/bench/language-corpus-v15.js.map +1 -0
  30. package/dist/bench/language-corpus-v16.d.ts +4 -0
  31. package/dist/bench/language-corpus-v16.d.ts.map +1 -0
  32. package/dist/bench/language-corpus-v16.js +305 -0
  33. package/dist/bench/language-corpus-v16.js.map +1 -0
  34. package/dist/bench/language-corpus-v17.d.ts +4 -0
  35. package/dist/bench/language-corpus-v17.d.ts.map +1 -0
  36. package/dist/bench/language-corpus-v17.js +305 -0
  37. package/dist/bench/language-corpus-v17.js.map +1 -0
  38. package/dist/bench/language-corpus-v18.d.ts +4 -0
  39. package/dist/bench/language-corpus-v18.d.ts.map +1 -0
  40. package/dist/bench/language-corpus-v18.js +305 -0
  41. package/dist/bench/language-corpus-v18.js.map +1 -0
  42. package/dist/bench/language-corpus-v19.d.ts +4 -0
  43. package/dist/bench/language-corpus-v19.d.ts.map +1 -0
  44. package/dist/bench/language-corpus-v19.js +310 -0
  45. package/dist/bench/language-corpus-v19.js.map +1 -0
  46. package/dist/bench/language-corpus-v2.d.ts +12 -0
  47. package/dist/bench/language-corpus-v2.d.ts.map +1 -0
  48. package/dist/bench/language-corpus-v2.js +146 -0
  49. package/dist/bench/language-corpus-v2.js.map +1 -0
  50. package/dist/bench/language-corpus-v20.d.ts +4 -0
  51. package/dist/bench/language-corpus-v20.d.ts.map +1 -0
  52. package/dist/bench/language-corpus-v20.js +310 -0
  53. package/dist/bench/language-corpus-v20.js.map +1 -0
  54. package/dist/bench/language-corpus-v21.d.ts +4 -0
  55. package/dist/bench/language-corpus-v21.d.ts.map +1 -0
  56. package/dist/bench/language-corpus-v21.js +310 -0
  57. package/dist/bench/language-corpus-v21.js.map +1 -0
  58. package/dist/bench/language-corpus-v22.d.ts +4 -0
  59. package/dist/bench/language-corpus-v22.d.ts.map +1 -0
  60. package/dist/bench/language-corpus-v22.js +330 -0
  61. package/dist/bench/language-corpus-v22.js.map +1 -0
  62. package/dist/bench/language-corpus-v23.d.ts +4 -0
  63. package/dist/bench/language-corpus-v23.d.ts.map +1 -0
  64. package/dist/bench/language-corpus-v23.js +203 -0
  65. package/dist/bench/language-corpus-v23.js.map +1 -0
  66. package/dist/bench/language-corpus-v3.d.ts +4 -0
  67. package/dist/bench/language-corpus-v3.d.ts.map +1 -0
  68. package/dist/bench/language-corpus-v3.js +184 -0
  69. package/dist/bench/language-corpus-v3.js.map +1 -0
  70. package/dist/bench/language-corpus-v4.d.ts +4 -0
  71. package/dist/bench/language-corpus-v4.d.ts.map +1 -0
  72. package/dist/bench/language-corpus-v4.js +111 -0
  73. package/dist/bench/language-corpus-v4.js.map +1 -0
  74. package/dist/bench/language-corpus-v5.d.ts +4 -0
  75. package/dist/bench/language-corpus-v5.d.ts.map +1 -0
  76. package/dist/bench/language-corpus-v5.js +111 -0
  77. package/dist/bench/language-corpus-v5.js.map +1 -0
  78. package/dist/bench/language-corpus-v6.d.ts +4 -0
  79. package/dist/bench/language-corpus-v6.d.ts.map +1 -0
  80. package/dist/bench/language-corpus-v6.js +111 -0
  81. package/dist/bench/language-corpus-v6.js.map +1 -0
  82. package/dist/bench/language-corpus-v7.d.ts +4 -0
  83. package/dist/bench/language-corpus-v7.d.ts.map +1 -0
  84. package/dist/bench/language-corpus-v7.js +150 -0
  85. package/dist/bench/language-corpus-v7.js.map +1 -0
  86. package/dist/bench/language-corpus-v8.d.ts +4 -0
  87. package/dist/bench/language-corpus-v8.d.ts.map +1 -0
  88. package/dist/bench/language-corpus-v8.js +150 -0
  89. package/dist/bench/language-corpus-v8.js.map +1 -0
  90. package/dist/bench/language-corpus-v9.d.ts +4 -0
  91. package/dist/bench/language-corpus-v9.d.ts.map +1 -0
  92. package/dist/bench/language-corpus-v9.js +150 -0
  93. package/dist/bench/language-corpus-v9.js.map +1 -0
  94. package/dist/bench/language-corpus.d.ts +20 -0
  95. package/dist/bench/language-corpus.d.ts.map +1 -0
  96. package/dist/bench/language-corpus.js +205 -0
  97. package/dist/bench/language-corpus.js.map +1 -0
  98. package/dist/bench/language-review.d.ts +286 -0
  99. package/dist/bench/language-review.d.ts.map +1 -0
  100. package/dist/bench/language-review.js +605 -0
  101. package/dist/bench/language-review.js.map +1 -0
  102. package/dist/bench/language.d.ts +1221 -0
  103. package/dist/bench/language.d.ts.map +1 -0
  104. package/dist/bench/language.js +571 -0
  105. package/dist/bench/language.js.map +1 -0
  106. package/dist/config/load.js +5 -0
  107. package/dist/config/load.js.map +1 -1
  108. package/dist/config/schema.d.ts +3 -0
  109. package/dist/config/schema.d.ts.map +1 -1
  110. package/dist/config/schema.js +1 -0
  111. package/dist/config/schema.js.map +1 -1
  112. package/dist/index/derive.d.ts.map +1 -1
  113. package/dist/index/derive.js +14 -5
  114. package/dist/index/derive.js.map +1 -1
  115. package/dist/index/graph.d.ts.map +1 -1
  116. package/dist/index/graph.js +3 -0
  117. package/dist/index/graph.js.map +1 -1
  118. package/dist/index/indexer.d.ts.map +1 -1
  119. package/dist/index/indexer.js +6 -1
  120. package/dist/index/indexer.js.map +1 -1
  121. package/dist/ingest/extract.d.ts.map +1 -1
  122. package/dist/ingest/extract.js +3 -1
  123. package/dist/ingest/extract.js.map +1 -1
  124. package/dist/kb/line-facts.d.ts.map +1 -1
  125. package/dist/kb/line-facts.js +2 -0
  126. package/dist/kb/line-facts.js.map +1 -1
  127. package/dist/kb/managed-lines.d.ts.map +1 -1
  128. package/dist/kb/managed-lines.js +3 -2
  129. package/dist/kb/managed-lines.js.map +1 -1
  130. package/dist/kb/prose.d.ts +12 -0
  131. package/dist/kb/prose.d.ts.map +1 -0
  132. package/dist/kb/prose.js +323 -0
  133. package/dist/kb/prose.js.map +1 -0
  134. package/dist/maintenance/conflicts.d.ts +1 -1
  135. package/dist/maintenance/curate.d.ts +1 -0
  136. package/dist/maintenance/curate.d.ts.map +1 -1
  137. package/dist/maintenance/curate.js +28 -1
  138. package/dist/maintenance/curate.js.map +1 -1
  139. package/dist/maintenance/dream.d.ts.map +1 -1
  140. package/dist/maintenance/dream.js +6 -1
  141. package/dist/maintenance/dream.js.map +1 -1
  142. package/dist/maintenance/plans.d.ts.map +1 -1
  143. package/dist/maintenance/plans.js +2 -0
  144. package/dist/maintenance/plans.js.map +1 -1
  145. package/dist/maintenance/revision-language.d.ts +4 -0
  146. package/dist/maintenance/revision-language.d.ts.map +1 -0
  147. package/dist/maintenance/revision-language.js +50 -0
  148. package/dist/maintenance/revision-language.js.map +1 -0
  149. package/dist/memory/action-agency.d.ts +5 -0
  150. package/dist/memory/action-agency.d.ts.map +1 -0
  151. package/dist/memory/action-agency.js +76 -0
  152. package/dist/memory/action-agency.js.map +1 -0
  153. package/dist/memory/clause-ending.d.ts +4 -0
  154. package/dist/memory/clause-ending.d.ts.map +1 -0
  155. package/dist/memory/clause-ending.js +6 -0
  156. package/dist/memory/clause-ending.js.map +1 -0
  157. package/dist/memory/counterfactual-wording.d.ts +4 -0
  158. package/dist/memory/counterfactual-wording.d.ts.map +1 -0
  159. package/dist/memory/counterfactual-wording.js +101 -0
  160. package/dist/memory/counterfactual-wording.js.map +1 -0
  161. package/dist/memory/coverage-roles.d.ts +3 -0
  162. package/dist/memory/coverage-roles.d.ts.map +1 -0
  163. package/dist/memory/coverage-roles.js +28 -0
  164. package/dist/memory/coverage-roles.js.map +1 -0
  165. package/dist/memory/intent.d.ts +1 -0
  166. package/dist/memory/intent.d.ts.map +1 -1
  167. package/dist/memory/intent.js +88 -5
  168. package/dist/memory/intent.js.map +1 -1
  169. package/dist/memory/named-actor.d.ts +2 -0
  170. package/dist/memory/named-actor.d.ts.map +1 -0
  171. package/dist/memory/named-actor.js +9 -0
  172. package/dist/memory/named-actor.js.map +1 -0
  173. package/dist/memory/personal-negative-actions.d.ts +3 -0
  174. package/dist/memory/personal-negative-actions.d.ts.map +1 -0
  175. package/dist/memory/personal-negative-actions.js +67 -0
  176. package/dist/memory/personal-negative-actions.js.map +1 -0
  177. package/dist/memory/projection.d.ts.map +1 -1
  178. package/dist/memory/projection.js +10 -2
  179. package/dist/memory/projection.js.map +1 -1
  180. package/dist/memory/prose-projection.d.ts +6 -0
  181. package/dist/memory/prose-projection.d.ts.map +1 -0
  182. package/dist/memory/prose-projection.js +34 -0
  183. package/dist/memory/prose-projection.js.map +1 -0
  184. package/dist/memory/report-uncertainty.d.ts +3 -0
  185. package/dist/memory/report-uncertainty.d.ts.map +1 -0
  186. package/dist/memory/report-uncertainty.js +67 -0
  187. package/dist/memory/report-uncertainty.js.map +1 -0
  188. package/dist/memory/reporting-roles.d.ts +3 -0
  189. package/dist/memory/reporting-roles.d.ts.map +1 -0
  190. package/dist/memory/reporting-roles.js +39 -0
  191. package/dist/memory/reporting-roles.js.map +1 -0
  192. package/dist/memory/retention-source-frame.d.ts +8 -0
  193. package/dist/memory/retention-source-frame.d.ts.map +1 -0
  194. package/dist/memory/retention-source-frame.js +72 -0
  195. package/dist/memory/retention-source-frame.js.map +1 -0
  196. package/dist/models/client.d.ts +12 -3
  197. package/dist/models/client.d.ts.map +1 -1
  198. package/dist/models/client.js +142 -6
  199. package/dist/models/client.js.map +1 -1
  200. package/dist/models/language-audit.d.ts +78 -0
  201. package/dist/models/language-audit.d.ts.map +1 -0
  202. package/dist/models/language-audit.js +139 -0
  203. package/dist/models/language-audit.js.map +1 -0
  204. package/dist/models/language.d.ts +12 -0
  205. package/dist/models/language.d.ts.map +1 -0
  206. package/dist/models/language.js +106 -0
  207. package/dist/models/language.js.map +1 -0
  208. package/dist/models/semantic-verdict.d.ts +53 -0
  209. package/dist/models/semantic-verdict.d.ts.map +1 -0
  210. package/dist/models/semantic-verdict.js +190 -0
  211. package/dist/models/semantic-verdict.js.map +1 -0
  212. package/dist/ops/answer-record-rendering.d.ts +73 -0
  213. package/dist/ops/answer-record-rendering.d.ts.map +1 -0
  214. package/dist/ops/answer-record-rendering.js +149 -0
  215. package/dist/ops/answer-record-rendering.js.map +1 -0
  216. package/dist/ops/answer-source-audit.d.ts +354 -0
  217. package/dist/ops/answer-source-audit.d.ts.map +1 -0
  218. package/dist/ops/answer-source-audit.js +328 -0
  219. package/dist/ops/answer-source-audit.js.map +1 -0
  220. package/dist/ops/answer.d.ts +2 -2
  221. package/dist/ops/answer.d.ts.map +1 -1
  222. package/dist/ops/answer.js +1032 -114
  223. package/dist/ops/answer.js.map +1 -1
  224. package/dist/ops/context.d.ts.map +1 -1
  225. package/dist/ops/context.js +7 -0
  226. package/dist/ops/context.js.map +1 -1
  227. package/dist/ops/graph.d.ts.map +1 -1
  228. package/dist/ops/graph.js +35 -4
  229. package/dist/ops/graph.js.map +1 -1
  230. package/dist/ops/read.d.ts.map +1 -1
  231. package/dist/ops/read.js +5 -2
  232. package/dist/ops/read.js.map +1 -1
  233. package/dist/ops/recall.d.ts.map +1 -1
  234. package/dist/ops/recall.js +10 -0
  235. package/dist/ops/recall.js.map +1 -1
  236. package/dist/ops/remember.d.ts +2 -1
  237. package/dist/ops/remember.d.ts.map +1 -1
  238. package/dist/ops/remember.js +48 -33
  239. package/dist/ops/remember.js.map +1 -1
  240. package/dist/ops/retain.d.ts +3 -1
  241. package/dist/ops/retain.d.ts.map +1 -1
  242. package/dist/ops/retain.js +56 -44
  243. package/dist/ops/retain.js.map +1 -1
  244. package/dist/recall/assemble.d.ts +1 -0
  245. package/dist/recall/assemble.d.ts.map +1 -1
  246. package/dist/recall/assemble.js +19 -2
  247. package/dist/recall/assemble.js.map +1 -1
  248. package/dist/store/db.d.ts.map +1 -1
  249. package/dist/store/db.js +3 -1
  250. package/dist/store/db.js.map +1 -1
  251. package/dist/store/migrations.d.ts +2 -1
  252. package/dist/store/migrations.d.ts.map +1 -1
  253. package/dist/store/migrations.js +11 -1
  254. package/dist/store/migrations.js.map +1 -1
  255. package/dist/timeline/clock.d.ts.map +1 -1
  256. package/dist/timeline/clock.js +2 -0
  257. package/dist/timeline/clock.js.map +1 -1
  258. package/dist/timeline/eligibility.js +4 -4
  259. package/dist/timeline/eligibility.js.map +1 -1
  260. package/dist/timeline/source-clock.d.ts +5 -0
  261. package/dist/timeline/source-clock.d.ts.map +1 -0
  262. package/dist/timeline/source-clock.js +179 -0
  263. package/dist/timeline/source-clock.js.map +1 -0
  264. package/dist/write/fictional-case-identity.d.ts +10 -0
  265. package/dist/write/fictional-case-identity.d.ts.map +1 -0
  266. package/dist/write/fictional-case-identity.js +84 -0
  267. package/dist/write/fictional-case-identity.js.map +1 -0
  268. package/dist/write/managed-memory.js +1 -1
  269. package/dist/write/managed-memory.js.map +1 -1
  270. package/dist/write/retain-clock-repair.d.ts +48 -0
  271. package/dist/write/retain-clock-repair.d.ts.map +1 -0
  272. package/dist/write/retain-clock-repair.js +175 -0
  273. package/dist/write/retain-clock-repair.js.map +1 -0
  274. package/dist/write/retain.d.ts +21 -10
  275. package/dist/write/retain.d.ts.map +1 -1
  276. package/dist/write/retain.js +1220 -70
  277. package/dist/write/retain.js.map +1 -1
  278. package/dist/write/retained-relations.d.ts +7 -0
  279. package/dist/write/retained-relations.d.ts.map +1 -0
  280. package/dist/write/retained-relations.js +38 -0
  281. package/dist/write/retained-relations.js.map +1 -0
  282. package/dist/write/retained-spans.d.ts +5 -0
  283. package/dist/write/retained-spans.d.ts.map +1 -0
  284. package/dist/write/retained-spans.js +30 -0
  285. package/dist/write/retained-spans.js.map +1 -0
  286. package/dist/write/retained-time.d.ts +4 -0
  287. package/dist/write/retained-time.d.ts.map +1 -0
  288. package/dist/write/retained-time.js +10 -0
  289. package/dist/write/retained-time.js.map +1 -0
  290. package/dist/write/retention-frame-audit.d.ts +25 -0
  291. package/dist/write/retention-frame-audit.d.ts.map +1 -0
  292. package/dist/write/retention-frame-audit.js +43 -0
  293. package/dist/write/retention-frame-audit.js.map +1 -0
  294. package/dist/write/retention-negative-evidence.d.ts +222 -0
  295. package/dist/write/retention-negative-evidence.d.ts.map +1 -0
  296. package/dist/write/retention-negative-evidence.js +122 -0
  297. package/dist/write/retention-negative-evidence.js.map +1 -0
  298. package/dist/write/retention-report-limits.d.ts +65 -0
  299. package/dist/write/retention-report-limits.d.ts.map +1 -0
  300. package/dist/write/retention-report-limits.js +71 -0
  301. package/dist/write/retention-report-limits.js.map +1 -0
  302. package/package.json +3 -2
@@ -0,0 +1,222 @@
1
+ import { z } from 'zod';
2
+ import type { RetainCandidate } from './retain.ts';
3
+ /** Negative decisions must name immutable bytes, never the verifier's own comparison paraphrase. */
4
+ export declare function retentionNegativeEvidence(candidate: RetainCandidate, hasRepairObligation: boolean): {
5
+ fields: {
6
+ mismatches: z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
7
+ kind: z.ZodEnum<{
8
+ unsupported_content: "unsupported_content";
9
+ }>;
10
+ source: z.ZodNull;
11
+ candidate: z.ZodUnion<readonly [z.ZodObject<{
12
+ kind: z.ZodEnum<{
13
+ text: "text";
14
+ }>;
15
+ exact_excerpt: z.ZodString;
16
+ }, z.core.$strict>, z.ZodObject<{
17
+ kind: z.ZodEnum<{
18
+ metadata: "metadata";
19
+ }>;
20
+ metadata_id: z.ZodEnum<{
21
+ [x: string]: string;
22
+ }>;
23
+ }, z.core.$strict>]>;
24
+ dimension: z.ZodEnum<{
25
+ proposition_supported: "proposition_supported";
26
+ action_arguments_preserved: "action_arguments_preserved";
27
+ qualification_scope_preserved: "qualification_scope_preserved";
28
+ }>;
29
+ detail: z.ZodString;
30
+ }, z.core.$strict>, z.ZodObject<{
31
+ kind: z.ZodEnum<{
32
+ omitted_scope: "omitted_scope";
33
+ }>;
34
+ source: z.ZodObject<{
35
+ frame_id: z.ZodEnum<{
36
+ [x: string]: string;
37
+ }>;
38
+ exact_excerpt: z.ZodString;
39
+ }, z.core.$strict>;
40
+ candidate: z.ZodNull;
41
+ dimension: z.ZodEnum<{
42
+ proposition_supported: "proposition_supported";
43
+ action_arguments_preserved: "action_arguments_preserved";
44
+ qualification_scope_preserved: "qualification_scope_preserved";
45
+ }>;
46
+ detail: z.ZodString;
47
+ }, z.core.$strict>, z.ZodObject<{
48
+ kind: z.ZodEnum<{
49
+ changed_value: "changed_value";
50
+ changed_action_or_role: "changed_action_or_role";
51
+ changed_qualification: "changed_qualification";
52
+ changed_repair_proposition: "changed_repair_proposition";
53
+ }>;
54
+ source: z.ZodObject<{
55
+ frame_id: z.ZodEnum<{
56
+ [x: string]: string;
57
+ }>;
58
+ exact_excerpt: z.ZodString;
59
+ }, z.core.$strict>;
60
+ candidate: z.ZodUnion<readonly [z.ZodObject<{
61
+ kind: z.ZodEnum<{
62
+ text: "text";
63
+ }>;
64
+ exact_excerpt: z.ZodString;
65
+ }, z.core.$strict>, z.ZodObject<{
66
+ kind: z.ZodEnum<{
67
+ metadata: "metadata";
68
+ }>;
69
+ metadata_id: z.ZodEnum<{
70
+ [x: string]: string;
71
+ }>;
72
+ }, z.core.$strict>]>;
73
+ dimension: z.ZodEnum<{
74
+ proposition_supported: "proposition_supported";
75
+ action_arguments_preserved: "action_arguments_preserved";
76
+ qualification_scope_preserved: "qualification_scope_preserved";
77
+ }>;
78
+ detail: z.ZodString;
79
+ }, z.core.$strict>]>>;
80
+ polarity_evidence: z.ZodNullable<z.ZodObject<{
81
+ source: z.ZodObject<{
82
+ frame_id: z.ZodEnum<{
83
+ [x: string]: string;
84
+ }>;
85
+ exact_excerpt: z.ZodString;
86
+ }, z.core.$strict>;
87
+ candidate_metadata_id: z.ZodEnum<{
88
+ polarity: "polarity";
89
+ }>;
90
+ }, z.core.$strict>>;
91
+ };
92
+ coordinates: {
93
+ frames: {
94
+ frame_id: string;
95
+ discourse_frame_index: number;
96
+ }[];
97
+ metadata: {
98
+ metadata_id: string;
99
+ value: string | {
100
+ type: "corrects" | "supersedes" | "contradicts" | "fulfills" | "answers" | "caused_by";
101
+ target: {
102
+ candidate_id: string;
103
+ } | {
104
+ memory_id: string;
105
+ } | {
106
+ fact_id: string;
107
+ };
108
+ support: {
109
+ quote: string;
110
+ item_id?: string | undefined;
111
+ }[];
112
+ }[] | {
113
+ precision: "unknown" | "instant" | "day" | "month" | "year";
114
+ relation: "occurred" | "valid" | "scheduled" | "due";
115
+ status: "tentative" | "scheduled" | "actual" | "planned";
116
+ start?: string | undefined;
117
+ until?: string | undefined;
118
+ timezone?: string | undefined;
119
+ mentioned_at?: string | undefined;
120
+ recurrence?: {
121
+ frequency: "daily" | "weekly" | "monthly" | "yearly";
122
+ interval?: number | undefined;
123
+ weekdays?: ("mo" | "tu" | "we" | "th" | "fr" | "sa" | "su")[] | undefined;
124
+ until?: string | undefined;
125
+ } | undefined;
126
+ } | {
127
+ speaker: string;
128
+ role?: "unknown" | "external" | "user" | "assistant" | undefined;
129
+ }[] | null | undefined;
130
+ }[];
131
+ };
132
+ consistent(verdict: {
133
+ source_selected_polarity: string;
134
+ mismatches: z.infer<z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
135
+ kind: z.ZodEnum<{
136
+ unsupported_content: "unsupported_content";
137
+ }>;
138
+ source: z.ZodNull;
139
+ candidate: z.ZodUnion<readonly [z.ZodObject<{
140
+ kind: z.ZodEnum<{
141
+ text: "text";
142
+ }>;
143
+ exact_excerpt: z.ZodString;
144
+ }, z.core.$strict>, z.ZodObject<{
145
+ kind: z.ZodEnum<{
146
+ metadata: "metadata";
147
+ }>;
148
+ metadata_id: z.ZodEnum<{
149
+ [x: string]: string;
150
+ }>;
151
+ }, z.core.$strict>]>;
152
+ dimension: z.ZodEnum<{
153
+ proposition_supported: "proposition_supported";
154
+ action_arguments_preserved: "action_arguments_preserved";
155
+ qualification_scope_preserved: "qualification_scope_preserved";
156
+ }>;
157
+ detail: z.ZodString;
158
+ }, z.core.$strict>, z.ZodObject<{
159
+ kind: z.ZodEnum<{
160
+ omitted_scope: "omitted_scope";
161
+ }>;
162
+ source: z.ZodObject<{
163
+ frame_id: z.ZodEnum<{
164
+ [x: string]: string;
165
+ }>;
166
+ exact_excerpt: z.ZodString;
167
+ }, z.core.$strict>;
168
+ candidate: z.ZodNull;
169
+ dimension: z.ZodEnum<{
170
+ proposition_supported: "proposition_supported";
171
+ action_arguments_preserved: "action_arguments_preserved";
172
+ qualification_scope_preserved: "qualification_scope_preserved";
173
+ }>;
174
+ detail: z.ZodString;
175
+ }, z.core.$strict>, z.ZodObject<{
176
+ kind: z.ZodEnum<{
177
+ changed_value: "changed_value";
178
+ changed_action_or_role: "changed_action_or_role";
179
+ changed_qualification: "changed_qualification";
180
+ changed_repair_proposition: "changed_repair_proposition";
181
+ }>;
182
+ source: z.ZodObject<{
183
+ frame_id: z.ZodEnum<{
184
+ [x: string]: string;
185
+ }>;
186
+ exact_excerpt: z.ZodString;
187
+ }, z.core.$strict>;
188
+ candidate: z.ZodUnion<readonly [z.ZodObject<{
189
+ kind: z.ZodEnum<{
190
+ text: "text";
191
+ }>;
192
+ exact_excerpt: z.ZodString;
193
+ }, z.core.$strict>, z.ZodObject<{
194
+ kind: z.ZodEnum<{
195
+ metadata: "metadata";
196
+ }>;
197
+ metadata_id: z.ZodEnum<{
198
+ [x: string]: string;
199
+ }>;
200
+ }, z.core.$strict>]>;
201
+ dimension: z.ZodEnum<{
202
+ proposition_supported: "proposition_supported";
203
+ action_arguments_preserved: "action_arguments_preserved";
204
+ qualification_scope_preserved: "qualification_scope_preserved";
205
+ }>;
206
+ detail: z.ZodString;
207
+ }, z.core.$strict>]>>>;
208
+ polarity_evidence: z.infer<z.ZodNullable<z.ZodObject<{
209
+ source: z.ZodObject<{
210
+ frame_id: z.ZodEnum<{
211
+ [x: string]: string;
212
+ }>;
213
+ exact_excerpt: z.ZodString;
214
+ }, z.core.$strict>;
215
+ candidate_metadata_id: z.ZodEnum<{
216
+ polarity: "polarity";
217
+ }>;
218
+ }, z.core.$strict>>>;
219
+ }): boolean;
220
+ };
221
+ export declare const RETENTION_NEGATIVE_EVIDENCE_CONTRACT = "Each negative retention finding requires immutable evidence.\nnegative_evidence_coordinates maps candidate-local F IDs to discourse_frame indices and closed metadata IDs\n to submitted values. Reuse these exact IDs; all related candidates and comparison/audit notes are not\nthis candidate's evidence. Absent or empty metadata is not added content and has no witness ID; use\nomitted_scope with candidate:null for missing material. changed_repair_proposition is available only\nfor this candidate's actual original repair obligation. Source excerpts must be nonempty exact substrings of the named owned frame.\nCandidate text witnesses must be nonempty exact substrings of candidate.text. Every source or candidate\nexcerpt must contain a Unicode letter or number; punctuation alone witnesses no content. A metadata witness uses\n{kind:metadata, metadata_id} to point to that exact immutable catalog value; never paraphrase its value.\nFor unsupported_content use source:null and the alleged added candidate text/metadata witness. For\nomitted_scope use the required source excerpt and candidate:null; absence cannot be quoted. Every changed_*\nfinding needs both source and current candidate witnesses. changed_repair_proposition requires original\nSOURCE evidence, never the repair-original draft as authority. Keep each excerpt and explanation within\n80 UTF-16 units, with no transfer between budgets. The previous 240-unit detail allowance is partitioned.\nFor source_selected_polarity equal to immutable candidate.polarity, return polarity_evidence:null. For a\ndisagreement, give polarity_evidence with the exact governing source predicate and candidate_metadata_id\npolarity. This is independent of the three semantic booleans and never authorizes relabeling. A false\nsemantic dimension still requires exactly one mismatch; valid negatives remain final. An invented,\nforeign, missing or inconsistent witness invalidates the entire response; it cannot be dropped to accept.\nA word occurring only in your candidate_meaning or other audit prose is not in candidate.text. Inspect\nimmutable candidate bytes before claiming an addition. All-positive equal-polarity verdicts need empty\nmismatches and null polarity_evidence; no extra positive evidence record is required.";
222
+ //# sourceMappingURL=retention-negative-evidence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retention-negative-evidence.d.ts","sourceRoot":"","sources":["../../src/write/retention-negative-evidence.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAanD,oGAAoG;AACpG,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,eAAe,EAAE,mBAAmB,EAAE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBAoBhC,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBAuDhD;QAClB,wBAAwB,EAAE,MAAM,CAAC;QACjC,UAAU,EAAE,CAAC,CAAC,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8BAAmB,CAAC;QACvC,iBAAiB,EAAE,CAAC,CAAC,KAAK;;;;;;;;;;4BAA0B,CAAC;KACtD,GAAG,OAAO;EAoBd;AAED,eAAO,MAAM,oCAAoC,0uEAqBqC,CAAC"}
@@ -0,0 +1,122 @@
1
+ import { z } from 'zod';
2
+ import { semanticVerdictFields } from "../models/semantic-verdict.js";
3
+ // Punctuation can be exact while witnessing none of the alleged semantic content.
4
+ const hasContent = /[\p{L}\p{N}]/u;
5
+ // Providers disagree on Unicode-property regex in JSON Schema; enforce the full multilingual
6
+ // requirement in local parsing without exporting an incompatible wire pattern.
7
+ const exactText = z
8
+ .string()
9
+ .min(1)
10
+ .max(80)
11
+ .refine((value) => hasContent.test(value));
12
+ /** Negative decisions must name immutable bytes, never the verifier's own comparison paraphrase. */
13
+ export function retentionNegativeEvidence(candidate, hasRepairObligation) {
14
+ // Only existing semantic inputs may support a metadata finding. IDs resolve to immutable values;
15
+ // model-authored paraphrases, page routing and verifier summaries have no catalog entries.
16
+ const metadata = [
17
+ ['kind', candidate.kind],
18
+ ['subject', candidate.subject],
19
+ ['polarity', candidate.polarity],
20
+ ['discourse.commitment', candidate.discourse.commitment],
21
+ ['discourse.disposition', candidate.discourse.disposition],
22
+ ['epistemic.basis', candidate.epistemic.basis],
23
+ ['attribution.source_role', candidate.attribution.source_role],
24
+ ['attribution.source_speaker', candidate.attribution.source_speaker ?? null],
25
+ ['attribution.chain', candidate.attribution.chain ?? []],
26
+ ['time', candidate.time ?? null],
27
+ ['relations', candidate.relations ?? []],
28
+ ]
29
+ .filter(([, value]) => value !== null && value !== undefined && value !== '' && (!Array.isArray(value) || value.length > 0))
30
+ .map(([metadata_id, value]) => ({ metadata_id: metadata_id, value }));
31
+ const frames = candidate.discourse_frame.map((span, index) => ({
32
+ frame_id: `F${index + 1}`,
33
+ quote: span.quote,
34
+ }));
35
+ const source = z.strictObject({
36
+ frame_id: z.enum(frames.map(({ frame_id }) => frame_id)),
37
+ exact_excerpt: exactText,
38
+ });
39
+ const current = z.union([
40
+ z.strictObject({ kind: z.enum(['text']), exact_excerpt: exactText }),
41
+ z.strictObject({
42
+ kind: z.enum(['metadata']),
43
+ metadata_id: z.enum(metadata.map(({ metadata_id }) => metadata_id)),
44
+ }),
45
+ ]);
46
+ const common = {
47
+ dimension: semanticVerdictFields.mismatches.element.shape.dimension,
48
+ // Reallocate the former 240-unit detail: 80 source, 80 candidate, 80 explanation.
49
+ // An absent side or catalog pointer never donates its unused allowance to another field.
50
+ detail: z.string().trim().min(1).max(80),
51
+ };
52
+ const mismatches = z
53
+ .array(z.union([
54
+ z.strictObject({
55
+ ...common,
56
+ kind: z.enum(['unsupported_content']),
57
+ source: z.null(),
58
+ candidate: current,
59
+ }),
60
+ z.strictObject({ ...common, kind: z.enum(['omitted_scope']), source, candidate: z.null() }),
61
+ z.strictObject({
62
+ ...common,
63
+ kind: z.enum([
64
+ 'changed_value',
65
+ 'changed_action_or_role',
66
+ 'changed_qualification',
67
+ ...(hasRepairObligation ? ['changed_repair_proposition'] : []),
68
+ ]),
69
+ source,
70
+ candidate: current,
71
+ }),
72
+ ]))
73
+ .max(3);
74
+ const polarity_evidence = z
75
+ .strictObject({ source, candidate_metadata_id: z.enum(['polarity']) })
76
+ .nullable();
77
+ return {
78
+ fields: { mismatches, polarity_evidence },
79
+ coordinates: {
80
+ frames: frames.map(({ frame_id }, index) => ({ frame_id, discourse_frame_index: index })),
81
+ metadata,
82
+ },
83
+ consistent(verdict) {
84
+ const sourcePresent = (witness) => hasContent.test(witness.exact_excerpt) &&
85
+ frames.some(({ frame_id, quote }) => frame_id === witness.frame_id && quote.includes(witness.exact_excerpt));
86
+ for (const mismatch of verdict.mismatches) {
87
+ if (mismatch.source && !sourcePresent(mismatch.source))
88
+ return false;
89
+ if (mismatch.candidate?.kind === 'text' &&
90
+ (!hasContent.test(mismatch.candidate.exact_excerpt) ||
91
+ !candidate.text.includes(mismatch.candidate.exact_excerpt)))
92
+ return false;
93
+ }
94
+ return verdict.source_selected_polarity === candidate.polarity
95
+ ? verdict.polarity_evidence === null
96
+ : verdict.polarity_evidence !== null && sourcePresent(verdict.polarity_evidence.source);
97
+ },
98
+ };
99
+ }
100
+ export const RETENTION_NEGATIVE_EVIDENCE_CONTRACT = `Each negative retention finding requires immutable evidence.
101
+ negative_evidence_coordinates maps candidate-local F IDs to discourse_frame indices and closed metadata IDs
102
+ to submitted values. Reuse these exact IDs; all related candidates and comparison/audit notes are not
103
+ this candidate's evidence. Absent or empty metadata is not added content and has no witness ID; use
104
+ omitted_scope with candidate:null for missing material. changed_repair_proposition is available only
105
+ for this candidate's actual original repair obligation. Source excerpts must be nonempty exact substrings of the named owned frame.
106
+ Candidate text witnesses must be nonempty exact substrings of candidate.text. Every source or candidate
107
+ excerpt must contain a Unicode letter or number; punctuation alone witnesses no content. A metadata witness uses
108
+ {kind:metadata, metadata_id} to point to that exact immutable catalog value; never paraphrase its value.
109
+ For unsupported_content use source:null and the alleged added candidate text/metadata witness. For
110
+ omitted_scope use the required source excerpt and candidate:null; absence cannot be quoted. Every changed_*
111
+ finding needs both source and current candidate witnesses. changed_repair_proposition requires original
112
+ SOURCE evidence, never the repair-original draft as authority. Keep each excerpt and explanation within
113
+ 80 UTF-16 units, with no transfer between budgets. The previous 240-unit detail allowance is partitioned.
114
+ For source_selected_polarity equal to immutable candidate.polarity, return polarity_evidence:null. For a
115
+ disagreement, give polarity_evidence with the exact governing source predicate and candidate_metadata_id
116
+ polarity. This is independent of the three semantic booleans and never authorizes relabeling. A false
117
+ semantic dimension still requires exactly one mismatch; valid negatives remain final. An invented,
118
+ foreign, missing or inconsistent witness invalidates the entire response; it cannot be dropped to accept.
119
+ A word occurring only in your candidate_meaning or other audit prose is not in candidate.text. Inspect
120
+ immutable candidate bytes before claiming an addition. All-positive equal-polarity verdicts need empty
121
+ mismatches and null polarity_evidence; no extra positive evidence record is required.`;
122
+ //# sourceMappingURL=retention-negative-evidence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retention-negative-evidence.js","sourceRoot":"","sources":["../../src/write/retention-negative-evidence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ import { z } from 'zod';
2
+ import type { RetainCandidate } from './retain.ts';
3
+ /** A missing lexical match asks for source comparison, not a rewrite of possibly faithful prose. */
4
+ export declare function retentionReportLimits(candidate: Pick<RetainCandidate, 'text' | 'discourse_frame'>): {
5
+ schema: z.ZodUnion<readonly [z.ZodObject<{
6
+ relation: z.ZodEnum<{
7
+ preserved: "preserved";
8
+ }>;
9
+ source: z.ZodObject<{
10
+ frame_id: z.ZodEnum<{
11
+ [x: string]: string;
12
+ }>;
13
+ exact_excerpt: z.ZodString;
14
+ }, z.core.$strict>;
15
+ candidate: z.ZodObject<{
16
+ exact_excerpt: z.ZodString;
17
+ }, z.core.$strict>;
18
+ }, z.core.$strict>, z.ZodObject<{
19
+ relation: z.ZodEnum<{
20
+ omitted: "omitted";
21
+ }>;
22
+ source: z.ZodObject<{
23
+ frame_id: z.ZodEnum<{
24
+ [x: string]: string;
25
+ }>;
26
+ exact_excerpt: z.ZodString;
27
+ }, z.core.$strict>;
28
+ candidate: z.ZodNull;
29
+ }, z.core.$strict>, z.ZodObject<{
30
+ relation: z.ZodEnum<{
31
+ changed: "changed";
32
+ }>;
33
+ source: z.ZodObject<{
34
+ frame_id: z.ZodEnum<{
35
+ [x: string]: string;
36
+ }>;
37
+ exact_excerpt: z.ZodString;
38
+ }, z.core.$strict>;
39
+ candidate: z.ZodObject<{
40
+ exact_excerpt: z.ZodString;
41
+ }, z.core.$strict>;
42
+ }, z.core.$strict>]>;
43
+ coordinates: {
44
+ kind: string;
45
+ frame_ids: string[];
46
+ };
47
+ consistent(value: unknown, verdict: {
48
+ qualification_scope_preserved: boolean;
49
+ mismatches: readonly {
50
+ dimension: string;
51
+ kind: string;
52
+ source: {
53
+ frame_id: string;
54
+ exact_excerpt: string;
55
+ } | null;
56
+ candidate: {
57
+ kind: string;
58
+ exact_excerpt?: string;
59
+ } | null;
60
+ }[];
61
+ }): boolean;
62
+ preserved(value: unknown): boolean;
63
+ };
64
+ export declare const RETENTION_REPORT_LIMITS_CONTRACT = "A report_limit_concern means a finite wording recognizer\ncould not establish whether the current readable record preserves the source's personal epistemic limits.\nIt is uncertainty to resolve from the complete source, not evidence that the candidate is wrong and not\npermission to rewrite it. Only that candidate requires report_limit_alignment. Source frame IDs reuse its\nown negative_evidence_coordinates; related candidates and your audit summaries are never evidence.\n\nCompare EVERY material limit on reading, receiving evidence, confirmation and personal verification,\nincluding its actor, predicate, object and attachment. A generic report label or one preserved limit cannot\nreplace another. For preserved, point to contentful exact excerpts in an owned source frame and current\ncandidate.text expressing the corresponding limit, each within 80 UTF-16 units. All remaining limits still\nrequire full-source comparison. Exact occurrence alone does not establish semantic correspondence.\nFor omitted, give the source witness and candidate:null. For changed, give both witnesses. These negative\nbranches require qualification_scope_preserved:false and an omitted_scope or changed_qualification mismatch\nrespectively, with the identical source witness and current text witness (or null). Other negative semantic\ndimensions retain their separate required mismatches. A preserved alignment does not override any other\nnegative verdict, unsupported attribution, polarity, relation or temporal scope. Do not repair or retry.";
65
+ //# sourceMappingURL=retention-report-limits.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retention-report-limits.d.ts","sourceRoot":"","sources":["../../src/write/retention-report-limits.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAQnD,oGAAoG;AACpG,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,GAAG,iBAAiB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBAmBrF,OAAO,WACL;QACP,6BAA6B,EAAE,OAAO,CAAC;QACvC,UAAU,EAAE,SAAS;YACnB,SAAS,EAAE,MAAM,CAAC;YAClB,IAAI,EAAE,MAAM,CAAC;YACb,MAAM,EAAE;gBAAE,QAAQ,EAAE,MAAM,CAAC;gBAAC,aAAa,EAAE,MAAM,CAAA;aAAE,GAAG,IAAI,CAAC;YAC3D,SAAS,EAAE;gBAAE,IAAI,EAAE,MAAM,CAAC;gBAAC,aAAa,CAAC,EAAE,MAAM,CAAA;aAAE,GAAG,IAAI,CAAC;SAC5D,EAAE,CAAC;KACL,GACA,OAAO;qBA8BO,OAAO,GAAG,OAAO;EAKrC;AAED,eAAO,MAAM,gCAAgC,sgDAe4D,CAAC"}
@@ -0,0 +1,71 @@
1
+ import { z } from 'zod';
2
+ const excerpt = z
3
+ .string()
4
+ .min(1)
5
+ .max(80)
6
+ .refine((text) => /[\p{L}\p{N}]/u.test(text));
7
+ /** A missing lexical match asks for source comparison, not a rewrite of possibly faithful prose. */
8
+ export function retentionReportLimits(candidate) {
9
+ const frames = candidate.discourse_frame.map((span, index) => ({
10
+ frame_id: `F${index + 1}`,
11
+ quote: span.quote,
12
+ }));
13
+ const source = z.strictObject({
14
+ frame_id: z.enum(frames.map((frame) => frame.frame_id)),
15
+ exact_excerpt: excerpt,
16
+ });
17
+ const current = z.strictObject({ exact_excerpt: excerpt });
18
+ const schema = z.union([
19
+ z.strictObject({ relation: z.enum(['preserved']), source, candidate: current }),
20
+ z.strictObject({ relation: z.enum(['omitted']), source, candidate: z.null() }),
21
+ z.strictObject({ relation: z.enum(['changed']), source, candidate: current }),
22
+ ]);
23
+ return {
24
+ schema,
25
+ coordinates: { kind: 'readable_report_uncertainty', frame_ids: frames.map((frame) => frame.frame_id) },
26
+ consistent(value, verdict) {
27
+ const parsed = schema.safeParse(value);
28
+ if (!parsed.success)
29
+ return false;
30
+ const alignment = parsed.data;
31
+ if (!frames.some((frame) => frame.frame_id === alignment.source.frame_id &&
32
+ frame.quote.includes(alignment.source.exact_excerpt)))
33
+ return false;
34
+ if (alignment.candidate && !candidate.text.includes(alignment.candidate.exact_excerpt))
35
+ return false;
36
+ if (alignment.relation === 'preserved')
37
+ return true;
38
+ const mismatchKind = alignment.relation === 'omitted' ? 'omitted_scope' : 'changed_qualification';
39
+ return (!verdict.qualification_scope_preserved &&
40
+ verdict.mismatches.some((mismatch) => mismatch.dimension === 'qualification_scope_preserved' &&
41
+ mismatch.kind === mismatchKind &&
42
+ mismatch.source?.frame_id === alignment.source.frame_id &&
43
+ mismatch.source.exact_excerpt === alignment.source.exact_excerpt &&
44
+ (alignment.candidate === null
45
+ ? mismatch.candidate === null
46
+ : mismatch.candidate?.kind === 'text' &&
47
+ mismatch.candidate.exact_excerpt === alignment.candidate.exact_excerpt)));
48
+ },
49
+ preserved(value) {
50
+ const parsed = schema.safeParse(value);
51
+ return parsed.success && parsed.data.relation === 'preserved';
52
+ },
53
+ };
54
+ }
55
+ export const RETENTION_REPORT_LIMITS_CONTRACT = `A report_limit_concern means a finite wording recognizer
56
+ could not establish whether the current readable record preserves the source's personal epistemic limits.
57
+ It is uncertainty to resolve from the complete source, not evidence that the candidate is wrong and not
58
+ permission to rewrite it. Only that candidate requires report_limit_alignment. Source frame IDs reuse its
59
+ own negative_evidence_coordinates; related candidates and your audit summaries are never evidence.
60
+
61
+ Compare EVERY material limit on reading, receiving evidence, confirmation and personal verification,
62
+ including its actor, predicate, object and attachment. A generic report label or one preserved limit cannot
63
+ replace another. For preserved, point to contentful exact excerpts in an owned source frame and current
64
+ candidate.text expressing the corresponding limit, each within 80 UTF-16 units. All remaining limits still
65
+ require full-source comparison. Exact occurrence alone does not establish semantic correspondence.
66
+ For omitted, give the source witness and candidate:null. For changed, give both witnesses. These negative
67
+ branches require qualification_scope_preserved:false and an omitted_scope or changed_qualification mismatch
68
+ respectively, with the identical source witness and current text witness (or null). Other negative semantic
69
+ dimensions retain their separate required mismatches. A preserved alignment does not override any other
70
+ negative verdict, unsupported attribution, polarity, relation or temporal scope. Do not repair or retry.`;
71
+ //# sourceMappingURL=retention-report-limits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retention-report-limits.js","sourceRoot":"","sources":["../../src/write/retention-report-limits.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tenphi/akno-core",
3
- "version": "0.12.0",
3
+ "version": "0.13.1",
4
4
  "description": "Akno — the memory layer itself: index, ops, watcher, models",
5
5
  "license": "PolyForm-Noncommercial-1.0.0",
6
6
  "type": "module",
@@ -19,10 +19,11 @@
19
19
  ],
20
20
  "dependencies": {
21
21
  "better-sqlite3": "^12.4.1",
22
+ "mdast-util-from-markdown": "2.0.3",
22
23
  "sqlite-vec": "^0.1.9",
23
24
  "yaml": "^2.9.0",
24
25
  "zod": "^4.4.3",
25
- "@tenphi/akno-protocol": "0.12.0"
26
+ "@tenphi/akno-protocol": "0.13.1"
26
27
  },
27
28
  "devDependencies": {
28
29
  "@types/better-sqlite3": "^7.6.12"