@vividcodeai/embeddedcowork 0.0.8 → 0.0.10

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 (437) hide show
  1. package/bin/cli.js +56 -0
  2. package/package.json +10 -3
  3. package/dist/api-types.js +0 -1
  4. package/dist/auth/auth-store.js +0 -134
  5. package/dist/auth/http-auth.js +0 -37
  6. package/dist/auth/manager.js +0 -140
  7. package/dist/auth/password-hash.js +0 -32
  8. package/dist/auth/session-manager.js +0 -17
  9. package/dist/auth/token-manager.js +0 -27
  10. package/dist/background-processes/manager.js +0 -576
  11. package/dist/bin.js +0 -24
  12. package/dist/clients/connection-manager.js +0 -93
  13. package/dist/config/location.js +0 -57
  14. package/dist/config/schema.js +0 -72
  15. package/dist/events/bus.js +0 -47
  16. package/dist/filesystem/__tests__/search-cache.test.js +0 -40
  17. package/dist/filesystem/browser.js +0 -292
  18. package/dist/filesystem/search-cache.js +0 -43
  19. package/dist/filesystem/search.js +0 -135
  20. package/dist/index.js +0 -496
  21. package/dist/launcher.js +0 -149
  22. package/dist/loader.js +0 -21
  23. package/dist/logger.js +0 -109
  24. package/dist/opencode-config/README.md +0 -32
  25. package/dist/opencode-config/opencode.jsonc +0 -35
  26. package/dist/opencode-config/package.json +0 -9
  27. package/dist/opencode-config/plugin/embeddedcowork.ts +0 -62
  28. package/dist/opencode-config/plugin/lib/background-process.ts +0 -265
  29. package/dist/opencode-config/plugin/lib/client.ts +0 -133
  30. package/dist/opencode-config/plugin/lib/request.ts +0 -214
  31. package/dist/opencode-config.js +0 -15
  32. package/dist/opencode-downloader.js +0 -295
  33. package/dist/opencode-paths.js +0 -167
  34. package/dist/plugins/channel.js +0 -40
  35. package/dist/plugins/handlers.js +0 -17
  36. package/dist/plugins/voice-mode.js +0 -78
  37. package/dist/releases/dev-release-monitor.js +0 -75
  38. package/dist/releases/release-monitor.js +0 -107
  39. package/dist/runtime-paths.js +0 -67
  40. package/dist/server/__tests__/network-addresses.test.js +0 -68
  41. package/dist/server/__tests__/remote-proxy.test.js +0 -204
  42. package/dist/server/http-server.js +0 -998
  43. package/dist/server/network-addresses.js +0 -114
  44. package/dist/server/remote-proxy.js +0 -466
  45. package/dist/server/routes/auth-pages/login.html +0 -135
  46. package/dist/server/routes/auth-pages/token.html +0 -93
  47. package/dist/server/routes/auth.js +0 -149
  48. package/dist/server/routes/background-processes.js +0 -78
  49. package/dist/server/routes/events.js +0 -66
  50. package/dist/server/routes/filesystem.js +0 -43
  51. package/dist/server/routes/meta.js +0 -44
  52. package/dist/server/routes/opencode-status.js +0 -10
  53. package/dist/server/routes/plugin.js +0 -70
  54. package/dist/server/routes/remote-proxy.js +0 -42
  55. package/dist/server/routes/remote-servers.js +0 -142
  56. package/dist/server/routes/settings.js +0 -69
  57. package/dist/server/routes/sidecars.js +0 -46
  58. package/dist/server/routes/speech.js +0 -63
  59. package/dist/server/routes/storage.js +0 -52
  60. package/dist/server/routes/workspaces.js +0 -221
  61. package/dist/server/routes/worktrees.js +0 -156
  62. package/dist/server/tls.js +0 -224
  63. package/dist/settings/binaries.js +0 -37
  64. package/dist/settings/merge-patch.js +0 -33
  65. package/dist/settings/migrate.js +0 -238
  66. package/dist/settings/public-config.js +0 -33
  67. package/dist/settings/service.js +0 -101
  68. package/dist/settings/yaml-doc-store.js +0 -96
  69. package/dist/sidecars/manager.js +0 -193
  70. package/dist/speech/providers/openai-compatible.js +0 -189
  71. package/dist/speech/service.js +0 -58
  72. package/dist/storage/instance-store.js +0 -56
  73. package/dist/ui/__tests__/remote-ui.test.js +0 -67
  74. package/dist/ui/remote-ui.js +0 -462
  75. package/dist/workspaces/__tests__/spawn.test.js +0 -139
  76. package/dist/workspaces/git-mutations.js +0 -98
  77. package/dist/workspaces/git-status.js +0 -323
  78. package/dist/workspaces/git-worktrees.js +0 -216
  79. package/dist/workspaces/instance-events.js +0 -180
  80. package/dist/workspaces/manager.js +0 -432
  81. package/dist/workspaces/opencode-auth.js +0 -16
  82. package/dist/workspaces/runtime.js +0 -366
  83. package/dist/workspaces/spawn.js +0 -219
  84. package/dist/workspaces/worktree-directory.js +0 -74
  85. package/dist/workspaces/worktree-map.js +0 -116
  86. package/public/apple-touch-icon-180x180.png +0 -0
  87. package/public/assets/ChangesTab-C4_zdV74.js +0 -2
  88. package/public/assets/DiffToolbar-BsUPigM5.js +0 -1
  89. package/public/assets/EmbeddedCowork-Icon-DSw5nKk7.png +0 -0
  90. package/public/assets/FilesTab-Drvo30nM.js +0 -2
  91. package/public/assets/GitChangesTab-BhV6qTfP.js +0 -2
  92. package/public/assets/SplitFilePanel-BBrs329I.js +0 -1
  93. package/public/assets/StatusTab-DfYWlTSX.js +0 -1
  94. package/public/assets/abap-BdImnpbu.js +0 -1
  95. package/public/assets/actionscript-3-CfeIJUat.js +0 -1
  96. package/public/assets/ada-bCR0ucgS.js +0 -1
  97. package/public/assets/andromeeda-C-Jbm3Hp.js +0 -1
  98. package/public/assets/angular-html-CU67Zn6k.js +0 -1
  99. package/public/assets/angular-ts-BwZT4LLn.js +0 -1
  100. package/public/assets/apache-Pmp26Uib.js +0 -1
  101. package/public/assets/apex-DhZLUxFE.js +0 -1
  102. package/public/assets/apl-dKokRX4l.js +0 -1
  103. package/public/assets/applescript-Co6uUVPk.js +0 -1
  104. package/public/assets/ara-BRHolxvo.js +0 -1
  105. package/public/assets/asciidoc-Dv7Oe6Be.js +0 -1
  106. package/public/assets/asm-D_Q5rh1f.js +0 -1
  107. package/public/assets/astro-CbQHKStN.js +0 -1
  108. package/public/assets/aurora-x-D-2ljcwZ.js +0 -1
  109. package/public/assets/awk-DMzUqQB5.js +0 -1
  110. package/public/assets/ayu-dark-Cv9koXgw.js +0 -1
  111. package/public/assets/ballerina-BFfxhgS-.js +0 -1
  112. package/public/assets/bat-BkioyH1T.js +0 -1
  113. package/public/assets/beancount-k_qm7-4y.js +0 -1
  114. package/public/assets/berry-D08WgyRC.js +0 -1
  115. package/public/assets/bibtex-CHM0blh-.js +0 -1
  116. package/public/assets/bicep-Bmn6On1c.js +0 -1
  117. package/public/assets/blade-DVc8C-J4.js +0 -1
  118. package/public/assets/bsl-BO_Y6i37.js +0 -1
  119. package/public/assets/bundle-full-CAZqmV2E.js +0 -13
  120. package/public/assets/c-BIGW1oBm.js +0 -1
  121. package/public/assets/cadence-Bv_4Rxtq.js +0 -1
  122. package/public/assets/cairo-KRGpt6FW.js +0 -1
  123. package/public/assets/catppuccin-frappe-DFWUc33u.js +0 -1
  124. package/public/assets/catppuccin-latte-C9dUb6Cb.js +0 -1
  125. package/public/assets/catppuccin-macchiato-DQyhUUbL.js +0 -1
  126. package/public/assets/catppuccin-mocha-D87Tk5Gz.js +0 -1
  127. package/public/assets/clarity-D53aC0YG.js +0 -1
  128. package/public/assets/clojure-P80f7IUj.js +0 -1
  129. package/public/assets/cmake-D1j8_8rp.js +0 -1
  130. package/public/assets/cobol-nwyudZeR.js +0 -1
  131. package/public/assets/codeowners-Bp6g37R7.js +0 -1
  132. package/public/assets/codeql-DsOJ9woJ.js +0 -1
  133. package/public/assets/coffee-Ch7k5sss.js +0 -1
  134. package/public/assets/common-lisp-Cg-RD9OK.js +0 -1
  135. package/public/assets/coq-DkFqJrB1.js +0 -1
  136. package/public/assets/core-DhEqZVGG.js +0 -1
  137. package/public/assets/cpp-CofmeUqb.js +0 -1
  138. package/public/assets/crystal-tKQVLTB8.js +0 -1
  139. package/public/assets/csharp-CX12Zw3r.js +0 -1
  140. package/public/assets/css-DPfMkruS.js +0 -1
  141. package/public/assets/csv-fuZLfV_i.js +0 -1
  142. package/public/assets/cue-D82EKSYY.js +0 -1
  143. package/public/assets/cypher-COkxafJQ.js +0 -1
  144. package/public/assets/d-85-TOEBH.js +0 -1
  145. package/public/assets/dark-plus-eOWES_5F.js +0 -1
  146. package/public/assets/dart-CF10PKvl.js +0 -1
  147. package/public/assets/dax-CEL-wOlO.js +0 -1
  148. package/public/assets/desktop-BmXAJ9_W.js +0 -1
  149. package/public/assets/diff-D97Zzqfu.js +0 -1
  150. package/public/assets/diff-viewer--UIZ5GEn.js +0 -1
  151. package/public/assets/docker-BcOcwvcX.js +0 -1
  152. package/public/assets/dotenv-Da5cRb03.js +0 -1
  153. package/public/assets/dracula-BzJJZx-M.js +0 -1
  154. package/public/assets/dracula-soft-BXkSAIEj.js +0 -1
  155. package/public/assets/dream-maker-BtqSS_iP.js +0 -1
  156. package/public/assets/edge-BkV0erSs.js +0 -1
  157. package/public/assets/elixir-CDX3lj18.js +0 -1
  158. package/public/assets/elm-DbKCFpqz.js +0 -1
  159. package/public/assets/emacs-lisp-C9XAeP06.js +0 -1
  160. package/public/assets/erb-BOJIQeun.js +0 -1
  161. package/public/assets/erlang-DsQrWhSR.js +0 -1
  162. package/public/assets/event-DjZVAIBO.js +0 -1
  163. package/public/assets/everforest-dark-BgDCqdQA.js +0 -1
  164. package/public/assets/everforest-light-C8M2exoo.js +0 -1
  165. package/public/assets/fast-diff-vendor-DgdwVvTQ.js +0 -1
  166. package/public/assets/fennel-BYunw83y.js +0 -1
  167. package/public/assets/fish-BvzEVeQv.js +0 -1
  168. package/public/assets/fluent-C4IJs8-o.js +0 -1
  169. package/public/assets/fortran-fixed-form-BZjJHVRy.js +0 -1
  170. package/public/assets/fortran-free-form-D22FLkUw.js +0 -1
  171. package/public/assets/fsharp-CXgrBDvD.js +0 -1
  172. package/public/assets/gdresource-B7Tvp0Sc.js +0 -1
  173. package/public/assets/gdscript-DTMYz4Jt.js +0 -1
  174. package/public/assets/gdshader-DkwncUOv.js +0 -1
  175. package/public/assets/genie-D0YGMca9.js +0 -1
  176. package/public/assets/gherkin-DyxjwDmM.js +0 -1
  177. package/public/assets/git-commit-F4YmCXRG.js +0 -1
  178. package/public/assets/git-diff-vendor-CSgooKT_.js +0 -52
  179. package/public/assets/git-diff-vendor-HAZkIolJ.css +0 -19
  180. package/public/assets/git-rebase-r7XF79zn.js +0 -1
  181. package/public/assets/github-dark-DHJKELXO.js +0 -1
  182. package/public/assets/github-dark-default-Cuk6v7N8.js +0 -1
  183. package/public/assets/github-dark-dimmed-DH5Ifo-i.js +0 -1
  184. package/public/assets/github-dark-high-contrast-E3gJ1_iC.js +0 -1
  185. package/public/assets/github-light-DAi9KRSo.js +0 -1
  186. package/public/assets/github-light-default-D7oLnXFd.js +0 -1
  187. package/public/assets/github-light-high-contrast-BfjtVDDH.js +0 -1
  188. package/public/assets/gleam-BspZqrRM.js +0 -1
  189. package/public/assets/glimmer-js-Rg0-pVw9.js +0 -1
  190. package/public/assets/glimmer-ts-U6CK756n.js +0 -1
  191. package/public/assets/glsl-DplSGwfg.js +0 -1
  192. package/public/assets/gnuplot-DdkO51Og.js +0 -1
  193. package/public/assets/go-Dn2_MT6a.js +0 -1
  194. package/public/assets/graphql-ChdNCCLP.js +0 -1
  195. package/public/assets/groovy-gcz8RCvz.js +0 -1
  196. package/public/assets/gruvbox-dark-hard-CFHQjOhq.js +0 -1
  197. package/public/assets/gruvbox-dark-medium-GsRaNv29.js +0 -1
  198. package/public/assets/gruvbox-dark-soft-CVdnzihN.js +0 -1
  199. package/public/assets/gruvbox-light-hard-CH1njM8p.js +0 -1
  200. package/public/assets/gruvbox-light-medium-DRw_LuNl.js +0 -1
  201. package/public/assets/gruvbox-light-soft-hJgmCMqR.js +0 -1
  202. package/public/assets/hack-CaT9iCJl.js +0 -1
  203. package/public/assets/haml-B8DHNrY2.js +0 -1
  204. package/public/assets/handlebars-BL8al0AC.js +0 -1
  205. package/public/assets/haskell-Df6bDoY_.js +0 -1
  206. package/public/assets/haxe-CzTSHFRz.js +0 -1
  207. package/public/assets/hcl-BWvSN4gD.js +0 -1
  208. package/public/assets/highlight-vendor-8FKMu9os.js +0 -10
  209. package/public/assets/hjson-D5-asLiD.js +0 -1
  210. package/public/assets/hlsl-D3lLCCz7.js +0 -1
  211. package/public/assets/houston-DnULxvSX.js +0 -1
  212. package/public/assets/html-GMplVEZG.js +0 -1
  213. package/public/assets/html-derivative-BFtXZ54Q.js +0 -1
  214. package/public/assets/http-jrhK8wxY.js +0 -1
  215. package/public/assets/hurl-irOxFIW8.js +0 -1
  216. package/public/assets/hxml-Bvhsp5Yf.js +0 -1
  217. package/public/assets/hy-DFXneXwc.js +0 -1
  218. package/public/assets/imba-DGztddWO.js +0 -1
  219. package/public/assets/index--0EL0_Tu.js +0 -2
  220. package/public/assets/index-BKMyzTSR.js +0 -1
  221. package/public/assets/index-BLouhjer.js +0 -1
  222. package/public/assets/index-CLSJ4cO9.js +0 -1
  223. package/public/assets/index-CgjnEdBS.js +0 -1
  224. package/public/assets/index-ChCPoe9m.js +0 -1
  225. package/public/assets/index-Co-dJ-Xs.js +0 -1
  226. package/public/assets/index-Ctcq8Rhl.css +0 -1
  227. package/public/assets/index-Da0V-sLI.js +0 -1
  228. package/public/assets/index-hOT6sqTO.js +0 -1
  229. package/public/assets/ini-BEwlwnbL.js +0 -1
  230. package/public/assets/java-CylS5w8V.js +0 -1
  231. package/public/assets/javascript-wDzz0qaB.js +0 -1
  232. package/public/assets/jinja-4LBKfQ-Z.js +0 -1
  233. package/public/assets/jison-wvAkD_A8.js +0 -1
  234. package/public/assets/json-Cp-IABpG.js +0 -1
  235. package/public/assets/json5-C9tS-k6U.js +0 -1
  236. package/public/assets/jsonc-Des-eS-w.js +0 -1
  237. package/public/assets/jsonl-DcaNXYhu.js +0 -1
  238. package/public/assets/jsonnet-DFQXde-d.js +0 -1
  239. package/public/assets/jssm-C2t-YnRu.js +0 -1
  240. package/public/assets/jsx-g9-lgVsj.js +0 -1
  241. package/public/assets/julia-C8NyazO9.js +0 -1
  242. package/public/assets/kanagawa-dragon-CkXjmgJE.js +0 -1
  243. package/public/assets/kanagawa-lotus-CfQXZHmo.js +0 -1
  244. package/public/assets/kanagawa-wave-DWedfzmr.js +0 -1
  245. package/public/assets/kdl-DV7GczEv.js +0 -1
  246. package/public/assets/kotlin-BdnUsdx6.js +0 -1
  247. package/public/assets/kusto-BvAqAH-y.js +0 -1
  248. package/public/assets/laserwave-DUszq2jm.js +0 -1
  249. package/public/assets/latex-BUKiar2Z.js +0 -1
  250. package/public/assets/lean-DP1Csr6i.js +0 -1
  251. package/public/assets/less-B1dDrJ26.js +0 -1
  252. package/public/assets/light-plus-B7mTdjB0.js +0 -1
  253. package/public/assets/liquid-DYVedYrR.js +0 -1
  254. package/public/assets/llvm-BtvRca6l.js +0 -1
  255. package/public/assets/loading-CugGjKDZ.css +0 -1
  256. package/public/assets/loading-CvW03p4Z.js +0 -2
  257. package/public/assets/log-2UxHyX5q.js +0 -1
  258. package/public/assets/logo-BtOb2qkB.js +0 -1
  259. package/public/assets/lua-BbnMAYS6.js +0 -1
  260. package/public/assets/luau-CXu1NL6O.js +0 -1
  261. package/public/assets/main-ByuKWHRz.js +0 -53
  262. package/public/assets/make-CHLpvVh8.js +0 -1
  263. package/public/assets/markdown-BBFC6uy4.js +0 -58
  264. package/public/assets/markdown-Cvjx9yec.js +0 -1
  265. package/public/assets/marko-CPi9NSCl.js +0 -1
  266. package/public/assets/material-theme-D5KoaKCx.js +0 -1
  267. package/public/assets/material-theme-darker-BfHTSMKl.js +0 -1
  268. package/public/assets/material-theme-lighter-B0m2ddpp.js +0 -1
  269. package/public/assets/material-theme-ocean-CyktbL80.js +0 -1
  270. package/public/assets/material-theme-palenight-Csfq5Kiy.js +0 -1
  271. package/public/assets/matlab-D7o27uSR.js +0 -1
  272. package/public/assets/mdc-DUICxH0z.js +0 -1
  273. package/public/assets/mdx-Cmh6b_Ma.js +0 -1
  274. package/public/assets/mermaid-DKYwYmdq.js +0 -1
  275. package/public/assets/min-dark-CafNBF8u.js +0 -1
  276. package/public/assets/min-light-CTRr51gU.js +0 -1
  277. package/public/assets/mipsasm-CKIfxQSi.js +0 -1
  278. package/public/assets/mojo-1DNp92w6.js +0 -1
  279. package/public/assets/monaco-viewer-DnczYBfh.js +0 -26
  280. package/public/assets/monokai-D4h5O-jR.js +0 -1
  281. package/public/assets/move-Bu9oaDYs.js +0 -1
  282. package/public/assets/narrat-DRg8JJMk.js +0 -1
  283. package/public/assets/nextflow-CUEJCptM.js +0 -1
  284. package/public/assets/nginx-DknmC5AR.js +0 -1
  285. package/public/assets/night-owl-C39BiMTA.js +0 -1
  286. package/public/assets/nim-CVrawwO9.js +0 -1
  287. package/public/assets/nix-BbRYJGeE.js +0 -1
  288. package/public/assets/nord-Ddv68eIx.js +0 -1
  289. package/public/assets/nushell-C-sUppwS.js +0 -1
  290. package/public/assets/objective-c-DXmwc3jG.js +0 -1
  291. package/public/assets/objective-cpp-CLxacb5B.js +0 -1
  292. package/public/assets/ocaml-C0hk2d4L.js +0 -1
  293. package/public/assets/one-dark-pro-DVMEJ2y_.js +0 -1
  294. package/public/assets/one-light-PoHY5YXO.js +0 -1
  295. package/public/assets/pascal-D93ZcfNL.js +0 -1
  296. package/public/assets/perl-C0TMdlhV.js +0 -1
  297. package/public/assets/php-CDn_0X-4.js +0 -1
  298. package/public/assets/pkl-u5AG7uiY.js +0 -1
  299. package/public/assets/plastic-3e1v2bzS.js +0 -1
  300. package/public/assets/plsql-ChMvpjG-.js +0 -1
  301. package/public/assets/po-BTJTHyun.js +0 -1
  302. package/public/assets/poimandres-CS3Unz2-.js +0 -1
  303. package/public/assets/polar-C0HS_06l.js +0 -1
  304. package/public/assets/postcss-CXtECtnM.js +0 -1
  305. package/public/assets/powerquery-CEu0bR-o.js +0 -1
  306. package/public/assets/powershell-Dpen1YoG.js +0 -1
  307. package/public/assets/prisma-Dd19v3D-.js +0 -1
  308. package/public/assets/prolog-CbFg5uaA.js +0 -1
  309. package/public/assets/proto-DyJlTyXw.js +0 -1
  310. package/public/assets/pug-CGlum2m_.js +0 -1
  311. package/public/assets/puppet-BMWR74SV.js +0 -1
  312. package/public/assets/purescript-CklMAg4u.js +0 -1
  313. package/public/assets/python-B6aJPvgy.js +0 -1
  314. package/public/assets/qml-3beO22l8.js +0 -1
  315. package/public/assets/qmldir-C8lEn-DE.js +0 -1
  316. package/public/assets/qss-IeuSbFQv.js +0 -1
  317. package/public/assets/r-DiinP2Uv.js +0 -1
  318. package/public/assets/racket-BqYA7rlc.js +0 -1
  319. package/public/assets/raku-DXvB9xmW.js +0 -1
  320. package/public/assets/razor-WgofotgN.js +0 -1
  321. package/public/assets/red-bN70gL4F.js +0 -1
  322. package/public/assets/reg-C-SQnVFl.js +0 -1
  323. package/public/assets/regexp-CDVJQ6XC.js +0 -1
  324. package/public/assets/rel-C3B-1QV4.js +0 -1
  325. package/public/assets/riscv-BM1_JUlF.js +0 -1
  326. package/public/assets/rose-pine-BHrmToEH.js +0 -1
  327. package/public/assets/rose-pine-dawn-CnK8MTSM.js +0 -1
  328. package/public/assets/rose-pine-moon-NleAzG8P.js +0 -1
  329. package/public/assets/rosmsg-BJDFO7_C.js +0 -1
  330. package/public/assets/rst-B0xPkSld.js +0 -1
  331. package/public/assets/ruby-BvKwtOVI.js +0 -1
  332. package/public/assets/rust-B1yitclQ.js +0 -1
  333. package/public/assets/sas-cz2c8ADy.js +0 -1
  334. package/public/assets/sass-Cj5Yp3dK.js +0 -1
  335. package/public/assets/scala-C151Ov-r.js +0 -1
  336. package/public/assets/scheme-C98Dy4si.js +0 -1
  337. package/public/assets/scss-OYdSNvt2.js +0 -1
  338. package/public/assets/sdbl-DVxCFoDh.js +0 -1
  339. package/public/assets/shaderlab-Dg9Lc6iA.js +0 -1
  340. package/public/assets/shellscript-Yzrsuije.js +0 -1
  341. package/public/assets/shellsession-BADoaaVG.js +0 -1
  342. package/public/assets/slack-dark-BthQWCQV.js +0 -1
  343. package/public/assets/slack-ochin-DqwNpetd.js +0 -1
  344. package/public/assets/smalltalk-BERRCDM3.js +0 -1
  345. package/public/assets/snazzy-light-Bw305WKR.js +0 -1
  346. package/public/assets/solarized-dark-DXbdFlpD.js +0 -1
  347. package/public/assets/solarized-light-L9t79GZl.js +0 -1
  348. package/public/assets/solidity-BbcW6ACK.js +0 -1
  349. package/public/assets/soy-Brmx7dQM.js +0 -1
  350. package/public/assets/sparql-rVzFXLq3.js +0 -1
  351. package/public/assets/splunk-BtCnVYZw.js +0 -1
  352. package/public/assets/sql-BLtJtn59.js +0 -1
  353. package/public/assets/ssh-config-_ykCGR6B.js +0 -1
  354. package/public/assets/stata-BH5u7GGu.js +0 -1
  355. package/public/assets/stylus-BEDo0Tqx.js +0 -1
  356. package/public/assets/svelte-3Dk4HxPD.js +0 -1
  357. package/public/assets/swift-Dg5xB15N.js +0 -1
  358. package/public/assets/synthwave-84-CbfX1IO0.js +0 -1
  359. package/public/assets/system-verilog-CnnmHF94.js +0 -1
  360. package/public/assets/systemd-4A_iFExJ.js +0 -1
  361. package/public/assets/talonscript-CkByrt1z.js +0 -1
  362. package/public/assets/tasl-QIJgUcNo.js +0 -1
  363. package/public/assets/tcl-dwOrl1Do.js +0 -1
  364. package/public/assets/templ-W15q3VgB.js +0 -1
  365. package/public/assets/terraform-BETggiCN.js +0 -1
  366. package/public/assets/tex-Cppo0RY3.js +0 -1
  367. package/public/assets/todo-BLpUqy61.js +0 -1
  368. package/public/assets/tokyo-night-hegEt444.js +0 -1
  369. package/public/assets/toml-vGWfd6FD.js +0 -1
  370. package/public/assets/tool-call-B4Xz6FbC.js +0 -60
  371. package/public/assets/ts-tags-zn1MmPIZ.js +0 -1
  372. package/public/assets/tsv-B_m7g4N7.js +0 -1
  373. package/public/assets/tsx-COt5Ahok.js +0 -1
  374. package/public/assets/turtle-BsS91CYL.js +0 -1
  375. package/public/assets/twig-CO9l9SDP.js +0 -1
  376. package/public/assets/typescript-BPQ3VLAy.js +0 -1
  377. package/public/assets/typespec-Df68jz8_.js +0 -1
  378. package/public/assets/typst-DHCkPAjA.js +0 -1
  379. package/public/assets/unified-picker-BrzM_sH6.js +0 -1
  380. package/public/assets/v-BcVCzyr7.js +0 -1
  381. package/public/assets/vala-CsfeWuGM.js +0 -1
  382. package/public/assets/vb-D17OF-Vu.js +0 -1
  383. package/public/assets/verilog-BQ8w6xss.js +0 -1
  384. package/public/assets/vesper-DU1UobuO.js +0 -1
  385. package/public/assets/vhdl-CeAyd5Ju.js +0 -1
  386. package/public/assets/viml-CJc9bBzg.js +0 -1
  387. package/public/assets/vitesse-black-Bkuqu6BP.js +0 -1
  388. package/public/assets/vitesse-dark-D0r3Knsf.js +0 -1
  389. package/public/assets/vitesse-light-CVO1_9PV.js +0 -1
  390. package/public/assets/vue-CCoi5OLL.js +0 -1
  391. package/public/assets/vue-html-DAAvJJDi.js +0 -1
  392. package/public/assets/vue-vine-_Ih-lPRR.js +0 -1
  393. package/public/assets/vyper-CDx5xZoG.js +0 -1
  394. package/public/assets/wasm-CG6Dc4jp.js +0 -1
  395. package/public/assets/wasm-MzD3tlZU.js +0 -1
  396. package/public/assets/wenyan-BV7otONQ.js +0 -1
  397. package/public/assets/wgsl-Dx-B1_4e.js +0 -1
  398. package/public/assets/wikitext-BhOHFoWU.js +0 -1
  399. package/public/assets/wit-5i3qLPDT.js +0 -1
  400. package/public/assets/wolfram-lXgVvXCa.js +0 -1
  401. package/public/assets/wrap-text-B1i7zgLk.js +0 -1
  402. package/public/assets/xml-sdJ4AIDG.js +0 -1
  403. package/public/assets/xsl-CtQFsRM5.js +0 -1
  404. package/public/assets/yaml-Buea-lGh.js +0 -1
  405. package/public/assets/zenscript-DVFEvuxE.js +0 -1
  406. package/public/assets/zig-VOosw3JB.js +0 -1
  407. package/public/favicon.ico +0 -0
  408. package/public/index.html +0 -44
  409. package/public/loading.html +0 -33
  410. package/public/logo.png +0 -0
  411. package/public/manifest.webmanifest +0 -1
  412. package/public/maskable-icon-512x512.png +0 -0
  413. package/public/monaco/vs/base/browser/ui/codicons/codicon/codicon.ttf +0 -0
  414. package/public/monaco/vs/base/worker/workerMain.js +0 -31
  415. package/public/monaco/vs/basic-languages/cpp/cpp.js +0 -10
  416. package/public/monaco/vs/basic-languages/kotlin/kotlin.js +0 -10
  417. package/public/monaco/vs/basic-languages/markdown/markdown.js +0 -10
  418. package/public/monaco/vs/basic-languages/python/python.js +0 -10
  419. package/public/monaco/vs/editor/editor.main.css +0 -8
  420. package/public/monaco/vs/editor/editor.main.js +0 -798
  421. package/public/monaco/vs/language/css/cssMode.js +0 -13
  422. package/public/monaco/vs/language/css/cssWorker.js +0 -77
  423. package/public/monaco/vs/language/html/htmlMode.js +0 -13
  424. package/public/monaco/vs/language/html/htmlWorker.js +0 -454
  425. package/public/monaco/vs/language/json/jsonMode.js +0 -19
  426. package/public/monaco/vs/language/json/jsonWorker.js +0 -42
  427. package/public/monaco/vs/language/typescript/tsMode.js +0 -20
  428. package/public/monaco/vs/language/typescript/tsWorker.js +0 -51328
  429. package/public/monaco/vs/loader.js +0 -11
  430. package/public/monaco.worker.js +0 -7
  431. package/public/pwa-192x192.png +0 -0
  432. package/public/pwa-512x512.png +0 -0
  433. package/public/pwa-64x64.png +0 -0
  434. package/public/registerSW.js +0 -1
  435. package/public/sw.js +0 -1
  436. package/public/ui-version.json +0 -3
  437. package/public/workbox-60d14903.js +0 -1
@@ -1,70 +0,0 @@
1
- import { z } from "zod";
2
- import { buildPingEvent, handlePluginEvent } from "../../plugins/handlers";
3
- const PluginEventSchema = z.object({
4
- type: z.string().min(1),
5
- properties: z.record(z.unknown()).optional(),
6
- });
7
- const VoiceModeStateSchema = z.object({
8
- enabled: z.boolean(),
9
- clientId: z.string().trim().min(1),
10
- connectionId: z.string().trim().min(1),
11
- });
12
- export function registerPluginRoutes(app, deps) {
13
- app.get("/workspaces/:id/plugin/events", (request, reply) => {
14
- const workspace = deps.workspaceManager.get(request.params.id);
15
- if (!workspace) {
16
- reply.code(404).send({ error: "Workspace not found" });
17
- return;
18
- }
19
- reply.raw.setHeader("Content-Type", "text/event-stream");
20
- reply.raw.setHeader("Cache-Control", "no-cache");
21
- reply.raw.setHeader("Connection", "keep-alive");
22
- reply.raw.flushHeaders?.();
23
- reply.hijack();
24
- const registration = deps.channel.register(request.params.id, reply);
25
- deps.voiceModeManager.syncInstance(request.params.id);
26
- const heartbeat = setInterval(() => {
27
- deps.channel.send(request.params.id, buildPingEvent());
28
- }, 15000);
29
- const close = () => {
30
- clearInterval(heartbeat);
31
- registration.close();
32
- reply.raw.end?.();
33
- };
34
- request.raw.on("close", close);
35
- request.raw.on("error", close);
36
- });
37
- app.post("/workspaces/:id/plugin/voice-mode", (request, reply) => {
38
- const workspace = deps.workspaceManager.get(request.params.id);
39
- if (!workspace) {
40
- reply.code(404).send({ error: "Workspace not found" });
41
- return;
42
- }
43
- const payload = VoiceModeStateSchema.parse(request.body ?? {});
44
- const applied = deps.voiceModeManager.setEnabled(request.params.id, { clientId: payload.clientId, connectionId: payload.connectionId }, payload.enabled);
45
- if (payload.enabled && !applied) {
46
- reply.code(409).send({ error: "Client connection not active for voice mode enable" });
47
- return;
48
- }
49
- return { enabled: payload.enabled };
50
- });
51
- const handleWildcard = async (request, reply) => {
52
- const workspaceId = request.params.id;
53
- const workspace = deps.workspaceManager.get(workspaceId);
54
- if (!workspace) {
55
- reply.code(404).send({ error: "Workspace not found" });
56
- return;
57
- }
58
- const suffix = request.params["*"] ?? "";
59
- const normalized = suffix.replace(/^\/+/, "");
60
- if (normalized === "event" && request.method === "POST") {
61
- const parsed = PluginEventSchema.parse(request.body ?? {});
62
- handlePluginEvent(workspaceId, parsed, { workspaceManager: deps.workspaceManager, eventBus: deps.eventBus, logger: deps.logger });
63
- reply.code(204).send();
64
- return;
65
- }
66
- reply.code(404).send({ error: "Unknown plugin endpoint" });
67
- };
68
- app.all("/workspaces/:id/plugin/*", handleWildcard);
69
- app.all("/workspaces/:id/plugin", handleWildcard);
70
- }
@@ -1,42 +0,0 @@
1
- import { z } from "zod";
2
- import { isLoopbackAddress } from "../../auth/http-auth";
3
- const CreateSessionSchema = z.object({
4
- baseUrl: z.string().min(1),
5
- skipTlsVerify: z.boolean().optional(),
6
- });
7
- const SessionParamsSchema = z.object({
8
- id: z.string().uuid(),
9
- });
10
- export function registerRemoteProxyRoutes(app, deps) {
11
- app.post("/api/remote-proxy/sessions", async (request, reply) => {
12
- try {
13
- const body = CreateSessionSchema.parse(request.body ?? {});
14
- return await deps.sessionManager.createSession(body.baseUrl, Boolean(body.skipTlsVerify));
15
- }
16
- catch (error) {
17
- deps.logger.warn({ err: error }, "Failed to create remote proxy session");
18
- reply.code(400);
19
- return { error: error instanceof Error ? error.message : "Failed to create remote proxy session" };
20
- }
21
- });
22
- app.delete("/api/remote-proxy/sessions/:id", async (request, reply) => {
23
- if (!isLoopbackAddress(request.socket.remoteAddress)) {
24
- reply.code(404);
25
- return { error: "Not found" };
26
- }
27
- try {
28
- const params = SessionParamsSchema.parse(request.params ?? {});
29
- const deleted = await deps.sessionManager.deleteSession(params.id);
30
- if (!deleted) {
31
- reply.code(404);
32
- return { error: "Remote proxy session not found" };
33
- }
34
- return { ok: true };
35
- }
36
- catch (error) {
37
- deps.logger.warn({ err: error }, "Failed to delete remote proxy session");
38
- reply.code(400);
39
- return { error: error instanceof Error ? error.message : "Failed to delete remote proxy session" };
40
- }
41
- });
42
- }
@@ -1,142 +0,0 @@
1
- import { Agent, fetch } from "undici";
2
- import { z } from "zod";
3
- const ProbeSchema = z.object({
4
- baseUrl: z.string().min(1),
5
- skipTlsVerify: z.boolean().optional(),
6
- });
7
- const PROBE_TIMEOUT_MS = 8000;
8
- export function registerRemoteServerRoutes(app, deps) {
9
- app.post("/api/remote-servers/probe", async (request, reply) => {
10
- try {
11
- const body = ProbeSchema.parse(request.body ?? {});
12
- return await probeRemoteServer(body.baseUrl, Boolean(body.skipTlsVerify));
13
- }
14
- catch (error) {
15
- deps.logger.warn({ err: error }, "Failed to probe remote server");
16
- reply.code(400);
17
- return { error: error instanceof Error ? error.message : "Invalid request" };
18
- }
19
- });
20
- }
21
- async function probeRemoteServer(baseUrl, skipTlsVerify) {
22
- const normalizedUrl = normalizeBaseUrl(baseUrl);
23
- const probeUrl = new URL("./api/auth/status", `${normalizedUrl}/`);
24
- const controller = new AbortController();
25
- const timeout = setTimeout(() => controller.abort(), PROBE_TIMEOUT_MS);
26
- const dispatcher = skipTlsVerify ? new Agent({ connect: { rejectUnauthorized: false } }) : undefined;
27
- try {
28
- const response = await fetch(probeUrl, {
29
- method: "GET",
30
- dispatcher,
31
- signal: controller.signal,
32
- headers: {
33
- Accept: "application/json",
34
- },
35
- });
36
- if (!response.ok) {
37
- return {
38
- ok: false,
39
- reachable: true,
40
- normalizedUrl,
41
- skipTlsVerify,
42
- requiresAuth: false,
43
- authenticated: false,
44
- error: `Remote server returned HTTP ${response.status}`,
45
- errorCode: "http_error",
46
- };
47
- }
48
- const payload = (await response.json());
49
- if (typeof payload?.authenticated !== "boolean") {
50
- return {
51
- ok: false,
52
- reachable: true,
53
- normalizedUrl,
54
- skipTlsVerify,
55
- requiresAuth: false,
56
- authenticated: false,
57
- error: "Remote server did not return a valid EmbeddedCowork auth response",
58
- errorCode: "invalid_server",
59
- };
60
- }
61
- return {
62
- ok: true,
63
- reachable: true,
64
- normalizedUrl,
65
- skipTlsVerify,
66
- requiresAuth: !payload.authenticated,
67
- authenticated: payload.authenticated,
68
- };
69
- }
70
- catch (error) {
71
- const message = describeProbeError(error);
72
- return {
73
- ok: false,
74
- reachable: false,
75
- normalizedUrl,
76
- skipTlsVerify,
77
- requiresAuth: false,
78
- authenticated: false,
79
- error: message.message,
80
- errorCode: message.code,
81
- };
82
- }
83
- finally {
84
- clearTimeout(timeout);
85
- await dispatcher?.close().catch(() => { });
86
- }
87
- }
88
- function normalizeBaseUrl(input) {
89
- const parsed = new URL(input.trim());
90
- if (parsed.protocol !== "http:" && parsed.protocol !== "https:") {
91
- throw new Error("Server URL must use http:// or https://");
92
- }
93
- parsed.hash = "";
94
- parsed.search = "";
95
- parsed.pathname = parsed.pathname === "/" ? "/" : parsed.pathname.replace(/\/+$/, "") || "/";
96
- const value = parsed.toString();
97
- return parsed.pathname === "/" ? value.replace(/\/$/, "") : value.replace(/\/$/, "");
98
- }
99
- function describeProbeError(error) {
100
- const chain = unwrapErrorChain(error);
101
- const detailed = chain.find((entry) => {
102
- const code = (entry?.code ?? "").toString();
103
- return Boolean(code) && code !== "UND_ERR_RESPONSE_STATUS_CODE";
104
- }) ?? chain[0];
105
- const code = (detailed?.code ?? "").toString();
106
- const exactMessage = detailed?.message?.trim() || chain.find((entry) => entry.message?.trim())?.message?.trim();
107
- if (code === "DEPTH_ZERO_SELF_SIGNED_CERT" || code === "SELF_SIGNED_CERT_IN_CHAIN" || code === "CERT_HAS_EXPIRED") {
108
- return {
109
- code: "tls_error",
110
- message: "Certificate check failed while connecting to the remote server.",
111
- };
112
- }
113
- return {
114
- code: code === "ERR_INVALID_URL"
115
- ? "invalid_url"
116
- : code === "ECONNREFUSED"
117
- ? "connection_refused"
118
- : code === "ENOTFOUND"
119
- ? "dns_error"
120
- : code === "UND_ERR_CONNECT_TIMEOUT" || code === "ABORT_ERR"
121
- ? "timeout"
122
- : code
123
- ? code.toLowerCase()
124
- : "probe_failed",
125
- message: exactMessage || "Failed to connect to the remote server.",
126
- };
127
- }
128
- function unwrapErrorChain(error) {
129
- const results = [];
130
- let current = error;
131
- const seen = new Set();
132
- while (current && typeof current === "object" && !seen.has(current)) {
133
- seen.add(current);
134
- const entry = current;
135
- results.push({ code: entry.code, message: entry.message });
136
- current = entry.cause;
137
- }
138
- if (results.length === 0 && error instanceof Error) {
139
- results.push({ message: error.message });
140
- }
141
- return results;
142
- }
@@ -1,69 +0,0 @@
1
- import { z } from "zod";
2
- import { probeBinaryVersion } from "../../workspaces/spawn";
3
- import { sanitizeConfigDoc, sanitizeConfigOwner } from "../../settings/public-config";
4
- const ValidateBinarySchema = z.object({
5
- path: z.string(),
6
- });
7
- function validateBinaryPath(binaryPath) {
8
- const result = probeBinaryVersion(binaryPath);
9
- return { valid: result.valid, version: result.version, error: result.error };
10
- }
11
- export function registerSettingsRoutes(app, deps) {
12
- // Full-document access
13
- app.get("/api/storage/config", async () => sanitizeConfigDoc(deps.settings.getDoc("config")));
14
- app.patch("/api/storage/config", async (request, reply) => {
15
- try {
16
- return sanitizeConfigDoc(deps.settings.mergePatchDoc("config", request.body ?? {}));
17
- }
18
- catch (error) {
19
- reply.code(400);
20
- return { error: error instanceof Error ? error.message : "Invalid patch" };
21
- }
22
- });
23
- app.get("/api/storage/config/:owner", async (request) => {
24
- return sanitizeConfigOwner(request.params.owner, deps.settings.getOwner("config", request.params.owner));
25
- });
26
- app.patch("/api/storage/config/:owner", async (request, reply) => {
27
- try {
28
- return sanitizeConfigOwner(request.params.owner, deps.settings.mergePatchOwner("config", request.params.owner, request.body ?? {}));
29
- }
30
- catch (error) {
31
- reply.code(400);
32
- return { error: error instanceof Error ? error.message : "Invalid patch" };
33
- }
34
- });
35
- app.get("/api/storage/state", async () => deps.settings.getDoc("state"));
36
- app.patch("/api/storage/state", async (request, reply) => {
37
- try {
38
- return deps.settings.mergePatchDoc("state", request.body ?? {});
39
- }
40
- catch (error) {
41
- reply.code(400);
42
- return { error: error instanceof Error ? error.message : "Invalid patch" };
43
- }
44
- });
45
- app.get("/api/storage/state/:owner", async (request) => {
46
- return deps.settings.getOwner("state", request.params.owner);
47
- });
48
- app.patch("/api/storage/state/:owner", async (request, reply) => {
49
- try {
50
- return deps.settings.mergePatchOwner("state", request.params.owner, request.body ?? {});
51
- }
52
- catch (error) {
53
- reply.code(400);
54
- return { error: error instanceof Error ? error.message : "Invalid patch" };
55
- }
56
- });
57
- // Binary validation helper (used by UI when adding binaries)
58
- app.post("/api/storage/binaries/validate", async (request, reply) => {
59
- try {
60
- const body = ValidateBinarySchema.parse(request.body ?? {});
61
- return validateBinaryPath(body.path);
62
- }
63
- catch (error) {
64
- deps.logger.warn({ err: error }, "Failed to validate binary");
65
- reply.code(400);
66
- return { valid: false, error: error instanceof Error ? error.message : "Invalid request" };
67
- }
68
- });
69
- }
@@ -1,46 +0,0 @@
1
- import { z } from "zod";
2
- const SideCarCreateSchema = z.object({
3
- kind: z.literal("port").default("port"),
4
- name: z.string().trim().min(1),
5
- port: z.number().int().min(1).max(65535),
6
- insecure: z.boolean().default(false),
7
- prefixMode: z.enum(["strip", "preserve"]).default("strip"),
8
- });
9
- const SideCarUpdateSchema = SideCarCreateSchema.omit({ kind: true }).partial().refine((value) => Object.keys(value).length > 0, {
10
- message: "At least one field is required",
11
- });
12
- export function registerSideCarRoutes(app, deps) {
13
- app.get("/api/sidecars", async () => {
14
- return { sidecars: await deps.sidecarManager.list() };
15
- });
16
- app.post("/api/sidecars", async (request, reply) => {
17
- try {
18
- const body = SideCarCreateSchema.parse(request.body ?? {});
19
- const sidecar = await deps.sidecarManager.create(body);
20
- reply.code(201);
21
- return sidecar;
22
- }
23
- catch (error) {
24
- reply.code(400);
25
- return { error: error instanceof Error ? error.message : "Failed to create SideCar" };
26
- }
27
- });
28
- app.put("/api/sidecars/:id", async (request, reply) => {
29
- try {
30
- const body = SideCarUpdateSchema.parse(request.body ?? {});
31
- return await deps.sidecarManager.update(request.params.id, body);
32
- }
33
- catch (error) {
34
- reply.code(400);
35
- return { error: error instanceof Error ? error.message : "Failed to update SideCar" };
36
- }
37
- });
38
- app.delete("/api/sidecars/:id", async (request, reply) => {
39
- const removed = await deps.sidecarManager.delete(request.params.id);
40
- if (!removed) {
41
- reply.code(404);
42
- return { error: "SideCar not found" };
43
- }
44
- reply.code(204);
45
- });
46
- }
@@ -1,63 +0,0 @@
1
- import { z } from "zod";
2
- const TranscribeBodySchema = z.object({
3
- audioBase64: z.string().min(1, "Audio payload is required"),
4
- mimeType: z.string().min(1, "Audio MIME type is required"),
5
- filename: z.string().optional(),
6
- language: z.string().optional(),
7
- prompt: z.string().optional(),
8
- });
9
- const SynthesizeBodySchema = z.object({
10
- text: z.string().trim().min(1, "Text is required"),
11
- format: z.enum(["mp3", "wav", "opus", "aac"]).optional(),
12
- });
13
- function getSpeechErrorStatus(error) {
14
- if (error instanceof z.ZodError) {
15
- return 400;
16
- }
17
- if (error instanceof Error && /not configured/i.test(error.message)) {
18
- return 503;
19
- }
20
- return 502;
21
- }
22
- function getSpeechErrorMessage(error, fallback) {
23
- return error instanceof Error ? error.message : fallback;
24
- }
25
- export function registerSpeechRoutes(app, deps) {
26
- app.get("/api/speech/capabilities", async () => deps.speechService.getCapabilities());
27
- app.post("/api/speech/transcribe", async (request, reply) => {
28
- try {
29
- const body = TranscribeBodySchema.parse(request.body ?? {});
30
- return await deps.speechService.transcribe(body);
31
- }
32
- catch (error) {
33
- request.log.error({ err: error }, "Failed to transcribe audio");
34
- reply.code(getSpeechErrorStatus(error));
35
- return { error: getSpeechErrorMessage(error, "Failed to transcribe audio") };
36
- }
37
- });
38
- app.post("/api/speech/synthesize", async (request, reply) => {
39
- try {
40
- const body = SynthesizeBodySchema.parse(request.body ?? {});
41
- return await deps.speechService.synthesize(body);
42
- }
43
- catch (error) {
44
- request.log.error({ err: error }, "Failed to synthesize audio");
45
- reply.code(getSpeechErrorStatus(error));
46
- return { error: getSpeechErrorMessage(error, "Failed to synthesize audio") };
47
- }
48
- });
49
- app.post("/api/speech/synthesize/stream", async (request, reply) => {
50
- try {
51
- const body = SynthesizeBodySchema.parse(request.body ?? {});
52
- const result = await deps.speechService.synthesizeStream(body);
53
- reply.header("Content-Type", result.mimeType);
54
- reply.header("Cache-Control", "no-store");
55
- return reply.send(result.stream);
56
- }
57
- catch (error) {
58
- request.log.error({ err: error }, "Failed to stream synthesized audio");
59
- reply.code(getSpeechErrorStatus(error));
60
- return { error: getSpeechErrorMessage(error, "Failed to stream synthesized audio") };
61
- }
62
- });
63
- }
@@ -1,52 +0,0 @@
1
- import { z } from "zod";
2
- import { ModelPreferenceSchema } from "../../config/schema";
3
- const InstanceDataSchema = z.object({
4
- messageHistory: z.array(z.string()).default([]),
5
- agentModelSelections: z.record(z.string(), ModelPreferenceSchema).default({}),
6
- });
7
- const EMPTY_INSTANCE_DATA = {
8
- messageHistory: [],
9
- agentModelSelections: {},
10
- };
11
- export function registerStorageRoutes(app, deps) {
12
- const resolveStorageKey = (instanceId) => {
13
- const workspace = deps.workspaceManager.get(instanceId);
14
- return workspace?.path ?? instanceId;
15
- };
16
- app.get("/api/storage/instances/:id", async (request, reply) => {
17
- try {
18
- const storageId = resolveStorageKey(request.params.id);
19
- const data = await deps.instanceStore.read(storageId);
20
- return data;
21
- }
22
- catch (error) {
23
- reply.code(500);
24
- return { error: error instanceof Error ? error.message : "Failed to read instance data" };
25
- }
26
- });
27
- app.put("/api/storage/instances/:id", async (request, reply) => {
28
- try {
29
- const body = InstanceDataSchema.parse(request.body ?? {});
30
- const storageId = resolveStorageKey(request.params.id);
31
- await deps.instanceStore.write(storageId, body);
32
- deps.eventBus.publish({ type: "instance.dataChanged", instanceId: request.params.id, data: body });
33
- reply.code(204);
34
- }
35
- catch (error) {
36
- reply.code(400);
37
- return { error: error instanceof Error ? error.message : "Failed to save instance data" };
38
- }
39
- });
40
- app.delete("/api/storage/instances/:id", async (request, reply) => {
41
- try {
42
- const storageId = resolveStorageKey(request.params.id);
43
- await deps.instanceStore.delete(storageId);
44
- deps.eventBus.publish({ type: "instance.dataChanged", instanceId: request.params.id, data: EMPTY_INSTANCE_DATA });
45
- reply.code(204);
46
- }
47
- catch (error) {
48
- reply.code(500);
49
- return { error: error instanceof Error ? error.message : "Failed to delete instance data" };
50
- }
51
- });
52
- }