@oni.bot/core 0.8.0 → 1.0.1

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 (237) 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/pregel.d.ts +4 -0
  183. package/dist/pregel.d.ts.map +1 -1
  184. package/dist/pregel.js +121 -54
  185. package/dist/pregel.js.map +1 -1
  186. package/dist/retry.d.ts.map +1 -1
  187. package/dist/retry.js +10 -3
  188. package/dist/retry.js.map +1 -1
  189. package/dist/store/index.d.ts +3 -0
  190. package/dist/store/index.d.ts.map +1 -1
  191. package/dist/store/index.js +17 -0
  192. package/dist/store/index.js.map +1 -1
  193. package/dist/streaming.d.ts +4 -1
  194. package/dist/streaming.d.ts.map +1 -1
  195. package/dist/streaming.js +21 -7
  196. package/dist/streaming.js.map +1 -1
  197. package/dist/swarm/graph.d.ts +81 -2
  198. package/dist/swarm/graph.d.ts.map +1 -1
  199. package/dist/swarm/graph.js +517 -32
  200. package/dist/swarm/graph.js.map +1 -1
  201. package/dist/swarm/index.d.ts +10 -2
  202. package/dist/swarm/index.d.ts.map +1 -1
  203. package/dist/swarm/index.js +6 -1
  204. package/dist/swarm/index.js.map +1 -1
  205. package/dist/swarm/mermaid.d.ts +10 -0
  206. package/dist/swarm/mermaid.d.ts.map +1 -0
  207. package/dist/swarm/mermaid.js +64 -0
  208. package/dist/swarm/mermaid.js.map +1 -0
  209. package/dist/swarm/pool.d.ts +9 -1
  210. package/dist/swarm/pool.d.ts.map +1 -1
  211. package/dist/swarm/pool.js +58 -10
  212. package/dist/swarm/pool.js.map +1 -1
  213. package/dist/swarm/registry.d.ts +11 -1
  214. package/dist/swarm/registry.d.ts.map +1 -1
  215. package/dist/swarm/registry.js +17 -3
  216. package/dist/swarm/registry.js.map +1 -1
  217. package/dist/swarm/scaling.d.ts +95 -0
  218. package/dist/swarm/scaling.d.ts.map +1 -0
  219. package/dist/swarm/scaling.js +214 -0
  220. package/dist/swarm/scaling.js.map +1 -0
  221. package/dist/swarm/snapshot.d.ts +51 -0
  222. package/dist/swarm/snapshot.d.ts.map +1 -0
  223. package/dist/swarm/snapshot.js +115 -0
  224. package/dist/swarm/snapshot.js.map +1 -0
  225. package/dist/swarm/supervisor.d.ts.map +1 -1
  226. package/dist/swarm/supervisor.js +82 -0
  227. package/dist/swarm/supervisor.js.map +1 -1
  228. package/dist/swarm/tracer.d.ts +57 -0
  229. package/dist/swarm/tracer.d.ts.map +1 -0
  230. package/dist/swarm/tracer.js +138 -0
  231. package/dist/swarm/tracer.js.map +1 -0
  232. package/dist/swarm/types.d.ts +23 -1
  233. package/dist/swarm/types.d.ts.map +1 -1
  234. package/dist/swarm/types.js.map +1 -1
  235. package/dist/tools/types.d.ts +2 -0
  236. package/dist/tools/types.d.ts.map +1 -1
  237. package/package.json +160 -141
@@ -0,0 +1,5 @@
1
+ import type { ParsedArgs } from "./router.js";
2
+ export declare function resolveDevFile(file: string | undefined): string;
3
+ export declare function formatRestart(count: number): string;
4
+ export declare function devCommand(args: ParsedArgs): Promise<void>;
5
+ //# sourceMappingURL=dev.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/cli/dev.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAE/D;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA4ChE"}
@@ -0,0 +1,54 @@
1
+ // ============================================================
2
+ // @oni.bot/core CLI — dev command
3
+ // Hot-reload dev server using tsx --watch
4
+ // ============================================================
5
+ import { spawn } from "node:child_process";
6
+ import { resolve } from "node:path";
7
+ export function resolveDevFile(file) {
8
+ return file ?? "src/index.ts";
9
+ }
10
+ export function formatRestart(count) {
11
+ return ` [oni dev] Restart #${count}`;
12
+ }
13
+ export async function devCommand(args) {
14
+ const file = resolveDevFile(args.positional[0]);
15
+ const entryFile = resolve(process.cwd(), file);
16
+ const port = args.flags.port ?? "4100";
17
+ console.log(`\n ONI Dev Server`);
18
+ console.log(` Watching: ${entryFile}`);
19
+ console.log(` Port: ${port}`);
20
+ console.log(` Press Ctrl+C to stop\n`);
21
+ // Check if @oni.bot/studio is installed
22
+ try {
23
+ // @ts-expect-error — @oni.bot/studio is an optional peer dependency
24
+ await import("@oni.bot/studio");
25
+ console.log(` ONI Studio available at http://localhost:${port}\n`);
26
+ }
27
+ catch {
28
+ // Studio not installed, that's fine
29
+ console.log(` Tip: Install @oni.bot/studio for visual debugging\n`);
30
+ }
31
+ // Use tsx --watch for hot-reload
32
+ const child = spawn("npx", ["tsx", "watch", entryFile], {
33
+ stdio: "inherit",
34
+ shell: true,
35
+ env: { ...process.env, ONI_DEV: "true", ONI_PORT: port },
36
+ });
37
+ // Handle graceful shutdown
38
+ const cleanup = () => {
39
+ child.kill("SIGTERM");
40
+ process.exit(0);
41
+ };
42
+ process.on("SIGINT", cleanup);
43
+ process.on("SIGTERM", cleanup);
44
+ return new Promise((resolvePromise) => {
45
+ child.on("close", (code) => {
46
+ process.off("SIGINT", cleanup);
47
+ process.off("SIGTERM", cleanup);
48
+ if (code && code !== 0)
49
+ process.exitCode = code;
50
+ resolvePromise();
51
+ });
52
+ });
53
+ }
54
+ //# sourceMappingURL=dev.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/cli/dev.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,kCAAkC;AAClC,0CAA0C;AAC1C,+DAA+D;AAE/D,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,MAAM,UAAU,cAAc,CAAC,IAAwB;IACrD,OAAO,IAAI,IAAI,cAAc,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,OAAO,wBAAwB,KAAK,EAAE,CAAC;AACzC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAgB;IAC/C,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,MAAM,CAAC;IAEvC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAClC,OAAO,CAAC,GAAG,CAAC,eAAe,SAAS,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;IAC/B,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IAExC,wCAAwC;IACxC,IAAI,CAAC;QACH,oEAAoE;QACpE,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,8CAA8C,IAAI,IAAI,CAAC,CAAC;IACtE,CAAC;IAAC,MAAM,CAAC;QACP,oCAAoC;QACpC,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;IACvE,CAAC;IAED,iCAAiC;IACjC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE;QACtD,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,IAAI;QACX,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;KACzD,CAAC,CAAC;IAEH,2BAA2B;IAC3B,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC9B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAE/B,OAAO,IAAI,OAAO,CAAC,CAAC,cAAc,EAAE,EAAE;QACpC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACzB,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAChC,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC;gBAAE,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;YAChD,cAAc,EAAE,CAAC;QACnB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
package/dist/cli/index.js CHANGED
@@ -2,31 +2,20 @@
2
2
  // ============================================================
3
3
  // @oni.bot/core CLI — entry point
4
4
  // ============================================================
5
- import { initProject } from "./init.js";
6
- import { resolve, basename } from "node:path";
7
- const args = process.argv.slice(2);
8
- const command = args[0];
9
- if (command === "init" && args[1]) {
10
- const name = basename(args[1]);
11
- const targetDir = resolve(process.cwd(), args[1]);
12
- console.log(`\n Creating ONI project: ${name}\n`);
13
- await initProject(name, targetDir);
14
- console.log(` Done! Next steps:\n`);
15
- console.log(` cd ${name}`);
16
- console.log(` npm install`);
17
- console.log(` npx tsx src/index.ts\n`);
18
- console.log(` Documentation: https://github.com/oni-bot/core\n`);
19
- }
20
- else {
21
- console.log(`
22
- Usage: oni init <project-name>
23
-
24
- Commands:
25
- init <name> Create a new ONI project
26
-
27
- Examples:
28
- oni init my-swarm
29
- oni init research-team
30
- `);
31
- }
5
+ import { runCLI } from "./router.js";
6
+ import { initCommand } from "./init.js";
7
+ import { runCommand } from "./run.js";
8
+ import { inspectCommand } from "./inspect.js";
9
+ import { devCommand } from "./dev.js";
10
+ import { testCommand } from "./test.js";
11
+ import { buildCommand } from "./build.js";
12
+ const commands = {
13
+ init: initCommand,
14
+ dev: devCommand,
15
+ run: runCommand,
16
+ inspect: inspectCommand,
17
+ test: testCommand,
18
+ build: buildCommand,
19
+ };
20
+ await runCLI(process.argv.slice(2), commands);
32
21
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA,+DAA+D;AAC/D,kCAAkC;AAClC,+DAA+D;AAE/D,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE9C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAExB,IAAI,OAAO,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAClC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAElD,OAAO,CAAC,GAAG,CAAC,6BAA6B,IAAI,IAAI,CAAC,CAAC;IAEnD,MAAM,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAEnC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;IAC9B,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC/B,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;AACpE,CAAC;KAAM,CAAC;IACN,OAAO,CAAC,GAAG,CAAC;;;;;;;;;CASb,CAAC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA,+DAA+D;AAC/D,kCAAkC;AAClC,+DAA+D;AAE/D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG1C,MAAM,QAAQ,GAAoB;IAChC,IAAI,EAAE,WAAW;IACjB,GAAG,EAAE,UAAU;IACf,GAAG,EAAE,UAAU;IACf,OAAO,EAAE,cAAc;IACvB,IAAI,EAAE,WAAW;IACjB,KAAK,EAAE,YAAY;CACpB,CAAC;AAEF,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC"}
@@ -1,2 +1,4 @@
1
+ import type { ParsedArgs } from "./router.js";
1
2
  export declare function initProject(name: string, targetDir: string): Promise<void>;
3
+ export declare function initCommand(args: ParsedArgs): Promise<void>;
2
4
  //# sourceMappingURL=init.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAQA,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAUhF"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAWhF;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBjE"}
package/dist/cli/init.js CHANGED
@@ -2,7 +2,7 @@
2
2
  // @oni.bot/core CLI — init command
3
3
  // ============================================================
4
4
  import { mkdir, writeFile } from "node:fs/promises";
5
- import { join } from "node:path";
5
+ import { join, basename, resolve } from "node:path";
6
6
  import { templates } from "./templates.js";
7
7
  export async function initProject(name, targetDir) {
8
8
  await mkdir(targetDir, { recursive: true });
@@ -12,6 +12,23 @@ export async function initProject(name, targetDir) {
12
12
  await writeFile(join(targetDir, "tsconfig.json"), templates.tsconfig());
13
13
  await writeFile(join(targetDir, "src", "index.ts"), templates.entrypoint());
14
14
  await writeFile(join(targetDir, "src", "agent.test.ts"), templates.test());
15
+ await writeFile(join(targetDir, "src", "harness-agent.ts"), templates.harnessAgent());
15
16
  await writeFile(join(targetDir, ".gitignore"), templates.gitignore());
16
17
  }
18
+ export async function initCommand(args) {
19
+ const projectName = args.positional[0];
20
+ if (!projectName) {
21
+ console.error(" Error: project name required\n Usage: oni init <name>");
22
+ process.exitCode = 1;
23
+ return;
24
+ }
25
+ const name = basename(projectName);
26
+ const targetDir = resolve(process.cwd(), projectName);
27
+ console.log(`\n Creating ONI project: ${name}\n`);
28
+ await initProject(name, targetDir);
29
+ console.log(` Done! Next steps:\n`);
30
+ console.log(` cd ${name}`);
31
+ console.log(` npm install`);
32
+ console.log(` npx tsx src/index.ts\n`);
33
+ }
17
34
  //# sourceMappingURL=init.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,mCAAmC;AACnC,+DAA+D;AAE/D,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAY,EAAE,SAAiB;IAC/D,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,MAAM,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEzD,cAAc;IACd,MAAM,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,EAAE,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9E,MAAM,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;IACxE,MAAM,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,UAAU,CAAC,EAAE,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC;IAC5E,MAAM,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,eAAe,CAAC,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3E,MAAM,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC;AACxE,CAAC"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,mCAAmC;AACnC,+DAA+D;AAE/D,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAG3C,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAY,EAAE,SAAiB;IAC/D,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,MAAM,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEzD,cAAc;IACd,MAAM,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,EAAE,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9E,MAAM,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;IACxE,MAAM,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,UAAU,CAAC,EAAE,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC;IAC5E,MAAM,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,eAAe,CAAC,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3E,MAAM,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,kBAAkB,CAAC,EAAE,SAAS,CAAC,YAAY,EAAE,CAAC,CAAC;IACtF,MAAM,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAgB;IAChD,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACvC,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;QAC1E,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;IACnC,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC,CAAC;IAEtD,OAAO,CAAC,GAAG,CAAC,6BAA6B,IAAI,IAAI,CAAC,CAAC;IACnD,MAAM,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;IAC9B,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC/B,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;AAC5C,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { ParsedArgs } from "./router.js";
2
+ import type { GraphDescriptor } from "../inspect.js";
3
+ export declare function formatGraphTable(descriptor: GraphDescriptor): string;
4
+ export declare function inspectCommand(args: ParsedArgs): Promise<void>;
5
+ //# sourceMappingURL=inspect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect.d.ts","sourceRoot":"","sources":["../../src/cli/inspect.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAErD,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,eAAe,GAAG,MAAM,CA2CpE;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA8CpE"}
@@ -0,0 +1,85 @@
1
+ // ============================================================
2
+ // @oni.bot/core CLI — inspect command
3
+ // Print graph topology as table or Mermaid
4
+ // ============================================================
5
+ export function formatGraphTable(descriptor) {
6
+ const lines = [];
7
+ lines.push(" Graph Topology");
8
+ lines.push(" " + "\u2500".repeat(50));
9
+ // Nodes
10
+ lines.push("\n Nodes:");
11
+ for (const node of descriptor.nodes) {
12
+ const type = node.type === "start" ? " (entry)" : node.type === "end" ? " (exit)" : "";
13
+ lines.push(` ${node.id}${type}`);
14
+ }
15
+ // Edges
16
+ lines.push("\n Edges:");
17
+ for (const edge of descriptor.edges) {
18
+ const label = edge.type === "conditional" ? " (conditional)" : "";
19
+ lines.push(` ${edge.from} \u2192 ${edge.to}${label}`);
20
+ }
21
+ // Topology
22
+ lines.push("\n Topological Order:");
23
+ if (descriptor.topoOrder) {
24
+ lines.push(` ${descriptor.topoOrder.join(" \u2192 ")}`);
25
+ }
26
+ else {
27
+ lines.push(" (graph has cycles, no topological order)");
28
+ }
29
+ // Cycles
30
+ lines.push("\n Cycles:");
31
+ if (descriptor.cycles.length === 0) {
32
+ lines.push(" No cycles detected");
33
+ }
34
+ else {
35
+ for (const cycle of descriptor.cycles) {
36
+ lines.push(` ${cycle.join(" \u2192 ")} \u2192 ${cycle[0]}`);
37
+ }
38
+ }
39
+ // Terminals
40
+ lines.push("\n Terminal Nodes:");
41
+ lines.push(` ${descriptor.terminals.join(", ")}`);
42
+ return lines.join("\n");
43
+ }
44
+ export async function inspectCommand(args) {
45
+ const file = args.positional[0];
46
+ if (!file) {
47
+ console.error(" Error: file required\n Usage: oni inspect <file>");
48
+ process.exitCode = 1;
49
+ return;
50
+ }
51
+ const format = args.flags.format ?? "table";
52
+ try {
53
+ // Dynamic import the file to get the graph
54
+ const mod = await import(/* @vite-ignore */ file);
55
+ // Look for exported graph or app
56
+ const graph = mod.graph ?? mod.default ?? mod.app;
57
+ if (!graph) {
58
+ console.error(" Error: file must export a 'graph', 'app', or default export");
59
+ process.exitCode = 1;
60
+ return;
61
+ }
62
+ // Import inspect utilities
63
+ const { buildGraphDescriptor, toMermaidDetailed } = await import("../inspect.js");
64
+ // Access internal state (nodes + edges) to build descriptor
65
+ const nodes = graph.nodes ?? graph._nodes;
66
+ const edges = graph.edges ?? graph._edges;
67
+ if (!nodes || !edges) {
68
+ console.error(" Error: could not extract graph structure. Is this a StateGraph?");
69
+ process.exitCode = 1;
70
+ return;
71
+ }
72
+ const descriptor = buildGraphDescriptor(nodes, edges);
73
+ if (format === "mermaid") {
74
+ console.log(toMermaidDetailed(descriptor));
75
+ }
76
+ else {
77
+ console.log(formatGraphTable(descriptor));
78
+ }
79
+ }
80
+ catch (err) {
81
+ console.error(` Error: ${err instanceof Error ? err.message : String(err)}`);
82
+ process.exitCode = 1;
83
+ }
84
+ }
85
+ //# sourceMappingURL=inspect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect.js","sourceRoot":"","sources":["../../src/cli/inspect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export interface ParsedArgs {
2
+ command: string;
3
+ positional: string[];
4
+ flags: Record<string, string>;
5
+ }
6
+ export declare function parseArgs(argv: string[]): ParsedArgs;
7
+ export declare function getVersionText(): string;
8
+ export declare function getHelpText(): string;
9
+ export type CommandHandler = (args: ParsedArgs) => Promise<void>;
10
+ export interface CommandRegistry {
11
+ [command: string]: CommandHandler;
12
+ }
13
+ export declare function runCLI(argv: string[], commands: CommandRegistry): Promise<void>;
14
+ //# sourceMappingURL=router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/cli/router.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAgDpD;AAID,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,wBAAgB,WAAW,IAAI,MAAM,CA0BpC;AAED,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAEjE,MAAM,WAAW,eAAe;IAC9B,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,CAAC;CACnC;AAED,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBrF"}
@@ -0,0 +1,107 @@
1
+ // ============================================================
2
+ // @oni.bot/core CLI — Argument Parser & Router
3
+ // Zero-dep argument parsing and command dispatch
4
+ // ============================================================
5
+ export function parseArgs(argv) {
6
+ if (argv.length === 0)
7
+ return { command: "help", positional: [], flags: {} };
8
+ const first = argv[0];
9
+ if (first === "--help" || first === "-h")
10
+ return { command: "help", positional: [], flags: {} };
11
+ if (first === "--version" || first === "-v")
12
+ return { command: "version", positional: [], flags: {} };
13
+ const command = first;
14
+ const positional = [];
15
+ const flags = {};
16
+ let i = 1;
17
+ while (i < argv.length) {
18
+ const arg = argv[i];
19
+ if (arg.startsWith("--")) {
20
+ const eqIndex = arg.indexOf("=");
21
+ if (eqIndex !== -1) {
22
+ // --flag=value
23
+ flags[arg.slice(2, eqIndex)] = arg.slice(eqIndex + 1);
24
+ }
25
+ else {
26
+ // --flag or --flag value
27
+ const key = arg.slice(2);
28
+ const next = argv[i + 1];
29
+ if (next && !next.startsWith("-")) {
30
+ flags[key] = next;
31
+ i++;
32
+ }
33
+ else {
34
+ flags[key] = "true";
35
+ }
36
+ }
37
+ }
38
+ else if (arg.startsWith("-") && arg.length === 2) {
39
+ // Short flag: -p value
40
+ const key = arg.slice(1);
41
+ const next = argv[i + 1];
42
+ if (next && !next.startsWith("-")) {
43
+ flags[key] = next;
44
+ i++;
45
+ }
46
+ else {
47
+ flags[key] = "true";
48
+ }
49
+ }
50
+ else {
51
+ positional.push(arg);
52
+ }
53
+ i++;
54
+ }
55
+ return { command, positional, flags };
56
+ }
57
+ const VERSION = "0.8.1";
58
+ export function getVersionText() {
59
+ return `@oni.bot/core v${VERSION}`;
60
+ }
61
+ export function getHelpText() {
62
+ return `
63
+ ${getVersionText()} — Agent Swarm Framework
64
+
65
+ Usage: oni <command> [options]
66
+
67
+ Commands:
68
+ init <name> Create a new ONI project
69
+ dev [file] Start dev server with hot-reload
70
+ run <file> Execute an agent or swarm
71
+ inspect <file> Print graph topology
72
+ test [pattern] Run agent tests
73
+ build Build and validate project
74
+
75
+ Options:
76
+ --help, -h Show this help
77
+ --version, -v Show version
78
+
79
+ Examples:
80
+ oni init my-swarm
81
+ oni dev src/agent.ts
82
+ oni run src/agent.ts --verbose
83
+ oni inspect src/graph.ts --format mermaid
84
+ oni test
85
+ oni build
86
+ `;
87
+ }
88
+ export async function runCLI(argv, commands) {
89
+ const parsed = parseArgs(argv);
90
+ if (parsed.command === "help") {
91
+ console.log(getHelpText());
92
+ return;
93
+ }
94
+ if (parsed.command === "version") {
95
+ console.log(getVersionText());
96
+ return;
97
+ }
98
+ const handler = commands[parsed.command];
99
+ if (!handler) {
100
+ console.error(` Unknown command: ${parsed.command}\n`);
101
+ console.log(getHelpText());
102
+ process.exitCode = 1;
103
+ return;
104
+ }
105
+ await handler(parsed);
106
+ }
107
+ //# sourceMappingURL=router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/cli/router.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+CAA+C;AAC/C,iDAAiD;AACjD,+DAA+D;AAQ/D,MAAM,UAAU,SAAS,CAAC,IAAc;IACtC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IAE7E,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;IACvB,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IAChG,IAAI,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IAEtG,MAAM,OAAO,GAAG,KAAK,CAAC;IACtB,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,MAAM,KAAK,GAA2B,EAAE,CAAC;IAEzC,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;QAErB,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACjC,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC;gBACnB,eAAe;gBACf,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;YACxD,CAAC;iBAAM,CAAC;gBACN,yBAAyB;gBACzB,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACzB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACzB,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBAClC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;oBAClB,CAAC,EAAE,CAAC;gBACN,CAAC;qBAAM,CAAC;oBACN,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;gBACtB,CAAC;YACH,CAAC;QACH,CAAC;aAAM,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnD,uBAAuB;YACvB,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACzB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACzB,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAClC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;gBAClB,CAAC,EAAE,CAAC;YACN,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;YACtB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;QACD,CAAC,EAAE,CAAC;IACN,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;AACxC,CAAC;AAED,MAAM,OAAO,GAAG,OAAO,CAAC;AAExB,MAAM,UAAU,cAAc;IAC5B,OAAO,kBAAkB,OAAO,EAAE,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO;IACL,cAAc,EAAE;;;;;;;;;;;;;;;;;;;;;;;CAuBnB,CAAC;AACF,CAAC;AAQD,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAc,EAAE,QAAyB;IACpE,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAE/B,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;QAC3B,OAAO;IACT,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC;QAC9B,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACzC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,sBAAsB,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;QAC3B,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;AACxB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { ParsedArgs } from "./router.js";
2
+ export declare function resolveEntryFile(file: string): string;
3
+ export declare function formatDuration(ms: number): string;
4
+ export declare function runCommand(args: ParsedArgs): Promise<void>;
5
+ //# sourceMappingURL=run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKrD;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAMjD;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAkChE"}
@@ -0,0 +1,53 @@
1
+ // ============================================================
2
+ // @oni.bot/core CLI — run command
3
+ // Executes an agent or swarm file via tsx
4
+ // ============================================================
5
+ import { spawn } from "node:child_process";
6
+ import { resolve } from "node:path";
7
+ export function resolveEntryFile(file) {
8
+ if (file.endsWith(".ts") || file.endsWith(".js") || file.endsWith(".mts") || file.endsWith(".mjs")) {
9
+ return file;
10
+ }
11
+ return `${file}.ts`;
12
+ }
13
+ export function formatDuration(ms) {
14
+ if (ms < 1000)
15
+ return `${ms}ms`;
16
+ if (ms < 60_000)
17
+ return `${(ms / 1000).toFixed(2)}s`;
18
+ const mins = Math.floor(ms / 60_000);
19
+ const secs = Math.floor((ms % 60_000) / 1000);
20
+ return `${mins}m ${secs}s`;
21
+ }
22
+ export async function runCommand(args) {
23
+ const file = args.positional[0];
24
+ if (!file) {
25
+ console.error(" Error: file required\n Usage: oni run <file>");
26
+ process.exitCode = 1;
27
+ return;
28
+ }
29
+ const entryFile = resolve(process.cwd(), resolveEntryFile(file));
30
+ console.log(`\n Running: ${entryFile}`);
31
+ const startTime = Date.now();
32
+ // Spawn tsx to run the file
33
+ const child = spawn("npx", ["tsx", entryFile], {
34
+ stdio: "inherit",
35
+ shell: true,
36
+ env: { ...process.env },
37
+ });
38
+ return new Promise((resolvePromise) => {
39
+ child.on("close", (code) => {
40
+ const duration = formatDuration(Date.now() - startTime);
41
+ console.log(`\n Completed in ${duration} (exit code: ${code ?? 0})`);
42
+ if (code && code !== 0)
43
+ process.exitCode = code;
44
+ resolvePromise();
45
+ });
46
+ child.on("error", (err) => {
47
+ console.error(` Error: ${err.message}`);
48
+ process.exitCode = 1;
49
+ resolvePromise();
50
+ });
51
+ });
52
+ }
53
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,kCAAkC;AAClC,0CAA0C;AAC1C,+DAA+D;AAE/D,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACnG,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,GAAG,IAAI,KAAK,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAAU;IACvC,IAAI,EAAE,GAAG,IAAI;QAAE,OAAO,GAAG,EAAE,IAAI,CAAC;IAChC,IAAI,EAAE,GAAG,MAAM;QAAE,OAAO,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACrD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;IAC9C,OAAO,GAAG,IAAI,KAAK,IAAI,GAAG,CAAC;AAC7B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAgB;IAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAChC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACjE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;IAEjE,OAAO,CAAC,GAAG,CAAC,gBAAgB,SAAS,EAAE,CAAC,CAAC;IACzC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,4BAA4B;IAC5B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE;QAC7C,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,IAAI;QACX,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE;KACxB,CAAC,CAAC;IAEH,OAAO,IAAI,OAAO,CAAC,CAAC,cAAc,EAAE,EAAE;QACpC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACzB,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC;YACxD,OAAO,CAAC,GAAG,CAAC,oBAAoB,QAAQ,gBAAgB,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;YACtE,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC;gBAAE,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;YAChD,cAAc,EAAE,CAAC;QACnB,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACxB,OAAO,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YACzC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,cAAc,EAAE,CAAC;QACnB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -3,6 +3,7 @@ export declare const templates: {
3
3
  tsconfig(): string;
4
4
  entrypoint(): string;
5
5
  test(): string;
6
+ harnessAgent(): string;
6
7
  gitignore(): string;
7
8
  };
8
9
  //# sourceMappingURL=templates.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/cli/templates.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,SAAS;sBACF,MAAM,GAAG,MAAM;gBAwBrB,MAAM;kBAiBJ,MAAM;YA8CZ,MAAM;iBAuBD,MAAM;CAOpB,CAAC"}
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/cli/templates.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,SAAS;sBACF,MAAM,GAAG,MAAM;gBAwBrB,MAAM;kBAiBJ,MAAM;YA8CZ,MAAM;oBAuBE,MAAM;iBAyCT,MAAM;CAOpB,CAAC"}