windows-development-sandbox 1.18.4 → 1.23.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 (438) hide show
  1. package/README.md +1 -1
  2. package/config.example.json +17 -1
  3. package/dist/app/features/access/access.def.js +5 -2
  4. package/dist/app/features/access/access.run.js +7 -3
  5. package/dist/app/features/accounts/accounts.def.d.ts +33 -1
  6. package/dist/app/features/accounts/accounts.def.js +10 -4
  7. package/dist/app/features/accounts/accounts.run.d.ts +2 -0
  8. package/dist/app/features/accounts/accounts.run.js +7 -2
  9. package/dist/app/features/accounts/services.def.d.ts +7 -1
  10. package/dist/app/features/accounts/services.def.js +19 -16
  11. package/dist/app/features/accounts/services.run.d.ts +2 -0
  12. package/dist/app/features/accounts/services.run.js +44 -16
  13. package/dist/app/features/agent-commands/agent-commands.def.d.ts +37 -0
  14. package/dist/app/features/agent-commands/agent-commands.def.js +91 -0
  15. package/dist/app/features/agent-commands/agent-commands.run.d.ts +28 -0
  16. package/dist/app/features/agent-commands/agent-commands.run.js +35 -0
  17. package/dist/app/features/agent-commands/index.d.ts +2 -0
  18. package/dist/app/features/agent-commands/index.js +3 -0
  19. package/dist/app/features/agents/agents.def.d.ts +14 -1
  20. package/dist/app/features/agents/agents.def.js +61 -6
  21. package/dist/app/features/agents/agents.run.d.ts +1 -0
  22. package/dist/app/features/agents/agents.run.js +8 -1
  23. package/dist/app/features/agents/claude-env.def.d.ts +36 -0
  24. package/dist/app/features/agents/claude-env.def.js +305 -0
  25. package/dist/app/features/agents/env.def.d.ts +163 -0
  26. package/dist/app/features/agents/env.def.js +184 -0
  27. package/dist/app/features/agents/env.run.d.ts +43 -0
  28. package/dist/app/features/agents/env.run.js +86 -0
  29. package/dist/app/features/agents/index.d.ts +2 -0
  30. package/dist/app/features/agents/index.js +2 -0
  31. package/dist/app/features/defs.d.ts +171 -3
  32. package/dist/app/features/defs.js +9 -0
  33. package/dist/app/features/engine/engine.run.js +1 -1
  34. package/dist/app/features/github/github.def.d.ts +44 -3
  35. package/dist/app/features/github/github.def.js +145 -63
  36. package/dist/app/features/github/github.run.d.ts +9 -2
  37. package/dist/app/features/github/github.run.js +43 -5
  38. package/dist/app/features/health/health.def.js +8 -2
  39. package/dist/app/features/logs/logs.def.js +0 -8
  40. package/dist/app/features/projects/projects.def.js +2 -2
  41. package/dist/app/features/projects/projects.run.js +5 -5
  42. package/dist/app/features/sandbox/sandbox.def.js +7 -3
  43. package/dist/app/features/sessions/sessions.def.d.ts +4 -4
  44. package/dist/app/features/sessions/sessions.def.js +0 -5
  45. package/dist/app/features/sessions/sessions.run.d.ts +1 -1
  46. package/dist/app/features/sessions/sessions.run.js +2 -2
  47. package/dist/app/features/settings/categories.def.js +7 -2
  48. package/dist/app/features/settings/settings-rows.js +6 -2
  49. package/dist/app/features/settings/settings.def.js +1 -1
  50. package/dist/app/features/settings/settings.run.d.ts +8 -0
  51. package/dist/app/features/settings/settings.run.js +12 -3
  52. package/dist/app/features/storage/storage.run.js +18 -9
  53. package/dist/app/features/updates/update-lines.js +2 -2
  54. package/dist/app/features/updates/updates.def.js +1 -1
  55. package/dist/app/features/updates/updates.run.js +13 -3
  56. package/dist/app/features/vpn/vpn.def.d.ts +33 -0
  57. package/dist/app/features/vpn/vpn.def.js +30 -6
  58. package/dist/app/features/vpn/vpn.run.d.ts +11 -0
  59. package/dist/app/features/vpn/vpn.run.js +4 -1
  60. package/dist/app/features/web/web.def.js +2 -2
  61. package/dist/app/features/web/web.run.js +12 -4
  62. package/dist/app/kernel/errors.d.ts +7 -0
  63. package/dist/app/kernel/errors.js +18 -3
  64. package/dist/app/kernel/rpc.d.ts +6 -1
  65. package/dist/app/kernel/view.d.ts +11 -1
  66. package/dist/app/registry.js +7 -1
  67. package/dist/bin/agent-sandbox.js +2 -2
  68. package/dist/bin/{chunk-N4GXYTLV.js → chunk-JETGP2C3.js} +239 -72
  69. package/dist/bin/{chunk-MY7NLQQY.js → chunk-XZKOPGNH.js} +1 -1
  70. package/dist/bin/{chunk-FRPLQLSY.js → chunk-ZTTOF5V3.js} +6566 -4964
  71. package/dist/bin/claude-host.js +2 -2
  72. package/dist/bin/claude-sbx.js +2 -2
  73. package/dist/bin/codex-sbx.js +2 -2
  74. package/dist/bin/gemini-sbx.js +2 -2
  75. package/dist/bin/sandbox.js +2 -2
  76. package/dist/bin/sbx-hide.js +2 -2
  77. package/dist/bin/sbx-show.js +2 -2
  78. package/dist/cli/commands/agent-commands.d.ts +0 -1
  79. package/dist/cli/commands/agent-commands.js +2 -32
  80. package/dist/cli/commands/index.d.ts +1 -1
  81. package/dist/cli/commands/index.js +1 -1
  82. package/dist/cli/commands/launch/launch.js +2 -2
  83. package/dist/cli/commands/registry.js +3 -2
  84. package/dist/cli/manifest.d.ts +3 -3
  85. package/dist/cli/manifest.js +3 -2
  86. package/dist/cli/menu/coverage-exempt.d.ts +17 -0
  87. package/dist/cli/menu/coverage-exempt.js +61 -0
  88. package/dist/cli/menu/io-menu.d.ts +2 -0
  89. package/dist/cli/menu/io-menu.js +50 -5
  90. package/dist/cli/menu/menu.d.ts +1 -1
  91. package/dist/cli/menu/menu.js +3 -3
  92. package/dist/cli/menu/pages/accounts-page.js +1 -1
  93. package/dist/cli/menu/pages/agents-page.d.ts +7 -2
  94. package/dist/cli/menu/pages/agents-page.js +75 -13
  95. package/dist/cli/menu/pages/maintenance-page.d.ts +6 -0
  96. package/dist/cli/menu/pages/maintenance-page.js +10 -4
  97. package/dist/cli/menu/pages/sessions-page.d.ts +2 -0
  98. package/dist/cli/menu/pages/sessions-page.js +12 -4
  99. package/dist/cli/menu/pages/settings-page.js +13 -1
  100. package/dist/cli/menu/remote-menu.js +1 -1
  101. package/dist/cli/menu/shell.d.ts +5 -0
  102. package/dist/cli/menu/shell.js +13 -0
  103. package/dist/cli/menu/views.js +2 -1
  104. package/dist/cli/report.js +2 -0
  105. package/dist/cli/services/agent-commands-service.d.ts +2 -0
  106. package/dist/cli/services/agent-commands-service.js +13 -7
  107. package/dist/cli/services/vpn-service.d.ts +5 -1
  108. package/dist/cli/services/vpn-service.js +6 -1
  109. package/dist/cli/tui/app.d.ts +5 -0
  110. package/dist/cli/tui/app.js +2 -0
  111. package/dist/cli/tui/dialogs/text-screen.js +2 -1
  112. package/dist/cli/tui/terminal.js +3 -1
  113. package/dist/core/config/defaults.js +12 -1
  114. package/dist/core/detect/toolchains.js +9 -0
  115. package/dist/core/disk.d.ts +1 -5
  116. package/dist/core/disk.js +1 -16
  117. package/dist/core/schema/accounts.d.ts +6 -0
  118. package/dist/core/schema/accounts.js +13 -11
  119. package/dist/core/schema/codex.d.ts +29 -0
  120. package/dist/core/schema/codex.js +24 -0
  121. package/dist/core/schema/config.d.ts +58 -14
  122. package/dist/core/schema/config.js +6 -4
  123. package/dist/core/schema/github.js +1 -1
  124. package/dist/core/schema/index.d.ts +1 -0
  125. package/dist/core/schema/index.js +1 -0
  126. package/dist/core/schema/profile.js +8 -4
  127. package/dist/core/schema/resume.js +1 -1
  128. package/dist/core/schema/sandbox.js +3 -3
  129. package/dist/core/schema/toolchains.d.ts +4 -0
  130. package/dist/core/schema/toolchains.js +3 -0
  131. package/dist/core/schema/vpn.js +1 -1
  132. package/dist/core/schema/web.js +3 -3
  133. package/dist/core/types.d.ts +8 -0
  134. package/dist/core/util/errors.d.ts +11 -1
  135. package/dist/core/util/errors.js +7 -1
  136. package/dist/core/util/index.d.ts +1 -1
  137. package/dist/core/util/index.js +1 -1
  138. package/dist/guest/accounts/adapter.d.ts +2 -0
  139. package/dist/guest/accounts/adapters.js +4 -0
  140. package/dist/guest/accounts/apply.d.ts +10 -6
  141. package/dist/guest/accounts/kinds/cfx.d.ts +7 -0
  142. package/dist/guest/accounts/kinds/cfx.js +33 -3
  143. package/dist/guest/accounts/kinds/comet.d.ts +7 -0
  144. package/dist/guest/accounts/kinds/comet.js +50 -0
  145. package/dist/guest/accounts/kinds/perplexity.d.ts +2 -0
  146. package/dist/guest/accounts/kinds/perplexity.js +12 -0
  147. package/dist/guest/accounts/watch.d.ts +2 -0
  148. package/dist/guest/accounts/watch.js +12 -2
  149. package/dist/guest/agents/agent-files.d.ts +26 -6
  150. package/dist/guest/agents/agent-files.js +84 -14
  151. package/dist/guest/agents/agent-installer.js +1 -1
  152. package/dist/guest/agents/local-state.d.ts +5 -2
  153. package/dist/guest/agents/local-state.js +24 -10
  154. package/dist/guest/agents/profile-links.d.ts +2 -0
  155. package/dist/guest/agents/profile-links.js +18 -4
  156. package/dist/guest/apps/after-install.js +19 -0
  157. package/dist/guest/apps/app-installer.d.ts +11 -0
  158. package/dist/guest/apps/app-installer.js +69 -6
  159. package/dist/guest/apps/comet-unpack.d.ts +20 -0
  160. package/dist/guest/apps/comet-unpack.js +127 -0
  161. package/dist/guest/apps/index.d.ts +1 -1
  162. package/dist/guest/apps/index.js +1 -1
  163. package/dist/guest/apps/resolvers-agents-web.d.ts +2 -0
  164. package/dist/guest/apps/resolvers-agents-web.js +7 -0
  165. package/dist/guest/apps/resolvers.js +2 -0
  166. package/dist/guest/apps/shortcuts.d.ts +2 -0
  167. package/dist/guest/apps/shortcuts.js +1 -0
  168. package/dist/guest/apps/unpack.js +14 -4
  169. package/dist/guest/boot/boot.d.ts +45 -16
  170. package/dist/guest/boot/boot.js +325 -149
  171. package/dist/guest/boot/graph.d.ts +252 -0
  172. package/dist/guest/boot/graph.js +257 -0
  173. package/dist/guest/boot/guide-lines.d.ts +25 -0
  174. package/dist/guest/boot/guide-lines.js +41 -0
  175. package/dist/guest/boot/guide.d.ts +1 -4
  176. package/dist/guest/boot/guide.js +6 -8
  177. package/dist/guest/boot/runner.d.ts +77 -0
  178. package/dist/guest/boot/runner.js +215 -0
  179. package/dist/guest/browser/cdp.d.ts +71 -0
  180. package/dist/guest/browser/cdp.js +306 -0
  181. package/dist/guest/browser/comet.d.ts +28 -0
  182. package/dist/guest/browser/comet.js +155 -0
  183. package/dist/guest/daemon/project-provisioner.js +6 -1
  184. package/dist/guest/daemon/sessions.js +2 -1
  185. package/dist/guest/devtools/fivem.d.ts +1 -1
  186. package/dist/guest/devtools/fivem.js +243 -3
  187. package/dist/guest/entries/daemon.js +2 -0
  188. package/dist/guest/runtime/log.d.ts +12 -0
  189. package/dist/guest/runtime/log.js +29 -5
  190. package/dist/guest/runtime/pools.d.ts +24 -0
  191. package/dist/guest/runtime/pools.js +60 -0
  192. package/dist/guest/runtime/process.d.ts +4 -0
  193. package/dist/guest/runtime/process.js +38 -1
  194. package/dist/guest/runtime/status.d.ts +5 -1
  195. package/dist/guest/runtime/status.js +19 -0
  196. package/dist/guest/setup/addon-mcp.d.ts +1 -1
  197. package/dist/guest/setup/addon-mcp.js +52 -12
  198. package/dist/guest/setup/agent-addons.d.ts +3 -2
  199. package/dist/guest/setup/agent-addons.js +12 -3
  200. package/dist/guest/setup/environment.d.ts +1 -1
  201. package/dist/guest/setup/environment.js +25 -12
  202. package/dist/guest/setup/headroom.d.ts +8 -3
  203. package/dist/guest/setup/headroom.js +44 -15
  204. package/dist/guest/setup/path-plan.d.ts +28 -0
  205. package/dist/guest/setup/path-plan.js +69 -2
  206. package/dist/guest/setup/shell-path.d.ts +1 -1
  207. package/dist/guest/setup/shell-path.js +3 -3
  208. package/dist/guest/toolchains/fivem/artifacts.d.ts +48 -1
  209. package/dist/guest/toolchains/fivem/artifacts.js +97 -4
  210. package/dist/guest/toolchains/fivem/fivem.d.ts +32 -1
  211. package/dist/guest/toolchains/fivem/fivem.js +168 -3
  212. package/dist/guest/toolchains/fivem/scaffold.d.ts +35 -0
  213. package/dist/guest/toolchains/fivem/scaffold.js +105 -0
  214. package/dist/guest/toolchains/fivem/serve-plan.d.ts +34 -0
  215. package/dist/guest/toolchains/fivem/serve-plan.js +61 -0
  216. package/dist/guest/toolchains/installers.d.ts +6 -10
  217. package/dist/guest/toolchains/installers.js +4 -12
  218. package/dist/guest/toolchains/languages/go.js +1 -1
  219. package/dist/guest/toolchains/languages/node.js +2 -1
  220. package/dist/guest/toolchains/languages/php.d.ts +2 -0
  221. package/dist/guest/toolchains/languages/php.js +13 -1
  222. package/dist/guest/toolchains/languages/python-tools.js +1 -1
  223. package/dist/guest/toolchains/languages/ruby.js +1 -1
  224. package/dist/guest/toolchains/native/autosdk.d.ts +3 -0
  225. package/dist/guest/toolchains/native/autosdk.js +50 -0
  226. package/dist/guest/toolchains/native/binstall.js +1 -1
  227. package/dist/guest/toolchains/native/msvc/packages.js +10 -4
  228. package/dist/guest/toolchains/native/rust.d.ts +2 -0
  229. package/dist/guest/toolchains/native/rust.js +11 -4
  230. package/dist/guest/toolchains/native/unreal.d.ts +2 -0
  231. package/dist/guest/toolchains/native/unreal.js +19 -6
  232. package/dist/guest/toolchains/native/vcruntime.d.ts +2 -3
  233. package/dist/guest/toolchains/native/vcruntime.js +12 -7
  234. package/dist/guest/toolchains/native/visual-studio.d.ts +5 -2
  235. package/dist/guest/toolchains/native/visual-studio.js +127 -25
  236. package/dist/guest/toolchains/native/vs-request.d.ts +23 -0
  237. package/dist/guest/toolchains/native/vs-request.js +62 -1
  238. package/dist/guest/toolchains/not-yet.d.ts +1 -1
  239. package/dist/guest/toolchains/not-yet.js +3 -3
  240. package/dist/guest/toolchains/persisted.js +2 -7
  241. package/dist/guest/toolchains/plan.js +27 -11
  242. package/dist/guest/toolchains/scheduler.d.ts +2 -21
  243. package/dist/guest/toolchains/scheduler.js +7 -121
  244. package/dist/guest/toolchains/setup.d.ts +15 -2
  245. package/dist/guest/toolchains/setup.js +39 -20
  246. package/dist/guest/toolchains/signature.d.ts +5 -0
  247. package/dist/guest/toolchains/signature.js +22 -0
  248. package/dist/guest/toolchains/split.d.ts +28 -0
  249. package/dist/guest/toolchains/split.js +60 -0
  250. package/dist/guest/toolchains/steam/client.js +2 -1
  251. package/dist/guest/toolchains/step-scheduler.d.ts +51 -0
  252. package/dist/guest/toolchains/step-scheduler.js +147 -0
  253. package/dist/guest/toolchains/step.d.ts +13 -0
  254. package/dist/guest/toolchains/tools/git.js +18 -0
  255. package/dist/guest/vpn/openvpn.js +3 -4
  256. package/dist/guest/vpn/tunnel.d.ts +3 -0
  257. package/dist/guest/vpn/tunnel.js +10 -12
  258. package/dist/guest/vpn/vpn.js +6 -1
  259. package/dist/guest/vpn/wireguard.js +11 -4
  260. package/dist/host/accounts/deliver.js +7 -0
  261. package/dist/host/accounts/handoff.js +2 -6
  262. package/dist/host/accounts/index.d.ts +1 -1
  263. package/dist/host/accounts/index.js +1 -1
  264. package/dist/host/accounts/kinds/cfx.d.ts +1 -1
  265. package/dist/host/accounts/kinds/cfx.js +47 -4
  266. package/dist/host/accounts/kinds/comet.d.ts +2 -0
  267. package/dist/host/accounts/kinds/comet.js +6 -0
  268. package/dist/host/accounts/kinds/perplexity.d.ts +2 -0
  269. package/dist/host/accounts/kinds/perplexity.js +30 -0
  270. package/dist/host/accounts/leases.d.ts +9 -3
  271. package/dist/host/accounts/leases.js +13 -2
  272. package/dist/host/accounts/source.d.ts +7 -1
  273. package/dist/host/accounts/source.js +28 -1
  274. package/dist/host/accounts/sources.js +4 -0
  275. package/dist/host/agent-commands/commands.js +1 -1
  276. package/dist/host/agent-commands/forwarders.d.ts +14 -2
  277. package/dist/host/agent-commands/forwarders.js +31 -13
  278. package/dist/host/agent-commands/reconcile.d.ts +2 -1
  279. package/dist/host/agent-commands/reconcile.js +7 -8
  280. package/dist/host/agent-commands/user-path.d.ts +5 -0
  281. package/dist/host/agent-commands/user-path.js +13 -0
  282. package/dist/host/github/deliver.d.ts +1 -1
  283. package/dist/host/github/deliver.js +20 -1
  284. package/dist/host/github/index.d.ts +2 -1
  285. package/dist/host/github/index.js +1 -0
  286. package/dist/host/github/token.d.ts +13 -1
  287. package/dist/host/github/token.js +19 -2
  288. package/dist/host/github/verify.d.ts +27 -0
  289. package/dist/host/github/verify.js +61 -0
  290. package/dist/host/launch/hints/fivem.d.ts +3 -1
  291. package/dist/host/launch/hints/fivem.js +68 -2
  292. package/dist/host/launch/session-file.js +5 -0
  293. package/dist/host/launch/toolchains.d.ts +2 -1
  294. package/dist/host/launch/toolchains.js +5 -3
  295. package/dist/host/profile/accounts.js +2 -4
  296. package/dist/host/profile/claude-login.d.ts +3 -2
  297. package/dist/host/profile/claude-login.js +3 -13
  298. package/dist/host/vpn/index.d.ts +2 -1
  299. package/dist/host/vpn/index.js +2 -1
  300. package/dist/host/vpn/last.d.ts +28 -0
  301. package/dist/host/vpn/last.js +43 -0
  302. package/dist/host/vpn/login.d.ts +3 -1
  303. package/dist/host/vpn/login.js +17 -3
  304. package/dist/host/vpn/nordvpn.d.ts +2 -4
  305. package/dist/host/vpn/nordvpn.js +2 -24
  306. package/dist/runtime/agent.js +433 -90
  307. package/dist/runtime/daemon.js +3378 -1546
  308. package/dist/runtime/db.js +363 -90
  309. package/dist/runtime/main.js +5134 -2096
  310. package/dist/runtime/netproxy.js +308 -69
  311. package/dist/runtime/tool.js +2867 -1765
  312. package/dist/runtime/view.js +308 -69
  313. package/dist/selftest/agent-commands.test.js +45 -7
  314. package/dist/selftest/agent-paths.test.js +40 -13
  315. package/dist/selftest/agent-settings.test.d.ts +2 -0
  316. package/dist/selftest/agent-settings.test.js +94 -0
  317. package/dist/selftest/agents-web.test.d.ts +2 -0
  318. package/dist/selftest/agents-web.test.js +647 -0
  319. package/dist/selftest/app.test.js +7 -3
  320. package/dist/selftest/boot-runner.test.d.ts +2 -0
  321. package/dist/selftest/boot-runner.test.js +456 -0
  322. package/dist/selftest/channel.test.js +15 -0
  323. package/dist/selftest/cli.test.js +4 -0
  324. package/dist/selftest/fivem.test.js +249 -3
  325. package/dist/selftest/github.test.js +94 -9
  326. package/dist/selftest/guest-boot.test.js +3 -0
  327. package/dist/selftest/health.test.js +1 -1
  328. package/dist/selftest/index.js +10 -0
  329. package/dist/selftest/layout.test.js +5 -0
  330. package/dist/selftest/menu-coverage.test.d.ts +2 -0
  331. package/dist/selftest/menu-coverage.test.js +46 -0
  332. package/dist/selftest/menu-screens.js +37 -1
  333. package/dist/selftest/menu.test.js +5 -3
  334. package/dist/selftest/pc-installs.test.js +5 -0
  335. package/dist/selftest/persisted-installs.test.js +72 -0
  336. package/dist/selftest/service-accounts.test.js +3 -2
  337. package/dist/selftest/support/engine-golden.js +28 -1
  338. package/dist/selftest/support/fixtures.d.ts +15 -0
  339. package/dist/selftest/support/web-preview.d.ts +34 -1
  340. package/dist/selftest/support/web-preview.js +21 -18
  341. package/dist/selftest/toolchains.test.js +23 -1
  342. package/dist/selftest/ui-text.test.d.ts +7 -0
  343. package/dist/selftest/ui-text.test.js +300 -0
  344. package/dist/selftest/vpn.test.js +51 -3
  345. package/dist/shared/accounts/anthropic.d.ts +5 -0
  346. package/dist/shared/accounts/anthropic.js +15 -0
  347. package/dist/shared/accounts/index.d.ts +3 -0
  348. package/dist/shared/accounts/index.js +3 -0
  349. package/dist/shared/accounts/kinds/comet.d.ts +12 -0
  350. package/dist/shared/accounts/kinds/comet.js +64 -0
  351. package/dist/shared/accounts/kinds/perplexity.d.ts +8 -0
  352. package/dist/shared/accounts/kinds/perplexity.js +37 -0
  353. package/dist/shared/accounts/kinds.d.ts +24 -5
  354. package/dist/shared/accounts/kinds.js +86 -4
  355. package/dist/shared/accounts/payloads.d.ts +81 -0
  356. package/dist/shared/accounts/payloads.js +39 -1
  357. package/dist/shared/apps/agent-addons.d.ts +33 -5
  358. package/dist/shared/apps/agent-addons.js +95 -3
  359. package/dist/shared/apps/catalogue-agents-web.d.ts +14 -0
  360. package/dist/shared/apps/catalogue-agents-web.js +112 -0
  361. package/dist/shared/apps/catalogue-modding.js +32 -1
  362. package/dist/shared/apps/catalogue.d.ts +27 -3
  363. package/dist/shared/apps/catalogue.js +2 -1
  364. package/dist/shared/apps/index.d.ts +3 -1
  365. package/dist/shared/apps/index.js +3 -1
  366. package/dist/shared/channel/schema.d.ts +40 -3
  367. package/dist/shared/channel/schema.js +9 -0
  368. package/dist/shared/channel/secrets.d.ts +19 -0
  369. package/dist/shared/concurrency/index.d.ts +3 -0
  370. package/dist/shared/concurrency/index.js +3 -0
  371. package/dist/shared/concurrency/installer-retry.d.ts +6 -0
  372. package/dist/shared/concurrency/installer-retry.js +10 -0
  373. package/dist/shared/concurrency/limiter.d.ts +19 -0
  374. package/dist/shared/concurrency/limiter.js +67 -0
  375. package/dist/shared/concurrency/pools.d.ts +7 -0
  376. package/dist/shared/concurrency/pools.js +9 -0
  377. package/dist/shared/download/archive.d.ts +2 -0
  378. package/dist/shared/download/archive.js +11 -1
  379. package/dist/shared/download/bounded-fetch.d.ts +13 -0
  380. package/dist/shared/download/bounded-fetch.js +40 -0
  381. package/dist/shared/download/downloader.d.ts +5 -0
  382. package/dist/shared/download/downloader.js +50 -38
  383. package/dist/shared/download/index.d.ts +2 -1
  384. package/dist/shared/download/index.js +2 -1
  385. package/dist/shared/io/disk.d.ts +9 -0
  386. package/dist/shared/io/disk.js +19 -0
  387. package/dist/shared/io/index.d.ts +1 -0
  388. package/dist/shared/io/index.js +1 -0
  389. package/dist/shared/readiness.d.ts +9 -0
  390. package/dist/shared/readiness.js +11 -0
  391. package/dist/shared/signer.d.ts +24 -0
  392. package/dist/shared/signer.js +15 -0
  393. package/dist/shared/vpn/failure.d.ts +10 -0
  394. package/dist/shared/vpn/failure.js +28 -0
  395. package/dist/sync/watcher.js +2 -0
  396. package/dist/web/index.html +1 -1
  397. package/dist/web/{main-GVZWWP4I.js → main-CCILLX2M.js} +75 -74
  398. package/native/csharp/HcsHost/AssemblyInfo.cs +3 -3
  399. package/native/csharp/HostTools/AssemblyInfo.cs +3 -3
  400. package/native/csharp/HostTools/Program.cs +14 -1
  401. package/native/csharp/HostTools/UserPath.cs +17 -0
  402. package/native/csharp/StorageHelper/AssemblyInfo.cs +3 -3
  403. package/native/scripts/edit-user-path.ps1 +6 -2
  404. package/package.json +1 -1
  405. package/sandbox/addons/browser-use-mcp/requirements.in +1 -0
  406. package/sandbox/addons/browser-use-mcp/requirements.txt +2350 -0
  407. package/sandbox/addons/chrome-devtools-mcp/package-lock.json +38 -0
  408. package/sandbox/addons/chrome-devtools-mcp/package.json +7 -0
  409. package/sandbox/addons/comet-mcp/package-lock.json +1277 -0
  410. package/sandbox/addons/comet-mcp/package.json +7 -0
  411. package/sandbox/addons/perplexity-mcp/package-lock.json +1655 -0
  412. package/sandbox/addons/perplexity-mcp/package.json +7 -0
  413. package/sandbox/scripts/add-firewall-port.ps1 +18 -4
  414. package/sandbox/scripts/get-signature.ps1 +13 -0
  415. package/sandbox/scripts/set-machine-environment.ps1 +30 -15
  416. package/sandbox/templates/fivem/README.txt +6 -2
  417. package/sandbox/templates/fivem/cs/Client/Client.csproj +15 -0
  418. package/sandbox/templates/fivem/cs/Client/ClientMain.cs +20 -0
  419. package/sandbox/templates/fivem/cs/Server/Server.csproj +14 -0
  420. package/sandbox/templates/fivem/cs/Server/ServerMain.cs +20 -0
  421. package/sandbox/templates/fivem/cs/fxmanifest.lua +11 -0
  422. package/sandbox/templates/fivem/js/client.js +12 -0
  423. package/sandbox/templates/fivem/js/fxmanifest.lua +9 -0
  424. package/sandbox/templates/fivem/js/server.js +6 -0
  425. package/sandbox/templates/fivem/lua/client.lua +8 -0
  426. package/sandbox/templates/fivem/lua/fxmanifest.lua +10 -0
  427. package/sandbox/templates/fivem/lua/server.lua +6 -0
  428. package/sandbox/templates/fivem/server.cfg +37 -0
  429. package/sandbox/templates/fivem/ts/build.js +17 -0
  430. package/sandbox/templates/fivem/ts/fxmanifest.lua +9 -0
  431. package/sandbox/templates/fivem/ts/package.json +16 -0
  432. package/sandbox/templates/fivem/ts/src/client/client.ts +12 -0
  433. package/sandbox/templates/fivem/ts/src/client/tsconfig.json +13 -0
  434. package/sandbox/templates/fivem/ts/src/server/server.ts +6 -0
  435. package/sandbox/templates/fivem/ts/src/server/tsconfig.json +13 -0
  436. package/schemas/config.schema.json +120 -27
  437. package/schemas/sandbox-config.schema.json +45 -14
  438. package/sandbox/scripts/get-signer.ps1 +0 -8
@@ -2,8 +2,8 @@
2
2
  import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
3
3
  import {
4
4
  run
5
- } from "./chunk-N4GXYTLV.js";
6
- import "./chunk-FRPLQLSY.js";
5
+ } from "./chunk-JETGP2C3.js";
6
+ import "./chunk-ZTTOF5V3.js";
7
7
 
8
8
  // src/bin/claude-host.ts
9
9
  var args = process.argv.slice(2);
@@ -2,8 +2,8 @@
2
2
  import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
3
3
  import {
4
4
  run
5
- } from "./chunk-N4GXYTLV.js";
6
- import "./chunk-FRPLQLSY.js";
5
+ } from "./chunk-JETGP2C3.js";
6
+ import "./chunk-ZTTOF5V3.js";
7
7
 
8
8
  // src/bin/claude-sbx.ts
9
9
  run(process.argv.slice(2), { harness: "claude" });
@@ -2,8 +2,8 @@
2
2
  import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
3
3
  import {
4
4
  run
5
- } from "./chunk-N4GXYTLV.js";
6
- import "./chunk-FRPLQLSY.js";
5
+ } from "./chunk-JETGP2C3.js";
6
+ import "./chunk-ZTTOF5V3.js";
7
7
 
8
8
  // src/bin/codex-sbx.ts
9
9
  run(process.argv.slice(2), { harness: "codex" });
@@ -2,8 +2,8 @@
2
2
  import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
3
3
  import {
4
4
  run
5
- } from "./chunk-N4GXYTLV.js";
6
- import "./chunk-FRPLQLSY.js";
5
+ } from "./chunk-JETGP2C3.js";
6
+ import "./chunk-ZTTOF5V3.js";
7
7
 
8
8
  // src/bin/gemini-sbx.ts
9
9
  run(process.argv.slice(2), { harness: "gemini" });
@@ -2,8 +2,8 @@
2
2
  import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
3
3
  import {
4
4
  run
5
- } from "./chunk-N4GXYTLV.js";
6
- import "./chunk-FRPLQLSY.js";
5
+ } from "./chunk-JETGP2C3.js";
6
+ import "./chunk-ZTTOF5V3.js";
7
7
 
8
8
  // src/bin/sandbox.ts
9
9
  run(process.argv.slice(2));
@@ -2,8 +2,8 @@
2
2
  import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
3
3
  import {
4
4
  run
5
- } from "./chunk-N4GXYTLV.js";
6
- import "./chunk-FRPLQLSY.js";
5
+ } from "./chunk-JETGP2C3.js";
6
+ import "./chunk-ZTTOF5V3.js";
7
7
 
8
8
  // src/bin/sbx-hide.ts
9
9
  run(process.argv.slice(2), { command: "hide" });
@@ -2,8 +2,8 @@
2
2
  import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
3
3
  import {
4
4
  run
5
- } from "./chunk-N4GXYTLV.js";
6
- import "./chunk-FRPLQLSY.js";
5
+ } from "./chunk-JETGP2C3.js";
6
+ import "./chunk-ZTTOF5V3.js";
7
7
 
8
8
  // src/bin/sbx-show.ts
9
9
  run(process.argv.slice(2), { command: "show" });
@@ -3,4 +3,3 @@ import type { Reconciled } from '../../host/agent-commands/index.js';
3
3
  import { type Context } from './context.js';
4
4
  /** Brings this PC in line with agentCommands and says what changed (used after on/off, settings and launch). */
5
5
  export declare function syncAgentCommands(ctx: Context, config: Config, quiet?: boolean): Reconciled | null;
6
- export declare function agentCommandsCommand(ctx: Context): number;
@@ -1,5 +1,4 @@
1
- import { fail } from '../../core/util/index.js';
2
- import { c, table } from '../output/index.js';
1
+ import { c } from '../output/index.js';
3
2
  import { AgentCommandsService } from '../services/index.js';
4
3
  /** Brings this PC in line with agentCommands and says what changed (used after on/off, settings and launch). */
5
4
  export function syncAgentCommands(ctx, config, quiet = false) {
@@ -7,39 +6,10 @@ export function syncAgentCommands(ctx, config, quiet = false) {
7
6
  if (!result || !result.changed || quiet)
8
7
  return result;
9
8
  if (result.on) {
10
- console.log('Agent commands (Beta) are on for: ' +
11
- (result.commands.map((a) => a.command).join(', ') || 'no installed agents found'));
9
+ console.log('Agent commands are on for: ' + (result.commands.map((a) => a.command).join(', ') || 'no installed agents found'));
12
10
  console.log(c.dim('Open a new terminal, then type e.g. claude in any project folder. Run the real one: set SANDBOX_AGENT_DIRECT=1'));
13
11
  }
14
12
  else
15
13
  console.log('Agent commands are off: claude, codex ... run on this PC again (open a new terminal).');
16
14
  return result;
17
15
  }
18
- export function agentCommandsCommand(ctx) {
19
- const service = new AgentCommandsService(ctx);
20
- service.assertOnPc();
21
- const action = ctx.options.positionals[0] ?? 'status';
22
- if (action === 'status') {
23
- const { enabled, dir, found } = service.status();
24
- console.log('Agent commands (Beta): ' + (enabled ? c.green('on') : 'off') + c.dim(' (' + dir + ')'));
25
- if (found.length)
26
- table(found.map((a) => [a.command, 'sandboxed ' + a.harness + (enabled ? '' : ' when on'), c.dim('real: ' + a.real)]));
27
- else
28
- console.log(c.dim('No agents found on this PC (claude, codex, gemini ... on your PATH).'));
29
- if (!enabled)
30
- console.log(c.dim('Turn on with: sandbox agent-commands on'));
31
- return 0;
32
- }
33
- if (action !== 'on' && action !== 'off')
34
- fail('Unknown action "' + action + '".', 'Use: sandbox agent-commands [status|on|off]');
35
- const result = service.setEnabled(action === 'on');
36
- if (result?.on) {
37
- console.log('Agent commands (Beta) are on: ' +
38
- (result.commands.map((a) => a.command).join(', ') || 'no installed agents found yet'));
39
- console.log(c.dim('Open a new terminal, then type e.g. claude in a project folder: it starts in a hidden sandbox and attaches.'));
40
- console.log(c.dim('Run the real one on this PC: set SANDBOX_AGENT_DIRECT=1 (PowerShell: $env:SANDBOX_AGENT_DIRECT=1). Turn off: sandbox agent-commands off'));
41
- }
42
- else
43
- console.log('Agent commands are off: claude, codex ... run on this PC again. Open a new terminal.');
44
- return 0;
45
- }
@@ -7,5 +7,5 @@ export { contextOrDefaults } from './context.js';
7
7
  export { attach, db, exec } from './sessions/index.js';
8
8
  export { resume } from './resume.js';
9
9
  export { claudeHost, config, doctor, hostCommand, logs, migrateBeforeCommand, sync, updatesBeforeCommand, watcher, } from './maintenance/index.js';
10
- export { agentCommandsCommand, syncAgentCommands } from './agent-commands.js';
10
+ export { syncAgentCommands } from './agent-commands.js';
11
11
  export { HANDLERS, type Handler } from './registry.js';
@@ -7,5 +7,5 @@ export { contextOrDefaults } from './context.js';
7
7
  export { attach, db, exec } from './sessions/index.js';
8
8
  export { resume } from './resume.js';
9
9
  export { claudeHost, config, doctor, hostCommand, logs, migrateBeforeCommand, sync, updatesBeforeCommand, watcher, } from './maintenance/index.js';
10
- export { agentCommandsCommand, syncAgentCommands } from './agent-commands.js';
10
+ export { syncAgentCommands } from './agent-commands.js';
11
11
  export { HANDLERS } from './registry.js';
@@ -74,13 +74,13 @@ class Launcher {
74
74
  return this.launchSessions();
75
75
  return this.launchHere();
76
76
  }
77
- /** agentCommands (Beta) follows the config: a setting changed in the file takes effect here too. Never blocks. */
77
+ /** agentCommands follows the config: a setting changed in the file takes effect here too. Never blocks. */
78
78
  syncAgentCommands() {
79
79
  try {
80
80
  syncAgentCommands(this.ctx, this.ctx.loaded.config);
81
81
  }
82
82
  catch (e) {
83
- console.warn('Agent commands (Beta): ' + errMsg(e));
83
+ console.warn('Agent commands: ' + errMsg(e));
84
84
  }
85
85
  }
86
86
  /**
@@ -3,6 +3,7 @@ import { launch } from './launch/index.js';
3
3
  import { setup } from './setup/index.js';
4
4
  import { cleanData, showData } from '../../app/features/data/index.js';
5
5
  import { attach, db, exec } from './sessions/index.js';
6
+ import { agentCommandsStatus } from '../../app/features/agent-commands/index.js';
6
7
  import { listAccounts } from '../../app/features/accounts/index.js';
7
8
  import { containedStatus, showStorage } from '../../app/features/storage/index.js';
8
9
  import { listProjects } from '../../app/features/projects/index.js';
@@ -11,7 +12,6 @@ import { fail } from '../../core/util/index.js';
11
12
  import { claudeHost, config, doctor, hostCommand, logs, sync, watcher } from './maintenance/index.js';
12
13
  import { engine } from './engine.js';
13
14
  import { resume } from './resume.js';
14
- import { agentCommandsCommand } from './agent-commands.js';
15
15
  import { vpn } from './vpn.js';
16
16
  import { github } from './github.js';
17
17
  import { web, webServer } from './web.js';
@@ -21,7 +21,6 @@ export const HANDLERS = {
21
21
  generate: (ctx) => launch(ctx, true),
22
22
  attach: attach,
23
23
  exec: exec,
24
- 'agent-commands': agentCommandsCommand,
25
24
  db: db,
26
25
  resume: resume,
27
26
  // The bare command lists; its actions (save, use ...) are the operations' hints.
@@ -52,6 +51,8 @@ export const HANDLERS = {
52
51
  'host-claude': claudeHost,
53
52
  host: hostCommand,
54
53
  _watch: watcher,
54
+ // The bare command shows the status; on and off are the operations' hints (src/app/features/agent-commands).
55
+ 'agent-commands': definitionHandler(agentCommandsStatus),
55
56
  vpn: vpn,
56
57
  github: github,
57
58
  web: web,
@@ -296,7 +296,7 @@ declare const COMMAND_LIST: readonly [{
296
296
  readonly name: "account";
297
297
  readonly summary: "agent logins (list, save, use, default, remove) and service sign-ins (status, import, login, logout)";
298
298
  readonly group: "Projects & accounts";
299
- readonly examples: readonly ["sandbox account save work save the login you signed in with inside the sandbox", "sandbox account use work the sandbox uses it (running sessions restart)", "sandbox account status the service sign-ins (Epic, Steam, Unity, signing keys ...)", "sandbox account import epic take this PC's Epic Games Launcher sign-in for sandboxes", "sandbox account login cfx type a FiveM server key to keep for sandboxes", "sandbox account logout steam forget a service sign-in", "sandbox account save free --api-key save an Anthropic API key you paste in (not shown)"];
299
+ readonly examples: readonly ["sandbox account save work save the login you signed in with inside the sandbox", "sandbox account use work the sandbox uses it (running sessions restart)", "sandbox account status the service sign-ins (Epic, Steam, Unity, signing keys ...)", "sandbox account import epic take this PC's Epic Games Launcher sign-in for sandboxes", "sandbox account login cfx type a FiveM server key to keep for sandboxes", "sandbox account login perplexity type a Perplexity API key (or: import perplexity --from .env)", "sandbox account logout steam forget a service sign-in", "sandbox account save free --api-key save an Anthropic API key you paste in (not shown)"];
300
300
  readonly args: readonly [{
301
301
  readonly name: "action";
302
302
  readonly description: "what to do";
@@ -304,7 +304,7 @@ declare const COMMAND_LIST: readonly [{
304
304
  readonly choices: readonly ["list", "save", "use", "default", "rename", "remove"];
305
305
  }, {
306
306
  readonly name: "name";
307
- readonly description: "account name, or the service (status, import, login, logout): epic, steam, unity, cfx, keystore, play, expo or appstore";
307
+ readonly description: "account name, or the service (status, import, login, logout): epic, steam, unity, cfx, keystore, play, expo, appstore, perplexity or comet";
308
308
  readonly required: false;
309
309
  readonly choices: "accounts";
310
310
  }];
@@ -702,7 +702,7 @@ declare const COMMAND_LIST: readonly [{
702
702
  readonly examples: readonly ["sandbox config set sandbox.memoryMb 8192", "sandbox config get sandbox.memoryMb", "sandbox config reset sandbox.memoryMb", "sandbox config list", "sandbox config export team-settings.json", "sandbox config import team-settings.json"];
703
703
  }, {
704
704
  readonly name: "agent-commands";
705
- readonly summary: "(Beta) make claude, codex ... on this PC start in a hidden sandbox and attach";
705
+ readonly summary: "make claude, codex ... on this PC start in a hidden sandbox and attach";
706
706
  readonly group: "Advanced";
707
707
  readonly args: readonly [{
708
708
  readonly name: "action";
@@ -286,6 +286,7 @@ const COMMAND_LIST = [
286
286
  'sandbox account status the service sign-ins (Epic, Steam, Unity, signing keys ...)',
287
287
  "sandbox account import epic take this PC's Epic Games Launcher sign-in for sandboxes",
288
288
  'sandbox account login cfx type a FiveM server key to keep for sandboxes',
289
+ 'sandbox account login perplexity type a Perplexity API key (or: import perplexity --from .env)',
289
290
  'sandbox account logout steam forget a service sign-in',
290
291
  'sandbox account save free --api-key save an Anthropic API key you paste in (not shown)',
291
292
  ],
@@ -298,7 +299,7 @@ const COMMAND_LIST = [
298
299
  },
299
300
  {
300
301
  name: 'name',
301
- description: 'account name, or the service (status, import, login, logout): epic, steam, unity, cfx, keystore, play, expo or appstore',
302
+ description: 'account name, or the service (status, import, login, logout): epic, steam, unity, cfx, keystore, play, expo, appstore, perplexity or comet',
302
303
  required: false,
303
304
  choices: 'accounts',
304
305
  },
@@ -491,7 +492,7 @@ const COMMAND_LIST = [
491
492
  },
492
493
  {
493
494
  name: 'agent-commands',
494
- summary: '(Beta) make claude, codex ... on this PC start in a hidden sandbox and attach',
495
+ summary: 'make claude, codex ... on this PC start in a hidden sandbox and attach',
495
496
  group: 'Advanced',
496
497
  args: [{ name: 'action', description: 'on, off or status', required: false, choices: ['status', 'on', 'off'] }],
497
498
  options: [],
@@ -0,0 +1,17 @@
1
+ import type { SECTION_LABELS } from './shell.js';
2
+ type Section = (typeof SECTION_LABELS)[number];
3
+ export type CommandPlace = {
4
+ readonly place: `${Section}${string}`;
5
+ } | {
6
+ readonly exempt: string;
7
+ };
8
+ /** Every command of cli/manifest.ts (hand-written and from the shared core's CLI hints). */
9
+ export declare const COMMAND_PLACES: Readonly<Record<string, CommandPlace>>;
10
+ /**
11
+ * Operations and queries that declare `surfaces.except.menu`: the id and why the menu does without them. A definition
12
+ * with a menu exemption that is not here fails the coverage test.
13
+ */
14
+ export declare const MENU_EXEMPT: Readonly<Record<string, string>>;
15
+ /** Setting keys (or key prefixes ending in a dot) the menu's Settings page does not list as a row. */
16
+ export declare const SETTING_PLACES: Readonly<Record<string, string>>;
17
+ export {};
@@ -0,0 +1,61 @@
1
+ /** Every command of cli/manifest.ts (hand-written and from the shared core's CLI hints). */
2
+ export const COMMAND_PLACES = {
3
+ launch: { place: 'Agents > Start (with the options of the tab)' },
4
+ start: { place: 'Agents > Start several' },
5
+ generate: { place: 'Maintenance > More commands' },
6
+ attach: { place: 'Sessions (Enter on a session)' },
7
+ resume: { place: 'Sessions (key o: reopen last sessions)' },
8
+ db: { place: 'Sandbox > Databases' },
9
+ exec: { place: 'Maintenance > More commands' },
10
+ projects: { place: 'Sandbox > Projects' },
11
+ account: { place: 'Accounts' },
12
+ data: { place: 'Maintenance > Data' },
13
+ storage: { place: 'Maintenance > Storage' },
14
+ engine: { place: 'Maintenance > Engine' },
15
+ sync: { place: 'Maintenance > More commands' },
16
+ logs: { place: 'Maintenance > Logs (key f follows)' },
17
+ setup: { place: 'Maintenance > Health' },
18
+ doctor: { place: 'Maintenance > Health' },
19
+ repair: { place: 'Maintenance > Health' },
20
+ 'self-test': { exempt: 'a developer check that refuses to run outside a throwaway machine' },
21
+ config: { place: 'Settings (every setting) and Maintenance > More commands' },
22
+ 'agent-commands': { place: 'Agents > Agent commands' },
23
+ vpn: { place: 'Settings > Network > VPN' },
24
+ github: { place: 'Accounts > GitHub (and Settings > Security)' },
25
+ 'host-claude': { place: 'Agents > On this PC' },
26
+ host: { place: 'Agents > On this PC' },
27
+ menu: { exempt: 'it is the menu' },
28
+ web: { place: 'Maintenance > Web UI' },
29
+ remote: { exempt: "it opens this menu on another Windows user's web UI: the menu cannot start itself inside itself" },
30
+ _watch: { exempt: 'internal: the background history sync' },
31
+ _web: { exempt: 'internal: the web server process' },
32
+ show: { place: 'Sandbox > Status' },
33
+ hide: { place: 'Sandbox > Status' },
34
+ stop: { place: 'Sandbox > Status' },
35
+ cleanup: { place: 'Sandbox > Status (when a dead sandbox left programs behind)' },
36
+ restart: { place: 'Sessions (key r)' },
37
+ shell: { place: 'Sessions (key s)' },
38
+ close: { place: 'Sessions' },
39
+ clean: { place: 'Maintenance > Data' },
40
+ update: { place: 'Maintenance > Updates' },
41
+ migrate: { place: 'Maintenance > Updates' },
42
+ status: { place: 'Sandbox > Status' },
43
+ sessions: { place: 'Sessions' },
44
+ audit: { place: 'Maintenance > Activity' },
45
+ };
46
+ /**
47
+ * Operations and queries that declare `surfaces.except.menu`: the id and why the menu does without them. A definition
48
+ * with a menu exemption that is not here fails the coverage test.
49
+ */
50
+ export const MENU_EXEMPT = {
51
+ 'agents.start': 'the menu starts agents with launch, which can boot the sandbox and attach this terminal',
52
+ 'engine.check': 'the Engine category shows every engine and its check with the fixes (engine.status)',
53
+ 'files.browse': 'the menu asks for a path as text and checks it',
54
+ 'settings.get': 'Settings shows every value',
55
+ };
56
+ /** Setting keys (or key prefixes ending in a dot) the menu's Settings page does not list as a row. */
57
+ export const SETTING_PLACES = {
58
+ 'apps.install': 'the Apps section (a tick per app)',
59
+ 'apps.custom': 'the Apps section (your own apps)',
60
+ $schema: 'not a setting: the JSON schema address of the file',
61
+ };
@@ -22,6 +22,8 @@ export declare class MenuOperations {
22
22
  perform(action: Action, where: Where, busy?: ShowBusy, onOutput?: (output: unknown) => void): Promise<Performed>;
23
23
  /** The values of an action's fields, from the editors that fit them (undefined: one was backed out of). */
24
24
  private fields;
25
+ /** A failure that names a fix: a dialog with the fix as a button; its result replaces the failure notice. */
26
+ private offerFix;
25
27
  /**
26
28
  * Runs a definition with this input and returns the notice to show: its text (✓), the problem and its fix (✘), or
27
29
  * undefined when a question was declined (nothing changed, nothing to say).
@@ -5,10 +5,13 @@
5
5
  import { operationById } from '../../app/features/defs.js';
6
6
  import { runDefinition } from '../../app/registry.js';
7
7
  import { Cancelled, ioFromAsker, SchemaNode, toWireError, } from '../../app/kernel/index.js';
8
+ import { spawn } from 'node:child_process';
8
9
  import { errMsg } from '../../core/util/index.js';
10
+ import { SYSTEM } from '../../shared/system.js';
9
11
  import { Theme } from '../tui/index.js';
10
12
  import { askPath } from './settings/ask-path.js';
11
13
  import { ValueEditor } from './settings/value-editor.js';
14
+ import { MENU_VIEWS } from './views.js';
12
15
  async function ask(app, where, q, said) {
13
16
  const lines = [...said, ...(q.lines ?? []), ...('problem' in q && q.problem ? [Theme.warn(q.problem)] : [])];
14
17
  const path = [...where];
@@ -51,8 +54,27 @@ async function ask(app, where, q, said) {
51
54
  });
52
55
  }
53
56
  }
57
+ /** The menu section (and category) that shows a view, for a link to it. */
58
+ function placeOf(view) {
59
+ const place = MENU_VIEWS.find((m) => m.view.id === view);
60
+ if (!place)
61
+ return undefined;
62
+ return { section: place.section, ...(view === 'agentEnv' ? { category: 'env' } : {}) };
63
+ }
64
+ /** Opens a page in the browser (https://github.com/ only). */
65
+ function openUrl(href) {
66
+ if (!/^https:\/\/github\.com\//.test(href))
67
+ return;
68
+ const child = spawn(SYSTEM.cmd(), ['/c', 'start', '""', href.replace(/&/g, '^&')], {
69
+ stdio: 'ignore',
70
+ detached: true,
71
+ windowsHide: true,
72
+ });
73
+ child.on('error', () => undefined);
74
+ child.unref();
75
+ }
54
76
  /** Where a link goes in the menu: what needs the terminal is run on the normal screen. */
55
- function follow(target) {
77
+ function follow(target, app) {
56
78
  switch (target.kind) {
57
79
  case 'terminal':
58
80
  return { exit: { kind: 'run', argv: ['attach', target.session] } };
@@ -60,8 +82,19 @@ function follow(target) {
60
82
  return { exit: { kind: 'run', argv: ['launch', '--harness', target.agent] } };
61
83
  case 'command':
62
84
  return { exit: { kind: 'run', argv: [...target.argv] } };
63
- case 'view':
64
- return {};
85
+ case 'view': {
86
+ const place = placeOf(target.view);
87
+ if (!place || !app)
88
+ return {};
89
+ return app.goTo(place.section, { category: place.category }).then(() => ({}));
90
+ }
91
+ case 'setting':
92
+ if (!app)
93
+ return {};
94
+ return app.goTo('Settings', { search: target.key }).then(() => ({}));
95
+ case 'url':
96
+ openUrl(target.href);
97
+ return { notice: Theme.muted('Opened ' + target.href + ' in your browser.') };
65
98
  }
66
99
  }
67
100
  export class MenuOperations {
@@ -74,7 +107,7 @@ export class MenuOperations {
74
107
  /** Does what an action of a page says: follows a link, or asks for its fields and runs its operation. */
75
108
  async perform(action, where, busy, onOutput) {
76
109
  if (action.kind === 'link')
77
- return follow(action.target);
110
+ return follow(action.target, this.app);
78
111
  const def = operationById(action.op);
79
112
  if (!def)
80
113
  return { notice: Theme.error(Theme.glyph.cross + ' Unknown operation ' + action.op + '.') };
@@ -105,6 +138,17 @@ export class MenuOperations {
105
138
  }
106
139
  return answers;
107
140
  }
141
+ /** A failure that names a fix: a dialog with the fix as a button; its result replaces the failure notice. */
142
+ async offerFix(problem, where, busy) {
143
+ const fix = problem.action;
144
+ const def = fix ? operationById(fix.op) : undefined;
145
+ if (!fix || !def)
146
+ return undefined;
147
+ const yes = await this.app.ask(problem.message, problem.fix ? [problem.fix] : [], fix.label);
148
+ if (!yes)
149
+ return undefined;
150
+ return (await this.run(def, fix.input ?? {}, where, busy)) ?? Theme.ok(Theme.glyph.ok + ' Done.');
151
+ }
108
152
  /**
109
153
  * Runs a definition with this input and returns the notice to show: its text (✓), the problem and its fix (✘), or
110
154
  * undefined when a question was declined (nothing changed, nothing to say).
@@ -129,7 +173,8 @@ export class MenuOperations {
129
173
  const problem = toWireError(e);
130
174
  if (problem.kind === 'bug')
131
175
  return Theme.error(Theme.glyph.cross + ' ' + errMsg(e));
132
- return (Theme.error(Theme.glyph.cross + ' ' + problem.message) + (problem.fix ? Theme.muted(' ' + problem.fix) : ''));
176
+ const notice = Theme.error(Theme.glyph.cross + ' ' + problem.message) + (problem.fix ? Theme.muted(' ' + problem.fix) : '');
177
+ return (await this.offerFix(problem, where, busy)) ?? notice;
133
178
  }
134
179
  }
135
180
  }
@@ -23,6 +23,6 @@ export declare class Menu {
23
23
  private execute;
24
24
  /** Shows the end of a log on the normal screen. */
25
25
  private view;
26
- /** After a save: agent commands (Beta) may have been switched, which changes this PC. */
26
+ /** After a save: agent commands may have been switched, which changes this PC. */
27
27
  private applyAgentCommands;
28
28
  }
@@ -168,7 +168,7 @@ export class Menu {
168
168
  await pressAnyKey(Theme.muted('Press any key for the menu…'));
169
169
  });
170
170
  }
171
- /** After a save: agent commands (Beta) may have been switched, which changes this PC. */
171
+ /** After a save: agent commands may have been switched, which changes this PC. */
172
172
  applyAgentCommands(saved) {
173
173
  if (!saved.files.some((f) => !f.isProject))
174
174
  return undefined;
@@ -177,11 +177,11 @@ export class Menu {
177
177
  if (!result?.changed)
178
178
  return undefined;
179
179
  return result.on
180
- ? 'Agent commands (Beta) are on: open a new terminal.'
180
+ ? 'Agent commands are on: open a new terminal.'
181
181
  : 'Agent commands are off: claude, codex ... run on this PC again (open a new terminal).';
182
182
  }
183
183
  catch (e) {
184
- return 'Agent commands (Beta): ' + errMsg(e);
184
+ return 'Agent commands: ' + errMsg(e);
185
185
  }
186
186
  }
187
187
  }
@@ -33,7 +33,7 @@ export function accountsOptions(m) {
33
33
  ...m.services.map((s) => ({
34
34
  id: serviceCategory(s.kind),
35
35
  label: s.label,
36
- description: 'Your ' + s.label + ' sign-in for sandboxes that use ' + s.usedBy.join(' or ') + '.',
36
+ description: 'Your ' + s.label + ' sign-in for sandboxes that use ' + s.usedFor + '.',
37
37
  })),
38
38
  ],
39
39
  items: [
@@ -1,4 +1,5 @@
1
- import { type AgentsList } from '../../../app/features/agents/index.js';
1
+ import type { AgentCommandsStatus as AgentCommandsFacts } from '../../../app/features/agent-commands/index.js';
2
+ import { type AgentEnv, type AgentsList } from '../../../app/features/agents/index.js';
2
3
  import type { ConfigFile } from '../../../app/features/settings/index.js';
3
4
  import type { Context } from '../../commands/context.js';
4
5
  import { type App, type Category, type ListOptions, type ListResult } from '../../tui/index.js';
@@ -17,8 +18,12 @@ export interface AgentsModel {
17
18
  readonly window: WindowChoice;
18
19
  /** Agents that can be run on this PC without the sandbox (see hostAgentsToShow). */
19
20
  readonly hostAgents: readonly string[];
21
+ /** Whether agent commands are on and which agents were found (the "On this PC" category). */
22
+ readonly agentCommands?: AgentCommandsFacts;
20
23
  /** The agents you added yourself: only these can be removed (the built-in ones stay). */
21
24
  readonly removable?: readonly string[];
25
+ /** Claude's environment variables (the Claude environment tab); missing when Claude is not an agent here. */
26
+ readonly claudeEnv?: AgentEnv;
22
27
  }
23
28
  /** The agents page's data as the agents view takes it. Pure. */
24
29
  export declare function agentsList(m: AgentsModel): AgentsList;
@@ -34,7 +39,7 @@ export declare function startArgv(m: AgentsModel, agent: string, cwd: string): s
34
39
  /** Settings has unsaved changes to the agents (their list or the default): the agent operations wait for them. */
35
40
  export declare function agentsHaveStagedChanges(file: ConfigFile, draft: Draft): boolean;
36
41
  /** The categories of the agents section; "On this PC" only when there is something in it. Pure. */
37
- export declare function agentCategories(m: Pick<AgentsModel, 'folder' | 'hostAgents'>): Category[];
42
+ export declare function agentCategories(m: Pick<AgentsModel, 'folder' | 'hostAgents' | 'claudeEnv'>): Category[];
38
43
  /** The list for the agents section. Pure. */
39
44
  export declare function agentsOptions(m: AgentsModel, cwd?: string): ListOptions<string>;
40
45
  export declare class AgentsPage extends ListPage<string> {