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":"pruner-policy.d.ts","sourceRoot":"","sources":["../../../src/core/compaction/pruner-policy.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Pure policy helpers for external context pruning and session compaction.\n *\n * Agent-message pruning and session_before_compact compaction are separate\n * ownership lanes. The runtime may run one agent-message pruner and one\n * session compactor, but only one enabled owner may handle session_before_compact.\n */\n\nexport type ExternalPrunerMode = \"experimental\" | \"permanent\";\nexport type ExternalPrunerLicense = \"known\" | \"unknown\";\nexport type PrunerTrigger = \"agent-message\";\nexport type SessionCompactorTrigger = \"session_before_compact\";\nexport type NeverPruneTarget = \"entries\";\nexport type SessionCompactorPhase = \"Extract\" | \"Explore\" | \"Synthesize\" | \"Verify\";\nexport type CompactStackProfile = \"production\" | \"cost-experiment\" | \"long-context-precision\";\nexport type ExternalContextPackageRole =\n\t| \"agent-message-pruner\"\n\t| \"session-before-compact-compactor\"\n\t| \"orchestration-tool\"\n\t| \"continuation-helper\"\n\t| \"blocked\"\n\t| \"unsupported\";\n\nexport interface PrunerRecommendedDefaults {\n\ttrigger: PrunerTrigger;\n\tsoft: number;\n\thard: number;\n\tkeepRecentTokens: number;\n\trecoverOriginals: boolean;\n\tneverPrune: NeverPruneTarget[];\n}\n\nexport interface SessionCompactorRecommendedDefaults {\n\ttrigger: SessionCompactorTrigger;\n\towner: string;\n\tprofile: string;\n\tautoTrigger: boolean;\n\tminContextPercent: number;\n\tbackupEnabled: boolean;\n\tpinPaths: string[];\n\tpreserveToolPairs: boolean;\n\tphases: SessionCompactorPhase[];\n}\n\nexport interface CompactStackRecommendation {\n\tpreCompression: string[];\n\tagentMessagePruner?: string;\n\tsessionCompactor?: string;\n\torchestrationTools: string[];\n\tproviderPromptCache: boolean;\n}\n\nexport interface ExternalPrunerRegistration {\n\towner: string;\n\tenabled: boolean;\n\tlicense?: ExternalPrunerLicense;\n\tdefaults?: Partial<PrunerRecommendedDefaults>;\n}\n\nexport interface ExternalSessionCompactorRegistration {\n\towner: string;\n\tenabled: boolean;\n\tlicense?: ExternalPrunerLicense;\n\tproviderPricingInjected?: boolean;\n\tsessionDefaults?: Partial<SessionCompactorRecommendedDefaults>;\n}\n\nexport interface ExternalContextPackageRegistration\n\textends ExternalPrunerRegistration,\n\t\tExternalSessionCompactorRegistration {}\n\nexport interface ValidateExternalPrunerOptions {\n\tmode: ExternalPrunerMode;\n}\n\nexport interface ValidatedExternalPrunerOwner {\n\towner: string;\n\tmode: ExternalPrunerMode;\n\tdefaults: PrunerRecommendedDefaults;\n}\n\nexport interface ValidatedSessionCompactorOwner {\n\towner: string;\n\tmode: ExternalPrunerMode;\n\tdefaults: SessionCompactorRecommendedDefaults;\n}\n\nexport interface ValidatedCompactPackageStack {\n\tagentMessagePruner?: ValidatedExternalPrunerOwner;\n\tsessionCompactor?: ValidatedSessionCompactorOwner;\n\torchestrationTools: string[];\n\tcontinuationHelpers: string[];\n}\n\ninterface BuiltInPrunerPolicy {\n\tlicense: ExternalPrunerLicense;\n\tallowedModes: readonly ExternalPrunerMode[];\n\texperimentalOnly: boolean;\n}\n\ninterface ContextPackagePolicy {\n\trole: ExternalContextPackageRole;\n\tlicense: ExternalPrunerLicense;\n\tallowedModes: readonly ExternalPrunerMode[];\n\tblockedReason?: string;\n\trequiresProviderPricing?: boolean;\n\tsessionDefaults?: SessionCompactorRecommendedDefaults;\n}\n\nconst PINNED_SESSION_COMPACTOR_PATHS = [\"AGENTS.md\", \"OMK.md\", \".omk/state.json\"] as const;\nconst SESSION_COMPACTOR_PHASES = [\"Extract\", \"Explore\", \"Synthesize\", \"Verify\"] as const;\n\nconst BUILT_IN_PRUNER_POLICIES: Record<string, BuiltInPrunerPolicy> = {\n\t\"pi-context-prune\": {\n\t\tlicense: \"known\",\n\t\tallowedModes: [\"experimental\", \"permanent\"],\n\t\texperimentalOnly: false,\n\t},\n\t\"pi-ultra-compact\": {\n\t\tlicense: \"known\",\n\t\tallowedModes: [\"experimental\"],\n\t\texperimentalOnly: true,\n\t},\n\t\"pi-vcc\": {\n\t\tlicense: \"unknown\",\n\t\tallowedModes: [\"experimental\"],\n\t\texperimentalOnly: true,\n\t},\n};\n\nconst CONTEXT_PACKAGE_POLICIES: Record<string, ContextPackagePolicy> = {\n\t\"pi-context-prune\": {\n\t\trole: \"agent-message-pruner\",\n\t\tlicense: \"known\",\n\t\tallowedModes: [\"experimental\", \"permanent\"],\n\t},\n\t\"pi-smart-compact\": {\n\t\trole: \"session-before-compact-compactor\",\n\t\tlicense: \"known\",\n\t\tallowedModes: [\"experimental\", \"permanent\"],\n\t\tsessionDefaults: createSessionCompactorDefaults(\"pi-smart-compact\", \"balanced\", 72),\n\t},\n\t\"pi-better-compact\": {\n\t\trole: \"session-before-compact-compactor\",\n\t\tlicense: \"known\",\n\t\tallowedModes: [\"experimental\"],\n\t\trequiresProviderPricing: true,\n\t\tsessionDefaults: createSessionCompactorDefaults(\"pi-better-compact\", \"cost-benefit\", 70),\n\t},\n\t\"pi-ultra-compact\": {\n\t\trole: \"session-before-compact-compactor\",\n\t\tlicense: \"known\",\n\t\tallowedModes: [\"experimental\"],\n\t\tsessionDefaults: createSessionCompactorDefaults(\"pi-ultra-compact\", \"canary\", 90),\n\t},\n\t\"pi-omni-compact\": {\n\t\trole: \"session-before-compact-compactor\",\n\t\tlicense: \"known\",\n\t\tallowedModes: [\"experimental\"],\n\t\tsessionDefaults: createSessionCompactorDefaults(\"pi-omni-compact\", \"precision\", 82),\n\t},\n\t\"pi-context-tools\": {\n\t\trole: \"orchestration-tool\",\n\t\tlicense: \"known\",\n\t\tallowedModes: [\"experimental\", \"permanent\"],\n\t},\n\t\"pi-continue\": {\n\t\trole: \"continuation-helper\",\n\t\tlicense: \"known\",\n\t\tallowedModes: [\"experimental\", \"permanent\"],\n\t},\n\t\"@adamjen/pi-compact-fast\": {\n\t\trole: \"blocked\",\n\t\tlicense: \"known\",\n\t\tallowedModes: [],\n\t\tblockedReason: \"source-edited model id configuration is not accepted for OMK runtime ownership\",\n\t},\n\t\"@davehardy20/pi-compact-plus\": {\n\t\trole: \"blocked\",\n\t\tlicense: \"known\",\n\t\tallowedModes: [],\n\t\tblockedReason: \"synthetic user message reinjection violates OMK authority-boundary preservation\",\n\t},\n};\n\nconst RECOMMENDED_PRUNER_DEFAULTS: PrunerRecommendedDefaults = {\n\ttrigger: \"agent-message\",\n\tsoft: 0.7,\n\thard: 0.82,\n\tkeepRecentTokens: 24_000,\n\trecoverOriginals: true,\n\tneverPrune: [\"entries\"],\n};\n\nexport function getRecommendedPrunerDefaults(): PrunerRecommendedDefaults {\n\treturn {\n\t\t...RECOMMENDED_PRUNER_DEFAULTS,\n\t\tneverPrune: [...RECOMMENDED_PRUNER_DEFAULTS.neverPrune],\n\t};\n}\n\nexport function getRecommendedSessionCompactorDefaults(): SessionCompactorRecommendedDefaults {\n\treturn cloneSessionCompactorDefaults(createSessionCompactorDefaults(\"pi-smart-compact\", \"balanced\", 72));\n}\n\nexport function getRecommendedCompactStack(profile: CompactStackProfile): CompactStackRecommendation {\n\tif (profile === \"cost-experiment\") {\n\t\treturn {\n\t\t\tpreCompression: [\"LeanCTX\", \"Headroom\"],\n\t\t\tsessionCompactor: \"pi-better-compact\",\n\t\t\torchestrationTools: [],\n\t\t\tproviderPromptCache: true,\n\t\t};\n\t}\n\n\tif (profile === \"long-context-precision\") {\n\t\treturn {\n\t\t\tpreCompression: [\"LeanCTX\", \"Headroom\"],\n\t\t\tsessionCompactor: \"pi-omni-compact\",\n\t\t\torchestrationTools: [],\n\t\t\tproviderPromptCache: false,\n\t\t};\n\t}\n\n\treturn {\n\t\tpreCompression: [\"LeanCTX\", \"Headroom\"],\n\t\tagentMessagePruner: \"pi-context-prune\",\n\t\tsessionCompactor: \"pi-smart-compact\",\n\t\torchestrationTools: [\"pi-context-tools\"],\n\t\tproviderPromptCache: true,\n\t};\n}\n\nexport function registerExternalPrunerOwner(\n\tregistry: readonly ExternalPrunerRegistration[],\n\tregistration: ExternalPrunerRegistration,\n): ExternalPrunerRegistration[] {\n\treturn [...registry, cloneRegistration(registration)];\n}\n\nexport function validateSingleExternalPrunerOwner(\n\tregistry: readonly ExternalPrunerRegistration[],\n\toptions: ValidateExternalPrunerOptions,\n): ValidatedExternalPrunerOwner | undefined {\n\tconst enabledPruners = registry.filter((registration) => registration.enabled);\n\tif (enabledPruners.length === 0) {\n\t\treturn undefined;\n\t}\n\n\tif (enabledPruners.length > 1) {\n\t\tthrow new Error(\n\t\t\t`Multiple enabled external pruners are not allowed: ${enabledPruners.map((registration) => registration.owner).join(\", \")}`,\n\t\t);\n\t}\n\n\tconst registration = enabledPruners[0];\n\tconst builtInPolicy = BUILT_IN_PRUNER_POLICIES[registration.owner];\n\tconst license = registration.license ?? builtInPolicy?.license ?? \"unknown\";\n\n\tif (options.mode === \"permanent\" && license === \"unknown\") {\n\t\tthrow new Error(`${registration.owner} has unknown license and cannot be enabled in permanent mode`);\n\t}\n\n\tif (builtInPolicy && !builtInPolicy.allowedModes.includes(options.mode)) {\n\t\tconst reason = builtInPolicy.experimentalOnly ? \"experimental-only\" : `not enabled for ${options.mode}`;\n\t\tthrow new Error(`${registration.owner} is ${reason} and cannot be enabled in ${options.mode} mode`);\n\t}\n\n\treturn {\n\t\towner: registration.owner,\n\t\tmode: options.mode,\n\t\tdefaults: mergeRecommendedDefaults(registration.defaults),\n\t};\n}\n\nexport function validateSingleSessionCompactorOwner(\n\tregistry: readonly ExternalSessionCompactorRegistration[],\n\toptions: ValidateExternalPrunerOptions,\n): ValidatedSessionCompactorOwner | undefined {\n\tconst enabledCompactors = registry.filter((registration) => {\n\t\tif (!registration.enabled) return false;\n\t\tconst role = classifyContextPackageRole(registration.owner);\n\t\treturn role === \"session-before-compact-compactor\" || role === \"blocked\" || role === \"unsupported\";\n\t});\n\n\tfor (const registration of enabledCompactors) {\n\t\tconst policy = CONTEXT_PACKAGE_POLICIES[registration.owner];\n\t\tif (policy?.role === \"blocked\") {\n\t\t\tthrow new Error(`${registration.owner} is blocked: ${policy.blockedReason ?? \"not accepted\"}`);\n\t\t}\n\t}\n\n\tif (enabledCompactors.length === 0) {\n\t\treturn undefined;\n\t}\n\n\tif (enabledCompactors.length > 1) {\n\t\tthrow new Error(\n\t\t\t`Multiple enabled session_before_compact compactors are not allowed: ${enabledCompactors.map((registration) => registration.owner).join(\", \")}`,\n\t\t);\n\t}\n\n\treturn validateSessionCompactorRegistration(enabledCompactors[0], options);\n}\n\nexport function validateCompactPackageStack(\n\tregistry: readonly ExternalContextPackageRegistration[],\n\toptions: ValidateExternalPrunerOptions,\n): ValidatedCompactPackageStack {\n\tconst agentMessagePruners: ExternalPrunerRegistration[] = [];\n\tconst sessionCompactors: ExternalSessionCompactorRegistration[] = [];\n\tconst orchestrationTools: string[] = [];\n\tconst continuationHelpers: string[] = [];\n\n\tfor (const registration of registry) {\n\t\tif (!registration.enabled) continue;\n\t\tconst role = classifyContextPackageRole(registration.owner);\n\t\tif (role === \"agent-message-pruner\") {\n\t\t\tagentMessagePruners.push(registration);\n\t\t} else if (role === \"session-before-compact-compactor\" || role === \"blocked\" || role === \"unsupported\") {\n\t\t\tsessionCompactors.push(registration);\n\t\t} else if (role === \"orchestration-tool\") {\n\t\t\torchestrationTools.push(registration.owner);\n\t\t} else if (role === \"continuation-helper\") {\n\t\t\tcontinuationHelpers.push(registration.owner);\n\t\t}\n\t}\n\n\treturn {\n\t\tagentMessagePruner: validateSingleExternalPrunerOwner(agentMessagePruners, options),\n\t\tsessionCompactor: validateSingleSessionCompactorOwner(sessionCompactors, options),\n\t\torchestrationTools,\n\t\tcontinuationHelpers,\n\t};\n}\n\nexport function classifyContextPackageRole(owner: string): ExternalContextPackageRole {\n\treturn CONTEXT_PACKAGE_POLICIES[owner]?.role ?? \"unsupported\";\n}\n\nfunction validateSessionCompactorRegistration(\n\tregistration: ExternalSessionCompactorRegistration,\n\toptions: ValidateExternalPrunerOptions,\n): ValidatedSessionCompactorOwner {\n\tconst policy = CONTEXT_PACKAGE_POLICIES[registration.owner];\n\tconst license = registration.license ?? policy?.license ?? \"unknown\";\n\n\tif (options.mode === \"permanent\" && license === \"unknown\") {\n\t\tthrow new Error(`${registration.owner} has unknown license and cannot be enabled in permanent mode`);\n\t}\n\n\tif (policy && !policy.allowedModes.includes(options.mode)) {\n\t\tthrow new Error(`${registration.owner} is not enabled for ${options.mode} mode`);\n\t}\n\n\tif (policy?.requiresProviderPricing === true && registration.providerPricingInjected !== true) {\n\t\tthrow new Error(`${registration.owner} requires provider pricing before it can own session_before_compact`);\n\t}\n\n\treturn {\n\t\towner: registration.owner,\n\t\tmode: options.mode,\n\t\tdefaults: mergeSessionCompactorDefaults(\n\t\t\tpolicy?.sessionDefaults ?? createSessionCompactorDefaults(registration.owner, \"custom\", 72),\n\t\t\tregistration.sessionDefaults,\n\t\t),\n\t};\n}\n\nfunction createSessionCompactorDefaults(\n\towner: string,\n\tprofile: string,\n\tminContextPercent: number,\n): SessionCompactorRecommendedDefaults {\n\treturn {\n\t\ttrigger: \"session_before_compact\",\n\t\towner,\n\t\tprofile,\n\t\tautoTrigger: true,\n\t\tminContextPercent,\n\t\tbackupEnabled: true,\n\t\tpinPaths: [...PINNED_SESSION_COMPACTOR_PATHS],\n\t\tpreserveToolPairs: true,\n\t\tphases: [...SESSION_COMPACTOR_PHASES],\n\t};\n}\n\nfunction mergeRecommendedDefaults(\n\toverrides: Partial<PrunerRecommendedDefaults> | undefined,\n): PrunerRecommendedDefaults {\n\tconst defaults = getRecommendedPrunerDefaults();\n\tif (!overrides) {\n\t\treturn defaults;\n\t}\n\n\treturn {\n\t\t...defaults,\n\t\t...overrides,\n\t\tneverPrune: overrides.neverPrune ? [...overrides.neverPrune] : defaults.neverPrune,\n\t};\n}\n\nfunction mergeSessionCompactorDefaults(\n\tdefaults: SessionCompactorRecommendedDefaults,\n\toverrides: Partial<SessionCompactorRecommendedDefaults> | undefined,\n): SessionCompactorRecommendedDefaults {\n\tif (!overrides) return cloneSessionCompactorDefaults(defaults);\n\treturn {\n\t\t...defaults,\n\t\t...overrides,\n\t\tpinPaths: overrides.pinPaths ? [...overrides.pinPaths] : [...defaults.pinPaths],\n\t\tphases: overrides.phases ? [...overrides.phases] : [...defaults.phases],\n\t};\n}\n\nfunction cloneSessionCompactorDefaults(\n\tdefaults: SessionCompactorRecommendedDefaults,\n): SessionCompactorRecommendedDefaults {\n\treturn {\n\t\t...defaults,\n\t\tpinPaths: [...defaults.pinPaths],\n\t\tphases: [...defaults.phases],\n\t};\n}\n\nfunction cloneRegistration(registration: ExternalPrunerRegistration): ExternalPrunerRegistration {\n\treturn {\n\t\t...registration,\n\t\tdefaults: registration.defaults\n\t\t\t? {\n\t\t\t\t\t...registration.defaults,\n\t\t\t\t\tneverPrune: registration.defaults.neverPrune ? [...registration.defaults.neverPrune] : undefined,\n\t\t\t\t}\n\t\t\t: undefined,\n\t};\n}\n"]}
@@ -0,0 +1,273 @@
1
+ /**
2
+ * Pure policy helpers for external context pruning and session compaction.
3
+ *
4
+ * Agent-message pruning and session_before_compact compaction are separate
5
+ * ownership lanes. The runtime may run one agent-message pruner and one
6
+ * session compactor, but only one enabled owner may handle session_before_compact.
7
+ */
8
+ const PINNED_SESSION_COMPACTOR_PATHS = ["AGENTS.md", "OMK.md", ".omk/state.json"];
9
+ const SESSION_COMPACTOR_PHASES = ["Extract", "Explore", "Synthesize", "Verify"];
10
+ const BUILT_IN_PRUNER_POLICIES = {
11
+ "pi-context-prune": {
12
+ license: "known",
13
+ allowedModes: ["experimental", "permanent"],
14
+ experimentalOnly: false,
15
+ },
16
+ "pi-ultra-compact": {
17
+ license: "known",
18
+ allowedModes: ["experimental"],
19
+ experimentalOnly: true,
20
+ },
21
+ "pi-vcc": {
22
+ license: "unknown",
23
+ allowedModes: ["experimental"],
24
+ experimentalOnly: true,
25
+ },
26
+ };
27
+ const CONTEXT_PACKAGE_POLICIES = {
28
+ "pi-context-prune": {
29
+ role: "agent-message-pruner",
30
+ license: "known",
31
+ allowedModes: ["experimental", "permanent"],
32
+ },
33
+ "pi-smart-compact": {
34
+ role: "session-before-compact-compactor",
35
+ license: "known",
36
+ allowedModes: ["experimental", "permanent"],
37
+ sessionDefaults: createSessionCompactorDefaults("pi-smart-compact", "balanced", 72),
38
+ },
39
+ "pi-better-compact": {
40
+ role: "session-before-compact-compactor",
41
+ license: "known",
42
+ allowedModes: ["experimental"],
43
+ requiresProviderPricing: true,
44
+ sessionDefaults: createSessionCompactorDefaults("pi-better-compact", "cost-benefit", 70),
45
+ },
46
+ "pi-ultra-compact": {
47
+ role: "session-before-compact-compactor",
48
+ license: "known",
49
+ allowedModes: ["experimental"],
50
+ sessionDefaults: createSessionCompactorDefaults("pi-ultra-compact", "canary", 90),
51
+ },
52
+ "pi-omni-compact": {
53
+ role: "session-before-compact-compactor",
54
+ license: "known",
55
+ allowedModes: ["experimental"],
56
+ sessionDefaults: createSessionCompactorDefaults("pi-omni-compact", "precision", 82),
57
+ },
58
+ "pi-context-tools": {
59
+ role: "orchestration-tool",
60
+ license: "known",
61
+ allowedModes: ["experimental", "permanent"],
62
+ },
63
+ "pi-continue": {
64
+ role: "continuation-helper",
65
+ license: "known",
66
+ allowedModes: ["experimental", "permanent"],
67
+ },
68
+ "@adamjen/pi-compact-fast": {
69
+ role: "blocked",
70
+ license: "known",
71
+ allowedModes: [],
72
+ blockedReason: "source-edited model id configuration is not accepted for OMK runtime ownership",
73
+ },
74
+ "@davehardy20/pi-compact-plus": {
75
+ role: "blocked",
76
+ license: "known",
77
+ allowedModes: [],
78
+ blockedReason: "synthetic user message reinjection violates OMK authority-boundary preservation",
79
+ },
80
+ };
81
+ const RECOMMENDED_PRUNER_DEFAULTS = {
82
+ trigger: "agent-message",
83
+ soft: 0.7,
84
+ hard: 0.82,
85
+ keepRecentTokens: 24_000,
86
+ recoverOriginals: true,
87
+ neverPrune: ["entries"],
88
+ };
89
+ export function getRecommendedPrunerDefaults() {
90
+ return {
91
+ ...RECOMMENDED_PRUNER_DEFAULTS,
92
+ neverPrune: [...RECOMMENDED_PRUNER_DEFAULTS.neverPrune],
93
+ };
94
+ }
95
+ export function getRecommendedSessionCompactorDefaults() {
96
+ return cloneSessionCompactorDefaults(createSessionCompactorDefaults("pi-smart-compact", "balanced", 72));
97
+ }
98
+ export function getRecommendedCompactStack(profile) {
99
+ if (profile === "cost-experiment") {
100
+ return {
101
+ preCompression: ["LeanCTX", "Headroom"],
102
+ sessionCompactor: "pi-better-compact",
103
+ orchestrationTools: [],
104
+ providerPromptCache: true,
105
+ };
106
+ }
107
+ if (profile === "long-context-precision") {
108
+ return {
109
+ preCompression: ["LeanCTX", "Headroom"],
110
+ sessionCompactor: "pi-omni-compact",
111
+ orchestrationTools: [],
112
+ providerPromptCache: false,
113
+ };
114
+ }
115
+ return {
116
+ preCompression: ["LeanCTX", "Headroom"],
117
+ agentMessagePruner: "pi-context-prune",
118
+ sessionCompactor: "pi-smart-compact",
119
+ orchestrationTools: ["pi-context-tools"],
120
+ providerPromptCache: true,
121
+ };
122
+ }
123
+ export function registerExternalPrunerOwner(registry, registration) {
124
+ return [...registry, cloneRegistration(registration)];
125
+ }
126
+ export function validateSingleExternalPrunerOwner(registry, options) {
127
+ const enabledPruners = registry.filter((registration) => registration.enabled);
128
+ if (enabledPruners.length === 0) {
129
+ return undefined;
130
+ }
131
+ if (enabledPruners.length > 1) {
132
+ throw new Error(`Multiple enabled external pruners are not allowed: ${enabledPruners.map((registration) => registration.owner).join(", ")}`);
133
+ }
134
+ const registration = enabledPruners[0];
135
+ const builtInPolicy = BUILT_IN_PRUNER_POLICIES[registration.owner];
136
+ const license = registration.license ?? builtInPolicy?.license ?? "unknown";
137
+ if (options.mode === "permanent" && license === "unknown") {
138
+ throw new Error(`${registration.owner} has unknown license and cannot be enabled in permanent mode`);
139
+ }
140
+ if (builtInPolicy && !builtInPolicy.allowedModes.includes(options.mode)) {
141
+ const reason = builtInPolicy.experimentalOnly ? "experimental-only" : `not enabled for ${options.mode}`;
142
+ throw new Error(`${registration.owner} is ${reason} and cannot be enabled in ${options.mode} mode`);
143
+ }
144
+ return {
145
+ owner: registration.owner,
146
+ mode: options.mode,
147
+ defaults: mergeRecommendedDefaults(registration.defaults),
148
+ };
149
+ }
150
+ export function validateSingleSessionCompactorOwner(registry, options) {
151
+ const enabledCompactors = registry.filter((registration) => {
152
+ if (!registration.enabled)
153
+ return false;
154
+ const role = classifyContextPackageRole(registration.owner);
155
+ return role === "session-before-compact-compactor" || role === "blocked" || role === "unsupported";
156
+ });
157
+ for (const registration of enabledCompactors) {
158
+ const policy = CONTEXT_PACKAGE_POLICIES[registration.owner];
159
+ if (policy?.role === "blocked") {
160
+ throw new Error(`${registration.owner} is blocked: ${policy.blockedReason ?? "not accepted"}`);
161
+ }
162
+ }
163
+ if (enabledCompactors.length === 0) {
164
+ return undefined;
165
+ }
166
+ if (enabledCompactors.length > 1) {
167
+ throw new Error(`Multiple enabled session_before_compact compactors are not allowed: ${enabledCompactors.map((registration) => registration.owner).join(", ")}`);
168
+ }
169
+ return validateSessionCompactorRegistration(enabledCompactors[0], options);
170
+ }
171
+ export function validateCompactPackageStack(registry, options) {
172
+ const agentMessagePruners = [];
173
+ const sessionCompactors = [];
174
+ const orchestrationTools = [];
175
+ const continuationHelpers = [];
176
+ for (const registration of registry) {
177
+ if (!registration.enabled)
178
+ continue;
179
+ const role = classifyContextPackageRole(registration.owner);
180
+ if (role === "agent-message-pruner") {
181
+ agentMessagePruners.push(registration);
182
+ }
183
+ else if (role === "session-before-compact-compactor" || role === "blocked" || role === "unsupported") {
184
+ sessionCompactors.push(registration);
185
+ }
186
+ else if (role === "orchestration-tool") {
187
+ orchestrationTools.push(registration.owner);
188
+ }
189
+ else if (role === "continuation-helper") {
190
+ continuationHelpers.push(registration.owner);
191
+ }
192
+ }
193
+ return {
194
+ agentMessagePruner: validateSingleExternalPrunerOwner(agentMessagePruners, options),
195
+ sessionCompactor: validateSingleSessionCompactorOwner(sessionCompactors, options),
196
+ orchestrationTools,
197
+ continuationHelpers,
198
+ };
199
+ }
200
+ export function classifyContextPackageRole(owner) {
201
+ return CONTEXT_PACKAGE_POLICIES[owner]?.role ?? "unsupported";
202
+ }
203
+ function validateSessionCompactorRegistration(registration, options) {
204
+ const policy = CONTEXT_PACKAGE_POLICIES[registration.owner];
205
+ const license = registration.license ?? policy?.license ?? "unknown";
206
+ if (options.mode === "permanent" && license === "unknown") {
207
+ throw new Error(`${registration.owner} has unknown license and cannot be enabled in permanent mode`);
208
+ }
209
+ if (policy && !policy.allowedModes.includes(options.mode)) {
210
+ throw new Error(`${registration.owner} is not enabled for ${options.mode} mode`);
211
+ }
212
+ if (policy?.requiresProviderPricing === true && registration.providerPricingInjected !== true) {
213
+ throw new Error(`${registration.owner} requires provider pricing before it can own session_before_compact`);
214
+ }
215
+ return {
216
+ owner: registration.owner,
217
+ mode: options.mode,
218
+ defaults: mergeSessionCompactorDefaults(policy?.sessionDefaults ?? createSessionCompactorDefaults(registration.owner, "custom", 72), registration.sessionDefaults),
219
+ };
220
+ }
221
+ function createSessionCompactorDefaults(owner, profile, minContextPercent) {
222
+ return {
223
+ trigger: "session_before_compact",
224
+ owner,
225
+ profile,
226
+ autoTrigger: true,
227
+ minContextPercent,
228
+ backupEnabled: true,
229
+ pinPaths: [...PINNED_SESSION_COMPACTOR_PATHS],
230
+ preserveToolPairs: true,
231
+ phases: [...SESSION_COMPACTOR_PHASES],
232
+ };
233
+ }
234
+ function mergeRecommendedDefaults(overrides) {
235
+ const defaults = getRecommendedPrunerDefaults();
236
+ if (!overrides) {
237
+ return defaults;
238
+ }
239
+ return {
240
+ ...defaults,
241
+ ...overrides,
242
+ neverPrune: overrides.neverPrune ? [...overrides.neverPrune] : defaults.neverPrune,
243
+ };
244
+ }
245
+ function mergeSessionCompactorDefaults(defaults, overrides) {
246
+ if (!overrides)
247
+ return cloneSessionCompactorDefaults(defaults);
248
+ return {
249
+ ...defaults,
250
+ ...overrides,
251
+ pinPaths: overrides.pinPaths ? [...overrides.pinPaths] : [...defaults.pinPaths],
252
+ phases: overrides.phases ? [...overrides.phases] : [...defaults.phases],
253
+ };
254
+ }
255
+ function cloneSessionCompactorDefaults(defaults) {
256
+ return {
257
+ ...defaults,
258
+ pinPaths: [...defaults.pinPaths],
259
+ phases: [...defaults.phases],
260
+ };
261
+ }
262
+ function cloneRegistration(registration) {
263
+ return {
264
+ ...registration,
265
+ defaults: registration.defaults
266
+ ? {
267
+ ...registration.defaults,
268
+ neverPrune: registration.defaults.neverPrune ? [...registration.defaults.neverPrune] : undefined,
269
+ }
270
+ : undefined,
271
+ };
272
+ }
273
+ //# sourceMappingURL=pruner-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pruner-policy.js","sourceRoot":"","sources":["../../../src/core/compaction/pruner-policy.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Pure policy helpers for external context pruning and session compaction.\n *\n * Agent-message pruning and session_before_compact compaction are separate\n * ownership lanes. The runtime may run one agent-message pruner and one\n * session compactor, but only one enabled owner may handle session_before_compact.\n */\n\nexport type ExternalPrunerMode = \"experimental\" | \"permanent\";\nexport type ExternalPrunerLicense = \"known\" | \"unknown\";\nexport type PrunerTrigger = \"agent-message\";\nexport type SessionCompactorTrigger = \"session_before_compact\";\nexport type NeverPruneTarget = \"entries\";\nexport type SessionCompactorPhase = \"Extract\" | \"Explore\" | \"Synthesize\" | \"Verify\";\nexport type CompactStackProfile = \"production\" | \"cost-experiment\" | \"long-context-precision\";\nexport type ExternalContextPackageRole =\n\t| \"agent-message-pruner\"\n\t| \"session-before-compact-compactor\"\n\t| \"orchestration-tool\"\n\t| \"continuation-helper\"\n\t| \"blocked\"\n\t| \"unsupported\";\n\nexport interface PrunerRecommendedDefaults {\n\ttrigger: PrunerTrigger;\n\tsoft: number;\n\thard: number;\n\tkeepRecentTokens: number;\n\trecoverOriginals: boolean;\n\tneverPrune: NeverPruneTarget[];\n}\n\nexport interface SessionCompactorRecommendedDefaults {\n\ttrigger: SessionCompactorTrigger;\n\towner: string;\n\tprofile: string;\n\tautoTrigger: boolean;\n\tminContextPercent: number;\n\tbackupEnabled: boolean;\n\tpinPaths: string[];\n\tpreserveToolPairs: boolean;\n\tphases: SessionCompactorPhase[];\n}\n\nexport interface CompactStackRecommendation {\n\tpreCompression: string[];\n\tagentMessagePruner?: string;\n\tsessionCompactor?: string;\n\torchestrationTools: string[];\n\tproviderPromptCache: boolean;\n}\n\nexport interface ExternalPrunerRegistration {\n\towner: string;\n\tenabled: boolean;\n\tlicense?: ExternalPrunerLicense;\n\tdefaults?: Partial<PrunerRecommendedDefaults>;\n}\n\nexport interface ExternalSessionCompactorRegistration {\n\towner: string;\n\tenabled: boolean;\n\tlicense?: ExternalPrunerLicense;\n\tproviderPricingInjected?: boolean;\n\tsessionDefaults?: Partial<SessionCompactorRecommendedDefaults>;\n}\n\nexport interface ExternalContextPackageRegistration\n\textends ExternalPrunerRegistration,\n\t\tExternalSessionCompactorRegistration {}\n\nexport interface ValidateExternalPrunerOptions {\n\tmode: ExternalPrunerMode;\n}\n\nexport interface ValidatedExternalPrunerOwner {\n\towner: string;\n\tmode: ExternalPrunerMode;\n\tdefaults: PrunerRecommendedDefaults;\n}\n\nexport interface ValidatedSessionCompactorOwner {\n\towner: string;\n\tmode: ExternalPrunerMode;\n\tdefaults: SessionCompactorRecommendedDefaults;\n}\n\nexport interface ValidatedCompactPackageStack {\n\tagentMessagePruner?: ValidatedExternalPrunerOwner;\n\tsessionCompactor?: ValidatedSessionCompactorOwner;\n\torchestrationTools: string[];\n\tcontinuationHelpers: string[];\n}\n\ninterface BuiltInPrunerPolicy {\n\tlicense: ExternalPrunerLicense;\n\tallowedModes: readonly ExternalPrunerMode[];\n\texperimentalOnly: boolean;\n}\n\ninterface ContextPackagePolicy {\n\trole: ExternalContextPackageRole;\n\tlicense: ExternalPrunerLicense;\n\tallowedModes: readonly ExternalPrunerMode[];\n\tblockedReason?: string;\n\trequiresProviderPricing?: boolean;\n\tsessionDefaults?: SessionCompactorRecommendedDefaults;\n}\n\nconst PINNED_SESSION_COMPACTOR_PATHS = [\"AGENTS.md\", \"OMK.md\", \".omk/state.json\"] as const;\nconst SESSION_COMPACTOR_PHASES = [\"Extract\", \"Explore\", \"Synthesize\", \"Verify\"] as const;\n\nconst BUILT_IN_PRUNER_POLICIES: Record<string, BuiltInPrunerPolicy> = {\n\t\"pi-context-prune\": {\n\t\tlicense: \"known\",\n\t\tallowedModes: [\"experimental\", \"permanent\"],\n\t\texperimentalOnly: false,\n\t},\n\t\"pi-ultra-compact\": {\n\t\tlicense: \"known\",\n\t\tallowedModes: [\"experimental\"],\n\t\texperimentalOnly: true,\n\t},\n\t\"pi-vcc\": {\n\t\tlicense: \"unknown\",\n\t\tallowedModes: [\"experimental\"],\n\t\texperimentalOnly: true,\n\t},\n};\n\nconst CONTEXT_PACKAGE_POLICIES: Record<string, ContextPackagePolicy> = {\n\t\"pi-context-prune\": {\n\t\trole: \"agent-message-pruner\",\n\t\tlicense: \"known\",\n\t\tallowedModes: [\"experimental\", \"permanent\"],\n\t},\n\t\"pi-smart-compact\": {\n\t\trole: \"session-before-compact-compactor\",\n\t\tlicense: \"known\",\n\t\tallowedModes: [\"experimental\", \"permanent\"],\n\t\tsessionDefaults: createSessionCompactorDefaults(\"pi-smart-compact\", \"balanced\", 72),\n\t},\n\t\"pi-better-compact\": {\n\t\trole: \"session-before-compact-compactor\",\n\t\tlicense: \"known\",\n\t\tallowedModes: [\"experimental\"],\n\t\trequiresProviderPricing: true,\n\t\tsessionDefaults: createSessionCompactorDefaults(\"pi-better-compact\", \"cost-benefit\", 70),\n\t},\n\t\"pi-ultra-compact\": {\n\t\trole: \"session-before-compact-compactor\",\n\t\tlicense: \"known\",\n\t\tallowedModes: [\"experimental\"],\n\t\tsessionDefaults: createSessionCompactorDefaults(\"pi-ultra-compact\", \"canary\", 90),\n\t},\n\t\"pi-omni-compact\": {\n\t\trole: \"session-before-compact-compactor\",\n\t\tlicense: \"known\",\n\t\tallowedModes: [\"experimental\"],\n\t\tsessionDefaults: createSessionCompactorDefaults(\"pi-omni-compact\", \"precision\", 82),\n\t},\n\t\"pi-context-tools\": {\n\t\trole: \"orchestration-tool\",\n\t\tlicense: \"known\",\n\t\tallowedModes: [\"experimental\", \"permanent\"],\n\t},\n\t\"pi-continue\": {\n\t\trole: \"continuation-helper\",\n\t\tlicense: \"known\",\n\t\tallowedModes: [\"experimental\", \"permanent\"],\n\t},\n\t\"@adamjen/pi-compact-fast\": {\n\t\trole: \"blocked\",\n\t\tlicense: \"known\",\n\t\tallowedModes: [],\n\t\tblockedReason: \"source-edited model id configuration is not accepted for OMK runtime ownership\",\n\t},\n\t\"@davehardy20/pi-compact-plus\": {\n\t\trole: \"blocked\",\n\t\tlicense: \"known\",\n\t\tallowedModes: [],\n\t\tblockedReason: \"synthetic user message reinjection violates OMK authority-boundary preservation\",\n\t},\n};\n\nconst RECOMMENDED_PRUNER_DEFAULTS: PrunerRecommendedDefaults = {\n\ttrigger: \"agent-message\",\n\tsoft: 0.7,\n\thard: 0.82,\n\tkeepRecentTokens: 24_000,\n\trecoverOriginals: true,\n\tneverPrune: [\"entries\"],\n};\n\nexport function getRecommendedPrunerDefaults(): PrunerRecommendedDefaults {\n\treturn {\n\t\t...RECOMMENDED_PRUNER_DEFAULTS,\n\t\tneverPrune: [...RECOMMENDED_PRUNER_DEFAULTS.neverPrune],\n\t};\n}\n\nexport function getRecommendedSessionCompactorDefaults(): SessionCompactorRecommendedDefaults {\n\treturn cloneSessionCompactorDefaults(createSessionCompactorDefaults(\"pi-smart-compact\", \"balanced\", 72));\n}\n\nexport function getRecommendedCompactStack(profile: CompactStackProfile): CompactStackRecommendation {\n\tif (profile === \"cost-experiment\") {\n\t\treturn {\n\t\t\tpreCompression: [\"LeanCTX\", \"Headroom\"],\n\t\t\tsessionCompactor: \"pi-better-compact\",\n\t\t\torchestrationTools: [],\n\t\t\tproviderPromptCache: true,\n\t\t};\n\t}\n\n\tif (profile === \"long-context-precision\") {\n\t\treturn {\n\t\t\tpreCompression: [\"LeanCTX\", \"Headroom\"],\n\t\t\tsessionCompactor: \"pi-omni-compact\",\n\t\t\torchestrationTools: [],\n\t\t\tproviderPromptCache: false,\n\t\t};\n\t}\n\n\treturn {\n\t\tpreCompression: [\"LeanCTX\", \"Headroom\"],\n\t\tagentMessagePruner: \"pi-context-prune\",\n\t\tsessionCompactor: \"pi-smart-compact\",\n\t\torchestrationTools: [\"pi-context-tools\"],\n\t\tproviderPromptCache: true,\n\t};\n}\n\nexport function registerExternalPrunerOwner(\n\tregistry: readonly ExternalPrunerRegistration[],\n\tregistration: ExternalPrunerRegistration,\n): ExternalPrunerRegistration[] {\n\treturn [...registry, cloneRegistration(registration)];\n}\n\nexport function validateSingleExternalPrunerOwner(\n\tregistry: readonly ExternalPrunerRegistration[],\n\toptions: ValidateExternalPrunerOptions,\n): ValidatedExternalPrunerOwner | undefined {\n\tconst enabledPruners = registry.filter((registration) => registration.enabled);\n\tif (enabledPruners.length === 0) {\n\t\treturn undefined;\n\t}\n\n\tif (enabledPruners.length > 1) {\n\t\tthrow new Error(\n\t\t\t`Multiple enabled external pruners are not allowed: ${enabledPruners.map((registration) => registration.owner).join(\", \")}`,\n\t\t);\n\t}\n\n\tconst registration = enabledPruners[0];\n\tconst builtInPolicy = BUILT_IN_PRUNER_POLICIES[registration.owner];\n\tconst license = registration.license ?? builtInPolicy?.license ?? \"unknown\";\n\n\tif (options.mode === \"permanent\" && license === \"unknown\") {\n\t\tthrow new Error(`${registration.owner} has unknown license and cannot be enabled in permanent mode`);\n\t}\n\n\tif (builtInPolicy && !builtInPolicy.allowedModes.includes(options.mode)) {\n\t\tconst reason = builtInPolicy.experimentalOnly ? \"experimental-only\" : `not enabled for ${options.mode}`;\n\t\tthrow new Error(`${registration.owner} is ${reason} and cannot be enabled in ${options.mode} mode`);\n\t}\n\n\treturn {\n\t\towner: registration.owner,\n\t\tmode: options.mode,\n\t\tdefaults: mergeRecommendedDefaults(registration.defaults),\n\t};\n}\n\nexport function validateSingleSessionCompactorOwner(\n\tregistry: readonly ExternalSessionCompactorRegistration[],\n\toptions: ValidateExternalPrunerOptions,\n): ValidatedSessionCompactorOwner | undefined {\n\tconst enabledCompactors = registry.filter((registration) => {\n\t\tif (!registration.enabled) return false;\n\t\tconst role = classifyContextPackageRole(registration.owner);\n\t\treturn role === \"session-before-compact-compactor\" || role === \"blocked\" || role === \"unsupported\";\n\t});\n\n\tfor (const registration of enabledCompactors) {\n\t\tconst policy = CONTEXT_PACKAGE_POLICIES[registration.owner];\n\t\tif (policy?.role === \"blocked\") {\n\t\t\tthrow new Error(`${registration.owner} is blocked: ${policy.blockedReason ?? \"not accepted\"}`);\n\t\t}\n\t}\n\n\tif (enabledCompactors.length === 0) {\n\t\treturn undefined;\n\t}\n\n\tif (enabledCompactors.length > 1) {\n\t\tthrow new Error(\n\t\t\t`Multiple enabled session_before_compact compactors are not allowed: ${enabledCompactors.map((registration) => registration.owner).join(\", \")}`,\n\t\t);\n\t}\n\n\treturn validateSessionCompactorRegistration(enabledCompactors[0], options);\n}\n\nexport function validateCompactPackageStack(\n\tregistry: readonly ExternalContextPackageRegistration[],\n\toptions: ValidateExternalPrunerOptions,\n): ValidatedCompactPackageStack {\n\tconst agentMessagePruners: ExternalPrunerRegistration[] = [];\n\tconst sessionCompactors: ExternalSessionCompactorRegistration[] = [];\n\tconst orchestrationTools: string[] = [];\n\tconst continuationHelpers: string[] = [];\n\n\tfor (const registration of registry) {\n\t\tif (!registration.enabled) continue;\n\t\tconst role = classifyContextPackageRole(registration.owner);\n\t\tif (role === \"agent-message-pruner\") {\n\t\t\tagentMessagePruners.push(registration);\n\t\t} else if (role === \"session-before-compact-compactor\" || role === \"blocked\" || role === \"unsupported\") {\n\t\t\tsessionCompactors.push(registration);\n\t\t} else if (role === \"orchestration-tool\") {\n\t\t\torchestrationTools.push(registration.owner);\n\t\t} else if (role === \"continuation-helper\") {\n\t\t\tcontinuationHelpers.push(registration.owner);\n\t\t}\n\t}\n\n\treturn {\n\t\tagentMessagePruner: validateSingleExternalPrunerOwner(agentMessagePruners, options),\n\t\tsessionCompactor: validateSingleSessionCompactorOwner(sessionCompactors, options),\n\t\torchestrationTools,\n\t\tcontinuationHelpers,\n\t};\n}\n\nexport function classifyContextPackageRole(owner: string): ExternalContextPackageRole {\n\treturn CONTEXT_PACKAGE_POLICIES[owner]?.role ?? \"unsupported\";\n}\n\nfunction validateSessionCompactorRegistration(\n\tregistration: ExternalSessionCompactorRegistration,\n\toptions: ValidateExternalPrunerOptions,\n): ValidatedSessionCompactorOwner {\n\tconst policy = CONTEXT_PACKAGE_POLICIES[registration.owner];\n\tconst license = registration.license ?? policy?.license ?? \"unknown\";\n\n\tif (options.mode === \"permanent\" && license === \"unknown\") {\n\t\tthrow new Error(`${registration.owner} has unknown license and cannot be enabled in permanent mode`);\n\t}\n\n\tif (policy && !policy.allowedModes.includes(options.mode)) {\n\t\tthrow new Error(`${registration.owner} is not enabled for ${options.mode} mode`);\n\t}\n\n\tif (policy?.requiresProviderPricing === true && registration.providerPricingInjected !== true) {\n\t\tthrow new Error(`${registration.owner} requires provider pricing before it can own session_before_compact`);\n\t}\n\n\treturn {\n\t\towner: registration.owner,\n\t\tmode: options.mode,\n\t\tdefaults: mergeSessionCompactorDefaults(\n\t\t\tpolicy?.sessionDefaults ?? createSessionCompactorDefaults(registration.owner, \"custom\", 72),\n\t\t\tregistration.sessionDefaults,\n\t\t),\n\t};\n}\n\nfunction createSessionCompactorDefaults(\n\towner: string,\n\tprofile: string,\n\tminContextPercent: number,\n): SessionCompactorRecommendedDefaults {\n\treturn {\n\t\ttrigger: \"session_before_compact\",\n\t\towner,\n\t\tprofile,\n\t\tautoTrigger: true,\n\t\tminContextPercent,\n\t\tbackupEnabled: true,\n\t\tpinPaths: [...PINNED_SESSION_COMPACTOR_PATHS],\n\t\tpreserveToolPairs: true,\n\t\tphases: [...SESSION_COMPACTOR_PHASES],\n\t};\n}\n\nfunction mergeRecommendedDefaults(\n\toverrides: Partial<PrunerRecommendedDefaults> | undefined,\n): PrunerRecommendedDefaults {\n\tconst defaults = getRecommendedPrunerDefaults();\n\tif (!overrides) {\n\t\treturn defaults;\n\t}\n\n\treturn {\n\t\t...defaults,\n\t\t...overrides,\n\t\tneverPrune: overrides.neverPrune ? [...overrides.neverPrune] : defaults.neverPrune,\n\t};\n}\n\nfunction mergeSessionCompactorDefaults(\n\tdefaults: SessionCompactorRecommendedDefaults,\n\toverrides: Partial<SessionCompactorRecommendedDefaults> | undefined,\n): SessionCompactorRecommendedDefaults {\n\tif (!overrides) return cloneSessionCompactorDefaults(defaults);\n\treturn {\n\t\t...defaults,\n\t\t...overrides,\n\t\tpinPaths: overrides.pinPaths ? [...overrides.pinPaths] : [...defaults.pinPaths],\n\t\tphases: overrides.phases ? [...overrides.phases] : [...defaults.phases],\n\t};\n}\n\nfunction cloneSessionCompactorDefaults(\n\tdefaults: SessionCompactorRecommendedDefaults,\n): SessionCompactorRecommendedDefaults {\n\treturn {\n\t\t...defaults,\n\t\tpinPaths: [...defaults.pinPaths],\n\t\tphases: [...defaults.phases],\n\t};\n}\n\nfunction cloneRegistration(registration: ExternalPrunerRegistration): ExternalPrunerRegistration {\n\treturn {\n\t\t...registration,\n\t\tdefaults: registration.defaults\n\t\t\t? {\n\t\t\t\t\t...registration.defaults,\n\t\t\t\t\tneverPrune: registration.defaults.neverPrune ? [...registration.defaults.neverPrune] : undefined,\n\t\t\t\t}\n\t\t\t: undefined,\n\t};\n}\n"]}
@@ -0,0 +1,114 @@
1
+ export type Sha256 = string;
2
+ export type WorkspaceId = string;
3
+ export type RepositoryId = string;
4
+ export type LogicalId = string;
5
+ export type RevisionId = string;
6
+ export type SourceKind = "compiler" | "test" | "git" | "tree_sitter" | "understand_anything" | "user" | "document" | "llm" | "heuristic";
7
+ export interface IdentityKeyInput {
8
+ readonly workspaceId: WorkspaceId;
9
+ readonly repositoryId: RepositoryId;
10
+ readonly branch: string;
11
+ readonly classIri: string;
12
+ readonly sourceKind: SourceKind;
13
+ readonly identityNamespace: string;
14
+ readonly qualifiedName: string;
15
+ readonly normalizedSignature: string;
16
+ /** Retained for callers, but ignored for symbol identity when namespace/name/signature exist. */
17
+ readonly filePath?: string;
18
+ }
19
+ export interface RevisionKeyInput {
20
+ readonly logicalId: LogicalId;
21
+ readonly revisionSourceSha: string;
22
+ readonly structuralHash: Sha256;
23
+ }
24
+ export interface StructuralFingerprintMetrics {
25
+ readonly astNodeCount: number;
26
+ readonly exportedSymbolCount: number;
27
+ readonly importCount: number;
28
+ readonly relationCount: number;
29
+ readonly lineCount?: number;
30
+ }
31
+ export interface StructuralFingerprintInput {
32
+ readonly classIri: string;
33
+ readonly sourceKind: SourceKind;
34
+ readonly normalizedContent?: string;
35
+ readonly astTokens: readonly string[];
36
+ readonly publicApiTokens: readonly string[];
37
+ readonly relationTokens: readonly string[];
38
+ readonly importTokens?: readonly string[];
39
+ readonly exportTokens?: readonly string[];
40
+ readonly summaryTokens?: readonly string[];
41
+ readonly metrics: StructuralFingerprintMetrics;
42
+ }
43
+ export interface StructuralFingerprint {
44
+ readonly version: "omk.ontology.fingerprint.v1";
45
+ readonly extractor: "ua-tree-sitter-normalized-v1";
46
+ readonly classIri: string;
47
+ readonly sourceKind: SourceKind;
48
+ readonly strictContentHash?: Sha256;
49
+ readonly structuralHash: Sha256;
50
+ readonly publicApiHash: Sha256;
51
+ readonly relationShapeHash: Sha256;
52
+ readonly importHash?: Sha256;
53
+ readonly exportHash?: Sha256;
54
+ readonly textSummaryHash?: Sha256;
55
+ readonly metrics: StructuralFingerprintMetrics;
56
+ }
57
+ export interface IdentitySimilarityFeatures {
58
+ readonly strictContentEqual: boolean;
59
+ readonly structuralEqual: boolean;
60
+ readonly publicApiEqual: boolean;
61
+ readonly normalizedSignatureSimilarity: number;
62
+ readonly relationShapeSimilarity: number;
63
+ readonly nameSimilarity: number;
64
+ readonly pathSimilarity: number;
65
+ readonly parentScopeSimilarity: number;
66
+ readonly sizeSimilarity: number;
67
+ readonly gitRenameHint: boolean;
68
+ }
69
+ export interface IdentityDecisionThresholds {
70
+ readonly autoSameAs: number;
71
+ readonly possibleSameAs: number;
72
+ }
73
+ export interface IdentityResolutionCandidate {
74
+ readonly logicalId: LogicalId;
75
+ readonly score: number;
76
+ }
77
+ export interface IdentityAlias {
78
+ readonly fromLogicalId: LogicalId;
79
+ readonly toLogicalId: LogicalId;
80
+ readonly confidence: number;
81
+ readonly relation: "sameAs" | "renamedTo";
82
+ }
83
+ export interface IdentityResolutionInput {
84
+ readonly currentLogicalId: LogicalId;
85
+ readonly previousLogicalIds: readonly LogicalId[];
86
+ readonly aliases: readonly IdentityAlias[];
87
+ readonly candidates: readonly IdentityResolutionCandidate[];
88
+ readonly thresholds?: Partial<IdentityDecisionThresholds>;
89
+ }
90
+ export type IdentityResolutionDecision = {
91
+ readonly kind: "sameAs";
92
+ readonly reason: "exact" | "alias" | "merge";
93
+ readonly logicalId: LogicalId;
94
+ readonly confidence: number;
95
+ } | {
96
+ readonly kind: "possibleSameAs";
97
+ readonly candidates: readonly IdentityResolutionCandidate[];
98
+ readonly confidence: number;
99
+ } | {
100
+ readonly kind: "new";
101
+ readonly logicalId: LogicalId;
102
+ readonly confidence: 0;
103
+ };
104
+ export declare const IDENTITY_ALGORITHM_VERSION = "omk.ontology.identity.v1";
105
+ export declare const FINGERPRINT_ALGORITHM_VERSION = "omk.ontology.fingerprint.v1";
106
+ export declare const DEFAULT_IDENTITY_DECISION_THRESHOLDS: IdentityDecisionThresholds;
107
+ export declare const canonicalText: (value: string) => string;
108
+ export declare const makeLogicalId: (input: IdentityKeyInput) => string;
109
+ export declare const makeRevisionId: (input: RevisionKeyInput) => string;
110
+ export declare const buildStructuralFingerprint: (input: StructuralFingerprintInput) => StructuralFingerprint;
111
+ export declare const calculateIdentitySimilarity: (features: IdentitySimilarityFeatures) => number;
112
+ export declare const identitySimilarity: (features: IdentitySimilarityFeatures) => number;
113
+ export declare const resolveIdentity: (input: IdentityResolutionInput) => IdentityResolutionDecision;
114
+ //# sourceMappingURL=context-graph-identity-resolution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-graph-identity-resolution.d.ts","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,127 @@
1
+ import { createHash } from "node:crypto";
2
+ export const IDENTITY_ALGORITHM_VERSION = "omk.ontology.identity.v1";
3
+ export const FINGERPRINT_ALGORITHM_VERSION = "omk.ontology.fingerprint.v1";
4
+ export const DEFAULT_IDENTITY_DECISION_THRESHOLDS = {
5
+ autoSameAs: 0.92,
6
+ possibleSameAs: 0.78,
7
+ };
8
+ export const canonicalText = (value) => value.normalize("NFKC").replace(/\\/g, "/").replace(/\s+/g, " ").replace(/^\.\//, "").trim();
9
+ export const makeLogicalId = (input) => {
10
+ const tuple = [
11
+ "omk.logical.v1",
12
+ canonicalText(input.workspaceId),
13
+ canonicalText(input.repositoryId),
14
+ canonicalText(input.branch),
15
+ canonicalText(input.classIri),
16
+ canonicalText(input.sourceKind),
17
+ canonicalText(input.identityNamespace),
18
+ makeQualifiedIdentityName(input),
19
+ canonicalText(input.normalizedSignature),
20
+ ];
21
+ return `log_${sha256Hex(tuple.join("\0"))}`;
22
+ };
23
+ export const makeRevisionId = (input) => {
24
+ const tuple = [
25
+ "omk.revision.v1",
26
+ canonicalText(input.logicalId),
27
+ canonicalText(input.revisionSourceSha),
28
+ canonicalText(input.structuralHash),
29
+ ];
30
+ return `rev_${sha256Hex(tuple.join("\0"))}`;
31
+ };
32
+ export const buildStructuralFingerprint = (input) => {
33
+ const strictContentHash = input.normalizedContent
34
+ ? sha256Hex(["omk.content.v1", normalizeLf(input.normalizedContent)].join("\0"))
35
+ : undefined;
36
+ return {
37
+ version: FINGERPRINT_ALGORITHM_VERSION,
38
+ extractor: "ua-tree-sitter-normalized-v1",
39
+ classIri: canonicalText(input.classIri),
40
+ sourceKind: input.sourceKind,
41
+ strictContentHash,
42
+ structuralHash: hashTokens("omk.structure.v1", [input.classIri, ...input.astTokens]),
43
+ publicApiHash: hashTokens("omk.public-api.v1", [input.classIri, ...input.publicApiTokens]),
44
+ relationShapeHash: hashTokens("omk.relation-shape.v1", input.relationTokens),
45
+ importHash: hashOptionalTokens("omk.imports.v1", input.importTokens),
46
+ exportHash: hashOptionalTokens("omk.exports.v1", input.exportTokens),
47
+ textSummaryHash: hashOptionalTokens("omk.summary.v1", input.summaryTokens),
48
+ metrics: { ...input.metrics },
49
+ };
50
+ };
51
+ export const calculateIdentitySimilarity = (features) => {
52
+ if (features.strictContentEqual)
53
+ return 1;
54
+ const score = (features.structuralEqual ? 0.35 : 0) +
55
+ (features.publicApiEqual ? 0.18 : 0) +
56
+ 0.12 * clamp01(features.normalizedSignatureSimilarity) +
57
+ 0.1 * clamp01(features.relationShapeSimilarity) +
58
+ 0.1 * clamp01(features.nameSimilarity) +
59
+ 0.08 * clamp01(features.pathSimilarity) +
60
+ 0.05 * clamp01(features.parentScopeSimilarity) +
61
+ 0.02 * clamp01(features.sizeSimilarity) +
62
+ (features.gitRenameHint ? 0.1 : 0);
63
+ return clamp01(score);
64
+ };
65
+ export const identitySimilarity = calculateIdentitySimilarity;
66
+ export const resolveIdentity = (input) => {
67
+ const thresholds = { ...DEFAULT_IDENTITY_DECISION_THRESHOLDS, ...input.thresholds };
68
+ const exactMatch = sortLogicalIds(input.previousLogicalIds).find((logicalId) => logicalId === input.currentLogicalId);
69
+ if (exactMatch)
70
+ return { kind: "sameAs", reason: "exact", logicalId: exactMatch, confidence: 1 };
71
+ const acceptedAlias = sortAliases(input.aliases).find((alias) => alias.toLogicalId === input.currentLogicalId && alias.confidence >= thresholds.autoSameAs);
72
+ if (acceptedAlias) {
73
+ return {
74
+ kind: "sameAs",
75
+ reason: "alias",
76
+ logicalId: acceptedAlias.fromLogicalId,
77
+ confidence: clamp01(acceptedAlias.confidence),
78
+ };
79
+ }
80
+ const sortedCandidates = sortCandidates(input.candidates);
81
+ const best = sortedCandidates[0];
82
+ if (!best)
83
+ return { kind: "new", logicalId: input.currentLogicalId, confidence: 0 };
84
+ if (best.score >= thresholds.autoSameAs) {
85
+ return { kind: "sameAs", reason: "merge", logicalId: best.logicalId, confidence: clamp01(best.score) };
86
+ }
87
+ if (best.score >= thresholds.possibleSameAs) {
88
+ return {
89
+ kind: "possibleSameAs",
90
+ candidates: sortedCandidates.filter((candidate) => candidate.score >= thresholds.possibleSameAs),
91
+ confidence: clamp01(best.score),
92
+ };
93
+ }
94
+ return { kind: "new", logicalId: input.currentLogicalId, confidence: 0 };
95
+ };
96
+ const makeQualifiedIdentityName = (input) => {
97
+ const qualifiedName = canonicalText(input.qualifiedName);
98
+ if (qualifiedName || isSymbolClass(input.classIri))
99
+ return qualifiedName;
100
+ return canonicalText(input.filePath ?? "");
101
+ };
102
+ const isSymbolClass = (classIri) => canonicalText(classIri).endsWith("Symbol");
103
+ const sha256Hex = (value) => createHash("sha256").update(value, "utf8").digest("hex");
104
+ const normalizeLf = (value) => value.replace(/\r\n?/g, "\n");
105
+ const hashTokens = (version, tokens) => {
106
+ const canonicalTokens = tokens
107
+ .map(canonicalText)
108
+ .filter((token) => token.length > 0)
109
+ .sort();
110
+ return sha256Hex([version, ...canonicalTokens].join("\0"));
111
+ };
112
+ const hashOptionalTokens = (version, tokens) => {
113
+ if (!tokens || tokens.length === 0)
114
+ return undefined;
115
+ return hashTokens(version, tokens);
116
+ };
117
+ const clamp01 = (value) => {
118
+ if (Number.isNaN(value) || value <= 0)
119
+ return 0;
120
+ if (value >= 1)
121
+ return 1;
122
+ return value;
123
+ };
124
+ const sortLogicalIds = (logicalIds) => [...logicalIds].sort((a, b) => a.localeCompare(b));
125
+ const sortAliases = (aliases) => [...aliases].sort((a, b) => b.confidence - a.confidence || a.fromLogicalId.localeCompare(b.fromLogicalId));
126
+ const sortCandidates = (candidates) => [...candidates].sort((a, b) => b.score - a.score || a.logicalId.localeCompare(b.logicalId));
127
+ //# sourceMappingURL=context-graph-identity-resolution.js.map