open-multi-agent-kit 0.80.6 → 0.80.7

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 (981) hide show
  1. package/CHANGELOG.md +11 -1
  2. package/README.md +22 -14
  3. package/dist/cli/config-selector.d.ts +1 -1
  4. package/dist/cli/config-selector.d.ts.map +1 -1
  5. package/dist/cli/config-selector.js +1 -1
  6. package/dist/cli/config-selector.js.map +1 -1
  7. package/dist/config.d.ts +1 -0
  8. package/dist/config.d.ts.map +1 -1
  9. package/dist/config.js +9 -8
  10. package/dist/config.js.map +1 -1
  11. package/dist/core/agent-session.d.ts +45 -6
  12. package/dist/core/agent-session.d.ts.map +1 -1
  13. package/dist/core/agent-session.js +197 -13
  14. package/dist/core/agent-session.js.map +1 -1
  15. package/dist/core/auth-storage.d.ts +4 -1
  16. package/dist/core/auth-storage.d.ts.map +1 -1
  17. package/dist/core/auth-storage.js +5 -5
  18. package/dist/core/auth-storage.js.map +1 -1
  19. package/dist/core/bash-executor.d.ts.map +1 -1
  20. package/dist/core/bash-executor.js +1 -1
  21. package/dist/core/bash-executor.js.map +1 -1
  22. package/dist/core/command-safety.d.ts +11 -0
  23. package/dist/core/command-safety.d.ts.map +1 -0
  24. package/dist/core/command-safety.js +528 -0
  25. package/dist/core/command-safety.js.map +1 -0
  26. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  27. package/dist/core/compaction/branch-summarization.js +14 -4
  28. package/dist/core/compaction/branch-summarization.js.map +1 -1
  29. package/dist/core/compaction/compaction.d.ts +18 -1
  30. package/dist/core/compaction/compaction.d.ts.map +1 -1
  31. package/dist/core/compaction/compaction.js +80 -42
  32. package/dist/core/compaction/compaction.js.map +1 -1
  33. package/dist/core/compaction/pruner-policy.d.ts +84 -0
  34. package/dist/core/compaction/pruner-policy.d.ts.map +1 -0
  35. package/dist/core/compaction/pruner-policy.js +273 -0
  36. package/dist/core/compaction/pruner-policy.js.map +1 -0
  37. package/dist/core/context-graph-identity-resolution.d.ts +114 -0
  38. package/dist/core/context-graph-identity-resolution.d.ts.map +1 -0
  39. package/dist/core/context-graph-identity-resolution.js +127 -0
  40. package/dist/core/context-graph-identity-resolution.js.map +1 -0
  41. package/dist/core/context-graph-memory-store.d.ts +153 -0
  42. package/dist/core/context-graph-memory-store.d.ts.map +1 -0
  43. package/dist/core/context-graph-memory-store.js +377 -0
  44. package/dist/core/context-graph-memory-store.js.map +1 -0
  45. package/dist/core/context-graph-ontology-generation.d.ts +104 -0
  46. package/dist/core/context-graph-ontology-generation.d.ts.map +1 -0
  47. package/dist/core/context-graph-ontology-generation.js +135 -0
  48. package/dist/core/context-graph-ontology-generation.js.map +1 -0
  49. package/dist/core/context-graph-ontology-registry.d.ts +766 -0
  50. package/dist/core/context-graph-ontology-registry.d.ts.map +1 -0
  51. package/dist/core/context-graph-ontology-registry.js +1133 -0
  52. package/dist/core/context-graph-ontology-registry.js.map +1 -0
  53. package/dist/core/context-graph-policy.d.ts +68 -0
  54. package/dist/core/context-graph-policy.d.ts.map +1 -0
  55. package/dist/core/context-graph-policy.js +221 -0
  56. package/dist/core/context-graph-policy.js.map +1 -0
  57. package/dist/core/context-graph-reasoning.d.ts +130 -0
  58. package/dist/core/context-graph-reasoning.d.ts.map +1 -0
  59. package/dist/core/context-graph-reasoning.js +442 -0
  60. package/dist/core/context-graph-reasoning.js.map +1 -0
  61. package/dist/core/context-graph-retrieval.d.ts +120 -0
  62. package/dist/core/context-graph-retrieval.d.ts.map +1 -0
  63. package/dist/core/context-graph-retrieval.js +288 -0
  64. package/dist/core/context-graph-retrieval.js.map +1 -0
  65. package/dist/core/contract-verification.d.ts +78 -0
  66. package/dist/core/contract-verification.d.ts.map +1 -0
  67. package/dist/core/contract-verification.js +110 -0
  68. package/dist/core/contract-verification.js.map +1 -0
  69. package/dist/core/exact-cache-policy.d.ts +100 -0
  70. package/dist/core/exact-cache-policy.d.ts.map +1 -0
  71. package/dist/core/exact-cache-policy.js +175 -0
  72. package/dist/core/exact-cache-policy.js.map +1 -0
  73. package/dist/core/exec.d.ts +2 -0
  74. package/dist/core/exec.d.ts.map +1 -1
  75. package/dist/core/exec.js +1 -0
  76. package/dist/core/exec.js.map +1 -1
  77. package/dist/core/export-html/template.js +2 -2
  78. package/dist/core/extensions/builtin/command-safety-gate.d.ts +77 -0
  79. package/dist/core/extensions/builtin/command-safety-gate.d.ts.map +1 -0
  80. package/dist/core/extensions/builtin/command-safety-gate.js +147 -0
  81. package/dist/core/extensions/builtin/command-safety-gate.js.map +1 -0
  82. package/dist/core/extensions/loader.d.ts +4 -4
  83. package/dist/core/extensions/loader.d.ts.map +1 -1
  84. package/dist/core/extensions/loader.js +94 -56
  85. package/dist/core/extensions/loader.js.map +1 -1
  86. package/dist/core/extensions/runner.d.ts.map +1 -1
  87. package/dist/core/extensions/runner.js +1 -1
  88. package/dist/core/extensions/runner.js.map +1 -1
  89. package/dist/core/extensions/types.d.ts +38 -10
  90. package/dist/core/extensions/types.d.ts.map +1 -1
  91. package/dist/core/extensions/types.js.map +1 -1
  92. package/dist/core/freedom/banner.d.ts +14 -0
  93. package/dist/core/freedom/banner.d.ts.map +1 -0
  94. package/dist/core/freedom/banner.js +22 -0
  95. package/dist/core/freedom/banner.js.map +1 -0
  96. package/dist/core/freedom/config.d.ts +27 -0
  97. package/dist/core/freedom/config.d.ts.map +1 -0
  98. package/dist/core/freedom/config.js +216 -0
  99. package/dist/core/freedom/config.js.map +1 -0
  100. package/dist/core/freedom/index.d.ts +23 -0
  101. package/dist/core/freedom/index.d.ts.map +1 -0
  102. package/dist/core/freedom/index.js +19 -0
  103. package/dist/core/freedom/index.js.map +1 -0
  104. package/dist/core/freedom/policy.d.ts +42 -0
  105. package/dist/core/freedom/policy.d.ts.map +1 -0
  106. package/dist/core/freedom/policy.js +47 -0
  107. package/dist/core/freedom/policy.js.map +1 -0
  108. package/dist/core/freedom/safety-floor.d.ts +73 -0
  109. package/dist/core/freedom/safety-floor.d.ts.map +1 -0
  110. package/dist/core/freedom/safety-floor.js +275 -0
  111. package/dist/core/freedom/safety-floor.js.map +1 -0
  112. package/dist/core/harness-control-events.d.ts +13 -1
  113. package/dist/core/harness-control-events.d.ts.map +1 -1
  114. package/dist/core/harness-control-events.js +216 -41
  115. package/dist/core/harness-control-events.js.map +1 -1
  116. package/dist/core/harness-control-replay.d.ts +7 -2
  117. package/dist/core/harness-control-replay.d.ts.map +1 -1
  118. package/dist/core/harness-control-replay.js +36 -4
  119. package/dist/core/harness-control-replay.js.map +1 -1
  120. package/dist/core/headroom-middleware.d.ts +35 -0
  121. package/dist/core/headroom-middleware.d.ts.map +1 -0
  122. package/dist/core/headroom-middleware.js +166 -0
  123. package/dist/core/headroom-middleware.js.map +1 -0
  124. package/dist/core/hook-inventory.d.ts +23 -0
  125. package/dist/core/hook-inventory.d.ts.map +1 -0
  126. package/dist/core/hook-inventory.js +50 -0
  127. package/dist/core/hook-inventory.js.map +1 -0
  128. package/dist/core/lean-context-middleware.d.ts +12 -0
  129. package/dist/core/lean-context-middleware.d.ts.map +1 -0
  130. package/dist/core/lean-context-middleware.js +87 -0
  131. package/dist/core/lean-context-middleware.js.map +1 -0
  132. package/dist/core/lean-context-policy.d.ts +45 -0
  133. package/dist/core/lean-context-policy.d.ts.map +1 -0
  134. package/dist/core/lean-context-policy.js +108 -0
  135. package/dist/core/lean-context-policy.js.map +1 -0
  136. package/dist/core/loadout-access-policy.d.ts +41 -0
  137. package/dist/core/loadout-access-policy.d.ts.map +1 -0
  138. package/dist/core/loadout-access-policy.js +182 -0
  139. package/dist/core/loadout-access-policy.js.map +1 -0
  140. package/dist/core/loadout-runtime.d.ts +84 -0
  141. package/dist/core/loadout-runtime.d.ts.map +1 -0
  142. package/dist/core/loadout-runtime.js +157 -0
  143. package/dist/core/loadout-runtime.js.map +1 -0
  144. package/dist/core/loadouts.d.ts +147 -0
  145. package/dist/core/loadouts.d.ts.map +1 -0
  146. package/dist/core/loadouts.js +442 -0
  147. package/dist/core/loadouts.js.map +1 -0
  148. package/dist/core/mcp-inventory.d.ts +34 -0
  149. package/dist/core/mcp-inventory.d.ts.map +1 -1
  150. package/dist/core/mcp-inventory.js +53 -1
  151. package/dist/core/mcp-inventory.js.map +1 -1
  152. package/dist/core/mcp-presets.d.ts +57 -0
  153. package/dist/core/mcp-presets.d.ts.map +1 -0
  154. package/dist/core/mcp-presets.js +81 -0
  155. package/dist/core/mcp-presets.js.map +1 -0
  156. package/dist/core/model-registry.d.ts +1 -0
  157. package/dist/core/model-registry.d.ts.map +1 -1
  158. package/dist/core/model-registry.js +40 -17
  159. package/dist/core/model-registry.js.map +1 -1
  160. package/dist/core/model-resolver.d.ts.map +1 -1
  161. package/dist/core/model-resolver.js +1 -0
  162. package/dist/core/model-resolver.js.map +1 -1
  163. package/dist/core/native-adoption-benchmark.d.ts +166 -0
  164. package/dist/core/native-adoption-benchmark.d.ts.map +1 -0
  165. package/dist/core/native-adoption-benchmark.js +624 -0
  166. package/dist/core/native-adoption-benchmark.js.map +1 -0
  167. package/dist/core/observability-trace.d.ts +80 -0
  168. package/dist/core/observability-trace.d.ts.map +1 -0
  169. package/dist/core/observability-trace.js +140 -0
  170. package/dist/core/observability-trace.js.map +1 -0
  171. package/dist/core/orchestration/checkpoint.d.ts +83 -0
  172. package/dist/core/orchestration/checkpoint.d.ts.map +1 -0
  173. package/dist/core/orchestration/checkpoint.js +152 -0
  174. package/dist/core/orchestration/checkpoint.js.map +1 -0
  175. package/dist/core/orchestration/errors.d.ts +74 -0
  176. package/dist/core/orchestration/errors.d.ts.map +1 -0
  177. package/dist/core/orchestration/errors.js +52 -0
  178. package/dist/core/orchestration/errors.js.map +1 -0
  179. package/dist/core/orchestration/merge-queue.d.ts +121 -0
  180. package/dist/core/orchestration/merge-queue.d.ts.map +1 -0
  181. package/dist/core/orchestration/merge-queue.js +149 -0
  182. package/dist/core/orchestration/merge-queue.js.map +1 -0
  183. package/dist/core/orchestration/recovery.d.ts +106 -0
  184. package/dist/core/orchestration/recovery.d.ts.map +1 -0
  185. package/dist/core/orchestration/recovery.js +110 -0
  186. package/dist/core/orchestration/recovery.js.map +1 -0
  187. package/dist/core/orchestration/replay-ledger.d.ts +76 -0
  188. package/dist/core/orchestration/replay-ledger.d.ts.map +1 -0
  189. package/dist/core/orchestration/replay-ledger.js +395 -0
  190. package/dist/core/orchestration/replay-ledger.js.map +1 -0
  191. package/dist/core/orchestration/scheduler-state.d.ts +78 -0
  192. package/dist/core/orchestration/scheduler-state.d.ts.map +1 -0
  193. package/dist/core/orchestration/scheduler-state.js +185 -0
  194. package/dist/core/orchestration/scheduler-state.js.map +1 -0
  195. package/dist/core/orchestration/scheduler-store.d.ts +309 -0
  196. package/dist/core/orchestration/scheduler-store.d.ts.map +1 -0
  197. package/dist/core/orchestration/scheduler-store.js +368 -0
  198. package/dist/core/orchestration/scheduler-store.js.map +1 -0
  199. package/dist/core/orchestration/sqlite-scheduler-store.d.ts +57 -0
  200. package/dist/core/orchestration/sqlite-scheduler-store.d.ts.map +1 -0
  201. package/dist/core/orchestration/sqlite-scheduler-store.js +528 -0
  202. package/dist/core/orchestration/sqlite-scheduler-store.js.map +1 -0
  203. package/dist/core/orchestration/transaction-coordinator.d.ts +217 -0
  204. package/dist/core/orchestration/transaction-coordinator.d.ts.map +1 -0
  205. package/dist/core/orchestration/transaction-coordinator.js +281 -0
  206. package/dist/core/orchestration/transaction-coordinator.js.map +1 -0
  207. package/dist/core/orchestration/verification-contract.d.ts +197 -0
  208. package/dist/core/orchestration/verification-contract.d.ts.map +1 -0
  209. package/dist/core/orchestration/verification-contract.js +145 -0
  210. package/dist/core/orchestration/verification-contract.js.map +1 -0
  211. package/dist/core/package-composition.d.ts +68 -0
  212. package/dist/core/package-composition.d.ts.map +1 -0
  213. package/dist/core/package-composition.js +304 -0
  214. package/dist/core/package-composition.js.map +1 -0
  215. package/dist/core/package-gallery.d.ts +124 -0
  216. package/dist/core/package-gallery.d.ts.map +1 -0
  217. package/dist/core/package-gallery.js +392 -0
  218. package/dist/core/package-gallery.js.map +1 -0
  219. package/dist/core/package-manager.d.ts +69 -0
  220. package/dist/core/package-manager.d.ts.map +1 -1
  221. package/dist/core/package-manager.js +367 -69
  222. package/dist/core/package-manager.js.map +1 -1
  223. package/dist/core/package-procurement.d.ts +268 -0
  224. package/dist/core/package-procurement.d.ts.map +1 -0
  225. package/dist/core/package-procurement.js +697 -0
  226. package/dist/core/package-procurement.js.map +1 -0
  227. package/dist/core/package-trial-runtime.d.ts +75 -0
  228. package/dist/core/package-trial-runtime.d.ts.map +1 -0
  229. package/dist/core/package-trial-runtime.js +73 -0
  230. package/dist/core/package-trial-runtime.js.map +1 -0
  231. package/dist/core/package-trial-sandbox.d.ts +27 -0
  232. package/dist/core/package-trial-sandbox.d.ts.map +1 -0
  233. package/dist/core/package-trial-sandbox.js +102 -0
  234. package/dist/core/package-trial-sandbox.js.map +1 -0
  235. package/dist/core/policy-overlays-runtime.d.ts +141 -0
  236. package/dist/core/policy-overlays-runtime.d.ts.map +1 -0
  237. package/dist/core/policy-overlays-runtime.js +720 -0
  238. package/dist/core/policy-overlays-runtime.js.map +1 -0
  239. package/dist/core/read-anchor-registry.d.ts +27 -0
  240. package/dist/core/read-anchor-registry.d.ts.map +1 -0
  241. package/dist/core/read-anchor-registry.js +103 -0
  242. package/dist/core/read-anchor-registry.js.map +1 -0
  243. package/dist/core/read-anchors.d.ts +110 -0
  244. package/dist/core/read-anchors.d.ts.map +1 -0
  245. package/dist/core/read-anchors.js +193 -0
  246. package/dist/core/read-anchors.js.map +1 -0
  247. package/dist/core/read-content-cache.d.ts +22 -0
  248. package/dist/core/read-content-cache.d.ts.map +1 -0
  249. package/dist/core/read-content-cache.js +79 -0
  250. package/dist/core/read-content-cache.js.map +1 -0
  251. package/dist/core/recovery-checkpoint.d.ts +196 -0
  252. package/dist/core/recovery-checkpoint.d.ts.map +1 -0
  253. package/dist/core/recovery-checkpoint.js +382 -0
  254. package/dist/core/recovery-checkpoint.js.map +1 -0
  255. package/dist/core/resolve-config-value.d.ts +1 -1
  256. package/dist/core/resolve-config-value.d.ts.map +1 -1
  257. package/dist/core/resolve-config-value.js +30 -2
  258. package/dist/core/resolve-config-value.js.map +1 -1
  259. package/dist/core/resource-loader.d.ts +23 -21
  260. package/dist/core/resource-loader.d.ts.map +1 -1
  261. package/dist/core/resource-loader.js +93 -15
  262. package/dist/core/resource-loader.js.map +1 -1
  263. package/dist/core/sandbox/backend.d.ts +25 -0
  264. package/dist/core/sandbox/backend.d.ts.map +1 -0
  265. package/dist/core/sandbox/backend.js +150 -0
  266. package/dist/core/sandbox/backend.js.map +1 -0
  267. package/dist/core/sandbox/env.d.ts +6 -0
  268. package/dist/core/sandbox/env.d.ts.map +1 -0
  269. package/dist/core/sandbox/env.js +46 -0
  270. package/dist/core/sandbox/env.js.map +1 -0
  271. package/dist/core/sandbox/path-resolver.d.ts +4 -0
  272. package/dist/core/sandbox/path-resolver.d.ts.map +1 -0
  273. package/dist/core/sandbox/path-resolver.js +44 -0
  274. package/dist/core/sandbox/path-resolver.js.map +1 -0
  275. package/dist/core/sandbox/policy.d.ts +87 -0
  276. package/dist/core/sandbox/policy.d.ts.map +1 -0
  277. package/dist/core/sandbox/policy.js +280 -0
  278. package/dist/core/sandbox/policy.js.map +1 -0
  279. package/dist/core/sandbox/spawn.d.ts +20 -0
  280. package/dist/core/sandbox/spawn.d.ts.map +1 -0
  281. package/dist/core/sandbox/spawn.js +80 -0
  282. package/dist/core/sandbox/spawn.js.map +1 -0
  283. package/dist/core/sdk.d.ts +83 -4
  284. package/dist/core/sdk.d.ts.map +1 -1
  285. package/dist/core/sdk.js +143 -55
  286. package/dist/core/sdk.js.map +1 -1
  287. package/dist/core/semantic-cache-policy.d.ts +45 -0
  288. package/dist/core/semantic-cache-policy.d.ts.map +1 -0
  289. package/dist/core/semantic-cache-policy.js +220 -0
  290. package/dist/core/semantic-cache-policy.js.map +1 -0
  291. package/dist/core/session-digest.d.ts +57 -0
  292. package/dist/core/session-digest.d.ts.map +1 -0
  293. package/dist/core/session-digest.js +193 -0
  294. package/dist/core/session-digest.js.map +1 -0
  295. package/dist/core/session-manager.d.ts +2 -2
  296. package/dist/core/session-manager.d.ts.map +1 -1
  297. package/dist/core/session-manager.js +5 -4
  298. package/dist/core/session-manager.js.map +1 -1
  299. package/dist/core/settings-manager.d.ts +14 -0
  300. package/dist/core/settings-manager.d.ts.map +1 -1
  301. package/dist/core/settings-manager.js +43 -2
  302. package/dist/core/settings-manager.js.map +1 -1
  303. package/dist/core/system-prompt.d.ts.map +1 -1
  304. package/dist/core/system-prompt.js +25 -7
  305. package/dist/core/system-prompt.js.map +1 -1
  306. package/dist/core/telemetry.d.ts.map +1 -1
  307. package/dist/core/telemetry.js +1 -1
  308. package/dist/core/telemetry.js.map +1 -1
  309. package/dist/core/timings.d.ts +1 -1
  310. package/dist/core/timings.d.ts.map +1 -1
  311. package/dist/core/timings.js +2 -2
  312. package/dist/core/timings.js.map +1 -1
  313. package/dist/core/tools/bash.d.ts +28 -3
  314. package/dist/core/tools/bash.d.ts.map +1 -1
  315. package/dist/core/tools/bash.js +53 -10
  316. package/dist/core/tools/bash.js.map +1 -1
  317. package/dist/core/tools/edit.d.ts +12 -0
  318. package/dist/core/tools/edit.d.ts.map +1 -1
  319. package/dist/core/tools/edit.js +24 -0
  320. package/dist/core/tools/edit.js.map +1 -1
  321. package/dist/core/tools/find.d.ts +3 -0
  322. package/dist/core/tools/find.d.ts.map +1 -1
  323. package/dist/core/tools/find.js +3 -0
  324. package/dist/core/tools/find.js.map +1 -1
  325. package/dist/core/tools/grep.d.ts +3 -0
  326. package/dist/core/tools/grep.d.ts.map +1 -1
  327. package/dist/core/tools/grep.js +4 -1
  328. package/dist/core/tools/grep.js.map +1 -1
  329. package/dist/core/tools/index.d.ts +1 -1
  330. package/dist/core/tools/index.d.ts.map +1 -1
  331. package/dist/core/tools/index.js.map +1 -1
  332. package/dist/core/tools/ls.d.ts +3 -0
  333. package/dist/core/tools/ls.d.ts.map +1 -1
  334. package/dist/core/tools/ls.js +3 -0
  335. package/dist/core/tools/ls.js.map +1 -1
  336. package/dist/core/tools/output-accumulator.d.ts.map +1 -1
  337. package/dist/core/tools/output-accumulator.js +1 -1
  338. package/dist/core/tools/output-accumulator.js.map +1 -1
  339. package/dist/core/tools/read.d.ts +13 -0
  340. package/dist/core/tools/read.d.ts.map +1 -1
  341. package/dist/core/tools/read.js +29 -2
  342. package/dist/core/tools/read.js.map +1 -1
  343. package/dist/core/tools/write.d.ts +3 -0
  344. package/dist/core/tools/write.d.ts.map +1 -1
  345. package/dist/core/tools/write.js +3 -0
  346. package/dist/core/tools/write.js.map +1 -1
  347. package/dist/index.d.ts +19 -4
  348. package/dist/index.d.ts.map +1 -1
  349. package/dist/index.js +17 -2
  350. package/dist/index.js.map +1 -1
  351. package/dist/main.d.ts.map +1 -1
  352. package/dist/main.js +4 -6
  353. package/dist/main.js.map +1 -1
  354. package/dist/migrations.d.ts.map +1 -1
  355. package/dist/migrations.js +1 -1
  356. package/dist/migrations.js.map +1 -1
  357. package/dist/modes/interactive/components/control-panel-gradient-motion.d.ts +28 -0
  358. package/dist/modes/interactive/components/control-panel-gradient-motion.d.ts.map +1 -0
  359. package/dist/modes/interactive/components/control-panel-gradient-motion.js +146 -0
  360. package/dist/modes/interactive/components/control-panel-gradient-motion.js.map +1 -0
  361. package/dist/modes/interactive/components/control-panel-gradient.d.ts +27 -0
  362. package/dist/modes/interactive/components/control-panel-gradient.d.ts.map +1 -0
  363. package/dist/modes/interactive/components/control-panel-gradient.js +127 -0
  364. package/dist/modes/interactive/components/control-panel-gradient.js.map +1 -0
  365. package/dist/modes/interactive/components/control-panel.d.ts +28 -1
  366. package/dist/modes/interactive/components/control-panel.d.ts.map +1 -1
  367. package/dist/modes/interactive/components/control-panel.js +153 -3
  368. package/dist/modes/interactive/components/control-panel.js.map +1 -1
  369. package/dist/modes/interactive/components/earendil-announcement.d.ts.map +1 -1
  370. package/dist/modes/interactive/components/earendil-announcement.js +1 -1
  371. package/dist/modes/interactive/components/earendil-announcement.js.map +1 -1
  372. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  373. package/dist/modes/interactive/components/extension-editor.js +1 -1
  374. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  375. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  376. package/dist/modes/interactive/components/footer.js +8 -0
  377. package/dist/modes/interactive/components/footer.js.map +1 -1
  378. package/dist/modes/interactive/components/mcp-selector.d.ts +2 -0
  379. package/dist/modes/interactive/components/mcp-selector.d.ts.map +1 -1
  380. package/dist/modes/interactive/components/mcp-selector.js +18 -1
  381. package/dist/modes/interactive/components/mcp-selector.js.map +1 -1
  382. package/dist/modes/interactive/components/model-selector-state.d.ts +101 -0
  383. package/dist/modes/interactive/components/model-selector-state.d.ts.map +1 -0
  384. package/dist/modes/interactive/components/model-selector-state.js +261 -0
  385. package/dist/modes/interactive/components/model-selector-state.js.map +1 -0
  386. package/dist/modes/interactive/components/model-selector.d.ts +44 -10
  387. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  388. package/dist/modes/interactive/components/model-selector.js +163 -110
  389. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  390. package/dist/modes/interactive/components/theme-selector.d.ts +1 -0
  391. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -1
  392. package/dist/modes/interactive/components/theme-selector.js +10 -1
  393. package/dist/modes/interactive/components/theme-selector.js.map +1 -1
  394. package/dist/modes/interactive/interactive-mode.d.ts +4 -2
  395. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  396. package/dist/modes/interactive/interactive-mode.js +61 -13
  397. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  398. package/dist/modes/interactive/theme/omk-blackboard.json +91 -0
  399. package/dist/modes/interactive/theme/omk-freedom-grid.json +91 -0
  400. package/dist/modes/interactive/theme/omk-neon-ops.json +90 -0
  401. package/dist/modes/interactive/theme/omk-slate-light.json +91 -0
  402. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  403. package/dist/modes/interactive/theme/theme.js +14 -0
  404. package/dist/modes/interactive/theme/theme.js.map +1 -1
  405. package/dist/modes/print-mode.d.ts +2 -2
  406. package/dist/modes/print-mode.d.ts.map +1 -1
  407. package/dist/modes/print-mode.js +2 -2
  408. package/dist/modes/print-mode.js.map +1 -1
  409. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  410. package/dist/modes/rpc/rpc-mode.js +4 -0
  411. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  412. package/dist/package-manager-cli.d.ts.map +1 -1
  413. package/dist/package-manager-cli.js +114 -49
  414. package/dist/package-manager-cli.js.map +1 -1
  415. package/dist/utils/clipboard-image.d.ts.map +1 -1
  416. package/dist/utils/clipboard-image.js +1 -1
  417. package/dist/utils/clipboard-image.js.map +1 -1
  418. package/dist/utils/omk-user-agent.d.ts +2 -0
  419. package/dist/utils/omk-user-agent.d.ts.map +1 -0
  420. package/dist/utils/{pi-user-agent.js → omk-user-agent.js} +2 -2
  421. package/dist/utils/omk-user-agent.js.map +1 -0
  422. package/dist/utils/tools-manager.d.ts.map +1 -1
  423. package/dist/utils/tools-manager.js +1 -1
  424. package/dist/utils/tools-manager.js.map +1 -1
  425. package/dist/utils/version-check.d.ts +5 -5
  426. package/dist/utils/version-check.d.ts.map +1 -1
  427. package/dist/utils/version-check.js +8 -11
  428. package/dist/utils/version-check.js.map +1 -1
  429. package/dist/utils/windows-self-update.d.ts.map +1 -1
  430. package/dist/utils/windows-self-update.js +1 -1
  431. package/dist/utils/windows-self-update.js.map +1 -1
  432. package/docs/packages.md +47 -6
  433. package/docs/prompt-templates.md +2 -0
  434. package/docs/usage.md +16 -6
  435. package/examples/README.md +1 -1
  436. package/examples/extensions/README.md +11 -11
  437. package/examples/extensions/auto-commit-on-exit.ts +6 -6
  438. package/examples/extensions/bash-spawn-hook.ts +4 -4
  439. package/examples/extensions/bookmark.ts +5 -5
  440. package/examples/extensions/border-status-editor.ts +7 -7
  441. package/examples/extensions/built-in-tool-renderer.ts +6 -6
  442. package/examples/extensions/claude-rules.ts +4 -4
  443. package/examples/extensions/commands.ts +5 -5
  444. package/examples/extensions/confirm-destructive.ts +3 -3
  445. package/examples/extensions/custom-compaction.ts +3 -3
  446. package/examples/extensions/custom-footer.ts +2 -2
  447. package/examples/extensions/custom-header.ts +5 -5
  448. package/examples/extensions/custom-provider-anthropic/index.ts +4 -4
  449. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  450. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  451. package/examples/extensions/custom-provider-gitlab-duo/index.ts +3 -3
  452. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  453. package/examples/extensions/dirty-repo-guard.ts +7 -7
  454. package/examples/extensions/doom-overlay/README.md +3 -3
  455. package/examples/extensions/doom-overlay/doom/build.sh +2 -2
  456. package/examples/extensions/doom-overlay/doom/doomgeneric_pi.c +1 -1
  457. package/examples/extensions/doom-overlay/index.ts +3 -3
  458. package/examples/extensions/dynamic-resources/dynamic.json +1 -1
  459. package/examples/extensions/dynamic-resources/index.ts +2 -2
  460. package/examples/extensions/dynamic-tools.ts +4 -4
  461. package/examples/extensions/event-bus.ts +8 -8
  462. package/examples/extensions/file-trigger.ts +3 -3
  463. package/examples/extensions/git-checkpoint.ts +7 -7
  464. package/examples/extensions/git-merge-and-resolve.ts +14 -14
  465. package/examples/extensions/github-issue-autocomplete.ts +6 -6
  466. package/examples/extensions/gondolin/index.ts +16 -16
  467. package/examples/extensions/gondolin/package-lock.json +2 -2
  468. package/examples/extensions/gondolin/package.json +1 -1
  469. package/examples/extensions/handoff.ts +2 -2
  470. package/examples/extensions/hello.ts +2 -2
  471. package/examples/extensions/hidden-thinking-label.ts +4 -4
  472. package/examples/extensions/inline-bash.ts +5 -5
  473. package/examples/extensions/input-transform-streaming.ts +5 -5
  474. package/examples/extensions/input-transform.ts +5 -5
  475. package/examples/extensions/interactive-shell.ts +3 -3
  476. package/examples/extensions/mac-system-theme.ts +5 -5
  477. package/examples/extensions/message-renderer.ts +4 -4
  478. package/examples/extensions/minimal-mode.ts +9 -9
  479. package/examples/extensions/modal-editor.ts +3 -3
  480. package/examples/extensions/model-status.ts +3 -3
  481. package/examples/extensions/notify.ts +5 -5
  482. package/examples/extensions/overlay-qa-tests.ts +20 -20
  483. package/examples/extensions/overlay-test.ts +3 -3
  484. package/examples/extensions/permission-gate.ts +2 -2
  485. package/examples/extensions/pirate.ts +4 -4
  486. package/examples/extensions/plan-mode/index.ts +22 -22
  487. package/examples/extensions/preset.ts +30 -30
  488. package/examples/extensions/prompt-customizer.ts +3 -3
  489. package/examples/extensions/protected-paths.ts +2 -2
  490. package/examples/extensions/provider-payload.ts +5 -5
  491. package/examples/extensions/qna.ts +2 -2
  492. package/examples/extensions/question.ts +2 -2
  493. package/examples/extensions/questionnaire.ts +2 -2
  494. package/examples/extensions/rainbow-editor.ts +3 -3
  495. package/examples/extensions/reload-runtime.ts +4 -4
  496. package/examples/extensions/rpc-demo.ts +10 -10
  497. package/examples/extensions/sandbox/index.ts +17 -17
  498. package/examples/extensions/sandbox/package-lock.json +2 -2
  499. package/examples/extensions/sandbox/package.json +1 -1
  500. package/examples/extensions/send-user-message.ts +13 -13
  501. package/examples/extensions/session-name.ts +4 -4
  502. package/examples/extensions/shutdown-command.ts +10 -10
  503. package/examples/extensions/snake.ts +3 -3
  504. package/examples/extensions/space-invaders.ts +3 -3
  505. package/examples/extensions/ssh.ts +12 -12
  506. package/examples/extensions/status-line.ts +4 -4
  507. package/examples/extensions/structured-output.ts +2 -2
  508. package/examples/extensions/subagent/README.md +13 -13
  509. package/examples/extensions/subagent/agents.ts +2 -2
  510. package/examples/extensions/subagent/index.ts +53 -21
  511. package/examples/extensions/summarize.ts +2 -2
  512. package/examples/extensions/system-prompt-header.ts +3 -3
  513. package/examples/extensions/tic-tac-toe.ts +15 -15
  514. package/examples/extensions/timed-confirm.ts +4 -4
  515. package/examples/extensions/titlebar-spinner.ts +9 -9
  516. package/examples/extensions/todo.ts +5 -5
  517. package/examples/extensions/tool-override.ts +5 -5
  518. package/examples/extensions/tools.ts +10 -10
  519. package/examples/extensions/trigger-compact.ts +3 -3
  520. package/examples/extensions/truncated-tool.ts +3 -3
  521. package/examples/extensions/widget-placement.ts +2 -2
  522. package/examples/extensions/with-deps/index.ts +2 -2
  523. package/examples/extensions/with-deps/package-lock.json +2 -2
  524. package/examples/extensions/with-deps/package.json +1 -1
  525. package/examples/extensions/working-indicator.ts +7 -7
  526. package/examples/extensions/working-message-test.ts +3 -3
  527. package/examples/sdk/01-minimal.ts +1 -1
  528. package/examples/sdk/03-custom-prompt.ts +1 -1
  529. package/examples/sdk/04-skills.ts +1 -1
  530. package/examples/sdk/05-tools.ts +1 -1
  531. package/examples/sdk/06-extensions.ts +11 -11
  532. package/examples/sdk/07-context-files.ts +2 -0
  533. package/examples/sdk/08-prompt-templates.ts +1 -1
  534. package/examples/sdk/09-api-keys-and-oauth.ts +2 -2
  535. package/examples/sdk/README.md +2 -2
  536. package/node_modules/@earendil-works/omk-agent-core/README.md +488 -0
  537. package/node_modules/@earendil-works/omk-agent-core/dist/agent-loop.d.ts +24 -0
  538. package/node_modules/@earendil-works/omk-agent-core/dist/agent-loop.d.ts.map +1 -0
  539. package/node_modules/@earendil-works/omk-agent-core/dist/agent-loop.js +553 -0
  540. package/node_modules/@earendil-works/omk-agent-core/dist/agent-loop.js.map +1 -0
  541. package/node_modules/@earendil-works/omk-agent-core/dist/agent.d.ts +118 -0
  542. package/node_modules/@earendil-works/omk-agent-core/dist/agent.d.ts.map +1 -0
  543. package/node_modules/@earendil-works/omk-agent-core/dist/agent.js +402 -0
  544. package/node_modules/@earendil-works/omk-agent-core/dist/agent.js.map +1 -0
  545. package/node_modules/@earendil-works/omk-agent-core/dist/harness/agent-harness.d.ts +95 -0
  546. package/node_modules/@earendil-works/omk-agent-core/dist/harness/agent-harness.d.ts.map +1 -0
  547. package/node_modules/@earendil-works/omk-agent-core/dist/harness/agent-harness.js +996 -0
  548. package/node_modules/@earendil-works/omk-agent-core/dist/harness/agent-harness.js.map +1 -0
  549. package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/branch-summarization.d.ts +53 -0
  550. package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/branch-summarization.d.ts.map +1 -0
  551. package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/branch-summarization.js +175 -0
  552. package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/branch-summarization.js.map +1 -0
  553. package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/compaction.d.ts +117 -0
  554. package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/compaction.d.ts.map +1 -0
  555. package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/compaction.js +568 -0
  556. package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/compaction.js.map +1 -0
  557. package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/utils.d.ts +25 -0
  558. package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/utils.d.ts.map +1 -0
  559. package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/utils.js +131 -0
  560. package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/utils.js.map +1 -0
  561. package/node_modules/@earendil-works/omk-agent-core/dist/harness/env/nodejs.d.ts +51 -0
  562. package/node_modules/@earendil-works/omk-agent-core/dist/harness/env/nodejs.d.ts.map +1 -0
  563. package/node_modules/@earendil-works/omk-agent-core/dist/harness/env/nodejs.js +510 -0
  564. package/node_modules/@earendil-works/omk-agent-core/dist/harness/env/nodejs.js.map +1 -0
  565. package/node_modules/@earendil-works/omk-agent-core/dist/harness/messages.d.ts +51 -0
  566. package/node_modules/@earendil-works/omk-agent-core/dist/harness/messages.d.ts.map +1 -0
  567. package/node_modules/@earendil-works/omk-agent-core/dist/harness/messages.js +102 -0
  568. package/node_modules/@earendil-works/omk-agent-core/dist/harness/messages.js.map +1 -0
  569. package/node_modules/@earendil-works/omk-agent-core/dist/harness/prompt-templates.d.ts +48 -0
  570. package/node_modules/@earendil-works/omk-agent-core/dist/harness/prompt-templates.d.ts.map +1 -0
  571. package/node_modules/@earendil-works/omk-agent-core/dist/harness/prompt-templates.js +230 -0
  572. package/node_modules/@earendil-works/omk-agent-core/dist/harness/prompt-templates.js.map +1 -0
  573. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/jsonl-repo.d.ts +26 -0
  574. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/jsonl-repo.d.ts.map +1 -0
  575. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/jsonl-repo.js +101 -0
  576. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/jsonl-repo.js.map +1 -0
  577. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/jsonl-storage.d.ts +36 -0
  578. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/jsonl-storage.d.ts.map +1 -0
  579. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/jsonl-storage.js +273 -0
  580. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/jsonl-storage.js.map +1 -0
  581. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/memory-repo.d.ts +18 -0
  582. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/memory-repo.d.ts.map +1 -0
  583. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/memory-repo.js +42 -0
  584. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/memory-repo.js.map +1 -0
  585. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/memory-storage.d.ts +25 -0
  586. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/memory-storage.d.ts.map +1 -0
  587. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/memory-storage.js +114 -0
  588. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/memory-storage.js.map +1 -0
  589. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/repo-utils.d.ts +11 -0
  590. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/repo-utils.d.ts.map +1 -0
  591. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/repo-utils.js +39 -0
  592. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/repo-utils.js.map +1 -0
  593. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/session.d.ts +33 -0
  594. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/session.d.ts.map +1 -0
  595. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/session.js +210 -0
  596. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/session.js.map +1 -0
  597. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/uuid.d.ts +2 -0
  598. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/uuid.d.ts.map +1 -0
  599. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/uuid.js +50 -0
  600. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/uuid.js.map +1 -0
  601. package/node_modules/@earendil-works/omk-agent-core/dist/harness/skills.d.ts +44 -0
  602. package/node_modules/@earendil-works/omk-agent-core/dist/harness/skills.d.ts.map +1 -0
  603. package/node_modules/@earendil-works/omk-agent-core/dist/harness/skills.js +311 -0
  604. package/node_modules/@earendil-works/omk-agent-core/dist/harness/skills.js.map +1 -0
  605. package/node_modules/@earendil-works/omk-agent-core/dist/harness/system-prompt.d.ts +3 -0
  606. package/node_modules/@earendil-works/omk-agent-core/dist/harness/system-prompt.d.ts.map +1 -0
  607. package/node_modules/@earendil-works/omk-agent-core/dist/harness/system-prompt.js +30 -0
  608. package/node_modules/@earendil-works/omk-agent-core/dist/harness/system-prompt.js.map +1 -0
  609. package/node_modules/@earendil-works/omk-agent-core/dist/harness/types.d.ts +616 -0
  610. package/node_modules/@earendil-works/omk-agent-core/dist/harness/types.d.ts.map +1 -0
  611. package/node_modules/@earendil-works/omk-agent-core/dist/harness/types.js +94 -0
  612. package/node_modules/@earendil-works/omk-agent-core/dist/harness/types.js.map +1 -0
  613. package/node_modules/@earendil-works/omk-agent-core/dist/harness/utils/shell-output.d.ts +14 -0
  614. package/node_modules/@earendil-works/omk-agent-core/dist/harness/utils/shell-output.d.ts.map +1 -0
  615. package/node_modules/@earendil-works/omk-agent-core/dist/harness/utils/shell-output.js +126 -0
  616. package/node_modules/@earendil-works/omk-agent-core/dist/harness/utils/shell-output.js.map +1 -0
  617. package/node_modules/@earendil-works/omk-agent-core/dist/harness/utils/truncate.d.ts +70 -0
  618. package/node_modules/@earendil-works/omk-agent-core/dist/harness/utils/truncate.d.ts.map +1 -0
  619. package/node_modules/@earendil-works/omk-agent-core/dist/harness/utils/truncate.js +297 -0
  620. package/node_modules/@earendil-works/omk-agent-core/dist/harness/utils/truncate.js.map +1 -0
  621. package/node_modules/@earendil-works/omk-agent-core/dist/index.d.ts +20 -0
  622. package/node_modules/@earendil-works/omk-agent-core/dist/index.d.ts.map +1 -0
  623. package/node_modules/@earendil-works/omk-agent-core/dist/index.js +25 -0
  624. package/node_modules/@earendil-works/omk-agent-core/dist/index.js.map +1 -0
  625. package/node_modules/@earendil-works/omk-agent-core/dist/node.d.ts +3 -0
  626. package/node_modules/@earendil-works/omk-agent-core/dist/node.d.ts.map +1 -0
  627. package/node_modules/@earendil-works/omk-agent-core/dist/node.js +3 -0
  628. package/node_modules/@earendil-works/omk-agent-core/dist/node.js.map +1 -0
  629. package/node_modules/@earendil-works/omk-agent-core/dist/proxy.d.ts +69 -0
  630. package/node_modules/@earendil-works/omk-agent-core/dist/proxy.d.ts.map +1 -0
  631. package/node_modules/@earendil-works/omk-agent-core/dist/proxy.js +278 -0
  632. package/node_modules/@earendil-works/omk-agent-core/dist/proxy.js.map +1 -0
  633. package/node_modules/@earendil-works/omk-agent-core/dist/types.d.ts +393 -0
  634. package/node_modules/@earendil-works/omk-agent-core/dist/types.d.ts.map +1 -0
  635. package/node_modules/@earendil-works/omk-agent-core/dist/types.js +2 -0
  636. package/node_modules/@earendil-works/omk-agent-core/dist/types.js.map +1 -0
  637. package/node_modules/@earendil-works/omk-agent-core/package.json +60 -0
  638. package/node_modules/@earendil-works/omk-ai/README.md +1389 -0
  639. package/node_modules/@earendil-works/omk-ai/dist/api-registry.d.ts +20 -0
  640. package/node_modules/@earendil-works/omk-ai/dist/api-registry.d.ts.map +1 -0
  641. package/node_modules/@earendil-works/omk-ai/dist/api-registry.js +44 -0
  642. package/node_modules/@earendil-works/omk-ai/dist/api-registry.js.map +1 -0
  643. package/node_modules/@earendil-works/omk-ai/dist/bedrock-provider.d.ts +5 -0
  644. package/node_modules/@earendil-works/omk-ai/dist/bedrock-provider.d.ts.map +1 -0
  645. package/node_modules/@earendil-works/omk-ai/dist/bedrock-provider.js +6 -0
  646. package/node_modules/@earendil-works/omk-ai/dist/bedrock-provider.js.map +1 -0
  647. package/node_modules/@earendil-works/omk-ai/dist/cli.d.ts +3 -0
  648. package/node_modules/@earendil-works/omk-ai/dist/cli.d.ts.map +1 -0
  649. package/node_modules/@earendil-works/omk-ai/dist/cli.js +130 -0
  650. package/node_modules/@earendil-works/omk-ai/dist/cli.js.map +1 -0
  651. package/node_modules/@earendil-works/omk-ai/dist/env-api-keys.d.ts +20 -0
  652. package/node_modules/@earendil-works/omk-ai/dist/env-api-keys.d.ts.map +1 -0
  653. package/node_modules/@earendil-works/omk-ai/dist/env-api-keys.js +199 -0
  654. package/node_modules/@earendil-works/omk-ai/dist/env-api-keys.js.map +1 -0
  655. package/node_modules/@earendil-works/omk-ai/dist/image-models.d.ts +10 -0
  656. package/node_modules/@earendil-works/omk-ai/dist/image-models.d.ts.map +1 -0
  657. package/node_modules/@earendil-works/omk-ai/dist/image-models.generated.d.ts +515 -0
  658. package/node_modules/@earendil-works/omk-ai/dist/image-models.generated.d.ts.map +1 -0
  659. package/node_modules/@earendil-works/omk-ai/dist/image-models.generated.js +517 -0
  660. package/node_modules/@earendil-works/omk-ai/dist/image-models.generated.js.map +1 -0
  661. package/node_modules/@earendil-works/omk-ai/dist/image-models.js +23 -0
  662. package/node_modules/@earendil-works/omk-ai/dist/image-models.js.map +1 -0
  663. package/node_modules/@earendil-works/omk-ai/dist/images-api-registry.d.ts +14 -0
  664. package/node_modules/@earendil-works/omk-ai/dist/images-api-registry.d.ts.map +1 -0
  665. package/node_modules/@earendil-works/omk-ai/dist/images-api-registry.js +22 -0
  666. package/node_modules/@earendil-works/omk-ai/dist/images-api-registry.js.map +1 -0
  667. package/node_modules/@earendil-works/omk-ai/dist/images.d.ts +4 -0
  668. package/node_modules/@earendil-works/omk-ai/dist/images.d.ts.map +1 -0
  669. package/node_modules/@earendil-works/omk-ai/dist/images.js +16 -0
  670. package/node_modules/@earendil-works/omk-ai/dist/images.js.map +1 -0
  671. package/node_modules/@earendil-works/omk-ai/dist/index.d.ts +33 -0
  672. package/node_modules/@earendil-works/omk-ai/dist/index.d.ts.map +1 -0
  673. package/node_modules/@earendil-works/omk-ai/dist/index.js +21 -0
  674. package/node_modules/@earendil-works/omk-ai/dist/index.js.map +1 -0
  675. package/node_modules/@earendil-works/omk-ai/dist/models.d.ts +18 -0
  676. package/node_modules/@earendil-works/omk-ai/dist/models.d.ts.map +1 -0
  677. package/node_modules/@earendil-works/omk-ai/dist/models.generated.d.ts +18762 -0
  678. package/node_modules/@earendil-works/omk-ai/dist/models.generated.d.ts.map +1 -0
  679. package/node_modules/@earendil-works/omk-ai/dist/models.generated.js +17197 -0
  680. package/node_modules/@earendil-works/omk-ai/dist/models.generated.js.map +1 -0
  681. package/node_modules/@earendil-works/omk-ai/dist/models.js +78 -0
  682. package/node_modules/@earendil-works/omk-ai/dist/models.js.map +1 -0
  683. package/node_modules/@earendil-works/omk-ai/dist/oauth.d.ts +2 -0
  684. package/node_modules/@earendil-works/omk-ai/dist/oauth.d.ts.map +1 -0
  685. package/node_modules/@earendil-works/omk-ai/dist/oauth.js +2 -0
  686. package/node_modules/@earendil-works/omk-ai/dist/oauth.js.map +1 -0
  687. package/node_modules/@earendil-works/omk-ai/dist/provider-network.d.ts +39 -0
  688. package/node_modules/@earendil-works/omk-ai/dist/provider-network.d.ts.map +1 -0
  689. package/node_modules/@earendil-works/omk-ai/dist/provider-network.js +170 -0
  690. package/node_modules/@earendil-works/omk-ai/dist/provider-network.js.map +1 -0
  691. package/node_modules/@earendil-works/omk-ai/dist/providers/amazon-bedrock.d.ts +38 -0
  692. package/node_modules/@earendil-works/omk-ai/dist/providers/amazon-bedrock.d.ts.map +1 -0
  693. package/node_modules/@earendil-works/omk-ai/dist/providers/amazon-bedrock.js +826 -0
  694. package/node_modules/@earendil-works/omk-ai/dist/providers/amazon-bedrock.js.map +1 -0
  695. package/node_modules/@earendil-works/omk-ai/dist/providers/anthropic.d.ts +77 -0
  696. package/node_modules/@earendil-works/omk-ai/dist/providers/anthropic.d.ts.map +1 -0
  697. package/node_modules/@earendil-works/omk-ai/dist/providers/anthropic.js +1123 -0
  698. package/node_modules/@earendil-works/omk-ai/dist/providers/anthropic.js.map +1 -0
  699. package/node_modules/@earendil-works/omk-ai/dist/providers/azure-openai-responses.d.ts +15 -0
  700. package/node_modules/@earendil-works/omk-ai/dist/providers/azure-openai-responses.d.ts.map +1 -0
  701. package/node_modules/@earendil-works/omk-ai/dist/providers/azure-openai-responses.js +221 -0
  702. package/node_modules/@earendil-works/omk-ai/dist/providers/azure-openai-responses.js.map +1 -0
  703. package/node_modules/@earendil-works/omk-ai/dist/providers/cloudflare.d.ts +13 -0
  704. package/node_modules/@earendil-works/omk-ai/dist/providers/cloudflare.d.ts.map +1 -0
  705. package/node_modules/@earendil-works/omk-ai/dist/providers/cloudflare.js +26 -0
  706. package/node_modules/@earendil-works/omk-ai/dist/providers/cloudflare.js.map +1 -0
  707. package/node_modules/@earendil-works/omk-ai/dist/providers/faux.d.ts +56 -0
  708. package/node_modules/@earendil-works/omk-ai/dist/providers/faux.d.ts.map +1 -0
  709. package/node_modules/@earendil-works/omk-ai/dist/providers/faux.js +368 -0
  710. package/node_modules/@earendil-works/omk-ai/dist/providers/faux.js.map +1 -0
  711. package/node_modules/@earendil-works/omk-ai/dist/providers/github-copilot-headers.d.ts +8 -0
  712. package/node_modules/@earendil-works/omk-ai/dist/providers/github-copilot-headers.d.ts.map +1 -0
  713. package/node_modules/@earendil-works/omk-ai/dist/providers/github-copilot-headers.js +29 -0
  714. package/node_modules/@earendil-works/omk-ai/dist/providers/github-copilot-headers.js.map +1 -0
  715. package/node_modules/@earendil-works/omk-ai/dist/providers/google-shared.d.ts +70 -0
  716. package/node_modules/@earendil-works/omk-ai/dist/providers/google-shared.d.ts.map +1 -0
  717. package/node_modules/@earendil-works/omk-ai/dist/providers/google-shared.js +331 -0
  718. package/node_modules/@earendil-works/omk-ai/dist/providers/google-shared.js.map +1 -0
  719. package/node_modules/@earendil-works/omk-ai/dist/providers/google-vertex.d.ts +15 -0
  720. package/node_modules/@earendil-works/omk-ai/dist/providers/google-vertex.d.ts.map +1 -0
  721. package/node_modules/@earendil-works/omk-ai/dist/providers/google-vertex.js +442 -0
  722. package/node_modules/@earendil-works/omk-ai/dist/providers/google-vertex.js.map +1 -0
  723. package/node_modules/@earendil-works/omk-ai/dist/providers/google.d.ts +13 -0
  724. package/node_modules/@earendil-works/omk-ai/dist/providers/google.d.ts.map +1 -0
  725. package/node_modules/@earendil-works/omk-ai/dist/providers/google.js +402 -0
  726. package/node_modules/@earendil-works/omk-ai/dist/providers/google.js.map +1 -0
  727. package/node_modules/@earendil-works/omk-ai/dist/providers/images/openrouter.d.ts +3 -0
  728. package/node_modules/@earendil-works/omk-ai/dist/providers/images/openrouter.d.ts.map +1 -0
  729. package/node_modules/@earendil-works/omk-ai/dist/providers/images/openrouter.js +128 -0
  730. package/node_modules/@earendil-works/omk-ai/dist/providers/images/openrouter.js.map +1 -0
  731. package/node_modules/@earendil-works/omk-ai/dist/providers/images/register-builtins.d.ts +4 -0
  732. package/node_modules/@earendil-works/omk-ai/dist/providers/images/register-builtins.d.ts.map +1 -0
  733. package/node_modules/@earendil-works/omk-ai/dist/providers/images/register-builtins.js +34 -0
  734. package/node_modules/@earendil-works/omk-ai/dist/providers/images/register-builtins.js.map +1 -0
  735. package/node_modules/@earendil-works/omk-ai/dist/providers/mistral.d.ts +25 -0
  736. package/node_modules/@earendil-works/omk-ai/dist/providers/mistral.d.ts.map +1 -0
  737. package/node_modules/@earendil-works/omk-ai/dist/providers/mistral.js +534 -0
  738. package/node_modules/@earendil-works/omk-ai/dist/providers/mistral.js.map +1 -0
  739. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-codex-responses.d.ts +30 -0
  740. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-codex-responses.d.ts.map +1 -0
  741. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-codex-responses.js +1171 -0
  742. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-codex-responses.js.map +1 -0
  743. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-completions.d.ts +19 -0
  744. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-completions.d.ts.map +1 -0
  745. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-completions.js +977 -0
  746. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-completions.js.map +1 -0
  747. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-prompt-cache.d.ts +11 -0
  748. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-prompt-cache.d.ts.map +1 -0
  749. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-prompt-cache.js +22 -0
  750. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-prompt-cache.js.map +1 -0
  751. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-responses-shared.d.ts +18 -0
  752. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-responses-shared.d.ts.map +1 -0
  753. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-responses-shared.js +496 -0
  754. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-responses-shared.js.map +1 -0
  755. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-responses.d.ts +13 -0
  756. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-responses.d.ts.map +1 -0
  757. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-responses.js +233 -0
  758. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-responses.js.map +1 -0
  759. package/node_modules/@earendil-works/omk-ai/dist/providers/register-builtins.d.ts +35 -0
  760. package/node_modules/@earendil-works/omk-ai/dist/providers/register-builtins.d.ts.map +1 -0
  761. package/node_modules/@earendil-works/omk-ai/dist/providers/register-builtins.js +254 -0
  762. package/node_modules/@earendil-works/omk-ai/dist/providers/register-builtins.js.map +1 -0
  763. package/node_modules/@earendil-works/omk-ai/dist/providers/simple-options.d.ts +8 -0
  764. package/node_modules/@earendil-works/omk-ai/dist/providers/simple-options.d.ts.map +1 -0
  765. package/node_modules/@earendil-works/omk-ai/dist/providers/simple-options.js +42 -0
  766. package/node_modules/@earendil-works/omk-ai/dist/providers/simple-options.js.map +1 -0
  767. package/node_modules/@earendil-works/omk-ai/dist/providers/tool-schema.d.ts +13 -0
  768. package/node_modules/@earendil-works/omk-ai/dist/providers/tool-schema.d.ts.map +1 -0
  769. package/node_modules/@earendil-works/omk-ai/dist/providers/tool-schema.js +82 -0
  770. package/node_modules/@earendil-works/omk-ai/dist/providers/tool-schema.js.map +1 -0
  771. package/node_modules/@earendil-works/omk-ai/dist/providers/transform-messages.d.ts +8 -0
  772. package/node_modules/@earendil-works/omk-ai/dist/providers/transform-messages.d.ts.map +1 -0
  773. package/node_modules/@earendil-works/omk-ai/dist/providers/transform-messages.js +184 -0
  774. package/node_modules/@earendil-works/omk-ai/dist/providers/transform-messages.js.map +1 -0
  775. package/node_modules/@earendil-works/omk-ai/dist/session-resources.d.ts +4 -0
  776. package/node_modules/@earendil-works/omk-ai/dist/session-resources.d.ts.map +1 -0
  777. package/node_modules/@earendil-works/omk-ai/dist/session-resources.js +22 -0
  778. package/node_modules/@earendil-works/omk-ai/dist/session-resources.js.map +1 -0
  779. package/node_modules/@earendil-works/omk-ai/dist/stream.d.ts +8 -0
  780. package/node_modules/@earendil-works/omk-ai/dist/stream.d.ts.map +1 -0
  781. package/node_modules/@earendil-works/omk-ai/dist/stream.js +77 -0
  782. package/node_modules/@earendil-works/omk-ai/dist/stream.js.map +1 -0
  783. package/node_modules/@earendil-works/omk-ai/dist/types.d.ts +570 -0
  784. package/node_modules/@earendil-works/omk-ai/dist/types.d.ts.map +1 -0
  785. package/node_modules/@earendil-works/omk-ai/dist/types.js +2 -0
  786. package/node_modules/@earendil-works/omk-ai/dist/types.js.map +1 -0
  787. package/node_modules/@earendil-works/omk-ai/dist/utils/abort-signals.d.ts +6 -0
  788. package/node_modules/@earendil-works/omk-ai/dist/utils/abort-signals.d.ts.map +1 -0
  789. package/node_modules/@earendil-works/omk-ai/dist/utils/abort-signals.js +34 -0
  790. package/node_modules/@earendil-works/omk-ai/dist/utils/abort-signals.js.map +1 -0
  791. package/node_modules/@earendil-works/omk-ai/dist/utils/diagnostics.d.ts +19 -0
  792. package/node_modules/@earendil-works/omk-ai/dist/utils/diagnostics.d.ts.map +1 -0
  793. package/node_modules/@earendil-works/omk-ai/dist/utils/diagnostics.js +25 -0
  794. package/node_modules/@earendil-works/omk-ai/dist/utils/diagnostics.js.map +1 -0
  795. package/node_modules/@earendil-works/omk-ai/dist/utils/event-stream.d.ts +21 -0
  796. package/node_modules/@earendil-works/omk-ai/dist/utils/event-stream.d.ts.map +1 -0
  797. package/node_modules/@earendil-works/omk-ai/dist/utils/event-stream.js +81 -0
  798. package/node_modules/@earendil-works/omk-ai/dist/utils/event-stream.js.map +1 -0
  799. package/node_modules/@earendil-works/omk-ai/dist/utils/hash.d.ts +3 -0
  800. package/node_modules/@earendil-works/omk-ai/dist/utils/hash.d.ts.map +1 -0
  801. package/node_modules/@earendil-works/omk-ai/dist/utils/hash.js +14 -0
  802. package/node_modules/@earendil-works/omk-ai/dist/utils/hash.js.map +1 -0
  803. package/node_modules/@earendil-works/omk-ai/dist/utils/headers.d.ts +2 -0
  804. package/node_modules/@earendil-works/omk-ai/dist/utils/headers.d.ts.map +1 -0
  805. package/node_modules/@earendil-works/omk-ai/dist/utils/headers.js +8 -0
  806. package/node_modules/@earendil-works/omk-ai/dist/utils/headers.js.map +1 -0
  807. package/node_modules/@earendil-works/omk-ai/dist/utils/json-parse.d.ts +16 -0
  808. package/node_modules/@earendil-works/omk-ai/dist/utils/json-parse.d.ts.map +1 -0
  809. package/node_modules/@earendil-works/omk-ai/dist/utils/json-parse.js +113 -0
  810. package/node_modules/@earendil-works/omk-ai/dist/utils/json-parse.js.map +1 -0
  811. package/node_modules/@earendil-works/omk-ai/dist/utils/node-http-proxy.d.ts +10 -0
  812. package/node_modules/@earendil-works/omk-ai/dist/utils/node-http-proxy.d.ts.map +1 -0
  813. package/node_modules/@earendil-works/omk-ai/dist/utils/node-http-proxy.js +97 -0
  814. package/node_modules/@earendil-works/omk-ai/dist/utils/node-http-proxy.js.map +1 -0
  815. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/anthropic.d.ts +25 -0
  816. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/anthropic.d.ts.map +1 -0
  817. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/anthropic.js +335 -0
  818. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/anthropic.js.map +1 -0
  819. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/device-code.d.ts +21 -0
  820. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/device-code.d.ts.map +1 -0
  821. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/device-code.js +56 -0
  822. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/device-code.js.map +1 -0
  823. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/github-copilot.d.ts +30 -0
  824. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/github-copilot.d.ts.map +1 -0
  825. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/github-copilot.js +280 -0
  826. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/github-copilot.js.map +1 -0
  827. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/index.d.ts +58 -0
  828. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/index.d.ts.map +1 -0
  829. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/index.js +122 -0
  830. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/index.js.map +1 -0
  831. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/oauth-page.d.ts +3 -0
  832. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/oauth-page.d.ts.map +1 -0
  833. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/oauth-page.js +105 -0
  834. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/oauth-page.js.map +1 -0
  835. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/openai-codex.d.ts +43 -0
  836. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/openai-codex.d.ts.map +1 -0
  837. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/openai-codex.js +487 -0
  838. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/openai-codex.js.map +1 -0
  839. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/pkce.d.ts +13 -0
  840. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/pkce.d.ts.map +1 -0
  841. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/pkce.js +31 -0
  842. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/pkce.js.map +1 -0
  843. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/types.d.ts +64 -0
  844. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/types.d.ts.map +1 -0
  845. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/types.js +2 -0
  846. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/types.js.map +1 -0
  847. package/node_modules/@earendil-works/omk-ai/dist/utils/overflow.d.ts +57 -0
  848. package/node_modules/@earendil-works/omk-ai/dist/utils/overflow.d.ts.map +1 -0
  849. package/node_modules/@earendil-works/omk-ai/dist/utils/overflow.js +154 -0
  850. package/node_modules/@earendil-works/omk-ai/dist/utils/overflow.js.map +1 -0
  851. package/node_modules/@earendil-works/omk-ai/dist/utils/sanitize-unicode.d.ts +22 -0
  852. package/node_modules/@earendil-works/omk-ai/dist/utils/sanitize-unicode.d.ts.map +1 -0
  853. package/node_modules/@earendil-works/omk-ai/dist/utils/sanitize-unicode.js +26 -0
  854. package/node_modules/@earendil-works/omk-ai/dist/utils/sanitize-unicode.js.map +1 -0
  855. package/node_modules/@earendil-works/omk-ai/dist/utils/typebox-helpers.d.ts +17 -0
  856. package/node_modules/@earendil-works/omk-ai/dist/utils/typebox-helpers.d.ts.map +1 -0
  857. package/node_modules/@earendil-works/omk-ai/dist/utils/typebox-helpers.js +21 -0
  858. package/node_modules/@earendil-works/omk-ai/dist/utils/typebox-helpers.js.map +1 -0
  859. package/node_modules/@earendil-works/omk-ai/dist/utils/validation.d.ts +18 -0
  860. package/node_modules/@earendil-works/omk-ai/dist/utils/validation.d.ts.map +1 -0
  861. package/node_modules/@earendil-works/omk-ai/dist/utils/validation.js +281 -0
  862. package/node_modules/@earendil-works/omk-ai/dist/utils/validation.js.map +1 -0
  863. package/node_modules/@earendil-works/omk-ai/package.json +106 -0
  864. package/node_modules/@earendil-works/omk-tui/README.md +791 -0
  865. package/node_modules/@earendil-works/omk-tui/dist/autocomplete.d.ts +54 -0
  866. package/node_modules/@earendil-works/omk-tui/dist/autocomplete.d.ts.map +1 -0
  867. package/node_modules/@earendil-works/omk-tui/dist/autocomplete.js +632 -0
  868. package/node_modules/@earendil-works/omk-tui/dist/autocomplete.js.map +1 -0
  869. package/node_modules/@earendil-works/omk-tui/dist/components/box.d.ts +22 -0
  870. package/node_modules/@earendil-works/omk-tui/dist/components/box.d.ts.map +1 -0
  871. package/node_modules/@earendil-works/omk-tui/dist/components/box.js +104 -0
  872. package/node_modules/@earendil-works/omk-tui/dist/components/box.js.map +1 -0
  873. package/node_modules/@earendil-works/omk-tui/dist/components/cancellable-loader.d.ts +22 -0
  874. package/node_modules/@earendil-works/omk-tui/dist/components/cancellable-loader.d.ts.map +1 -0
  875. package/node_modules/@earendil-works/omk-tui/dist/components/cancellable-loader.js +35 -0
  876. package/node_modules/@earendil-works/omk-tui/dist/components/cancellable-loader.js.map +1 -0
  877. package/node_modules/@earendil-works/omk-tui/dist/components/editor.d.ts +249 -0
  878. package/node_modules/@earendil-works/omk-tui/dist/components/editor.d.ts.map +1 -0
  879. package/node_modules/@earendil-works/omk-tui/dist/components/editor.js +1857 -0
  880. package/node_modules/@earendil-works/omk-tui/dist/components/editor.js.map +1 -0
  881. package/node_modules/@earendil-works/omk-tui/dist/components/image.d.ts +28 -0
  882. package/node_modules/@earendil-works/omk-tui/dist/components/image.d.ts.map +1 -0
  883. package/node_modules/@earendil-works/omk-tui/dist/components/image.js +89 -0
  884. package/node_modules/@earendil-works/omk-tui/dist/components/image.js.map +1 -0
  885. package/node_modules/@earendil-works/omk-tui/dist/components/input.d.ts +37 -0
  886. package/node_modules/@earendil-works/omk-tui/dist/components/input.d.ts.map +1 -0
  887. package/node_modules/@earendil-works/omk-tui/dist/components/input.js +378 -0
  888. package/node_modules/@earendil-works/omk-tui/dist/components/input.js.map +1 -0
  889. package/node_modules/@earendil-works/omk-tui/dist/components/loader.d.ts +31 -0
  890. package/node_modules/@earendil-works/omk-tui/dist/components/loader.d.ts.map +1 -0
  891. package/node_modules/@earendil-works/omk-tui/dist/components/loader.js +69 -0
  892. package/node_modules/@earendil-works/omk-tui/dist/components/loader.js.map +1 -0
  893. package/node_modules/@earendil-works/omk-tui/dist/components/markdown.d.ts +96 -0
  894. package/node_modules/@earendil-works/omk-tui/dist/components/markdown.d.ts.map +1 -0
  895. package/node_modules/@earendil-works/omk-tui/dist/components/markdown.js +644 -0
  896. package/node_modules/@earendil-works/omk-tui/dist/components/markdown.js.map +1 -0
  897. package/node_modules/@earendil-works/omk-tui/dist/components/select-list.d.ts +50 -0
  898. package/node_modules/@earendil-works/omk-tui/dist/components/select-list.d.ts.map +1 -0
  899. package/node_modules/@earendil-works/omk-tui/dist/components/select-list.js +159 -0
  900. package/node_modules/@earendil-works/omk-tui/dist/components/select-list.js.map +1 -0
  901. package/node_modules/@earendil-works/omk-tui/dist/components/settings-list.d.ts +50 -0
  902. package/node_modules/@earendil-works/omk-tui/dist/components/settings-list.d.ts.map +1 -0
  903. package/node_modules/@earendil-works/omk-tui/dist/components/settings-list.js +185 -0
  904. package/node_modules/@earendil-works/omk-tui/dist/components/settings-list.js.map +1 -0
  905. package/node_modules/@earendil-works/omk-tui/dist/components/spacer.d.ts +12 -0
  906. package/node_modules/@earendil-works/omk-tui/dist/components/spacer.d.ts.map +1 -0
  907. package/node_modules/@earendil-works/omk-tui/dist/components/spacer.js +23 -0
  908. package/node_modules/@earendil-works/omk-tui/dist/components/spacer.js.map +1 -0
  909. package/node_modules/@earendil-works/omk-tui/dist/components/text.d.ts +19 -0
  910. package/node_modules/@earendil-works/omk-tui/dist/components/text.d.ts.map +1 -0
  911. package/node_modules/@earendil-works/omk-tui/dist/components/text.js +89 -0
  912. package/node_modules/@earendil-works/omk-tui/dist/components/text.js.map +1 -0
  913. package/node_modules/@earendil-works/omk-tui/dist/components/truncated-text.d.ts +13 -0
  914. package/node_modules/@earendil-works/omk-tui/dist/components/truncated-text.d.ts.map +1 -0
  915. package/node_modules/@earendil-works/omk-tui/dist/components/truncated-text.js +51 -0
  916. package/node_modules/@earendil-works/omk-tui/dist/components/truncated-text.js.map +1 -0
  917. package/node_modules/@earendil-works/omk-tui/dist/editor-component.d.ts +39 -0
  918. package/node_modules/@earendil-works/omk-tui/dist/editor-component.d.ts.map +1 -0
  919. package/node_modules/@earendil-works/omk-tui/dist/editor-component.js +2 -0
  920. package/node_modules/@earendil-works/omk-tui/dist/editor-component.js.map +1 -0
  921. package/node_modules/@earendil-works/omk-tui/dist/fuzzy.d.ts +16 -0
  922. package/node_modules/@earendil-works/omk-tui/dist/fuzzy.d.ts.map +1 -0
  923. package/node_modules/@earendil-works/omk-tui/dist/fuzzy.js +110 -0
  924. package/node_modules/@earendil-works/omk-tui/dist/fuzzy.js.map +1 -0
  925. package/node_modules/@earendil-works/omk-tui/dist/index.d.ts +23 -0
  926. package/node_modules/@earendil-works/omk-tui/dist/index.d.ts.map +1 -0
  927. package/node_modules/@earendil-works/omk-tui/dist/index.js +32 -0
  928. package/node_modules/@earendil-works/omk-tui/dist/index.js.map +1 -0
  929. package/node_modules/@earendil-works/omk-tui/dist/keybindings.d.ts +212 -0
  930. package/node_modules/@earendil-works/omk-tui/dist/keybindings.d.ts.map +1 -0
  931. package/node_modules/@earendil-works/omk-tui/dist/keybindings.js +252 -0
  932. package/node_modules/@earendil-works/omk-tui/dist/keybindings.js.map +1 -0
  933. package/node_modules/@earendil-works/omk-tui/dist/keys.d.ts +184 -0
  934. package/node_modules/@earendil-works/omk-tui/dist/keys.d.ts.map +1 -0
  935. package/node_modules/@earendil-works/omk-tui/dist/keys.js +1173 -0
  936. package/node_modules/@earendil-works/omk-tui/dist/keys.js.map +1 -0
  937. package/node_modules/@earendil-works/omk-tui/dist/kill-ring.d.ts +28 -0
  938. package/node_modules/@earendil-works/omk-tui/dist/kill-ring.d.ts.map +1 -0
  939. package/node_modules/@earendil-works/omk-tui/dist/kill-ring.js +44 -0
  940. package/node_modules/@earendil-works/omk-tui/dist/kill-ring.js.map +1 -0
  941. package/node_modules/@earendil-works/omk-tui/dist/native-modifiers.d.ts +3 -0
  942. package/node_modules/@earendil-works/omk-tui/dist/native-modifiers.d.ts.map +1 -0
  943. package/node_modules/@earendil-works/omk-tui/dist/native-modifiers.js +53 -0
  944. package/node_modules/@earendil-works/omk-tui/dist/native-modifiers.js.map +1 -0
  945. package/node_modules/@earendil-works/omk-tui/dist/stdin-buffer.d.ts +50 -0
  946. package/node_modules/@earendil-works/omk-tui/dist/stdin-buffer.d.ts.map +1 -0
  947. package/node_modules/@earendil-works/omk-tui/dist/stdin-buffer.js +361 -0
  948. package/node_modules/@earendil-works/omk-tui/dist/stdin-buffer.js.map +1 -0
  949. package/node_modules/@earendil-works/omk-tui/dist/terminal-image.d.ts +90 -0
  950. package/node_modules/@earendil-works/omk-tui/dist/terminal-image.d.ts.map +1 -0
  951. package/node_modules/@earendil-works/omk-tui/dist/terminal-image.js +366 -0
  952. package/node_modules/@earendil-works/omk-tui/dist/terminal-image.js.map +1 -0
  953. package/node_modules/@earendil-works/omk-tui/dist/terminal.d.ts +113 -0
  954. package/node_modules/@earendil-works/omk-tui/dist/terminal.d.ts.map +1 -0
  955. package/node_modules/@earendil-works/omk-tui/dist/terminal.js +472 -0
  956. package/node_modules/@earendil-works/omk-tui/dist/terminal.js.map +1 -0
  957. package/node_modules/@earendil-works/omk-tui/dist/tui.d.ts +242 -0
  958. package/node_modules/@earendil-works/omk-tui/dist/tui.d.ts.map +1 -0
  959. package/node_modules/@earendil-works/omk-tui/dist/tui.js +1221 -0
  960. package/node_modules/@earendil-works/omk-tui/dist/tui.js.map +1 -0
  961. package/node_modules/@earendil-works/omk-tui/dist/undo-stack.d.ts +17 -0
  962. package/node_modules/@earendil-works/omk-tui/dist/undo-stack.d.ts.map +1 -0
  963. package/node_modules/@earendil-works/omk-tui/dist/undo-stack.js +25 -0
  964. package/node_modules/@earendil-works/omk-tui/dist/undo-stack.js.map +1 -0
  965. package/node_modules/@earendil-works/omk-tui/dist/utils.d.ts +84 -0
  966. package/node_modules/@earendil-works/omk-tui/dist/utils.d.ts.map +1 -0
  967. package/node_modules/@earendil-works/omk-tui/dist/utils.js +1032 -0
  968. package/node_modules/@earendil-works/omk-tui/dist/utils.js.map +1 -0
  969. package/node_modules/@earendil-works/omk-tui/dist/word-navigation.d.ts +25 -0
  970. package/node_modules/@earendil-works/omk-tui/dist/word-navigation.d.ts.map +1 -0
  971. package/node_modules/@earendil-works/omk-tui/dist/word-navigation.js +96 -0
  972. package/node_modules/@earendil-works/omk-tui/dist/word-navigation.js.map +1 -0
  973. package/node_modules/@earendil-works/omk-tui/native/darwin/prebuilds/darwin-arm64/darwin-modifiers.node +0 -0
  974. package/node_modules/@earendil-works/omk-tui/native/darwin/prebuilds/darwin-x64/darwin-modifiers.node +0 -0
  975. package/node_modules/@earendil-works/omk-tui/native/win32/prebuilds/win32-arm64/win32-console-mode.node +0 -0
  976. package/node_modules/@earendil-works/omk-tui/native/win32/prebuilds/win32-x64/win32-console-mode.node +0 -0
  977. package/node_modules/@earendil-works/omk-tui/package.json +47 -0
  978. package/package.json +22 -6
  979. package/dist/utils/pi-user-agent.d.ts +0 -2
  980. package/dist/utils/pi-user-agent.d.ts.map +0 -1
  981. package/dist/utils/pi-user-agent.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-graph-identity-resolution.js","sourceRoot":"","sources":["../../src/core/context-graph-identity-resolution.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from \"node:crypto\";\n\nexport type Sha256 = string;\nexport type WorkspaceId = string;\nexport type RepositoryId = string;\nexport type LogicalId = string;\nexport type RevisionId = string;\n\nexport type SourceKind =\n\t| \"compiler\"\n\t| \"test\"\n\t| \"git\"\n\t| \"tree_sitter\"\n\t| \"understand_anything\"\n\t| \"user\"\n\t| \"document\"\n\t| \"llm\"\n\t| \"heuristic\";\n\nexport interface IdentityKeyInput {\n\treadonly workspaceId: WorkspaceId;\n\treadonly repositoryId: RepositoryId;\n\treadonly branch: string;\n\treadonly classIri: string;\n\treadonly sourceKind: SourceKind;\n\treadonly identityNamespace: string;\n\treadonly qualifiedName: string;\n\treadonly normalizedSignature: string;\n\t/** Retained for callers, but ignored for symbol identity when namespace/name/signature exist. */\n\treadonly filePath?: string;\n}\n\nexport interface RevisionKeyInput {\n\treadonly logicalId: LogicalId;\n\treadonly revisionSourceSha: string;\n\treadonly structuralHash: Sha256;\n}\n\nexport interface StructuralFingerprintMetrics {\n\treadonly astNodeCount: number;\n\treadonly exportedSymbolCount: number;\n\treadonly importCount: number;\n\treadonly relationCount: number;\n\treadonly lineCount?: number;\n}\n\nexport interface StructuralFingerprintInput {\n\treadonly classIri: string;\n\treadonly sourceKind: SourceKind;\n\treadonly normalizedContent?: string;\n\treadonly astTokens: readonly string[];\n\treadonly publicApiTokens: readonly string[];\n\treadonly relationTokens: readonly string[];\n\treadonly importTokens?: readonly string[];\n\treadonly exportTokens?: readonly string[];\n\treadonly summaryTokens?: readonly string[];\n\treadonly metrics: StructuralFingerprintMetrics;\n}\n\nexport interface StructuralFingerprint {\n\treadonly version: \"omk.ontology.fingerprint.v1\";\n\treadonly extractor: \"ua-tree-sitter-normalized-v1\";\n\treadonly classIri: string;\n\treadonly sourceKind: SourceKind;\n\treadonly strictContentHash?: Sha256;\n\treadonly structuralHash: Sha256;\n\treadonly publicApiHash: Sha256;\n\treadonly relationShapeHash: Sha256;\n\treadonly importHash?: Sha256;\n\treadonly exportHash?: Sha256;\n\treadonly textSummaryHash?: Sha256;\n\treadonly metrics: StructuralFingerprintMetrics;\n}\n\nexport interface IdentitySimilarityFeatures {\n\treadonly strictContentEqual: boolean;\n\treadonly structuralEqual: boolean;\n\treadonly publicApiEqual: boolean;\n\treadonly normalizedSignatureSimilarity: number;\n\treadonly relationShapeSimilarity: number;\n\treadonly nameSimilarity: number;\n\treadonly pathSimilarity: number;\n\treadonly parentScopeSimilarity: number;\n\treadonly sizeSimilarity: number;\n\treadonly gitRenameHint: boolean;\n}\n\nexport interface IdentityDecisionThresholds {\n\treadonly autoSameAs: number;\n\treadonly possibleSameAs: number;\n}\n\nexport interface IdentityResolutionCandidate {\n\treadonly logicalId: LogicalId;\n\treadonly score: number;\n}\n\nexport interface IdentityAlias {\n\treadonly fromLogicalId: LogicalId;\n\treadonly toLogicalId: LogicalId;\n\treadonly confidence: number;\n\treadonly relation: \"sameAs\" | \"renamedTo\";\n}\n\nexport interface IdentityResolutionInput {\n\treadonly currentLogicalId: LogicalId;\n\treadonly previousLogicalIds: readonly LogicalId[];\n\treadonly aliases: readonly IdentityAlias[];\n\treadonly candidates: readonly IdentityResolutionCandidate[];\n\treadonly thresholds?: Partial<IdentityDecisionThresholds>;\n}\n\nexport type IdentityResolutionDecision =\n\t| {\n\t\t\treadonly kind: \"sameAs\";\n\t\t\treadonly reason: \"exact\" | \"alias\" | \"merge\";\n\t\t\treadonly logicalId: LogicalId;\n\t\t\treadonly confidence: number;\n\t }\n\t| {\n\t\t\treadonly kind: \"possibleSameAs\";\n\t\t\treadonly candidates: readonly IdentityResolutionCandidate[];\n\t\t\treadonly confidence: number;\n\t }\n\t| {\n\t\t\treadonly kind: \"new\";\n\t\t\treadonly logicalId: LogicalId;\n\t\t\treadonly confidence: 0;\n\t };\n\nexport const IDENTITY_ALGORITHM_VERSION = \"omk.ontology.identity.v1\";\nexport const FINGERPRINT_ALGORITHM_VERSION = \"omk.ontology.fingerprint.v1\";\n\nexport const DEFAULT_IDENTITY_DECISION_THRESHOLDS: IdentityDecisionThresholds = {\n\tautoSameAs: 0.92,\n\tpossibleSameAs: 0.78,\n};\n\nexport const canonicalText = (value: string): string =>\n\tvalue.normalize(\"NFKC\").replace(/\\\\/g, \"/\").replace(/\\s+/g, \" \").replace(/^\\.\\//, \"\").trim();\n\nexport const makeLogicalId = (input: IdentityKeyInput): LogicalId => {\n\tconst tuple = [\n\t\t\"omk.logical.v1\",\n\t\tcanonicalText(input.workspaceId),\n\t\tcanonicalText(input.repositoryId),\n\t\tcanonicalText(input.branch),\n\t\tcanonicalText(input.classIri),\n\t\tcanonicalText(input.sourceKind),\n\t\tcanonicalText(input.identityNamespace),\n\t\tmakeQualifiedIdentityName(input),\n\t\tcanonicalText(input.normalizedSignature),\n\t];\n\n\treturn `log_${sha256Hex(tuple.join(\"\\0\"))}`;\n};\n\nexport const makeRevisionId = (input: RevisionKeyInput): RevisionId => {\n\tconst tuple = [\n\t\t\"omk.revision.v1\",\n\t\tcanonicalText(input.logicalId),\n\t\tcanonicalText(input.revisionSourceSha),\n\t\tcanonicalText(input.structuralHash),\n\t];\n\n\treturn `rev_${sha256Hex(tuple.join(\"\\0\"))}`;\n};\n\nexport const buildStructuralFingerprint = (input: StructuralFingerprintInput): StructuralFingerprint => {\n\tconst strictContentHash = input.normalizedContent\n\t\t? sha256Hex([\"omk.content.v1\", normalizeLf(input.normalizedContent)].join(\"\\0\"))\n\t\t: undefined;\n\n\treturn {\n\t\tversion: FINGERPRINT_ALGORITHM_VERSION,\n\t\textractor: \"ua-tree-sitter-normalized-v1\",\n\t\tclassIri: canonicalText(input.classIri),\n\t\tsourceKind: input.sourceKind,\n\t\tstrictContentHash,\n\t\tstructuralHash: hashTokens(\"omk.structure.v1\", [input.classIri, ...input.astTokens]),\n\t\tpublicApiHash: hashTokens(\"omk.public-api.v1\", [input.classIri, ...input.publicApiTokens]),\n\t\trelationShapeHash: hashTokens(\"omk.relation-shape.v1\", input.relationTokens),\n\t\timportHash: hashOptionalTokens(\"omk.imports.v1\", input.importTokens),\n\t\texportHash: hashOptionalTokens(\"omk.exports.v1\", input.exportTokens),\n\t\ttextSummaryHash: hashOptionalTokens(\"omk.summary.v1\", input.summaryTokens),\n\t\tmetrics: { ...input.metrics },\n\t};\n};\n\nexport const calculateIdentitySimilarity = (features: IdentitySimilarityFeatures): number => {\n\tif (features.strictContentEqual) return 1;\n\n\tconst score =\n\t\t(features.structuralEqual ? 0.35 : 0) +\n\t\t(features.publicApiEqual ? 0.18 : 0) +\n\t\t0.12 * clamp01(features.normalizedSignatureSimilarity) +\n\t\t0.1 * clamp01(features.relationShapeSimilarity) +\n\t\t0.1 * clamp01(features.nameSimilarity) +\n\t\t0.08 * clamp01(features.pathSimilarity) +\n\t\t0.05 * clamp01(features.parentScopeSimilarity) +\n\t\t0.02 * clamp01(features.sizeSimilarity) +\n\t\t(features.gitRenameHint ? 0.1 : 0);\n\n\treturn clamp01(score);\n};\n\nexport const identitySimilarity = calculateIdentitySimilarity;\n\nexport const resolveIdentity = (input: IdentityResolutionInput): IdentityResolutionDecision => {\n\tconst thresholds = { ...DEFAULT_IDENTITY_DECISION_THRESHOLDS, ...input.thresholds };\n\tconst exactMatch = sortLogicalIds(input.previousLogicalIds).find(\n\t\t(logicalId) => logicalId === input.currentLogicalId,\n\t);\n\tif (exactMatch) return { kind: \"sameAs\", reason: \"exact\", logicalId: exactMatch, confidence: 1 };\n\n\tconst acceptedAlias = sortAliases(input.aliases).find(\n\t\t(alias) => alias.toLogicalId === input.currentLogicalId && alias.confidence >= thresholds.autoSameAs,\n\t);\n\tif (acceptedAlias) {\n\t\treturn {\n\t\t\tkind: \"sameAs\",\n\t\t\treason: \"alias\",\n\t\t\tlogicalId: acceptedAlias.fromLogicalId,\n\t\t\tconfidence: clamp01(acceptedAlias.confidence),\n\t\t};\n\t}\n\n\tconst sortedCandidates = sortCandidates(input.candidates);\n\tconst best = sortedCandidates[0];\n\tif (!best) return { kind: \"new\", logicalId: input.currentLogicalId, confidence: 0 };\n\tif (best.score >= thresholds.autoSameAs) {\n\t\treturn { kind: \"sameAs\", reason: \"merge\", logicalId: best.logicalId, confidence: clamp01(best.score) };\n\t}\n\tif (best.score >= thresholds.possibleSameAs) {\n\t\treturn {\n\t\t\tkind: \"possibleSameAs\",\n\t\t\tcandidates: sortedCandidates.filter((candidate) => candidate.score >= thresholds.possibleSameAs),\n\t\t\tconfidence: clamp01(best.score),\n\t\t};\n\t}\n\treturn { kind: \"new\", logicalId: input.currentLogicalId, confidence: 0 };\n};\n\nconst makeQualifiedIdentityName = (input: IdentityKeyInput): string => {\n\tconst qualifiedName = canonicalText(input.qualifiedName);\n\tif (qualifiedName || isSymbolClass(input.classIri)) return qualifiedName;\n\treturn canonicalText(input.filePath ?? \"\");\n};\n\nconst isSymbolClass = (classIri: string): boolean => canonicalText(classIri).endsWith(\"Symbol\");\n\nconst sha256Hex = (value: string): Sha256 => createHash(\"sha256\").update(value, \"utf8\").digest(\"hex\");\n\nconst normalizeLf = (value: string): string => value.replace(/\\r\\n?/g, \"\\n\");\n\nconst hashTokens = (version: string, tokens: readonly string[]): Sha256 => {\n\tconst canonicalTokens = tokens\n\t\t.map(canonicalText)\n\t\t.filter((token) => token.length > 0)\n\t\t.sort();\n\treturn sha256Hex([version, ...canonicalTokens].join(\"\\0\"));\n};\n\nconst hashOptionalTokens = (version: string, tokens: readonly string[] | undefined): Sha256 | undefined => {\n\tif (!tokens || tokens.length === 0) return undefined;\n\treturn hashTokens(version, tokens);\n};\n\nconst clamp01 = (value: number): number => {\n\tif (Number.isNaN(value) || value <= 0) return 0;\n\tif (value >= 1) return 1;\n\treturn value;\n};\n\nconst sortLogicalIds = (logicalIds: readonly LogicalId[]): LogicalId[] =>\n\t[...logicalIds].sort((a, b) => a.localeCompare(b));\n\nconst sortAliases = (aliases: readonly IdentityAlias[]): IdentityAlias[] =>\n\t[...aliases].sort((a, b) => b.confidence - a.confidence || a.fromLogicalId.localeCompare(b.fromLogicalId));\n\nconst sortCandidates = (candidates: readonly IdentityResolutionCandidate[]): IdentityResolutionCandidate[] =>\n\t[...candidates].sort((a, b) => b.score - a.score || a.logicalId.localeCompare(b.logicalId));\n"]}
@@ -0,0 +1,153 @@
1
+ export type MemoryGenerationStatus = "active" | "archived";
2
+ export type MemoryAssertionKind = "observed" | "inferred" | "declared";
3
+ export type MemoryAssertionStatus = "active" | "superseded" | "retracted";
4
+ export type AllowedMemoryCategory = "decision" | "verified_fact" | "resolved_error" | "user_preference" | "unresolved_task" | "test_evidence" | "build_evidence";
5
+ export type ForbiddenMemoryCategory = "raw_conversation" | "raw_shell_output" | "speculation" | "secret";
6
+ export type MemoryCategory = AllowedMemoryCategory | ForbiddenMemoryCategory | (string & {});
7
+ export type MemoryJsonValue = string | number | boolean | null | readonly MemoryJsonValue[] | {
8
+ readonly [key: string]: MemoryJsonValue | undefined;
9
+ };
10
+ export type MemoryTemporalInstant = string | Date;
11
+ export interface MemoryTemporalInterval {
12
+ readonly from: MemoryTemporalInstant;
13
+ readonly to?: MemoryTemporalInstant;
14
+ }
15
+ export interface MemoryScope {
16
+ readonly workspaceId: string;
17
+ readonly repoSha: string;
18
+ readonly branch: string;
19
+ }
20
+ export interface MemoryProvenance {
21
+ readonly sourceKind: "compiler" | "test" | "git" | "tool" | "user" | "document" | "llm" | "heuristic";
22
+ readonly sourceId: string;
23
+ readonly observedAt?: MemoryTemporalInstant;
24
+ readonly excerpt?: string;
25
+ }
26
+ export interface MemoryGeneration {
27
+ readonly id: string;
28
+ readonly scope: MemoryScope;
29
+ readonly status: MemoryGenerationStatus;
30
+ readonly createdAt: MemoryTemporalInstant;
31
+ readonly label?: string;
32
+ }
33
+ export interface MemoryEntity {
34
+ readonly id: string;
35
+ readonly scope: MemoryScope;
36
+ readonly generationId: string;
37
+ readonly entityType: string;
38
+ readonly name: string;
39
+ readonly aliases?: readonly string[];
40
+ readonly validTime: MemoryTemporalInterval;
41
+ readonly transactionTime: MemoryTemporalInterval;
42
+ }
43
+ export interface MemoryAssertion {
44
+ readonly id: string;
45
+ readonly scope: MemoryScope;
46
+ readonly generationId: string;
47
+ readonly subjectId: string;
48
+ readonly predicate: string;
49
+ readonly object: MemoryJsonValue;
50
+ readonly category: MemoryCategory;
51
+ readonly assertionKind: MemoryAssertionKind;
52
+ readonly status: MemoryAssertionStatus;
53
+ readonly confidence: number;
54
+ readonly functional?: boolean;
55
+ readonly validTime: MemoryTemporalInterval;
56
+ readonly transactionTime: MemoryTemporalInterval;
57
+ readonly provenance?: readonly MemoryProvenance[];
58
+ }
59
+ export interface MemoryEpisode {
60
+ readonly id: string;
61
+ readonly scope: MemoryScope;
62
+ readonly generationId: string;
63
+ readonly category: MemoryCategory;
64
+ readonly title: string;
65
+ readonly occurredAt: MemoryTemporalInstant;
66
+ readonly validTime: MemoryTemporalInterval;
67
+ readonly transactionTime: MemoryTemporalInterval;
68
+ readonly provenance?: readonly MemoryProvenance[];
69
+ }
70
+ export type MemoryScopeValidationReason = "eligible" | "missing_workspace_id" | "missing_repo_sha" | "missing_branch";
71
+ export type MemoryScopeValidationDecision = {
72
+ readonly ok: true;
73
+ readonly reason: "eligible";
74
+ } | {
75
+ readonly ok: false;
76
+ readonly reason: Exclude<MemoryScopeValidationReason, "eligible">;
77
+ };
78
+ export type MemoryCategoryValidationReason = "eligible" | "forbidden_category" | "unsupported_category";
79
+ export type MemoryCategoryValidationDecision = {
80
+ readonly ok: true;
81
+ readonly reason: "eligible";
82
+ } | {
83
+ readonly ok: false;
84
+ readonly reason: Exclude<MemoryCategoryValidationReason, "eligible">;
85
+ };
86
+ export interface ListMemoryAssertionsInput {
87
+ readonly scope: MemoryScope;
88
+ readonly categories?: readonly MemoryCategory[];
89
+ readonly statuses?: readonly MemoryAssertionStatus[];
90
+ readonly validAt?: MemoryTemporalInstant;
91
+ readonly transactionAsOf?: MemoryTemporalInstant;
92
+ readonly includeInactiveGenerations?: boolean;
93
+ }
94
+ export interface MemorySearchInput {
95
+ readonly scope: MemoryScope;
96
+ readonly category: MemoryCategory;
97
+ readonly query: string;
98
+ readonly statuses?: readonly MemoryAssertionStatus[];
99
+ readonly validAt?: MemoryTemporalInstant;
100
+ readonly transactionAsOf?: MemoryTemporalInstant;
101
+ readonly limit?: number;
102
+ readonly includeInactiveGenerations?: boolean;
103
+ }
104
+ export interface MemorySearchHit {
105
+ readonly assertion: MemoryAssertion;
106
+ readonly score: number;
107
+ readonly matchedTokens: readonly string[];
108
+ }
109
+ export interface FunctionalConflictOptions {
110
+ readonly functionalPredicates?: readonly string[];
111
+ readonly statuses?: readonly MemoryAssertionStatus[];
112
+ }
113
+ export interface MemoryAssertionConflict {
114
+ readonly subjectId: string;
115
+ readonly predicate: string;
116
+ readonly assertionIds: readonly [string, string];
117
+ readonly objectValues: readonly [MemoryJsonValue, MemoryJsonValue];
118
+ readonly validOverlap: MemoryTemporalInterval;
119
+ }
120
+ export interface ConfidenceReinforcementInput {
121
+ readonly currentConfidence: number;
122
+ readonly evidenceConfidence: number;
123
+ readonly weight?: number;
124
+ }
125
+ export interface ContextGraphMemoryStore {
126
+ putGeneration(generation: MemoryGeneration): Promise<MemoryGeneration>;
127
+ putEntity(entity: MemoryEntity): Promise<MemoryEntity>;
128
+ putAssertion(assertion: MemoryAssertion): Promise<MemoryAssertion>;
129
+ putEpisode(episode: MemoryEpisode): Promise<MemoryEpisode>;
130
+ getGeneration(id: string): Promise<MemoryGeneration | undefined>;
131
+ listAssertions(input: ListMemoryAssertionsInput): Promise<MemoryAssertion[]>;
132
+ memory_search(input: MemorySearchInput): Promise<MemorySearchHit[]>;
133
+ }
134
+ export declare function validateMemoryScope(scope: MemoryScope): MemoryScopeValidationDecision;
135
+ export declare function validateMemoryCategory(category: MemoryCategory): MemoryCategoryValidationDecision;
136
+ export declare function reinforceAssertionConfidence(input: ConfidenceReinforcementInput): number;
137
+ export declare function detectFunctionalAssertionConflicts(assertions: readonly MemoryAssertion[], options?: FunctionalConflictOptions): MemoryAssertionConflict[];
138
+ export declare class InMemoryContextGraphMemoryStore implements ContextGraphMemoryStore {
139
+ private readonly generations;
140
+ private readonly entities;
141
+ private readonly assertions;
142
+ private readonly episodes;
143
+ putGeneration(generation: MemoryGeneration): Promise<MemoryGeneration>;
144
+ putEntity(entity: MemoryEntity): Promise<MemoryEntity>;
145
+ putAssertion(assertion: MemoryAssertion): Promise<MemoryAssertion>;
146
+ putEpisode(episode: MemoryEpisode): Promise<MemoryEpisode>;
147
+ getGeneration(id: string): Promise<MemoryGeneration | undefined>;
148
+ listAssertions(input: ListMemoryAssertionsInput): Promise<MemoryAssertion[]>;
149
+ memory_search(input: MemorySearchInput): Promise<MemorySearchHit[]>;
150
+ private assertGenerationScope;
151
+ private getGenerationIds;
152
+ }
153
+ //# sourceMappingURL=context-graph-memory-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-graph-memory-store.d.ts","sourceRoot":"","sources":["../../src/core/context-graph-memory-store.ts"],"names":[],"mappings":"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","sourcesContent":["export type MemoryGenerationStatus = \"active\" | \"archived\";\nexport type MemoryAssertionKind = \"observed\" | \"inferred\" | \"declared\";\nexport type MemoryAssertionStatus = \"active\" | \"superseded\" | \"retracted\";\n\nexport type AllowedMemoryCategory =\n\t| \"decision\"\n\t| \"verified_fact\"\n\t| \"resolved_error\"\n\t| \"user_preference\"\n\t| \"unresolved_task\"\n\t| \"test_evidence\"\n\t| \"build_evidence\";\n\nexport type ForbiddenMemoryCategory = \"raw_conversation\" | \"raw_shell_output\" | \"speculation\" | \"secret\";\nexport type MemoryCategory = AllowedMemoryCategory | ForbiddenMemoryCategory | (string & {});\n\nexport type MemoryJsonValue =\n\t| string\n\t| number\n\t| boolean\n\t| null\n\t| readonly MemoryJsonValue[]\n\t| { readonly [key: string]: MemoryJsonValue | undefined };\n\nexport type MemoryTemporalInstant = string | Date;\n\nexport interface MemoryTemporalInterval {\n\treadonly from: MemoryTemporalInstant;\n\treadonly to?: MemoryTemporalInstant;\n}\n\nexport interface MemoryScope {\n\treadonly workspaceId: string;\n\treadonly repoSha: string;\n\treadonly branch: string;\n}\n\nexport interface MemoryProvenance {\n\treadonly sourceKind: \"compiler\" | \"test\" | \"git\" | \"tool\" | \"user\" | \"document\" | \"llm\" | \"heuristic\";\n\treadonly sourceId: string;\n\treadonly observedAt?: MemoryTemporalInstant;\n\treadonly excerpt?: string;\n}\n\nexport interface MemoryGeneration {\n\treadonly id: string;\n\treadonly scope: MemoryScope;\n\treadonly status: MemoryGenerationStatus;\n\treadonly createdAt: MemoryTemporalInstant;\n\treadonly label?: string;\n}\n\nexport interface MemoryEntity {\n\treadonly id: string;\n\treadonly scope: MemoryScope;\n\treadonly generationId: string;\n\treadonly entityType: string;\n\treadonly name: string;\n\treadonly aliases?: readonly string[];\n\treadonly validTime: MemoryTemporalInterval;\n\treadonly transactionTime: MemoryTemporalInterval;\n}\n\nexport interface MemoryAssertion {\n\treadonly id: string;\n\treadonly scope: MemoryScope;\n\treadonly generationId: string;\n\treadonly subjectId: string;\n\treadonly predicate: string;\n\treadonly object: MemoryJsonValue;\n\treadonly category: MemoryCategory;\n\treadonly assertionKind: MemoryAssertionKind;\n\treadonly status: MemoryAssertionStatus;\n\treadonly confidence: number;\n\treadonly functional?: boolean;\n\treadonly validTime: MemoryTemporalInterval;\n\treadonly transactionTime: MemoryTemporalInterval;\n\treadonly provenance?: readonly MemoryProvenance[];\n}\n\nexport interface MemoryEpisode {\n\treadonly id: string;\n\treadonly scope: MemoryScope;\n\treadonly generationId: string;\n\treadonly category: MemoryCategory;\n\treadonly title: string;\n\treadonly occurredAt: MemoryTemporalInstant;\n\treadonly validTime: MemoryTemporalInterval;\n\treadonly transactionTime: MemoryTemporalInterval;\n\treadonly provenance?: readonly MemoryProvenance[];\n}\n\nexport type MemoryScopeValidationReason = \"eligible\" | \"missing_workspace_id\" | \"missing_repo_sha\" | \"missing_branch\";\nexport type MemoryScopeValidationDecision =\n\t| { readonly ok: true; readonly reason: \"eligible\" }\n\t| { readonly ok: false; readonly reason: Exclude<MemoryScopeValidationReason, \"eligible\"> };\n\nexport type MemoryCategoryValidationReason = \"eligible\" | \"forbidden_category\" | \"unsupported_category\";\nexport type MemoryCategoryValidationDecision =\n\t| { readonly ok: true; readonly reason: \"eligible\" }\n\t| { readonly ok: false; readonly reason: Exclude<MemoryCategoryValidationReason, \"eligible\"> };\n\nexport interface ListMemoryAssertionsInput {\n\treadonly scope: MemoryScope;\n\treadonly categories?: readonly MemoryCategory[];\n\treadonly statuses?: readonly MemoryAssertionStatus[];\n\treadonly validAt?: MemoryTemporalInstant;\n\treadonly transactionAsOf?: MemoryTemporalInstant;\n\treadonly includeInactiveGenerations?: boolean;\n}\n\nexport interface MemorySearchInput {\n\treadonly scope: MemoryScope;\n\treadonly category: MemoryCategory;\n\treadonly query: string;\n\treadonly statuses?: readonly MemoryAssertionStatus[];\n\treadonly validAt?: MemoryTemporalInstant;\n\treadonly transactionAsOf?: MemoryTemporalInstant;\n\treadonly limit?: number;\n\treadonly includeInactiveGenerations?: boolean;\n}\n\nexport interface MemorySearchHit {\n\treadonly assertion: MemoryAssertion;\n\treadonly score: number;\n\treadonly matchedTokens: readonly string[];\n}\n\nexport interface FunctionalConflictOptions {\n\treadonly functionalPredicates?: readonly string[];\n\treadonly statuses?: readonly MemoryAssertionStatus[];\n}\n\nexport interface MemoryAssertionConflict {\n\treadonly subjectId: string;\n\treadonly predicate: string;\n\treadonly assertionIds: readonly [string, string];\n\treadonly objectValues: readonly [MemoryJsonValue, MemoryJsonValue];\n\treadonly validOverlap: MemoryTemporalInterval;\n}\n\nexport interface ConfidenceReinforcementInput {\n\treadonly currentConfidence: number;\n\treadonly evidenceConfidence: number;\n\treadonly weight?: number;\n}\n\nexport interface ContextGraphMemoryStore {\n\tputGeneration(generation: MemoryGeneration): Promise<MemoryGeneration>;\n\tputEntity(entity: MemoryEntity): Promise<MemoryEntity>;\n\tputAssertion(assertion: MemoryAssertion): Promise<MemoryAssertion>;\n\tputEpisode(episode: MemoryEpisode): Promise<MemoryEpisode>;\n\tgetGeneration(id: string): Promise<MemoryGeneration | undefined>;\n\tlistAssertions(input: ListMemoryAssertionsInput): Promise<MemoryAssertion[]>;\n\tmemory_search(input: MemorySearchInput): Promise<MemorySearchHit[]>;\n}\n\nconst ALLOWED_MEMORY_CATEGORIES = new Set<string>([\n\t\"decision\",\n\t\"verified_fact\",\n\t\"resolved_error\",\n\t\"user_preference\",\n\t\"unresolved_task\",\n\t\"test_evidence\",\n\t\"build_evidence\",\n]);\n\nconst FORBIDDEN_MEMORY_CATEGORIES = new Set<string>([\"raw_conversation\", \"raw_shell_output\", \"speculation\", \"secret\"]);\nconst DEFAULT_ASSERTION_STATUSES: readonly MemoryAssertionStatus[] = [\"active\"];\n\nexport function validateMemoryScope(scope: MemoryScope): MemoryScopeValidationDecision {\n\tif (scope.workspaceId.trim().length === 0) return { ok: false, reason: \"missing_workspace_id\" };\n\tif (scope.repoSha.trim().length === 0) return { ok: false, reason: \"missing_repo_sha\" };\n\tif (scope.branch.trim().length === 0) return { ok: false, reason: \"missing_branch\" };\n\treturn { ok: true, reason: \"eligible\" };\n}\n\nexport function validateMemoryCategory(category: MemoryCategory): MemoryCategoryValidationDecision {\n\tconst normalized = category.trim();\n\tif (FORBIDDEN_MEMORY_CATEGORIES.has(normalized)) return { ok: false, reason: \"forbidden_category\" };\n\tif (!ALLOWED_MEMORY_CATEGORIES.has(normalized)) return { ok: false, reason: \"unsupported_category\" };\n\treturn { ok: true, reason: \"eligible\" };\n}\n\nexport function reinforceAssertionConfidence(input: ConfidenceReinforcementInput): number {\n\tconst currentConfidence = clamp01(input.currentConfidence);\n\tconst evidenceConfidence = clamp01(input.evidenceConfidence);\n\tconst weight = clamp01(input.weight ?? 1);\n\treturn clamp01(currentConfidence + (1 - currentConfidence) * evidenceConfidence * weight);\n}\n\nexport function detectFunctionalAssertionConflicts(\n\tassertions: readonly MemoryAssertion[],\n\toptions: FunctionalConflictOptions = {},\n): MemoryAssertionConflict[] {\n\tconst functionalPredicates = new Set(options.functionalPredicates ?? []);\n\tconst statuses = new Set(options.statuses ?? DEFAULT_ASSERTION_STATUSES);\n\tconst candidates = [...assertions]\n\t\t.filter((candidate) => statuses.has(candidate.status) && isFunctionalAssertion(candidate, functionalPredicates))\n\t\t.sort(compareAssertionIds);\n\tconst conflicts: MemoryAssertionConflict[] = [];\n\n\tfor (const [leftIndex, left] of candidates.entries()) {\n\t\tfor (const right of candidates.slice(leftIndex + 1)) {\n\t\t\tif (!canConflict(left, right)) continue;\n\t\t\tconst validOverlap = getIntervalOverlap(left.validTime, right.validTime);\n\t\t\tif (!validOverlap) continue;\n\t\t\tconflicts.push({\n\t\t\t\tsubjectId: left.subjectId,\n\t\t\t\tpredicate: left.predicate,\n\t\t\t\tassertionIds: [left.id, right.id],\n\t\t\t\tobjectValues: [left.object, right.object],\n\t\t\t\tvalidOverlap,\n\t\t\t});\n\t\t}\n\t}\n\n\treturn conflicts.sort(\n\t\t(a, b) =>\n\t\t\ta.assertionIds[0].localeCompare(b.assertionIds[0]) || a.assertionIds[1].localeCompare(b.assertionIds[1]),\n\t);\n}\n\nexport class InMemoryContextGraphMemoryStore implements ContextGraphMemoryStore {\n\tprivate readonly generations = new Map<string, MemoryGeneration>();\n\tprivate readonly entities = new Map<string, MemoryEntity>();\n\tprivate readonly assertions = new Map<string, MemoryAssertion>();\n\tprivate readonly episodes = new Map<string, MemoryEpisode>();\n\n\tasync putGeneration(generation: MemoryGeneration): Promise<MemoryGeneration> {\n\t\tassertValidScope(generation.scope);\n\t\tassertNonEmptyId(generation.id, \"generation id\");\n\t\tparseInstant(generation.createdAt, \"generation createdAt\");\n\t\tconst record = cloneGeneration(generation);\n\t\tthis.generations.set(record.id, record);\n\t\treturn cloneGeneration(record);\n\t}\n\n\tasync putEntity(entity: MemoryEntity): Promise<MemoryEntity> {\n\t\tassertValidScope(entity.scope);\n\t\tassertNonEmptyId(entity.id, \"entity id\");\n\t\tthis.assertGenerationScope(entity.generationId, entity.scope);\n\t\tassertValidInterval(entity.validTime, \"entity validTime\");\n\t\tassertValidInterval(entity.transactionTime, \"entity transactionTime\");\n\t\tconst record = cloneEntity(entity);\n\t\tthis.entities.set(record.id, record);\n\t\treturn cloneEntity(record);\n\t}\n\n\tasync putAssertion(assertion: MemoryAssertion): Promise<MemoryAssertion> {\n\t\tassertValidScope(assertion.scope);\n\t\tassertNonEmptyId(assertion.id, \"assertion id\");\n\t\tassertAllowedCategory(assertion.category);\n\t\tassertValidConfidence(assertion.confidence);\n\t\tassertProvenance(assertion);\n\t\tthis.assertGenerationScope(assertion.generationId, assertion.scope);\n\t\tassertValidInterval(assertion.validTime, \"assertion validTime\");\n\t\tassertValidInterval(assertion.transactionTime, \"assertion transactionTime\");\n\t\tconst record = cloneAssertion(assertion);\n\t\tthis.assertions.set(record.id, record);\n\t\treturn cloneAssertion(record);\n\t}\n\n\tasync putEpisode(episode: MemoryEpisode): Promise<MemoryEpisode> {\n\t\tassertValidScope(episode.scope);\n\t\tassertNonEmptyId(episode.id, \"episode id\");\n\t\tassertAllowedCategory(episode.category);\n\t\tparseInstant(episode.occurredAt, \"episode occurredAt\");\n\t\tthis.assertGenerationScope(episode.generationId, episode.scope);\n\t\tassertValidInterval(episode.validTime, \"episode validTime\");\n\t\tassertValidInterval(episode.transactionTime, \"episode transactionTime\");\n\t\tconst record = cloneEpisode(episode);\n\t\tthis.episodes.set(record.id, record);\n\t\treturn cloneEpisode(record);\n\t}\n\n\tasync getGeneration(id: string): Promise<MemoryGeneration | undefined> {\n\t\tconst generation = this.generations.get(id);\n\t\treturn generation ? cloneGeneration(generation) : undefined;\n\t}\n\n\tasync listAssertions(input: ListMemoryAssertionsInput): Promise<MemoryAssertion[]> {\n\t\tassertValidScope(input.scope);\n\t\tfor (const category of input.categories ?? []) {\n\t\t\tassertAllowedCategory(category);\n\t\t}\n\t\tconst categories = input.categories ? new Set(input.categories) : undefined;\n\t\tconst statuses = new Set(input.statuses ?? DEFAULT_ASSERTION_STATUSES);\n\t\tconst activeGenerationIds = this.getGenerationIds(input.scope, \"active\");\n\t\tconst filtered = [...this.assertions.values()]\n\t\t\t.filter((assertion) => sameScope(assertion.scope, input.scope))\n\t\t\t.filter((assertion) => categories === undefined || categories.has(assertion.category))\n\t\t\t.filter((assertion) => statuses.has(assertion.status))\n\t\t\t.filter(\n\t\t\t\t(assertion) => input.includeInactiveGenerations === true || activeGenerationIds.has(assertion.generationId),\n\t\t\t)\n\t\t\t.filter((assertion) => matchesValidTime(assertion.validTime, input.validAt))\n\t\t\t.filter((assertion) => matchesTransactionTime(assertion.transactionTime, input.transactionAsOf))\n\t\t\t.sort(compareAssertionIds)\n\t\t\t.map(cloneAssertion);\n\t\treturn filtered;\n\t}\n\n\tasync memory_search(input: MemorySearchInput): Promise<MemorySearchHit[]> {\n\t\tassertAllowedCategory(input.category);\n\t\tconst queryTokens = uniqueTokens(input.query);\n\t\tconst assertions = await this.listAssertions({\n\t\t\tscope: input.scope,\n\t\t\tcategories: [input.category],\n\t\t\tstatuses: input.statuses,\n\t\t\tvalidAt: input.validAt,\n\t\t\ttransactionAsOf: input.transactionAsOf,\n\t\t\tincludeInactiveGenerations: input.includeInactiveGenerations,\n\t\t});\n\t\tconst hits = assertions\n\t\t\t.map((assertion) => scoreSearchAssertion(assertion, input.query, queryTokens))\n\t\t\t.filter((hit) => queryTokens.length === 0 || hit.score > 0)\n\t\t\t.sort(compareSearchHits);\n\t\tconst limit = input.limit === undefined ? hits.length : Math.max(0, Math.floor(input.limit));\n\t\treturn hits.slice(0, limit);\n\t}\n\n\tprivate assertGenerationScope(generationId: string, scope: MemoryScope): void {\n\t\tconst generation = this.generations.get(generationId);\n\t\tif (!generation) throw new Error(`memory generation not found: ${generationId}`);\n\t\tif (!sameScope(generation.scope, scope)) throw new Error(`memory generation scope mismatch: ${generationId}`);\n\t}\n\n\tprivate getGenerationIds(scope: MemoryScope, status: MemoryGenerationStatus): Set<string> {\n\t\treturn new Set(\n\t\t\t[...this.generations.values()]\n\t\t\t\t.filter((generation) => generation.status === status && sameScope(generation.scope, scope))\n\t\t\t\t.map((generation) => generation.id),\n\t\t);\n\t}\n}\n\nfunction assertValidScope(scope: MemoryScope): void {\n\tconst decision = validateMemoryScope(scope);\n\tif (decision.ok) return;\n\tthrow new Error(`invalid memory scope: missing ${formatScopeReason(decision.reason)}`);\n}\n\nfunction assertAllowedCategory(category: MemoryCategory): void {\n\tconst decision = validateMemoryCategory(category);\n\tif (decision.ok) return;\n\tif (decision.reason === \"forbidden_category\") throw new Error(`forbidden memory category: ${category}`);\n\tthrow new Error(`unsupported memory category: ${category}`);\n}\n\nfunction assertProvenance(assertion: MemoryAssertion): void {\n\tif (assertion.assertionKind !== \"observed\" && assertion.assertionKind !== \"inferred\") return;\n\tconst provenance = assertion.provenance ?? [];\n\tif (provenance.length === 0 || provenance.some((entry) => entry.sourceId.trim().length === 0)) {\n\t\tthrow new Error(\"provenance is required for observed and inferred assertions\");\n\t}\n}\n\nfunction assertValidConfidence(confidence: number): void {\n\tif (!Number.isFinite(confidence) || confidence < 0 || confidence > 1) {\n\t\tthrow new Error(\"assertion confidence must be between 0 and 1\");\n\t}\n}\n\nfunction assertNonEmptyId(id: string, label: string): void {\n\tif (id.trim().length === 0) throw new Error(`missing ${label}`);\n}\n\nfunction assertValidInterval(interval: MemoryTemporalInterval, label: string): void {\n\tconst from = parseInstant(interval.from, `${label}.from`);\n\tconst to = interval.to === undefined ? Number.POSITIVE_INFINITY : parseInstant(interval.to, `${label}.to`);\n\tif (to <= from) throw new Error(`${label} must have to greater than from`);\n}\n\nfunction parseInstant(instant: MemoryTemporalInstant, label: string): number {\n\tconst timestamp = instant instanceof Date ? instant.getTime() : Date.parse(instant);\n\tif (!Number.isFinite(timestamp)) throw new Error(`invalid temporal instant: ${label}`);\n\treturn timestamp;\n}\n\nfunction matchesValidTime(interval: MemoryTemporalInterval, validAt: MemoryTemporalInstant | undefined): boolean {\n\tif (validAt === undefined) return true;\n\treturn intervalContains(interval, parseInstant(validAt, \"validAt\"));\n}\n\nfunction matchesTransactionTime(\n\tinterval: MemoryTemporalInterval,\n\ttransactionAsOf: MemoryTemporalInstant | undefined,\n): boolean {\n\tif (transactionAsOf === undefined) return interval.to === undefined;\n\treturn intervalContains(interval, parseInstant(transactionAsOf, \"transactionAsOf\"));\n}\n\nfunction intervalContains(interval: MemoryTemporalInterval, timestamp: number): boolean {\n\tconst from = parseInstant(interval.from, \"interval.from\");\n\tconst to = interval.to === undefined ? Number.POSITIVE_INFINITY : parseInstant(interval.to, \"interval.to\");\n\treturn from <= timestamp && timestamp < to;\n}\n\nfunction getIntervalOverlap(\n\tleft: MemoryTemporalInterval,\n\tright: MemoryTemporalInterval,\n): MemoryTemporalInterval | undefined {\n\tconst leftFrom = parseInstant(left.from, \"left validTime.from\");\n\tconst leftTo = left.to === undefined ? Number.POSITIVE_INFINITY : parseInstant(left.to, \"left validTime.to\");\n\tconst rightFrom = parseInstant(right.from, \"right validTime.from\");\n\tconst rightTo = right.to === undefined ? Number.POSITIVE_INFINITY : parseInstant(right.to, \"right validTime.to\");\n\tconst overlapFrom = Math.max(leftFrom, rightFrom);\n\tconst overlapTo = Math.min(leftTo, rightTo);\n\tif (overlapTo <= overlapFrom) return undefined;\n\treturn {\n\t\tfrom: new Date(overlapFrom).toISOString(),\n\t\tto: Number.isFinite(overlapTo) ? new Date(overlapTo).toISOString() : undefined,\n\t};\n}\n\nfunction isFunctionalAssertion(assertion: MemoryAssertion, functionalPredicates: ReadonlySet<string>): boolean {\n\treturn assertion.functional === true || functionalPredicates.has(assertion.predicate);\n}\n\nfunction canConflict(left: MemoryAssertion, right: MemoryAssertion): boolean {\n\treturn (\n\t\tsameScope(left.scope, right.scope) &&\n\t\tleft.subjectId === right.subjectId &&\n\t\tleft.predicate === right.predicate &&\n\t\tcanonicalJsonStringify(left.object) !== canonicalJsonStringify(right.object)\n\t);\n}\n\nfunction scoreSearchAssertion(\n\tassertion: MemoryAssertion,\n\tquery: string,\n\tqueryTokens: readonly string[],\n): MemorySearchHit {\n\tconst searchText = getAssertionSearchText(assertion);\n\tconst searchTokens = new Set(tokenize(searchText));\n\tconst matchedTokens = queryTokens.filter((token) => searchTokens.has(token));\n\tconst coverageScore = queryTokens.length === 0 ? 1 : matchedTokens.length / queryTokens.length;\n\tconst normalizedQuery = normalizeSearchText(query);\n\tconst phraseBonus =\n\t\tnormalizedQuery.length > 0 && normalizeSearchText(searchText).includes(normalizedQuery) ? 0.1 : 0;\n\treturn {\n\t\tassertion,\n\t\tscore: clamp01(coverageScore + phraseBonus),\n\t\tmatchedTokens,\n\t};\n}\n\nfunction getAssertionSearchText(assertion: MemoryAssertion): string {\n\treturn [\n\t\tassertion.id,\n\t\tassertion.subjectId,\n\t\tassertion.predicate,\n\t\tassertion.category,\n\t\tcanonicalJsonStringify(assertion.object),\n\t]\n\t\t.filter((part) => part.length > 0)\n\t\t.join(\"\\n\");\n}\n\nfunction uniqueTokens(text: string): string[] {\n\treturn [...new Set(tokenize(text))];\n}\n\nfunction tokenize(text: string): string[] {\n\treturn normalizeSearchText(text).match(/[\\p{L}\\p{N}]+/gu) ?? [];\n}\n\nfunction normalizeSearchText(text: string): string {\n\treturn text\n\t\t.replace(/([\\p{Ll}\\d])([\\p{Lu}])/gu, \"$1 $2\")\n\t\t.normalize(\"NFKC\")\n\t\t.toLowerCase();\n}\n\nfunction canonicalJsonStringify(value: MemoryJsonValue): string {\n\tif (value === null) return \"null\";\n\tif (typeof value === \"string\" || typeof value === \"boolean\") return JSON.stringify(value);\n\tif (typeof value === \"number\") return Number.isFinite(value) ? JSON.stringify(value) : \"null\";\n\tif (isMemoryJsonArray(value)) return `[${value.map((item) => canonicalJsonStringify(item)).join(\",\")}]`;\n\tconst record: { readonly [key: string]: MemoryJsonValue | undefined } = value;\n\tconst entries = Object.keys(record)\n\t\t.filter((key) => record[key] !== undefined)\n\t\t.sort()\n\t\t.map((key) => `${JSON.stringify(key)}:${canonicalJsonStringify(record[key] ?? null)}`);\n\treturn `{${entries.join(\",\")}}`;\n}\n\nfunction isMemoryJsonArray(value: MemoryJsonValue): value is readonly MemoryJsonValue[] {\n\treturn Array.isArray(value);\n}\n\nfunction compareAssertionIds(left: MemoryAssertion, right: MemoryAssertion): number {\n\treturn left.id.localeCompare(right.id);\n}\n\nfunction compareSearchHits(left: MemorySearchHit, right: MemorySearchHit): number {\n\treturn (\n\t\tright.score - left.score ||\n\t\tright.assertion.confidence - left.assertion.confidence ||\n\t\tleft.assertion.id.localeCompare(right.assertion.id)\n\t);\n}\n\nfunction sameScope(left: MemoryScope, right: MemoryScope): boolean {\n\treturn left.workspaceId === right.workspaceId && left.repoSha === right.repoSha && left.branch === right.branch;\n}\n\nfunction formatScopeReason(reason: Exclude<MemoryScopeValidationReason, \"eligible\">): string {\n\tif (reason === \"missing_workspace_id\") return \"workspaceId\";\n\tif (reason === \"missing_repo_sha\") return \"repoSha\";\n\treturn \"branch\";\n}\n\nfunction cloneScope(scope: MemoryScope): MemoryScope {\n\treturn { workspaceId: scope.workspaceId, repoSha: scope.repoSha, branch: scope.branch };\n}\n\nfunction cloneInterval(interval: MemoryTemporalInterval): MemoryTemporalInterval {\n\treturn { from: interval.from, to: interval.to };\n}\n\nfunction cloneProvenance(provenance: readonly MemoryProvenance[] | undefined): MemoryProvenance[] | undefined {\n\treturn provenance?.map((entry) => ({ ...entry }));\n}\n\nfunction cloneGeneration(generation: MemoryGeneration): MemoryGeneration {\n\treturn { ...generation, scope: cloneScope(generation.scope) };\n}\n\nfunction cloneEntity(entity: MemoryEntity): MemoryEntity {\n\treturn {\n\t\t...entity,\n\t\tscope: cloneScope(entity.scope),\n\t\taliases: entity.aliases ? [...entity.aliases] : undefined,\n\t\tvalidTime: cloneInterval(entity.validTime),\n\t\ttransactionTime: cloneInterval(entity.transactionTime),\n\t};\n}\n\nfunction cloneAssertion(assertion: MemoryAssertion): MemoryAssertion {\n\treturn {\n\t\t...assertion,\n\t\tscope: cloneScope(assertion.scope),\n\t\tobject: cloneJsonValue(assertion.object),\n\t\tvalidTime: cloneInterval(assertion.validTime),\n\t\ttransactionTime: cloneInterval(assertion.transactionTime),\n\t\tprovenance: cloneProvenance(assertion.provenance),\n\t};\n}\n\nfunction cloneJsonValue(value: MemoryJsonValue): MemoryJsonValue {\n\tif (value === null || typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\") {\n\t\treturn value;\n\t}\n\tif (isMemoryJsonArray(value)) return value.map((item) => cloneJsonValue(item));\n\tconst clone: Record<string, MemoryJsonValue> = {};\n\tfor (const key of Object.keys(value)) {\n\t\tconst item = value[key];\n\t\tif (item !== undefined) clone[key] = cloneJsonValue(item);\n\t}\n\treturn clone;\n}\n\nfunction cloneEpisode(episode: MemoryEpisode): MemoryEpisode {\n\treturn {\n\t\t...episode,\n\t\tscope: cloneScope(episode.scope),\n\t\tvalidTime: cloneInterval(episode.validTime),\n\t\ttransactionTime: cloneInterval(episode.transactionTime),\n\t\tprovenance: cloneProvenance(episode.provenance),\n\t};\n}\n\nfunction clamp01(value: number): number {\n\tif (!Number.isFinite(value) || value <= 0) return 0;\n\tif (value >= 1) return 1;\n\treturn value;\n}\n"]}
@@ -0,0 +1,377 @@
1
+ const ALLOWED_MEMORY_CATEGORIES = new Set([
2
+ "decision",
3
+ "verified_fact",
4
+ "resolved_error",
5
+ "user_preference",
6
+ "unresolved_task",
7
+ "test_evidence",
8
+ "build_evidence",
9
+ ]);
10
+ const FORBIDDEN_MEMORY_CATEGORIES = new Set(["raw_conversation", "raw_shell_output", "speculation", "secret"]);
11
+ const DEFAULT_ASSERTION_STATUSES = ["active"];
12
+ export function validateMemoryScope(scope) {
13
+ if (scope.workspaceId.trim().length === 0)
14
+ return { ok: false, reason: "missing_workspace_id" };
15
+ if (scope.repoSha.trim().length === 0)
16
+ return { ok: false, reason: "missing_repo_sha" };
17
+ if (scope.branch.trim().length === 0)
18
+ return { ok: false, reason: "missing_branch" };
19
+ return { ok: true, reason: "eligible" };
20
+ }
21
+ export function validateMemoryCategory(category) {
22
+ const normalized = category.trim();
23
+ if (FORBIDDEN_MEMORY_CATEGORIES.has(normalized))
24
+ return { ok: false, reason: "forbidden_category" };
25
+ if (!ALLOWED_MEMORY_CATEGORIES.has(normalized))
26
+ return { ok: false, reason: "unsupported_category" };
27
+ return { ok: true, reason: "eligible" };
28
+ }
29
+ export function reinforceAssertionConfidence(input) {
30
+ const currentConfidence = clamp01(input.currentConfidence);
31
+ const evidenceConfidence = clamp01(input.evidenceConfidence);
32
+ const weight = clamp01(input.weight ?? 1);
33
+ return clamp01(currentConfidence + (1 - currentConfidence) * evidenceConfidence * weight);
34
+ }
35
+ export function detectFunctionalAssertionConflicts(assertions, options = {}) {
36
+ const functionalPredicates = new Set(options.functionalPredicates ?? []);
37
+ const statuses = new Set(options.statuses ?? DEFAULT_ASSERTION_STATUSES);
38
+ const candidates = [...assertions]
39
+ .filter((candidate) => statuses.has(candidate.status) && isFunctionalAssertion(candidate, functionalPredicates))
40
+ .sort(compareAssertionIds);
41
+ const conflicts = [];
42
+ for (const [leftIndex, left] of candidates.entries()) {
43
+ for (const right of candidates.slice(leftIndex + 1)) {
44
+ if (!canConflict(left, right))
45
+ continue;
46
+ const validOverlap = getIntervalOverlap(left.validTime, right.validTime);
47
+ if (!validOverlap)
48
+ continue;
49
+ conflicts.push({
50
+ subjectId: left.subjectId,
51
+ predicate: left.predicate,
52
+ assertionIds: [left.id, right.id],
53
+ objectValues: [left.object, right.object],
54
+ validOverlap,
55
+ });
56
+ }
57
+ }
58
+ return conflicts.sort((a, b) => a.assertionIds[0].localeCompare(b.assertionIds[0]) || a.assertionIds[1].localeCompare(b.assertionIds[1]));
59
+ }
60
+ export class InMemoryContextGraphMemoryStore {
61
+ generations = new Map();
62
+ entities = new Map();
63
+ assertions = new Map();
64
+ episodes = new Map();
65
+ async putGeneration(generation) {
66
+ assertValidScope(generation.scope);
67
+ assertNonEmptyId(generation.id, "generation id");
68
+ parseInstant(generation.createdAt, "generation createdAt");
69
+ const record = cloneGeneration(generation);
70
+ this.generations.set(record.id, record);
71
+ return cloneGeneration(record);
72
+ }
73
+ async putEntity(entity) {
74
+ assertValidScope(entity.scope);
75
+ assertNonEmptyId(entity.id, "entity id");
76
+ this.assertGenerationScope(entity.generationId, entity.scope);
77
+ assertValidInterval(entity.validTime, "entity validTime");
78
+ assertValidInterval(entity.transactionTime, "entity transactionTime");
79
+ const record = cloneEntity(entity);
80
+ this.entities.set(record.id, record);
81
+ return cloneEntity(record);
82
+ }
83
+ async putAssertion(assertion) {
84
+ assertValidScope(assertion.scope);
85
+ assertNonEmptyId(assertion.id, "assertion id");
86
+ assertAllowedCategory(assertion.category);
87
+ assertValidConfidence(assertion.confidence);
88
+ assertProvenance(assertion);
89
+ this.assertGenerationScope(assertion.generationId, assertion.scope);
90
+ assertValidInterval(assertion.validTime, "assertion validTime");
91
+ assertValidInterval(assertion.transactionTime, "assertion transactionTime");
92
+ const record = cloneAssertion(assertion);
93
+ this.assertions.set(record.id, record);
94
+ return cloneAssertion(record);
95
+ }
96
+ async putEpisode(episode) {
97
+ assertValidScope(episode.scope);
98
+ assertNonEmptyId(episode.id, "episode id");
99
+ assertAllowedCategory(episode.category);
100
+ parseInstant(episode.occurredAt, "episode occurredAt");
101
+ this.assertGenerationScope(episode.generationId, episode.scope);
102
+ assertValidInterval(episode.validTime, "episode validTime");
103
+ assertValidInterval(episode.transactionTime, "episode transactionTime");
104
+ const record = cloneEpisode(episode);
105
+ this.episodes.set(record.id, record);
106
+ return cloneEpisode(record);
107
+ }
108
+ async getGeneration(id) {
109
+ const generation = this.generations.get(id);
110
+ return generation ? cloneGeneration(generation) : undefined;
111
+ }
112
+ async listAssertions(input) {
113
+ assertValidScope(input.scope);
114
+ for (const category of input.categories ?? []) {
115
+ assertAllowedCategory(category);
116
+ }
117
+ const categories = input.categories ? new Set(input.categories) : undefined;
118
+ const statuses = new Set(input.statuses ?? DEFAULT_ASSERTION_STATUSES);
119
+ const activeGenerationIds = this.getGenerationIds(input.scope, "active");
120
+ const filtered = [...this.assertions.values()]
121
+ .filter((assertion) => sameScope(assertion.scope, input.scope))
122
+ .filter((assertion) => categories === undefined || categories.has(assertion.category))
123
+ .filter((assertion) => statuses.has(assertion.status))
124
+ .filter((assertion) => input.includeInactiveGenerations === true || activeGenerationIds.has(assertion.generationId))
125
+ .filter((assertion) => matchesValidTime(assertion.validTime, input.validAt))
126
+ .filter((assertion) => matchesTransactionTime(assertion.transactionTime, input.transactionAsOf))
127
+ .sort(compareAssertionIds)
128
+ .map(cloneAssertion);
129
+ return filtered;
130
+ }
131
+ async memory_search(input) {
132
+ assertAllowedCategory(input.category);
133
+ const queryTokens = uniqueTokens(input.query);
134
+ const assertions = await this.listAssertions({
135
+ scope: input.scope,
136
+ categories: [input.category],
137
+ statuses: input.statuses,
138
+ validAt: input.validAt,
139
+ transactionAsOf: input.transactionAsOf,
140
+ includeInactiveGenerations: input.includeInactiveGenerations,
141
+ });
142
+ const hits = assertions
143
+ .map((assertion) => scoreSearchAssertion(assertion, input.query, queryTokens))
144
+ .filter((hit) => queryTokens.length === 0 || hit.score > 0)
145
+ .sort(compareSearchHits);
146
+ const limit = input.limit === undefined ? hits.length : Math.max(0, Math.floor(input.limit));
147
+ return hits.slice(0, limit);
148
+ }
149
+ assertGenerationScope(generationId, scope) {
150
+ const generation = this.generations.get(generationId);
151
+ if (!generation)
152
+ throw new Error(`memory generation not found: ${generationId}`);
153
+ if (!sameScope(generation.scope, scope))
154
+ throw new Error(`memory generation scope mismatch: ${generationId}`);
155
+ }
156
+ getGenerationIds(scope, status) {
157
+ return new Set([...this.generations.values()]
158
+ .filter((generation) => generation.status === status && sameScope(generation.scope, scope))
159
+ .map((generation) => generation.id));
160
+ }
161
+ }
162
+ function assertValidScope(scope) {
163
+ const decision = validateMemoryScope(scope);
164
+ if (decision.ok)
165
+ return;
166
+ throw new Error(`invalid memory scope: missing ${formatScopeReason(decision.reason)}`);
167
+ }
168
+ function assertAllowedCategory(category) {
169
+ const decision = validateMemoryCategory(category);
170
+ if (decision.ok)
171
+ return;
172
+ if (decision.reason === "forbidden_category")
173
+ throw new Error(`forbidden memory category: ${category}`);
174
+ throw new Error(`unsupported memory category: ${category}`);
175
+ }
176
+ function assertProvenance(assertion) {
177
+ if (assertion.assertionKind !== "observed" && assertion.assertionKind !== "inferred")
178
+ return;
179
+ const provenance = assertion.provenance ?? [];
180
+ if (provenance.length === 0 || provenance.some((entry) => entry.sourceId.trim().length === 0)) {
181
+ throw new Error("provenance is required for observed and inferred assertions");
182
+ }
183
+ }
184
+ function assertValidConfidence(confidence) {
185
+ if (!Number.isFinite(confidence) || confidence < 0 || confidence > 1) {
186
+ throw new Error("assertion confidence must be between 0 and 1");
187
+ }
188
+ }
189
+ function assertNonEmptyId(id, label) {
190
+ if (id.trim().length === 0)
191
+ throw new Error(`missing ${label}`);
192
+ }
193
+ function assertValidInterval(interval, label) {
194
+ const from = parseInstant(interval.from, `${label}.from`);
195
+ const to = interval.to === undefined ? Number.POSITIVE_INFINITY : parseInstant(interval.to, `${label}.to`);
196
+ if (to <= from)
197
+ throw new Error(`${label} must have to greater than from`);
198
+ }
199
+ function parseInstant(instant, label) {
200
+ const timestamp = instant instanceof Date ? instant.getTime() : Date.parse(instant);
201
+ if (!Number.isFinite(timestamp))
202
+ throw new Error(`invalid temporal instant: ${label}`);
203
+ return timestamp;
204
+ }
205
+ function matchesValidTime(interval, validAt) {
206
+ if (validAt === undefined)
207
+ return true;
208
+ return intervalContains(interval, parseInstant(validAt, "validAt"));
209
+ }
210
+ function matchesTransactionTime(interval, transactionAsOf) {
211
+ if (transactionAsOf === undefined)
212
+ return interval.to === undefined;
213
+ return intervalContains(interval, parseInstant(transactionAsOf, "transactionAsOf"));
214
+ }
215
+ function intervalContains(interval, timestamp) {
216
+ const from = parseInstant(interval.from, "interval.from");
217
+ const to = interval.to === undefined ? Number.POSITIVE_INFINITY : parseInstant(interval.to, "interval.to");
218
+ return from <= timestamp && timestamp < to;
219
+ }
220
+ function getIntervalOverlap(left, right) {
221
+ const leftFrom = parseInstant(left.from, "left validTime.from");
222
+ const leftTo = left.to === undefined ? Number.POSITIVE_INFINITY : parseInstant(left.to, "left validTime.to");
223
+ const rightFrom = parseInstant(right.from, "right validTime.from");
224
+ const rightTo = right.to === undefined ? Number.POSITIVE_INFINITY : parseInstant(right.to, "right validTime.to");
225
+ const overlapFrom = Math.max(leftFrom, rightFrom);
226
+ const overlapTo = Math.min(leftTo, rightTo);
227
+ if (overlapTo <= overlapFrom)
228
+ return undefined;
229
+ return {
230
+ from: new Date(overlapFrom).toISOString(),
231
+ to: Number.isFinite(overlapTo) ? new Date(overlapTo).toISOString() : undefined,
232
+ };
233
+ }
234
+ function isFunctionalAssertion(assertion, functionalPredicates) {
235
+ return assertion.functional === true || functionalPredicates.has(assertion.predicate);
236
+ }
237
+ function canConflict(left, right) {
238
+ return (sameScope(left.scope, right.scope) &&
239
+ left.subjectId === right.subjectId &&
240
+ left.predicate === right.predicate &&
241
+ canonicalJsonStringify(left.object) !== canonicalJsonStringify(right.object));
242
+ }
243
+ function scoreSearchAssertion(assertion, query, queryTokens) {
244
+ const searchText = getAssertionSearchText(assertion);
245
+ const searchTokens = new Set(tokenize(searchText));
246
+ const matchedTokens = queryTokens.filter((token) => searchTokens.has(token));
247
+ const coverageScore = queryTokens.length === 0 ? 1 : matchedTokens.length / queryTokens.length;
248
+ const normalizedQuery = normalizeSearchText(query);
249
+ const phraseBonus = normalizedQuery.length > 0 && normalizeSearchText(searchText).includes(normalizedQuery) ? 0.1 : 0;
250
+ return {
251
+ assertion,
252
+ score: clamp01(coverageScore + phraseBonus),
253
+ matchedTokens,
254
+ };
255
+ }
256
+ function getAssertionSearchText(assertion) {
257
+ return [
258
+ assertion.id,
259
+ assertion.subjectId,
260
+ assertion.predicate,
261
+ assertion.category,
262
+ canonicalJsonStringify(assertion.object),
263
+ ]
264
+ .filter((part) => part.length > 0)
265
+ .join("\n");
266
+ }
267
+ function uniqueTokens(text) {
268
+ return [...new Set(tokenize(text))];
269
+ }
270
+ function tokenize(text) {
271
+ return normalizeSearchText(text).match(/[\p{L}\p{N}]+/gu) ?? [];
272
+ }
273
+ function normalizeSearchText(text) {
274
+ return text
275
+ .replace(/([\p{Ll}\d])([\p{Lu}])/gu, "$1 $2")
276
+ .normalize("NFKC")
277
+ .toLowerCase();
278
+ }
279
+ function canonicalJsonStringify(value) {
280
+ if (value === null)
281
+ return "null";
282
+ if (typeof value === "string" || typeof value === "boolean")
283
+ return JSON.stringify(value);
284
+ if (typeof value === "number")
285
+ return Number.isFinite(value) ? JSON.stringify(value) : "null";
286
+ if (isMemoryJsonArray(value))
287
+ return `[${value.map((item) => canonicalJsonStringify(item)).join(",")}]`;
288
+ const record = value;
289
+ const entries = Object.keys(record)
290
+ .filter((key) => record[key] !== undefined)
291
+ .sort()
292
+ .map((key) => `${JSON.stringify(key)}:${canonicalJsonStringify(record[key] ?? null)}`);
293
+ return `{${entries.join(",")}}`;
294
+ }
295
+ function isMemoryJsonArray(value) {
296
+ return Array.isArray(value);
297
+ }
298
+ function compareAssertionIds(left, right) {
299
+ return left.id.localeCompare(right.id);
300
+ }
301
+ function compareSearchHits(left, right) {
302
+ return (right.score - left.score ||
303
+ right.assertion.confidence - left.assertion.confidence ||
304
+ left.assertion.id.localeCompare(right.assertion.id));
305
+ }
306
+ function sameScope(left, right) {
307
+ return left.workspaceId === right.workspaceId && left.repoSha === right.repoSha && left.branch === right.branch;
308
+ }
309
+ function formatScopeReason(reason) {
310
+ if (reason === "missing_workspace_id")
311
+ return "workspaceId";
312
+ if (reason === "missing_repo_sha")
313
+ return "repoSha";
314
+ return "branch";
315
+ }
316
+ function cloneScope(scope) {
317
+ return { workspaceId: scope.workspaceId, repoSha: scope.repoSha, branch: scope.branch };
318
+ }
319
+ function cloneInterval(interval) {
320
+ return { from: interval.from, to: interval.to };
321
+ }
322
+ function cloneProvenance(provenance) {
323
+ return provenance?.map((entry) => ({ ...entry }));
324
+ }
325
+ function cloneGeneration(generation) {
326
+ return { ...generation, scope: cloneScope(generation.scope) };
327
+ }
328
+ function cloneEntity(entity) {
329
+ return {
330
+ ...entity,
331
+ scope: cloneScope(entity.scope),
332
+ aliases: entity.aliases ? [...entity.aliases] : undefined,
333
+ validTime: cloneInterval(entity.validTime),
334
+ transactionTime: cloneInterval(entity.transactionTime),
335
+ };
336
+ }
337
+ function cloneAssertion(assertion) {
338
+ return {
339
+ ...assertion,
340
+ scope: cloneScope(assertion.scope),
341
+ object: cloneJsonValue(assertion.object),
342
+ validTime: cloneInterval(assertion.validTime),
343
+ transactionTime: cloneInterval(assertion.transactionTime),
344
+ provenance: cloneProvenance(assertion.provenance),
345
+ };
346
+ }
347
+ function cloneJsonValue(value) {
348
+ if (value === null || typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
349
+ return value;
350
+ }
351
+ if (isMemoryJsonArray(value))
352
+ return value.map((item) => cloneJsonValue(item));
353
+ const clone = {};
354
+ for (const key of Object.keys(value)) {
355
+ const item = value[key];
356
+ if (item !== undefined)
357
+ clone[key] = cloneJsonValue(item);
358
+ }
359
+ return clone;
360
+ }
361
+ function cloneEpisode(episode) {
362
+ return {
363
+ ...episode,
364
+ scope: cloneScope(episode.scope),
365
+ validTime: cloneInterval(episode.validTime),
366
+ transactionTime: cloneInterval(episode.transactionTime),
367
+ provenance: cloneProvenance(episode.provenance),
368
+ };
369
+ }
370
+ function clamp01(value) {
371
+ if (!Number.isFinite(value) || value <= 0)
372
+ return 0;
373
+ if (value >= 1)
374
+ return 1;
375
+ return value;
376
+ }
377
+ //# sourceMappingURL=context-graph-memory-store.js.map