@paraharness/sqlite 0.0.0-stage → 0.2.0

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 (215) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +64 -2
  3. package/dist/builders/compaction-config-builder.d.ts +66 -0
  4. package/dist/builders/compaction-config-builder.d.ts.map +1 -0
  5. package/dist/builders/compaction-config-builder.js +2 -0
  6. package/dist/builders/compaction-config-builder.js.map +1 -0
  7. package/dist/builders/create-compaction-config-builder.d.ts +14 -0
  8. package/dist/builders/create-compaction-config-builder.d.ts.map +1 -0
  9. package/dist/builders/create-compaction-config-builder.js +66 -0
  10. package/dist/builders/create-compaction-config-builder.js.map +1 -0
  11. package/dist/builders/create-sqlite-global-rules-builder.d.ts +15 -0
  12. package/dist/builders/create-sqlite-global-rules-builder.d.ts.map +1 -0
  13. package/dist/builders/create-sqlite-global-rules-builder.js +30 -0
  14. package/dist/builders/create-sqlite-global-rules-builder.js.map +1 -0
  15. package/dist/builders/create-sqlite-ledger-builder.d.ts +15 -0
  16. package/dist/builders/create-sqlite-ledger-builder.d.ts.map +1 -0
  17. package/dist/builders/create-sqlite-ledger-builder.js +31 -0
  18. package/dist/builders/create-sqlite-ledger-builder.js.map +1 -0
  19. package/dist/builders/create-sqlite-lessons-builder.d.ts +12 -0
  20. package/dist/builders/create-sqlite-lessons-builder.d.ts.map +1 -0
  21. package/dist/builders/create-sqlite-lessons-builder.js +23 -0
  22. package/dist/builders/create-sqlite-lessons-builder.js.map +1 -0
  23. package/dist/builders/create-sqlite-topology-builder.d.ts +12 -0
  24. package/dist/builders/create-sqlite-topology-builder.d.ts.map +1 -0
  25. package/dist/builders/create-sqlite-topology-builder.js +23 -0
  26. package/dist/builders/create-sqlite-topology-builder.js.map +1 -0
  27. package/dist/builders/internal/compaction-config-builder-state.d.ts +16 -0
  28. package/dist/builders/internal/compaction-config-builder-state.d.ts.map +1 -0
  29. package/dist/builders/internal/compaction-config-builder-state.js +2 -0
  30. package/dist/builders/internal/compaction-config-builder-state.js.map +1 -0
  31. package/dist/builders/sqlite-global-rules-builder.d.ts +17 -0
  32. package/dist/builders/sqlite-global-rules-builder.d.ts.map +1 -0
  33. package/dist/builders/sqlite-global-rules-builder.js +2 -0
  34. package/dist/builders/sqlite-global-rules-builder.js.map +1 -0
  35. package/dist/builders/sqlite-ledger-builder.d.ts +21 -0
  36. package/dist/builders/sqlite-ledger-builder.d.ts.map +1 -0
  37. package/dist/builders/sqlite-ledger-builder.js +2 -0
  38. package/dist/builders/sqlite-ledger-builder.js.map +1 -0
  39. package/dist/builders/sqlite-lessons-builder.d.ts +18 -0
  40. package/dist/builders/sqlite-lessons-builder.d.ts.map +1 -0
  41. package/dist/builders/sqlite-lessons-builder.js +2 -0
  42. package/dist/builders/sqlite-lessons-builder.js.map +1 -0
  43. package/dist/builders/sqlite-namespace-contract.d.ts +64 -0
  44. package/dist/builders/sqlite-namespace-contract.d.ts.map +1 -0
  45. package/dist/builders/sqlite-namespace-contract.js +2 -0
  46. package/dist/builders/sqlite-namespace-contract.js.map +1 -0
  47. package/dist/builders/sqlite-namespace.d.ts +9 -0
  48. package/dist/builders/sqlite-namespace.d.ts.map +1 -0
  49. package/dist/builders/sqlite-namespace.js +17 -0
  50. package/dist/builders/sqlite-namespace.js.map +1 -0
  51. package/dist/builders/sqlite-topology-builder.d.ts +18 -0
  52. package/dist/builders/sqlite-topology-builder.d.ts.map +1 -0
  53. package/dist/builders/sqlite-topology-builder.js +2 -0
  54. package/dist/builders/sqlite-topology-builder.js.map +1 -0
  55. package/dist/ddl/internal/open-sqlite-connection.d.ts +24 -0
  56. package/dist/ddl/internal/open-sqlite-connection.d.ts.map +1 -0
  57. package/dist/ddl/internal/open-sqlite-connection.js +65 -0
  58. package/dist/ddl/internal/open-sqlite-connection.js.map +1 -0
  59. package/dist/ddl/sqlite-schema.constants.d.ts +21 -0
  60. package/dist/ddl/sqlite-schema.constants.d.ts.map +1 -0
  61. package/dist/ddl/sqlite-schema.constants.js +134 -0
  62. package/dist/ddl/sqlite-schema.constants.js.map +1 -0
  63. package/dist/executors/create-sqlite-executors.d.ts +11 -0
  64. package/dist/executors/create-sqlite-executors.d.ts.map +1 -0
  65. package/dist/executors/create-sqlite-executors.js +38 -0
  66. package/dist/executors/create-sqlite-executors.js.map +1 -0
  67. package/dist/executors/sqlite-executors.constants.d.ts +9 -0
  68. package/dist/executors/sqlite-executors.constants.d.ts.map +1 -0
  69. package/dist/executors/sqlite-executors.constants.js +9 -0
  70. package/dist/executors/sqlite-executors.constants.js.map +1 -0
  71. package/dist/executors/sqlite-rules-source-executor.d.ts +15 -0
  72. package/dist/executors/sqlite-rules-source-executor.d.ts.map +1 -0
  73. package/dist/executors/sqlite-rules-source-executor.js +47 -0
  74. package/dist/executors/sqlite-rules-source-executor.js.map +1 -0
  75. package/dist/index.d.ts +23 -0
  76. package/dist/index.d.ts.map +1 -0
  77. package/dist/index.js +16 -0
  78. package/dist/index.js.map +1 -0
  79. package/dist/stores/internal/admit-lesson-params.d.ts +16 -0
  80. package/dist/stores/internal/admit-lesson-params.d.ts.map +1 -0
  81. package/dist/stores/internal/admit-lesson-params.js +2 -0
  82. package/dist/stores/internal/admit-lesson-params.js.map +1 -0
  83. package/dist/stores/internal/compute-normalized-relevance.d.ts +47 -0
  84. package/dist/stores/internal/compute-normalized-relevance.d.ts.map +1 -0
  85. package/dist/stores/internal/compute-normalized-relevance.js +63 -0
  86. package/dist/stores/internal/compute-normalized-relevance.js.map +1 -0
  87. package/dist/stores/internal/mark-frame-tombstone-params.d.ts +16 -0
  88. package/dist/stores/internal/mark-frame-tombstone-params.d.ts.map +1 -0
  89. package/dist/stores/internal/mark-frame-tombstone-params.js +2 -0
  90. package/dist/stores/internal/mark-frame-tombstone-params.js.map +1 -0
  91. package/dist/stores/internal/record-terminal-receipt-params.d.ts +16 -0
  92. package/dist/stores/internal/record-terminal-receipt-params.d.ts.map +1 -0
  93. package/dist/stores/internal/record-terminal-receipt-params.js +2 -0
  94. package/dist/stores/internal/record-terminal-receipt-params.js.map +1 -0
  95. package/dist/stores/internal/sqlite-ledger-compaction-ops.d.ts +14 -0
  96. package/dist/stores/internal/sqlite-ledger-compaction-ops.d.ts.map +1 -0
  97. package/dist/stores/internal/sqlite-ledger-compaction-ops.js +29 -0
  98. package/dist/stores/internal/sqlite-ledger-compaction-ops.js.map +1 -0
  99. package/dist/stores/internal/sqlite-ledger-fork-operations.d.ts +33 -0
  100. package/dist/stores/internal/sqlite-ledger-fork-operations.d.ts.map +1 -0
  101. package/dist/stores/internal/sqlite-ledger-fork-operations.js +44 -0
  102. package/dist/stores/internal/sqlite-ledger-fork-operations.js.map +1 -0
  103. package/dist/stores/internal/sqlite-ledger-frame-operations.d.ts +24 -0
  104. package/dist/stores/internal/sqlite-ledger-frame-operations.d.ts.map +1 -0
  105. package/dist/stores/internal/sqlite-ledger-frame-operations.js +40 -0
  106. package/dist/stores/internal/sqlite-ledger-frame-operations.js.map +1 -0
  107. package/dist/stores/internal/sqlite-ledger-frame-ops.d.ts +50 -0
  108. package/dist/stores/internal/sqlite-ledger-frame-ops.d.ts.map +1 -0
  109. package/dist/stores/internal/sqlite-ledger-frame-ops.js +90 -0
  110. package/dist/stores/internal/sqlite-ledger-frame-ops.js.map +1 -0
  111. package/dist/stores/internal/sqlite-ledger-plan-and-fork-ops.d.ts +59 -0
  112. package/dist/stores/internal/sqlite-ledger-plan-and-fork-ops.d.ts.map +1 -0
  113. package/dist/stores/internal/sqlite-ledger-plan-and-fork-ops.js +90 -0
  114. package/dist/stores/internal/sqlite-ledger-plan-and-fork-ops.js.map +1 -0
  115. package/dist/stores/internal/sqlite-ledger-plan-operations.d.ts +40 -0
  116. package/dist/stores/internal/sqlite-ledger-plan-operations.d.ts.map +1 -0
  117. package/dist/stores/internal/sqlite-ledger-plan-operations.js +39 -0
  118. package/dist/stores/internal/sqlite-ledger-plan-operations.js.map +1 -0
  119. package/dist/stores/internal/sqlite-ledger-run-operations.d.ts +41 -0
  120. package/dist/stores/internal/sqlite-ledger-run-operations.d.ts.map +1 -0
  121. package/dist/stores/internal/sqlite-ledger-run-operations.js +89 -0
  122. package/dist/stores/internal/sqlite-ledger-run-operations.js.map +1 -0
  123. package/dist/stores/internal/sqlite-ledger-run-ops.d.ts +58 -0
  124. package/dist/stores/internal/sqlite-ledger-run-ops.d.ts.map +1 -0
  125. package/dist/stores/internal/sqlite-ledger-run-ops.js +80 -0
  126. package/dist/stores/internal/sqlite-ledger-run-ops.js.map +1 -0
  127. package/dist/stores/internal/sqlite-ledger-step-operations.d.ts +28 -0
  128. package/dist/stores/internal/sqlite-ledger-step-operations.d.ts.map +1 -0
  129. package/dist/stores/internal/sqlite-ledger-step-operations.js +53 -0
  130. package/dist/stores/internal/sqlite-ledger-step-operations.js.map +1 -0
  131. package/dist/stores/internal/sqlite-ledger-step-ops.d.ts +47 -0
  132. package/dist/stores/internal/sqlite-ledger-step-ops.d.ts.map +1 -0
  133. package/dist/stores/internal/sqlite-ledger-step-ops.js +89 -0
  134. package/dist/stores/internal/sqlite-ledger-step-ops.js.map +1 -0
  135. package/dist/stores/internal/sqlite-lesson-ops.d.ts +100 -0
  136. package/dist/stores/internal/sqlite-lesson-ops.d.ts.map +1 -0
  137. package/dist/stores/internal/sqlite-lesson-ops.js +178 -0
  138. package/dist/stores/internal/sqlite-lesson-ops.js.map +1 -0
  139. package/dist/stores/internal/sqlite-lesson-row.d.ts +28 -0
  140. package/dist/stores/internal/sqlite-lesson-row.d.ts.map +1 -0
  141. package/dist/stores/internal/sqlite-lesson-row.js +2 -0
  142. package/dist/stores/internal/sqlite-lesson-row.js.map +1 -0
  143. package/dist/stores/internal/sqlite-overlay-step-mutation-entry.d.ts +21 -0
  144. package/dist/stores/internal/sqlite-overlay-step-mutation-entry.d.ts.map +1 -0
  145. package/dist/stores/internal/sqlite-overlay-step-mutation-entry.js +2 -0
  146. package/dist/stores/internal/sqlite-overlay-step-mutation-entry.js.map +1 -0
  147. package/dist/stores/internal/sqlite-run-row.d.ts +36 -0
  148. package/dist/stores/internal/sqlite-run-row.d.ts.map +1 -0
  149. package/dist/stores/internal/sqlite-run-row.js +2 -0
  150. package/dist/stores/internal/sqlite-run-row.js.map +1 -0
  151. package/dist/stores/internal/sqlite-step-row.d.ts +32 -0
  152. package/dist/stores/internal/sqlite-step-row.d.ts.map +1 -0
  153. package/dist/stores/internal/sqlite-step-row.js +2 -0
  154. package/dist/stores/internal/sqlite-step-row.js.map +1 -0
  155. package/dist/stores/internal/sqlite-suspended-fork-row.d.ts +22 -0
  156. package/dist/stores/internal/sqlite-suspended-fork-row.d.ts.map +1 -0
  157. package/dist/stores/internal/sqlite-suspended-fork-row.js +2 -0
  158. package/dist/stores/internal/sqlite-suspended-fork-row.js.map +1 -0
  159. package/dist/stores/internal/sqlite-topology-base-row.d.ts +18 -0
  160. package/dist/stores/internal/sqlite-topology-base-row.d.ts.map +1 -0
  161. package/dist/stores/internal/sqlite-topology-base-row.js +2 -0
  162. package/dist/stores/internal/sqlite-topology-base-row.js.map +1 -0
  163. package/dist/stores/internal/sqlite-topology-commit-ops.d.ts +37 -0
  164. package/dist/stores/internal/sqlite-topology-commit-ops.d.ts.map +1 -0
  165. package/dist/stores/internal/sqlite-topology-commit-ops.js +58 -0
  166. package/dist/stores/internal/sqlite-topology-commit-ops.js.map +1 -0
  167. package/dist/stores/internal/sqlite-topology-overlay-commit.d.ts +25 -0
  168. package/dist/stores/internal/sqlite-topology-overlay-commit.d.ts.map +1 -0
  169. package/dist/stores/internal/sqlite-topology-overlay-commit.js +51 -0
  170. package/dist/stores/internal/sqlite-topology-overlay-commit.js.map +1 -0
  171. package/dist/stores/internal/sqlite-topology-overlay-ops.d.ts +61 -0
  172. package/dist/stores/internal/sqlite-topology-overlay-ops.d.ts.map +1 -0
  173. package/dist/stores/internal/sqlite-topology-overlay-ops.js +156 -0
  174. package/dist/stores/internal/sqlite-topology-overlay-ops.js.map +1 -0
  175. package/dist/stores/internal/sqlite-topology-overlay-row.d.ts +40 -0
  176. package/dist/stores/internal/sqlite-topology-overlay-row.d.ts.map +1 -0
  177. package/dist/stores/internal/sqlite-topology-overlay-row.js +2 -0
  178. package/dist/stores/internal/sqlite-topology-overlay-row.js.map +1 -0
  179. package/dist/stores/internal/sqlite-topology-overlay-sync.d.ts +72 -0
  180. package/dist/stores/internal/sqlite-topology-overlay-sync.d.ts.map +1 -0
  181. package/dist/stores/internal/sqlite-topology-overlay-sync.js +116 -0
  182. package/dist/stores/internal/sqlite-topology-overlay-sync.js.map +1 -0
  183. package/dist/stores/internal/sqlite-wire-frame-row.d.ts +26 -0
  184. package/dist/stores/internal/sqlite-wire-frame-row.d.ts.map +1 -0
  185. package/dist/stores/internal/sqlite-wire-frame-row.js +2 -0
  186. package/dist/stores/internal/sqlite-wire-frame-row.js.map +1 -0
  187. package/dist/stores/internal/three-way-merge-contract.d.ts +25 -0
  188. package/dist/stores/internal/three-way-merge-contract.d.ts.map +1 -0
  189. package/dist/stores/internal/three-way-merge-contract.js +76 -0
  190. package/dist/stores/internal/three-way-merge-contract.js.map +1 -0
  191. package/dist/stores/internal/update-continuation-stack-params.d.ts +17 -0
  192. package/dist/stores/internal/update-continuation-stack-params.d.ts.map +1 -0
  193. package/dist/stores/internal/update-continuation-stack-params.js +2 -0
  194. package/dist/stores/internal/update-continuation-stack-params.js.map +1 -0
  195. package/dist/stores/internal/update-contract-in-overlay-params.d.ts +16 -0
  196. package/dist/stores/internal/update-contract-in-overlay-params.d.ts.map +1 -0
  197. package/dist/stores/internal/update-contract-in-overlay-params.js +2 -0
  198. package/dist/stores/internal/update-contract-in-overlay-params.js.map +1 -0
  199. package/dist/stores/internal/validate-lane-dag.d.ts +59 -0
  200. package/dist/stores/internal/validate-lane-dag.d.ts.map +1 -0
  201. package/dist/stores/internal/validate-lane-dag.js +117 -0
  202. package/dist/stores/internal/validate-lane-dag.js.map +1 -0
  203. package/dist/stores/sqlite-ledger-store.d.ts +222 -0
  204. package/dist/stores/sqlite-ledger-store.d.ts.map +1 -0
  205. package/dist/stores/sqlite-ledger-store.js +295 -0
  206. package/dist/stores/sqlite-ledger-store.js.map +1 -0
  207. package/dist/stores/sqlite-lesson-store.d.ts +96 -0
  208. package/dist/stores/sqlite-lesson-store.d.ts.map +1 -0
  209. package/dist/stores/sqlite-lesson-store.js +121 -0
  210. package/dist/stores/sqlite-lesson-store.js.map +1 -0
  211. package/dist/stores/sqlite-topology-store.d.ts +112 -0
  212. package/dist/stores/sqlite-topology-store.d.ts.map +1 -0
  213. package/dist/stores/sqlite-topology-store.js +137 -0
  214. package/dist/stores/sqlite-topology-store.js.map +1 -0
  215. package/package.json +70 -3
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Parameter object for `admitLessonInSqlite`.
3
+ *
4
+ * Bundles the optional partition tag, directive text, creation epoch, and optional creator run ID.
5
+ */
6
+ export interface AdmitLessonParams {
7
+ /** Optional logical partition identifier associated with the lesson. */
8
+ readonly partition?: string;
9
+ /** Preventative rule or architectural directive text. */
10
+ readonly directive: string;
11
+ /** Partition topology epoch at creation. */
12
+ readonly epochAtCreation: number;
13
+ /** Optional creator run identifier (`lastMutatedByRunId ?? runId`). */
14
+ readonly createdByRunId?: string;
15
+ }
16
+ //# sourceMappingURL=admit-lesson-params.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admit-lesson-params.d.ts","sourceRoot":"","sources":["../../../src/stores/internal/admit-lesson-params.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,wEAAwE;IACxE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,yDAAyD;IACzD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,4CAA4C;IAC5C,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,uEAAuE;IACvE,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=admit-lesson-params.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admit-lesson-params.js","sourceRoot":"","sources":["../../../src/stores/internal/admit-lesson-params.ts"],"names":[],"mappings":""}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Candidate lesson document shape passed to `computeNormalizedRelevanceScores`.
3
+ */
4
+ export interface RelevanceCandidateParams {
5
+ /** Unique lesson identifier. */
6
+ readonly id: string;
7
+ /** Lesson directive text $L$. */
8
+ readonly directive: string;
9
+ /** Optional topology partition identifier associated with the lesson. */
10
+ readonly partition?: string | null;
11
+ }
12
+ /**
13
+ * Indexed document entry added to the internal `MiniSearch` instance.
14
+ */
15
+ export interface MiniSearchLessonEntryOptions {
16
+ /** Unique lesson identifier. */
17
+ readonly id: string;
18
+ /** Lesson directive text $L$. */
19
+ readonly directive: string;
20
+ /** Partition string (empty string when global). */
21
+ readonly partition: string;
22
+ }
23
+ /**
24
+ * Computes normalized BM25 + fuzzy/prefix relevance scores $R(L, Q) \in [0, 1]$ across `candidates` using `MiniSearch`.
25
+ *
26
+ * Indexes `directive` and `partition` with `{ prefix: true, fuzzy: 0.2 }`, returning `1.0` for all candidates when
27
+ * `queryText` is empty, `score / maxScore` when `maxScore > 0`, and `0` when a candidate does not match (`SPEC.md` §3.4.3).
28
+ *
29
+ * @param {readonly RelevanceCandidateParams[]} candidates - Candidate lessons to score.
30
+ * @param {string} queryText - Search query text $Q$.
31
+ *
32
+ * @returns {ReadonlyMap<string, number>} Map of candidate `id` to normalized relevance score $R(L, Q) \in [0, 1]$.
33
+ */
34
+ export declare function computeNormalizedRelevanceScores(candidates: readonly RelevanceCandidateParams[], queryText: string): ReadonlyMap<string, number>;
35
+ /**
36
+ * Computes normalized text relevance $R(L, Q) \in [0, 1]$ between a single lesson `directive` and `queryText` via `MiniSearch`.
37
+ *
38
+ * Returns `1` when `queryText` is empty or matches `directive` under BM25 + prefix/fuzzy search, and `0` when no terms match.
39
+ *
40
+ * @param {string} directive - Lesson directive text $L$.
41
+ * @param {string} queryText - Search query text $Q$.
42
+ * @param {string} [partition] - Optional partition identifier associated with the lesson.
43
+ *
44
+ * @returns {number} Normalized similarity score $R(L, Q) \in [0, 1]$.
45
+ */
46
+ export declare function computeNormalizedRelevance(directive: string, queryText: string, partition?: string): number;
47
+ //# sourceMappingURL=compute-normalized-relevance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compute-normalized-relevance.d.ts","sourceRoot":"","sources":["../../../src/stores/internal/compute-normalized-relevance.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,gCAAgC;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,iCAAiC;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,yEAAyE;IACzE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C,gCAAgC;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,iCAAiC;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,mDAAmD;IACnD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gCAAgC,CAC9C,UAAU,EAAE,SAAS,wBAAwB,EAAE,EAC/C,SAAS,EAAE,MAAM,GAChB,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAkC7B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,MAAM,GACjB,MAAM,CAGR"}
@@ -0,0 +1,63 @@
1
+ import MiniSearch from 'minisearch';
2
+ /**
3
+ * Computes normalized BM25 + fuzzy/prefix relevance scores $R(L, Q) \in [0, 1]$ across `candidates` using `MiniSearch`.
4
+ *
5
+ * Indexes `directive` and `partition` with `{ prefix: true, fuzzy: 0.2 }`, returning `1.0` for all candidates when
6
+ * `queryText` is empty, `score / maxScore` when `maxScore > 0`, and `0` when a candidate does not match (`SPEC.md` §3.4.3).
7
+ *
8
+ * @param {readonly RelevanceCandidateParams[]} candidates - Candidate lessons to score.
9
+ * @param {string} queryText - Search query text $Q$.
10
+ *
11
+ * @returns {ReadonlyMap<string, number>} Map of candidate `id` to normalized relevance score $R(L, Q) \in [0, 1]$.
12
+ */
13
+ export function computeNormalizedRelevanceScores(candidates, queryText) {
14
+ const scores = new Map();
15
+ if (candidates.length === 0) {
16
+ return scores;
17
+ }
18
+ const trimmedQuery = queryText.trim();
19
+ if (trimmedQuery.length === 0) {
20
+ for (const candidate of candidates) {
21
+ scores.set(candidate.id, 1);
22
+ }
23
+ return scores;
24
+ }
25
+ const miniSearch = new MiniSearch({
26
+ fields: ['directive', 'partition'],
27
+ searchOptions: { prefix: true, fuzzy: 0.2 },
28
+ });
29
+ for (const candidate of candidates) {
30
+ miniSearch.add({
31
+ id: candidate.id,
32
+ directive: candidate.directive,
33
+ partition: candidate.partition ?? '',
34
+ });
35
+ scores.set(candidate.id, 0);
36
+ }
37
+ const results = miniSearch.search(trimmedQuery);
38
+ const maxScore = results[0]?.score ?? 0;
39
+ if (maxScore <= 0) {
40
+ return scores;
41
+ }
42
+ for (const result of results) {
43
+ const normalized = Math.max(0, Math.min(1, Number((result.score / maxScore).toFixed(6))));
44
+ scores.set(String(result.id), normalized);
45
+ }
46
+ return scores;
47
+ }
48
+ /**
49
+ * Computes normalized text relevance $R(L, Q) \in [0, 1]$ between a single lesson `directive` and `queryText` via `MiniSearch`.
50
+ *
51
+ * Returns `1` when `queryText` is empty or matches `directive` under BM25 + prefix/fuzzy search, and `0` when no terms match.
52
+ *
53
+ * @param {string} directive - Lesson directive text $L$.
54
+ * @param {string} queryText - Search query text $Q$.
55
+ * @param {string} [partition] - Optional partition identifier associated with the lesson.
56
+ *
57
+ * @returns {number} Normalized similarity score $R(L, Q) \in [0, 1]$.
58
+ */
59
+ export function computeNormalizedRelevance(directive, queryText, partition) {
60
+ const scores = computeNormalizedRelevanceScores([{ id: '0', directive, partition }], queryText);
61
+ return scores.get('0') ?? 0;
62
+ }
63
+ //# sourceMappingURL=compute-normalized-relevance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compute-normalized-relevance.js","sourceRoot":"","sources":["../../../src/stores/internal/compute-normalized-relevance.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,YAAY,CAAC;AA0BpC;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gCAAgC,CAC9C,UAA+C,EAC/C,SAAiB;IAEjB,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,MAAM,YAAY,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;IACtC,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAC9B,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,UAAU,CAA+B;QAC9D,MAAM,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC;QAClC,aAAa,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE;KAC5C,CAAC,CAAC;IACH,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,UAAU,CAAC,GAAG,CAAC;YACb,EAAE,EAAE,SAAS,CAAC,EAAE;YAChB,SAAS,EAAE,SAAS,CAAC,SAAS;YAC9B,SAAS,EAAE,SAAS,CAAC,SAAS,IAAI,EAAE;SACrC,CAAC,CAAC;QACH,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAC9B,CAAC;IACD,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC;IACxC,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;QAClB,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1F,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,0BAA0B,CACxC,SAAiB,EACjB,SAAiB,EACjB,SAAkB;IAElB,MAAM,MAAM,GAAG,gCAAgC,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;IAChG,OAAO,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Parameter object for `markFrameTombstoneInSqlite`.
3
+ *
4
+ * Bundles the run ID, target message ID, tool call ID, and compacted tombstone text.
5
+ */
6
+ export interface MarkFrameTombstoneParams {
7
+ /** Enclosing flow run identifier. */
8
+ readonly runId: string;
9
+ /** Target wire frame message identifier. */
10
+ readonly messageId: string;
11
+ /** Tool call ID of the unmounted skill activation. */
12
+ readonly callId: string;
13
+ /** Compacted tombstone replacement string. */
14
+ readonly compactedTombstone: string;
15
+ }
16
+ //# sourceMappingURL=mark-frame-tombstone-params.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mark-frame-tombstone-params.d.ts","sourceRoot":"","sources":["../../../src/stores/internal/mark-frame-tombstone-params.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,WAAW,wBAAwB;IACvC,qCAAqC;IACrC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,4CAA4C;IAC5C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,sDAAsD;IACtD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,8CAA8C;IAC9C,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;CACrC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=mark-frame-tombstone-params.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mark-frame-tombstone-params.js","sourceRoot":"","sources":["../../../src/stores/internal/mark-frame-tombstone-params.ts"],"names":[],"mappings":""}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Parameter object for `recordRunTerminalReceiptInSqlite`.
3
+ *
4
+ * Bundles the run ID, item key, terminal exit state, and optional scope receipt JSON.
5
+ */
6
+ export interface RecordTerminalReceiptParams {
7
+ /** Completed flow run identifier. */
8
+ readonly runId: string;
9
+ /** Work item deduplication key. */
10
+ readonly itemKey: string;
11
+ /** Terminal exit state string. */
12
+ readonly terminalState: string;
13
+ /** Optional JSON-serialized final scope receipt. */
14
+ readonly scopeReceiptJson?: string;
15
+ }
16
+ //# sourceMappingURL=record-terminal-receipt-params.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"record-terminal-receipt-params.d.ts","sourceRoot":"","sources":["../../../src/stores/internal/record-terminal-receipt-params.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,WAAW,2BAA2B;IAC1C,qCAAqC;IACrC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,mCAAmC;IACnC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,kCAAkC;IAClC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,oDAAoD;IACpD,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACpC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=record-terminal-receipt-params.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"record-terminal-receipt-params.js","sourceRoot":"","sources":["../../../src/stores/internal/record-terminal-receipt-params.ts"],"names":[],"mappings":""}
@@ -0,0 +1,14 @@
1
+ import type Database from 'better-sqlite3';
2
+ /**
3
+ * Prunes `raw_wire_frame` BLOBs for a terminal `runId` while preserving canonical audit headers.
4
+ *
5
+ * Verifies that `runId` is not in an active non-terminal state (`'QUEUED' | 'RUNNING' | 'WAITING' | 'SUSPENDED'`)
6
+ * and scopes the update strictly to `runId` so active runs sharing the same `itemKey` are never pruned.
7
+ *
8
+ * @param {Database.Database} db - Active SQLite database handle.
9
+ * @param {string} runId - Terminal flow run identifier to compact.
10
+ *
11
+ * @returns {void} Returns nothing once raw wire frames for `runId` are pruned.
12
+ */
13
+ export declare function compactRunFramesInSqlite(db: Database.Database, runId: string): void;
14
+ //# sourceMappingURL=sqlite-ledger-compaction-ops.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-ledger-compaction-ops.d.ts","sourceRoot":"","sources":["../../../src/stores/internal/sqlite-ledger-compaction-ops.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAsBnF"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Prunes `raw_wire_frame` BLOBs for a terminal `runId` while preserving canonical audit headers.
3
+ *
4
+ * Verifies that `runId` is not in an active non-terminal state (`'QUEUED' | 'RUNNING' | 'WAITING' | 'SUSPENDED'`)
5
+ * and scopes the update strictly to `runId` so active runs sharing the same `itemKey` are never pruned.
6
+ *
7
+ * @param {Database.Database} db - Active SQLite database handle.
8
+ * @param {string} runId - Terminal flow run identifier to compact.
9
+ *
10
+ * @returns {void} Returns nothing once raw wire frames for `runId` are pruned.
11
+ */
12
+ export function compactRunFramesInSqlite(db, runId) {
13
+ const runRow = db
14
+ .prepare('SELECT status, terminal_state FROM harness_runs WHERE run_id = ?')
15
+ .get(runId);
16
+ const isNonTerminal = runRow !== undefined &&
17
+ runRow.terminal_state === null &&
18
+ (runRow.status === 'QUEUED' ||
19
+ runRow.status === 'RUNNING' ||
20
+ runRow.status === 'WAITING' ||
21
+ runRow.status === 'SUSPENDED');
22
+ if (isNonTerminal) {
23
+ return;
24
+ }
25
+ const emptyBlob = Buffer.alloc(0);
26
+ db.prepare('UPDATE harness_wire_frames SET raw_wire_frame = ?, is_compacted = 1 WHERE run_id = ?').run(emptyBlob, runId);
27
+ db.prepare('UPDATE harness_runs SET compacted = 1, updated_at = ? WHERE run_id = ?').run(new Date().toISOString(), runId);
28
+ }
29
+ //# sourceMappingURL=sqlite-ledger-compaction-ops.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-ledger-compaction-ops.js","sourceRoot":"","sources":["../../../src/stores/internal/sqlite-ledger-compaction-ops.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AACH,MAAM,UAAU,wBAAwB,CAAC,EAAqB,EAAE,KAAa;IAC3E,MAAM,MAAM,GAAG,EAAE;SACd,OAAO,CAAC,kEAAkE,CAAC;SAC3E,GAAG,CAAC,KAAK,CAAoF,CAAC;IACjG,MAAM,aAAa,GACjB,MAAM,KAAK,SAAS;QACpB,MAAM,CAAC,cAAc,KAAK,IAAI;QAC9B,CAAC,MAAM,CAAC,MAAM,KAAK,QAAQ;YACzB,MAAM,CAAC,MAAM,KAAK,SAAS;YAC3B,MAAM,CAAC,MAAM,KAAK,SAAS;YAC3B,MAAM,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC;IACnC,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO;IACT,CAAC;IACD,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAClC,EAAE,CAAC,OAAO,CACR,sFAAsF,CACvF,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACxB,EAAE,CAAC,OAAO,CAAC,wEAAwE,CAAC,CAAC,GAAG,CACtF,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EACxB,KAAK,CACN,CAAC;AACJ,CAAC"}
@@ -0,0 +1,33 @@
1
+ import type { SqliteSuspendedForkRow } from './sqlite-suspended-fork-row.js';
2
+ /**
3
+ * Parsed `(forkId, epoch)` coordinates extracted from a monotonic `${forkId}#${suspensionEpoch}` identifier.
4
+ */
5
+ export interface ParsedSuspendedForkIdOptions {
6
+ /** Logical fork step identifier. */
7
+ readonly forkId: string;
8
+ /** Positive integer suspension epoch. */
9
+ readonly epoch: number;
10
+ }
11
+ /**
12
+ * Checks whether a persisted `SqliteSuspendedForkRow` matches the optional `forkIds` and `parentStepExecId` filter.
13
+ *
14
+ * Matches `forkIdSet` against both `row.fork_id` and `row.suspended_fork_id`.
15
+ *
16
+ * @param {SqliteSuspendedForkRow} row - Candidate suspended fork database row.
17
+ * @param {ReadonlySet<string> | undefined} forkIdSet - Optional set of target fork or suspended-fork IDs.
18
+ * @param {string | undefined} parentStepExecId - Optional parent step execution ID filter.
19
+ *
20
+ * @returns {boolean} `true` when the row satisfies all provided filter criteria.
21
+ */
22
+ export declare function matchesSuspendedForkFilter(row: SqliteSuspendedForkRow, forkIdSet: ReadonlySet<string> | undefined, parentStepExecId: string | undefined): boolean;
23
+ /**
24
+ * Parses a monotonic `${forkId}#${suspensionEpoch}` string into its `forkId` and integer `epoch`.
25
+ *
26
+ * Returns `undefined` if `suspendedForkId` does not contain a `#` separator followed by a valid integer epoch.
27
+ *
28
+ * @param {string} suspendedForkId - Monotonic `${forkId}#${suspensionEpoch}` identifier.
29
+ *
30
+ * @returns {ParsedSuspendedForkIdOptions | undefined} Parsed coordinates, or `undefined` if malformed.
31
+ */
32
+ export declare function parseSuspendedForkCoordinates(suspendedForkId: string): ParsedSuspendedForkIdOptions | undefined;
33
+ //# sourceMappingURL=sqlite-ledger-fork-operations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-ledger-fork-operations.d.ts","sourceRoot":"","sources":["../../../src/stores/internal/sqlite-ledger-fork-operations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAE7E;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C,oCAAoC;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,yCAAyC;IACzC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,sBAAsB,EAC3B,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,SAAS,EAC1C,gBAAgB,EAAE,MAAM,GAAG,SAAS,GACnC,OAAO,CAYT;AAED;;;;;;;;GAQG;AACH,wBAAgB,6BAA6B,CAC3C,eAAe,EAAE,MAAM,GACtB,4BAA4B,GAAG,SAAS,CAW1C"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Checks whether a persisted `SqliteSuspendedForkRow` matches the optional `forkIds` and `parentStepExecId` filter.
3
+ *
4
+ * Matches `forkIdSet` against both `row.fork_id` and `row.suspended_fork_id`.
5
+ *
6
+ * @param {SqliteSuspendedForkRow} row - Candidate suspended fork database row.
7
+ * @param {ReadonlySet<string> | undefined} forkIdSet - Optional set of target fork or suspended-fork IDs.
8
+ * @param {string | undefined} parentStepExecId - Optional parent step execution ID filter.
9
+ *
10
+ * @returns {boolean} `true` when the row satisfies all provided filter criteria.
11
+ */
12
+ export function matchesSuspendedForkFilter(row, forkIdSet, parentStepExecId) {
13
+ if (parentStepExecId !== undefined && row.parent_step_exec_id !== parentStepExecId) {
14
+ return false;
15
+ }
16
+ if (forkIdSet !== undefined &&
17
+ !forkIdSet.has(row.fork_id) &&
18
+ !forkIdSet.has(row.suspended_fork_id)) {
19
+ return false;
20
+ }
21
+ return true;
22
+ }
23
+ /**
24
+ * Parses a monotonic `${forkId}#${suspensionEpoch}` string into its `forkId` and integer `epoch`.
25
+ *
26
+ * Returns `undefined` if `suspendedForkId` does not contain a `#` separator followed by a valid integer epoch.
27
+ *
28
+ * @param {string} suspendedForkId - Monotonic `${forkId}#${suspensionEpoch}` identifier.
29
+ *
30
+ * @returns {ParsedSuspendedForkIdOptions | undefined} Parsed coordinates, or `undefined` if malformed.
31
+ */
32
+ export function parseSuspendedForkCoordinates(suspendedForkId) {
33
+ const hashIdx = suspendedForkId.lastIndexOf('#');
34
+ if (hashIdx <= 0) {
35
+ return undefined;
36
+ }
37
+ const forkId = suspendedForkId.slice(0, hashIdx);
38
+ const epoch = Number.parseInt(suspendedForkId.slice(hashIdx + 1), 10);
39
+ if (!Number.isInteger(epoch)) {
40
+ return undefined;
41
+ }
42
+ return { forkId, epoch };
43
+ }
44
+ //# sourceMappingURL=sqlite-ledger-fork-operations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-ledger-fork-operations.js","sourceRoot":"","sources":["../../../src/stores/internal/sqlite-ledger-fork-operations.ts"],"names":[],"mappings":"AAYA;;;;;;;;;;GAUG;AACH,MAAM,UAAU,0BAA0B,CACxC,GAA2B,EAC3B,SAA0C,EAC1C,gBAAoC;IAEpC,IAAI,gBAAgB,KAAK,SAAS,IAAI,GAAG,CAAC,mBAAmB,KAAK,gBAAgB,EAAE,CAAC;QACnF,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IACE,SAAS,KAAK,SAAS;QACvB,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC;QAC3B,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,iBAAiB,CAAC,EACrC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,6BAA6B,CAC3C,eAAuB;IAEvB,MAAM,OAAO,GAAG,eAAe,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACjD,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;QACjB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACtE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,24 @@
1
+ import type { WireFrameRecord } from '@paraharness/core';
2
+ import type { SqliteWireFrameRow } from './sqlite-wire-frame-row.js';
3
+ /**
4
+ * Serializes a `WireFrameRecord`'s optional `compactedTombstones` map into a nullable JSON column string.
5
+ *
6
+ * Returns `null` when `frame.compactedTombstones` is `undefined`.
7
+ *
8
+ * @param {WireFrameRecord} frame - Wire frame record whose tombstones are being serialized.
9
+ *
10
+ * @returns {string | null} JSON string or `null`.
11
+ */
12
+ export declare function serializeFrameTombstonesJson(frame: WireFrameRecord): string | null;
13
+ /**
14
+ * Maps a persisted `SqliteWireFrameRow` database row into an immutable `WireFrameRecord`.
15
+ *
16
+ * Reconstructs the `Uint8Array` raw wire frame buffer, parses `canonical_json`, and freezes
17
+ * any `compacted_tombstones_json` dictionary.
18
+ *
19
+ * @param {SqliteWireFrameRow} row - Database row from `harness_wire_frames`.
20
+ *
21
+ * @returns {WireFrameRecord} Frozen wire frame record.
22
+ */
23
+ export declare function mapSqliteRowToWireFrameRecord(row: SqliteWireFrameRow): WireFrameRecord;
24
+ //# sourceMappingURL=sqlite-ledger-frame-operations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-ledger-frame-operations.d.ts","sourceRoot":"","sources":["../../../src/stores/internal/sqlite-ledger-frame-operations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAoB,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAErE;;;;;;;;GAQG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,GAAG,IAAI,CAKlF;AAED;;;;;;;;;GASG;AACH,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,kBAAkB,GAAG,eAAe,CActF"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Serializes a `WireFrameRecord`'s optional `compactedTombstones` map into a nullable JSON column string.
3
+ *
4
+ * Returns `null` when `frame.compactedTombstones` is `undefined`.
5
+ *
6
+ * @param {WireFrameRecord} frame - Wire frame record whose tombstones are being serialized.
7
+ *
8
+ * @returns {string | null} JSON string or `null`.
9
+ */
10
+ export function serializeFrameTombstonesJson(frame) {
11
+ if (frame.compactedTombstones === undefined) {
12
+ return null;
13
+ }
14
+ return JSON.stringify(frame.compactedTombstones);
15
+ }
16
+ /**
17
+ * Maps a persisted `SqliteWireFrameRow` database row into an immutable `WireFrameRecord`.
18
+ *
19
+ * Reconstructs the `Uint8Array` raw wire frame buffer, parses `canonical_json`, and freezes
20
+ * any `compacted_tombstones_json` dictionary.
21
+ *
22
+ * @param {SqliteWireFrameRow} row - Database row from `harness_wire_frames`.
23
+ *
24
+ * @returns {WireFrameRecord} Frozen wire frame record.
25
+ */
26
+ export function mapSqliteRowToWireFrameRecord(row) {
27
+ const tombstones = row.compacted_tombstones_json !== null
28
+ ? Object.freeze(JSON.parse(row.compacted_tombstones_json))
29
+ : undefined;
30
+ return Object.freeze({
31
+ messageId: row.message_id,
32
+ parentMessageId: row.parent_message_id,
33
+ vendorId: row.vendor_id,
34
+ rawWireFrame: new Uint8Array(row.raw_wire_frame),
35
+ canonical: JSON.parse(row.canonical_json),
36
+ prefixDigest: row.prefix_digest,
37
+ compactedTombstones: tombstones,
38
+ });
39
+ }
40
+ //# sourceMappingURL=sqlite-ledger-frame-operations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-ledger-frame-operations.js","sourceRoot":"","sources":["../../../src/stores/internal/sqlite-ledger-frame-operations.ts"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AACH,MAAM,UAAU,4BAA4B,CAAC,KAAsB;IACjE,IAAI,KAAK,CAAC,mBAAmB,KAAK,SAAS,EAAE,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;AACnD,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,6BAA6B,CAAC,GAAuB;IACnE,MAAM,UAAU,GACd,GAAG,CAAC,yBAAyB,KAAK,IAAI;QACpC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,yBAAyB,CAA2B,CAAC;QACpF,CAAC,CAAC,SAAS,CAAC;IAChB,OAAO,MAAM,CAAC,MAAM,CAAkB;QACpC,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,eAAe,EAAE,GAAG,CAAC,iBAAiB;QACtC,QAAQ,EAAE,GAAG,CAAC,SAAS;QACvB,YAAY,EAAE,IAAI,UAAU,CAAC,GAAG,CAAC,cAAc,CAAC;QAChD,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAqB;QAC7D,YAAY,EAAE,GAAG,CAAC,aAAa;QAC/B,mBAAmB,EAAE,UAAU;KAChC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,50 @@
1
+ import type { WireFrameRecord } from '@paraharness/core';
2
+ import type Database from 'better-sqlite3';
3
+ import type { MarkFrameTombstoneParams } from './mark-frame-tombstone-params.js';
4
+ /**
5
+ * Appends a `WireFrameRecord` to `harness_wire_frames` for `runId`.
6
+ *
7
+ * Persists both the raw vendor wire BLOB and the vendor-neutral `CanonicalMessage` JSON.
8
+ *
9
+ * @param {Database.Database} db - Active SQLite database handle.
10
+ * @param {string} runId - Enclosing flow run identifier.
11
+ * @param {WireFrameRecord} frame - Immutable wire frame record to append.
12
+ *
13
+ * @returns {void} Returns nothing once the frame is inserted.
14
+ */
15
+ export declare function appendMessageFrameInSqlite(db: Database.Database, runId: string, frame: WireFrameRecord): void;
16
+ /**
17
+ * Replaces an existing `WireFrameRecord` in-place in `harness_wire_frames`.
18
+ *
19
+ * Updates `raw_wire_frame`, `canonical_json`, and `compacted_tombstones_json` while preserving chain links.
20
+ *
21
+ * @param {Database.Database} db - Active SQLite database handle.
22
+ * @param {string} runId - Enclosing flow run identifier.
23
+ * @param {WireFrameRecord} frame - Updated wire frame record.
24
+ *
25
+ * @returns {void} Returns nothing once the frame is updated.
26
+ */
27
+ export declare function replaceMessageFrameInSqlite(db: Database.Database, runId: string, frame: WireFrameRecord): void;
28
+ /**
29
+ * Records a per-`callId` skill tombstone on an existing `WireFrameRecord` without mutating `raw_wire_frame`.
30
+ *
31
+ * Preserves byte-identical `raw_wire_frame` for same-model KV-cache hits while recording cross-model tombstones.
32
+ *
33
+ * @param {Database.Database} db - Active SQLite database handle.
34
+ * @param {MarkFrameTombstoneParams} params - Tombstone target coordinates and replacement string.
35
+ *
36
+ * @returns {void} Returns nothing once the tombstone map is updated.
37
+ */
38
+ export declare function markFrameTombstoneInSqlite(db: Database.Database, params: MarkFrameTombstoneParams): void;
39
+ /**
40
+ * Reconstructs the chronological root-to-leaf `WireFrameRecord[]` chain ending at `leafMessageId`.
41
+ *
42
+ * Walks `parent_message_id` pointers from `leafMessageId` to the root frame and reverses the sequence.
43
+ *
44
+ * @param {Database.Database} db - Active SQLite database handle.
45
+ * @param {string} leafMessageId - Identifier of the trailing message frame.
46
+ *
47
+ * @returns {readonly WireFrameRecord[]} Ordered root-to-leaf wire frame records.
48
+ */
49
+ export declare function getMessageChainFromSqlite(db: Database.Database, leafMessageId: string): readonly WireFrameRecord[];
50
+ //# sourceMappingURL=sqlite-ledger-frame-ops.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-ledger-frame-ops.d.ts","sourceRoot":"","sources":["../../../src/stores/internal/sqlite-ledger-frame-ops.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAOjF;;;;;;;;;;GAUG;AACH,wBAAgB,0BAA0B,CACxC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,eAAe,GACrB,IAAI,CAcN;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,2BAA2B,CACzC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,eAAe,GACrB,IAAI,CAmBN;AAED;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CACxC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,MAAM,EAAE,wBAAwB,GAC/B,IAAI,CAqBN;AAED;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CACvC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,aAAa,EAAE,MAAM,GACpB,SAAS,eAAe,EAAE,CAmB5B"}
@@ -0,0 +1,90 @@
1
+ import { mapSqliteRowToWireFrameRecord, serializeFrameTombstonesJson, } from './sqlite-ledger-frame-operations.js';
2
+ /**
3
+ * Appends a `WireFrameRecord` to `harness_wire_frames` for `runId`.
4
+ *
5
+ * Persists both the raw vendor wire BLOB and the vendor-neutral `CanonicalMessage` JSON.
6
+ *
7
+ * @param {Database.Database} db - Active SQLite database handle.
8
+ * @param {string} runId - Enclosing flow run identifier.
9
+ * @param {WireFrameRecord} frame - Immutable wire frame record to append.
10
+ *
11
+ * @returns {void} Returns nothing once the frame is inserted.
12
+ */
13
+ export function appendMessageFrameInSqlite(db, runId, frame) {
14
+ const tombstonesJson = serializeFrameTombstonesJson(frame);
15
+ db.prepare('INSERT INTO harness_wire_frames (message_id, run_id, parent_message_id, vendor_id, raw_wire_frame, canonical_json, prefix_digest, compacted_tombstones_json, is_compacted) VALUES (?, ?, ?, ?, ?, ?, ?, ?, 0)').run(frame.messageId, runId, frame.parentMessageId, frame.vendorId, Buffer.from(frame.rawWireFrame), JSON.stringify(frame.canonical), frame.prefixDigest, tombstonesJson);
16
+ }
17
+ /**
18
+ * Replaces an existing `WireFrameRecord` in-place in `harness_wire_frames`.
19
+ *
20
+ * Updates `raw_wire_frame`, `canonical_json`, and `compacted_tombstones_json` while preserving chain links.
21
+ *
22
+ * @param {Database.Database} db - Active SQLite database handle.
23
+ * @param {string} runId - Enclosing flow run identifier.
24
+ * @param {WireFrameRecord} frame - Updated wire frame record.
25
+ *
26
+ * @returns {void} Returns nothing once the frame is updated.
27
+ */
28
+ export function replaceMessageFrameInSqlite(db, runId, frame) {
29
+ const tombstonesJson = serializeFrameTombstonesJson(frame);
30
+ const updateResult = db
31
+ .prepare('UPDATE harness_wire_frames SET raw_wire_frame = ?, canonical_json = ?, prefix_digest = ?, compacted_tombstones_json = COALESCE(?, compacted_tombstones_json) WHERE message_id = ? AND run_id = ?')
32
+ .run(Buffer.from(frame.rawWireFrame), JSON.stringify(frame.canonical), frame.prefixDigest, tombstonesJson, frame.messageId, runId);
33
+ if (updateResult.changes === 0) {
34
+ throw new Error(`Cannot replace message frame '${frame.messageId}' for runId '${runId}': frame not found.`);
35
+ }
36
+ }
37
+ /**
38
+ * Records a per-`callId` skill tombstone on an existing `WireFrameRecord` without mutating `raw_wire_frame`.
39
+ *
40
+ * Preserves byte-identical `raw_wire_frame` for same-model KV-cache hits while recording cross-model tombstones.
41
+ *
42
+ * @param {Database.Database} db - Active SQLite database handle.
43
+ * @param {MarkFrameTombstoneParams} params - Tombstone target coordinates and replacement string.
44
+ *
45
+ * @returns {void} Returns nothing once the tombstone map is updated.
46
+ */
47
+ export function markFrameTombstoneInSqlite(db, params) {
48
+ const row = db
49
+ .prepare('SELECT compacted_tombstones_json FROM harness_wire_frames WHERE message_id = ? AND run_id = ?')
50
+ .get(params.messageId, params.runId);
51
+ if (row === undefined) {
52
+ throw new Error(`Cannot mark tombstone on unknown messageId '${params.messageId}' in runId '${params.runId}'.`);
53
+ }
54
+ const tombstones = row.compacted_tombstones_json !== null
55
+ ? JSON.parse(row.compacted_tombstones_json)
56
+ : {};
57
+ tombstones[params.callId] = params.compactedTombstone;
58
+ db.prepare('UPDATE harness_wire_frames SET compacted_tombstones_json = ? WHERE message_id = ? AND run_id = ?').run(JSON.stringify(tombstones), params.messageId, params.runId);
59
+ }
60
+ /**
61
+ * Reconstructs the chronological root-to-leaf `WireFrameRecord[]` chain ending at `leafMessageId`.
62
+ *
63
+ * Walks `parent_message_id` pointers from `leafMessageId` to the root frame and reverses the sequence.
64
+ *
65
+ * @param {Database.Database} db - Active SQLite database handle.
66
+ * @param {string} leafMessageId - Identifier of the trailing message frame.
67
+ *
68
+ * @returns {readonly WireFrameRecord[]} Ordered root-to-leaf wire frame records.
69
+ */
70
+ export function getMessageChainFromSqlite(db, leafMessageId) {
71
+ const stmt = db.prepare('SELECT * FROM harness_wire_frames WHERE message_id = ?');
72
+ const reversedChain = [];
73
+ const visited = new Set();
74
+ let currentId = leafMessageId;
75
+ while (currentId !== null) {
76
+ if (visited.has(currentId)) {
77
+ throw new Error(`Cycle detected in wire frame parent chain at messageId '${currentId}'.`);
78
+ }
79
+ visited.add(currentId);
80
+ const row = stmt.get(currentId);
81
+ if (row === undefined) {
82
+ break;
83
+ }
84
+ reversedChain.push(mapSqliteRowToWireFrameRecord(row));
85
+ currentId = row.parent_message_id;
86
+ }
87
+ reversedChain.reverse();
88
+ return Object.freeze(reversedChain);
89
+ }
90
+ //# sourceMappingURL=sqlite-ledger-frame-ops.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-ledger-frame-ops.js","sourceRoot":"","sources":["../../../src/stores/internal/sqlite-ledger-frame-ops.ts"],"names":[],"mappings":"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"}