@oni.bot/core 0.8.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (689) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +59 -373
  3. package/dist/checkpointers/sqlite.d.ts.map +1 -1
  4. package/dist/checkpointers/sqlite.js +23 -8
  5. package/dist/checkpointers/sqlite.js.map +1 -1
  6. package/dist/cli/build.d.ts +11 -0
  7. package/dist/cli/build.d.ts.map +1 -0
  8. package/dist/cli/build.js +61 -0
  9. package/dist/cli/build.js.map +1 -0
  10. package/dist/cli/dev.d.ts +5 -0
  11. package/dist/cli/dev.d.ts.map +1 -0
  12. package/dist/cli/dev.js +54 -0
  13. package/dist/cli/dev.js.map +1 -0
  14. package/dist/cli/index.js +16 -27
  15. package/dist/cli/index.js.map +1 -1
  16. package/dist/cli/init.d.ts +2 -0
  17. package/dist/cli/init.d.ts.map +1 -1
  18. package/dist/cli/init.js +18 -1
  19. package/dist/cli/init.js.map +1 -1
  20. package/dist/cli/inspect.d.ts +5 -0
  21. package/dist/cli/inspect.d.ts.map +1 -0
  22. package/dist/cli/inspect.js +85 -0
  23. package/dist/cli/inspect.js.map +1 -0
  24. package/dist/cli/router.d.ts +14 -0
  25. package/dist/cli/router.d.ts.map +1 -0
  26. package/dist/cli/router.js +107 -0
  27. package/dist/cli/router.js.map +1 -0
  28. package/dist/cli/run.d.ts +5 -0
  29. package/dist/cli/run.d.ts.map +1 -0
  30. package/dist/cli/run.js +53 -0
  31. package/dist/cli/run.js.map +1 -0
  32. package/dist/cli/templates.d.ts +1 -0
  33. package/dist/cli/templates.d.ts.map +1 -1
  34. package/dist/cli/templates.js +106 -66
  35. package/dist/cli/templates.js.map +1 -1
  36. package/dist/cli/test.d.ts +3 -0
  37. package/dist/cli/test.d.ts.map +1 -0
  38. package/dist/cli/test.js +29 -0
  39. package/dist/cli/test.js.map +1 -0
  40. package/dist/config/index.d.ts +3 -0
  41. package/dist/config/index.d.ts.map +1 -0
  42. package/dist/config/index.js +3 -0
  43. package/dist/config/index.js.map +1 -0
  44. package/dist/config/loader.d.ts +37 -0
  45. package/dist/config/loader.d.ts.map +1 -0
  46. package/dist/config/loader.js +180 -0
  47. package/dist/config/loader.js.map +1 -0
  48. package/dist/config/types.d.ts +74 -0
  49. package/dist/config/types.d.ts.map +1 -0
  50. package/dist/config/types.js +5 -0
  51. package/dist/config/types.js.map +1 -0
  52. package/dist/coordination/pubsub.d.ts +4 -0
  53. package/dist/coordination/pubsub.d.ts.map +1 -1
  54. package/dist/coordination/pubsub.js +8 -0
  55. package/dist/coordination/pubsub.js.map +1 -1
  56. package/dist/coordination/request-reply.d.ts +3 -1
  57. package/dist/coordination/request-reply.d.ts.map +1 -1
  58. package/dist/coordination/request-reply.js +11 -2
  59. package/dist/coordination/request-reply.js.map +1 -1
  60. package/dist/errors.d.ts +7 -1
  61. package/dist/errors.d.ts.map +1 -1
  62. package/dist/errors.js +18 -3
  63. package/dist/errors.js.map +1 -1
  64. package/dist/events/bridge.d.ts +17 -0
  65. package/dist/events/bridge.d.ts.map +1 -0
  66. package/dist/events/bridge.js +67 -0
  67. package/dist/events/bridge.js.map +1 -0
  68. package/dist/events/bus.d.ts +9 -0
  69. package/dist/events/bus.d.ts.map +1 -1
  70. package/dist/events/bus.js +39 -4
  71. package/dist/events/bus.js.map +1 -1
  72. package/dist/events/index.d.ts +2 -1
  73. package/dist/events/index.d.ts.map +1 -1
  74. package/dist/events/index.js +2 -0
  75. package/dist/events/index.js.map +1 -1
  76. package/dist/events/types.d.ts +123 -1
  77. package/dist/events/types.d.ts.map +1 -1
  78. package/dist/graph.d.ts.map +1 -1
  79. package/dist/graph.js +16 -8
  80. package/dist/graph.js.map +1 -1
  81. package/dist/guardrails/types.d.ts +1 -1
  82. package/dist/guardrails/types.d.ts.map +1 -1
  83. package/dist/harness/agent-loop.d.ts.map +1 -1
  84. package/dist/harness/agent-loop.js +226 -29
  85. package/dist/harness/agent-loop.js.map +1 -1
  86. package/dist/harness/context-compactor.d.ts +21 -2
  87. package/dist/harness/context-compactor.d.ts.map +1 -1
  88. package/dist/harness/context-compactor.js +45 -6
  89. package/dist/harness/context-compactor.js.map +1 -1
  90. package/dist/harness/hooks-engine.d.ts +7 -1
  91. package/dist/harness/hooks-engine.d.ts.map +1 -1
  92. package/dist/harness/hooks-engine.js.map +1 -1
  93. package/dist/harness/index.d.ts +3 -2
  94. package/dist/harness/index.d.ts.map +1 -1
  95. package/dist/harness/index.js +2 -0
  96. package/dist/harness/index.js.map +1 -1
  97. package/dist/harness/skill-loader.d.ts +14 -1
  98. package/dist/harness/skill-loader.d.ts.map +1 -1
  99. package/dist/harness/skill-loader.js +33 -3
  100. package/dist/harness/skill-loader.js.map +1 -1
  101. package/dist/harness/types.d.ts +24 -2
  102. package/dist/harness/types.d.ts.map +1 -1
  103. package/dist/harness/types.js.map +1 -1
  104. package/dist/harness/validate-args.d.ts +16 -0
  105. package/dist/harness/validate-args.d.ts.map +1 -0
  106. package/dist/harness/validate-args.js +132 -0
  107. package/dist/harness/validate-args.js.map +1 -0
  108. package/dist/index.d.ts +3 -3
  109. package/dist/index.d.ts.map +1 -1
  110. package/dist/index.js +12 -12
  111. package/dist/index.js.map +1 -1
  112. package/dist/internal/timeout.d.ts +2 -0
  113. package/dist/internal/timeout.d.ts.map +1 -0
  114. package/dist/internal/timeout.js +16 -0
  115. package/dist/internal/timeout.js.map +1 -0
  116. package/dist/lsp/client.d.ts +70 -0
  117. package/dist/lsp/client.d.ts.map +1 -0
  118. package/dist/lsp/client.js +421 -0
  119. package/dist/lsp/client.js.map +1 -0
  120. package/dist/lsp/index.d.ts +77 -0
  121. package/dist/lsp/index.d.ts.map +1 -0
  122. package/dist/lsp/index.js +183 -0
  123. package/dist/lsp/index.js.map +1 -0
  124. package/dist/lsp/servers.d.ts +48 -0
  125. package/dist/lsp/servers.d.ts.map +1 -0
  126. package/dist/lsp/servers.js +108 -0
  127. package/dist/lsp/servers.js.map +1 -0
  128. package/dist/lsp/types.d.ts +142 -0
  129. package/dist/lsp/types.d.ts.map +1 -0
  130. package/dist/lsp/types.js +16 -0
  131. package/dist/lsp/types.js.map +1 -0
  132. package/dist/mcp/client.d.ts +56 -0
  133. package/dist/mcp/client.d.ts.map +1 -0
  134. package/dist/mcp/client.js +170 -0
  135. package/dist/mcp/client.js.map +1 -0
  136. package/dist/mcp/convert.d.ts +26 -0
  137. package/dist/mcp/convert.d.ts.map +1 -0
  138. package/dist/mcp/convert.js +56 -0
  139. package/dist/mcp/convert.js.map +1 -0
  140. package/dist/mcp/index.d.ts +21 -0
  141. package/dist/mcp/index.d.ts.map +1 -0
  142. package/dist/mcp/index.js +19 -0
  143. package/dist/mcp/index.js.map +1 -0
  144. package/dist/mcp/transport.d.ts +56 -0
  145. package/dist/mcp/transport.d.ts.map +1 -0
  146. package/dist/mcp/transport.js +204 -0
  147. package/dist/mcp/transport.js.map +1 -0
  148. package/dist/mcp/types.d.ts +96 -0
  149. package/dist/mcp/types.d.ts.map +1 -0
  150. package/dist/mcp/types.js +11 -0
  151. package/dist/mcp/types.js.map +1 -0
  152. package/dist/models/anthropic.d.ts.map +1 -1
  153. package/dist/models/anthropic.js +78 -41
  154. package/dist/models/anthropic.js.map +1 -1
  155. package/dist/models/google.d.ts.map +1 -1
  156. package/dist/models/google.js +47 -46
  157. package/dist/models/google.js.map +1 -1
  158. package/dist/models/http-error.d.ts +16 -0
  159. package/dist/models/http-error.d.ts.map +1 -0
  160. package/dist/models/http-error.js +67 -0
  161. package/dist/models/http-error.js.map +1 -0
  162. package/dist/models/index.d.ts +3 -0
  163. package/dist/models/index.d.ts.map +1 -1
  164. package/dist/models/index.js +2 -0
  165. package/dist/models/index.js.map +1 -1
  166. package/dist/models/ollama.d.ts.map +1 -1
  167. package/dist/models/ollama.js +4 -3
  168. package/dist/models/ollama.js.map +1 -1
  169. package/dist/models/openai.d.ts.map +1 -1
  170. package/dist/models/openai.js +36 -44
  171. package/dist/models/openai.js.map +1 -1
  172. package/dist/models/openrouter.d.ts +13 -0
  173. package/dist/models/openrouter.d.ts.map +1 -1
  174. package/dist/models/openrouter.js +86 -47
  175. package/dist/models/openrouter.js.map +1 -1
  176. package/dist/models/sse.d.ts +9 -0
  177. package/dist/models/sse.d.ts.map +1 -0
  178. package/dist/models/sse.js +45 -0
  179. package/dist/models/sse.js.map +1 -0
  180. package/dist/models/types.d.ts +10 -0
  181. package/dist/models/types.d.ts.map +1 -1
  182. package/dist/oni-code/agent-registry.d.ts +73 -0
  183. package/dist/oni-code/agent-registry.d.ts.map +1 -0
  184. package/dist/oni-code/agent-registry.js +151 -0
  185. package/dist/oni-code/agent-registry.js.map +1 -0
  186. package/dist/oni-code/bin.d.ts +18 -0
  187. package/dist/oni-code/bin.d.ts.map +1 -0
  188. package/dist/oni-code/bin.js +78 -0
  189. package/dist/oni-code/bin.js.map +1 -0
  190. package/dist/oni-code/change-tracking.d.ts +28 -0
  191. package/dist/oni-code/change-tracking.d.ts.map +1 -0
  192. package/dist/oni-code/change-tracking.js +77 -0
  193. package/dist/oni-code/change-tracking.js.map +1 -0
  194. package/dist/oni-code/cli.d.ts +6 -0
  195. package/dist/oni-code/cli.d.ts.map +1 -0
  196. package/dist/oni-code/cli.js +30 -0
  197. package/dist/oni-code/cli.js.map +1 -0
  198. package/dist/oni-code/conductor.d.ts +203 -0
  199. package/dist/oni-code/conductor.d.ts.map +1 -0
  200. package/dist/oni-code/conductor.js +1547 -0
  201. package/dist/oni-code/conductor.js.map +1 -0
  202. package/dist/oni-code/config.d.ts +130 -0
  203. package/dist/oni-code/config.d.ts.map +1 -0
  204. package/dist/oni-code/config.js +264 -0
  205. package/dist/oni-code/config.js.map +1 -0
  206. package/dist/oni-code/context-files.d.ts +22 -0
  207. package/dist/oni-code/context-files.d.ts.map +1 -0
  208. package/dist/oni-code/context-files.js +156 -0
  209. package/dist/oni-code/context-files.js.map +1 -0
  210. package/dist/oni-code/cron/humanize.d.ts +26 -0
  211. package/dist/oni-code/cron/humanize.d.ts.map +1 -0
  212. package/dist/oni-code/cron/humanize.js +83 -0
  213. package/dist/oni-code/cron/humanize.js.map +1 -0
  214. package/dist/oni-code/cron/index.d.ts +10 -0
  215. package/dist/oni-code/cron/index.d.ts.map +1 -0
  216. package/dist/oni-code/cron/index.js +7 -0
  217. package/dist/oni-code/cron/index.js.map +1 -0
  218. package/dist/oni-code/cron/matcher.d.ts +29 -0
  219. package/dist/oni-code/cron/matcher.d.ts.map +1 -0
  220. package/dist/oni-code/cron/matcher.js +73 -0
  221. package/dist/oni-code/cron/matcher.js.map +1 -0
  222. package/dist/oni-code/cron/parser.d.ts +27 -0
  223. package/dist/oni-code/cron/parser.d.ts.map +1 -0
  224. package/dist/oni-code/cron/parser.js +149 -0
  225. package/dist/oni-code/cron/parser.js.map +1 -0
  226. package/dist/oni-code/cron/persistence.d.ts +21 -0
  227. package/dist/oni-code/cron/persistence.d.ts.map +1 -0
  228. package/dist/oni-code/cron/persistence.js +58 -0
  229. package/dist/oni-code/cron/persistence.js.map +1 -0
  230. package/dist/oni-code/cron/scheduler.d.ts +64 -0
  231. package/dist/oni-code/cron/scheduler.d.ts.map +1 -0
  232. package/dist/oni-code/cron/scheduler.js +188 -0
  233. package/dist/oni-code/cron/scheduler.js.map +1 -0
  234. package/dist/oni-code/cron/store.d.ts +46 -0
  235. package/dist/oni-code/cron/store.d.ts.map +1 -0
  236. package/dist/oni-code/cron/store.js +68 -0
  237. package/dist/oni-code/cron/store.js.map +1 -0
  238. package/dist/oni-code/env.d.ts +17 -0
  239. package/dist/oni-code/env.d.ts.map +1 -0
  240. package/dist/oni-code/env.js +51 -0
  241. package/dist/oni-code/env.js.map +1 -0
  242. package/dist/oni-code/file-reader.d.ts +28 -0
  243. package/dist/oni-code/file-reader.d.ts.map +1 -0
  244. package/dist/oni-code/file-reader.js +368 -0
  245. package/dist/oni-code/file-reader.js.map +1 -0
  246. package/dist/oni-code/file-watcher.d.ts +66 -0
  247. package/dist/oni-code/file-watcher.d.ts.map +1 -0
  248. package/dist/oni-code/file-watcher.js +167 -0
  249. package/dist/oni-code/file-watcher.js.map +1 -0
  250. package/dist/oni-code/loop-detector.d.ts +64 -0
  251. package/dist/oni-code/loop-detector.d.ts.map +1 -0
  252. package/dist/oni-code/loop-detector.js +163 -0
  253. package/dist/oni-code/loop-detector.js.map +1 -0
  254. package/dist/oni-code/permissions.d.ts +43 -0
  255. package/dist/oni-code/permissions.d.ts.map +1 -0
  256. package/dist/oni-code/permissions.js +98 -0
  257. package/dist/oni-code/permissions.js.map +1 -0
  258. package/dist/oni-code/planner.d.ts +26 -0
  259. package/dist/oni-code/planner.d.ts.map +1 -0
  260. package/dist/oni-code/planner.js +86 -0
  261. package/dist/oni-code/planner.js.map +1 -0
  262. package/dist/oni-code/plugin-loader.d.ts +103 -0
  263. package/dist/oni-code/plugin-loader.d.ts.map +1 -0
  264. package/dist/oni-code/plugin-loader.js +171 -0
  265. package/dist/oni-code/plugin-loader.js.map +1 -0
  266. package/dist/oni-code/process-tree.d.ts +44 -0
  267. package/dist/oni-code/process-tree.d.ts.map +1 -0
  268. package/dist/oni-code/process-tree.js +107 -0
  269. package/dist/oni-code/process-tree.js.map +1 -0
  270. package/dist/oni-code/progress-tracker.d.ts +40 -0
  271. package/dist/oni-code/progress-tracker.d.ts.map +1 -0
  272. package/dist/oni-code/progress-tracker.js +375 -0
  273. package/dist/oni-code/progress-tracker.js.map +1 -0
  274. package/dist/oni-code/scheduler.d.ts +56 -0
  275. package/dist/oni-code/scheduler.d.ts.map +1 -0
  276. package/dist/oni-code/scheduler.js +105 -0
  277. package/dist/oni-code/scheduler.js.map +1 -0
  278. package/dist/oni-code/session-fork.d.ts +146 -0
  279. package/dist/oni-code/session-fork.d.ts.map +1 -0
  280. package/dist/oni-code/session-fork.js +238 -0
  281. package/dist/oni-code/session-fork.js.map +1 -0
  282. package/dist/oni-code/session-stats.d.ts +72 -0
  283. package/dist/oni-code/session-stats.d.ts.map +1 -0
  284. package/dist/oni-code/session-stats.js +141 -0
  285. package/dist/oni-code/session-stats.js.map +1 -0
  286. package/dist/oni-code/session-title.d.ts +25 -0
  287. package/dist/oni-code/session-title.d.ts.map +1 -0
  288. package/dist/oni-code/session-title.js +67 -0
  289. package/dist/oni-code/session-title.js.map +1 -0
  290. package/dist/oni-code/shell-parser.d.ts +112 -0
  291. package/dist/oni-code/shell-parser.d.ts.map +1 -0
  292. package/dist/oni-code/shell-parser.js +657 -0
  293. package/dist/oni-code/shell-parser.js.map +1 -0
  294. package/dist/oni-code/summarizer.d.ts +27 -0
  295. package/dist/oni-code/summarizer.d.ts.map +1 -0
  296. package/dist/oni-code/summarizer.js +70 -0
  297. package/dist/oni-code/summarizer.js.map +1 -0
  298. package/dist/oni-code/swarm-checkpoint.d.ts +52 -0
  299. package/dist/oni-code/swarm-checkpoint.d.ts.map +1 -0
  300. package/dist/oni-code/swarm-checkpoint.js +71 -0
  301. package/dist/oni-code/swarm-checkpoint.js.map +1 -0
  302. package/dist/oni-code/swarm-runner.d.ts +173 -0
  303. package/dist/oni-code/swarm-runner.d.ts.map +1 -0
  304. package/dist/oni-code/swarm-runner.js +873 -0
  305. package/dist/oni-code/swarm-runner.js.map +1 -0
  306. package/dist/oni-code/system-prompt.d.ts +13 -0
  307. package/dist/oni-code/system-prompt.d.ts.map +1 -0
  308. package/dist/oni-code/system-prompt.js +64 -0
  309. package/dist/oni-code/system-prompt.js.map +1 -0
  310. package/dist/oni-code/task-evaluator.d.ts +73 -0
  311. package/dist/oni-code/task-evaluator.d.ts.map +1 -0
  312. package/dist/oni-code/task-evaluator.js +172 -0
  313. package/dist/oni-code/task-evaluator.js.map +1 -0
  314. package/dist/oni-code/tools/batch.d.ts +12 -0
  315. package/dist/oni-code/tools/batch.d.ts.map +1 -0
  316. package/dist/oni-code/tools/batch.js +116 -0
  317. package/dist/oni-code/tools/batch.js.map +1 -0
  318. package/dist/oni-code/tools/coding.d.ts +10 -0
  319. package/dist/oni-code/tools/coding.d.ts.map +1 -0
  320. package/dist/oni-code/tools/coding.js +557 -0
  321. package/dist/oni-code/tools/coding.js.map +1 -0
  322. package/dist/oni-code/tools/cron.d.ts +4 -0
  323. package/dist/oni-code/tools/cron.d.ts.map +1 -0
  324. package/dist/oni-code/tools/cron.js +120 -0
  325. package/dist/oni-code/tools/cron.js.map +1 -0
  326. package/dist/oni-code/tools/custom.d.ts +43 -0
  327. package/dist/oni-code/tools/custom.d.ts.map +1 -0
  328. package/dist/oni-code/tools/custom.js +115 -0
  329. package/dist/oni-code/tools/custom.js.map +1 -0
  330. package/dist/oni-code/tools/patch.d.ts +58 -0
  331. package/dist/oni-code/tools/patch.d.ts.map +1 -0
  332. package/dist/oni-code/tools/patch.js +247 -0
  333. package/dist/oni-code/tools/patch.js.map +1 -0
  334. package/dist/oni-code/tools/plan.d.ts +17 -0
  335. package/dist/oni-code/tools/plan.d.ts.map +1 -0
  336. package/dist/oni-code/tools/plan.js +48 -0
  337. package/dist/oni-code/tools/plan.js.map +1 -0
  338. package/dist/oni-code/tools/question.d.ts +17 -0
  339. package/dist/oni-code/tools/question.d.ts.map +1 -0
  340. package/dist/oni-code/tools/question.js +46 -0
  341. package/dist/oni-code/tools/question.js.map +1 -0
  342. package/dist/oni-code/tools/skill.d.ts +36 -0
  343. package/dist/oni-code/tools/skill.d.ts.map +1 -0
  344. package/dist/oni-code/tools/skill.js +132 -0
  345. package/dist/oni-code/tools/skill.js.map +1 -0
  346. package/dist/oni-code/tools/spawn-agents.d.ts +37 -0
  347. package/dist/oni-code/tools/spawn-agents.d.ts.map +1 -0
  348. package/dist/oni-code/tools/spawn-agents.js +91 -0
  349. package/dist/oni-code/tools/spawn-agents.js.map +1 -0
  350. package/dist/oni-code/tools/spawn-swarm.d.ts +70 -0
  351. package/dist/oni-code/tools/spawn-swarm.d.ts.map +1 -0
  352. package/dist/oni-code/tools/spawn-swarm.js +129 -0
  353. package/dist/oni-code/tools/spawn-swarm.js.map +1 -0
  354. package/dist/oni-code/tools/web.d.ts +11 -0
  355. package/dist/oni-code/tools/web.d.ts.map +1 -0
  356. package/dist/oni-code/tools/web.js +375 -0
  357. package/dist/oni-code/tools/web.js.map +1 -0
  358. package/dist/oni-code/topology-agent-builder.d.ts +22 -0
  359. package/dist/oni-code/topology-agent-builder.d.ts.map +1 -0
  360. package/dist/oni-code/topology-agent-builder.js +220 -0
  361. package/dist/oni-code/topology-agent-builder.js.map +1 -0
  362. package/dist/oni-code/topology-selector.d.ts +85 -0
  363. package/dist/oni-code/topology-selector.d.ts.map +1 -0
  364. package/dist/oni-code/topology-selector.js +338 -0
  365. package/dist/oni-code/topology-selector.js.map +1 -0
  366. package/dist/oni-code/ui/App.d.ts +10 -0
  367. package/dist/oni-code/ui/App.d.ts.map +1 -0
  368. package/dist/oni-code/ui/App.js +395 -0
  369. package/dist/oni-code/ui/App.js.map +1 -0
  370. package/dist/oni-code/ui/FooterPanel.d.ts +16 -0
  371. package/dist/oni-code/ui/FooterPanel.d.ts.map +1 -0
  372. package/dist/oni-code/ui/FooterPanel.js +56 -0
  373. package/dist/oni-code/ui/FooterPanel.js.map +1 -0
  374. package/dist/oni-code/ui/Header.d.ts +21 -0
  375. package/dist/oni-code/ui/Header.d.ts.map +1 -0
  376. package/dist/oni-code/ui/Header.js +105 -0
  377. package/dist/oni-code/ui/Header.js.map +1 -0
  378. package/dist/oni-code/ui/InputArea.d.ts +11 -0
  379. package/dist/oni-code/ui/InputArea.d.ts.map +1 -0
  380. package/dist/oni-code/ui/InputArea.js +82 -0
  381. package/dist/oni-code/ui/InputArea.js.map +1 -0
  382. package/dist/oni-code/ui/MessageBlock.d.ts +11 -0
  383. package/dist/oni-code/ui/MessageBlock.d.ts.map +1 -0
  384. package/dist/oni-code/ui/MessageBlock.js +103 -0
  385. package/dist/oni-code/ui/MessageBlock.js.map +1 -0
  386. package/dist/oni-code/ui/OutputPane.d.ts +12 -0
  387. package/dist/oni-code/ui/OutputPane.d.ts.map +1 -0
  388. package/dist/oni-code/ui/OutputPane.js +8 -0
  389. package/dist/oni-code/ui/OutputPane.js.map +1 -0
  390. package/dist/oni-code/ui/PermissionPrompt.d.ts +11 -0
  391. package/dist/oni-code/ui/PermissionPrompt.d.ts.map +1 -0
  392. package/dist/oni-code/ui/PermissionPrompt.js +48 -0
  393. package/dist/oni-code/ui/PermissionPrompt.js.map +1 -0
  394. package/dist/oni-code/ui/QuestionPrompt.d.ts +8 -0
  395. package/dist/oni-code/ui/QuestionPrompt.d.ts.map +1 -0
  396. package/dist/oni-code/ui/QuestionPrompt.js +9 -0
  397. package/dist/oni-code/ui/QuestionPrompt.js.map +1 -0
  398. package/dist/oni-code/ui/StatusLine.d.ts +14 -0
  399. package/dist/oni-code/ui/StatusLine.d.ts.map +1 -0
  400. package/dist/oni-code/ui/StatusLine.js +23 -0
  401. package/dist/oni-code/ui/StatusLine.js.map +1 -0
  402. package/dist/oni-code/ui/SwarmPanel.d.ts +9 -0
  403. package/dist/oni-code/ui/SwarmPanel.d.ts.map +1 -0
  404. package/dist/oni-code/ui/SwarmPanel.js +52 -0
  405. package/dist/oni-code/ui/SwarmPanel.js.map +1 -0
  406. package/dist/oni-code/ui/ToolCallBlock.d.ts +10 -0
  407. package/dist/oni-code/ui/ToolCallBlock.d.ts.map +1 -0
  408. package/dist/oni-code/ui/ToolCallBlock.js +21 -0
  409. package/dist/oni-code/ui/ToolCallBlock.js.map +1 -0
  410. package/dist/oni-code/ui/Toolbar.d.ts +8 -0
  411. package/dist/oni-code/ui/Toolbar.d.ts.map +1 -0
  412. package/dist/oni-code/ui/Toolbar.js +11 -0
  413. package/dist/oni-code/ui/Toolbar.js.map +1 -0
  414. package/dist/oni-code/ui/WelcomeBanner.d.ts +12 -0
  415. package/dist/oni-code/ui/WelcomeBanner.d.ts.map +1 -0
  416. package/dist/oni-code/ui/WelcomeBanner.js +24 -0
  417. package/dist/oni-code/ui/WelcomeBanner.js.map +1 -0
  418. package/dist/oni-code/ui/activity.d.ts +15 -0
  419. package/dist/oni-code/ui/activity.d.ts.map +1 -0
  420. package/dist/oni-code/ui/activity.js +252 -0
  421. package/dist/oni-code/ui/activity.js.map +1 -0
  422. package/dist/oni-code/ui/banner.d.ts +16 -0
  423. package/dist/oni-code/ui/banner.d.ts.map +1 -0
  424. package/dist/oni-code/ui/banner.js +132 -0
  425. package/dist/oni-code/ui/banner.js.map +1 -0
  426. package/dist/oni-code/ui/command-menu.d.ts +7 -0
  427. package/dist/oni-code/ui/command-menu.d.ts.map +1 -0
  428. package/dist/oni-code/ui/command-menu.js +20 -0
  429. package/dist/oni-code/ui/command-menu.js.map +1 -0
  430. package/dist/oni-code/ui/diff.d.ts +17 -0
  431. package/dist/oni-code/ui/diff.d.ts.map +1 -0
  432. package/dist/oni-code/ui/diff.js +37 -0
  433. package/dist/oni-code/ui/diff.js.map +1 -0
  434. package/dist/oni-code/ui/format.d.ts +41 -0
  435. package/dist/oni-code/ui/format.d.ts.map +1 -0
  436. package/dist/oni-code/ui/format.js +223 -0
  437. package/dist/oni-code/ui/format.js.map +1 -0
  438. package/dist/oni-code/ui/input.d.ts +28 -0
  439. package/dist/oni-code/ui/input.d.ts.map +1 -0
  440. package/dist/oni-code/ui/input.js +216 -0
  441. package/dist/oni-code/ui/input.js.map +1 -0
  442. package/dist/oni-code/ui/insights.d.ts +39 -0
  443. package/dist/oni-code/ui/insights.d.ts.map +1 -0
  444. package/dist/oni-code/ui/insights.js +193 -0
  445. package/dist/oni-code/ui/insights.js.map +1 -0
  446. package/dist/oni-code/ui/markdown.d.ts +9 -0
  447. package/dist/oni-code/ui/markdown.d.ts.map +1 -0
  448. package/dist/oni-code/ui/markdown.js +44 -0
  449. package/dist/oni-code/ui/markdown.js.map +1 -0
  450. package/dist/oni-code/ui/panels.d.ts +39 -0
  451. package/dist/oni-code/ui/panels.d.ts.map +1 -0
  452. package/dist/oni-code/ui/panels.js +209 -0
  453. package/dist/oni-code/ui/panels.js.map +1 -0
  454. package/dist/oni-code/ui/paste.d.ts +17 -0
  455. package/dist/oni-code/ui/paste.d.ts.map +1 -0
  456. package/dist/oni-code/ui/paste.js +45 -0
  457. package/dist/oni-code/ui/paste.js.map +1 -0
  458. package/dist/oni-code/ui/raw-spinner.d.ts +37 -0
  459. package/dist/oni-code/ui/raw-spinner.d.ts.map +1 -0
  460. package/dist/oni-code/ui/raw-spinner.js +121 -0
  461. package/dist/oni-code/ui/raw-spinner.js.map +1 -0
  462. package/dist/oni-code/ui/session.d.ts +44 -0
  463. package/dist/oni-code/ui/session.d.ts.map +1 -0
  464. package/dist/oni-code/ui/session.js +93 -0
  465. package/dist/oni-code/ui/session.js.map +1 -0
  466. package/dist/oni-code/ui/spinner.d.ts +7 -0
  467. package/dist/oni-code/ui/spinner.d.ts.map +1 -0
  468. package/dist/oni-code/ui/spinner.js +20 -0
  469. package/dist/oni-code/ui/spinner.js.map +1 -0
  470. package/dist/oni-code/ui/swarm-activity.d.ts +50 -0
  471. package/dist/oni-code/ui/swarm-activity.d.ts.map +1 -0
  472. package/dist/oni-code/ui/swarm-activity.js +233 -0
  473. package/dist/oni-code/ui/swarm-activity.js.map +1 -0
  474. package/dist/oni-code/ui/terminal-size.d.ts +18 -0
  475. package/dist/oni-code/ui/terminal-size.d.ts.map +1 -0
  476. package/dist/oni-code/ui/terminal-size.js +45 -0
  477. package/dist/oni-code/ui/terminal-size.js.map +1 -0
  478. package/dist/oni-code/ui/theme.d.ts +82 -0
  479. package/dist/oni-code/ui/theme.d.ts.map +1 -0
  480. package/dist/oni-code/ui/theme.js +101 -0
  481. package/dist/oni-code/ui/theme.js.map +1 -0
  482. package/dist/oni-code/ui/tool-utils.d.ts +10 -0
  483. package/dist/oni-code/ui/tool-utils.d.ts.map +1 -0
  484. package/dist/oni-code/ui/tool-utils.js +82 -0
  485. package/dist/oni-code/ui/tool-utils.js.map +1 -0
  486. package/dist/oni-code/ui/useTerminalSize.d.ts +3 -0
  487. package/dist/oni-code/ui/useTerminalSize.d.ts.map +1 -0
  488. package/dist/oni-code/ui/useTerminalSize.js +16 -0
  489. package/dist/oni-code/ui/useTerminalSize.js.map +1 -0
  490. package/dist/oni-code/workspace/change-tracker.d.ts +18 -0
  491. package/dist/oni-code/workspace/change-tracker.d.ts.map +1 -0
  492. package/dist/oni-code/workspace/change-tracker.js +67 -0
  493. package/dist/oni-code/workspace/change-tracker.js.map +1 -0
  494. package/dist/oni-code/workspace/conflict-detector.d.ts +12 -0
  495. package/dist/oni-code/workspace/conflict-detector.d.ts.map +1 -0
  496. package/dist/oni-code/workspace/conflict-detector.js +24 -0
  497. package/dist/oni-code/workspace/conflict-detector.js.map +1 -0
  498. package/dist/oni-code/workspace/file-snapshots.d.ts +39 -0
  499. package/dist/oni-code/workspace/file-snapshots.d.ts.map +1 -0
  500. package/dist/oni-code/workspace/file-snapshots.js +77 -0
  501. package/dist/oni-code/workspace/file-snapshots.js.map +1 -0
  502. package/dist/oni-code/workspace/index.d.ts +5 -0
  503. package/dist/oni-code/workspace/index.d.ts.map +1 -0
  504. package/dist/oni-code/workspace/index.js +5 -0
  505. package/dist/oni-code/workspace/index.js.map +1 -0
  506. package/dist/oni-code/workspace/project-map.d.ts +14 -0
  507. package/dist/oni-code/workspace/project-map.d.ts.map +1 -0
  508. package/dist/oni-code/workspace/project-map.js +91 -0
  509. package/dist/oni-code/workspace/project-map.js.map +1 -0
  510. package/dist/pregel.d.ts +4 -0
  511. package/dist/pregel.d.ts.map +1 -1
  512. package/dist/pregel.js +121 -54
  513. package/dist/pregel.js.map +1 -1
  514. package/dist/retry.d.ts.map +1 -1
  515. package/dist/retry.js +10 -3
  516. package/dist/retry.js.map +1 -1
  517. package/dist/sentinel/config/index.d.ts +2 -0
  518. package/dist/sentinel/config/index.d.ts.map +1 -0
  519. package/dist/sentinel/config/index.js +2 -0
  520. package/dist/sentinel/config/index.js.map +1 -0
  521. package/dist/sentinel/config/schema.d.ts +4 -0
  522. package/dist/sentinel/config/schema.d.ts.map +1 -0
  523. package/dist/sentinel/config/schema.js +42 -0
  524. package/dist/sentinel/config/schema.js.map +1 -0
  525. package/dist/sentinel/debate/index.d.ts +6 -0
  526. package/dist/sentinel/debate/index.d.ts.map +1 -0
  527. package/dist/sentinel/debate/index.js +64 -0
  528. package/dist/sentinel/debate/index.js.map +1 -0
  529. package/dist/sentinel/debate/prompts.d.ts +4 -0
  530. package/dist/sentinel/debate/prompts.d.ts.map +1 -0
  531. package/dist/sentinel/debate/prompts.js +13 -0
  532. package/dist/sentinel/debate/prompts.js.map +1 -0
  533. package/dist/sentinel/fix/index.d.ts +6 -0
  534. package/dist/sentinel/fix/index.d.ts.map +1 -0
  535. package/dist/sentinel/fix/index.js +27 -0
  536. package/dist/sentinel/fix/index.js.map +1 -0
  537. package/dist/sentinel/fix/strategies.d.ts +9 -0
  538. package/dist/sentinel/fix/strategies.d.ts.map +1 -0
  539. package/dist/sentinel/fix/strategies.js +40 -0
  540. package/dist/sentinel/fix/strategies.js.map +1 -0
  541. package/dist/sentinel/index.d.ts +14 -0
  542. package/dist/sentinel/index.d.ts.map +1 -0
  543. package/dist/sentinel/index.js +22 -0
  544. package/dist/sentinel/index.js.map +1 -0
  545. package/dist/sentinel/integrations/cli.d.ts +10 -0
  546. package/dist/sentinel/integrations/cli.d.ts.map +1 -0
  547. package/dist/sentinel/integrations/cli.js +24 -0
  548. package/dist/sentinel/integrations/cli.js.map +1 -0
  549. package/dist/sentinel/integrations/index.d.ts +2 -0
  550. package/dist/sentinel/integrations/index.d.ts.map +1 -0
  551. package/dist/sentinel/integrations/index.js +2 -0
  552. package/dist/sentinel/integrations/index.js.map +1 -0
  553. package/dist/sentinel/memory/index.d.ts +16 -0
  554. package/dist/sentinel/memory/index.d.ts.map +1 -0
  555. package/dist/sentinel/memory/index.js +60 -0
  556. package/dist/sentinel/memory/index.js.map +1 -0
  557. package/dist/sentinel/report/console.d.ts +3 -0
  558. package/dist/sentinel/report/console.d.ts.map +1 -0
  559. package/dist/sentinel/report/console.js +27 -0
  560. package/dist/sentinel/report/console.js.map +1 -0
  561. package/dist/sentinel/report/github.d.ts +3 -0
  562. package/dist/sentinel/report/github.d.ts.map +1 -0
  563. package/dist/sentinel/report/github.js +36 -0
  564. package/dist/sentinel/report/github.js.map +1 -0
  565. package/dist/sentinel/report/index.d.ts +6 -0
  566. package/dist/sentinel/report/index.d.ts.map +1 -0
  567. package/dist/sentinel/report/index.js +15 -0
  568. package/dist/sentinel/report/index.js.map +1 -0
  569. package/dist/sentinel/report/sarif.d.ts +3 -0
  570. package/dist/sentinel/report/sarif.d.ts.map +1 -0
  571. package/dist/sentinel/report/sarif.js +29 -0
  572. package/dist/sentinel/report/sarif.js.map +1 -0
  573. package/dist/sentinel/sentinel.d.ts +17 -0
  574. package/dist/sentinel/sentinel.d.ts.map +1 -0
  575. package/dist/sentinel/sentinel.js +111 -0
  576. package/dist/sentinel/sentinel.js.map +1 -0
  577. package/dist/sentinel/swarm/agents.d.ts +6 -0
  578. package/dist/sentinel/swarm/agents.d.ts.map +1 -0
  579. package/dist/sentinel/swarm/agents.js +36 -0
  580. package/dist/sentinel/swarm/agents.js.map +1 -0
  581. package/dist/sentinel/swarm/index.d.ts +8 -0
  582. package/dist/sentinel/swarm/index.d.ts.map +1 -0
  583. package/dist/sentinel/swarm/index.js +74 -0
  584. package/dist/sentinel/swarm/index.js.map +1 -0
  585. package/dist/sentinel/swarm/prompts.d.ts +2 -0
  586. package/dist/sentinel/swarm/prompts.d.ts.map +1 -0
  587. package/dist/sentinel/swarm/prompts.js +24 -0
  588. package/dist/sentinel/swarm/prompts.js.map +1 -0
  589. package/dist/sentinel/swarm/topology.d.ts +10 -0
  590. package/dist/sentinel/swarm/topology.d.ts.map +1 -0
  591. package/dist/sentinel/swarm/topology.js +38 -0
  592. package/dist/sentinel/swarm/topology.js.map +1 -0
  593. package/dist/sentinel/triage/analyzers/complexity-analyzer.d.ts +7 -0
  594. package/dist/sentinel/triage/analyzers/complexity-analyzer.d.ts.map +1 -0
  595. package/dist/sentinel/triage/analyzers/complexity-analyzer.js +94 -0
  596. package/dist/sentinel/triage/analyzers/complexity-analyzer.js.map +1 -0
  597. package/dist/sentinel/triage/analyzers/custom-analyzer.d.ts +19 -0
  598. package/dist/sentinel/triage/analyzers/custom-analyzer.d.ts.map +1 -0
  599. package/dist/sentinel/triage/analyzers/custom-analyzer.js +268 -0
  600. package/dist/sentinel/triage/analyzers/custom-analyzer.js.map +1 -0
  601. package/dist/sentinel/triage/analyzers/dependency-analyzer.d.ts +26 -0
  602. package/dist/sentinel/triage/analyzers/dependency-analyzer.d.ts.map +1 -0
  603. package/dist/sentinel/triage/analyzers/dependency-analyzer.js +220 -0
  604. package/dist/sentinel/triage/analyzers/dependency-analyzer.js.map +1 -0
  605. package/dist/sentinel/triage/analyzers/diff-analyzer.d.ts +12 -0
  606. package/dist/sentinel/triage/analyzers/diff-analyzer.d.ts.map +1 -0
  607. package/dist/sentinel/triage/analyzers/diff-analyzer.js +19 -0
  608. package/dist/sentinel/triage/analyzers/diff-analyzer.js.map +1 -0
  609. package/dist/sentinel/triage/analyzers/index.d.ts +14 -0
  610. package/dist/sentinel/triage/analyzers/index.d.ts.map +1 -0
  611. package/dist/sentinel/triage/analyzers/index.js +25 -0
  612. package/dist/sentinel/triage/analyzers/index.js.map +1 -0
  613. package/dist/sentinel/triage/analyzers/pattern-analyzer.d.ts +7 -0
  614. package/dist/sentinel/triage/analyzers/pattern-analyzer.d.ts.map +1 -0
  615. package/dist/sentinel/triage/analyzers/pattern-analyzer.js +180 -0
  616. package/dist/sentinel/triage/analyzers/pattern-analyzer.js.map +1 -0
  617. package/dist/sentinel/triage/analyzers/security-analyzer.d.ts +7 -0
  618. package/dist/sentinel/triage/analyzers/security-analyzer.d.ts.map +1 -0
  619. package/dist/sentinel/triage/analyzers/security-analyzer.js +96 -0
  620. package/dist/sentinel/triage/analyzers/security-analyzer.js.map +1 -0
  621. package/dist/sentinel/triage/analyzers/ts-parser.d.ts +71 -0
  622. package/dist/sentinel/triage/analyzers/ts-parser.d.ts.map +1 -0
  623. package/dist/sentinel/triage/analyzers/ts-parser.js +323 -0
  624. package/dist/sentinel/triage/analyzers/ts-parser.js.map +1 -0
  625. package/dist/sentinel/triage/analyzers/typescript-analyzer.d.ts +7 -0
  626. package/dist/sentinel/triage/analyzers/typescript-analyzer.d.ts.map +1 -0
  627. package/dist/sentinel/triage/analyzers/typescript-analyzer.js +68 -0
  628. package/dist/sentinel/triage/analyzers/typescript-analyzer.js.map +1 -0
  629. package/dist/sentinel/triage/index.d.ts +10 -0
  630. package/dist/sentinel/triage/index.d.ts.map +1 -0
  631. package/dist/sentinel/triage/index.js +39 -0
  632. package/dist/sentinel/triage/index.js.map +1 -0
  633. package/dist/sentinel/triage/scorer.d.ts +9 -0
  634. package/dist/sentinel/triage/scorer.d.ts.map +1 -0
  635. package/dist/sentinel/triage/scorer.js +28 -0
  636. package/dist/sentinel/triage/scorer.js.map +1 -0
  637. package/dist/sentinel/types.d.ts +125 -0
  638. package/dist/sentinel/types.d.ts.map +1 -0
  639. package/dist/sentinel/types.js +6 -0
  640. package/dist/sentinel/types.js.map +1 -0
  641. package/dist/store/index.d.ts +3 -0
  642. package/dist/store/index.d.ts.map +1 -1
  643. package/dist/store/index.js +17 -0
  644. package/dist/store/index.js.map +1 -1
  645. package/dist/streaming.d.ts +4 -1
  646. package/dist/streaming.d.ts.map +1 -1
  647. package/dist/streaming.js +21 -7
  648. package/dist/streaming.js.map +1 -1
  649. package/dist/swarm/graph.d.ts +81 -2
  650. package/dist/swarm/graph.d.ts.map +1 -1
  651. package/dist/swarm/graph.js +517 -32
  652. package/dist/swarm/graph.js.map +1 -1
  653. package/dist/swarm/index.d.ts +10 -2
  654. package/dist/swarm/index.d.ts.map +1 -1
  655. package/dist/swarm/index.js +6 -1
  656. package/dist/swarm/index.js.map +1 -1
  657. package/dist/swarm/mermaid.d.ts +10 -0
  658. package/dist/swarm/mermaid.d.ts.map +1 -0
  659. package/dist/swarm/mermaid.js +64 -0
  660. package/dist/swarm/mermaid.js.map +1 -0
  661. package/dist/swarm/pool.d.ts +9 -1
  662. package/dist/swarm/pool.d.ts.map +1 -1
  663. package/dist/swarm/pool.js +58 -10
  664. package/dist/swarm/pool.js.map +1 -1
  665. package/dist/swarm/registry.d.ts +11 -1
  666. package/dist/swarm/registry.d.ts.map +1 -1
  667. package/dist/swarm/registry.js +17 -3
  668. package/dist/swarm/registry.js.map +1 -1
  669. package/dist/swarm/scaling.d.ts +95 -0
  670. package/dist/swarm/scaling.d.ts.map +1 -0
  671. package/dist/swarm/scaling.js +214 -0
  672. package/dist/swarm/scaling.js.map +1 -0
  673. package/dist/swarm/snapshot.d.ts +51 -0
  674. package/dist/swarm/snapshot.d.ts.map +1 -0
  675. package/dist/swarm/snapshot.js +115 -0
  676. package/dist/swarm/snapshot.js.map +1 -0
  677. package/dist/swarm/supervisor.d.ts.map +1 -1
  678. package/dist/swarm/supervisor.js +82 -0
  679. package/dist/swarm/supervisor.js.map +1 -1
  680. package/dist/swarm/tracer.d.ts +57 -0
  681. package/dist/swarm/tracer.d.ts.map +1 -0
  682. package/dist/swarm/tracer.js +138 -0
  683. package/dist/swarm/tracer.js.map +1 -0
  684. package/dist/swarm/types.d.ts +23 -1
  685. package/dist/swarm/types.d.ts.map +1 -1
  686. package/dist/swarm/types.js.map +1 -1
  687. package/dist/tools/types.d.ts +2 -0
  688. package/dist/tools/types.d.ts.map +1 -1
  689. package/package.json +160 -141
@@ -0,0 +1,120 @@
1
+ import { defineTool } from "../../tools/define.js";
2
+ import { intervalToCron } from "../cron/parser.js";
3
+ // ── Tool Factory ─────────────────────────────────────────────
4
+ export function makeCronTools(scheduler) {
5
+ // ── cron_create ──────────────────────────────────────────
6
+ const cronCreate = defineTool({
7
+ name: "cron_create",
8
+ description: "Schedule a recurring or one-shot prompt. Accepts a cron expression " +
9
+ "or a simple interval (5m, 2h, 3d). Returns a job ID for cancellation.",
10
+ parallelSafe: true,
11
+ schema: {
12
+ type: "object",
13
+ properties: {
14
+ cron: {
15
+ type: "string",
16
+ description: "5-field cron expression (e.g. '*/5 * * * *') OR simple interval (e.g. '5m', '2h', '3d')",
17
+ },
18
+ prompt: {
19
+ type: "string",
20
+ description: "The prompt/task to execute on each fire",
21
+ },
22
+ recurring: {
23
+ type: "boolean",
24
+ description: "If true (default), reschedule after each fire. If false, fire once and delete.",
25
+ },
26
+ },
27
+ required: ["cron", "prompt"],
28
+ },
29
+ execute: (input) => {
30
+ if (!input.cron || typeof input.cron !== "string") {
31
+ return { error: "Missing required parameter: cron (string)" };
32
+ }
33
+ if (!input.prompt || typeof input.prompt !== "string") {
34
+ return { error: "Missing required parameter: prompt (string)" };
35
+ }
36
+ // Try to parse as simple interval first, fall back to raw cron
37
+ let cronExpr;
38
+ try {
39
+ cronExpr = intervalToCron(input.cron);
40
+ }
41
+ catch {
42
+ // Not a simple interval — validate as cron expression
43
+ const fields = input.cron.trim().split(/\s+/);
44
+ if (fields.length !== 5) {
45
+ return { error: `Invalid cron expression: expected 5 fields, got ${fields.length}. Examples: '*/5 * * * *' (every 5 min), '0 9 * * *' (daily at 9am)` };
46
+ }
47
+ cronExpr = input.cron.trim();
48
+ }
49
+ try {
50
+ const job = scheduler.create({
51
+ cron: cronExpr,
52
+ prompt: input.prompt,
53
+ recurring: input.recurring,
54
+ });
55
+ return {
56
+ id: job.id,
57
+ cron: job.cron,
58
+ humanSchedule: job.humanSchedule,
59
+ recurring: job.recurring,
60
+ nextFireTime: new Date(job.nextFireTime).toISOString(),
61
+ };
62
+ }
63
+ catch (e) {
64
+ return { error: e instanceof Error ? e.message : String(e) };
65
+ }
66
+ },
67
+ });
68
+ // ── cron_delete ──────────────────────────────────────────
69
+ const cronDelete = defineTool({
70
+ name: "cron_delete",
71
+ description: "Cancel a scheduled job by its ID.",
72
+ parallelSafe: true,
73
+ schema: {
74
+ type: "object",
75
+ properties: {
76
+ id: { type: "string", description: "Job ID to cancel" },
77
+ },
78
+ required: ["id"],
79
+ },
80
+ execute: (input) => {
81
+ if (!input.id || typeof input.id !== "string") {
82
+ return { error: "Missing required parameter: id (string)" };
83
+ }
84
+ const removed = scheduler.cancel(input.id);
85
+ if (!removed) {
86
+ return { error: `No scheduled job found with ID: ${input.id}` };
87
+ }
88
+ return { success: true, cancelled: input.id };
89
+ },
90
+ });
91
+ // ── cron_list ────────────────────────────────────────────
92
+ const cronList = defineTool({
93
+ name: "cron_list",
94
+ description: "List all active scheduled jobs with their cron expressions and next fire times.",
95
+ parallelSafe: true,
96
+ schema: {
97
+ type: "object",
98
+ properties: {},
99
+ },
100
+ execute: () => {
101
+ const jobs = scheduler.list();
102
+ return {
103
+ count: jobs.length,
104
+ jobs: jobs.map((j) => ({
105
+ id: j.id,
106
+ cron: j.cron,
107
+ prompt: j.prompt.length > 80 ? j.prompt.slice(0, 77) + "..." : j.prompt,
108
+ humanSchedule: j.humanSchedule,
109
+ recurring: j.recurring,
110
+ nextFireTime: j.nextFireTime > 0
111
+ ? new Date(j.nextFireTime).toISOString()
112
+ : "pending",
113
+ createdAt: new Date(j.createdAt).toISOString(),
114
+ })),
115
+ };
116
+ },
117
+ });
118
+ return [cronCreate, cronDelete, cronList];
119
+ }
120
+ //# sourceMappingURL=cron.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cron.js","sourceRoot":"","sources":["../../../src/oni-code/tools/cron.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Custom Tool Loader — discovers and loads user-defined tools from project directories.
3
+ *
4
+ * Scans `.oni/tools/` for `.js` and `.mjs` files, dynamically imports them,
5
+ * and extracts ToolDefinition-shaped exports. Custom tools are available to
6
+ * all execution tiers: conductor, subagents, and swarm agents.
7
+ *
8
+ * File format:
9
+ * - Default export: tool name is the export's `name` field, or the filename
10
+ * - Named exports: each export with `execute` function is treated as a tool
11
+ * - Non-tool exports (no `execute` function) are silently skipped
12
+ *
13
+ * Name conflict resolution: if a custom tool's name conflicts with a built-in
14
+ * tool, it is prefixed with `custom_` to avoid shadowing.
15
+ */
16
+ import type { ToolDefinition } from "../../tools/types.js";
17
+ /**
18
+ * Find all loadable tool files in the project's `.oni/tools/` directory.
19
+ * Returns absolute paths to `.js` and `.mjs` files.
20
+ */
21
+ export declare function scanToolFiles(rootDir: string): string[];
22
+ /**
23
+ * Extract ToolDefinition-shaped objects from a module's exports.
24
+ *
25
+ * - `default` export uses the tool's `name` field, or the filename stem
26
+ * - Named exports use the tool's `name` field, or `filename_exportName`
27
+ * - Non-tool exports (no `execute`) are silently skipped
28
+ */
29
+ export declare function extractToolDefinitions(mod: Record<string, unknown>, filenameStem: string): ToolDefinition[];
30
+ export interface LoadCustomToolsOptions {
31
+ /** Set of built-in tool names to check for conflicts */
32
+ builtinNames?: Set<string>;
33
+ }
34
+ /**
35
+ * Scan `.oni/tools/` for JS files, import them, extract tool definitions.
36
+ * Returns an array of ToolDefinition ready to register with the Conductor.
37
+ *
38
+ * - Files that fail to import are silently skipped (logged in debug)
39
+ * - Tools with names conflicting with built-in tools get `custom_` prefix
40
+ * - Available to all execution tiers (conductor, subagents, swarm agents)
41
+ */
42
+ export declare function loadCustomTools(rootDir: string, options?: LoadCustomToolsOptions): Promise<ToolDefinition[]>;
43
+ //# sourceMappingURL=custom.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom.d.ts","sourceRoot":"","sources":["../../../src/oni-code/tools/custom.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAS3D;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAevD;AAiBD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,YAAY,EAAE,MAAM,GACnB,cAAc,EAAE,CAsBlB;AAID,MAAM,WAAW,sBAAsB;IACrC,wDAAwD;IACxD,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC5B;AAED;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,cAAc,EAAE,CAAC,CA+B3B"}
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Custom Tool Loader — discovers and loads user-defined tools from project directories.
3
+ *
4
+ * Scans `.oni/tools/` for `.js` and `.mjs` files, dynamically imports them,
5
+ * and extracts ToolDefinition-shaped exports. Custom tools are available to
6
+ * all execution tiers: conductor, subagents, and swarm agents.
7
+ *
8
+ * File format:
9
+ * - Default export: tool name is the export's `name` field, or the filename
10
+ * - Named exports: each export with `execute` function is treated as a tool
11
+ * - Non-tool exports (no `execute` function) are silently skipped
12
+ *
13
+ * Name conflict resolution: if a custom tool's name conflicts with a built-in
14
+ * tool, it is prefixed with `custom_` to avoid shadowing.
15
+ */
16
+ import { join, basename, extname } from "node:path";
17
+ import { readdirSync, existsSync } from "node:fs";
18
+ import { pathToFileURL } from "node:url";
19
+ // ── Constants ─────────────────────────────────────────────────
20
+ const TOOLS_DIR = ".oni/tools";
21
+ const VALID_EXTENSIONS = new Set([".js", ".mjs"]);
22
+ // ── scanToolFiles ─────────────────────────────────────────────
23
+ /**
24
+ * Find all loadable tool files in the project's `.oni/tools/` directory.
25
+ * Returns absolute paths to `.js` and `.mjs` files.
26
+ */
27
+ export function scanToolFiles(rootDir) {
28
+ const toolsPath = join(rootDir, TOOLS_DIR);
29
+ if (!existsSync(toolsPath)) {
30
+ return [];
31
+ }
32
+ try {
33
+ const entries = readdirSync(toolsPath, { withFileTypes: true });
34
+ return entries
35
+ .filter((e) => e.isFile() && VALID_EXTENSIONS.has(extname(e.name)))
36
+ .map((e) => join(toolsPath, e.name));
37
+ }
38
+ catch {
39
+ return [];
40
+ }
41
+ }
42
+ // ── isToolLike ────────────────────────────────────────────────
43
+ function isToolLike(value) {
44
+ if (typeof value !== "object" || value === null)
45
+ return false;
46
+ const obj = value;
47
+ return typeof obj.execute === "function";
48
+ }
49
+ // ── extractToolDefinitions ────────────────────────────────────
50
+ /**
51
+ * Extract ToolDefinition-shaped objects from a module's exports.
52
+ *
53
+ * - `default` export uses the tool's `name` field, or the filename stem
54
+ * - Named exports use the tool's `name` field, or `filename_exportName`
55
+ * - Non-tool exports (no `execute`) are silently skipped
56
+ */
57
+ export function extractToolDefinitions(mod, filenameStem) {
58
+ const tools = [];
59
+ for (const [key, value] of Object.entries(mod)) {
60
+ if (!isToolLike(value))
61
+ continue;
62
+ let name;
63
+ if (key === "default") {
64
+ name = value.name ?? filenameStem;
65
+ }
66
+ else {
67
+ name = value.name ?? `${filenameStem}_${key}`;
68
+ }
69
+ tools.push({
70
+ name,
71
+ description: value.description ?? `Custom tool: ${name}`,
72
+ schema: value.schema ?? { type: "object", properties: {} },
73
+ execute: value.execute,
74
+ });
75
+ }
76
+ return tools;
77
+ }
78
+ /**
79
+ * Scan `.oni/tools/` for JS files, import them, extract tool definitions.
80
+ * Returns an array of ToolDefinition ready to register with the Conductor.
81
+ *
82
+ * - Files that fail to import are silently skipped (logged in debug)
83
+ * - Tools with names conflicting with built-in tools get `custom_` prefix
84
+ * - Available to all execution tiers (conductor, subagents, swarm agents)
85
+ */
86
+ export async function loadCustomTools(rootDir, options) {
87
+ const files = scanToolFiles(rootDir);
88
+ if (files.length === 0)
89
+ return [];
90
+ const builtinNames = options?.builtinNames ?? new Set();
91
+ const tools = [];
92
+ for (const filePath of files) {
93
+ try {
94
+ // Use file:// URL for cross-platform dynamic import
95
+ const fileUrl = pathToFileURL(filePath).href;
96
+ const mod = await import(fileUrl);
97
+ const stem = basename(filePath, extname(filePath));
98
+ const extracted = extractToolDefinitions(mod, stem);
99
+ for (const tool of extracted) {
100
+ // Resolve name conflicts with built-in tools
101
+ if (builtinNames.has(tool.name)) {
102
+ tool.name = `custom_${tool.name}`;
103
+ }
104
+ tools.push(tool);
105
+ }
106
+ }
107
+ catch {
108
+ // Silently skip files that fail to import
109
+ // In debug mode, the caller could log this
110
+ continue;
111
+ }
112
+ }
113
+ return tools;
114
+ }
115
+ //# sourceMappingURL=custom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom.js","sourceRoot":"","sources":["../../../src/oni-code/tools/custom.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGzC,iEAAiE;AAEjE,MAAM,SAAS,GAAG,YAAY,CAAC;AAC/B,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;AAElD,iEAAiE;AAEjE;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAE3C,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,WAAW,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,OAAO,OAAO;aACX,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;aAClE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,iEAAiE;AAEjE,SAAS,UAAU,CAAC,KAAc;IAMhC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC9D,MAAM,GAAG,GAAG,KAAgC,CAAC;IAC7C,OAAO,OAAO,GAAG,CAAC,OAAO,KAAK,UAAU,CAAC;AAC3C,CAAC;AAED,iEAAiE;AAEjE;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CACpC,GAA4B,EAC5B,YAAoB;IAEpB,MAAM,KAAK,GAAqB,EAAE,CAAC;IAEnC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;YAAE,SAAS;QAEjC,IAAI,IAAY,CAAC;QACjB,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,YAAY,CAAC;QACpC,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,GAAG,YAAY,IAAI,GAAG,EAAE,CAAC;QAChD,CAAC;QAED,KAAK,CAAC,IAAI,CAAC;YACT,IAAI;YACJ,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,gBAAgB,IAAI,EAAE;YACxD,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE;YAC1D,OAAO,EAAE,KAAK,CAAC,OAAoC;SACpD,CAAC,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AASD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAAe,EACf,OAAgC;IAEhC,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACrC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAElC,MAAM,YAAY,GAAG,OAAO,EAAE,YAAY,IAAI,IAAI,GAAG,EAAU,CAAC;IAChE,MAAM,KAAK,GAAqB,EAAE,CAAC;IAEnC,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,oDAAoD;YACpD,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC;YAC7C,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;YAElC,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;YACnD,MAAM,SAAS,GAAG,sBAAsB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAEpD,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;gBAC7B,6CAA6C;gBAC7C,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBAChC,IAAI,CAAC,IAAI,GAAG,UAAU,IAAI,CAAC,IAAI,EAAE,CAAC;gBACpC,CAAC;gBACD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,0CAA0C;YAC1C,2CAA2C;YAC3C,SAAS;QACX,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Unified Diff Patch Parser & Applier
3
+ *
4
+ * Parses standard unified diff format and applies hunks to files.
5
+ * Supports:
6
+ * - Multiple files per patch
7
+ * - Multiple hunks per file
8
+ * - Context line validation with fuzzy matching (whitespace normalization)
9
+ * - File create (--- /dev/null) and delete (+++ /dev/null)
10
+ * - Pre-verification: all hunks validated before any writes
11
+ * - Offset tolerance: hunks can shift ±maxOffset lines from stated position
12
+ */
13
+ export interface PatchHunk {
14
+ oldStart: number;
15
+ oldCount: number;
16
+ newStart: number;
17
+ newCount: number;
18
+ lines: HunkLine[];
19
+ }
20
+ export interface HunkLine {
21
+ type: "context" | "add" | "remove";
22
+ content: string;
23
+ }
24
+ export interface FilePatch {
25
+ oldPath: string | null;
26
+ newPath: string | null;
27
+ hunks: PatchHunk[];
28
+ }
29
+ export interface ApplyResult {
30
+ path: string;
31
+ operation: "create" | "edit" | "delete";
32
+ hunksApplied: number;
33
+ }
34
+ export interface ApplyError {
35
+ path: string;
36
+ hunkIndex: number;
37
+ message: string;
38
+ }
39
+ /**
40
+ * Parse a unified diff text into per-file patch objects.
41
+ */
42
+ export declare function parsePatch(patchText: string): FilePatch[];
43
+ /**
44
+ * Apply a single file's hunks to its content.
45
+ * Returns the new file content, or throws on context mismatch.
46
+ *
47
+ * @param content - Original file content
48
+ * @param hunks - Parsed hunks to apply
49
+ * @param filePath - For error messages
50
+ * @param maxOffset - Maximum line offset tolerance for fuzzy seeking (default 50)
51
+ */
52
+ export declare function applyHunks(content: string, hunks: PatchHunk[], filePath: string, maxOffset?: number): string;
53
+ export declare class PatchError extends Error {
54
+ readonly filePath: string;
55
+ readonly hunkIndex: number;
56
+ constructor(filePath: string, hunkIndex: number, message: string);
57
+ }
58
+ //# sourceMappingURL=patch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patch.d.ts","sourceRoot":"","sources":["../../../src/oni-code/tools/patch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,SAAS,GAAG,KAAK,GAAG,QAAQ,CAAC;IACnC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,EAAE,SAAS,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;IACxC,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAID;;GAEG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,CAkFzD;AAsCD;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CACxB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,SAAS,EAAE,EAClB,QAAQ,EAAE,MAAM,EAChB,SAAS,GAAE,MAAW,GACrB,MAAM,CAoFR;AAoED,qBAAa,UAAW,SAAQ,KAAK;aAEjB,QAAQ,EAAE,MAAM;aAChB,SAAS,EAAE,MAAM;gBADjB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjC,OAAO,EAAE,MAAM;CAKlB"}
@@ -0,0 +1,247 @@
1
+ /**
2
+ * Unified Diff Patch Parser & Applier
3
+ *
4
+ * Parses standard unified diff format and applies hunks to files.
5
+ * Supports:
6
+ * - Multiple files per patch
7
+ * - Multiple hunks per file
8
+ * - Context line validation with fuzzy matching (whitespace normalization)
9
+ * - File create (--- /dev/null) and delete (+++ /dev/null)
10
+ * - Pre-verification: all hunks validated before any writes
11
+ * - Offset tolerance: hunks can shift ±maxOffset lines from stated position
12
+ */
13
+ // ── Parser ───────────────────────────────────────────────────
14
+ /**
15
+ * Parse a unified diff text into per-file patch objects.
16
+ */
17
+ export function parsePatch(patchText) {
18
+ const lines = patchText.split("\n");
19
+ const patches = [];
20
+ let i = 0;
21
+ while (i < lines.length) {
22
+ // Find next --- line (file header)
23
+ if (!lines[i].startsWith("--- ")) {
24
+ i++;
25
+ continue;
26
+ }
27
+ const oldLine = lines[i];
28
+ i++;
29
+ // Must be followed by +++ line
30
+ if (i >= lines.length || !lines[i].startsWith("+++ ")) {
31
+ continue;
32
+ }
33
+ const newLine = lines[i];
34
+ i++;
35
+ const oldPath = extractPath(oldLine.slice(4));
36
+ const newPath = extractPath(newLine.slice(4));
37
+ const hunks = [];
38
+ // Parse all hunks for this file
39
+ while (i < lines.length) {
40
+ // Skip blank lines between hunks
41
+ while (i < lines.length && lines[i] === "")
42
+ i++;
43
+ if (i >= lines.length || !lines[i].startsWith("@@ "))
44
+ break;
45
+ const hunkHeader = parseHunkHeader(lines[i]);
46
+ if (!hunkHeader) {
47
+ i++;
48
+ continue;
49
+ }
50
+ i++;
51
+ const hunkLines = [];
52
+ // Read hunk content lines
53
+ while (i < lines.length) {
54
+ const line = lines[i];
55
+ // Detect new file header (--- followed by +++) — stop hunk parsing
56
+ if (line.startsWith("--- ") &&
57
+ i + 1 < lines.length &&
58
+ lines[i + 1].startsWith("+++ ")) {
59
+ break;
60
+ }
61
+ if (line.startsWith(" ")) {
62
+ hunkLines.push({ type: "context", content: line.slice(1) });
63
+ i++;
64
+ }
65
+ else if (line.startsWith("+")) {
66
+ hunkLines.push({ type: "add", content: line.slice(1) });
67
+ i++;
68
+ }
69
+ else if (line.startsWith("-")) {
70
+ hunkLines.push({ type: "remove", content: line.slice(1) });
71
+ i++;
72
+ }
73
+ else if (line === "\") {
74
+ i++;
75
+ }
76
+ else {
77
+ break;
78
+ }
79
+ }
80
+ hunks.push({
81
+ ...hunkHeader,
82
+ lines: hunkLines,
83
+ });
84
+ }
85
+ if (hunks.length > 0 || oldPath === null || newPath === null) {
86
+ patches.push({ oldPath, newPath, hunks });
87
+ }
88
+ }
89
+ return patches;
90
+ }
91
+ /**
92
+ * Extract file path from diff header line content.
93
+ * Handles: "a/path/to/file", "/dev/null", "path/to/file"
94
+ */
95
+ function extractPath(raw) {
96
+ const trimmed = raw.trim();
97
+ if (trimmed === "/dev/null")
98
+ return null;
99
+ // Strip a/ or b/ prefix (git diff convention)
100
+ if (trimmed.startsWith("a/") || trimmed.startsWith("b/")) {
101
+ return trimmed.slice(2);
102
+ }
103
+ return trimmed;
104
+ }
105
+ /**
106
+ * Parse hunk header: @@ -oldStart,oldCount +newStart,newCount @@
107
+ */
108
+ function parseHunkHeader(line) {
109
+ const match = line.match(/^@@\s+-(\d+)(?:,(\d+))?\s+\+(\d+)(?:,(\d+))?\s+@@/);
110
+ if (!match)
111
+ return null;
112
+ return {
113
+ oldStart: parseInt(match[1], 10),
114
+ oldCount: match[2] !== undefined ? parseInt(match[2], 10) : 1,
115
+ newStart: parseInt(match[3], 10),
116
+ newCount: match[4] !== undefined ? parseInt(match[4], 10) : 1,
117
+ };
118
+ }
119
+ // ── Applier ──────────────────────────────────────────────────
120
+ /**
121
+ * Apply a single file's hunks to its content.
122
+ * Returns the new file content, or throws on context mismatch.
123
+ *
124
+ * @param content - Original file content
125
+ * @param hunks - Parsed hunks to apply
126
+ * @param filePath - For error messages
127
+ * @param maxOffset - Maximum line offset tolerance for fuzzy seeking (default 50)
128
+ */
129
+ export function applyHunks(content, hunks, filePath, maxOffset = 50) {
130
+ // Split into lines, preserving the trailing newline state
131
+ const originalLines = content.split("\n");
132
+ // If content ends with \n, the split produces an empty trailing element
133
+ const hadTrailingNewline = content.length > 0 && content.endsWith("\n");
134
+ if (hadTrailingNewline && originalLines[originalLines.length - 1] === "") {
135
+ originalLines.pop();
136
+ }
137
+ // Build replacements: [{startLine, removeCount, insertLines}]
138
+ const replacements = [];
139
+ for (let hunkIdx = 0; hunkIdx < hunks.length; hunkIdx++) {
140
+ const hunk = hunks[hunkIdx];
141
+ // Extract old lines (context + remove) and new lines (context + add)
142
+ const oldLines = [];
143
+ const newLines = [];
144
+ for (const line of hunk.lines) {
145
+ if (line.type === "context") {
146
+ oldLines.push(line.content);
147
+ newLines.push(line.content);
148
+ }
149
+ else if (line.type === "remove") {
150
+ oldLines.push(line.content);
151
+ }
152
+ else if (line.type === "add") {
153
+ newLines.push(line.content);
154
+ }
155
+ }
156
+ // Find where old lines match in the file
157
+ // Start searching from hunk's stated position (1-based → 0-based)
158
+ const statedStart = hunk.oldStart - 1;
159
+ const matchStart = seekMatch(originalLines, oldLines, statedStart, maxOffset);
160
+ if (matchStart === -1) {
161
+ const preview = oldLines.slice(0, 3).join("\n");
162
+ throw new PatchError(filePath, hunkIdx, `Context mismatch at hunk ${hunkIdx + 1}: could not find expected lines near line ${hunk.oldStart}:\n${preview}`);
163
+ }
164
+ replacements.push({
165
+ startLine: matchStart,
166
+ removeCount: oldLines.length,
167
+ insertLines: newLines,
168
+ });
169
+ }
170
+ // Validate no overlapping replacements
171
+ const sorted = [...replacements].sort((a, b) => a.startLine - b.startLine);
172
+ for (let i = 1; i < sorted.length; i++) {
173
+ const prev = sorted[i - 1];
174
+ const curr = sorted[i];
175
+ if (curr.startLine < prev.startLine + prev.removeCount) {
176
+ throw new PatchError(filePath, -1, `Overlapping hunks at lines ${prev.startLine + 1} and ${curr.startLine + 1}`);
177
+ }
178
+ }
179
+ // Apply replacements in reverse order to preserve line indices
180
+ const resultLines = [...originalLines];
181
+ for (let i = sorted.length - 1; i >= 0; i--) {
182
+ const r = sorted[i];
183
+ resultLines.splice(r.startLine, r.removeCount, ...r.insertLines);
184
+ }
185
+ // Reconstruct content with proper trailing newline
186
+ return resultLines.join("\n") + (hadTrailingNewline || resultLines.length > 0 ? "\n" : "");
187
+ }
188
+ // ── Context Matching ─────────────────────────────────────────
189
+ /**
190
+ * Seek a sequence of old lines in the file content, starting near `startLine`.
191
+ * Searches outward from startLine with increasing offset.
192
+ * Uses multi-pass fuzzy matching (exact → trimmed whitespace).
193
+ *
194
+ * Returns the 0-based line index where the match starts, or -1.
195
+ */
196
+ function seekMatch(fileLines, oldLines, startLine, maxOffset) {
197
+ if (oldLines.length === 0) {
198
+ // Empty old lines = pure insertion at the stated position
199
+ return Math.min(Math.max(startLine, 0), fileLines.length);
200
+ }
201
+ // Try exact match first, then fuzzy
202
+ for (const matcher of [matchExact, matchTrimmed]) {
203
+ for (let offset = 0; offset <= maxOffset; offset++) {
204
+ // Try at startLine + offset
205
+ const fwd = startLine + offset;
206
+ if (fwd >= 0 && fwd + oldLines.length <= fileLines.length) {
207
+ if (matcher(fileLines, oldLines, fwd))
208
+ return fwd;
209
+ }
210
+ // Try at startLine - offset (skip 0 to avoid double-check)
211
+ if (offset > 0) {
212
+ const bwd = startLine - offset;
213
+ if (bwd >= 0 && bwd + oldLines.length <= fileLines.length) {
214
+ if (matcher(fileLines, oldLines, bwd))
215
+ return bwd;
216
+ }
217
+ }
218
+ }
219
+ }
220
+ return -1;
221
+ }
222
+ function matchExact(fileLines, oldLines, start) {
223
+ for (let i = 0; i < oldLines.length; i++) {
224
+ if (fileLines[start + i] !== oldLines[i])
225
+ return false;
226
+ }
227
+ return true;
228
+ }
229
+ function matchTrimmed(fileLines, oldLines, start) {
230
+ for (let i = 0; i < oldLines.length; i++) {
231
+ if (fileLines[start + i].trimEnd() !== oldLines[i].trimEnd())
232
+ return false;
233
+ }
234
+ return true;
235
+ }
236
+ // ── Error ────────────────────────────────────────────────────
237
+ export class PatchError extends Error {
238
+ filePath;
239
+ hunkIndex;
240
+ constructor(filePath, hunkIndex, message) {
241
+ super(message);
242
+ this.filePath = filePath;
243
+ this.hunkIndex = hunkIndex;
244
+ this.name = "PatchError";
245
+ }
246
+ }
247
+ //# sourceMappingURL=patch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patch.js","sourceRoot":"","sources":["../../../src/oni-code/tools/patch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Plan Mode Tools — switch between build (full access) and plan (read-only) agents.
3
+ *
4
+ * plan_enter: Switch to plan mode for read-only exploration and planning.
5
+ * plan_exit: Switch back to build mode for implementation.
6
+ *
7
+ * The switch takes effect on the next chat() invocation. The current turn
8
+ * completes normally, and subsequent turns use the new agent's system prompt
9
+ * and tool scoping. Write tools are also blocked in plan mode via the
10
+ * Conductor's PreToolUse hook for double enforcement.
11
+ */
12
+ import type { ToolDefinition } from "../../tools/types.js";
13
+ export interface PlanToolHost {
14
+ switchAgent: (name: string) => void;
15
+ }
16
+ export declare function makePlanTools(host: PlanToolHost): ToolDefinition[];
17
+ //# sourceMappingURL=plan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../../src/oni-code/tools/plan.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,cAAc,EAAE,CAwClE"}