agent-bundle 0.1.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 (376) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +161 -0
  3. package/dist/agent/agent.d.ts +32 -0
  4. package/dist/agent/agent.js +241 -0
  5. package/dist/agent/agent.js.map +1 -0
  6. package/dist/agent/agent.test-helpers.d.ts +63 -0
  7. package/dist/agent/agent.test-helpers.js +170 -0
  8. package/dist/agent/agent.test-helpers.js.map +1 -0
  9. package/dist/agent/define-agent.d.ts +2 -0
  10. package/dist/agent/define-agent.js +18 -0
  11. package/dist/agent/define-agent.js.map +1 -0
  12. package/dist/agent/dependencies.d.ts +15 -0
  13. package/dist/agent/dependencies.js +14 -0
  14. package/dist/agent/dependencies.js.map +1 -0
  15. package/dist/agent/index.d.ts +4 -0
  16. package/dist/agent/index.js +5 -0
  17. package/dist/agent/index.js.map +1 -0
  18. package/dist/agent/internals.d.ts +28 -0
  19. package/dist/agent/internals.js +160 -0
  20. package/dist/agent/internals.js.map +1 -0
  21. package/dist/agent/session.d.ts +4 -0
  22. package/dist/agent/session.js +2 -0
  23. package/dist/agent/session.js.map +1 -0
  24. package/dist/agent/types.d.ts +52 -0
  25. package/dist/agent/types.js +2 -0
  26. package/dist/agent/types.js.map +1 -0
  27. package/dist/agent-loop/agent-loop.d.ts +27 -0
  28. package/dist/agent-loop/agent-loop.js +2 -0
  29. package/dist/agent-loop/agent-loop.js.map +1 -0
  30. package/dist/agent-loop/index.d.ts +4 -0
  31. package/dist/agent-loop/index.js +5 -0
  32. package/dist/agent-loop/index.js.map +1 -0
  33. package/dist/agent-loop/pi-mono/events.d.ts +3 -0
  34. package/dist/agent-loop/pi-mono/events.js +73 -0
  35. package/dist/agent-loop/pi-mono/events.js.map +1 -0
  36. package/dist/agent-loop/pi-mono/index.d.ts +1 -0
  37. package/dist/agent-loop/pi-mono/index.js +2 -0
  38. package/dist/agent-loop/pi-mono/index.js.map +1 -0
  39. package/dist/agent-loop/pi-mono/input.d.ts +6 -0
  40. package/dist/agent-loop/pi-mono/input.js +120 -0
  41. package/dist/agent-loop/pi-mono/input.js.map +1 -0
  42. package/dist/agent-loop/pi-mono/model.d.ts +7 -0
  43. package/dist/agent-loop/pi-mono/model.js +72 -0
  44. package/dist/agent-loop/pi-mono/model.js.map +1 -0
  45. package/dist/agent-loop/pi-mono/pi-mono-loop.d.ts +11 -0
  46. package/dist/agent-loop/pi-mono/pi-mono-loop.js +167 -0
  47. package/dist/agent-loop/pi-mono/pi-mono-loop.js.map +1 -0
  48. package/dist/agent-loop/pi-mono/pi-mono-loop.test-helpers.d.ts +28 -0
  49. package/dist/agent-loop/pi-mono/pi-mono-loop.test-helpers.js +76 -0
  50. package/dist/agent-loop/pi-mono/pi-mono-loop.test-helpers.js.map +1 -0
  51. package/dist/agent-loop/pi-mono/queue.d.ts +9 -0
  52. package/dist/agent-loop/pi-mono/queue.js +37 -0
  53. package/dist/agent-loop/pi-mono/queue.js.map +1 -0
  54. package/dist/agent-loop/pi-mono/tools.d.ts +4 -0
  55. package/dist/agent-loop/pi-mono/tools.js +164 -0
  56. package/dist/agent-loop/pi-mono/tools.js.map +1 -0
  57. package/dist/agent-loop/pi-mono/utils.d.ts +14 -0
  58. package/dist/agent-loop/pi-mono/utils.js +83 -0
  59. package/dist/agent-loop/pi-mono/utils.js.map +1 -0
  60. package/dist/agent-loop/system-prompt/fill.d.ts +1 -0
  61. package/dist/agent-loop/system-prompt/fill.js +19 -0
  62. package/dist/agent-loop/system-prompt/fill.js.map +1 -0
  63. package/dist/agent-loop/system-prompt/generate.d.ts +11 -0
  64. package/dist/agent-loop/system-prompt/generate.js +21 -0
  65. package/dist/agent-loop/system-prompt/generate.js.map +1 -0
  66. package/dist/agent-loop/system-prompt/index.d.ts +2 -0
  67. package/dist/agent-loop/system-prompt/index.js +3 -0
  68. package/dist/agent-loop/system-prompt/index.js.map +1 -0
  69. package/dist/agent-loop/types.d.ts +77 -0
  70. package/dist/agent-loop/types.js +2 -0
  71. package/dist/agent-loop/types.js.map +1 -0
  72. package/dist/cli/build/build.d.ts +35 -0
  73. package/dist/cli/build/build.js +174 -0
  74. package/dist/cli/build/build.js.map +1 -0
  75. package/dist/cli/build/build.test-helpers.d.ts +9 -0
  76. package/dist/cli/build/build.test-helpers.js +50 -0
  77. package/dist/cli/build/build.test-helpers.js.map +1 -0
  78. package/dist/cli/build/codegen-commands.d.ts +16 -0
  79. package/dist/cli/build/codegen-commands.js +81 -0
  80. package/dist/cli/build/codegen-commands.js.map +1 -0
  81. package/dist/cli/build/codegen.d.ts +55 -0
  82. package/dist/cli/build/codegen.js +212 -0
  83. package/dist/cli/build/codegen.js.map +1 -0
  84. package/dist/cli/build/e2b-template.d.ts +38 -0
  85. package/dist/cli/build/e2b-template.js +210 -0
  86. package/dist/cli/build/e2b-template.js.map +1 -0
  87. package/dist/cli/build/e2b-template.test-helpers.d.ts +19 -0
  88. package/dist/cli/build/e2b-template.test-helpers.js +80 -0
  89. package/dist/cli/build/e2b-template.test-helpers.js.map +1 -0
  90. package/dist/cli/build/sandbox-image.d.ts +35 -0
  91. package/dist/cli/build/sandbox-image.js +57 -0
  92. package/dist/cli/build/sandbox-image.js.map +1 -0
  93. package/dist/cli/build-codegen.d.ts +41 -0
  94. package/dist/cli/build-codegen.js +168 -0
  95. package/dist/cli/build-codegen.js.map +1 -0
  96. package/dist/cli/build-e2b-template.d.ts +38 -0
  97. package/dist/cli/build-e2b-template.js +223 -0
  98. package/dist/cli/build-e2b-template.js.map +1 -0
  99. package/dist/cli/build-e2b-template.test-helpers.d.ts +19 -0
  100. package/dist/cli/build-e2b-template.test-helpers.js +80 -0
  101. package/dist/cli/build-e2b-template.test-helpers.js.map +1 -0
  102. package/dist/cli/build-sandbox-image.d.ts +35 -0
  103. package/dist/cli/build-sandbox-image.js +57 -0
  104. package/dist/cli/build-sandbox-image.js.map +1 -0
  105. package/dist/cli/build.d.ts +30 -0
  106. package/dist/cli/build.js +151 -0
  107. package/dist/cli/build.js.map +1 -0
  108. package/dist/cli/build.test-helpers.d.ts +9 -0
  109. package/dist/cli/build.test-helpers.js +50 -0
  110. package/dist/cli/build.test-helpers.js.map +1 -0
  111. package/dist/cli/config/load-bundle-config.d.ts +2 -0
  112. package/dist/cli/config/load-bundle-config.js +20 -0
  113. package/dist/cli/config/load-bundle-config.js.map +1 -0
  114. package/dist/cli/config/resolve-project-root.d.ts +1 -0
  115. package/dist/cli/config/resolve-project-root.js +19 -0
  116. package/dist/cli/config/resolve-project-root.js.map +1 -0
  117. package/dist/cli/deploy/aws-cli.d.ts +42 -0
  118. package/dist/cli/deploy/aws-cli.js +95 -0
  119. package/dist/cli/deploy/aws-cli.js.map +1 -0
  120. package/dist/cli/deploy/aws-ecr.d.ts +20 -0
  121. package/dist/cli/deploy/aws-ecr.js +97 -0
  122. package/dist/cli/deploy/aws-ecr.js.map +1 -0
  123. package/dist/cli/deploy/aws-ecs-infra.d.ts +39 -0
  124. package/dist/cli/deploy/aws-ecs-infra.js +169 -0
  125. package/dist/cli/deploy/aws-ecs-infra.js.map +1 -0
  126. package/dist/cli/deploy/aws-ecs-role.d.ts +9 -0
  127. package/dist/cli/deploy/aws-ecs-role.js +114 -0
  128. package/dist/cli/deploy/aws-ecs-role.js.map +1 -0
  129. package/dist/cli/deploy/aws-ecs-service.d.ts +37 -0
  130. package/dist/cli/deploy/aws-ecs-service.js +207 -0
  131. package/dist/cli/deploy/aws-ecs-service.js.map +1 -0
  132. package/dist/cli/deploy/aws-ecs-shared.d.ts +59 -0
  133. package/dist/cli/deploy/aws-ecs-shared.js +30 -0
  134. package/dist/cli/deploy/aws-ecs-shared.js.map +1 -0
  135. package/dist/cli/deploy/aws-ecs.d.ts +3 -0
  136. package/dist/cli/deploy/aws-ecs.js +141 -0
  137. package/dist/cli/deploy/aws-ecs.js.map +1 -0
  138. package/dist/cli/deploy/aws-prerequisites.d.ts +16 -0
  139. package/dist/cli/deploy/aws-prerequisites.js +28 -0
  140. package/dist/cli/deploy/aws-prerequisites.js.map +1 -0
  141. package/dist/cli/deploy/aws-teardown.d.ts +13 -0
  142. package/dist/cli/deploy/aws-teardown.js +204 -0
  143. package/dist/cli/deploy/aws-teardown.js.map +1 -0
  144. package/dist/cli/deploy/deploy.d.ts +36 -0
  145. package/dist/cli/deploy/deploy.js +209 -0
  146. package/dist/cli/deploy/deploy.js.map +1 -0
  147. package/dist/cli/error.d.ts +1 -0
  148. package/dist/cli/error.js +4 -0
  149. package/dist/cli/error.js.map +1 -0
  150. package/dist/cli/generate/generate.d.ts +37 -0
  151. package/dist/cli/generate/generate.js +121 -0
  152. package/dist/cli/generate/generate.js.map +1 -0
  153. package/dist/cli/generate.d.ts +32 -0
  154. package/dist/cli/generate.js +102 -0
  155. package/dist/cli/generate.js.map +1 -0
  156. package/dist/cli/index.d.ts +2 -0
  157. package/dist/cli/index.js +182 -0
  158. package/dist/cli/index.js.map +1 -0
  159. package/dist/cli/load-bundle-config.d.ts +2 -0
  160. package/dist/cli/load-bundle-config.js +20 -0
  161. package/dist/cli/load-bundle-config.js.map +1 -0
  162. package/dist/cli/resolve-project-root.d.ts +1 -0
  163. package/dist/cli/resolve-project-root.js +19 -0
  164. package/dist/cli/resolve-project-root.js.map +1 -0
  165. package/dist/cli/serve/dev.d.ts +6 -0
  166. package/dist/cli/serve/dev.js +73 -0
  167. package/dist/cli/serve/dev.js.map +1 -0
  168. package/dist/cli/serve/http.d.ts +12 -0
  169. package/dist/cli/serve/http.js +123 -0
  170. package/dist/cli/serve/http.js.map +1 -0
  171. package/dist/cli/serve/init.d.ts +42 -0
  172. package/dist/cli/serve/init.js +110 -0
  173. package/dist/cli/serve/init.js.map +1 -0
  174. package/dist/cli/serve/runtime.d.ts +25 -0
  175. package/dist/cli/serve/runtime.js +142 -0
  176. package/dist/cli/serve/runtime.js.map +1 -0
  177. package/dist/cli/serve/serve.d.ts +7 -0
  178. package/dist/cli/serve/serve.js +63 -0
  179. package/dist/cli/serve/serve.js.map +1 -0
  180. package/dist/cli/serve/serve.test-helpers.d.ts +36 -0
  181. package/dist/cli/serve/serve.test-helpers.js +205 -0
  182. package/dist/cli/serve/serve.test-helpers.js.map +1 -0
  183. package/dist/cli/serve/worktree-port.d.ts +36 -0
  184. package/dist/cli/serve/worktree-port.js +124 -0
  185. package/dist/cli/serve/worktree-port.js.map +1 -0
  186. package/dist/cli/serve-http.d.ts +12 -0
  187. package/dist/cli/serve-http.js +112 -0
  188. package/dist/cli/serve-http.js.map +1 -0
  189. package/dist/cli/serve-runtime.d.ts +16 -0
  190. package/dist/cli/serve-runtime.js +122 -0
  191. package/dist/cli/serve-runtime.js.map +1 -0
  192. package/dist/cli/serve.d.ts +33 -0
  193. package/dist/cli/serve.js +150 -0
  194. package/dist/cli/serve.js.map +1 -0
  195. package/dist/cli/serve.test-helpers.d.ts +30 -0
  196. package/dist/cli/serve.test-helpers.js +145 -0
  197. package/dist/cli/serve.test-helpers.js.map +1 -0
  198. package/dist/code-formatter/bundle.json +41 -0
  199. package/dist/code-formatter/index.ts +26 -0
  200. package/dist/code-formatter/package.json +10 -0
  201. package/dist/code-formatter/types.ts +2 -0
  202. package/dist/code-formatter-e2b/bundle.json +40 -0
  203. package/dist/code-formatter-e2b/index.ts +25 -0
  204. package/dist/code-formatter-e2b/package.json +10 -0
  205. package/dist/code-formatter-e2b/types.ts +2 -0
  206. package/dist/coding-assistant-ollama/bundle.json +43 -0
  207. package/dist/coding-assistant-ollama/index.ts +28 -0
  208. package/dist/coding-assistant-ollama/package.json +10 -0
  209. package/dist/coding-assistant-ollama/types.ts +2 -0
  210. package/dist/commands/find.d.ts +8 -0
  211. package/dist/commands/find.js +11 -0
  212. package/dist/commands/find.js.map +1 -0
  213. package/dist/commands/loader.d.ts +13 -0
  214. package/dist/commands/loader.js +163 -0
  215. package/dist/commands/loader.js.map +1 -0
  216. package/dist/commands/types.d.ts +7 -0
  217. package/dist/commands/types.js +2 -0
  218. package/dist/commands/types.js.map +1 -0
  219. package/dist/commands/with-commands.d.ts +6 -0
  220. package/dist/commands/with-commands.js +19 -0
  221. package/dist/commands/with-commands.js.map +1 -0
  222. package/dist/data-analyst/bundle.json +40 -0
  223. package/dist/data-analyst/index.ts +25 -0
  224. package/dist/data-analyst/package.json +10 -0
  225. package/dist/data-analyst/types.ts +2 -0
  226. package/dist/financial-analyst/bundle.json +40 -0
  227. package/dist/financial-analyst/index.ts +25 -0
  228. package/dist/financial-analyst/package.json +10 -0
  229. package/dist/financial-analyst/types.ts +2 -0
  230. package/dist/mcp/client-manager.d.ts +26 -0
  231. package/dist/mcp/client-manager.js +101 -0
  232. package/dist/mcp/client-manager.js.map +1 -0
  233. package/dist/mcp/connect-server.d.ts +21 -0
  234. package/dist/mcp/connect-server.js +170 -0
  235. package/dist/mcp/connect-server.js.map +1 -0
  236. package/dist/mcp/index.d.ts +2 -0
  237. package/dist/mcp/index.js +3 -0
  238. package/dist/mcp/index.js.map +1 -0
  239. package/dist/mcp/sandbox-stdio-transport.d.ts +32 -0
  240. package/dist/mcp/sandbox-stdio-transport.js +199 -0
  241. package/dist/mcp/sandbox-stdio-transport.js.map +1 -0
  242. package/dist/observability/hooks.d.ts +10 -0
  243. package/dist/observability/hooks.js +97 -0
  244. package/dist/observability/hooks.js.map +1 -0
  245. package/dist/observability/index.d.ts +6 -0
  246. package/dist/observability/index.js +7 -0
  247. package/dist/observability/index.js.map +1 -0
  248. package/dist/observability/metrics.d.ts +31 -0
  249. package/dist/observability/metrics.js +61 -0
  250. package/dist/observability/metrics.js.map +1 -0
  251. package/dist/observability/middleware.d.ts +12 -0
  252. package/dist/observability/middleware.js +45 -0
  253. package/dist/observability/middleware.js.map +1 -0
  254. package/dist/observability/otel-harness.test-util.d.ts +37 -0
  255. package/dist/observability/otel-harness.test-util.js +96 -0
  256. package/dist/observability/otel-harness.test-util.js.map +1 -0
  257. package/dist/observability/provider.d.ts +8 -0
  258. package/dist/observability/provider.js +19 -0
  259. package/dist/observability/provider.js.map +1 -0
  260. package/dist/observability/tracing.d.ts +14 -0
  261. package/dist/observability/tracing.js +40 -0
  262. package/dist/observability/tracing.js.map +1 -0
  263. package/dist/observability/types.d.ts +39 -0
  264. package/dist/observability/types.js +31 -0
  265. package/dist/observability/types.js.map +1 -0
  266. package/dist/personalized-recommend/bundle.json +64 -0
  267. package/dist/personalized-recommend/index.ts +41 -0
  268. package/dist/personalized-recommend/package.json +10 -0
  269. package/dist/personalized-recommend/types.ts +2 -0
  270. package/dist/plugins/loader.d.ts +11 -0
  271. package/dist/plugins/loader.js +100 -0
  272. package/dist/plugins/loader.js.map +1 -0
  273. package/dist/plugins/merge.d.ts +10 -0
  274. package/dist/plugins/merge.js +22 -0
  275. package/dist/plugins/merge.js.map +1 -0
  276. package/dist/plugins/parse.d.ts +10 -0
  277. package/dist/plugins/parse.js +139 -0
  278. package/dist/plugins/parse.js.map +1 -0
  279. package/dist/plugins/types.d.ts +28 -0
  280. package/dist/plugins/types.js +2 -0
  281. package/dist/plugins/types.js.map +1 -0
  282. package/dist/plugins/urls.d.ts +7 -0
  283. package/dist/plugins/urls.js +40 -0
  284. package/dist/plugins/urls.js.map +1 -0
  285. package/dist/runtime.d.ts +5 -0
  286. package/dist/runtime.js +3 -0
  287. package/dist/runtime.js.map +1 -0
  288. package/dist/sandbox/factory.d.ts +2 -0
  289. package/dist/sandbox/factory.js +27 -0
  290. package/dist/sandbox/factory.js.map +1 -0
  291. package/dist/sandbox/index.d.ts +4 -0
  292. package/dist/sandbox/index.js +5 -0
  293. package/dist/sandbox/index.js.map +1 -0
  294. package/dist/sandbox/providers/e2b.d.ts +28 -0
  295. package/dist/sandbox/providers/e2b.js +294 -0
  296. package/dist/sandbox/providers/e2b.js.map +1 -0
  297. package/dist/sandbox/providers/kubernetes-command-run.d.ts +8 -0
  298. package/dist/sandbox/providers/kubernetes-command-run.js +195 -0
  299. package/dist/sandbox/providers/kubernetes-command-run.js.map +1 -0
  300. package/dist/sandbox/providers/kubernetes-helpers.d.ts +31 -0
  301. package/dist/sandbox/providers/kubernetes-helpers.js +152 -0
  302. package/dist/sandbox/providers/kubernetes-helpers.js.map +1 -0
  303. package/dist/sandbox/providers/kubernetes-kubeconfig.d.ts +7 -0
  304. package/dist/sandbox/providers/kubernetes-kubeconfig.js +51 -0
  305. package/dist/sandbox/providers/kubernetes-kubeconfig.js.map +1 -0
  306. package/dist/sandbox/providers/kubernetes-spawn.d.ts +2 -0
  307. package/dist/sandbox/providers/kubernetes-spawn.js +42 -0
  308. package/dist/sandbox/providers/kubernetes-spawn.js.map +1 -0
  309. package/dist/sandbox/providers/kubernetes-spawn.utils.d.ts +32 -0
  310. package/dist/sandbox/providers/kubernetes-spawn.utils.js +249 -0
  311. package/dist/sandbox/providers/kubernetes-spawn.utils.js.map +1 -0
  312. package/dist/sandbox/providers/kubernetes.constants.d.ts +3 -0
  313. package/dist/sandbox/providers/kubernetes.constants.js +4 -0
  314. package/dist/sandbox/providers/kubernetes.constants.js.map +1 -0
  315. package/dist/sandbox/providers/kubernetes.d.ts +37 -0
  316. package/dist/sandbox/providers/kubernetes.js +258 -0
  317. package/dist/sandbox/providers/kubernetes.js.map +1 -0
  318. package/dist/sandbox/types.d.ts +57 -0
  319. package/dist/sandbox/types.js +2 -0
  320. package/dist/sandbox/types.js.map +1 -0
  321. package/dist/sandbox/utils.d.ts +1 -0
  322. package/dist/sandbox/utils.js +4 -0
  323. package/dist/sandbox/utils.js.map +1 -0
  324. package/dist/schema/bundle.d.ts +143 -0
  325. package/dist/schema/bundle.js +203 -0
  326. package/dist/schema/bundle.js.map +1 -0
  327. package/dist/service/command-routes.d.ts +8 -0
  328. package/dist/service/command-routes.js +44 -0
  329. package/dist/service/command-routes.js.map +1 -0
  330. package/dist/service/create-server.d.ts +9 -0
  331. package/dist/service/create-server.js +113 -0
  332. package/dist/service/create-server.js.map +1 -0
  333. package/dist/service/index.d.ts +1 -0
  334. package/dist/service/index.js +2 -0
  335. package/dist/service/index.js.map +1 -0
  336. package/dist/skills/index.d.ts +1 -0
  337. package/dist/skills/index.js +2 -0
  338. package/dist/skills/index.js.map +1 -0
  339. package/dist/skills/loader.d.ts +18 -0
  340. package/dist/skills/loader.js +142 -0
  341. package/dist/skills/loader.js.map +1 -0
  342. package/dist/skills/summaries.d.ts +8 -0
  343. package/dist/skills/summaries.js +9 -0
  344. package/dist/skills/summaries.js.map +1 -0
  345. package/dist/test-helpers/env.d.ts +2 -0
  346. package/dist/test-helpers/env.js +20 -0
  347. package/dist/test-helpers/env.js.map +1 -0
  348. package/dist/test-helpers/mock-agent.d.ts +56 -0
  349. package/dist/test-helpers/mock-agent.js +180 -0
  350. package/dist/test-helpers/mock-agent.js.map +1 -0
  351. package/dist/test-helpers/mock-sandbox.d.ts +33 -0
  352. package/dist/test-helpers/mock-sandbox.js +200 -0
  353. package/dist/test-helpers/mock-sandbox.js.map +1 -0
  354. package/dist/tui/index.d.ts +2 -0
  355. package/dist/tui/index.js +3 -0
  356. package/dist/tui/index.js.map +1 -0
  357. package/dist/tui/render.d.ts +8 -0
  358. package/dist/tui/render.js +40 -0
  359. package/dist/tui/render.js.map +1 -0
  360. package/dist/tui/tui.d.ts +19 -0
  361. package/dist/tui/tui.js +133 -0
  362. package/dist/tui/tui.js.map +1 -0
  363. package/dist/webui/create-webui-server.d.ts +22 -0
  364. package/dist/webui/create-webui-server.js +293 -0
  365. package/dist/webui/create-webui-server.js.map +1 -0
  366. package/dist/webui/event-bus.d.ts +16 -0
  367. package/dist/webui/event-bus.js +24 -0
  368. package/dist/webui/event-bus.js.map +1 -0
  369. package/dist/webui/index.d.ts +2 -0
  370. package/dist/webui/index.js +3 -0
  371. package/dist/webui/index.js.map +1 -0
  372. package/dist/webui/public/app.js +847 -0
  373. package/dist/webui/public/file-transfer.js +114 -0
  374. package/dist/webui/public/index.html +166 -0
  375. package/dist/webui/public/styles.css +1678 -0
  376. package/package.json +99 -0
@@ -0,0 +1,56 @@
1
+ import type { ResponseEvent, ResponseInput, ResponseOutput } from "../agent-loop/types.js";
2
+ import type { Agent, AgentStatus, RespondStreamOptions } from "../agent/types.js";
3
+ export type DemoScenarioStep = {
4
+ type: "text";
5
+ content: string;
6
+ delayMs?: number;
7
+ } | {
8
+ type: "tool_call";
9
+ name: string;
10
+ delayMs?: number;
11
+ } | {
12
+ type: "tool_result";
13
+ output: string;
14
+ isError?: boolean;
15
+ } | {
16
+ type: "tool_execution_update";
17
+ chunk: string;
18
+ delayMs?: number;
19
+ } | {
20
+ type: "file_write";
21
+ path: string;
22
+ content: string;
23
+ };
24
+ export type DemoScenario = {
25
+ name: string;
26
+ description: string;
27
+ /** Keyword patterns to match user input against this scenario. */
28
+ triggers: string[];
29
+ steps: DemoScenarioStep[];
30
+ };
31
+ export type MockAgentOptions = {
32
+ name: string;
33
+ scenarios: DemoScenario[];
34
+ /** Fallback message when no scenario matches. */
35
+ fallbackMessage?: string;
36
+ /** Callback when agent "writes" a file (for sandbox sync). */
37
+ onFileWrite?: (path: string, content: string) => Promise<void>;
38
+ };
39
+ /**
40
+ * Mock agent for demo purposes. Does not call any LLM or sandbox.
41
+ * Instead, plays back scripted scenarios matching user input.
42
+ */
43
+ export declare class MockAgent implements Agent {
44
+ readonly name: string;
45
+ private statusValue;
46
+ private readonly scenarios;
47
+ private readonly fallbackMessage;
48
+ private readonly onFileWrite?;
49
+ constructor(options: MockAgentOptions);
50
+ get status(): AgentStatus;
51
+ respond(input: ResponseInput): Promise<ResponseOutput>;
52
+ respondStream(input: ResponseInput, options?: RespondStreamOptions): AsyncIterable<ResponseEvent>;
53
+ shutdown(): Promise<void>;
54
+ private playScenario;
55
+ private streamText;
56
+ }
@@ -0,0 +1,180 @@
1
+ import { randomUUID } from "node:crypto";
2
+ function sleep(ms) {
3
+ return new Promise((resolve) => setTimeout(resolve, ms));
4
+ }
5
+ function matchScenario(input, scenarios) {
6
+ const lowered = input.toLowerCase();
7
+ for (const scenario of scenarios) {
8
+ for (const trigger of scenario.triggers) {
9
+ if (lowered.includes(trigger.toLowerCase())) {
10
+ return scenario;
11
+ }
12
+ }
13
+ }
14
+ return null;
15
+ }
16
+ function extractUserText(input) {
17
+ for (let i = input.length - 1; i >= 0; i--) {
18
+ const msg = input[i];
19
+ if (msg.role !== "user")
20
+ continue;
21
+ // Plain string content (matches the declared type)
22
+ if (typeof msg.content === "string") {
23
+ return msg.content;
24
+ }
25
+ // The WebSocket handler passes unvalidated JSON, so at runtime content may
26
+ // be an array of input parts (e.g. [{ type: "input_text", text: "..." }]).
27
+ // Cast through unknown to handle this gracefully.
28
+ const raw = msg.content;
29
+ if (Array.isArray(raw)) {
30
+ for (const part of raw) {
31
+ if (typeof part === "object" &&
32
+ part !== null &&
33
+ part.type === "input_text" &&
34
+ typeof part.text === "string") {
35
+ return part.text;
36
+ }
37
+ }
38
+ }
39
+ }
40
+ return "";
41
+ }
42
+ /**
43
+ * Mock agent for demo purposes. Does not call any LLM or sandbox.
44
+ * Instead, plays back scripted scenarios matching user input.
45
+ */
46
+ export class MockAgent {
47
+ name;
48
+ statusValue = "ready";
49
+ scenarios;
50
+ fallbackMessage;
51
+ onFileWrite;
52
+ constructor(options) {
53
+ this.name = options.name;
54
+ this.scenarios = options.scenarios;
55
+ this.fallbackMessage = options.fallbackMessage ??
56
+ "I'm a demo agent. Try asking me to analyze data, format code, or convert a document.";
57
+ this.onFileWrite = options.onFileWrite;
58
+ }
59
+ get status() {
60
+ return this.statusValue;
61
+ }
62
+ async respond(input) {
63
+ let output = null;
64
+ for await (const event of this.respondStream(input)) {
65
+ if (event.type === "response.completed") {
66
+ output = event.output;
67
+ }
68
+ if (event.type === "response.error") {
69
+ throw new Error(event.error);
70
+ }
71
+ }
72
+ if (!output) {
73
+ throw new Error("MockAgent did not produce a response.");
74
+ }
75
+ return output;
76
+ }
77
+ async *respondStream(input, options) {
78
+ const signal = options?.signal;
79
+ this.statusValue = "running";
80
+ const responseId = `mock-${randomUUID()}`;
81
+ try {
82
+ yield { type: "response.created", responseId };
83
+ const userText = extractUserText(input);
84
+ const scenario = matchScenario(userText, this.scenarios);
85
+ if (!scenario) {
86
+ yield* this.streamText(this.fallbackMessage, signal);
87
+ }
88
+ else {
89
+ yield* this.playScenario(scenario, signal);
90
+ }
91
+ const outputText = scenario
92
+ ? scenario.steps
93
+ .filter((s) => s.type === "text")
94
+ .map((s) => s.content)
95
+ .join("")
96
+ : this.fallbackMessage;
97
+ const responseOutput = {
98
+ id: responseId,
99
+ output: outputText,
100
+ };
101
+ yield {
102
+ type: "response.completed",
103
+ output: responseOutput,
104
+ };
105
+ }
106
+ finally {
107
+ const currentStatus = this.statusValue;
108
+ if (currentStatus !== "stopped") {
109
+ this.statusValue = "ready";
110
+ }
111
+ }
112
+ }
113
+ async shutdown() {
114
+ this.statusValue = "stopped";
115
+ }
116
+ // ---------------------------------------------------------------------------
117
+ // Scenario playback
118
+ // ---------------------------------------------------------------------------
119
+ async *playScenario(scenario, signal) {
120
+ let toolCallCounter = 0;
121
+ for (const step of scenario.steps) {
122
+ if (signal?.aborted)
123
+ break;
124
+ switch (step.type) {
125
+ case "text":
126
+ yield* this.streamText(step.content, signal, step.delayMs);
127
+ break;
128
+ case "tool_call": {
129
+ const callId = `mock-call-${++toolCallCounter}`;
130
+ yield {
131
+ type: "response.tool_call.created",
132
+ toolCall: { id: callId, name: step.name, input: {} },
133
+ };
134
+ if (step.delayMs)
135
+ await sleep(step.delayMs);
136
+ break;
137
+ }
138
+ case "tool_result":
139
+ yield {
140
+ type: "response.tool_call.done",
141
+ result: { toolCallId: `mock-call-${toolCallCounter}`, output: step.output, isError: step.isError ?? false },
142
+ };
143
+ break;
144
+ case "tool_execution_update":
145
+ yield {
146
+ type: "tool_execution_update",
147
+ toolCallId: `mock-call-${toolCallCounter}`,
148
+ chunk: step.chunk,
149
+ };
150
+ if (step.delayMs)
151
+ await sleep(step.delayMs);
152
+ break;
153
+ case "file_write":
154
+ if (this.onFileWrite) {
155
+ await this.onFileWrite(step.path, step.content);
156
+ }
157
+ break;
158
+ }
159
+ }
160
+ }
161
+ async *streamText(text, signal, delayMs) {
162
+ // Stream character by character for realistic typing effect
163
+ const chunkSize = 3;
164
+ for (let i = 0; i < text.length; i += chunkSize) {
165
+ if (signal?.aborted)
166
+ break;
167
+ const chunk = text.slice(i, i + chunkSize);
168
+ yield {
169
+ type: "response.output_text.delta",
170
+ delta: chunk,
171
+ };
172
+ await sleep(delayMs ?? 15);
173
+ }
174
+ yield {
175
+ type: "response.output_text.done",
176
+ text,
177
+ };
178
+ }
179
+ }
180
+ //# sourceMappingURL=mock-agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-agent.js","sourceRoot":"","sources":["../../src/test-helpers/mock-agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import type { ExecOptions, ExecResult, FileEntry, Sandbox, SandboxStatus } from "../sandbox/types.js";
2
+ /**
3
+ * In-memory `Sandbox` implementation for testing and demo purposes.
4
+ *
5
+ * All file and directory operations run against internal `Map` / `Set`
6
+ * data structures -- no real filesystem or network access is involved.
7
+ */
8
+ export declare class MockSandbox implements Sandbox {
9
+ readonly id: string;
10
+ private currentStatus;
11
+ private readonly files;
12
+ private readonly directories;
13
+ constructor();
14
+ get status(): SandboxStatus;
15
+ start(): Promise<void>;
16
+ shutdown(): Promise<void>;
17
+ exec(command: string, opts?: ExecOptions): Promise<ExecResult>;
18
+ readonly file: {
19
+ read: (path: string) => Promise<string>;
20
+ write: (path: string, content: string | Buffer) => Promise<void>;
21
+ list: (path: string) => Promise<FileEntry[]>;
22
+ delete: (path: string) => Promise<void>;
23
+ };
24
+ /**
25
+ * Seeds the in-memory filesystem with additional files.
26
+ *
27
+ * Keys are absolute paths; values are file contents.
28
+ * Ancestor directories are created automatically.
29
+ */
30
+ prePopulate(files: Record<string, string>): void;
31
+ private seedDefaults;
32
+ private assertReady;
33
+ }
@@ -0,0 +1,200 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { posix } from "node:path";
3
+ const DEFAULT_FILES = {
4
+ "/workspace/README.md": [
5
+ "# Workspace",
6
+ "",
7
+ "This is the default sandbox workspace.",
8
+ "Place your project files here to get started.",
9
+ "",
10
+ ].join("\n"),
11
+ };
12
+ const DEFAULT_DIRECTORIES = ["/workspace", "/workspace/data"];
13
+ /**
14
+ * Normalizes a filesystem path by resolving `.` and `..` segments
15
+ * and stripping any trailing slash (except for root `/`).
16
+ */
17
+ function normalizePath(raw) {
18
+ const resolved = posix.normalize(raw);
19
+ return resolved.length > 1 && resolved.endsWith("/")
20
+ ? resolved.slice(0, -1)
21
+ : resolved;
22
+ }
23
+ /**
24
+ * Collects every ancestor directory of `filePath` (excluding root `/`).
25
+ *
26
+ * Example: `/workspace/data/report.csv` yields
27
+ * `["/workspace", "/workspace/data"]`.
28
+ */
29
+ function ancestorDirectories(filePath) {
30
+ const ancestors = [];
31
+ let current = posix.dirname(filePath);
32
+ while (current !== "/") {
33
+ ancestors.push(current);
34
+ current = posix.dirname(current);
35
+ }
36
+ return ancestors;
37
+ }
38
+ /**
39
+ * In-memory `Sandbox` implementation for testing and demo purposes.
40
+ *
41
+ * All file and directory operations run against internal `Map` / `Set`
42
+ * data structures -- no real filesystem or network access is involved.
43
+ */
44
+ export class MockSandbox {
45
+ id;
46
+ currentStatus = "idle";
47
+ files;
48
+ directories;
49
+ constructor() {
50
+ this.id = `mock-${randomUUID()}`;
51
+ this.files = new Map();
52
+ this.directories = new Set();
53
+ this.seedDefaults();
54
+ }
55
+ // ---------------------------------------------------------------------------
56
+ // Sandbox status
57
+ // ---------------------------------------------------------------------------
58
+ get status() {
59
+ return this.currentStatus;
60
+ }
61
+ async start() {
62
+ if (this.currentStatus === "ready") {
63
+ return;
64
+ }
65
+ if (this.currentStatus === "starting" || this.currentStatus === "stopping") {
66
+ throw new Error(`Cannot start mock sandbox while status is "${this.currentStatus}".`);
67
+ }
68
+ this.currentStatus = "starting";
69
+ this.currentStatus = "ready";
70
+ }
71
+ async shutdown() {
72
+ if (this.currentStatus === "stopped") {
73
+ return;
74
+ }
75
+ this.currentStatus = "stopping";
76
+ this.currentStatus = "stopped";
77
+ }
78
+ // ---------------------------------------------------------------------------
79
+ // exec
80
+ // ---------------------------------------------------------------------------
81
+ async exec(command, opts) {
82
+ void opts;
83
+ this.assertReady();
84
+ return {
85
+ stdout: `[mock] ${command}\n`,
86
+ stderr: "",
87
+ exitCode: 0,
88
+ };
89
+ }
90
+ // ---------------------------------------------------------------------------
91
+ // file operations
92
+ // ---------------------------------------------------------------------------
93
+ file = {
94
+ read: async (path) => {
95
+ this.assertReady();
96
+ const normalized = normalizePath(path);
97
+ const content = this.files.get(normalized);
98
+ if (content === undefined) {
99
+ throw new Error(`ENOENT: no such file "${normalized}".`);
100
+ }
101
+ return content;
102
+ },
103
+ write: async (path, content) => {
104
+ this.assertReady();
105
+ const normalized = normalizePath(path);
106
+ const payload = typeof content === "string" ? content : content.toString("utf8");
107
+ // Ensure all ancestor directories exist.
108
+ for (const dir of ancestorDirectories(normalized)) {
109
+ this.directories.add(dir);
110
+ }
111
+ this.files.set(normalized, payload);
112
+ },
113
+ list: async (path) => {
114
+ this.assertReady();
115
+ const normalized = normalizePath(path);
116
+ if (!this.directories.has(normalized)) {
117
+ throw new Error(`ENOENT: no such directory "${normalized}".`);
118
+ }
119
+ const entries = [];
120
+ const seen = new Set();
121
+ // Collect direct child files.
122
+ for (const filePath of this.files.keys()) {
123
+ if (posix.dirname(filePath) === normalized) {
124
+ const name = posix.basename(filePath);
125
+ if (!seen.has(name)) {
126
+ seen.add(name);
127
+ entries.push({ name, path: filePath, type: "file" });
128
+ }
129
+ }
130
+ }
131
+ // Collect direct child directories.
132
+ for (const dirPath of this.directories) {
133
+ if (posix.dirname(dirPath) === normalized) {
134
+ const name = posix.basename(dirPath);
135
+ if (!seen.has(name)) {
136
+ seen.add(name);
137
+ entries.push({ name, path: dirPath, type: "directory" });
138
+ }
139
+ }
140
+ }
141
+ entries.sort((a, b) => a.name.localeCompare(b.name));
142
+ return entries;
143
+ },
144
+ delete: async (path) => {
145
+ this.assertReady();
146
+ const normalized = normalizePath(path);
147
+ // Delete exact file match.
148
+ this.files.delete(normalized);
149
+ // Recursively delete directory and everything beneath it.
150
+ if (this.directories.has(normalized)) {
151
+ const prefix = `${normalized}/`;
152
+ for (const filePath of [...this.files.keys()]) {
153
+ if (filePath.startsWith(prefix)) {
154
+ this.files.delete(filePath);
155
+ }
156
+ }
157
+ for (const dirPath of [...this.directories]) {
158
+ if (dirPath === normalized || dirPath.startsWith(prefix)) {
159
+ this.directories.delete(dirPath);
160
+ }
161
+ }
162
+ }
163
+ },
164
+ };
165
+ // ---------------------------------------------------------------------------
166
+ // Test-helper API
167
+ // ---------------------------------------------------------------------------
168
+ /**
169
+ * Seeds the in-memory filesystem with additional files.
170
+ *
171
+ * Keys are absolute paths; values are file contents.
172
+ * Ancestor directories are created automatically.
173
+ */
174
+ prePopulate(files) {
175
+ for (const [rawPath, content] of Object.entries(files)) {
176
+ const normalized = normalizePath(rawPath);
177
+ for (const dir of ancestorDirectories(normalized)) {
178
+ this.directories.add(dir);
179
+ }
180
+ this.files.set(normalized, content);
181
+ }
182
+ }
183
+ // ---------------------------------------------------------------------------
184
+ // Internals
185
+ // ---------------------------------------------------------------------------
186
+ seedDefaults() {
187
+ for (const dir of DEFAULT_DIRECTORIES) {
188
+ this.directories.add(dir);
189
+ }
190
+ for (const [path, content] of Object.entries(DEFAULT_FILES)) {
191
+ this.files.set(path, content);
192
+ }
193
+ }
194
+ assertReady() {
195
+ if (this.currentStatus !== "ready") {
196
+ throw new Error(`Mock sandbox is not ready (current status: "${this.currentStatus}").`);
197
+ }
198
+ }
199
+ }
200
+ //# sourceMappingURL=mock-sandbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-sandbox.js","sourceRoot":"","sources":["../../src/test-helpers/mock-sandbox.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAUlC,MAAM,aAAa,GAA2B;IAC5C,sBAAsB,EAAE;QACtB,aAAa;QACb,EAAE;QACF,wCAAwC;QACxC,+CAA+C;QAC/C,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC;CACb,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;AAE9D;;;GAGG;AACH,SAAS,aAAa,CAAC,GAAW;IAChC,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACtC,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC;QAClD,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACvB,CAAC,CAAC,QAAQ,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,SAAS,mBAAmB,CAAC,QAAgB;IAC3C,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEtC,OAAO,OAAO,KAAK,GAAG,EAAE,CAAC;QACvB,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxB,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;GAKG;AACH,MAAM,OAAO,WAAW;IACN,EAAE,CAAS;IAEnB,aAAa,GAAkB,MAAM,CAAC;IAC7B,KAAK,CAAsB;IAC3B,WAAW,CAAc;IAE1C;QACE,IAAI,CAAC,EAAE,GAAG,QAAQ,UAAU,EAAE,EAAE,CAAC;QACjC,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;QACvC,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;QAErC,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAED,8EAA8E;IAC9E,iBAAiB;IACjB,8EAA8E;IAE9E,IAAW,MAAM;QACf,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAEM,KAAK,CAAC,KAAK;QAChB,IAAI,IAAI,CAAC,aAAa,KAAK,OAAO,EAAE,CAAC;YACnC,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,aAAa,KAAK,UAAU,IAAI,IAAI,CAAC,aAAa,KAAK,UAAU,EAAE,CAAC;YAC3E,MAAM,IAAI,KAAK,CAAC,8CAA8C,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC;QACxF,CAAC;QAED,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC;QAChC,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC;IAC/B,CAAC;IAEM,KAAK,CAAC,QAAQ;QACnB,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YACrC,OAAO;QACT,CAAC;QAED,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC;QAChC,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;IACjC,CAAC;IAED,8EAA8E;IAC9E,OAAO;IACP,8EAA8E;IAEvE,KAAK,CAAC,IAAI,CAAC,OAAe,EAAE,IAAkB;QACnD,KAAK,IAAI,CAAC;QACV,IAAI,CAAC,WAAW,EAAE,CAAC;QAEnB,OAAO;YACL,MAAM,EAAE,UAAU,OAAO,IAAI;YAC7B,MAAM,EAAE,EAAE;YACV,QAAQ,EAAE,CAAC;SACZ,CAAC;IACJ,CAAC;IAED,8EAA8E;IAC9E,kBAAkB;IAClB,8EAA8E;IAE9D,IAAI,GAAG;QACrB,IAAI,EAAE,KAAK,EAAE,IAAY,EAAmB,EAAE;YAC5C,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;YACvC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAE3C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,MAAM,IAAI,KAAK,CAAC,yBAAyB,UAAU,IAAI,CAAC,CAAC;YAC3D,CAAC;YAED,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,KAAK,EAAE,KAAK,EAAE,IAAY,EAAE,OAAwB,EAAiB,EAAE;YACrE,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;YACvC,MAAM,OAAO,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAEjF,yCAAyC;YACzC,KAAK,MAAM,GAAG,IAAI,mBAAmB,CAAC,UAAU,CAAC,EAAE,CAAC;gBAClD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC5B,CAAC;YAED,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACtC,CAAC;QAED,IAAI,EAAE,KAAK,EAAE,IAAY,EAAwB,EAAE;YACjD,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;YAEvC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;gBACtC,MAAM,IAAI,KAAK,CAAC,8BAA8B,UAAU,IAAI,CAAC,CAAC;YAChE,CAAC;YAED,MAAM,OAAO,GAAgB,EAAE,CAAC;YAChC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;YAE/B,8BAA8B;YAC9B,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;gBACzC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,UAAU,EAAE,CAAC;oBAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBAEtC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;wBACpB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;wBACf,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;oBACvD,CAAC;gBACH,CAAC;YACH,CAAC;YAED,oCAAoC;YACpC,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACvC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,UAAU,EAAE,CAAC;oBAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;oBAErC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;wBACpB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;wBACf,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;oBAC3D,CAAC;gBACH,CAAC;YACH,CAAC;YAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YAErD,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,MAAM,EAAE,KAAK,EAAE,IAAY,EAAiB,EAAE;YAC5C,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;YAEvC,2BAA2B;YAC3B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAE9B,0DAA0D;YAC1D,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;gBACrC,MAAM,MAAM,GAAG,GAAG,UAAU,GAAG,CAAC;gBAEhC,KAAK,MAAM,QAAQ,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;oBAC9C,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;wBAChC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;oBAC9B,CAAC;gBACH,CAAC;gBAED,KAAK,MAAM,OAAO,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;oBAC5C,IAAI,OAAO,KAAK,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;wBACzD,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;oBACnC,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;KACF,CAAC;IAEF,8EAA8E;IAC9E,kBAAkB;IAClB,8EAA8E;IAE9E;;;;;OAKG;IACI,WAAW,CAAC,KAA6B;QAC9C,KAAK,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACvD,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;YAE1C,KAAK,MAAM,GAAG,IAAI,mBAAmB,CAAC,UAAU,CAAC,EAAE,CAAC;gBAClD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC5B,CAAC;YAED,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,8EAA8E;IAC9E,YAAY;IACZ,8EAA8E;IAEtE,YAAY;QAClB,KAAK,MAAM,GAAG,IAAI,mBAAmB,EAAE,CAAC;YACtC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;QAED,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;YAC5D,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAEO,WAAW;QACjB,IAAI,IAAI,CAAC,aAAa,KAAK,OAAO,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,+CAA+C,IAAI,CAAC,aAAa,KAAK,CAAC,CAAC;QAC1F,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export * from "./render.js";
2
+ export * from "./tui.js";
@@ -0,0 +1,3 @@
1
+ export * from "./render.js";
2
+ export * from "./tui.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tui/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { ResponseEvent } from "../agent-loop/types.js";
2
+ export declare function renderEvent(event: ResponseEvent): string;
3
+ export declare function renderReady(agentName: string): string;
4
+ export declare function renderInterrupted(): string;
5
+ export declare function renderShuttingDown(): string;
6
+ export declare function renderExitHint(): string;
7
+ export declare function renderError(message: string): string;
8
+ export declare function renderCommandNotFound(name: string): string;
@@ -0,0 +1,40 @@
1
+ import chalk from "chalk";
2
+ export function renderEvent(event) {
3
+ switch (event.type) {
4
+ case "response.output_text.delta":
5
+ return event.delta;
6
+ case "response.tool_call.created":
7
+ return chalk.dim(`\n[tool: ${event.toolCall.name}] running...\n`);
8
+ case "response.tool_call.done":
9
+ return event.result.isError
10
+ ? chalk.red(`[tool error] ${String(event.result.output)}\n`)
11
+ : chalk.dim("[tool: done]\n");
12
+ case "tool_execution_update":
13
+ return chalk.dim(event.chunk);
14
+ case "response.error":
15
+ return chalk.red(`\nError: ${event.error}\n`);
16
+ case "response.created":
17
+ case "response.output_text.done":
18
+ case "response.completed":
19
+ return "";
20
+ }
21
+ }
22
+ export function renderReady(agentName) {
23
+ return chalk.green(`Agent "${agentName}" is ready.\n`);
24
+ }
25
+ export function renderInterrupted() {
26
+ return chalk.yellow("\n(Interrupted)\n");
27
+ }
28
+ export function renderShuttingDown() {
29
+ return chalk.yellow("\nShutting down...\n");
30
+ }
31
+ export function renderExitHint() {
32
+ return chalk.yellow("\n(Press Ctrl+C again to exit)\n");
33
+ }
34
+ export function renderError(message) {
35
+ return chalk.red(`\nError: ${message}\n`);
36
+ }
37
+ export function renderCommandNotFound(name) {
38
+ return chalk.red(`\nUnknown command: /${name}\n`);
39
+ }
40
+ //# sourceMappingURL=render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/tui/render.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,MAAM,UAAU,WAAW,CAAC,KAAoB;IAC9C,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,4BAA4B;YAC/B,OAAO,KAAK,CAAC,KAAK,CAAC;QACrB,KAAK,4BAA4B;YAC/B,OAAO,KAAK,CAAC,GAAG,CAAC,YAAY,KAAK,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,CAAC;QACpE,KAAK,yBAAyB;YAC5B,OAAO,KAAK,CAAC,MAAM,CAAC,OAAO;gBACzB,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;gBAC5D,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAClC,KAAK,uBAAuB;YAC1B,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAChC,KAAK,gBAAgB;YACnB,OAAO,KAAK,CAAC,GAAG,CAAC,YAAY,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;QAChD,KAAK,kBAAkB,CAAC;QACxB,KAAK,2BAA2B,CAAC;QACjC,KAAK,oBAAoB;YACvB,OAAO,EAAE,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,SAAiB;IAC3C,OAAO,KAAK,CAAC,KAAK,CAAC,UAAU,SAAS,eAAe,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,KAAK,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,KAAK,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,KAAK,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,OAAO,KAAK,CAAC,GAAG,CAAC,YAAY,OAAO,IAAI,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,OAAO,KAAK,CAAC,GAAG,CAAC,uBAAuB,IAAI,IAAI,CAAC,CAAC;AACpD,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { ResponseEvent, ResponseInput } from "../agent-loop/types.js";
2
+ import type { Agent } from "../agent/types.js";
3
+ import type { Command } from "../commands/types.js";
4
+ export type TUIOptions = {
5
+ input?: NodeJS.ReadableStream;
6
+ output?: NodeJS.WritableStream;
7
+ commands?: readonly Command[];
8
+ };
9
+ type TUIState = "idle" | "streaming" | "shutting_down";
10
+ export type SigintAction = "ignore" | "abort" | "shutdown" | "exit_hint";
11
+ export declare function determineSigintAction(state: TUIState, hasAbort: boolean, msSinceLastCtrlC: number): SigintAction;
12
+ export type ParsedSlashCommand = {
13
+ commandName: string;
14
+ args: string;
15
+ };
16
+ export declare function parseSlashCommand(input: string): ParsedSlashCommand | null;
17
+ export declare function resolveSlashInput(trimmed: string, commands: readonly Command[], write: (text: string) => void): string | null;
18
+ export declare function serveTUI(agent: Agent, options?: TUIOptions): Promise<void>;
19
+ export type { ResponseEvent, ResponseInput };