open-multi-agent-kit 0.80.5 → 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 (1025) hide show
  1. package/CHANGELOG.md +31 -0
  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 +5 -9
  8. package/dist/config.d.ts.map +1 -1
  9. package/dist/config.js +55 -23
  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 +20 -5
  28. package/dist/core/compaction/branch-summarization.js.map +1 -1
  29. package/dist/core/compaction/compaction.d.ts +99 -1
  30. package/dist/core/compaction/compaction.d.ts.map +1 -1
  31. package/dist/core/compaction/compaction.js +655 -21
  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 +91 -0
  113. package/dist/core/harness-control-events.d.ts.map +1 -0
  114. package/dist/core/harness-control-events.js +514 -0
  115. package/dist/core/harness-control-events.js.map +1 -0
  116. package/dist/core/harness-control-replay.d.ts +31 -0
  117. package/dist/core/harness-control-replay.d.ts.map +1 -0
  118. package/dist/core/harness-control-replay.js +187 -0
  119. package/dist/core/harness-control-replay.js.map +1 -0
  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/keybindings.d.ts +12 -0
  129. package/dist/core/keybindings.d.ts.map +1 -1
  130. package/dist/core/keybindings.js +31 -1
  131. package/dist/core/keybindings.js.map +1 -1
  132. package/dist/core/lean-context-middleware.d.ts +12 -0
  133. package/dist/core/lean-context-middleware.d.ts.map +1 -0
  134. package/dist/core/lean-context-middleware.js +87 -0
  135. package/dist/core/lean-context-middleware.js.map +1 -0
  136. package/dist/core/lean-context-policy.d.ts +45 -0
  137. package/dist/core/lean-context-policy.d.ts.map +1 -0
  138. package/dist/core/lean-context-policy.js +108 -0
  139. package/dist/core/lean-context-policy.js.map +1 -0
  140. package/dist/core/loadout-access-policy.d.ts +41 -0
  141. package/dist/core/loadout-access-policy.d.ts.map +1 -0
  142. package/dist/core/loadout-access-policy.js +182 -0
  143. package/dist/core/loadout-access-policy.js.map +1 -0
  144. package/dist/core/loadout-runtime.d.ts +84 -0
  145. package/dist/core/loadout-runtime.d.ts.map +1 -0
  146. package/dist/core/loadout-runtime.js +157 -0
  147. package/dist/core/loadout-runtime.js.map +1 -0
  148. package/dist/core/loadouts.d.ts +147 -0
  149. package/dist/core/loadouts.d.ts.map +1 -0
  150. package/dist/core/loadouts.js +442 -0
  151. package/dist/core/loadouts.js.map +1 -0
  152. package/dist/core/mcp-inventory.d.ts +74 -0
  153. package/dist/core/mcp-inventory.d.ts.map +1 -0
  154. package/dist/core/mcp-inventory.js +156 -0
  155. package/dist/core/mcp-inventory.js.map +1 -0
  156. package/dist/core/mcp-presets.d.ts +57 -0
  157. package/dist/core/mcp-presets.d.ts.map +1 -0
  158. package/dist/core/mcp-presets.js +81 -0
  159. package/dist/core/mcp-presets.js.map +1 -0
  160. package/dist/core/model-registry.d.ts +1 -0
  161. package/dist/core/model-registry.d.ts.map +1 -1
  162. package/dist/core/model-registry.js +40 -17
  163. package/dist/core/model-registry.js.map +1 -1
  164. package/dist/core/model-resolver.d.ts.map +1 -1
  165. package/dist/core/model-resolver.js +1 -0
  166. package/dist/core/model-resolver.js.map +1 -1
  167. package/dist/core/native-adoption-benchmark.d.ts +166 -0
  168. package/dist/core/native-adoption-benchmark.d.ts.map +1 -0
  169. package/dist/core/native-adoption-benchmark.js +624 -0
  170. package/dist/core/native-adoption-benchmark.js.map +1 -0
  171. package/dist/core/observability-trace.d.ts +80 -0
  172. package/dist/core/observability-trace.d.ts.map +1 -0
  173. package/dist/core/observability-trace.js +140 -0
  174. package/dist/core/observability-trace.js.map +1 -0
  175. package/dist/core/orchestration/checkpoint.d.ts +83 -0
  176. package/dist/core/orchestration/checkpoint.d.ts.map +1 -0
  177. package/dist/core/orchestration/checkpoint.js +152 -0
  178. package/dist/core/orchestration/checkpoint.js.map +1 -0
  179. package/dist/core/orchestration/errors.d.ts +74 -0
  180. package/dist/core/orchestration/errors.d.ts.map +1 -0
  181. package/dist/core/orchestration/errors.js +52 -0
  182. package/dist/core/orchestration/errors.js.map +1 -0
  183. package/dist/core/orchestration/merge-queue.d.ts +121 -0
  184. package/dist/core/orchestration/merge-queue.d.ts.map +1 -0
  185. package/dist/core/orchestration/merge-queue.js +149 -0
  186. package/dist/core/orchestration/merge-queue.js.map +1 -0
  187. package/dist/core/orchestration/recovery.d.ts +106 -0
  188. package/dist/core/orchestration/recovery.d.ts.map +1 -0
  189. package/dist/core/orchestration/recovery.js +110 -0
  190. package/dist/core/orchestration/recovery.js.map +1 -0
  191. package/dist/core/orchestration/replay-ledger.d.ts +76 -0
  192. package/dist/core/orchestration/replay-ledger.d.ts.map +1 -0
  193. package/dist/core/orchestration/replay-ledger.js +395 -0
  194. package/dist/core/orchestration/replay-ledger.js.map +1 -0
  195. package/dist/core/orchestration/scheduler-state.d.ts +78 -0
  196. package/dist/core/orchestration/scheduler-state.d.ts.map +1 -0
  197. package/dist/core/orchestration/scheduler-state.js +185 -0
  198. package/dist/core/orchestration/scheduler-state.js.map +1 -0
  199. package/dist/core/orchestration/scheduler-store.d.ts +309 -0
  200. package/dist/core/orchestration/scheduler-store.d.ts.map +1 -0
  201. package/dist/core/orchestration/scheduler-store.js +368 -0
  202. package/dist/core/orchestration/scheduler-store.js.map +1 -0
  203. package/dist/core/orchestration/sqlite-scheduler-store.d.ts +57 -0
  204. package/dist/core/orchestration/sqlite-scheduler-store.d.ts.map +1 -0
  205. package/dist/core/orchestration/sqlite-scheduler-store.js +528 -0
  206. package/dist/core/orchestration/sqlite-scheduler-store.js.map +1 -0
  207. package/dist/core/orchestration/transaction-coordinator.d.ts +217 -0
  208. package/dist/core/orchestration/transaction-coordinator.d.ts.map +1 -0
  209. package/dist/core/orchestration/transaction-coordinator.js +281 -0
  210. package/dist/core/orchestration/transaction-coordinator.js.map +1 -0
  211. package/dist/core/orchestration/verification-contract.d.ts +197 -0
  212. package/dist/core/orchestration/verification-contract.d.ts.map +1 -0
  213. package/dist/core/orchestration/verification-contract.js +145 -0
  214. package/dist/core/orchestration/verification-contract.js.map +1 -0
  215. package/dist/core/package-composition.d.ts +68 -0
  216. package/dist/core/package-composition.d.ts.map +1 -0
  217. package/dist/core/package-composition.js +304 -0
  218. package/dist/core/package-composition.js.map +1 -0
  219. package/dist/core/package-gallery.d.ts +124 -0
  220. package/dist/core/package-gallery.d.ts.map +1 -0
  221. package/dist/core/package-gallery.js +392 -0
  222. package/dist/core/package-gallery.js.map +1 -0
  223. package/dist/core/package-manager.d.ts +69 -0
  224. package/dist/core/package-manager.d.ts.map +1 -1
  225. package/dist/core/package-manager.js +367 -69
  226. package/dist/core/package-manager.js.map +1 -1
  227. package/dist/core/package-procurement.d.ts +268 -0
  228. package/dist/core/package-procurement.d.ts.map +1 -0
  229. package/dist/core/package-procurement.js +697 -0
  230. package/dist/core/package-procurement.js.map +1 -0
  231. package/dist/core/package-trial-runtime.d.ts +75 -0
  232. package/dist/core/package-trial-runtime.d.ts.map +1 -0
  233. package/dist/core/package-trial-runtime.js +73 -0
  234. package/dist/core/package-trial-runtime.js.map +1 -0
  235. package/dist/core/package-trial-sandbox.d.ts +27 -0
  236. package/dist/core/package-trial-sandbox.d.ts.map +1 -0
  237. package/dist/core/package-trial-sandbox.js +102 -0
  238. package/dist/core/package-trial-sandbox.js.map +1 -0
  239. package/dist/core/policy-overlays-runtime.d.ts +141 -0
  240. package/dist/core/policy-overlays-runtime.d.ts.map +1 -0
  241. package/dist/core/policy-overlays-runtime.js +720 -0
  242. package/dist/core/policy-overlays-runtime.js.map +1 -0
  243. package/dist/core/read-anchor-registry.d.ts +27 -0
  244. package/dist/core/read-anchor-registry.d.ts.map +1 -0
  245. package/dist/core/read-anchor-registry.js +103 -0
  246. package/dist/core/read-anchor-registry.js.map +1 -0
  247. package/dist/core/read-anchors.d.ts +110 -0
  248. package/dist/core/read-anchors.d.ts.map +1 -0
  249. package/dist/core/read-anchors.js +193 -0
  250. package/dist/core/read-anchors.js.map +1 -0
  251. package/dist/core/read-content-cache.d.ts +22 -0
  252. package/dist/core/read-content-cache.d.ts.map +1 -0
  253. package/dist/core/read-content-cache.js +79 -0
  254. package/dist/core/read-content-cache.js.map +1 -0
  255. package/dist/core/recovery-checkpoint.d.ts +196 -0
  256. package/dist/core/recovery-checkpoint.d.ts.map +1 -0
  257. package/dist/core/recovery-checkpoint.js +382 -0
  258. package/dist/core/recovery-checkpoint.js.map +1 -0
  259. package/dist/core/resolve-config-value.d.ts +1 -1
  260. package/dist/core/resolve-config-value.d.ts.map +1 -1
  261. package/dist/core/resolve-config-value.js +30 -2
  262. package/dist/core/resolve-config-value.js.map +1 -1
  263. package/dist/core/resource-loader.d.ts +23 -21
  264. package/dist/core/resource-loader.d.ts.map +1 -1
  265. package/dist/core/resource-loader.js +93 -15
  266. package/dist/core/resource-loader.js.map +1 -1
  267. package/dist/core/sandbox/backend.d.ts +25 -0
  268. package/dist/core/sandbox/backend.d.ts.map +1 -0
  269. package/dist/core/sandbox/backend.js +150 -0
  270. package/dist/core/sandbox/backend.js.map +1 -0
  271. package/dist/core/sandbox/env.d.ts +6 -0
  272. package/dist/core/sandbox/env.d.ts.map +1 -0
  273. package/dist/core/sandbox/env.js +46 -0
  274. package/dist/core/sandbox/env.js.map +1 -0
  275. package/dist/core/sandbox/path-resolver.d.ts +4 -0
  276. package/dist/core/sandbox/path-resolver.d.ts.map +1 -0
  277. package/dist/core/sandbox/path-resolver.js +44 -0
  278. package/dist/core/sandbox/path-resolver.js.map +1 -0
  279. package/dist/core/sandbox/policy.d.ts +87 -0
  280. package/dist/core/sandbox/policy.d.ts.map +1 -0
  281. package/dist/core/sandbox/policy.js +280 -0
  282. package/dist/core/sandbox/policy.js.map +1 -0
  283. package/dist/core/sandbox/spawn.d.ts +20 -0
  284. package/dist/core/sandbox/spawn.d.ts.map +1 -0
  285. package/dist/core/sandbox/spawn.js +80 -0
  286. package/dist/core/sandbox/spawn.js.map +1 -0
  287. package/dist/core/sdk.d.ts +83 -4
  288. package/dist/core/sdk.d.ts.map +1 -1
  289. package/dist/core/sdk.js +143 -55
  290. package/dist/core/sdk.js.map +1 -1
  291. package/dist/core/semantic-cache-policy.d.ts +45 -0
  292. package/dist/core/semantic-cache-policy.d.ts.map +1 -0
  293. package/dist/core/semantic-cache-policy.js +220 -0
  294. package/dist/core/semantic-cache-policy.js.map +1 -0
  295. package/dist/core/session-digest.d.ts +57 -0
  296. package/dist/core/session-digest.d.ts.map +1 -0
  297. package/dist/core/session-digest.js +193 -0
  298. package/dist/core/session-digest.js.map +1 -0
  299. package/dist/core/session-manager.d.ts +2 -2
  300. package/dist/core/session-manager.d.ts.map +1 -1
  301. package/dist/core/session-manager.js +5 -4
  302. package/dist/core/session-manager.js.map +1 -1
  303. package/dist/core/settings-manager.d.ts +17 -0
  304. package/dist/core/settings-manager.d.ts.map +1 -1
  305. package/dist/core/settings-manager.js +47 -2
  306. package/dist/core/settings-manager.js.map +1 -1
  307. package/dist/core/slash-commands.d.ts.map +1 -1
  308. package/dist/core/slash-commands.js +4 -1
  309. package/dist/core/slash-commands.js.map +1 -1
  310. package/dist/core/spec-kit/compiler.d.ts +67 -0
  311. package/dist/core/spec-kit/compiler.d.ts.map +1 -0
  312. package/dist/core/spec-kit/compiler.js +268 -0
  313. package/dist/core/spec-kit/compiler.js.map +1 -0
  314. package/dist/core/system-prompt.d.ts.map +1 -1
  315. package/dist/core/system-prompt.js +25 -7
  316. package/dist/core/system-prompt.js.map +1 -1
  317. package/dist/core/telemetry.d.ts.map +1 -1
  318. package/dist/core/telemetry.js +1 -1
  319. package/dist/core/telemetry.js.map +1 -1
  320. package/dist/core/timings.d.ts +1 -1
  321. package/dist/core/timings.d.ts.map +1 -1
  322. package/dist/core/timings.js +2 -2
  323. package/dist/core/timings.js.map +1 -1
  324. package/dist/core/tools/bash.d.ts +28 -3
  325. package/dist/core/tools/bash.d.ts.map +1 -1
  326. package/dist/core/tools/bash.js +53 -10
  327. package/dist/core/tools/bash.js.map +1 -1
  328. package/dist/core/tools/edit.d.ts +12 -0
  329. package/dist/core/tools/edit.d.ts.map +1 -1
  330. package/dist/core/tools/edit.js +24 -0
  331. package/dist/core/tools/edit.js.map +1 -1
  332. package/dist/core/tools/find.d.ts +3 -0
  333. package/dist/core/tools/find.d.ts.map +1 -1
  334. package/dist/core/tools/find.js +3 -0
  335. package/dist/core/tools/find.js.map +1 -1
  336. package/dist/core/tools/grep.d.ts +3 -0
  337. package/dist/core/tools/grep.d.ts.map +1 -1
  338. package/dist/core/tools/grep.js +4 -1
  339. package/dist/core/tools/grep.js.map +1 -1
  340. package/dist/core/tools/index.d.ts +1 -1
  341. package/dist/core/tools/index.d.ts.map +1 -1
  342. package/dist/core/tools/index.js.map +1 -1
  343. package/dist/core/tools/ls.d.ts +3 -0
  344. package/dist/core/tools/ls.d.ts.map +1 -1
  345. package/dist/core/tools/ls.js +3 -0
  346. package/dist/core/tools/ls.js.map +1 -1
  347. package/dist/core/tools/output-accumulator.d.ts.map +1 -1
  348. package/dist/core/tools/output-accumulator.js +1 -1
  349. package/dist/core/tools/output-accumulator.js.map +1 -1
  350. package/dist/core/tools/read.d.ts +13 -0
  351. package/dist/core/tools/read.d.ts.map +1 -1
  352. package/dist/core/tools/read.js +29 -2
  353. package/dist/core/tools/read.js.map +1 -1
  354. package/dist/core/tools/write.d.ts +3 -0
  355. package/dist/core/tools/write.d.ts.map +1 -1
  356. package/dist/core/tools/write.js +3 -0
  357. package/dist/core/tools/write.js.map +1 -1
  358. package/dist/core/transaction-coordinator.d.ts +30 -0
  359. package/dist/core/transaction-coordinator.d.ts.map +1 -0
  360. package/dist/core/transaction-coordinator.js +173 -0
  361. package/dist/core/transaction-coordinator.js.map +1 -0
  362. package/dist/index.d.ts +19 -4
  363. package/dist/index.d.ts.map +1 -1
  364. package/dist/index.js +17 -2
  365. package/dist/index.js.map +1 -1
  366. package/dist/main.d.ts.map +1 -1
  367. package/dist/main.js +4 -6
  368. package/dist/main.js.map +1 -1
  369. package/dist/migrations.d.ts +35 -0
  370. package/dist/migrations.d.ts.map +1 -1
  371. package/dist/migrations.js +410 -4
  372. package/dist/migrations.js.map +1 -1
  373. package/dist/modes/interactive/components/control-panel-gradient-motion.d.ts +28 -0
  374. package/dist/modes/interactive/components/control-panel-gradient-motion.d.ts.map +1 -0
  375. package/dist/modes/interactive/components/control-panel-gradient-motion.js +146 -0
  376. package/dist/modes/interactive/components/control-panel-gradient-motion.js.map +1 -0
  377. package/dist/modes/interactive/components/control-panel-gradient.d.ts +27 -0
  378. package/dist/modes/interactive/components/control-panel-gradient.d.ts.map +1 -0
  379. package/dist/modes/interactive/components/control-panel-gradient.js +127 -0
  380. package/dist/modes/interactive/components/control-panel-gradient.js.map +1 -0
  381. package/dist/modes/interactive/components/control-panel.d.ts +56 -0
  382. package/dist/modes/interactive/components/control-panel.d.ts.map +1 -0
  383. package/dist/modes/interactive/components/control-panel.js +240 -0
  384. package/dist/modes/interactive/components/control-panel.js.map +1 -0
  385. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  386. package/dist/modes/interactive/components/custom-editor.js +21 -13
  387. package/dist/modes/interactive/components/custom-editor.js.map +1 -1
  388. package/dist/modes/interactive/components/earendil-announcement.d.ts.map +1 -1
  389. package/dist/modes/interactive/components/earendil-announcement.js +1 -1
  390. package/dist/modes/interactive/components/earendil-announcement.js.map +1 -1
  391. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  392. package/dist/modes/interactive/components/extension-editor.js +1 -1
  393. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  394. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  395. package/dist/modes/interactive/components/footer.js +8 -0
  396. package/dist/modes/interactive/components/footer.js.map +1 -1
  397. package/dist/modes/interactive/components/index.d.ts +3 -0
  398. package/dist/modes/interactive/components/index.d.ts.map +1 -1
  399. package/dist/modes/interactive/components/index.js +3 -0
  400. package/dist/modes/interactive/components/index.js.map +1 -1
  401. package/dist/modes/interactive/components/mcp-selector.d.ts +30 -0
  402. package/dist/modes/interactive/components/mcp-selector.d.ts.map +1 -0
  403. package/dist/modes/interactive/components/mcp-selector.js +155 -0
  404. package/dist/modes/interactive/components/mcp-selector.js.map +1 -0
  405. package/dist/modes/interactive/components/model-selector-state.d.ts +101 -0
  406. package/dist/modes/interactive/components/model-selector-state.d.ts.map +1 -0
  407. package/dist/modes/interactive/components/model-selector-state.js +261 -0
  408. package/dist/modes/interactive/components/model-selector-state.js.map +1 -0
  409. package/dist/modes/interactive/components/model-selector.d.ts +52 -9
  410. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  411. package/dist/modes/interactive/components/model-selector.js +212 -66
  412. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  413. package/dist/modes/interactive/components/settings-selector.d.ts +19 -1
  414. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  415. package/dist/modes/interactive/components/settings-selector.js +21 -8
  416. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  417. package/dist/modes/interactive/components/skills-selector.d.ts +32 -0
  418. package/dist/modes/interactive/components/skills-selector.d.ts.map +1 -0
  419. package/dist/modes/interactive/components/skills-selector.js +130 -0
  420. package/dist/modes/interactive/components/skills-selector.js.map +1 -0
  421. package/dist/modes/interactive/components/theme-selector.d.ts +1 -0
  422. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -1
  423. package/dist/modes/interactive/components/theme-selector.js +10 -1
  424. package/dist/modes/interactive/components/theme-selector.js.map +1 -1
  425. package/dist/modes/interactive/components/thinking-selector.d.ts +7 -8
  426. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  427. package/dist/modes/interactive/components/thinking-selector.js +7 -48
  428. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  429. package/dist/modes/interactive/interactive-mode.d.ts +13 -2
  430. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  431. package/dist/modes/interactive/interactive-mode.js +399 -108
  432. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  433. package/dist/modes/interactive/theme/catppuccin-mocha.json +86 -0
  434. package/dist/modes/interactive/theme/dracula.json +86 -0
  435. package/dist/modes/interactive/theme/gruvbox-dark.json +86 -0
  436. package/dist/modes/interactive/theme/kanagawa-dragon.json +86 -0
  437. package/dist/modes/interactive/theme/omk-blackboard.json +91 -0
  438. package/dist/modes/interactive/theme/omk-control-panel.json +91 -0
  439. package/dist/modes/interactive/theme/omk-freedom-grid.json +91 -0
  440. package/dist/modes/interactive/theme/omk-neon-ops.json +90 -0
  441. package/dist/modes/interactive/theme/omk-slate-light.json +91 -0
  442. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  443. package/dist/modes/interactive/theme/theme.js +55 -16
  444. package/dist/modes/interactive/theme/theme.js.map +1 -1
  445. package/dist/modes/interactive/theme/tokyo-night-storm.json +86 -0
  446. package/dist/modes/print-mode.d.ts +2 -2
  447. package/dist/modes/print-mode.d.ts.map +1 -1
  448. package/dist/modes/print-mode.js +2 -2
  449. package/dist/modes/print-mode.js.map +1 -1
  450. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  451. package/dist/modes/rpc/rpc-mode.js +4 -0
  452. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  453. package/dist/package-manager-cli.d.ts.map +1 -1
  454. package/dist/package-manager-cli.js +114 -49
  455. package/dist/package-manager-cli.js.map +1 -1
  456. package/dist/utils/clipboard-image.d.ts.map +1 -1
  457. package/dist/utils/clipboard-image.js +1 -1
  458. package/dist/utils/clipboard-image.js.map +1 -1
  459. package/dist/utils/omk-user-agent.d.ts +2 -0
  460. package/dist/utils/omk-user-agent.d.ts.map +1 -0
  461. package/dist/utils/{pi-user-agent.js → omk-user-agent.js} +2 -2
  462. package/dist/utils/omk-user-agent.js.map +1 -0
  463. package/dist/utils/tools-manager.d.ts.map +1 -1
  464. package/dist/utils/tools-manager.js +1 -1
  465. package/dist/utils/tools-manager.js.map +1 -1
  466. package/dist/utils/version-check.d.ts +5 -5
  467. package/dist/utils/version-check.d.ts.map +1 -1
  468. package/dist/utils/version-check.js +8 -11
  469. package/dist/utils/version-check.js.map +1 -1
  470. package/dist/utils/windows-self-update.d.ts.map +1 -1
  471. package/dist/utils/windows-self-update.js +1 -1
  472. package/dist/utils/windows-self-update.js.map +1 -1
  473. package/docs/compaction.md +21 -8
  474. package/docs/packages.md +47 -6
  475. package/docs/prompt-templates.md +2 -0
  476. package/docs/quickstart.md +1 -1
  477. package/docs/themes.md +10 -2
  478. package/docs/usage.md +18 -7
  479. package/examples/README.md +1 -1
  480. package/examples/extensions/README.md +11 -11
  481. package/examples/extensions/auto-commit-on-exit.ts +6 -6
  482. package/examples/extensions/bash-spawn-hook.ts +4 -4
  483. package/examples/extensions/bookmark.ts +5 -5
  484. package/examples/extensions/border-status-editor.ts +7 -7
  485. package/examples/extensions/built-in-tool-renderer.ts +6 -6
  486. package/examples/extensions/claude-rules.ts +4 -4
  487. package/examples/extensions/commands.ts +5 -5
  488. package/examples/extensions/confirm-destructive.ts +3 -3
  489. package/examples/extensions/custom-compaction.ts +3 -3
  490. package/examples/extensions/custom-footer.ts +2 -2
  491. package/examples/extensions/custom-header.ts +5 -5
  492. package/examples/extensions/custom-provider-anthropic/index.ts +4 -4
  493. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  494. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  495. package/examples/extensions/custom-provider-gitlab-duo/index.ts +3 -3
  496. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  497. package/examples/extensions/dirty-repo-guard.ts +7 -7
  498. package/examples/extensions/doom-overlay/README.md +3 -3
  499. package/examples/extensions/doom-overlay/doom/build.sh +2 -2
  500. package/examples/extensions/doom-overlay/doom/doomgeneric_pi.c +1 -1
  501. package/examples/extensions/doom-overlay/index.ts +3 -3
  502. package/examples/extensions/dynamic-resources/dynamic.json +1 -1
  503. package/examples/extensions/dynamic-resources/index.ts +2 -2
  504. package/examples/extensions/dynamic-tools.ts +4 -4
  505. package/examples/extensions/event-bus.ts +8 -8
  506. package/examples/extensions/file-trigger.ts +3 -3
  507. package/examples/extensions/git-checkpoint.ts +7 -7
  508. package/examples/extensions/git-merge-and-resolve.ts +14 -14
  509. package/examples/extensions/github-issue-autocomplete.ts +6 -6
  510. package/examples/extensions/gondolin/index.ts +16 -16
  511. package/examples/extensions/gondolin/package-lock.json +2 -2
  512. package/examples/extensions/gondolin/package.json +1 -1
  513. package/examples/extensions/handoff.ts +2 -2
  514. package/examples/extensions/hello.ts +2 -2
  515. package/examples/extensions/hidden-thinking-label.ts +4 -4
  516. package/examples/extensions/inline-bash.ts +5 -5
  517. package/examples/extensions/input-transform-streaming.ts +5 -5
  518. package/examples/extensions/input-transform.ts +5 -5
  519. package/examples/extensions/interactive-shell.ts +3 -3
  520. package/examples/extensions/mac-system-theme.ts +5 -5
  521. package/examples/extensions/message-renderer.ts +4 -4
  522. package/examples/extensions/minimal-mode.ts +9 -9
  523. package/examples/extensions/modal-editor.ts +3 -3
  524. package/examples/extensions/model-status.ts +3 -3
  525. package/examples/extensions/notify.ts +5 -5
  526. package/examples/extensions/overlay-qa-tests.ts +20 -20
  527. package/examples/extensions/overlay-test.ts +3 -3
  528. package/examples/extensions/permission-gate.ts +2 -2
  529. package/examples/extensions/pirate.ts +4 -4
  530. package/examples/extensions/plan-mode/index.ts +22 -22
  531. package/examples/extensions/preset.ts +30 -30
  532. package/examples/extensions/prompt-customizer.ts +3 -3
  533. package/examples/extensions/protected-paths.ts +2 -2
  534. package/examples/extensions/provider-payload.ts +5 -5
  535. package/examples/extensions/qna.ts +2 -2
  536. package/examples/extensions/question.ts +2 -2
  537. package/examples/extensions/questionnaire.ts +2 -2
  538. package/examples/extensions/rainbow-editor.ts +3 -3
  539. package/examples/extensions/reload-runtime.ts +4 -4
  540. package/examples/extensions/rpc-demo.ts +10 -10
  541. package/examples/extensions/sandbox/index.ts +17 -17
  542. package/examples/extensions/sandbox/package-lock.json +2 -2
  543. package/examples/extensions/sandbox/package.json +1 -1
  544. package/examples/extensions/send-user-message.ts +13 -13
  545. package/examples/extensions/session-name.ts +4 -4
  546. package/examples/extensions/shutdown-command.ts +10 -10
  547. package/examples/extensions/snake.ts +3 -3
  548. package/examples/extensions/space-invaders.ts +3 -3
  549. package/examples/extensions/ssh.ts +12 -12
  550. package/examples/extensions/status-line.ts +4 -4
  551. package/examples/extensions/structured-output.ts +2 -2
  552. package/examples/extensions/subagent/README.md +13 -13
  553. package/examples/extensions/subagent/agents.ts +2 -2
  554. package/examples/extensions/subagent/index.ts +53 -21
  555. package/examples/extensions/summarize.ts +2 -2
  556. package/examples/extensions/system-prompt-header.ts +3 -3
  557. package/examples/extensions/tic-tac-toe.ts +15 -15
  558. package/examples/extensions/timed-confirm.ts +4 -4
  559. package/examples/extensions/titlebar-spinner.ts +9 -9
  560. package/examples/extensions/todo.ts +5 -5
  561. package/examples/extensions/tool-override.ts +5 -5
  562. package/examples/extensions/tools.ts +10 -10
  563. package/examples/extensions/trigger-compact.ts +3 -3
  564. package/examples/extensions/truncated-tool.ts +3 -3
  565. package/examples/extensions/widget-placement.ts +2 -2
  566. package/examples/extensions/with-deps/index.ts +2 -2
  567. package/examples/extensions/with-deps/package-lock.json +2 -2
  568. package/examples/extensions/with-deps/package.json +1 -1
  569. package/examples/extensions/working-indicator.ts +7 -7
  570. package/examples/extensions/working-message-test.ts +3 -3
  571. package/examples/sdk/01-minimal.ts +1 -1
  572. package/examples/sdk/03-custom-prompt.ts +1 -1
  573. package/examples/sdk/04-skills.ts +1 -1
  574. package/examples/sdk/05-tools.ts +1 -1
  575. package/examples/sdk/06-extensions.ts +11 -11
  576. package/examples/sdk/07-context-files.ts +2 -0
  577. package/examples/sdk/08-prompt-templates.ts +1 -1
  578. package/examples/sdk/09-api-keys-and-oauth.ts +2 -2
  579. package/examples/sdk/README.md +2 -2
  580. package/node_modules/@earendil-works/omk-agent-core/README.md +488 -0
  581. package/node_modules/@earendil-works/omk-agent-core/dist/agent-loop.d.ts +24 -0
  582. package/node_modules/@earendil-works/omk-agent-core/dist/agent-loop.d.ts.map +1 -0
  583. package/node_modules/@earendil-works/omk-agent-core/dist/agent-loop.js +553 -0
  584. package/node_modules/@earendil-works/omk-agent-core/dist/agent-loop.js.map +1 -0
  585. package/node_modules/@earendil-works/omk-agent-core/dist/agent.d.ts +118 -0
  586. package/node_modules/@earendil-works/omk-agent-core/dist/agent.d.ts.map +1 -0
  587. package/node_modules/@earendil-works/omk-agent-core/dist/agent.js +402 -0
  588. package/node_modules/@earendil-works/omk-agent-core/dist/agent.js.map +1 -0
  589. package/node_modules/@earendil-works/omk-agent-core/dist/harness/agent-harness.d.ts +95 -0
  590. package/node_modules/@earendil-works/omk-agent-core/dist/harness/agent-harness.d.ts.map +1 -0
  591. package/node_modules/@earendil-works/omk-agent-core/dist/harness/agent-harness.js +996 -0
  592. package/node_modules/@earendil-works/omk-agent-core/dist/harness/agent-harness.js.map +1 -0
  593. package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/branch-summarization.d.ts +53 -0
  594. package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/branch-summarization.d.ts.map +1 -0
  595. package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/branch-summarization.js +175 -0
  596. package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/branch-summarization.js.map +1 -0
  597. package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/compaction.d.ts +117 -0
  598. package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/compaction.d.ts.map +1 -0
  599. package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/compaction.js +568 -0
  600. package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/compaction.js.map +1 -0
  601. package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/utils.d.ts +25 -0
  602. package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/utils.d.ts.map +1 -0
  603. package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/utils.js +131 -0
  604. package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/utils.js.map +1 -0
  605. package/node_modules/@earendil-works/omk-agent-core/dist/harness/env/nodejs.d.ts +51 -0
  606. package/node_modules/@earendil-works/omk-agent-core/dist/harness/env/nodejs.d.ts.map +1 -0
  607. package/node_modules/@earendil-works/omk-agent-core/dist/harness/env/nodejs.js +510 -0
  608. package/node_modules/@earendil-works/omk-agent-core/dist/harness/env/nodejs.js.map +1 -0
  609. package/node_modules/@earendil-works/omk-agent-core/dist/harness/messages.d.ts +51 -0
  610. package/node_modules/@earendil-works/omk-agent-core/dist/harness/messages.d.ts.map +1 -0
  611. package/node_modules/@earendil-works/omk-agent-core/dist/harness/messages.js +102 -0
  612. package/node_modules/@earendil-works/omk-agent-core/dist/harness/messages.js.map +1 -0
  613. package/node_modules/@earendil-works/omk-agent-core/dist/harness/prompt-templates.d.ts +48 -0
  614. package/node_modules/@earendil-works/omk-agent-core/dist/harness/prompt-templates.d.ts.map +1 -0
  615. package/node_modules/@earendil-works/omk-agent-core/dist/harness/prompt-templates.js +230 -0
  616. package/node_modules/@earendil-works/omk-agent-core/dist/harness/prompt-templates.js.map +1 -0
  617. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/jsonl-repo.d.ts +26 -0
  618. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/jsonl-repo.d.ts.map +1 -0
  619. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/jsonl-repo.js +101 -0
  620. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/jsonl-repo.js.map +1 -0
  621. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/jsonl-storage.d.ts +36 -0
  622. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/jsonl-storage.d.ts.map +1 -0
  623. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/jsonl-storage.js +273 -0
  624. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/jsonl-storage.js.map +1 -0
  625. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/memory-repo.d.ts +18 -0
  626. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/memory-repo.d.ts.map +1 -0
  627. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/memory-repo.js +42 -0
  628. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/memory-repo.js.map +1 -0
  629. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/memory-storage.d.ts +25 -0
  630. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/memory-storage.d.ts.map +1 -0
  631. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/memory-storage.js +114 -0
  632. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/memory-storage.js.map +1 -0
  633. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/repo-utils.d.ts +11 -0
  634. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/repo-utils.d.ts.map +1 -0
  635. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/repo-utils.js +39 -0
  636. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/repo-utils.js.map +1 -0
  637. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/session.d.ts +33 -0
  638. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/session.d.ts.map +1 -0
  639. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/session.js +210 -0
  640. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/session.js.map +1 -0
  641. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/uuid.d.ts +2 -0
  642. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/uuid.d.ts.map +1 -0
  643. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/uuid.js +50 -0
  644. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/uuid.js.map +1 -0
  645. package/node_modules/@earendil-works/omk-agent-core/dist/harness/skills.d.ts +44 -0
  646. package/node_modules/@earendil-works/omk-agent-core/dist/harness/skills.d.ts.map +1 -0
  647. package/node_modules/@earendil-works/omk-agent-core/dist/harness/skills.js +311 -0
  648. package/node_modules/@earendil-works/omk-agent-core/dist/harness/skills.js.map +1 -0
  649. package/node_modules/@earendil-works/omk-agent-core/dist/harness/system-prompt.d.ts +3 -0
  650. package/node_modules/@earendil-works/omk-agent-core/dist/harness/system-prompt.d.ts.map +1 -0
  651. package/node_modules/@earendil-works/omk-agent-core/dist/harness/system-prompt.js +30 -0
  652. package/node_modules/@earendil-works/omk-agent-core/dist/harness/system-prompt.js.map +1 -0
  653. package/node_modules/@earendil-works/omk-agent-core/dist/harness/types.d.ts +616 -0
  654. package/node_modules/@earendil-works/omk-agent-core/dist/harness/types.d.ts.map +1 -0
  655. package/node_modules/@earendil-works/omk-agent-core/dist/harness/types.js +94 -0
  656. package/node_modules/@earendil-works/omk-agent-core/dist/harness/types.js.map +1 -0
  657. package/node_modules/@earendil-works/omk-agent-core/dist/harness/utils/shell-output.d.ts +14 -0
  658. package/node_modules/@earendil-works/omk-agent-core/dist/harness/utils/shell-output.d.ts.map +1 -0
  659. package/node_modules/@earendil-works/omk-agent-core/dist/harness/utils/shell-output.js +126 -0
  660. package/node_modules/@earendil-works/omk-agent-core/dist/harness/utils/shell-output.js.map +1 -0
  661. package/node_modules/@earendil-works/omk-agent-core/dist/harness/utils/truncate.d.ts +70 -0
  662. package/node_modules/@earendil-works/omk-agent-core/dist/harness/utils/truncate.d.ts.map +1 -0
  663. package/node_modules/@earendil-works/omk-agent-core/dist/harness/utils/truncate.js +297 -0
  664. package/node_modules/@earendil-works/omk-agent-core/dist/harness/utils/truncate.js.map +1 -0
  665. package/node_modules/@earendil-works/omk-agent-core/dist/index.d.ts +20 -0
  666. package/node_modules/@earendil-works/omk-agent-core/dist/index.d.ts.map +1 -0
  667. package/node_modules/@earendil-works/omk-agent-core/dist/index.js +25 -0
  668. package/node_modules/@earendil-works/omk-agent-core/dist/index.js.map +1 -0
  669. package/node_modules/@earendil-works/omk-agent-core/dist/node.d.ts +3 -0
  670. package/node_modules/@earendil-works/omk-agent-core/dist/node.d.ts.map +1 -0
  671. package/node_modules/@earendil-works/omk-agent-core/dist/node.js +3 -0
  672. package/node_modules/@earendil-works/omk-agent-core/dist/node.js.map +1 -0
  673. package/node_modules/@earendil-works/omk-agent-core/dist/proxy.d.ts +69 -0
  674. package/node_modules/@earendil-works/omk-agent-core/dist/proxy.d.ts.map +1 -0
  675. package/node_modules/@earendil-works/omk-agent-core/dist/proxy.js +278 -0
  676. package/node_modules/@earendil-works/omk-agent-core/dist/proxy.js.map +1 -0
  677. package/node_modules/@earendil-works/omk-agent-core/dist/types.d.ts +393 -0
  678. package/node_modules/@earendil-works/omk-agent-core/dist/types.d.ts.map +1 -0
  679. package/node_modules/@earendil-works/omk-agent-core/dist/types.js +2 -0
  680. package/node_modules/@earendil-works/omk-agent-core/dist/types.js.map +1 -0
  681. package/node_modules/@earendil-works/omk-agent-core/package.json +60 -0
  682. package/node_modules/@earendil-works/omk-ai/README.md +1389 -0
  683. package/node_modules/@earendil-works/omk-ai/dist/api-registry.d.ts +20 -0
  684. package/node_modules/@earendil-works/omk-ai/dist/api-registry.d.ts.map +1 -0
  685. package/node_modules/@earendil-works/omk-ai/dist/api-registry.js +44 -0
  686. package/node_modules/@earendil-works/omk-ai/dist/api-registry.js.map +1 -0
  687. package/node_modules/@earendil-works/omk-ai/dist/bedrock-provider.d.ts +5 -0
  688. package/node_modules/@earendil-works/omk-ai/dist/bedrock-provider.d.ts.map +1 -0
  689. package/node_modules/@earendil-works/omk-ai/dist/bedrock-provider.js +6 -0
  690. package/node_modules/@earendil-works/omk-ai/dist/bedrock-provider.js.map +1 -0
  691. package/node_modules/@earendil-works/omk-ai/dist/cli.d.ts +3 -0
  692. package/node_modules/@earendil-works/omk-ai/dist/cli.d.ts.map +1 -0
  693. package/node_modules/@earendil-works/omk-ai/dist/cli.js +130 -0
  694. package/node_modules/@earendil-works/omk-ai/dist/cli.js.map +1 -0
  695. package/node_modules/@earendil-works/omk-ai/dist/env-api-keys.d.ts +20 -0
  696. package/node_modules/@earendil-works/omk-ai/dist/env-api-keys.d.ts.map +1 -0
  697. package/node_modules/@earendil-works/omk-ai/dist/env-api-keys.js +199 -0
  698. package/node_modules/@earendil-works/omk-ai/dist/env-api-keys.js.map +1 -0
  699. package/node_modules/@earendil-works/omk-ai/dist/image-models.d.ts +10 -0
  700. package/node_modules/@earendil-works/omk-ai/dist/image-models.d.ts.map +1 -0
  701. package/node_modules/@earendil-works/omk-ai/dist/image-models.generated.d.ts +515 -0
  702. package/node_modules/@earendil-works/omk-ai/dist/image-models.generated.d.ts.map +1 -0
  703. package/node_modules/@earendil-works/omk-ai/dist/image-models.generated.js +517 -0
  704. package/node_modules/@earendil-works/omk-ai/dist/image-models.generated.js.map +1 -0
  705. package/node_modules/@earendil-works/omk-ai/dist/image-models.js +23 -0
  706. package/node_modules/@earendil-works/omk-ai/dist/image-models.js.map +1 -0
  707. package/node_modules/@earendil-works/omk-ai/dist/images-api-registry.d.ts +14 -0
  708. package/node_modules/@earendil-works/omk-ai/dist/images-api-registry.d.ts.map +1 -0
  709. package/node_modules/@earendil-works/omk-ai/dist/images-api-registry.js +22 -0
  710. package/node_modules/@earendil-works/omk-ai/dist/images-api-registry.js.map +1 -0
  711. package/node_modules/@earendil-works/omk-ai/dist/images.d.ts +4 -0
  712. package/node_modules/@earendil-works/omk-ai/dist/images.d.ts.map +1 -0
  713. package/node_modules/@earendil-works/omk-ai/dist/images.js +16 -0
  714. package/node_modules/@earendil-works/omk-ai/dist/images.js.map +1 -0
  715. package/node_modules/@earendil-works/omk-ai/dist/index.d.ts +33 -0
  716. package/node_modules/@earendil-works/omk-ai/dist/index.d.ts.map +1 -0
  717. package/node_modules/@earendil-works/omk-ai/dist/index.js +21 -0
  718. package/node_modules/@earendil-works/omk-ai/dist/index.js.map +1 -0
  719. package/node_modules/@earendil-works/omk-ai/dist/models.d.ts +18 -0
  720. package/node_modules/@earendil-works/omk-ai/dist/models.d.ts.map +1 -0
  721. package/node_modules/@earendil-works/omk-ai/dist/models.generated.d.ts +18762 -0
  722. package/node_modules/@earendil-works/omk-ai/dist/models.generated.d.ts.map +1 -0
  723. package/node_modules/@earendil-works/omk-ai/dist/models.generated.js +17197 -0
  724. package/node_modules/@earendil-works/omk-ai/dist/models.generated.js.map +1 -0
  725. package/node_modules/@earendil-works/omk-ai/dist/models.js +78 -0
  726. package/node_modules/@earendil-works/omk-ai/dist/models.js.map +1 -0
  727. package/node_modules/@earendil-works/omk-ai/dist/oauth.d.ts +2 -0
  728. package/node_modules/@earendil-works/omk-ai/dist/oauth.d.ts.map +1 -0
  729. package/node_modules/@earendil-works/omk-ai/dist/oauth.js +2 -0
  730. package/node_modules/@earendil-works/omk-ai/dist/oauth.js.map +1 -0
  731. package/node_modules/@earendil-works/omk-ai/dist/provider-network.d.ts +39 -0
  732. package/node_modules/@earendil-works/omk-ai/dist/provider-network.d.ts.map +1 -0
  733. package/node_modules/@earendil-works/omk-ai/dist/provider-network.js +170 -0
  734. package/node_modules/@earendil-works/omk-ai/dist/provider-network.js.map +1 -0
  735. package/node_modules/@earendil-works/omk-ai/dist/providers/amazon-bedrock.d.ts +38 -0
  736. package/node_modules/@earendil-works/omk-ai/dist/providers/amazon-bedrock.d.ts.map +1 -0
  737. package/node_modules/@earendil-works/omk-ai/dist/providers/amazon-bedrock.js +826 -0
  738. package/node_modules/@earendil-works/omk-ai/dist/providers/amazon-bedrock.js.map +1 -0
  739. package/node_modules/@earendil-works/omk-ai/dist/providers/anthropic.d.ts +77 -0
  740. package/node_modules/@earendil-works/omk-ai/dist/providers/anthropic.d.ts.map +1 -0
  741. package/node_modules/@earendil-works/omk-ai/dist/providers/anthropic.js +1123 -0
  742. package/node_modules/@earendil-works/omk-ai/dist/providers/anthropic.js.map +1 -0
  743. package/node_modules/@earendil-works/omk-ai/dist/providers/azure-openai-responses.d.ts +15 -0
  744. package/node_modules/@earendil-works/omk-ai/dist/providers/azure-openai-responses.d.ts.map +1 -0
  745. package/node_modules/@earendil-works/omk-ai/dist/providers/azure-openai-responses.js +221 -0
  746. package/node_modules/@earendil-works/omk-ai/dist/providers/azure-openai-responses.js.map +1 -0
  747. package/node_modules/@earendil-works/omk-ai/dist/providers/cloudflare.d.ts +13 -0
  748. package/node_modules/@earendil-works/omk-ai/dist/providers/cloudflare.d.ts.map +1 -0
  749. package/node_modules/@earendil-works/omk-ai/dist/providers/cloudflare.js +26 -0
  750. package/node_modules/@earendil-works/omk-ai/dist/providers/cloudflare.js.map +1 -0
  751. package/node_modules/@earendil-works/omk-ai/dist/providers/faux.d.ts +56 -0
  752. package/node_modules/@earendil-works/omk-ai/dist/providers/faux.d.ts.map +1 -0
  753. package/node_modules/@earendil-works/omk-ai/dist/providers/faux.js +368 -0
  754. package/node_modules/@earendil-works/omk-ai/dist/providers/faux.js.map +1 -0
  755. package/node_modules/@earendil-works/omk-ai/dist/providers/github-copilot-headers.d.ts +8 -0
  756. package/node_modules/@earendil-works/omk-ai/dist/providers/github-copilot-headers.d.ts.map +1 -0
  757. package/node_modules/@earendil-works/omk-ai/dist/providers/github-copilot-headers.js +29 -0
  758. package/node_modules/@earendil-works/omk-ai/dist/providers/github-copilot-headers.js.map +1 -0
  759. package/node_modules/@earendil-works/omk-ai/dist/providers/google-shared.d.ts +70 -0
  760. package/node_modules/@earendil-works/omk-ai/dist/providers/google-shared.d.ts.map +1 -0
  761. package/node_modules/@earendil-works/omk-ai/dist/providers/google-shared.js +331 -0
  762. package/node_modules/@earendil-works/omk-ai/dist/providers/google-shared.js.map +1 -0
  763. package/node_modules/@earendil-works/omk-ai/dist/providers/google-vertex.d.ts +15 -0
  764. package/node_modules/@earendil-works/omk-ai/dist/providers/google-vertex.d.ts.map +1 -0
  765. package/node_modules/@earendil-works/omk-ai/dist/providers/google-vertex.js +442 -0
  766. package/node_modules/@earendil-works/omk-ai/dist/providers/google-vertex.js.map +1 -0
  767. package/node_modules/@earendil-works/omk-ai/dist/providers/google.d.ts +13 -0
  768. package/node_modules/@earendil-works/omk-ai/dist/providers/google.d.ts.map +1 -0
  769. package/node_modules/@earendil-works/omk-ai/dist/providers/google.js +402 -0
  770. package/node_modules/@earendil-works/omk-ai/dist/providers/google.js.map +1 -0
  771. package/node_modules/@earendil-works/omk-ai/dist/providers/images/openrouter.d.ts +3 -0
  772. package/node_modules/@earendil-works/omk-ai/dist/providers/images/openrouter.d.ts.map +1 -0
  773. package/node_modules/@earendil-works/omk-ai/dist/providers/images/openrouter.js +128 -0
  774. package/node_modules/@earendil-works/omk-ai/dist/providers/images/openrouter.js.map +1 -0
  775. package/node_modules/@earendil-works/omk-ai/dist/providers/images/register-builtins.d.ts +4 -0
  776. package/node_modules/@earendil-works/omk-ai/dist/providers/images/register-builtins.d.ts.map +1 -0
  777. package/node_modules/@earendil-works/omk-ai/dist/providers/images/register-builtins.js +34 -0
  778. package/node_modules/@earendil-works/omk-ai/dist/providers/images/register-builtins.js.map +1 -0
  779. package/node_modules/@earendil-works/omk-ai/dist/providers/mistral.d.ts +25 -0
  780. package/node_modules/@earendil-works/omk-ai/dist/providers/mistral.d.ts.map +1 -0
  781. package/node_modules/@earendil-works/omk-ai/dist/providers/mistral.js +534 -0
  782. package/node_modules/@earendil-works/omk-ai/dist/providers/mistral.js.map +1 -0
  783. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-codex-responses.d.ts +30 -0
  784. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-codex-responses.d.ts.map +1 -0
  785. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-codex-responses.js +1171 -0
  786. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-codex-responses.js.map +1 -0
  787. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-completions.d.ts +19 -0
  788. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-completions.d.ts.map +1 -0
  789. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-completions.js +977 -0
  790. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-completions.js.map +1 -0
  791. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-prompt-cache.d.ts +11 -0
  792. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-prompt-cache.d.ts.map +1 -0
  793. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-prompt-cache.js +22 -0
  794. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-prompt-cache.js.map +1 -0
  795. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-responses-shared.d.ts +18 -0
  796. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-responses-shared.d.ts.map +1 -0
  797. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-responses-shared.js +496 -0
  798. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-responses-shared.js.map +1 -0
  799. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-responses.d.ts +13 -0
  800. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-responses.d.ts.map +1 -0
  801. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-responses.js +233 -0
  802. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-responses.js.map +1 -0
  803. package/node_modules/@earendil-works/omk-ai/dist/providers/register-builtins.d.ts +35 -0
  804. package/node_modules/@earendil-works/omk-ai/dist/providers/register-builtins.d.ts.map +1 -0
  805. package/node_modules/@earendil-works/omk-ai/dist/providers/register-builtins.js +254 -0
  806. package/node_modules/@earendil-works/omk-ai/dist/providers/register-builtins.js.map +1 -0
  807. package/node_modules/@earendil-works/omk-ai/dist/providers/simple-options.d.ts +8 -0
  808. package/node_modules/@earendil-works/omk-ai/dist/providers/simple-options.d.ts.map +1 -0
  809. package/node_modules/@earendil-works/omk-ai/dist/providers/simple-options.js +42 -0
  810. package/node_modules/@earendil-works/omk-ai/dist/providers/simple-options.js.map +1 -0
  811. package/node_modules/@earendil-works/omk-ai/dist/providers/tool-schema.d.ts +13 -0
  812. package/node_modules/@earendil-works/omk-ai/dist/providers/tool-schema.d.ts.map +1 -0
  813. package/node_modules/@earendil-works/omk-ai/dist/providers/tool-schema.js +82 -0
  814. package/node_modules/@earendil-works/omk-ai/dist/providers/tool-schema.js.map +1 -0
  815. package/node_modules/@earendil-works/omk-ai/dist/providers/transform-messages.d.ts +8 -0
  816. package/node_modules/@earendil-works/omk-ai/dist/providers/transform-messages.d.ts.map +1 -0
  817. package/node_modules/@earendil-works/omk-ai/dist/providers/transform-messages.js +184 -0
  818. package/node_modules/@earendil-works/omk-ai/dist/providers/transform-messages.js.map +1 -0
  819. package/node_modules/@earendil-works/omk-ai/dist/session-resources.d.ts +4 -0
  820. package/node_modules/@earendil-works/omk-ai/dist/session-resources.d.ts.map +1 -0
  821. package/node_modules/@earendil-works/omk-ai/dist/session-resources.js +22 -0
  822. package/node_modules/@earendil-works/omk-ai/dist/session-resources.js.map +1 -0
  823. package/node_modules/@earendil-works/omk-ai/dist/stream.d.ts +8 -0
  824. package/node_modules/@earendil-works/omk-ai/dist/stream.d.ts.map +1 -0
  825. package/node_modules/@earendil-works/omk-ai/dist/stream.js +77 -0
  826. package/node_modules/@earendil-works/omk-ai/dist/stream.js.map +1 -0
  827. package/node_modules/@earendil-works/omk-ai/dist/types.d.ts +570 -0
  828. package/node_modules/@earendil-works/omk-ai/dist/types.d.ts.map +1 -0
  829. package/node_modules/@earendil-works/omk-ai/dist/types.js +2 -0
  830. package/node_modules/@earendil-works/omk-ai/dist/types.js.map +1 -0
  831. package/node_modules/@earendil-works/omk-ai/dist/utils/abort-signals.d.ts +6 -0
  832. package/node_modules/@earendil-works/omk-ai/dist/utils/abort-signals.d.ts.map +1 -0
  833. package/node_modules/@earendil-works/omk-ai/dist/utils/abort-signals.js +34 -0
  834. package/node_modules/@earendil-works/omk-ai/dist/utils/abort-signals.js.map +1 -0
  835. package/node_modules/@earendil-works/omk-ai/dist/utils/diagnostics.d.ts +19 -0
  836. package/node_modules/@earendil-works/omk-ai/dist/utils/diagnostics.d.ts.map +1 -0
  837. package/node_modules/@earendil-works/omk-ai/dist/utils/diagnostics.js +25 -0
  838. package/node_modules/@earendil-works/omk-ai/dist/utils/diagnostics.js.map +1 -0
  839. package/node_modules/@earendil-works/omk-ai/dist/utils/event-stream.d.ts +21 -0
  840. package/node_modules/@earendil-works/omk-ai/dist/utils/event-stream.d.ts.map +1 -0
  841. package/node_modules/@earendil-works/omk-ai/dist/utils/event-stream.js +81 -0
  842. package/node_modules/@earendil-works/omk-ai/dist/utils/event-stream.js.map +1 -0
  843. package/node_modules/@earendil-works/omk-ai/dist/utils/hash.d.ts +3 -0
  844. package/node_modules/@earendil-works/omk-ai/dist/utils/hash.d.ts.map +1 -0
  845. package/node_modules/@earendil-works/omk-ai/dist/utils/hash.js +14 -0
  846. package/node_modules/@earendil-works/omk-ai/dist/utils/hash.js.map +1 -0
  847. package/node_modules/@earendil-works/omk-ai/dist/utils/headers.d.ts +2 -0
  848. package/node_modules/@earendil-works/omk-ai/dist/utils/headers.d.ts.map +1 -0
  849. package/node_modules/@earendil-works/omk-ai/dist/utils/headers.js +8 -0
  850. package/node_modules/@earendil-works/omk-ai/dist/utils/headers.js.map +1 -0
  851. package/node_modules/@earendil-works/omk-ai/dist/utils/json-parse.d.ts +16 -0
  852. package/node_modules/@earendil-works/omk-ai/dist/utils/json-parse.d.ts.map +1 -0
  853. package/node_modules/@earendil-works/omk-ai/dist/utils/json-parse.js +113 -0
  854. package/node_modules/@earendil-works/omk-ai/dist/utils/json-parse.js.map +1 -0
  855. package/node_modules/@earendil-works/omk-ai/dist/utils/node-http-proxy.d.ts +10 -0
  856. package/node_modules/@earendil-works/omk-ai/dist/utils/node-http-proxy.d.ts.map +1 -0
  857. package/node_modules/@earendil-works/omk-ai/dist/utils/node-http-proxy.js +97 -0
  858. package/node_modules/@earendil-works/omk-ai/dist/utils/node-http-proxy.js.map +1 -0
  859. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/anthropic.d.ts +25 -0
  860. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/anthropic.d.ts.map +1 -0
  861. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/anthropic.js +335 -0
  862. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/anthropic.js.map +1 -0
  863. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/device-code.d.ts +21 -0
  864. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/device-code.d.ts.map +1 -0
  865. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/device-code.js +56 -0
  866. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/device-code.js.map +1 -0
  867. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/github-copilot.d.ts +30 -0
  868. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/github-copilot.d.ts.map +1 -0
  869. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/github-copilot.js +280 -0
  870. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/github-copilot.js.map +1 -0
  871. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/index.d.ts +58 -0
  872. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/index.d.ts.map +1 -0
  873. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/index.js +122 -0
  874. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/index.js.map +1 -0
  875. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/oauth-page.d.ts +3 -0
  876. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/oauth-page.d.ts.map +1 -0
  877. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/oauth-page.js +105 -0
  878. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/oauth-page.js.map +1 -0
  879. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/openai-codex.d.ts +43 -0
  880. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/openai-codex.d.ts.map +1 -0
  881. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/openai-codex.js +487 -0
  882. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/openai-codex.js.map +1 -0
  883. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/pkce.d.ts +13 -0
  884. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/pkce.d.ts.map +1 -0
  885. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/pkce.js +31 -0
  886. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/pkce.js.map +1 -0
  887. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/types.d.ts +64 -0
  888. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/types.d.ts.map +1 -0
  889. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/types.js +2 -0
  890. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/types.js.map +1 -0
  891. package/node_modules/@earendil-works/omk-ai/dist/utils/overflow.d.ts +57 -0
  892. package/node_modules/@earendil-works/omk-ai/dist/utils/overflow.d.ts.map +1 -0
  893. package/node_modules/@earendil-works/omk-ai/dist/utils/overflow.js +154 -0
  894. package/node_modules/@earendil-works/omk-ai/dist/utils/overflow.js.map +1 -0
  895. package/node_modules/@earendil-works/omk-ai/dist/utils/sanitize-unicode.d.ts +22 -0
  896. package/node_modules/@earendil-works/omk-ai/dist/utils/sanitize-unicode.d.ts.map +1 -0
  897. package/node_modules/@earendil-works/omk-ai/dist/utils/sanitize-unicode.js +26 -0
  898. package/node_modules/@earendil-works/omk-ai/dist/utils/sanitize-unicode.js.map +1 -0
  899. package/node_modules/@earendil-works/omk-ai/dist/utils/typebox-helpers.d.ts +17 -0
  900. package/node_modules/@earendil-works/omk-ai/dist/utils/typebox-helpers.d.ts.map +1 -0
  901. package/node_modules/@earendil-works/omk-ai/dist/utils/typebox-helpers.js +21 -0
  902. package/node_modules/@earendil-works/omk-ai/dist/utils/typebox-helpers.js.map +1 -0
  903. package/node_modules/@earendil-works/omk-ai/dist/utils/validation.d.ts +18 -0
  904. package/node_modules/@earendil-works/omk-ai/dist/utils/validation.d.ts.map +1 -0
  905. package/node_modules/@earendil-works/omk-ai/dist/utils/validation.js +281 -0
  906. package/node_modules/@earendil-works/omk-ai/dist/utils/validation.js.map +1 -0
  907. package/node_modules/@earendil-works/omk-ai/package.json +106 -0
  908. package/node_modules/@earendil-works/omk-tui/README.md +791 -0
  909. package/node_modules/@earendil-works/omk-tui/dist/autocomplete.d.ts +54 -0
  910. package/node_modules/@earendil-works/omk-tui/dist/autocomplete.d.ts.map +1 -0
  911. package/node_modules/@earendil-works/omk-tui/dist/autocomplete.js +632 -0
  912. package/node_modules/@earendil-works/omk-tui/dist/autocomplete.js.map +1 -0
  913. package/node_modules/@earendil-works/omk-tui/dist/components/box.d.ts +22 -0
  914. package/node_modules/@earendil-works/omk-tui/dist/components/box.d.ts.map +1 -0
  915. package/node_modules/@earendil-works/omk-tui/dist/components/box.js +104 -0
  916. package/node_modules/@earendil-works/omk-tui/dist/components/box.js.map +1 -0
  917. package/node_modules/@earendil-works/omk-tui/dist/components/cancellable-loader.d.ts +22 -0
  918. package/node_modules/@earendil-works/omk-tui/dist/components/cancellable-loader.d.ts.map +1 -0
  919. package/node_modules/@earendil-works/omk-tui/dist/components/cancellable-loader.js +35 -0
  920. package/node_modules/@earendil-works/omk-tui/dist/components/cancellable-loader.js.map +1 -0
  921. package/node_modules/@earendil-works/omk-tui/dist/components/editor.d.ts +249 -0
  922. package/node_modules/@earendil-works/omk-tui/dist/components/editor.d.ts.map +1 -0
  923. package/node_modules/@earendil-works/omk-tui/dist/components/editor.js +1857 -0
  924. package/node_modules/@earendil-works/omk-tui/dist/components/editor.js.map +1 -0
  925. package/node_modules/@earendil-works/omk-tui/dist/components/image.d.ts +28 -0
  926. package/node_modules/@earendil-works/omk-tui/dist/components/image.d.ts.map +1 -0
  927. package/node_modules/@earendil-works/omk-tui/dist/components/image.js +89 -0
  928. package/node_modules/@earendil-works/omk-tui/dist/components/image.js.map +1 -0
  929. package/node_modules/@earendil-works/omk-tui/dist/components/input.d.ts +37 -0
  930. package/node_modules/@earendil-works/omk-tui/dist/components/input.d.ts.map +1 -0
  931. package/node_modules/@earendil-works/omk-tui/dist/components/input.js +378 -0
  932. package/node_modules/@earendil-works/omk-tui/dist/components/input.js.map +1 -0
  933. package/node_modules/@earendil-works/omk-tui/dist/components/loader.d.ts +31 -0
  934. package/node_modules/@earendil-works/omk-tui/dist/components/loader.d.ts.map +1 -0
  935. package/node_modules/@earendil-works/omk-tui/dist/components/loader.js +69 -0
  936. package/node_modules/@earendil-works/omk-tui/dist/components/loader.js.map +1 -0
  937. package/node_modules/@earendil-works/omk-tui/dist/components/markdown.d.ts +96 -0
  938. package/node_modules/@earendil-works/omk-tui/dist/components/markdown.d.ts.map +1 -0
  939. package/node_modules/@earendil-works/omk-tui/dist/components/markdown.js +644 -0
  940. package/node_modules/@earendil-works/omk-tui/dist/components/markdown.js.map +1 -0
  941. package/node_modules/@earendil-works/omk-tui/dist/components/select-list.d.ts +50 -0
  942. package/node_modules/@earendil-works/omk-tui/dist/components/select-list.d.ts.map +1 -0
  943. package/node_modules/@earendil-works/omk-tui/dist/components/select-list.js +159 -0
  944. package/node_modules/@earendil-works/omk-tui/dist/components/select-list.js.map +1 -0
  945. package/node_modules/@earendil-works/omk-tui/dist/components/settings-list.d.ts +50 -0
  946. package/node_modules/@earendil-works/omk-tui/dist/components/settings-list.d.ts.map +1 -0
  947. package/node_modules/@earendil-works/omk-tui/dist/components/settings-list.js +185 -0
  948. package/node_modules/@earendil-works/omk-tui/dist/components/settings-list.js.map +1 -0
  949. package/node_modules/@earendil-works/omk-tui/dist/components/spacer.d.ts +12 -0
  950. package/node_modules/@earendil-works/omk-tui/dist/components/spacer.d.ts.map +1 -0
  951. package/node_modules/@earendil-works/omk-tui/dist/components/spacer.js +23 -0
  952. package/node_modules/@earendil-works/omk-tui/dist/components/spacer.js.map +1 -0
  953. package/node_modules/@earendil-works/omk-tui/dist/components/text.d.ts +19 -0
  954. package/node_modules/@earendil-works/omk-tui/dist/components/text.d.ts.map +1 -0
  955. package/node_modules/@earendil-works/omk-tui/dist/components/text.js +89 -0
  956. package/node_modules/@earendil-works/omk-tui/dist/components/text.js.map +1 -0
  957. package/node_modules/@earendil-works/omk-tui/dist/components/truncated-text.d.ts +13 -0
  958. package/node_modules/@earendil-works/omk-tui/dist/components/truncated-text.d.ts.map +1 -0
  959. package/node_modules/@earendil-works/omk-tui/dist/components/truncated-text.js +51 -0
  960. package/node_modules/@earendil-works/omk-tui/dist/components/truncated-text.js.map +1 -0
  961. package/node_modules/@earendil-works/omk-tui/dist/editor-component.d.ts +39 -0
  962. package/node_modules/@earendil-works/omk-tui/dist/editor-component.d.ts.map +1 -0
  963. package/node_modules/@earendil-works/omk-tui/dist/editor-component.js +2 -0
  964. package/node_modules/@earendil-works/omk-tui/dist/editor-component.js.map +1 -0
  965. package/node_modules/@earendil-works/omk-tui/dist/fuzzy.d.ts +16 -0
  966. package/node_modules/@earendil-works/omk-tui/dist/fuzzy.d.ts.map +1 -0
  967. package/node_modules/@earendil-works/omk-tui/dist/fuzzy.js +110 -0
  968. package/node_modules/@earendil-works/omk-tui/dist/fuzzy.js.map +1 -0
  969. package/node_modules/@earendil-works/omk-tui/dist/index.d.ts +23 -0
  970. package/node_modules/@earendil-works/omk-tui/dist/index.d.ts.map +1 -0
  971. package/node_modules/@earendil-works/omk-tui/dist/index.js +32 -0
  972. package/node_modules/@earendil-works/omk-tui/dist/index.js.map +1 -0
  973. package/node_modules/@earendil-works/omk-tui/dist/keybindings.d.ts +212 -0
  974. package/node_modules/@earendil-works/omk-tui/dist/keybindings.d.ts.map +1 -0
  975. package/node_modules/@earendil-works/omk-tui/dist/keybindings.js +252 -0
  976. package/node_modules/@earendil-works/omk-tui/dist/keybindings.js.map +1 -0
  977. package/node_modules/@earendil-works/omk-tui/dist/keys.d.ts +184 -0
  978. package/node_modules/@earendil-works/omk-tui/dist/keys.d.ts.map +1 -0
  979. package/node_modules/@earendil-works/omk-tui/dist/keys.js +1173 -0
  980. package/node_modules/@earendil-works/omk-tui/dist/keys.js.map +1 -0
  981. package/node_modules/@earendil-works/omk-tui/dist/kill-ring.d.ts +28 -0
  982. package/node_modules/@earendil-works/omk-tui/dist/kill-ring.d.ts.map +1 -0
  983. package/node_modules/@earendil-works/omk-tui/dist/kill-ring.js +44 -0
  984. package/node_modules/@earendil-works/omk-tui/dist/kill-ring.js.map +1 -0
  985. package/node_modules/@earendil-works/omk-tui/dist/native-modifiers.d.ts +3 -0
  986. package/node_modules/@earendil-works/omk-tui/dist/native-modifiers.d.ts.map +1 -0
  987. package/node_modules/@earendil-works/omk-tui/dist/native-modifiers.js +53 -0
  988. package/node_modules/@earendil-works/omk-tui/dist/native-modifiers.js.map +1 -0
  989. package/node_modules/@earendil-works/omk-tui/dist/stdin-buffer.d.ts +50 -0
  990. package/node_modules/@earendil-works/omk-tui/dist/stdin-buffer.d.ts.map +1 -0
  991. package/node_modules/@earendil-works/omk-tui/dist/stdin-buffer.js +361 -0
  992. package/node_modules/@earendil-works/omk-tui/dist/stdin-buffer.js.map +1 -0
  993. package/node_modules/@earendil-works/omk-tui/dist/terminal-image.d.ts +90 -0
  994. package/node_modules/@earendil-works/omk-tui/dist/terminal-image.d.ts.map +1 -0
  995. package/node_modules/@earendil-works/omk-tui/dist/terminal-image.js +366 -0
  996. package/node_modules/@earendil-works/omk-tui/dist/terminal-image.js.map +1 -0
  997. package/node_modules/@earendil-works/omk-tui/dist/terminal.d.ts +113 -0
  998. package/node_modules/@earendil-works/omk-tui/dist/terminal.d.ts.map +1 -0
  999. package/node_modules/@earendil-works/omk-tui/dist/terminal.js +472 -0
  1000. package/node_modules/@earendil-works/omk-tui/dist/terminal.js.map +1 -0
  1001. package/node_modules/@earendil-works/omk-tui/dist/tui.d.ts +242 -0
  1002. package/node_modules/@earendil-works/omk-tui/dist/tui.d.ts.map +1 -0
  1003. package/node_modules/@earendil-works/omk-tui/dist/tui.js +1221 -0
  1004. package/node_modules/@earendil-works/omk-tui/dist/tui.js.map +1 -0
  1005. package/node_modules/@earendil-works/omk-tui/dist/undo-stack.d.ts +17 -0
  1006. package/node_modules/@earendil-works/omk-tui/dist/undo-stack.d.ts.map +1 -0
  1007. package/node_modules/@earendil-works/omk-tui/dist/undo-stack.js +25 -0
  1008. package/node_modules/@earendil-works/omk-tui/dist/undo-stack.js.map +1 -0
  1009. package/node_modules/@earendil-works/omk-tui/dist/utils.d.ts +84 -0
  1010. package/node_modules/@earendil-works/omk-tui/dist/utils.d.ts.map +1 -0
  1011. package/node_modules/@earendil-works/omk-tui/dist/utils.js +1032 -0
  1012. package/node_modules/@earendil-works/omk-tui/dist/utils.js.map +1 -0
  1013. package/node_modules/@earendil-works/omk-tui/dist/word-navigation.d.ts +25 -0
  1014. package/node_modules/@earendil-works/omk-tui/dist/word-navigation.d.ts.map +1 -0
  1015. package/node_modules/@earendil-works/omk-tui/dist/word-navigation.js +96 -0
  1016. package/node_modules/@earendil-works/omk-tui/dist/word-navigation.js.map +1 -0
  1017. package/node_modules/@earendil-works/omk-tui/native/darwin/prebuilds/darwin-arm64/darwin-modifiers.node +0 -0
  1018. package/node_modules/@earendil-works/omk-tui/native/darwin/prebuilds/darwin-x64/darwin-modifiers.node +0 -0
  1019. package/node_modules/@earendil-works/omk-tui/native/win32/prebuilds/win32-arm64/win32-console-mode.node +0 -0
  1020. package/node_modules/@earendil-works/omk-tui/native/win32/prebuilds/win32-x64/win32-console-mode.node +0 -0
  1021. package/node_modules/@earendil-works/omk-tui/package.json +47 -0
  1022. package/package.json +22 -6
  1023. package/dist/utils/pi-user-agent.d.ts +0 -2
  1024. package/dist/utils/pi-user-agent.d.ts.map +0 -1
  1025. package/dist/utils/pi-user-agent.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawn.js","sourceRoot":"","sources":["../../../src/core/sandbox/spawn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAA0B,MAAM,cAAc,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EACN,gBAAgB,EAChB,qBAAqB,GAKrB,MAAM,aAAa,CAAC;AAqBrB,SAAS,UAAU,CAAC,GAAsB,EAA0B;IACnE,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAChD,IAAI,KAAK,KAAK,SAAS;YAAE,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAC9C,CAAC;IACD,OAAO,MAAM,CAAC;AAAA,CACd;AAED,SAAS,QAAQ,CAAC,QAAyB,EAAyB;IACnE,OAAO,EAAE,GAAG,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAAA,CACvC;AAED,SAAS,cAAc,CACtB,QAAyB,EACzB,KAAiC,EACjC,GAA2B,EACH;IACxB,OAAO;QACN,GAAG,QAAQ;QACX,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,GAAG;QACH,OAAO,EAAE,KAAK;KACd,CAAC;AAAA,CACF;AAED,SAAS,eAAe,CAAC,KAAiC,EAAE,GAA2B,EAAqB;IAC3G,OAAO;QACN,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,GAAG;QACH,UAAU,EAAE;YACX,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI;YAClC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS;YAC5C,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU;YAC9C,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS;YAC5C,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS;SAC5C;QACD,OAAO,EAAE;YACR,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI;YAC/B,cAAc,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc;YACnD,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa;SACjD;KACD,CAAC;AAAA,CACF;AAED,MAAM,UAAU,0BAA0B,CAAC,KAAiC,EAAyB;IACpG,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QACjC,OAAO,cAAc,CACpB,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,6BAA6B,EAAE,EAC7E,KAAK,EACL,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CACrB,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GACb,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC,WAAmB,EAAE,EAAE,CAAC,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;IAC5G,MAAM,WAAW,GAAG,gBAAgB,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;IAChG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QAC1B,OAAO,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC9B,CAAC;IAED,MAAM,GAAG,GAAG,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,qBAAqB,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACpE,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;QACtE,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC3B,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;QACrC,OAAO,cAAc,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,CAAC;QACJ,OAAO;YACN,GAAG,QAAQ;YACX,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,gBAAgB,CAAC,KAAK,CAAC,OAAO,EAAE,eAAe,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAClE,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,GAAG;YACH,OAAO,EAAE,IAAI;SACb,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,OAAO;YACN,OAAO,EAAE,KAAK;YACd,IAAI,EAAE,qBAAqB;YAC3B,MAAM,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC;IACH,CAAC;AAAA,CACD","sourcesContent":["import { buildBackendArgv, type SandboxInvocation } from \"./backend.ts\";\nimport { filterSandboxEnv } from \"./env.ts\";\nimport { resolveSandboxPath } from \"./path-resolver.ts\";\nimport {\n\tdecidePathAccess,\n\tdecideSandboxFallback,\n\ttype SandboxBackendStatus,\n\ttype SandboxDecision,\n\ttype SandboxPathResolver,\n\ttype SandboxPolicy,\n} from \"./policy.ts\";\n\nexport interface SandboxedSpawnRequestInput {\n\treadonly argv: readonly string[];\n\treadonly cwd: string;\n\treadonly env: NodeJS.ProcessEnv;\n\treadonly policy: SandboxPolicy;\n\treadonly backend: SandboxBackendStatus;\n\treadonly resolver?: SandboxPathResolver;\n}\n\nexport type SandboxedSpawnRequest =\n\t| (SandboxDecision & { readonly allowed: false })\n\t| (SandboxDecision & {\n\t\t\treadonly allowed: true;\n\t\t\treadonly argv: readonly string[];\n\t\t\treadonly cwd: string;\n\t\t\treadonly env: Record<string, string>;\n\t\t\treadonly wrapped: boolean;\n\t });\n\nfunction compactEnv(env: NodeJS.ProcessEnv): Record<string, string> {\n\tconst result: Record<string, string> = {};\n\tfor (const [key, value] of Object.entries(env)) {\n\t\tif (value !== undefined) result[key] = value;\n\t}\n\treturn result;\n}\n\nfunction denyFrom(decision: SandboxDecision): SandboxedSpawnRequest {\n\treturn { ...decision, allowed: false };\n}\n\nfunction allowUnwrapped(\n\tdecision: SandboxDecision,\n\tinput: SandboxedSpawnRequestInput,\n\tenv: Record<string, string>,\n): SandboxedSpawnRequest {\n\treturn {\n\t\t...decision,\n\t\tallowed: true,\n\t\targv: input.argv,\n\t\tcwd: input.cwd,\n\t\tenv,\n\t\twrapped: false,\n\t};\n}\n\nfunction buildInvocation(input: SandboxedSpawnRequestInput, env: Record<string, string>): SandboxInvocation {\n\treturn {\n\t\targv: input.argv,\n\t\tcwd: input.cwd,\n\t\tenv,\n\t\tfilesystem: {\n\t\t\troot: input.policy.filesystem.root,\n\t\t\treadAllow: input.policy.filesystem.readAllow,\n\t\t\twriteAllow: input.policy.filesystem.writeAllow,\n\t\t\ttempWrite: input.policy.filesystem.tempWrite,\n\t\t\tdenyWrite: input.policy.filesystem.denyWrite,\n\t\t},\n\t\tnetwork: {\n\t\t\tmode: input.policy.network.mode,\n\t\t\tallowedDomains: input.policy.network.allowedDomains,\n\t\t\tdeniedDomains: input.policy.network.deniedDomains,\n\t\t},\n\t};\n}\n\nexport function buildSandboxedSpawnRequest(input: SandboxedSpawnRequestInput): SandboxedSpawnRequest {\n\tif (input.policy.mode === \"off\") {\n\t\treturn allowUnwrapped(\n\t\t\t{ allowed: true, rule: \"sandbox.off\", reason: \"Sandbox policy is disabled.\" },\n\t\t\tinput,\n\t\t\tcompactEnv(input.env),\n\t\t);\n\t}\n\n\tconst resolver =\n\t\tinput.resolver ?? ((requestPath: string) => resolveSandboxPath(input.policy.filesystem.root, requestPath));\n\tconst cwdDecision = decidePathAccess(input.policy, { kind: \"read\", path: input.cwd }, resolver);\n\tif (!cwdDecision.allowed) {\n\t\treturn denyFrom(cwdDecision);\n\t}\n\n\tconst env = filterSandboxEnv(input.env);\n\tconst fallback = decideSandboxFallback(input.policy, input.backend);\n\tif (!fallback.allowed || !fallback.allowShell || !fallback.allowExec) {\n\t\treturn denyFrom(fallback);\n\t}\n\tif (!input.backend.backendAvailable) {\n\t\treturn allowUnwrapped(fallback, input, env);\n\t}\n\n\ttry {\n\t\treturn {\n\t\t\t...fallback,\n\t\t\tallowed: true,\n\t\t\targv: buildBackendArgv(input.backend, buildInvocation(input, env)),\n\t\t\tcwd: input.cwd,\n\t\t\tenv,\n\t\t\twrapped: true,\n\t\t};\n\t} catch (error) {\n\t\treturn {\n\t\t\tallowed: false,\n\t\t\trule: \"sandbox.wrap_failed\",\n\t\t\treason: error instanceof Error ? error.message : String(error),\n\t\t};\n\t}\n}\n"]}
@@ -1,13 +1,17 @@
1
- import { type ThinkingLevel } from "@earendil-works/omk-agent-core";
2
- import { type Model } from "@earendil-works/omk-ai";
1
+ import { type StreamFn, type ThinkingLevel } from "@earendil-works/omk-agent-core";
2
+ import { type BeforeProviderNetworkRequest, type Model, type ProviderNetworkDecision, type ProviderNetworkRequest } from "@earendil-works/omk-ai";
3
3
  import { AgentSession } from "./agent-session.ts";
4
4
  import { AuthStorage } from "./auth-storage.ts";
5
5
  import type { LoadExtensionsResult, SessionStartEvent, ToolDefinition } from "./extensions/index.ts";
6
+ import type { ExtensionExecSandbox } from "./extensions/types.ts";
7
+ import type { LoadoutAccessPolicy } from "./loadout-access-policy.ts";
6
8
  import { ModelRegistry } from "./model-registry.ts";
9
+ import type { PackageTrialRuntimeOptions } from "./package-manager.ts";
7
10
  import type { ResourceLoader } from "./resource-loader.ts";
11
+ import { type SandboxPolicy } from "./sandbox/policy.ts";
8
12
  import { SessionManager } from "./session-manager.ts";
9
13
  import { SettingsManager } from "./settings-manager.ts";
10
- import { createBashTool, createCodingTools, createEditTool, createFindTool, createGrepTool, createLsTool, createReadOnlyTools, createReadTool, createWriteTool, withFileMutationQueue } from "./tools/index.ts";
14
+ import { type BashSandboxPreflight, createBashTool, createCodingTools, createEditTool, createFindTool, createGrepTool, createLsTool, createReadOnlyTools, createReadTool, createWriteTool, withFileMutationQueue } from "./tools/index.ts";
11
15
  export interface CreateAgentSessionOptions {
12
16
  /** Working directory for project-local discovery. Default: process.cwd() */
13
17
  cwd?: string;
@@ -37,7 +41,7 @@ export interface CreateAgentSessionOptions {
37
41
  /**
38
42
  * Optional allowlist of tool names.
39
43
  *
40
- * When omitted, pi enables the default built-in tools (read, bash, edit, write)
44
+ * When omitted, omk enables the default built-in tools (read, bash, edit, write)
41
45
  * and leaves extension/custom tools enabled unless `noTools` changes that default.
42
46
  * When provided, only the listed tool names are enabled.
43
47
  */
@@ -54,6 +58,23 @@ export interface CreateAgentSessionOptions {
54
58
  settingsManager?: SettingsManager;
55
59
  /** Session start event metadata for extension runtime startup. */
56
60
  sessionStartEvent?: SessionStartEvent;
61
+ /**
62
+ * Optional provider network policy. When omitted, no provider network
63
+ * preflight is installed (current behavior preserved). When set, a
64
+ * sanitized preflight runs before API key/header resolution and is
65
+ * forwarded to `streamSimple` for deeper provider-derived URL checks.
66
+ */
67
+ providerNetworkPolicy?: ProviderNetworkPolicyConfig;
68
+ /** Optional sanitized audit sink for provider network policy decisions. */
69
+ onProviderNetworkAudit?: ProviderNetworkAuditSink;
70
+ /** Optional loadout enforcement policy for SDK-created sessions. */
71
+ loadoutAccessPolicy?: LoadoutAccessPolicy;
72
+ /** Optional bash sandbox preflight policy for SDK-created sessions and RPC bash. */
73
+ bashSandboxPreflight?: BashSandboxPreflight;
74
+ /** Optional sandbox policy for extension `omk.exec` loaded through the default resource loader. */
75
+ extensionExecSandbox?: ExtensionExecSandbox;
76
+ /** Optional sandboxed temporary package trial runtime for CLI/SDK supplied package sources. */
77
+ packageTrialRuntime?: PackageTrialRuntimeOptions;
57
78
  }
58
79
  /** Result from createAgentSession */
59
80
  export interface CreateAgentSessionResult {
@@ -105,5 +126,63 @@ export { withFileMutationQueue, createCodingTools, createReadOnlyTools, createRe
105
126
  * });
106
127
  * ```
107
128
  */
129
+ export type ProviderNetworkPolicyMode = "off" | "audit" | "enforce";
130
+ export type ProviderNetworkPolicyNetwork = SandboxPolicy["network"];
131
+ export interface ProviderNetworkPolicyConfig {
132
+ mode: ProviderNetworkPolicyMode;
133
+ network: ProviderNetworkPolicyNetwork;
134
+ }
135
+ export interface ProviderNetworkAuditEvent {
136
+ provider: string;
137
+ api: string;
138
+ modelId: string;
139
+ host?: string;
140
+ protocol: ProviderNetworkRequest["protocol"];
141
+ port?: string;
142
+ transport: ProviderNetworkRequest["transport"];
143
+ purpose: ProviderNetworkRequest["purpose"];
144
+ mode: ProviderNetworkPolicyMode;
145
+ rule: string;
146
+ allowed: boolean;
147
+ wouldDeny?: boolean;
148
+ }
149
+ export type ProviderNetworkAuditSink = (event: ProviderNetworkAuditEvent) => void;
150
+ /**
151
+ * Map a sanitized provider network request to a provider-neutral decision.
152
+ * Reuses the pure sandbox network decision logic (`decideNetworkAccess`) so
153
+ * allow/deny/loopback semantics stay consistent with the rest of the sandbox.
154
+ */
155
+ export declare function decideProviderNetworkAccess(config: ProviderNetworkPolicyConfig, request: ProviderNetworkRequest): ProviderNetworkDecision;
156
+ /**
157
+ * Create the `beforeNetworkRequest` hook installed on the agent stream
158
+ * function. The optional audit sink receives only sanitized metadata
159
+ * (provider, api, model id, host, protocol, port, transport, purpose, mode,
160
+ * rule, allowed/wouldDeny) and never headers, API keys, or request bodies.
161
+ */
162
+ export declare function createBeforeProviderNetworkRequest(config: ProviderNetworkPolicyConfig, onAudit?: ProviderNetworkAuditSink): BeforeProviderNetworkRequest;
163
+ /**
164
+ * Dependencies for the agent stream function factory.
165
+ */
166
+ export interface AgentStreamFunctionDeps {
167
+ modelRegistry: ModelRegistry;
168
+ settingsManager: SettingsManager;
169
+ /** When set, a sanitized preflight runs before auth resolution and is forwarded to `streamSimple`. */
170
+ providerNetworkBeforeRequest?: BeforeProviderNetworkRequest;
171
+ }
172
+ /**
173
+ * Build the Agent `streamFn` used by `createAgentSession`.
174
+ *
175
+ * Contract preserved from the previous inline implementation:
176
+ * - resolves API key/headers via the model registry,
177
+ * - applies provider retry/timeout settings,
178
+ * - merges provider attribution headers.
179
+ *
180
+ * Added behavior: when `providerNetworkBeforeRequest` is set, a sanitized
181
+ * preflight runs BEFORE auth resolution. A deny returns a sanitized error
182
+ * stream (no headers/API keys/bodies/prompts/responses are exposed) and skips
183
+ * auth + provider invocation entirely. The hook is also forwarded to
184
+ * `streamSimple` so provider-derived endpoints can be checked deeper.
185
+ */
186
+ export declare function createAgentStreamFunction(deps: AgentStreamFunctionDeps): StreamFn;
108
187
  export declare function createAgentSession(options?: CreateAgentSessionOptions): Promise<CreateAgentSessionResult>;
109
188
  //# sourceMappingURL=sdk.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../../src/core/sdk.ts"],"names":[],"mappings":"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","sourcesContent":["import { join } from \"node:path\";\nimport { Agent, type AgentMessage, type ThinkingLevel } from \"@earendil-works/omk-agent-core\";\nimport { clampThinkingLevel, type Message, type Model, streamSimple } from \"@earendil-works/omk-ai\";\nimport { getAgentDir } from \"../config.ts\";\nimport { resolvePath } from \"../utils/paths.ts\";\nimport { AgentSession } from \"./agent-session.ts\";\nimport { formatNoModelsAvailableMessage } from \"./auth-guidance.ts\";\nimport { AuthStorage } from \"./auth-storage.ts\";\nimport { DEFAULT_THINKING_LEVEL } from \"./defaults.ts\";\nimport type { ExtensionRunner, LoadExtensionsResult, SessionStartEvent, ToolDefinition } from \"./extensions/index.ts\";\nimport { convertToLlm } from \"./messages.ts\";\nimport { ModelRegistry } from \"./model-registry.ts\";\nimport { findInitialModel } from \"./model-resolver.ts\";\nimport { mergeProviderAttributionHeaders } from \"./provider-attribution.ts\";\nimport type { ResourceLoader } from \"./resource-loader.ts\";\nimport { DefaultResourceLoader } from \"./resource-loader.ts\";\nimport { getDefaultSessionDir, SessionManager } from \"./session-manager.ts\";\nimport { SettingsManager } from \"./settings-manager.ts\";\nimport { time } from \"./timings.ts\";\nimport {\n\tcreateBashTool,\n\tcreateCodingTools,\n\tcreateEditTool,\n\tcreateFindTool,\n\tcreateGrepTool,\n\tcreateLsTool,\n\tcreateReadOnlyTools,\n\tcreateReadTool,\n\tcreateWriteTool,\n\ttype ToolName,\n\twithFileMutationQueue,\n} from \"./tools/index.ts\";\n\nexport interface CreateAgentSessionOptions {\n\t/** Working directory for project-local discovery. Default: process.cwd() */\n\tcwd?: string;\n\t/** Global config directory. Default: ~/.omk/agent */\n\tagentDir?: string;\n\n\t/** Auth storage for credentials. Default: AuthStorage.create(agentDir/auth.json) */\n\tauthStorage?: AuthStorage;\n\t/** Model registry. Default: ModelRegistry.create(authStorage, agentDir/models.json) */\n\tmodelRegistry?: ModelRegistry;\n\n\t/** Model to use. Default: from settings, else first available */\n\tmodel?: Model<any>;\n\t/** Thinking level. Default: from settings, else 'medium' (clamped to model capabilities) */\n\tthinkingLevel?: ThinkingLevel;\n\t/** Models available for cycling (Ctrl+P in interactive mode) */\n\tscopedModels?: Array<{ model: Model<any>; thinkingLevel?: ThinkingLevel }>;\n\n\t/**\n\t * Optional default tool suppression mode when no explicit allowlist is provided.\n\t *\n\t * - \"all\": start with no tools enabled\n\t * - \"builtin\": disable the default built-in tools (read, bash, edit, write)\n\t * but keep extension/custom tools enabled\n\t */\n\tnoTools?: \"all\" | \"builtin\";\n\t/**\n\t * Optional allowlist of tool names.\n\t *\n\t * When omitted, pi enables the default built-in tools (read, bash, edit, write)\n\t * and leaves extension/custom tools enabled unless `noTools` changes that default.\n\t * When provided, only the listed tool names are enabled.\n\t */\n\ttools?: string[];\n\t/** Optional denylist of tool names to disable. Applies after `tools` when both are provided. */\n\texcludeTools?: string[];\n\t/** Custom tools to register (in addition to built-in tools). */\n\tcustomTools?: ToolDefinition[];\n\n\t/** Resource loader. When omitted, DefaultResourceLoader is used. */\n\tresourceLoader?: ResourceLoader;\n\n\t/** Session manager. Default: SessionManager.create(cwd) */\n\tsessionManager?: SessionManager;\n\n\t/** Settings manager. Default: SettingsManager.create(cwd, agentDir) */\n\tsettingsManager?: SettingsManager;\n\t/** Session start event metadata for extension runtime startup. */\n\tsessionStartEvent?: SessionStartEvent;\n}\n\n/** Result from createAgentSession */\nexport interface CreateAgentSessionResult {\n\t/** The created session */\n\tsession: AgentSession;\n\t/** Extensions result (for UI context setup in interactive mode) */\n\textensionsResult: LoadExtensionsResult;\n\t/** Warning if session was restored with a different model than saved */\n\tmodelFallbackMessage?: string;\n}\n\n// Re-exports\n\nexport * from \"./agent-session-runtime.ts\";\nexport type {\n\tExtensionAPI,\n\tExtensionCommandContext,\n\tExtensionContext,\n\tExtensionFactory,\n\tSlashCommandInfo,\n\tSlashCommandSource,\n\tToolDefinition,\n} from \"./extensions/index.ts\";\nexport type { PromptTemplate } from \"./prompt-templates.ts\";\nexport type { Skill } from \"./skills.ts\";\nexport type { Tool } from \"./tools/index.ts\";\n\nexport {\n\twithFileMutationQueue,\n\t// Tool factories (for custom cwd)\n\tcreateCodingTools,\n\tcreateReadOnlyTools,\n\tcreateReadTool,\n\tcreateBashTool,\n\tcreateEditTool,\n\tcreateWriteTool,\n\tcreateGrepTool,\n\tcreateFindTool,\n\tcreateLsTool,\n};\n\n// Helper Functions\n\nfunction getDefaultAgentDir(): string {\n\treturn getAgentDir();\n}\n\n/**\n * Create an AgentSession with the specified options.\n *\n * @example\n * ```typescript\n * // Minimal - uses defaults\n * const { session } = await createAgentSession();\n *\n * // With explicit model\n * import { getModel } from '@earendil-works/omk-ai';\n * const { session } = await createAgentSession({\n * model: getModel('anthropic', 'claude-opus-4-5'),\n * thinkingLevel: 'high',\n * });\n *\n * // Continue previous session\n * const { session, modelFallbackMessage } = await createAgentSession({\n * continueSession: true,\n * });\n *\n * // Full control\n * const loader = new DefaultResourceLoader({\n * cwd: process.cwd(),\n * agentDir: getAgentDir(),\n * settingsManager: SettingsManager.create(),\n * });\n * await loader.reload();\n * const { session } = await createAgentSession({\n * model: myModel,\n * tools: [\"read\", \"bash\"],\n * resourceLoader: loader,\n * sessionManager: SessionManager.inMemory(),\n * });\n * ```\n */\nexport async function createAgentSession(options: CreateAgentSessionOptions = {}): Promise<CreateAgentSessionResult> {\n\tconst cwd = resolvePath(options.cwd ?? options.sessionManager?.getCwd() ?? process.cwd());\n\tconst agentDir = options.agentDir ? resolvePath(options.agentDir) : getDefaultAgentDir();\n\tlet resourceLoader = options.resourceLoader;\n\n\t// Use provided or create AuthStorage and ModelRegistry\n\tconst authPath = options.agentDir ? join(agentDir, \"auth.json\") : undefined;\n\tconst modelsPath = options.agentDir ? join(agentDir, \"models.json\") : undefined;\n\tconst authStorage = options.authStorage ?? AuthStorage.create(authPath);\n\tconst modelRegistry = options.modelRegistry ?? ModelRegistry.create(authStorage, modelsPath);\n\n\tconst settingsManager = options.settingsManager ?? SettingsManager.create(cwd, agentDir);\n\tconst sessionManager = options.sessionManager ?? SessionManager.create(cwd, getDefaultSessionDir(cwd, agentDir));\n\n\tif (!resourceLoader) {\n\t\tresourceLoader = new DefaultResourceLoader({ cwd, agentDir, settingsManager });\n\t\tawait resourceLoader.reload();\n\t\ttime(\"resourceLoader.reload\");\n\t}\n\n\t// Check if session has existing data to restore\n\tconst existingSession = sessionManager.buildSessionContext();\n\tconst hasExistingSession = existingSession.messages.length > 0;\n\tconst hasThinkingEntry = sessionManager.getBranch().some((entry) => entry.type === \"thinking_level_change\");\n\n\tlet model = options.model;\n\tlet modelFallbackMessage: string | undefined;\n\n\t// If session has data, try to restore model from it\n\tif (!model && hasExistingSession && existingSession.model) {\n\t\tconst restoredModel = modelRegistry.find(existingSession.model.provider, existingSession.model.modelId);\n\t\tif (restoredModel && modelRegistry.hasConfiguredAuth(restoredModel)) {\n\t\t\tmodel = restoredModel;\n\t\t}\n\t\tif (!model) {\n\t\t\tmodelFallbackMessage = `Could not restore model ${existingSession.model.provider}/${existingSession.model.modelId}`;\n\t\t}\n\t}\n\n\t// If still no model, use findInitialModel (checks settings default, then provider defaults)\n\tif (!model) {\n\t\tconst result = await findInitialModel({\n\t\t\tscopedModels: [],\n\t\t\tisContinuing: hasExistingSession,\n\t\t\tdefaultProvider: settingsManager.getDefaultProvider(),\n\t\t\tdefaultModelId: settingsManager.getDefaultModel(),\n\t\t\tdefaultThinkingLevel: settingsManager.getDefaultThinkingLevel(),\n\t\t\tmodelRegistry,\n\t\t});\n\t\tmodel = result.model;\n\t\tif (!model) {\n\t\t\tmodelFallbackMessage = formatNoModelsAvailableMessage();\n\t\t} else if (modelFallbackMessage) {\n\t\t\tmodelFallbackMessage += `. Using ${model.provider}/${model.id}`;\n\t\t}\n\t}\n\n\tlet thinkingLevel = options.thinkingLevel;\n\n\t// If session has data, restore thinking level from it\n\tif (thinkingLevel === undefined && hasExistingSession) {\n\t\tthinkingLevel = hasThinkingEntry\n\t\t\t? (existingSession.thinkingLevel as ThinkingLevel)\n\t\t\t: (settingsManager.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL);\n\t}\n\n\t// Fall back to settings default\n\tif (thinkingLevel === undefined) {\n\t\tthinkingLevel = settingsManager.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL;\n\t}\n\n\t// Clamp to model capabilities\n\tif (!model) {\n\t\tthinkingLevel = \"off\";\n\t} else {\n\t\tthinkingLevel = clampThinkingLevel(model, thinkingLevel) as ThinkingLevel;\n\t}\n\n\tconst defaultActiveToolNames: ToolName[] = [\"read\", \"bash\", \"edit\", \"write\"];\n\tconst allowedToolNames = options.tools ?? (options.noTools === \"all\" ? [] : undefined);\n\tconst excludedToolNames = options.excludeTools;\n\tconst excludedToolNameSet = excludedToolNames ? new Set(excludedToolNames) : undefined;\n\tconst initialActiveToolNames: string[] = (\n\t\toptions.tools ? [...options.tools] : options.noTools ? [] : defaultActiveToolNames\n\t).filter((name) => !excludedToolNameSet?.has(name));\n\n\tlet agent: Agent;\n\n\t// Create convertToLlm wrapper that filters images if blockImages is enabled (defense-in-depth)\n\tconst convertToLlmWithBlockImages = (messages: AgentMessage[]): Message[] => {\n\t\tconst converted = convertToLlm(messages);\n\t\t// Check setting dynamically so mid-session changes take effect\n\t\tif (!settingsManager.getBlockImages()) {\n\t\t\treturn converted;\n\t\t}\n\t\t// Filter out ImageContent from all messages, replacing with text placeholder\n\t\treturn converted.map((msg) => {\n\t\t\tif (msg.role === \"user\" || msg.role === \"toolResult\") {\n\t\t\t\tconst content = msg.content;\n\t\t\t\tif (Array.isArray(content)) {\n\t\t\t\t\tconst hasImages = content.some((c) => c.type === \"image\");\n\t\t\t\t\tif (hasImages) {\n\t\t\t\t\t\tconst filteredContent = content\n\t\t\t\t\t\t\t.map((c) =>\n\t\t\t\t\t\t\t\tc.type === \"image\" ? { type: \"text\" as const, text: \"Image reading is disabled.\" } : c,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t\t(c, i, arr) =>\n\t\t\t\t\t\t\t\t\t// Dedupe consecutive \"Image reading is disabled.\" texts\n\t\t\t\t\t\t\t\t\t!(\n\t\t\t\t\t\t\t\t\t\tc.type === \"text\" &&\n\t\t\t\t\t\t\t\t\t\tc.text === \"Image reading is disabled.\" &&\n\t\t\t\t\t\t\t\t\t\ti > 0 &&\n\t\t\t\t\t\t\t\t\t\tarr[i - 1].type === \"text\" &&\n\t\t\t\t\t\t\t\t\t\t(arr[i - 1] as { type: \"text\"; text: string }).text === \"Image reading is disabled.\"\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\treturn { ...msg, content: filteredContent };\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn msg;\n\t\t});\n\t};\n\n\tconst extensionRunnerRef: { current?: ExtensionRunner } = {};\n\n\tagent = new Agent({\n\t\tinitialState: {\n\t\t\tsystemPrompt: \"\",\n\t\t\tmodel,\n\t\t\tthinkingLevel,\n\t\t\ttools: [],\n\t\t},\n\t\tconvertToLlm: convertToLlmWithBlockImages,\n\t\tstreamFn: async (model, context, options) => {\n\t\t\tconst auth = await modelRegistry.getApiKeyAndHeaders(model);\n\t\t\tif (!auth.ok) {\n\t\t\t\tthrow new Error(auth.error);\n\t\t\t}\n\t\t\tconst providerRetrySettings = settingsManager.getProviderRetrySettings();\n\t\t\tconst httpIdleTimeoutMs = settingsManager.getHttpIdleTimeoutMs();\n\t\t\t// SDKs treat timeout=0 as 0ms (immediate timeout), not \"no timeout\".\n\t\t\t// Use max int32 to effectively disable the timeout.\n\t\t\tconst effectiveTimeoutMs = httpIdleTimeoutMs === 0 ? 2147483647 : httpIdleTimeoutMs;\n\t\t\tconst timeoutMs = options?.timeoutMs ?? providerRetrySettings.timeoutMs ?? effectiveTimeoutMs;\n\t\t\tconst websocketConnectTimeoutMs =\n\t\t\t\toptions?.websocketConnectTimeoutMs ?? settingsManager.getWebSocketConnectTimeoutMs();\n\t\t\treturn streamSimple(model, context, {\n\t\t\t\t...options,\n\t\t\t\tapiKey: auth.apiKey,\n\t\t\t\ttimeoutMs,\n\t\t\t\twebsocketConnectTimeoutMs,\n\t\t\t\tmaxRetries: options?.maxRetries ?? providerRetrySettings.maxRetries,\n\t\t\t\tmaxRetryDelayMs: options?.maxRetryDelayMs ?? providerRetrySettings.maxRetryDelayMs,\n\t\t\t\theaders: mergeProviderAttributionHeaders(\n\t\t\t\t\tmodel,\n\t\t\t\t\tsettingsManager,\n\t\t\t\t\toptions?.sessionId,\n\t\t\t\t\tauth.headers,\n\t\t\t\t\toptions?.headers,\n\t\t\t\t),\n\t\t\t});\n\t\t},\n\t\tonPayload: async (payload, _model) => {\n\t\t\tconst runner = extensionRunnerRef.current;\n\t\t\tif (!runner?.hasHandlers(\"before_provider_request\")) {\n\t\t\t\treturn payload;\n\t\t\t}\n\t\t\treturn runner.emitBeforeProviderRequest(payload);\n\t\t},\n\t\tonResponse: async (response, _model) => {\n\t\t\tconst runner = extensionRunnerRef.current;\n\t\t\tif (!runner?.hasHandlers(\"after_provider_response\")) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait runner.emit({\n\t\t\t\ttype: \"after_provider_response\",\n\t\t\t\tstatus: response.status,\n\t\t\t\theaders: response.headers,\n\t\t\t});\n\t\t},\n\t\tsessionId: sessionManager.getSessionId(),\n\t\ttransformContext: async (messages) => {\n\t\t\tconst runner = extensionRunnerRef.current;\n\t\t\tif (!runner) return messages;\n\t\t\treturn runner.emitContext(messages);\n\t\t},\n\t\tsteeringMode: settingsManager.getSteeringMode(),\n\t\tfollowUpMode: settingsManager.getFollowUpMode(),\n\t\ttransport: settingsManager.getTransport(),\n\t\tthinkingBudgets: settingsManager.getThinkingBudgets(),\n\t\tmaxRetryDelayMs: settingsManager.getProviderRetrySettings().maxRetryDelayMs,\n\t});\n\n\t// Restore messages if session has existing data\n\tif (hasExistingSession) {\n\t\tagent.state.messages = existingSession.messages;\n\t\tif (!hasThinkingEntry) {\n\t\t\tsessionManager.appendThinkingLevelChange(thinkingLevel);\n\t\t}\n\t} else {\n\t\t// Save initial model and thinking level for new sessions so they can be restored on resume\n\t\tif (model) {\n\t\t\tsessionManager.appendModelChange(model.provider, model.id);\n\t\t}\n\t\tsessionManager.appendThinkingLevelChange(thinkingLevel);\n\t}\n\n\tconst session = new AgentSession({\n\t\tagent,\n\t\tsessionManager,\n\t\tsettingsManager,\n\t\tcwd,\n\t\tscopedModels: options.scopedModels,\n\t\tresourceLoader,\n\t\tcustomTools: options.customTools,\n\t\tmodelRegistry,\n\t\tinitialActiveToolNames,\n\t\tallowedToolNames,\n\t\texcludedToolNames,\n\t\textensionRunnerRef,\n\t\tsessionStartEvent: options.sessionStartEvent,\n\t});\n\tconst extensionsResult = resourceLoader.getExtensions();\n\n\treturn {\n\t\tsession,\n\t\textensionsResult,\n\t\tmodelFallbackMessage,\n\t};\n}\n"]}
1
+ {"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../../src/core/sdk.ts"],"names":[],"mappings":"AACA,OAAO,EAA4B,KAAK,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC7G,OAAO,EAEN,KAAK,4BAA4B,EAIjC,KAAK,KAAK,EACV,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAE3B,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,EAAmB,oBAAoB,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACtH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEtE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAEvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAAwB,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,EACN,KAAK,oBAAoB,EACzB,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,cAAc,EACd,YAAY,EACZ,mBAAmB,EACnB,cAAc,EACd,eAAe,EAEf,qBAAqB,EACrB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,WAAW,yBAAyB;IACzC,4EAA4E;IAC5E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,oFAAoF;IACpF,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,uFAAuF;IACvF,aAAa,CAAC,EAAE,aAAa,CAAC;IAE9B,iEAAiE;IACjE,KAAK,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IACnB,4FAA4F;IAC5F,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,gEAAgE;IAChE,YAAY,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;QAAC,aAAa,CAAC,EAAE,aAAa,CAAA;KAAE,CAAC,CAAC;IAE3E;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;IAC5B;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,gGAAgG;IAChG,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,gEAAgE;IAChE,WAAW,CAAC,EAAE,cAAc,EAAE,CAAC;IAE/B,oEAAoE;IACpE,cAAc,CAAC,EAAE,cAAc,CAAC;IAEhC,2DAA2D;IAC3D,cAAc,CAAC,EAAE,cAAc,CAAC;IAEhC,uEAAuE;IACvE,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,kEAAkE;IAClE,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC;;;;;OAKG;IACH,qBAAqB,CAAC,EAAE,2BAA2B,CAAC;IACpD,2EAA2E;IAC3E,sBAAsB,CAAC,EAAE,wBAAwB,CAAC;IAClD,oEAAoE;IACpE,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,oFAAoF;IACpF,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,mGAAmG;IACnG,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,+FAA+F;IAC/F,mBAAmB,CAAC,EAAE,0BAA0B,CAAC;CACjD;AAED,qCAAqC;AACrC,MAAM,WAAW,wBAAwB;IACxC,0BAA0B;IAC1B,OAAO,EAAE,YAAY,CAAC;IACtB,mEAAmE;IACnE,gBAAgB,EAAE,oBAAoB,CAAC;IACvC,wEAAwE;IACxE,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAID,cAAc,4BAA4B,CAAC;AAC3C,YAAY,EACX,YAAY,EACZ,uBAAuB,EACvB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,GACd,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,YAAY,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,YAAY,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAE7C,OAAO,EACN,qBAAqB,EAErB,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,EACd,cAAc,EACd,cAAc,EACd,eAAe,EACf,cAAc,EACd,cAAc,EACd,YAAY,GACZ,CAAC;AAQF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAYH,MAAM,MAAM,yBAAyB,GAAG,KAAK,GAAG,OAAO,GAAG,SAAS,CAAC;AAEpE,MAAM,MAAM,4BAA4B,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;AAEpE,MAAM,WAAW,2BAA2B;IAC3C,IAAI,EAAE,yBAAyB,CAAC;IAChC,OAAO,EAAE,4BAA4B,CAAC;CACtC;AAED,MAAM,WAAW,yBAAyB;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,sBAAsB,CAAC,UAAU,CAAC,CAAC;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,sBAAsB,CAAC,WAAW,CAAC,CAAC;IAC/C,OAAO,EAAE,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAC3C,IAAI,EAAE,yBAAyB,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,MAAM,wBAAwB,GAAG,CAAC,KAAK,EAAE,yBAAyB,KAAK,IAAI,CAAC;AAuBlF;;;;GAIG;AACH,wBAAgB,2BAA2B,CAC1C,MAAM,EAAE,2BAA2B,EACnC,OAAO,EAAE,sBAAsB,GAC7B,uBAAuB,CAkCzB;AAED;;;;;GAKG;AACH,wBAAgB,kCAAkC,CACjD,MAAM,EAAE,2BAA2B,EACnC,OAAO,CAAC,EAAE,wBAAwB,GAChC,4BAA4B,CAmB9B;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACvC,aAAa,EAAE,aAAa,CAAC;IAC7B,eAAe,EAAE,eAAe,CAAC;IACjC,sGAAsG;IACtG,4BAA4B,CAAC,EAAE,4BAA4B,CAAC;CAC5D;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,uBAAuB,GAAG,QAAQ,CA0CjF;AAED,wBAAsB,kBAAkB,CAAC,OAAO,GAAE,yBAA8B,GAAG,OAAO,CAAC,wBAAwB,CAAC,CA0NnH","sourcesContent":["import { join } from \"node:path\";\nimport { Agent, type AgentMessage, type StreamFn, type ThinkingLevel } from \"@earendil-works/omk-agent-core\";\nimport {\n\tassertProviderNetworkRequestAllowed,\n\ttype BeforeProviderNetworkRequest,\n\tclampThinkingLevel,\n\tcreateProviderNetworkErrorStream,\n\ttype Message,\n\ttype Model,\n\ttype ProviderNetworkDecision,\n\ttype ProviderNetworkRequest,\n\tstreamSimple,\n} from \"@earendil-works/omk-ai\";\nimport { getAgentDir } from \"../config.ts\";\nimport { resolvePath } from \"../utils/paths.ts\";\nimport { AgentSession } from \"./agent-session.ts\";\nimport { formatNoModelsAvailableMessage } from \"./auth-guidance.ts\";\nimport { AuthStorage } from \"./auth-storage.ts\";\nimport { DEFAULT_THINKING_LEVEL } from \"./defaults.ts\";\nimport type { ExtensionRunner, LoadExtensionsResult, SessionStartEvent, ToolDefinition } from \"./extensions/index.ts\";\nimport type { ExtensionExecSandbox } from \"./extensions/types.ts\";\nimport type { LoadoutAccessPolicy } from \"./loadout-access-policy.ts\";\nimport { convertToLlm } from \"./messages.ts\";\nimport { ModelRegistry } from \"./model-registry.ts\";\nimport { findInitialModel } from \"./model-resolver.ts\";\nimport type { PackageTrialRuntimeOptions } from \"./package-manager.ts\";\nimport { mergeProviderAttributionHeaders } from \"./provider-attribution.ts\";\nimport type { ResourceLoader } from \"./resource-loader.ts\";\nimport { DefaultResourceLoader } from \"./resource-loader.ts\";\nimport { decideNetworkAccess, type SandboxPolicy } from \"./sandbox/policy.ts\";\nimport { getDefaultSessionDir, SessionManager } from \"./session-manager.ts\";\nimport { SettingsManager } from \"./settings-manager.ts\";\nimport { time } from \"./timings.ts\";\nimport {\n\ttype BashSandboxPreflight,\n\tcreateBashTool,\n\tcreateCodingTools,\n\tcreateEditTool,\n\tcreateFindTool,\n\tcreateGrepTool,\n\tcreateLsTool,\n\tcreateReadOnlyTools,\n\tcreateReadTool,\n\tcreateWriteTool,\n\ttype ToolName,\n\twithFileMutationQueue,\n} from \"./tools/index.ts\";\n\nexport interface CreateAgentSessionOptions {\n\t/** Working directory for project-local discovery. Default: process.cwd() */\n\tcwd?: string;\n\t/** Global config directory. Default: ~/.omk/agent */\n\tagentDir?: string;\n\n\t/** Auth storage for credentials. Default: AuthStorage.create(agentDir/auth.json) */\n\tauthStorage?: AuthStorage;\n\t/** Model registry. Default: ModelRegistry.create(authStorage, agentDir/models.json) */\n\tmodelRegistry?: ModelRegistry;\n\n\t/** Model to use. Default: from settings, else first available */\n\tmodel?: Model<any>;\n\t/** Thinking level. Default: from settings, else 'medium' (clamped to model capabilities) */\n\tthinkingLevel?: ThinkingLevel;\n\t/** Models available for cycling (Ctrl+P in interactive mode) */\n\tscopedModels?: Array<{ model: Model<any>; thinkingLevel?: ThinkingLevel }>;\n\n\t/**\n\t * Optional default tool suppression mode when no explicit allowlist is provided.\n\t *\n\t * - \"all\": start with no tools enabled\n\t * - \"builtin\": disable the default built-in tools (read, bash, edit, write)\n\t * but keep extension/custom tools enabled\n\t */\n\tnoTools?: \"all\" | \"builtin\";\n\t/**\n\t * Optional allowlist of tool names.\n\t *\n\t * When omitted, omk enables the default built-in tools (read, bash, edit, write)\n\t * and leaves extension/custom tools enabled unless `noTools` changes that default.\n\t * When provided, only the listed tool names are enabled.\n\t */\n\ttools?: string[];\n\t/** Optional denylist of tool names to disable. Applies after `tools` when both are provided. */\n\texcludeTools?: string[];\n\t/** Custom tools to register (in addition to built-in tools). */\n\tcustomTools?: ToolDefinition[];\n\n\t/** Resource loader. When omitted, DefaultResourceLoader is used. */\n\tresourceLoader?: ResourceLoader;\n\n\t/** Session manager. Default: SessionManager.create(cwd) */\n\tsessionManager?: SessionManager;\n\n\t/** Settings manager. Default: SettingsManager.create(cwd, agentDir) */\n\tsettingsManager?: SettingsManager;\n\t/** Session start event metadata for extension runtime startup. */\n\tsessionStartEvent?: SessionStartEvent;\n\t/**\n\t * Optional provider network policy. When omitted, no provider network\n\t * preflight is installed (current behavior preserved). When set, a\n\t * sanitized preflight runs before API key/header resolution and is\n\t * forwarded to `streamSimple` for deeper provider-derived URL checks.\n\t */\n\tproviderNetworkPolicy?: ProviderNetworkPolicyConfig;\n\t/** Optional sanitized audit sink for provider network policy decisions. */\n\tonProviderNetworkAudit?: ProviderNetworkAuditSink;\n\t/** Optional loadout enforcement policy for SDK-created sessions. */\n\tloadoutAccessPolicy?: LoadoutAccessPolicy;\n\t/** Optional bash sandbox preflight policy for SDK-created sessions and RPC bash. */\n\tbashSandboxPreflight?: BashSandboxPreflight;\n\t/** Optional sandbox policy for extension `omk.exec` loaded through the default resource loader. */\n\textensionExecSandbox?: ExtensionExecSandbox;\n\t/** Optional sandboxed temporary package trial runtime for CLI/SDK supplied package sources. */\n\tpackageTrialRuntime?: PackageTrialRuntimeOptions;\n}\n\n/** Result from createAgentSession */\nexport interface CreateAgentSessionResult {\n\t/** The created session */\n\tsession: AgentSession;\n\t/** Extensions result (for UI context setup in interactive mode) */\n\textensionsResult: LoadExtensionsResult;\n\t/** Warning if session was restored with a different model than saved */\n\tmodelFallbackMessage?: string;\n}\n\n// Re-exports\n\nexport * from \"./agent-session-runtime.ts\";\nexport type {\n\tExtensionAPI,\n\tExtensionCommandContext,\n\tExtensionContext,\n\tExtensionFactory,\n\tSlashCommandInfo,\n\tSlashCommandSource,\n\tToolDefinition,\n} from \"./extensions/index.ts\";\nexport type { PromptTemplate } from \"./prompt-templates.ts\";\nexport type { Skill } from \"./skills.ts\";\nexport type { Tool } from \"./tools/index.ts\";\n\nexport {\n\twithFileMutationQueue,\n\t// Tool factories (for custom cwd)\n\tcreateCodingTools,\n\tcreateReadOnlyTools,\n\tcreateReadTool,\n\tcreateBashTool,\n\tcreateEditTool,\n\tcreateWriteTool,\n\tcreateGrepTool,\n\tcreateFindTool,\n\tcreateLsTool,\n};\n\n// Helper Functions\n\nfunction getDefaultAgentDir(): string {\n\treturn getAgentDir();\n}\n\n/**\n * Create an AgentSession with the specified options.\n *\n * @example\n * ```typescript\n * // Minimal - uses defaults\n * const { session } = await createAgentSession();\n *\n * // With explicit model\n * import { getModel } from '@earendil-works/omk-ai';\n * const { session } = await createAgentSession({\n * model: getModel('anthropic', 'claude-opus-4-5'),\n * thinkingLevel: 'high',\n * });\n *\n * // Continue previous session\n * const { session, modelFallbackMessage } = await createAgentSession({\n * continueSession: true,\n * });\n *\n * // Full control\n * const loader = new DefaultResourceLoader({\n * cwd: process.cwd(),\n * agentDir: getAgentDir(),\n * settingsManager: SettingsManager.create(),\n * });\n * await loader.reload();\n * const { session } = await createAgentSession({\n * model: myModel,\n * tools: [\"read\", \"bash\"],\n * resourceLoader: loader,\n * sessionManager: SessionManager.inMemory(),\n * });\n * ```\n */\n// ---------------------------------------------------------------------------\n// Provider network policy\n//\n// Sanitized preflight for provider/API network access. The request metadata\n// is origin-only (no credentials, query, fragment, path, headers, API keys,\n// request bodies, prompts, or responses). Enforce mode blocks denied hosts\n// before any provider network I/O and before API key/header resolution; audit\n// mode records `wouldDeny` without blocking; off mode disables the preflight.\n// The pure host/loopback/deny/allow logic reuses `decideNetworkAccess`.\n// ---------------------------------------------------------------------------\n\nexport type ProviderNetworkPolicyMode = \"off\" | \"audit\" | \"enforce\";\n\nexport type ProviderNetworkPolicyNetwork = SandboxPolicy[\"network\"];\n\nexport interface ProviderNetworkPolicyConfig {\n\tmode: ProviderNetworkPolicyMode;\n\tnetwork: ProviderNetworkPolicyNetwork;\n}\n\nexport interface ProviderNetworkAuditEvent {\n\tprovider: string;\n\tapi: string;\n\tmodelId: string;\n\thost?: string;\n\tprotocol: ProviderNetworkRequest[\"protocol\"];\n\tport?: string;\n\ttransport: ProviderNetworkRequest[\"transport\"];\n\tpurpose: ProviderNetworkRequest[\"purpose\"];\n\tmode: ProviderNetworkPolicyMode;\n\trule: string;\n\tallowed: boolean;\n\twouldDeny?: boolean;\n}\n\nexport type ProviderNetworkAuditSink = (event: ProviderNetworkAuditEvent) => void;\n\nfunction syntheticProviderSandboxPolicy(\n\tmode: \"audit\" | \"enforce\",\n\tnetwork: ProviderNetworkPolicyNetwork,\n): SandboxPolicy {\n\treturn {\n\t\tmode,\n\t\tprofile: \"networked\",\n\t\tfilesystem: {\n\t\t\troot: \"/\",\n\t\t\treadAllow: [],\n\t\t\treadDeny: [],\n\t\t\twriteAllow: [],\n\t\t\tdenyWrite: [],\n\t\t\ttempWrite: [],\n\t\t\tfollowSymlinks: false,\n\t\t},\n\t\tnetwork,\n\t\tprocess: { allowExec: true, allowShell: true, allowPrivilege: false },\n\t};\n}\n\n/**\n * Map a sanitized provider network request to a provider-neutral decision.\n * Reuses the pure sandbox network decision logic (`decideNetworkAccess`) so\n * allow/deny/loopback semantics stay consistent with the rest of the sandbox.\n */\nexport function decideProviderNetworkAccess(\n\tconfig: ProviderNetworkPolicyConfig,\n\trequest: ProviderNetworkRequest,\n): ProviderNetworkDecision {\n\tif (config.mode === \"off\") {\n\t\treturn {\n\t\t\tallowed: true,\n\t\t\trule: \"provider-network.off\",\n\t\t\treason: \"Provider network policy is disabled.\",\n\t\t\tmode: \"off\",\n\t\t};\n\t}\n\n\tconst sandboxMode = config.mode === \"audit\" ? \"audit\" : \"enforce\";\n\tconst sandboxDecision = decideNetworkAccess(syntheticProviderSandboxPolicy(sandboxMode, config.network), {\n\t\thost: request.host,\n\t\turl: request.url,\n\t\tloopback: request.loopback,\n\t\tbrowser: false,\n\t});\n\n\tif (config.mode === \"audit\") {\n\t\treturn {\n\t\t\tallowed: true,\n\t\t\twouldDeny: !sandboxDecision.allowed,\n\t\t\trule: sandboxDecision.rule,\n\t\t\treason: sandboxDecision.reason,\n\t\t\tmode: \"audit\",\n\t\t};\n\t}\n\n\treturn {\n\t\tallowed: sandboxDecision.allowed,\n\t\trule: sandboxDecision.rule,\n\t\treason: sandboxDecision.reason,\n\t\tmode: \"enforce\",\n\t};\n}\n\n/**\n * Create the `beforeNetworkRequest` hook installed on the agent stream\n * function. The optional audit sink receives only sanitized metadata\n * (provider, api, model id, host, protocol, port, transport, purpose, mode,\n * rule, allowed/wouldDeny) and never headers, API keys, or request bodies.\n */\nexport function createBeforeProviderNetworkRequest(\n\tconfig: ProviderNetworkPolicyConfig,\n\tonAudit?: ProviderNetworkAuditSink,\n): BeforeProviderNetworkRequest {\n\treturn (request) => {\n\t\tconst decision = decideProviderNetworkAccess(config, request);\n\t\tonAudit?.({\n\t\t\tprovider: request.provider,\n\t\t\tapi: String(request.api),\n\t\t\tmodelId: request.modelId,\n\t\t\thost: request.host,\n\t\t\tprotocol: request.protocol,\n\t\t\tport: request.port,\n\t\t\ttransport: request.transport,\n\t\t\tpurpose: request.purpose,\n\t\t\tmode: decision.mode,\n\t\t\trule: decision.rule,\n\t\t\tallowed: decision.allowed,\n\t\t\twouldDeny: decision.wouldDeny,\n\t\t});\n\t\treturn decision;\n\t};\n}\n\n/**\n * Dependencies for the agent stream function factory.\n */\nexport interface AgentStreamFunctionDeps {\n\tmodelRegistry: ModelRegistry;\n\tsettingsManager: SettingsManager;\n\t/** When set, a sanitized preflight runs before auth resolution and is forwarded to `streamSimple`. */\n\tproviderNetworkBeforeRequest?: BeforeProviderNetworkRequest;\n}\n\n/**\n * Build the Agent `streamFn` used by `createAgentSession`.\n *\n * Contract preserved from the previous inline implementation:\n * - resolves API key/headers via the model registry,\n * - applies provider retry/timeout settings,\n * - merges provider attribution headers.\n *\n * Added behavior: when `providerNetworkBeforeRequest` is set, a sanitized\n * preflight runs BEFORE auth resolution. A deny returns a sanitized error\n * stream (no headers/API keys/bodies/prompts/responses are exposed) and skips\n * auth + provider invocation entirely. The hook is also forwarded to\n * `streamSimple` so provider-derived endpoints can be checked deeper.\n */\nexport function createAgentStreamFunction(deps: AgentStreamFunctionDeps): StreamFn {\n\tconst { modelRegistry, settingsManager, providerNetworkBeforeRequest } = deps;\n\treturn async (model, context, options) => {\n\t\tif (providerNetworkBeforeRequest) {\n\t\t\ttry {\n\t\t\t\tawait assertProviderNetworkRequestAllowed(\n\t\t\t\t\t{ model, purpose: \"chat\", transport: \"http\", source: \"model.baseUrl\" },\n\t\t\t\t\tproviderNetworkBeforeRequest,\n\t\t\t\t);\n\t\t\t} catch (error) {\n\t\t\t\treturn createProviderNetworkErrorStream(model, error);\n\t\t\t}\n\t\t}\n\t\tconst auth = await modelRegistry.getApiKeyAndHeaders(model);\n\t\tif (!auth.ok) {\n\t\t\tthrow new Error(auth.error);\n\t\t}\n\t\tconst providerRetrySettings = settingsManager.getProviderRetrySettings();\n\t\tconst httpIdleTimeoutMs = settingsManager.getHttpIdleTimeoutMs();\n\t\t// SDKs treat timeout=0 as 0ms (immediate timeout), not \"no timeout\".\n\t\t// Use max int32 to effectively disable the timeout.\n\t\tconst effectiveTimeoutMs = httpIdleTimeoutMs === 0 ? 2147483647 : httpIdleTimeoutMs;\n\t\tconst timeoutMs = options?.timeoutMs ?? providerRetrySettings.timeoutMs ?? effectiveTimeoutMs;\n\t\tconst websocketConnectTimeoutMs =\n\t\t\toptions?.websocketConnectTimeoutMs ?? settingsManager.getWebSocketConnectTimeoutMs();\n\t\treturn streamSimple(model, context, {\n\t\t\t...options,\n\t\t\tapiKey: auth.apiKey,\n\t\t\ttimeoutMs,\n\t\t\twebsocketConnectTimeoutMs,\n\t\t\tmaxRetries: options?.maxRetries ?? providerRetrySettings.maxRetries,\n\t\t\tmaxRetryDelayMs: options?.maxRetryDelayMs ?? providerRetrySettings.maxRetryDelayMs,\n\t\t\theaders: mergeProviderAttributionHeaders(\n\t\t\t\tmodel,\n\t\t\t\tsettingsManager,\n\t\t\t\toptions?.sessionId,\n\t\t\t\tauth.headers,\n\t\t\t\toptions?.headers,\n\t\t\t),\n\t\t\t...(providerNetworkBeforeRequest ? { beforeNetworkRequest: providerNetworkBeforeRequest } : {}),\n\t\t});\n\t};\n}\n\nexport async function createAgentSession(options: CreateAgentSessionOptions = {}): Promise<CreateAgentSessionResult> {\n\tconst cwd = resolvePath(options.cwd ?? options.sessionManager?.getCwd() ?? process.cwd());\n\tconst agentDir = options.agentDir ? resolvePath(options.agentDir) : getDefaultAgentDir();\n\tlet resourceLoader = options.resourceLoader;\n\n\t// Use provided or create AuthStorage and ModelRegistry\n\tconst authPath = options.agentDir ? join(agentDir, \"auth.json\") : undefined;\n\tconst modelsPath = options.agentDir ? join(agentDir, \"models.json\") : undefined;\n\tconst authStorage = options.authStorage ?? AuthStorage.create(authPath);\n\tconst modelRegistry = options.modelRegistry ?? ModelRegistry.create(authStorage, modelsPath);\n\n\tconst settingsManager = options.settingsManager ?? SettingsManager.create(cwd, agentDir);\n\tconst sessionManager = options.sessionManager ?? SessionManager.create(cwd, getDefaultSessionDir(cwd, agentDir));\n\n\tif (!resourceLoader) {\n\t\tresourceLoader = new DefaultResourceLoader({\n\t\t\tcwd,\n\t\t\tagentDir,\n\t\t\tsettingsManager,\n\t\t\textensionExecSandbox: options.extensionExecSandbox,\n\t\t\ttrialRuntime: options.packageTrialRuntime,\n\t\t});\n\t\tawait resourceLoader.reload();\n\t\ttime(\"resourceLoader.reload\");\n\t}\n\n\t// Check if session has existing data to restore\n\tconst existingSession = sessionManager.buildSessionContext();\n\tconst hasExistingSession = existingSession.messages.length > 0;\n\tconst hasThinkingEntry = sessionManager.getBranch().some((entry) => entry.type === \"thinking_level_change\");\n\n\tlet model = options.model;\n\tlet modelFallbackMessage: string | undefined;\n\n\t// If session has data, try to restore model from it\n\tif (!model && hasExistingSession && existingSession.model) {\n\t\tconst restoredModel = modelRegistry.find(existingSession.model.provider, existingSession.model.modelId);\n\t\tif (restoredModel && modelRegistry.hasConfiguredAuth(restoredModel)) {\n\t\t\tmodel = restoredModel;\n\t\t}\n\t\tif (!model) {\n\t\t\tmodelFallbackMessage = `Could not restore model ${existingSession.model.provider}/${existingSession.model.modelId}`;\n\t\t}\n\t}\n\n\t// If still no model, use findInitialModel (checks settings default, then provider defaults)\n\tif (!model) {\n\t\tconst result = await findInitialModel({\n\t\t\tscopedModels: [],\n\t\t\tisContinuing: hasExistingSession,\n\t\t\tdefaultProvider: settingsManager.getDefaultProvider(),\n\t\t\tdefaultModelId: settingsManager.getDefaultModel(),\n\t\t\tdefaultThinkingLevel: settingsManager.getDefaultThinkingLevel(),\n\t\t\tmodelRegistry,\n\t\t});\n\t\tmodel = result.model;\n\t\tif (!model) {\n\t\t\tmodelFallbackMessage = formatNoModelsAvailableMessage();\n\t\t} else if (modelFallbackMessage) {\n\t\t\tmodelFallbackMessage += `. Using ${model.provider}/${model.id}`;\n\t\t}\n\t}\n\n\tlet thinkingLevel = options.thinkingLevel;\n\n\t// If session has data, restore thinking level from it\n\tif (thinkingLevel === undefined && hasExistingSession) {\n\t\tthinkingLevel = hasThinkingEntry\n\t\t\t? (existingSession.thinkingLevel as ThinkingLevel)\n\t\t\t: (settingsManager.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL);\n\t}\n\n\t// Fall back to settings default\n\tif (thinkingLevel === undefined) {\n\t\tthinkingLevel = settingsManager.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL;\n\t}\n\n\t// Clamp to model capabilities\n\tif (!model) {\n\t\tthinkingLevel = \"off\";\n\t} else {\n\t\tthinkingLevel = clampThinkingLevel(model, thinkingLevel) as ThinkingLevel;\n\t}\n\n\tconst defaultActiveToolNames: ToolName[] = [\"read\", \"bash\", \"edit\", \"write\"];\n\tconst allowedToolNames = options.tools ?? (options.noTools === \"all\" ? [] : undefined);\n\tconst excludedToolNames = options.excludeTools;\n\tconst excludedToolNameSet = excludedToolNames ? new Set(excludedToolNames) : undefined;\n\tconst initialActiveToolNames: string[] = (\n\t\toptions.tools ? [...options.tools] : options.noTools ? [] : defaultActiveToolNames\n\t).filter((name) => !excludedToolNameSet?.has(name));\n\n\tlet agent: Agent;\n\n\t// Create convertToLlm wrapper that filters images if blockImages is enabled (defense-in-depth)\n\tconst convertToLlmWithBlockImages = (messages: AgentMessage[]): Message[] => {\n\t\tconst converted = convertToLlm(messages);\n\t\t// Check setting dynamically so mid-session changes take effect\n\t\tif (!settingsManager.getBlockImages()) {\n\t\t\treturn converted;\n\t\t}\n\t\t// Filter out ImageContent from all messages, replacing with text placeholder\n\t\treturn converted.map((msg) => {\n\t\t\tif (msg.role === \"user\" || msg.role === \"toolResult\") {\n\t\t\t\tconst content = msg.content;\n\t\t\t\tif (Array.isArray(content)) {\n\t\t\t\t\tconst hasImages = content.some((c) => c.type === \"image\");\n\t\t\t\t\tif (hasImages) {\n\t\t\t\t\t\tconst filteredContent = content\n\t\t\t\t\t\t\t.map((c) =>\n\t\t\t\t\t\t\t\tc.type === \"image\" ? { type: \"text\" as const, text: \"Image reading is disabled.\" } : c,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t\t(c, i, arr) =>\n\t\t\t\t\t\t\t\t\t// Dedupe consecutive \"Image reading is disabled.\" texts\n\t\t\t\t\t\t\t\t\t!(\n\t\t\t\t\t\t\t\t\t\tc.type === \"text\" &&\n\t\t\t\t\t\t\t\t\t\tc.text === \"Image reading is disabled.\" &&\n\t\t\t\t\t\t\t\t\t\ti > 0 &&\n\t\t\t\t\t\t\t\t\t\tarr[i - 1].type === \"text\" &&\n\t\t\t\t\t\t\t\t\t\t(arr[i - 1] as { type: \"text\"; text: string }).text === \"Image reading is disabled.\"\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\treturn { ...msg, content: filteredContent };\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn msg;\n\t\t});\n\t};\n\n\tconst extensionRunnerRef: { current?: ExtensionRunner } = {};\n\tconst providerNetworkBeforeRequest = options.providerNetworkPolicy\n\t\t? createBeforeProviderNetworkRequest(options.providerNetworkPolicy, options.onProviderNetworkAudit)\n\t\t: undefined;\n\n\tagent = new Agent({\n\t\tinitialState: {\n\t\t\tsystemPrompt: \"\",\n\t\t\tmodel,\n\t\t\tthinkingLevel,\n\t\t\ttools: [],\n\t\t},\n\t\tconvertToLlm: convertToLlmWithBlockImages,\n\t\tstreamFn: createAgentStreamFunction({\n\t\t\tmodelRegistry,\n\t\t\tsettingsManager,\n\t\t\tproviderNetworkBeforeRequest,\n\t\t}),\n\t\tonPayload: async (payload, _model) => {\n\t\t\tconst runner = extensionRunnerRef.current;\n\t\t\tif (!runner?.hasHandlers(\"before_provider_request\")) {\n\t\t\t\treturn payload;\n\t\t\t}\n\t\t\treturn runner.emitBeforeProviderRequest(payload);\n\t\t},\n\t\tonResponse: async (response, _model) => {\n\t\t\tconst runner = extensionRunnerRef.current;\n\t\t\tif (!runner?.hasHandlers(\"after_provider_response\")) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait runner.emit({\n\t\t\t\ttype: \"after_provider_response\",\n\t\t\t\tstatus: response.status,\n\t\t\t\theaders: response.headers,\n\t\t\t});\n\t\t},\n\t\tsessionId: sessionManager.getSessionId(),\n\t\ttransformContext: async (messages) => {\n\t\t\tconst runner = extensionRunnerRef.current;\n\t\t\tif (!runner) return messages;\n\t\t\treturn runner.emitContext(messages);\n\t\t},\n\t\tsteeringMode: settingsManager.getSteeringMode(),\n\t\tfollowUpMode: settingsManager.getFollowUpMode(),\n\t\ttransport: settingsManager.getTransport(),\n\t\tthinkingBudgets: settingsManager.getThinkingBudgets(),\n\t\tmaxRetryDelayMs: settingsManager.getProviderRetrySettings().maxRetryDelayMs,\n\t});\n\n\t// Restore messages if session has existing data\n\tif (hasExistingSession) {\n\t\tagent.state.messages = existingSession.messages;\n\t\tif (!hasThinkingEntry) {\n\t\t\tsessionManager.appendThinkingLevelChange(thinkingLevel);\n\t\t}\n\t} else {\n\t\t// Save initial model and thinking level for new sessions so they can be restored on resume\n\t\tif (model) {\n\t\t\tsessionManager.appendModelChange(model.provider, model.id);\n\t\t}\n\t\tsessionManager.appendThinkingLevelChange(thinkingLevel);\n\t}\n\n\tconst session = new AgentSession({\n\t\tagent,\n\t\tsessionManager,\n\t\tsettingsManager,\n\t\tcwd,\n\t\tscopedModels: options.scopedModels,\n\t\tresourceLoader,\n\t\tcustomTools: options.customTools,\n\t\tmodelRegistry,\n\t\tinitialActiveToolNames,\n\t\tallowedToolNames,\n\t\texcludedToolNames,\n\t\textensionRunnerRef,\n\t\tloadoutAccessPolicy: options.loadoutAccessPolicy,\n\t\tbashSandboxPreflight: options.bashSandboxPreflight,\n\t\tsessionStartEvent: options.sessionStartEvent,\n\t});\n\tconst extensionsResult = resourceLoader.getExtensions();\n\n\treturn {\n\t\tsession,\n\t\textensionsResult,\n\t\tmodelFallbackMessage,\n\t};\n}\n"]}
package/dist/core/sdk.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { join } from "node:path";
2
2
  import { Agent } from "@earendil-works/omk-agent-core";
3
- import { clampThinkingLevel, streamSimple } from "@earendil-works/omk-ai";
3
+ import { assertProviderNetworkRequestAllowed, clampThinkingLevel, createProviderNetworkErrorStream, streamSimple, } from "@earendil-works/omk-ai";
4
4
  import { getAgentDir } from "../config.js";
5
5
  import { resolvePath } from "../utils/paths.js";
6
6
  import { AgentSession } from "./agent-session.js";
@@ -12,6 +12,7 @@ import { ModelRegistry } from "./model-registry.js";
12
12
  import { findInitialModel } from "./model-resolver.js";
13
13
  import { mergeProviderAttributionHeaders } from "./provider-attribution.js";
14
14
  import { DefaultResourceLoader } from "./resource-loader.js";
15
+ import { decideNetworkAccess } from "./sandbox/policy.js";
15
16
  import { getDefaultSessionDir, SessionManager } from "./session-manager.js";
16
17
  import { SettingsManager } from "./settings-manager.js";
17
18
  import { time } from "./timings.js";
@@ -25,41 +26,134 @@ createCodingTools, createReadOnlyTools, createReadTool, createBashTool, createEd
25
26
  function getDefaultAgentDir() {
26
27
  return getAgentDir();
27
28
  }
29
+ function syntheticProviderSandboxPolicy(mode, network) {
30
+ return {
31
+ mode,
32
+ profile: "networked",
33
+ filesystem: {
34
+ root: "/",
35
+ readAllow: [],
36
+ readDeny: [],
37
+ writeAllow: [],
38
+ denyWrite: [],
39
+ tempWrite: [],
40
+ followSymlinks: false,
41
+ },
42
+ network,
43
+ process: { allowExec: true, allowShell: true, allowPrivilege: false },
44
+ };
45
+ }
28
46
  /**
29
- * Create an AgentSession with the specified options.
30
- *
31
- * @example
32
- * ```typescript
33
- * // Minimal - uses defaults
34
- * const { session } = await createAgentSession();
35
- *
36
- * // With explicit model
37
- * import { getModel } from '@earendil-works/omk-ai';
38
- * const { session } = await createAgentSession({
39
- * model: getModel('anthropic', 'claude-opus-4-5'),
40
- * thinkingLevel: 'high',
41
- * });
47
+ * Map a sanitized provider network request to a provider-neutral decision.
48
+ * Reuses the pure sandbox network decision logic (`decideNetworkAccess`) so
49
+ * allow/deny/loopback semantics stay consistent with the rest of the sandbox.
50
+ */
51
+ export function decideProviderNetworkAccess(config, request) {
52
+ if (config.mode === "off") {
53
+ return {
54
+ allowed: true,
55
+ rule: "provider-network.off",
56
+ reason: "Provider network policy is disabled.",
57
+ mode: "off",
58
+ };
59
+ }
60
+ const sandboxMode = config.mode === "audit" ? "audit" : "enforce";
61
+ const sandboxDecision = decideNetworkAccess(syntheticProviderSandboxPolicy(sandboxMode, config.network), {
62
+ host: request.host,
63
+ url: request.url,
64
+ loopback: request.loopback,
65
+ browser: false,
66
+ });
67
+ if (config.mode === "audit") {
68
+ return {
69
+ allowed: true,
70
+ wouldDeny: !sandboxDecision.allowed,
71
+ rule: sandboxDecision.rule,
72
+ reason: sandboxDecision.reason,
73
+ mode: "audit",
74
+ };
75
+ }
76
+ return {
77
+ allowed: sandboxDecision.allowed,
78
+ rule: sandboxDecision.rule,
79
+ reason: sandboxDecision.reason,
80
+ mode: "enforce",
81
+ };
82
+ }
83
+ /**
84
+ * Create the `beforeNetworkRequest` hook installed on the agent stream
85
+ * function. The optional audit sink receives only sanitized metadata
86
+ * (provider, api, model id, host, protocol, port, transport, purpose, mode,
87
+ * rule, allowed/wouldDeny) and never headers, API keys, or request bodies.
88
+ */
89
+ export function createBeforeProviderNetworkRequest(config, onAudit) {
90
+ return (request) => {
91
+ const decision = decideProviderNetworkAccess(config, request);
92
+ onAudit?.({
93
+ provider: request.provider,
94
+ api: String(request.api),
95
+ modelId: request.modelId,
96
+ host: request.host,
97
+ protocol: request.protocol,
98
+ port: request.port,
99
+ transport: request.transport,
100
+ purpose: request.purpose,
101
+ mode: decision.mode,
102
+ rule: decision.rule,
103
+ allowed: decision.allowed,
104
+ wouldDeny: decision.wouldDeny,
105
+ });
106
+ return decision;
107
+ };
108
+ }
109
+ /**
110
+ * Build the Agent `streamFn` used by `createAgentSession`.
42
111
  *
43
- * // Continue previous session
44
- * const { session, modelFallbackMessage } = await createAgentSession({
45
- * continueSession: true,
46
- * });
112
+ * Contract preserved from the previous inline implementation:
113
+ * - resolves API key/headers via the model registry,
114
+ * - applies provider retry/timeout settings,
115
+ * - merges provider attribution headers.
47
116
  *
48
- * // Full control
49
- * const loader = new DefaultResourceLoader({
50
- * cwd: process.cwd(),
51
- * agentDir: getAgentDir(),
52
- * settingsManager: SettingsManager.create(),
53
- * });
54
- * await loader.reload();
55
- * const { session } = await createAgentSession({
56
- * model: myModel,
57
- * tools: ["read", "bash"],
58
- * resourceLoader: loader,
59
- * sessionManager: SessionManager.inMemory(),
60
- * });
61
- * ```
117
+ * Added behavior: when `providerNetworkBeforeRequest` is set, a sanitized
118
+ * preflight runs BEFORE auth resolution. A deny returns a sanitized error
119
+ * stream (no headers/API keys/bodies/prompts/responses are exposed) and skips
120
+ * auth + provider invocation entirely. The hook is also forwarded to
121
+ * `streamSimple` so provider-derived endpoints can be checked deeper.
62
122
  */
123
+ export function createAgentStreamFunction(deps) {
124
+ const { modelRegistry, settingsManager, providerNetworkBeforeRequest } = deps;
125
+ return async (model, context, options) => {
126
+ if (providerNetworkBeforeRequest) {
127
+ try {
128
+ await assertProviderNetworkRequestAllowed({ model, purpose: "chat", transport: "http", source: "model.baseUrl" }, providerNetworkBeforeRequest);
129
+ }
130
+ catch (error) {
131
+ return createProviderNetworkErrorStream(model, error);
132
+ }
133
+ }
134
+ const auth = await modelRegistry.getApiKeyAndHeaders(model);
135
+ if (!auth.ok) {
136
+ throw new Error(auth.error);
137
+ }
138
+ const providerRetrySettings = settingsManager.getProviderRetrySettings();
139
+ const httpIdleTimeoutMs = settingsManager.getHttpIdleTimeoutMs();
140
+ // SDKs treat timeout=0 as 0ms (immediate timeout), not "no timeout".
141
+ // Use max int32 to effectively disable the timeout.
142
+ const effectiveTimeoutMs = httpIdleTimeoutMs === 0 ? 2147483647 : httpIdleTimeoutMs;
143
+ const timeoutMs = options?.timeoutMs ?? providerRetrySettings.timeoutMs ?? effectiveTimeoutMs;
144
+ const websocketConnectTimeoutMs = options?.websocketConnectTimeoutMs ?? settingsManager.getWebSocketConnectTimeoutMs();
145
+ return streamSimple(model, context, {
146
+ ...options,
147
+ apiKey: auth.apiKey,
148
+ timeoutMs,
149
+ websocketConnectTimeoutMs,
150
+ maxRetries: options?.maxRetries ?? providerRetrySettings.maxRetries,
151
+ maxRetryDelayMs: options?.maxRetryDelayMs ?? providerRetrySettings.maxRetryDelayMs,
152
+ headers: mergeProviderAttributionHeaders(model, settingsManager, options?.sessionId, auth.headers, options?.headers),
153
+ ...(providerNetworkBeforeRequest ? { beforeNetworkRequest: providerNetworkBeforeRequest } : {}),
154
+ });
155
+ };
156
+ }
63
157
  export async function createAgentSession(options = {}) {
64
158
  const cwd = resolvePath(options.cwd ?? options.sessionManager?.getCwd() ?? process.cwd());
65
159
  const agentDir = options.agentDir ? resolvePath(options.agentDir) : getDefaultAgentDir();
@@ -72,7 +166,13 @@ export async function createAgentSession(options = {}) {
72
166
  const settingsManager = options.settingsManager ?? SettingsManager.create(cwd, agentDir);
73
167
  const sessionManager = options.sessionManager ?? SessionManager.create(cwd, getDefaultSessionDir(cwd, agentDir));
74
168
  if (!resourceLoader) {
75
- resourceLoader = new DefaultResourceLoader({ cwd, agentDir, settingsManager });
169
+ resourceLoader = new DefaultResourceLoader({
170
+ cwd,
171
+ agentDir,
172
+ settingsManager,
173
+ extensionExecSandbox: options.extensionExecSandbox,
174
+ trialRuntime: options.packageTrialRuntime,
175
+ });
76
176
  await resourceLoader.reload();
77
177
  time("resourceLoader.reload");
78
178
  }
@@ -165,6 +265,9 @@ export async function createAgentSession(options = {}) {
165
265
  });
166
266
  };
167
267
  const extensionRunnerRef = {};
268
+ const providerNetworkBeforeRequest = options.providerNetworkPolicy
269
+ ? createBeforeProviderNetworkRequest(options.providerNetworkPolicy, options.onProviderNetworkAudit)
270
+ : undefined;
168
271
  agent = new Agent({
169
272
  initialState: {
170
273
  systemPrompt: "",
@@ -173,28 +276,11 @@ export async function createAgentSession(options = {}) {
173
276
  tools: [],
174
277
  },
175
278
  convertToLlm: convertToLlmWithBlockImages,
176
- streamFn: async (model, context, options) => {
177
- const auth = await modelRegistry.getApiKeyAndHeaders(model);
178
- if (!auth.ok) {
179
- throw new Error(auth.error);
180
- }
181
- const providerRetrySettings = settingsManager.getProviderRetrySettings();
182
- const httpIdleTimeoutMs = settingsManager.getHttpIdleTimeoutMs();
183
- // SDKs treat timeout=0 as 0ms (immediate timeout), not "no timeout".
184
- // Use max int32 to effectively disable the timeout.
185
- const effectiveTimeoutMs = httpIdleTimeoutMs === 0 ? 2147483647 : httpIdleTimeoutMs;
186
- const timeoutMs = options?.timeoutMs ?? providerRetrySettings.timeoutMs ?? effectiveTimeoutMs;
187
- const websocketConnectTimeoutMs = options?.websocketConnectTimeoutMs ?? settingsManager.getWebSocketConnectTimeoutMs();
188
- return streamSimple(model, context, {
189
- ...options,
190
- apiKey: auth.apiKey,
191
- timeoutMs,
192
- websocketConnectTimeoutMs,
193
- maxRetries: options?.maxRetries ?? providerRetrySettings.maxRetries,
194
- maxRetryDelayMs: options?.maxRetryDelayMs ?? providerRetrySettings.maxRetryDelayMs,
195
- headers: mergeProviderAttributionHeaders(model, settingsManager, options?.sessionId, auth.headers, options?.headers),
196
- });
197
- },
279
+ streamFn: createAgentStreamFunction({
280
+ modelRegistry,
281
+ settingsManager,
282
+ providerNetworkBeforeRequest,
283
+ }),
198
284
  onPayload: async (payload, _model) => {
199
285
  const runner = extensionRunnerRef.current;
200
286
  if (!runner?.hasHandlers("before_provider_request")) {
@@ -253,6 +339,8 @@ export async function createAgentSession(options = {}) {
253
339
  allowedToolNames,
254
340
  excludedToolNames,
255
341
  extensionRunnerRef,
342
+ loadoutAccessPolicy: options.loadoutAccessPolicy,
343
+ bashSandboxPreflight: options.bashSandboxPreflight,
256
344
  sessionStartEvent: options.sessionStartEvent,
257
345
  });
258
346
  const extensionsResult = resourceLoader.getExtensions();