anymous 1.2.7 → 1.3.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 (448) hide show
  1. package/bin/anymous.exe +7 -0
  2. package/package.json +20 -135
  3. package/postinstall.mjs +214 -0
  4. package/bin/anymous.cjs +0 -45
  5. package/src/account/account.ts +0 -473
  6. package/src/account/repo.ts +0 -171
  7. package/src/account/schema.ts +0 -99
  8. package/src/account/url.ts +0 -8
  9. package/src/acp/agent.ts +0 -95
  10. package/src/acp/config-option.ts +0 -203
  11. package/src/acp/content.ts +0 -269
  12. package/src/acp/directory.ts +0 -212
  13. package/src/acp/error.ts +0 -97
  14. package/src/acp/event.ts +0 -342
  15. package/src/acp/permission.ts +0 -254
  16. package/src/acp/profile.ts +0 -42
  17. package/src/acp/service.ts +0 -1097
  18. package/src/acp/session.ts +0 -232
  19. package/src/acp/tool.ts +0 -364
  20. package/src/acp/usage.ts +0 -239
  21. package/src/agent/agent.ts +0 -973
  22. package/src/agent/generate.txt +0 -75
  23. package/src/agent/prompt/architect.txt +0 -26
  24. package/src/agent/prompt/backend.txt +0 -26
  25. package/src/agent/prompt/build.txt +0 -31
  26. package/src/agent/prompt/code-reviewer.txt +0 -29
  27. package/src/agent/prompt/compaction.txt +0 -45
  28. package/src/agent/prompt/database.txt +0 -27
  29. package/src/agent/prompt/debug-tools.txt +0 -40
  30. package/src/agent/prompt/debug.txt +0 -23
  31. package/src/agent/prompt/devops.txt +0 -26
  32. package/src/agent/prompt/docs.txt +0 -23
  33. package/src/agent/prompt/exe-extractor.txt +0 -39
  34. package/src/agent/prompt/explore.txt +0 -42
  35. package/src/agent/prompt/frontend.txt +0 -29
  36. package/src/agent/prompt/general.txt +0 -25
  37. package/src/agent/prompt/memory-dump.txt +0 -37
  38. package/src/agent/prompt/pentest-critic.txt +0 -51
  39. package/src/agent/prompt/pentest-enumerator.txt +0 -72
  40. package/src/agent/prompt/pentest-exploiter.txt +0 -69
  41. package/src/agent/prompt/pentest-identity.txt +0 -59
  42. package/src/agent/prompt/pentest-lead.txt +0 -46
  43. package/src/agent/prompt/pentest-postexploit.txt +0 -84
  44. package/src/agent/prompt/pentest-recon.txt +0 -50
  45. package/src/agent/prompt/pentest-reporter.txt +0 -76
  46. package/src/agent/prompt/pentest-scanner.txt +0 -57
  47. package/src/agent/prompt/pentest-webapp.txt +0 -94
  48. package/src/agent/prompt/performance.txt +0 -27
  49. package/src/agent/prompt/plan.txt +0 -35
  50. package/src/agent/prompt/refactor.txt +0 -31
  51. package/src/agent/prompt/reverser-automator.txt +0 -96
  52. package/src/agent/prompt/reverser-binary.txt +0 -62
  53. package/src/agent/prompt/reverser-dynamic.txt +0 -76
  54. package/src/agent/prompt/reverser-source.txt +0 -93
  55. package/src/agent/prompt/reverser-static.txt +0 -76
  56. package/src/agent/prompt/security.txt +0 -34
  57. package/src/agent/prompt/summary.txt +0 -22
  58. package/src/agent/prompt/test-writer.txt +0 -34
  59. package/src/agent/prompt/title.txt +0 -44
  60. package/src/agent/prompt/web-designer.txt +0 -23
  61. package/src/agent/subagent-permissions.ts +0 -27
  62. package/src/audio.d.ts +0 -14
  63. package/src/auth/index.ts +0 -97
  64. package/src/background/job.ts +0 -37
  65. package/src/bus/global.ts +0 -22
  66. package/src/cli/bootstrap.ts +0 -11
  67. package/src/cli/cmd/account.ts +0 -264
  68. package/src/cli/cmd/acp.ts +0 -73
  69. package/src/cli/cmd/agent.ts +0 -259
  70. package/src/cli/cmd/attach.ts +0 -148
  71. package/src/cli/cmd/cmd.ts +0 -7
  72. package/src/cli/cmd/db.ts +0 -62
  73. package/src/cli/cmd/debug/agent.handler.ts +0 -193
  74. package/src/cli/cmd/debug/agent.ts +0 -27
  75. package/src/cli/cmd/debug/config.ts +0 -14
  76. package/src/cli/cmd/debug/file.ts +0 -73
  77. package/src/cli/cmd/debug/index.ts +0 -87
  78. package/src/cli/cmd/debug/lsp.ts +0 -50
  79. package/src/cli/cmd/debug/ripgrep.ts +0 -79
  80. package/src/cli/cmd/debug/scrap.ts +0 -16
  81. package/src/cli/cmd/debug/skill.ts +0 -15
  82. package/src/cli/cmd/debug/snapshot.ts +0 -50
  83. package/src/cli/cmd/debug/startup.ts +0 -11
  84. package/src/cli/cmd/debug/v2.ts +0 -42
  85. package/src/cli/cmd/export.ts +0 -292
  86. package/src/cli/cmd/generate.ts +0 -54
  87. package/src/cli/cmd/github.handler.ts +0 -1593
  88. package/src/cli/cmd/github.shared.ts +0 -30
  89. package/src/cli/cmd/github.ts +0 -42
  90. package/src/cli/cmd/import.ts +0 -230
  91. package/src/cli/cmd/mcp.ts +0 -840
  92. package/src/cli/cmd/models.ts +0 -66
  93. package/src/cli/cmd/plug.ts +0 -230
  94. package/src/cli/cmd/pr.ts +0 -115
  95. package/src/cli/cmd/prompt-display.ts +0 -1
  96. package/src/cli/cmd/providers.ts +0 -534
  97. package/src/cli/cmd/run/demo.ts +0 -1274
  98. package/src/cli/cmd/run/entry.body.ts +0 -205
  99. package/src/cli/cmd/run/footer.command.tsx +0 -1070
  100. package/src/cli/cmd/run/footer.menu.tsx +0 -351
  101. package/src/cli/cmd/run/footer.permission.tsx +0 -472
  102. package/src/cli/cmd/run/footer.prompt.tsx +0 -1315
  103. package/src/cli/cmd/run/footer.question.tsx +0 -573
  104. package/src/cli/cmd/run/footer.subagent.tsx +0 -175
  105. package/src/cli/cmd/run/footer.ts +0 -1129
  106. package/src/cli/cmd/run/footer.view.tsx +0 -945
  107. package/src/cli/cmd/run/footer.width.ts +0 -27
  108. package/src/cli/cmd/run/permission.shared.ts +0 -256
  109. package/src/cli/cmd/run/prompt.editor.ts +0 -157
  110. package/src/cli/cmd/run/prompt.shared.ts +0 -153
  111. package/src/cli/cmd/run/question.shared.ts +0 -340
  112. package/src/cli/cmd/run/runtime.boot.ts +0 -202
  113. package/src/cli/cmd/run/runtime.lifecycle.ts +0 -410
  114. package/src/cli/cmd/run/runtime.queue.ts +0 -349
  115. package/src/cli/cmd/run/runtime.shared.ts +0 -17
  116. package/src/cli/cmd/run/runtime.stdin.ts +0 -37
  117. package/src/cli/cmd/run/runtime.ts +0 -821
  118. package/src/cli/cmd/run/scrollback.shared.ts +0 -92
  119. package/src/cli/cmd/run/scrollback.surface.ts +0 -431
  120. package/src/cli/cmd/run/scrollback.writer.tsx +0 -352
  121. package/src/cli/cmd/run/session-data.ts +0 -1113
  122. package/src/cli/cmd/run/session-replay.ts +0 -374
  123. package/src/cli/cmd/run/session.shared.ts +0 -196
  124. package/src/cli/cmd/run/splash.ts +0 -289
  125. package/src/cli/cmd/run/stream.transport.ts +0 -1462
  126. package/src/cli/cmd/run/stream.ts +0 -175
  127. package/src/cli/cmd/run/subagent-data.ts +0 -876
  128. package/src/cli/cmd/run/theme.ts +0 -690
  129. package/src/cli/cmd/run/tool.ts +0 -1486
  130. package/src/cli/cmd/run/trace.ts +0 -94
  131. package/src/cli/cmd/run/turn-summary.ts +0 -47
  132. package/src/cli/cmd/run/types.ts +0 -350
  133. package/src/cli/cmd/run/variant.shared.ts +0 -216
  134. package/src/cli/cmd/run.ts +0 -1011
  135. package/src/cli/cmd/serve.ts +0 -24
  136. package/src/cli/cmd/session.ts +0 -147
  137. package/src/cli/cmd/stats.ts +0 -393
  138. package/src/cli/cmd/tui.ts +0 -309
  139. package/src/cli/cmd/uninstall.ts +0 -353
  140. package/src/cli/cmd/upgrade.ts +0 -113
  141. package/src/cli/cmd/web.ts +0 -84
  142. package/src/cli/effect/prompt.ts +0 -37
  143. package/src/cli/effect-cmd.ts +0 -96
  144. package/src/cli/error.ts +0 -130
  145. package/src/cli/heap.ts +0 -45
  146. package/src/cli/logo.ts +0 -1
  147. package/src/cli/network.ts +0 -80
  148. package/src/cli/tui/layer.ts +0 -8
  149. package/src/cli/tui/validate-session.ts +0 -29
  150. package/src/cli/tui/worker.ts +0 -80
  151. package/src/cli/ui.ts +0 -146
  152. package/src/cli/upgrade.ts +0 -79
  153. package/src/cli/version.ts +0 -14
  154. package/src/command/index.ts +0 -177
  155. package/src/command/template/initialize.txt +0 -66
  156. package/src/command/template/review.txt +0 -101
  157. package/src/config/agent.ts +0 -59
  158. package/src/config/command.ts +0 -39
  159. package/src/config/config.ts +0 -689
  160. package/src/config/entry-name.ts +0 -19
  161. package/src/config/managed.ts +0 -69
  162. package/src/config/markdown.ts +0 -36
  163. package/src/config/parse.ts +0 -79
  164. package/src/config/paths.ts +0 -45
  165. package/src/config/plugin.ts +0 -79
  166. package/src/config/tui-cwd.ts +0 -5
  167. package/src/config/tui-host-attention.ts +0 -21
  168. package/src/config/tui-migrate.ts +0 -132
  169. package/src/config/tui.ts +0 -276
  170. package/src/config/variable.ts +0 -91
  171. package/src/control-plane/adapters/index.ts +0 -41
  172. package/src/control-plane/adapters/worktree.ts +0 -96
  173. package/src/control-plane/dev/README.md +0 -19
  174. package/src/control-plane/dev/debug-workspace-plugin.ts +0 -73
  175. package/src/control-plane/types.ts +0 -59
  176. package/src/control-plane/util.ts +0 -39
  177. package/src/control-plane/workspace-adapter-runtime.ts +0 -51
  178. package/src/control-plane/workspace-context.ts +0 -26
  179. package/src/control-plane/workspace.ts +0 -964
  180. package/src/effect/app-node-builder-v1.ts +0 -12
  181. package/src/effect/app-runtime.ts +0 -137
  182. package/src/effect/bootstrap-runtime.ts +0 -19
  183. package/src/effect/bridge.ts +0 -84
  184. package/src/effect/config-service.ts +0 -67
  185. package/src/effect/instance-ref.ts +0 -11
  186. package/src/effect/instance-registry.ts +0 -12
  187. package/src/effect/instance-state.ts +0 -69
  188. package/src/effect/promise.ts +0 -17
  189. package/src/effect/run-service.ts +0 -47
  190. package/src/effect/runner.ts +0 -217
  191. package/src/effect/runtime-flags.ts +0 -79
  192. package/src/env/index.ts +0 -41
  193. package/src/event-manifest.ts +0 -3
  194. package/src/event-v2-bridge.ts +0 -71
  195. package/src/format/formatter.ts +0 -404
  196. package/src/format/index.ts +0 -203
  197. package/src/git/index.ts +0 -348
  198. package/src/id/id.ts +0 -80
  199. package/src/ide/index.ts +0 -54
  200. package/src/image/image.ts +0 -172
  201. package/src/index.ts +0 -142
  202. package/src/installation/index.ts +0 -336
  203. package/src/lsp/client.ts +0 -650
  204. package/src/lsp/diagnostic.ts +0 -29
  205. package/src/lsp/language.ts +0 -121
  206. package/src/lsp/launch.ts +0 -21
  207. package/src/lsp/lsp.ts +0 -507
  208. package/src/lsp/server.ts +0 -1983
  209. package/src/markdown.d.ts +0 -4
  210. package/src/mcp/auth.ts +0 -163
  211. package/src/mcp/browser.ts +0 -37
  212. package/src/mcp/catalog.ts +0 -170
  213. package/src/mcp/index.ts +0 -1004
  214. package/src/mcp/oauth-callback.ts +0 -194
  215. package/src/mcp/oauth-provider.ts +0 -259
  216. package/src/memory/memory.ts +0 -133
  217. package/src/node.ts +0 -4
  218. package/src/patch/index.ts +0 -686
  219. package/src/permission/arity.ts +0 -163
  220. package/src/permission/evaluate.ts +0 -1
  221. package/src/permission/index.ts +0 -229
  222. package/src/plugin/azure.ts +0 -26
  223. package/src/plugin/cloudflare.ts +0 -76
  224. package/src/plugin/digitalocean.ts +0 -325
  225. package/src/plugin/github-copilot/copilot.ts +0 -414
  226. package/src/plugin/github-copilot/models.ts +0 -258
  227. package/src/plugin/index.ts +0 -311
  228. package/src/plugin/install.ts +0 -439
  229. package/src/plugin/loader.ts +0 -237
  230. package/src/plugin/meta.ts +0 -188
  231. package/src/plugin/openai/README.md +0 -31
  232. package/src/plugin/openai/codex.ts +0 -565
  233. package/src/plugin/openai/ws-pool.ts +0 -270
  234. package/src/plugin/openai/ws.ts +0 -381
  235. package/src/plugin/pty-environment.ts +0 -24
  236. package/src/plugin/shared.ts +0 -323
  237. package/src/plugin/snowflake-cortex.ts +0 -507
  238. package/src/plugin/tui/internal.ts +0 -10
  239. package/src/plugin/tui/runtime.ts +0 -1131
  240. package/src/plugin/xai.ts +0 -626
  241. package/src/project/bootstrap-service.ts +0 -9
  242. package/src/project/bootstrap.ts +0 -58
  243. package/src/project/instance-context.ts +0 -24
  244. package/src/project/instance-runtime.ts +0 -16
  245. package/src/project/instance-store.ts +0 -213
  246. package/src/project/project.ts +0 -483
  247. package/src/project/vcs.ts +0 -423
  248. package/src/provider/auth.ts +0 -229
  249. package/src/provider/error.ts +0 -188
  250. package/src/provider/model-status.ts +0 -8
  251. package/src/provider/provider.ts +0 -2006
  252. package/src/provider/transform.ts +0 -1832
  253. package/src/question/index.ts +0 -161
  254. package/src/question/schema.ts +0 -4
  255. package/src/server/auth.ts +0 -48
  256. package/src/server/event.ts +0 -10
  257. package/src/server/global-lifecycle.ts +0 -28
  258. package/src/server/init-projectors.ts +0 -3
  259. package/src/server/mdns.ts +0 -47
  260. package/src/server/projectors.ts +0 -1
  261. package/src/server/proxy-util.ts +0 -48
  262. package/src/server/routes/instance/httpapi/AGENTS.md +0 -39
  263. package/src/server/routes/instance/httpapi/api.ts +0 -97
  264. package/src/server/routes/instance/httpapi/errors.ts +0 -193
  265. package/src/server/routes/instance/httpapi/groups/config.ts +0 -65
  266. package/src/server/routes/instance/httpapi/groups/control-plane.ts +0 -35
  267. package/src/server/routes/instance/httpapi/groups/control.ts +0 -76
  268. package/src/server/routes/instance/httpapi/groups/event.ts +0 -29
  269. package/src/server/routes/instance/httpapi/groups/experimental.ts +0 -275
  270. package/src/server/routes/instance/httpapi/groups/file.ts +0 -185
  271. package/src/server/routes/instance/httpapi/groups/global.ts +0 -136
  272. package/src/server/routes/instance/httpapi/groups/instance.ts +0 -206
  273. package/src/server/routes/instance/httpapi/groups/mcp.ts +0 -156
  274. package/src/server/routes/instance/httpapi/groups/metadata.ts +0 -18
  275. package/src/server/routes/instance/httpapi/groups/permission.ts +0 -61
  276. package/src/server/routes/instance/httpapi/groups/project-copy.ts +0 -32
  277. package/src/server/routes/instance/httpapi/groups/project.ts +0 -93
  278. package/src/server/routes/instance/httpapi/groups/provider.ts +0 -101
  279. package/src/server/routes/instance/httpapi/groups/pty.ts +0 -172
  280. package/src/server/routes/instance/httpapi/groups/query.ts +0 -12
  281. package/src/server/routes/instance/httpapi/groups/question.ts +0 -74
  282. package/src/server/routes/instance/httpapi/groups/session.ts +0 -462
  283. package/src/server/routes/instance/httpapi/groups/sync.ts +0 -113
  284. package/src/server/routes/instance/httpapi/groups/tui.ts +0 -208
  285. package/src/server/routes/instance/httpapi/groups/workspace.ts +0 -141
  286. package/src/server/routes/instance/httpapi/handlers/config.ts +0 -34
  287. package/src/server/routes/instance/httpapi/handlers/control-plane.ts +0 -37
  288. package/src/server/routes/instance/httpapi/handlers/control.ts +0 -43
  289. package/src/server/routes/instance/httpapi/handlers/event.ts +0 -99
  290. package/src/server/routes/instance/httpapi/handlers/experimental.ts +0 -193
  291. package/src/server/routes/instance/httpapi/handlers/file.ts +0 -139
  292. package/src/server/routes/instance/httpapi/handlers/global.ts +0 -156
  293. package/src/server/routes/instance/httpapi/handlers/instance.ts +0 -110
  294. package/src/server/routes/instance/httpapi/handlers/mcp.ts +0 -111
  295. package/src/server/routes/instance/httpapi/handlers/permission.ts +0 -41
  296. package/src/server/routes/instance/httpapi/handlers/project-copy.ts +0 -83
  297. package/src/server/routes/instance/httpapi/handlers/project.ts +0 -63
  298. package/src/server/routes/instance/httpapi/handlers/provider.ts +0 -113
  299. package/src/server/routes/instance/httpapi/handlers/pty.ts +0 -273
  300. package/src/server/routes/instance/httpapi/handlers/question.ts +0 -54
  301. package/src/server/routes/instance/httpapi/handlers/session-errors.ts +0 -21
  302. package/src/server/routes/instance/httpapi/handlers/session.ts +0 -442
  303. package/src/server/routes/instance/httpapi/handlers/sync.ts +0 -89
  304. package/src/server/routes/instance/httpapi/handlers/tui.ts +0 -131
  305. package/src/server/routes/instance/httpapi/handlers/workspace.ts +0 -102
  306. package/src/server/routes/instance/httpapi/lifecycle.ts +0 -54
  307. package/src/server/routes/instance/httpapi/middleware/authorization.ts +0 -150
  308. package/src/server/routes/instance/httpapi/middleware/compression.ts +0 -64
  309. package/src/server/routes/instance/httpapi/middleware/cors-vary.ts +0 -29
  310. package/src/server/routes/instance/httpapi/middleware/error.ts +0 -43
  311. package/src/server/routes/instance/httpapi/middleware/fence.ts +0 -25
  312. package/src/server/routes/instance/httpapi/middleware/instance-context.ts +0 -43
  313. package/src/server/routes/instance/httpapi/middleware/proxy.ts +0 -108
  314. package/src/server/routes/instance/httpapi/middleware/schema-error.ts +0 -41
  315. package/src/server/routes/instance/httpapi/middleware/workspace-routing.ts +0 -250
  316. package/src/server/routes/instance/httpapi/public.ts +0 -537
  317. package/src/server/routes/instance/httpapi/server.ts +0 -327
  318. package/src/server/routes/instance/httpapi/websocket-tracker.ts +0 -60
  319. package/src/server/server.ts +0 -226
  320. package/src/server/shared/fence.ts +0 -60
  321. package/src/server/shared/pty-ticket.ts +0 -15
  322. package/src/server/shared/public-ui.ts +0 -12
  323. package/src/server/shared/tui-control.ts +0 -28
  324. package/src/server/shared/ui.ts +0 -108
  325. package/src/server/shared/workspace-routing.ts +0 -38
  326. package/src/server/tui-event.ts +0 -1
  327. package/src/session/compaction.ts +0 -562
  328. package/src/session/instruction.ts +0 -237
  329. package/src/session/llm/AGENTS.md +0 -90
  330. package/src/session/llm/ai-sdk.ts +0 -288
  331. package/src/session/llm/native-request.ts +0 -196
  332. package/src/session/llm/native-runtime.ts +0 -195
  333. package/src/session/llm/request.ts +0 -226
  334. package/src/session/llm.ts +0 -404
  335. package/src/session/message-error.ts +0 -14
  336. package/src/session/message-v2.ts +0 -734
  337. package/src/session/message.ts +0 -148
  338. package/src/session/overflow.ts +0 -34
  339. package/src/session/processor.ts +0 -718
  340. package/src/session/prompt/anthropic.txt +0 -96
  341. package/src/session/prompt/beast.txt +0 -147
  342. package/src/session/prompt/build-switch.txt +0 -5
  343. package/src/session/prompt/codex.txt +0 -79
  344. package/src/session/prompt/copilot-gpt-5.txt +0 -143
  345. package/src/session/prompt/default.txt +0 -89
  346. package/src/session/prompt/gemini.txt +0 -155
  347. package/src/session/prompt/gpt.txt +0 -107
  348. package/src/session/prompt/kimi.txt +0 -95
  349. package/src/session/prompt/meta.txt +0 -64
  350. package/src/session/prompt/plan-mode.txt +0 -70
  351. package/src/session/prompt/plan-reminder-anthropic.txt +0 -67
  352. package/src/session/prompt/plan.txt +0 -26
  353. package/src/session/prompt/trinity.txt +0 -97
  354. package/src/session/prompt.ts +0 -1636
  355. package/src/session/reminders.ts +0 -92
  356. package/src/session/retry.ts +0 -201
  357. package/src/session/revert.ts +0 -146
  358. package/src/session/run-state.ts +0 -151
  359. package/src/session/schema.ts +0 -26
  360. package/src/session/session.ts +0 -1018
  361. package/src/session/status.ts +0 -56
  362. package/src/session/summary.ts +0 -160
  363. package/src/session/system.ts +0 -145
  364. package/src/session/todo.ts +0 -74
  365. package/src/session/tools.ts +0 -590
  366. package/src/share/session.ts +0 -58
  367. package/src/share/share-next.ts +0 -371
  368. package/src/skill/discovery.ts +0 -140
  369. package/src/skill/index.ts +0 -354
  370. package/src/snapshot/index.ts +0 -807
  371. package/src/sql.d.ts +0 -4
  372. package/src/storage/schema.ts +0 -5
  373. package/src/storage/storage.ts +0 -327
  374. package/src/sync/README.md +0 -179
  375. package/src/sync/schema.ts +0 -11
  376. package/src/temporary.ts +0 -31
  377. package/src/tool/apply_patch.ts +0 -313
  378. package/src/tool/apply_patch.txt +0 -33
  379. package/src/tool/code-mode.ts +0 -310
  380. package/src/tool/computer.ts +0 -476
  381. package/src/tool/computer.txt +0 -25
  382. package/src/tool/edit.ts +0 -737
  383. package/src/tool/edit.txt +0 -10
  384. package/src/tool/external-directory.ts +0 -49
  385. package/src/tool/glob.ts +0 -76
  386. package/src/tool/glob.txt +0 -6
  387. package/src/tool/grep.ts +0 -115
  388. package/src/tool/grep.txt +0 -8
  389. package/src/tool/invalid.ts +0 -21
  390. package/src/tool/json-schema.ts +0 -164
  391. package/src/tool/lsp.ts +0 -113
  392. package/src/tool/lsp.txt +0 -24
  393. package/src/tool/mcp-websearch.ts +0 -96
  394. package/src/tool/memory.ts +0 -59
  395. package/src/tool/memory.txt +0 -14
  396. package/src/tool/plan-enter.txt +0 -14
  397. package/src/tool/plan-exit.txt +0 -13
  398. package/src/tool/plan.ts +0 -79
  399. package/src/tool/question.ts +0 -44
  400. package/src/tool/question.txt +0 -10
  401. package/src/tool/read.ts +0 -386
  402. package/src/tool/read.txt +0 -14
  403. package/src/tool/registry.ts +0 -460
  404. package/src/tool/schema.ts +0 -14
  405. package/src/tool/shell/id.ts +0 -19
  406. package/src/tool/shell/prompt.ts +0 -293
  407. package/src/tool/shell/shell.txt +0 -21
  408. package/src/tool/shell.ts +0 -645
  409. package/src/tool/skill.ts +0 -70
  410. package/src/tool/skill.txt +0 -5
  411. package/src/tool/task.ts +0 -360
  412. package/src/tool/task.txt +0 -19
  413. package/src/tool/todo.ts +0 -46
  414. package/src/tool/todowrite.txt +0 -44
  415. package/src/tool/tool.ts +0 -183
  416. package/src/tool/truncate.ts +0 -156
  417. package/src/tool/truncation-dir.ts +0 -4
  418. package/src/tool/webfetch.ts +0 -192
  419. package/src/tool/webfetch.txt +0 -13
  420. package/src/tool/websearch.ts +0 -143
  421. package/src/tool/websearch.txt +0 -14
  422. package/src/tool/write.ts +0 -104
  423. package/src/tool/write.txt +0 -8
  424. package/src/util/archive.ts +0 -17
  425. package/src/util/bom.ts +0 -27
  426. package/src/util/data-url.ts +0 -9
  427. package/src/util/defer.ts +0 -10
  428. package/src/util/effect-http-client.ts +0 -11
  429. package/src/util/error.ts +0 -1
  430. package/src/util/filesystem.ts +0 -251
  431. package/src/util/html.ts +0 -8
  432. package/src/util/iife.ts +0 -3
  433. package/src/util/lazy.ts +0 -20
  434. package/src/util/local-context.ts +0 -25
  435. package/src/util/locale.ts +0 -2
  436. package/src/util/media.ts +0 -26
  437. package/src/util/process.ts +0 -177
  438. package/src/util/proxy-env.ts +0 -72
  439. package/src/util/queue.ts +0 -32
  440. package/src/util/record.ts +0 -1
  441. package/src/util/repository.ts +0 -232
  442. package/src/util/rpc.ts +0 -66
  443. package/src/util/signal.ts +0 -12
  444. package/src/util/timeout.ts +0 -13
  445. package/src/util/token.ts +0 -1
  446. package/src/util/wildcard.ts +0 -59
  447. package/src/worktree/index.ts +0 -623
  448. package/tsconfig.json +0 -17
package/src/config/tui.ts DELETED
@@ -1,276 +0,0 @@
1
- export * as TuiConfig from "./tui"
2
-
3
- import path from "path"
4
- import { mergeDeep, unique } from "remeda"
5
- import { AppNodeBuilder } from "@anymous-ai/core/effect/app-node-builder"
6
- import { LayerNode } from "@anymous-ai/core/effect/layer-node"
7
- import { Cause, Context, Effect, Fiber, Layer } from "effect"
8
- import { ConfigParse } from "@/config/parse"
9
- import * as ConfigPaths from "@/config/paths"
10
- import { migrateTuiConfig } from "./tui-migrate"
11
- import { resolveHostAttentionSoundPaths } from "./tui-host-attention"
12
- import { Flag } from "@anymous-ai/core/flag/flag"
13
- import { isRecord } from "@anymous-ai/tui/util/record"
14
- import { Global } from "@anymous-ai/core/global"
15
- import { FSUtil } from "@anymous-ai/core/fs-util"
16
- import { CurrentWorkingDirectory } from "./tui-cwd"
17
- import { ConfigPlugin } from "@/config/plugin"
18
- import { TuiKeybind } from "@anymous-ai/tui/config/keybind"
19
- import { InstallationLocal, InstallationVersion } from "@anymous-ai/core/installation/version"
20
- import { makeRuntime } from "@anymous-ai/core/effect/runtime"
21
- import { Filesystem } from "@/util/filesystem"
22
- import { ConfigVariable } from "@/config/variable"
23
- import { Npm } from "@anymous-ai/core/npm"
24
- import { FormatError, FormatUnknownError } from "@/cli/error"
25
- import { TuiConfig } from "@anymous-ai/tui/config"
26
-
27
- export const Info = TuiConfig.Info
28
- export type Info = TuiConfig.Info
29
-
30
- type Acc = {
31
- result: Info
32
- plugin_origins: ConfigPlugin.Origin[]
33
- }
34
-
35
- export type Resolved = TuiConfig.Resolved
36
-
37
- export type HostMetadata = {
38
- plugin_origins?: ConfigPlugin.Origin[]
39
- }
40
-
41
- export interface Interface {
42
- readonly get: () => Effect.Effect<Resolved>
43
- readonly pluginOrigins: () => Effect.Effect<ConfigPlugin.Origin[]>
44
- readonly waitForDependencies: () => Effect.Effect<void>
45
- }
46
-
47
- export class Service extends Context.Service<Service, Interface>()("@anymous/TuiConfig") {}
48
-
49
- function pluginScope(file: string, ctx: { directory: string }): ConfigPlugin.Scope {
50
- if (Filesystem.contains(ctx.directory, file)) return "local"
51
- // if (ctx.worktree !== "/" && Filesystem.contains(ctx.worktree, file)) return "local"
52
- return "global"
53
- }
54
-
55
- function normalize(raw: Record<string, unknown>) {
56
- const data = { ...raw }
57
- if (!("tui" in data)) return data
58
- if (!isRecord(data.tui)) {
59
- delete data.tui
60
- return data
61
- }
62
-
63
- const tui = data.tui
64
- delete data.tui
65
- return {
66
- ...tui,
67
- ...data,
68
- }
69
- }
70
-
71
- function dropUnknownKeybinds(input: Record<string, unknown>) {
72
- if (!isRecord(input.keybinds)) return input
73
-
74
- const invalid = TuiKeybind.unknownKeys(input.keybinds)
75
- if (!invalid.length) return input
76
-
77
- return {
78
- ...input,
79
- keybinds: Object.fromEntries(Object.entries(input.keybinds).filter(([key]) => !invalid.includes(key))),
80
- }
81
- }
82
-
83
- const loadState = Effect.fn("TuiConfig.loadState")(function* (ctx: { directory: string }) {
84
- const afs = yield* FSUtil.Service
85
- let appliedOrder = 0
86
-
87
- const resolvePlugins = (config: Info, configFilepath: string): Effect.Effect<Info> =>
88
- Effect.gen(function* () {
89
- const plugins = config.plugin
90
- if (!plugins) return config
91
- return {
92
- ...config,
93
- plugin: yield* Effect.forEach(plugins, (plugin) =>
94
- Effect.promise(() => ConfigPlugin.resolvePluginSpec(plugin as ConfigPlugin.Origin["spec"], configFilepath)),
95
- ),
96
- }
97
- })
98
-
99
- const load = (text: string, configFilepath: string): Effect.Effect<Info> =>
100
- Effect.gen(function* () {
101
- const expanded = yield* Effect.promise(() =>
102
- ConfigVariable.substitute({ text, type: "path", path: configFilepath, missing: "empty" }),
103
- )
104
- const data = ConfigParse.jsonc(expanded, configFilepath)
105
- if (!isRecord(data)) return {} as Info
106
- // Flatten a nested "tui" key so users who wrote `{ "tui": { ... } }` inside tui.json
107
- // (mirroring the old anymous.json shape) still get their settings applied.
108
- const normalized = dropUnknownKeybinds(normalize(data))
109
- const parsed = ConfigParse.schema(Info, normalized, configFilepath)
110
- const validated = parsed.attention?.sounds
111
- ? {
112
- ...parsed,
113
- attention: {
114
- ...parsed.attention,
115
- sounds: resolveHostAttentionSoundPaths(path.dirname(configFilepath), parsed.attention.sounds),
116
- },
117
- }
118
- : parsed
119
- return yield* resolvePlugins(validated, configFilepath)
120
- }).pipe(
121
- // catchCause (not tapErrorCause + orElseSucceed) because JSONC parsing and validation
122
- // can sync-throw — those become defects, which orElseSucceed wouldn't catch.
123
- Effect.catchCause((cause) =>
124
- Effect.logWarning("skipping invalid tui config", {
125
- path: configFilepath,
126
- reason: FormatError(Cause.squash(cause)) ?? FormatUnknownError(Cause.squash(cause)),
127
- }).pipe(Effect.as({} as Info)),
128
- ),
129
- )
130
-
131
- const loadFile = (filepath: string): Effect.Effect<Info> =>
132
- Effect.gen(function* () {
133
- // Silent-swallow non-NotFound read errors (perms, EISDIR, IO) → log + skip.
134
- // Matches how parse/schema/plugin failures in load() are handled — every
135
- // broken-config path degrades gracefully rather than crashing TUI startup.
136
- const text = yield* afs.readFileStringSafe(filepath).pipe(
137
- Effect.catchCause((cause) =>
138
- Effect.logWarning("failed to read tui config", {
139
- path: filepath,
140
- reason: FormatError(Cause.squash(cause)) ?? FormatUnknownError(Cause.squash(cause)),
141
- }).pipe(Effect.as(undefined)),
142
- ),
143
- )
144
- if (!text) return {} as Info
145
- yield* Effect.logInfo("loading tui config", { path: filepath })
146
- return yield* load(text, filepath)
147
- })
148
-
149
- const mergeFile = (acc: Acc, file: string) =>
150
- Effect.gen(function* () {
151
- const data = yield* loadFile(file)
152
- if (Object.keys(data).length) {
153
- appliedOrder += 1
154
- yield* Effect.logInfo("applying tui config", { path: file, order: appliedOrder })
155
- }
156
- acc.result = mergeDeep(acc.result, data)
157
- if (!data.plugin?.length) return
158
-
159
- const scope = pluginScope(file, ctx)
160
- const plugins = ConfigPlugin.deduplicatePluginOrigins([
161
- ...acc.plugin_origins,
162
- ...data.plugin.map((spec) => ({ spec: spec as ConfigPlugin.Origin["spec"], scope, source: file })),
163
- ])
164
- acc.result = {
165
- ...acc.result,
166
- plugin: plugins.map((item) => item.spec),
167
- }
168
- acc.plugin_origins = plugins
169
- })
170
-
171
- // Every config dir we may read from: global config dir, any `.anymous`
172
- // folders between cwd and home, and ANYMOUS_CONFIG_DIR.
173
- const directories = yield* ConfigPaths.directories(ctx.directory)
174
- yield* Effect.promise(() => migrateTuiConfig({ directories, cwd: ctx.directory }))
175
-
176
- const projectFiles = Flag.ANYMOUS_DISABLE_PROJECT_CONFIG ? [] : yield* ConfigPaths.files("tui", ctx.directory)
177
-
178
- const acc: Acc = {
179
- result: {},
180
- plugin_origins: [],
181
- }
182
-
183
- // 1. Global tui config (lowest precedence).
184
- for (const file of ConfigPaths.fileInDirectory(Global.Path.config, "tui")) {
185
- yield* mergeFile(acc, file)
186
- }
187
-
188
- // 2. Explicit ANYMOUS_TUI_CONFIG override, if set.
189
- if (Flag.ANYMOUS_TUI_CONFIG) {
190
- const configFile = Flag.ANYMOUS_TUI_CONFIG
191
- yield* mergeFile(acc, configFile)
192
- yield* Effect.logDebug("loaded custom tui config", { path: configFile })
193
- }
194
-
195
- // 3. Project tui files, applied root-first so the closest file wins.
196
- for (const file of projectFiles) {
197
- yield* mergeFile(acc, file)
198
- }
199
-
200
- // 4. `.anymous` directories (and ANYMOUS_CONFIG_DIR) discovered while
201
- // walking up the tree. Also returned below so callers can install plugin
202
- // dependencies from each location.
203
- const dirs = unique(directories).filter((dir) => dir.endsWith(".anymous") || dir === Flag.ANYMOUS_CONFIG_DIR)
204
-
205
- for (const dir of dirs) {
206
- if (!dir.endsWith(".anymous") && dir !== Flag.ANYMOUS_CONFIG_DIR) continue
207
- for (const file of ConfigPaths.fileInDirectory(dir, "tui")) {
208
- yield* mergeFile(acc, file)
209
- }
210
- }
211
-
212
- const result = TuiConfig.resolve(
213
- {
214
- ...acc.result,
215
- },
216
- {
217
- terminalSuspend: process.platform !== "win32",
218
- },
219
- )
220
-
221
- return {
222
- config: result,
223
- pluginOrigins: acc.plugin_origins,
224
- dirs: result.plugin?.length ? dirs : [],
225
- }
226
- })
227
-
228
- const layer = Layer.effect(
229
- Service,
230
- Effect.gen(function* () {
231
- const directory = yield* CurrentWorkingDirectory
232
- const npm = yield* Npm.Service
233
- const data = yield* loadState({ directory })
234
- const deps = yield* Effect.forEach(
235
- data.dirs,
236
- (dir) =>
237
- npm
238
- .install(dir, {
239
- add: [
240
- {
241
- name: "@anymous-ai/plugin",
242
- version: InstallationLocal ? undefined : InstallationVersion,
243
- },
244
- ],
245
- })
246
- .pipe(Effect.forkScoped),
247
- {
248
- concurrency: "unbounded",
249
- },
250
- )
251
-
252
- const get = Effect.fn("TuiConfig.get")(() => Effect.succeed(data.config))
253
- const pluginOrigins = Effect.fn("TuiConfig.pluginOrigins")(() => Effect.succeed(data.pluginOrigins))
254
-
255
- const waitForDependencies = Effect.fn("TuiConfig.waitForDependencies")(() =>
256
- Effect.forEach(deps, Fiber.join, { concurrency: "unbounded" }).pipe(Effect.ignore(), Effect.asVoid),
257
- )
258
- return Service.of({ get, pluginOrigins, waitForDependencies })
259
- }).pipe(Effect.withSpan("TuiConfig.layer")),
260
- )
261
-
262
- export const node = LayerNode.make({ service: Service, layer, deps: [Npm.node, FSUtil.node] })
263
-
264
- const { runPromise } = makeRuntime(Service, AppNodeBuilder.build(node))
265
-
266
- export async function waitForDependencies() {
267
- await runPromise((svc) => svc.waitForDependencies())
268
- }
269
-
270
- export async function get() {
271
- return runPromise((svc) => svc.get())
272
- }
273
-
274
- export async function pluginOrigins() {
275
- return runPromise((svc) => svc.pluginOrigins())
276
- }
@@ -1,91 +0,0 @@
1
- export * as ConfigVariable from "./variable"
2
-
3
- import path from "path"
4
- import os from "os"
5
- import { Filesystem } from "@/util/filesystem"
6
- import { InvalidError } from "@anymous-ai/core/v1/config/error"
7
-
8
- type ParseSource =
9
- | {
10
- type: "path"
11
- path: string
12
- }
13
- | {
14
- type: "virtual"
15
- source: string
16
- dir: string
17
- }
18
-
19
- type SubstituteInput = ParseSource & {
20
- text: string
21
- missing?: "error" | "empty"
22
- env?: Record<string, string>
23
- }
24
-
25
- function source(input: ParseSource) {
26
- return input.type === "path" ? input.path : input.source
27
- }
28
-
29
- function dir(input: ParseSource) {
30
- return input.type === "path" ? path.dirname(input.path) : input.dir
31
- }
32
-
33
- /** Apply {env:VAR} and {file:path} substitutions to config text. */
34
- export async function substitute(input: SubstituteInput) {
35
- const missing = input.missing ?? "error"
36
- let text = input.text.replace(/\{env:([^}]+)\}/g, (_, varName) => {
37
- return (input.env?.[varName] ?? process.env[varName]) || ""
38
- })
39
-
40
- const fileMatches = Array.from(text.matchAll(/\{file:[^}]+\}/g))
41
- if (!fileMatches.length) return text
42
-
43
- const configDir = dir(input)
44
- const configSource = source(input)
45
- let out = ""
46
- let cursor = 0
47
-
48
- for (const match of fileMatches) {
49
- const token = match[0]
50
- const index = match.index
51
- out += text.slice(cursor, index)
52
-
53
- const lineStart = text.lastIndexOf("\n", index - 1) + 1
54
- const prefix = text.slice(lineStart, index).trimStart()
55
- if (prefix.startsWith("//")) {
56
- out += token
57
- cursor = index + token.length
58
- continue
59
- }
60
-
61
- let filePath = token.replace(/^\{file:/, "").replace(/\}$/, "")
62
- if (filePath.startsWith("~/")) {
63
- filePath = path.join(os.homedir(), filePath.slice(2))
64
- }
65
-
66
- const resolvedPath = path.isAbsolute(filePath) ? filePath : path.resolve(configDir, filePath)
67
- const fileContent = (
68
- await Filesystem.readText(resolvedPath).catch((error: NodeJS.ErrnoException) => {
69
- if (missing === "empty") return ""
70
-
71
- const errMsg = `bad file reference: "${token}"`
72
- if (error.code === "ENOENT") {
73
- throw new InvalidError(
74
- {
75
- path: configSource,
76
- message: errMsg + ` ${resolvedPath} does not exist`,
77
- },
78
- { cause: error },
79
- )
80
- }
81
- throw new InvalidError({ path: configSource, message: errMsg }, { cause: error })
82
- })
83
- ).trim()
84
-
85
- out += JSON.stringify(fileContent).slice(1, -1)
86
- cursor = index + token.length
87
- }
88
-
89
- out += text.slice(cursor)
90
- return out
91
- }
@@ -1,41 +0,0 @@
1
- import type { ProjectV2 } from "@anymous-ai/core/project"
2
- import type { WorkspaceAdapter, WorkspaceAdapterEntry } from "../types"
3
- import { WorktreeAdapter } from "./worktree"
4
-
5
- const BUILTIN: Record<string, WorkspaceAdapter> = {
6
- worktree: WorktreeAdapter,
7
- }
8
-
9
- const state = new Map<ProjectV2.ID, Map<string, WorkspaceAdapter>>()
10
-
11
- export function getAdapter(projectID: ProjectV2.ID, type: string): WorkspaceAdapter {
12
- const custom = state.get(projectID)?.get(type)
13
- if (custom) return custom
14
-
15
- const builtin = BUILTIN[type]
16
- if (builtin) return builtin
17
-
18
- throw new Error(`Unknown workspace adapter: ${type}`)
19
- }
20
-
21
- export function listAdapters(projectID: ProjectV2.ID): WorkspaceAdapterEntry[] {
22
- return registeredAdapters(projectID).map(([type, adapter]) => ({
23
- type,
24
- name: adapter.name,
25
- description: adapter.description,
26
- }))
27
- }
28
-
29
- export function registeredAdapters(projectID: ProjectV2.ID): [string, WorkspaceAdapter][] {
30
- const adapters = new Map(Object.entries(BUILTIN))
31
- for (const [type, adapter] of state.get(projectID)?.entries() ?? []) adapters.set(type, adapter)
32
- return [...adapters.entries()]
33
- }
34
-
35
- // Plugins can be loaded per-project so we need to scope them. If you
36
- // want to install a global one pass `ProjectV2.ID.global`
37
- export function registerAdapter(projectID: ProjectV2.ID, type: string, adapter: WorkspaceAdapter) {
38
- const adapters = state.get(projectID) ?? new Map<string, WorkspaceAdapter>()
39
- adapters.set(type, adapter)
40
- state.set(projectID, adapters)
41
- }
@@ -1,96 +0,0 @@
1
- import { Effect, Schema } from "effect"
2
- import { InstanceRef, WorkspaceRef } from "@/effect/instance-ref"
3
- import { type WorkspaceAdapter, type WorkspaceAdapterContext, WorkspaceInfo } from "../types"
4
-
5
- const WorktreeConfig = Schema.Struct({
6
- name: WorkspaceInfo.fields.name,
7
- branch: Schema.optional(Schema.NullOr(Schema.String)),
8
- directory: Schema.String,
9
- })
10
- const decodeWorktreeConfig = Schema.decodeUnknownSync(WorktreeConfig)
11
-
12
- async function loadWorktree() {
13
- const [{ AppRuntime }, { Worktree }] = await Promise.all([import("@/effect/app-runtime"), import("@/worktree")])
14
- return { AppRuntime, Worktree }
15
- }
16
-
17
- function requireInstance(context: WorkspaceAdapterContext | undefined) {
18
- if (!context?.instance) throw new Error("Worktree adapter requires an instance context")
19
- return context.instance
20
- }
21
-
22
- const provideContext = <A, E, R>(effect: Effect.Effect<A, E, R>, context: WorkspaceAdapterContext | undefined) =>
23
- effect.pipe(
24
- Effect.provideService(InstanceRef, requireInstance(context)),
25
- Effect.provideService(WorkspaceRef, context?.workspaceID),
26
- )
27
-
28
- export const WorktreeAdapter: WorkspaceAdapter = {
29
- name: "Worktree",
30
- description: "Create a git worktree",
31
- async configure(info, context) {
32
- const { AppRuntime, Worktree } = await loadWorktree()
33
- const next = await AppRuntime.runPromise(
34
- provideContext(
35
- Worktree.Service.use((svc) => svc.makeWorktreeInfo({ detached: true })),
36
- context,
37
- ),
38
- )
39
- return {
40
- ...info,
41
- name: next.name,
42
- directory: next.directory,
43
- }
44
- },
45
- async create(info, _env, _from, context) {
46
- const { AppRuntime, Worktree } = await loadWorktree()
47
- const config = decodeWorktreeConfig(info)
48
- await AppRuntime.runPromise(
49
- provideContext(
50
- Worktree.Service.use((svc) =>
51
- svc.createFromInfo({
52
- name: config.name,
53
- directory: config.directory,
54
- ...(config.branch ? { branch: config.branch } : {}),
55
- }),
56
- ),
57
- context,
58
- ),
59
- )
60
- },
61
- async list(context) {
62
- const { AppRuntime, Worktree } = await loadWorktree()
63
- const ctx = requireInstance(context)
64
- return (
65
- await AppRuntime.runPromise(
66
- provideContext(
67
- Worktree.Service.use((svc) => svc.list()),
68
- context,
69
- ),
70
- )
71
- ).map((info) => ({
72
- type: "worktree",
73
- name: info.name,
74
- branch: info.branch,
75
- directory: info.directory,
76
- projectID: ctx.project.id,
77
- }))
78
- },
79
- async remove(info, context) {
80
- const { AppRuntime, Worktree } = await loadWorktree()
81
- const config = decodeWorktreeConfig(info)
82
- await AppRuntime.runPromise(
83
- provideContext(
84
- Worktree.Service.use((svc) => svc.remove({ directory: config.directory })),
85
- context,
86
- ),
87
- )
88
- },
89
- target(info) {
90
- const config = decodeWorktreeConfig(info)
91
- return {
92
- type: "local",
93
- directory: config.directory,
94
- }
95
- },
96
- }
@@ -1,19 +0,0 @@
1
- This is a plugin to simulate a remote environment locally. Add this to `.anymous/anymous.jsonc`:
2
-
3
- ```json
4
- "plugin": ["../packages/anymous/src/control-plane/dev/debug-workspace-plugin.ts"],
5
- ```
6
-
7
- In a separate terminal, run a separate anymous server. This will act like a remote server and the local instance will proxy all requests to it:
8
-
9
- ```
10
- ./packages/anymous/script/run-workspace-server
11
- ```
12
-
13
- With the plugin install, you can now run anymous and create a `debug` workspace type. This will create a "remote" workspace which talks to the second workspace server started above.
14
-
15
- How this works:
16
-
17
- - The workspace server needs to know the workspace id and port to run. It waits for this information to be written to a file and starts the server when the data is written.
18
- - The debug plugin writes this information in the `create` call to the workspace. So create a `debug` workspace will always kick off a new external server.
19
- - The server script watches for file changes, so whenver you create a new `debug` workspace it will restart with the new information. This means that there is only ever one working `debug` workspace at a time; when you create a new one all previous sessions will show that it can't connect because previous debug workspaces do not exist.
@@ -1,73 +0,0 @@
1
- import type { Plugin } from "@anymous-ai/plugin"
2
- import { rename, writeFile } from "node:fs/promises"
3
- import { randomInt } from "node:crypto"
4
- import { setTimeout as sleep } from "node:timers/promises"
5
-
6
- const DEV_DATA_FILE = "/tmp/anymous-workspace-dev-data.json"
7
- const DEV_DATA_TEMP_FILE = `${DEV_DATA_FILE}.tmp`
8
-
9
- async function waitForHealth(port: number) {
10
- const url = `http://127.0.0.1:${port}/global/health`
11
- const started = Date.now()
12
-
13
- while (Date.now() - started < 30_000) {
14
- try {
15
- const response = await fetch(url)
16
- if (response.ok) {
17
- return
18
- }
19
- } catch {}
20
-
21
- await sleep(250)
22
- }
23
-
24
- throw new Error(`Timed out waiting for debug server health check at ${url}`)
25
- }
26
-
27
- let PORT: number | undefined
28
-
29
- async function writeDebugData(port: number, id: string, env: Record<string, string | undefined>) {
30
- await writeFile(
31
- DEV_DATA_TEMP_FILE,
32
- JSON.stringify(
33
- {
34
- port,
35
- id,
36
- env,
37
- },
38
- null,
39
- 2,
40
- ),
41
- )
42
-
43
- await rename(DEV_DATA_TEMP_FILE, DEV_DATA_FILE)
44
- }
45
-
46
- export const DebugWorkspacePlugin: Plugin = async ({ experimental_workspace }) => {
47
- experimental_workspace.register("debug", {
48
- name: "Debug",
49
- description: "Create a debugging server",
50
- configure(config) {
51
- return config
52
- },
53
- async create(config, env) {
54
- const port = randomInt(5000, 9001)
55
- PORT = port
56
-
57
- await writeDebugData(port, config.id, env)
58
-
59
- await waitForHealth(port)
60
- },
61
- async remove(_config) {},
62
- target(_config) {
63
- return {
64
- type: "remote",
65
- url: `http://localhost:${PORT!}/`,
66
- }
67
- },
68
- })
69
-
70
- return {}
71
- }
72
-
73
- export default DebugWorkspacePlugin
@@ -1,59 +0,0 @@
1
- import { Schema, Struct } from "effect"
2
- import { ProjectV2 } from "@anymous-ai/core/project"
3
- import type { InstanceContext } from "@/project/instance-context"
4
- import { WorkspaceV2 } from "@anymous-ai/core/workspace"
5
- import type { DeepMutable } from "@anymous-ai/core/schema"
6
-
7
- export const WorkspaceInfo = Schema.Struct({
8
- id: WorkspaceV2.ID,
9
- type: Schema.String,
10
- name: Schema.String,
11
- branch: Schema.optional(Schema.NullOr(Schema.String)),
12
- directory: Schema.optional(Schema.NullOr(Schema.String)),
13
- extra: Schema.optional(Schema.NullOr(Schema.Unknown)),
14
- projectID: ProjectV2.ID,
15
- }).annotate({ identifier: "Workspace" })
16
- export type WorkspaceInfo = DeepMutable<Schema.Schema.Type<typeof WorkspaceInfo>>
17
-
18
- export const WorkspaceListedInfo = Schema.Struct(Struct.omit(WorkspaceInfo.fields, ["id"])).annotate({
19
- identifier: "WorkspaceListedInfo",
20
- })
21
- export type WorkspaceListedInfo = DeepMutable<Schema.Schema.Type<typeof WorkspaceListedInfo>>
22
-
23
- export const WorkspaceAdapterEntry = Schema.Struct({
24
- type: Schema.String,
25
- name: Schema.String,
26
- description: Schema.String,
27
- })
28
- export type WorkspaceAdapterEntry = Schema.Schema.Type<typeof WorkspaceAdapterEntry>
29
-
30
- export type Target =
31
- | {
32
- type: "local"
33
- directory: string
34
- }
35
- | {
36
- type: "remote"
37
- url: string | URL
38
- headers?: HeadersInit
39
- }
40
-
41
- export type WorkspaceAdapterContext = {
42
- readonly instance?: InstanceContext
43
- readonly workspaceID?: WorkspaceV2.ID
44
- }
45
-
46
- export type WorkspaceAdapter = {
47
- name: string
48
- description: string
49
- configure(info: WorkspaceInfo, context?: WorkspaceAdapterContext): WorkspaceInfo | Promise<WorkspaceInfo>
50
- create(
51
- info: WorkspaceInfo,
52
- env: Record<string, string | undefined>,
53
- from?: WorkspaceInfo,
54
- context?: WorkspaceAdapterContext,
55
- ): Promise<void>
56
- list?(context?: WorkspaceAdapterContext): WorkspaceListedInfo[] | Promise<WorkspaceListedInfo[]>
57
- remove(info: WorkspaceInfo, context?: WorkspaceAdapterContext): Promise<void>
58
- target(info: WorkspaceInfo, context?: WorkspaceAdapterContext): Target | Promise<Target>
59
- }
@@ -1,39 +0,0 @@
1
- import { GlobalBus, type GlobalEvent } from "@/bus/global"
2
- import { Effect } from "effect"
3
-
4
- export function waitEvent(input: { timeout: number; signal?: AbortSignal; fn: (event: GlobalEvent) => boolean }) {
5
- if (input.signal?.aborted) return Effect.fail(input.signal.reason ?? new Error("Request aborted"))
6
-
7
- return Effect.callback<void, unknown>((resume) => {
8
- const abort = () => {
9
- cleanup()
10
- resume(Effect.fail(input.signal?.reason ?? new Error("Request aborted")))
11
- }
12
-
13
- const handler = (event: GlobalEvent) => {
14
- try {
15
- if (!input.fn(event)) return
16
- cleanup()
17
- resume(Effect.void)
18
- } catch (error) {
19
- cleanup()
20
- resume(Effect.fail(error))
21
- }
22
- }
23
-
24
- const cleanup = () => {
25
- clearTimeout(timeout)
26
- GlobalBus.off("event", handler)
27
- input.signal?.removeEventListener("abort", abort)
28
- }
29
-
30
- const timeout = setTimeout(() => {
31
- cleanup()
32
- resume(Effect.fail(new Error("Timed out waiting for global event")))
33
- }, input.timeout)
34
-
35
- GlobalBus.on("event", handler)
36
- input.signal?.addEventListener("abort", abort, { once: true })
37
- return Effect.sync(cleanup)
38
- })
39
- }