remote-codex 0.11.1 → 0.11.3

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 (336) hide show
  1. package/apps/relay-server/dist/index.js +1221 -0
  2. package/apps/supervisor-api/dist/index.js +2822 -780
  3. package/apps/supervisor-web/dist/assets/core-DIQen2lE.js +12 -0
  4. package/apps/supervisor-web/dist/assets/{css-DPfMkruS.js → css-CLj8gQPS.js} +1 -1
  5. package/apps/supervisor-web/dist/assets/engine-javascript-DBd1bXLz.js +141 -0
  6. package/apps/supervisor-web/dist/assets/graph-vendor-C5ap-Sga.css +1 -0
  7. package/apps/supervisor-web/dist/assets/graph-vendor-CGzY-MFv.js +23 -0
  8. package/apps/supervisor-web/dist/assets/{html-GMplVEZG.js → html-pp8916En.js} +1 -1
  9. package/apps/supervisor-web/dist/assets/index-CBIze1VS.css +1 -0
  10. package/apps/supervisor-web/dist/assets/index-YpGAPjED.js +4 -0
  11. package/apps/supervisor-web/dist/assets/markdown-vendor-hBDTCSB-.js +291 -0
  12. package/apps/supervisor-web/dist/assets/react-vendor-o1Xrx7m4.js +60 -0
  13. package/apps/supervisor-web/dist/assets/{shellscript-Yzrsuije.js → shellscript-CEILq0vU.js} +1 -1
  14. package/apps/supervisor-web/dist/assets/{sql-BLtJtn59.js → sql-CRqJ_cUM.js} +1 -1
  15. package/apps/supervisor-web/dist/assets/terminal-vendor-Beg8tuEN.css +32 -0
  16. package/apps/supervisor-web/dist/assets/{xterm-D92BViLH.js → terminal-vendor-CLGgN91S.js} +17 -6
  17. package/apps/supervisor-web/dist/assets/thread-ui-BEieA99i.css +1 -0
  18. package/apps/supervisor-web/dist/assets/thread-ui-CF80LEEN.js +3613 -0
  19. package/apps/supervisor-web/dist/assets/ui-vendor-CW6egZBG.js +430 -0
  20. package/apps/supervisor-web/dist/index.html +11 -2
  21. package/apps/supervisor-web/dist/vendor/3Dmol-min.js +2 -0
  22. package/bin/remote-codex-plugin-mcp.mjs +140 -0
  23. package/bin/remote-codex.mjs +73 -16
  24. package/package.json +7 -1
  25. package/packages/agent-runtime/src/types.ts +1 -0
  26. package/packages/agent-runtime/src/unavailable-runtime.ts +5 -13
  27. package/packages/claude/src/runtimeAdapter.ts +7 -5
  28. package/packages/codex/src/appServerManager.ts +3 -3
  29. package/packages/codex/src/historyItems.test.ts +2 -4
  30. package/packages/codex/src/historyItems.ts +13 -18
  31. package/packages/codex/src/runtime-errors.ts +0 -5
  32. package/packages/codex/src/runtimeAdapter.ts +3 -0
  33. package/packages/codex/src/types.ts +1 -0
  34. package/packages/db/migrations/0018_shell_session_label.sql +1 -0
  35. package/packages/db/src/repositories.ts +12 -0
  36. package/packages/db/src/schema.ts +1 -0
  37. package/packages/opencode/src/historyItems.ts +0 -17
  38. package/packages/plugin-terminal/package.json +17 -0
  39. package/packages/plugin-terminal/plugin.json +25 -0
  40. package/packages/plugin-terminal/src/index.ts +2 -0
  41. package/packages/plugin-terminal/src/manifest.ts +51 -0
  42. package/packages/shared/src/index.ts +213 -0
  43. package/apps/supervisor-api/dist/chunk-6M32PPHZ.js +0 -24507
  44. package/apps/supervisor-api/dist/chunk-7AA2MFXK.js +0 -24499
  45. package/apps/supervisor-api/dist/chunk-HKBFCPHH.js +0 -24511
  46. package/apps/supervisor-api/dist/worker-index.js +0 -33
  47. package/apps/supervisor-web/dist/assets/abap-BdImnpbu.js +0 -1
  48. package/apps/supervisor-web/dist/assets/actionscript-3-CoDkCxhg.js +0 -1
  49. package/apps/supervisor-web/dist/assets/ada-bCR0ucgS.js +0 -1
  50. package/apps/supervisor-web/dist/assets/addon-fit-YJmn1quW.js +0 -12
  51. package/apps/supervisor-web/dist/assets/andromeeda-C4gqWexZ.js +0 -1
  52. package/apps/supervisor-web/dist/assets/angular-html-CU67Zn6k.js +0 -1
  53. package/apps/supervisor-web/dist/assets/angular-ts-BwZT4LLn.js +0 -1
  54. package/apps/supervisor-web/dist/assets/apache-Pmp26Uib.js +0 -1
  55. package/apps/supervisor-web/dist/assets/apex-D8_7TLub.js +0 -1
  56. package/apps/supervisor-web/dist/assets/apl-dKokRX4l.js +0 -1
  57. package/apps/supervisor-web/dist/assets/applescript-Co6uUVPk.js +0 -1
  58. package/apps/supervisor-web/dist/assets/ara-BRHolxvo.js +0 -1
  59. package/apps/supervisor-web/dist/assets/asciidoc-Ve4PFQV2.js +0 -1
  60. package/apps/supervisor-web/dist/assets/asm-D_Q5rh1f.js +0 -1
  61. package/apps/supervisor-web/dist/assets/astro-CbQHKStN.js +0 -1
  62. package/apps/supervisor-web/dist/assets/aurora-x-D-2ljcwZ.js +0 -1
  63. package/apps/supervisor-web/dist/assets/awk-DMzUqQB5.js +0 -1
  64. package/apps/supervisor-web/dist/assets/ayu-mirage-32ctXXKs.js +0 -1
  65. package/apps/supervisor-web/dist/assets/ballerina-BFfxhgS-.js +0 -1
  66. package/apps/supervisor-web/dist/assets/bat-BkioyH1T.js +0 -1
  67. package/apps/supervisor-web/dist/assets/beancount-k_qm7-4y.js +0 -1
  68. package/apps/supervisor-web/dist/assets/berry-uYugtg8r.js +0 -1
  69. package/apps/supervisor-web/dist/assets/bibtex-CHM0blh-.js +0 -1
  70. package/apps/supervisor-web/dist/assets/bicep-Bmn6On1c.js +0 -1
  71. package/apps/supervisor-web/dist/assets/bird2-DPOp833l.js +0 -1
  72. package/apps/supervisor-web/dist/assets/blade-D4QpJJKB.js +0 -1
  73. package/apps/supervisor-web/dist/assets/bsl-BO_Y6i37.js +0 -1
  74. package/apps/supervisor-web/dist/assets/c-BIGW1oBm.js +0 -1
  75. package/apps/supervisor-web/dist/assets/c3-eo99z4R2.js +0 -1
  76. package/apps/supervisor-web/dist/assets/cadence-Bv_4Rxtq.js +0 -1
  77. package/apps/supervisor-web/dist/assets/cairo-KRGpt6FW.js +0 -1
  78. package/apps/supervisor-web/dist/assets/catppuccin-frappe-DFWUc33u.js +0 -1
  79. package/apps/supervisor-web/dist/assets/catppuccin-latte-C9dUb6Cb.js +0 -1
  80. package/apps/supervisor-web/dist/assets/catppuccin-macchiato-DQyhUUbL.js +0 -1
  81. package/apps/supervisor-web/dist/assets/catppuccin-mocha-D87Tk5Gz.js +0 -1
  82. package/apps/supervisor-web/dist/assets/clarity-D53aC0YG.js +0 -1
  83. package/apps/supervisor-web/dist/assets/clojure-P80f7IUj.js +0 -1
  84. package/apps/supervisor-web/dist/assets/cmake-D1j8_8rp.js +0 -1
  85. package/apps/supervisor-web/dist/assets/cobol-nwyudZeR.js +0 -1
  86. package/apps/supervisor-web/dist/assets/codeowners-Bp6g37R7.js +0 -1
  87. package/apps/supervisor-web/dist/assets/codeql-DsOJ9woJ.js +0 -1
  88. package/apps/supervisor-web/dist/assets/coffee-Ch7k5sss.js +0 -1
  89. package/apps/supervisor-web/dist/assets/common-lisp-Cg-RD9OK.js +0 -1
  90. package/apps/supervisor-web/dist/assets/coq-DkFqJrB1.js +0 -1
  91. package/apps/supervisor-web/dist/assets/cpp-CofmeUqb.js +0 -1
  92. package/apps/supervisor-web/dist/assets/crystal-tKQVLTB8.js +0 -1
  93. package/apps/supervisor-web/dist/assets/csharp-COcwbKMJ.js +0 -1
  94. package/apps/supervisor-web/dist/assets/cue-D82EKSYY.js +0 -1
  95. package/apps/supervisor-web/dist/assets/cypher-COkxafJQ.js +0 -1
  96. package/apps/supervisor-web/dist/assets/d-85-TOEBH.js +0 -1
  97. package/apps/supervisor-web/dist/assets/dark-plus-C3mMm8J8.js +0 -1
  98. package/apps/supervisor-web/dist/assets/dart-CF10PKvl.js +0 -1
  99. package/apps/supervisor-web/dist/assets/dax-CEL-wOlO.js +0 -1
  100. package/apps/supervisor-web/dist/assets/desktop-BmXAJ9_W.js +0 -1
  101. package/apps/supervisor-web/dist/assets/diff-D97Zzqfu.js +0 -1
  102. package/apps/supervisor-web/dist/assets/docker-BcOcwvcX.js +0 -1
  103. package/apps/supervisor-web/dist/assets/dotenv-Da5cRb03.js +0 -1
  104. package/apps/supervisor-web/dist/assets/dracula-BzJJZx-M.js +0 -1
  105. package/apps/supervisor-web/dist/assets/dracula-soft-BXkSAIEj.js +0 -1
  106. package/apps/supervisor-web/dist/assets/dream-maker-BtqSS_iP.js +0 -1
  107. package/apps/supervisor-web/dist/assets/edge-BkV0erSs.js +0 -1
  108. package/apps/supervisor-web/dist/assets/elixir-CDX3lj18.js +0 -1
  109. package/apps/supervisor-web/dist/assets/elm-DbKCFpqz.js +0 -1
  110. package/apps/supervisor-web/dist/assets/emacs-lisp-C9XAeP06.js +0 -1
  111. package/apps/supervisor-web/dist/assets/erb-B12qg9BL.js +0 -1
  112. package/apps/supervisor-web/dist/assets/erlang-DsQrWhSR.js +0 -1
  113. package/apps/supervisor-web/dist/assets/everforest-dark-BgDCqdQA.js +0 -1
  114. package/apps/supervisor-web/dist/assets/everforest-light-C8M2exoo.js +0 -1
  115. package/apps/supervisor-web/dist/assets/fennel-BYunw83y.js +0 -1
  116. package/apps/supervisor-web/dist/assets/fish-BvzEVeQv.js +0 -1
  117. package/apps/supervisor-web/dist/assets/fluent-C4IJs8-o.js +0 -1
  118. package/apps/supervisor-web/dist/assets/fortran-fixed-form-CkoXwp7k.js +0 -1
  119. package/apps/supervisor-web/dist/assets/fortran-free-form-BxgE0vQu.js +0 -1
  120. package/apps/supervisor-web/dist/assets/fsharp-CXgrBDvD.js +0 -1
  121. package/apps/supervisor-web/dist/assets/gdresource-BOOCDP_w.js +0 -1
  122. package/apps/supervisor-web/dist/assets/gdscript-C5YyOfLZ.js +0 -1
  123. package/apps/supervisor-web/dist/assets/gdshader-DkwncUOv.js +0 -1
  124. package/apps/supervisor-web/dist/assets/genie-D0YGMca9.js +0 -1
  125. package/apps/supervisor-web/dist/assets/gherkin-DyxjwDmM.js +0 -1
  126. package/apps/supervisor-web/dist/assets/git-commit-F4YmCXRG.js +0 -1
  127. package/apps/supervisor-web/dist/assets/git-rebase-r7XF79zn.js +0 -1
  128. package/apps/supervisor-web/dist/assets/github-dark-DHJKELXO.js +0 -1
  129. package/apps/supervisor-web/dist/assets/github-dark-default-Cuk6v7N8.js +0 -1
  130. package/apps/supervisor-web/dist/assets/github-dark-dimmed-DH5Ifo-i.js +0 -1
  131. package/apps/supervisor-web/dist/assets/github-dark-high-contrast-E3gJ1_iC.js +0 -1
  132. package/apps/supervisor-web/dist/assets/github-light-DAi9KRSo.js +0 -1
  133. package/apps/supervisor-web/dist/assets/github-light-default-D7oLnXFd.js +0 -1
  134. package/apps/supervisor-web/dist/assets/github-light-high-contrast-BfjtVDDH.js +0 -1
  135. package/apps/supervisor-web/dist/assets/gleam-BspZqrRM.js +0 -1
  136. package/apps/supervisor-web/dist/assets/glimmer-js-Rg0-pVw9.js +0 -1
  137. package/apps/supervisor-web/dist/assets/glimmer-ts-U6CK756n.js +0 -1
  138. package/apps/supervisor-web/dist/assets/glsl-DplSGwfg.js +0 -1
  139. package/apps/supervisor-web/dist/assets/gn-n2N0HUVH.js +0 -1
  140. package/apps/supervisor-web/dist/assets/gnuplot-DdkO51Og.js +0 -1
  141. package/apps/supervisor-web/dist/assets/go-CxLEBnE3.js +0 -1
  142. package/apps/supervisor-web/dist/assets/graphql-ChdNCCLP.js +0 -1
  143. package/apps/supervisor-web/dist/assets/groovy-gcz8RCvz.js +0 -1
  144. package/apps/supervisor-web/dist/assets/gruvbox-dark-hard-CFHQjOhq.js +0 -1
  145. package/apps/supervisor-web/dist/assets/gruvbox-dark-medium-GsRaNv29.js +0 -1
  146. package/apps/supervisor-web/dist/assets/gruvbox-dark-soft-CVdnzihN.js +0 -1
  147. package/apps/supervisor-web/dist/assets/gruvbox-light-hard-CH1njM8p.js +0 -1
  148. package/apps/supervisor-web/dist/assets/gruvbox-light-medium-DRw_LuNl.js +0 -1
  149. package/apps/supervisor-web/dist/assets/gruvbox-light-soft-hJgmCMqR.js +0 -1
  150. package/apps/supervisor-web/dist/assets/hack-CaT9iCJl.js +0 -1
  151. package/apps/supervisor-web/dist/assets/haml-B8DHNrY2.js +0 -1
  152. package/apps/supervisor-web/dist/assets/handlebars-BL8al0AC.js +0 -1
  153. package/apps/supervisor-web/dist/assets/haskell-Df6bDoY_.js +0 -1
  154. package/apps/supervisor-web/dist/assets/haxe-CzTSHFRz.js +0 -1
  155. package/apps/supervisor-web/dist/assets/hcl-BWvSN4gD.js +0 -1
  156. package/apps/supervisor-web/dist/assets/highlighted-body-OFNGDK62-p31aS0f0.js +0 -1
  157. package/apps/supervisor-web/dist/assets/hjson-D5-asLiD.js +0 -1
  158. package/apps/supervisor-web/dist/assets/hlsl-D3lLCCz7.js +0 -1
  159. package/apps/supervisor-web/dist/assets/horizon-BUw7H-hv.js +0 -1
  160. package/apps/supervisor-web/dist/assets/horizon-bright-Cn-bp-IR.js +0 -1
  161. package/apps/supervisor-web/dist/assets/houston-DnULxvSX.js +0 -1
  162. package/apps/supervisor-web/dist/assets/html-derivative-BFtXZ54Q.js +0 -1
  163. package/apps/supervisor-web/dist/assets/http-jrhK8wxY.js +0 -1
  164. package/apps/supervisor-web/dist/assets/hurl-irOxFIW8.js +0 -1
  165. package/apps/supervisor-web/dist/assets/hxml-Bvhsp5Yf.js +0 -1
  166. package/apps/supervisor-web/dist/assets/hy-DFXneXwc.js +0 -1
  167. package/apps/supervisor-web/dist/assets/imba-DGztddWO.js +0 -1
  168. package/apps/supervisor-web/dist/assets/index-BiuFei_K.css +0 -32
  169. package/apps/supervisor-web/dist/assets/index-D1R9CUnx.js +0 -2161
  170. package/apps/supervisor-web/dist/assets/ini-BEwlwnbL.js +0 -1
  171. package/apps/supervisor-web/dist/assets/java-CylS5w8V.js +0 -1
  172. package/apps/supervisor-web/dist/assets/jinja-4LBKfQ-Z.js +0 -1
  173. package/apps/supervisor-web/dist/assets/jison-wvAkD_A8.js +0 -1
  174. package/apps/supervisor-web/dist/assets/json5-C9tS-k6U.js +0 -1
  175. package/apps/supervisor-web/dist/assets/jsonc-Des-eS-w.js +0 -1
  176. package/apps/supervisor-web/dist/assets/jsonl-DcaNXYhu.js +0 -1
  177. package/apps/supervisor-web/dist/assets/jsonnet-DFQXde-d.js +0 -1
  178. package/apps/supervisor-web/dist/assets/jssm-C2t-YnRu.js +0 -1
  179. package/apps/supervisor-web/dist/assets/julia-CxzCAyBv.js +0 -1
  180. package/apps/supervisor-web/dist/assets/just-Cw27pwNe.js +0 -1
  181. package/apps/supervisor-web/dist/assets/kanagawa-dragon-CkXjmgJE.js +0 -1
  182. package/apps/supervisor-web/dist/assets/kanagawa-lotus-CfQXZHmo.js +0 -1
  183. package/apps/supervisor-web/dist/assets/kanagawa-wave-DWedfzmr.js +0 -1
  184. package/apps/supervisor-web/dist/assets/kdl-DV7GczEv.js +0 -1
  185. package/apps/supervisor-web/dist/assets/kotlin-BdnUsdx6.js +0 -1
  186. package/apps/supervisor-web/dist/assets/kusto-DZf3V79B.js +0 -1
  187. package/apps/supervisor-web/dist/assets/laserwave-DUszq2jm.js +0 -1
  188. package/apps/supervisor-web/dist/assets/latex-CWtU0Tv5.js +0 -1
  189. package/apps/supervisor-web/dist/assets/lean-BZvkOJ9d.js +0 -1
  190. package/apps/supervisor-web/dist/assets/less-B1dDrJ26.js +0 -1
  191. package/apps/supervisor-web/dist/assets/light-plus-B7mTdjB0.js +0 -1
  192. package/apps/supervisor-web/dist/assets/liquid-DYVedYrR.js +0 -1
  193. package/apps/supervisor-web/dist/assets/llvm-DjAJT7YJ.js +0 -1
  194. package/apps/supervisor-web/dist/assets/log-2UxHyX5q.js +0 -1
  195. package/apps/supervisor-web/dist/assets/logo-BtOb2qkB.js +0 -1
  196. package/apps/supervisor-web/dist/assets/lua-BaeVxFsk.js +0 -1
  197. package/apps/supervisor-web/dist/assets/luau-C-HG3fhB.js +0 -1
  198. package/apps/supervisor-web/dist/assets/make-CHLpvVh8.js +0 -1
  199. package/apps/supervisor-web/dist/assets/marko-CnJfTvn9.js +0 -1
  200. package/apps/supervisor-web/dist/assets/material-theme-D5KoaKCx.js +0 -1
  201. package/apps/supervisor-web/dist/assets/material-theme-darker-BfHTSMKl.js +0 -1
  202. package/apps/supervisor-web/dist/assets/material-theme-lighter-B0m2ddpp.js +0 -1
  203. package/apps/supervisor-web/dist/assets/material-theme-ocean-CyktbL80.js +0 -1
  204. package/apps/supervisor-web/dist/assets/material-theme-palenight-Csfq5Kiy.js +0 -1
  205. package/apps/supervisor-web/dist/assets/matlab-D7o27uSR.js +0 -1
  206. package/apps/supervisor-web/dist/assets/mdc-BMNejdWA.js +0 -1
  207. package/apps/supervisor-web/dist/assets/mdx-Cmh6b_Ma.js +0 -1
  208. package/apps/supervisor-web/dist/assets/mermaid-mWjccvbQ.js +0 -1
  209. package/apps/supervisor-web/dist/assets/min-dark-CafNBF8u.js +0 -1
  210. package/apps/supervisor-web/dist/assets/min-light-CTRr51gU.js +0 -1
  211. package/apps/supervisor-web/dist/assets/mipsasm-CKIfxQSi.js +0 -1
  212. package/apps/supervisor-web/dist/assets/mojo-rZm6bMo-.js +0 -1
  213. package/apps/supervisor-web/dist/assets/monokai-D4h5O-jR.js +0 -1
  214. package/apps/supervisor-web/dist/assets/moonbit-_H4v1dQx.js +0 -1
  215. package/apps/supervisor-web/dist/assets/move-IF9eRakj.js +0 -1
  216. package/apps/supervisor-web/dist/assets/narrat-DRg8JJMk.js +0 -1
  217. package/apps/supervisor-web/dist/assets/nextflow-Zz6hmt5N.js +0 -1
  218. package/apps/supervisor-web/dist/assets/nextflow-groovy-BeH2EWoN.js +0 -1
  219. package/apps/supervisor-web/dist/assets/nginx-BpAMiNFr.js +0 -1
  220. package/apps/supervisor-web/dist/assets/night-owl-C39BiMTA.js +0 -1
  221. package/apps/supervisor-web/dist/assets/night-owl-light-CMTm3GFP.js +0 -1
  222. package/apps/supervisor-web/dist/assets/nim-CVrawwO9.js +0 -1
  223. package/apps/supervisor-web/dist/assets/nix-CwoSXNpI.js +0 -1
  224. package/apps/supervisor-web/dist/assets/nord-Ddv68eIx.js +0 -1
  225. package/apps/supervisor-web/dist/assets/nushell-Cz2AlsmD.js +0 -1
  226. package/apps/supervisor-web/dist/assets/objective-c-DXmwc3jG.js +0 -1
  227. package/apps/supervisor-web/dist/assets/objective-cpp-CLxacb5B.js +0 -1
  228. package/apps/supervisor-web/dist/assets/ocaml-C0hk2d4L.js +0 -1
  229. package/apps/supervisor-web/dist/assets/odin-BBf5iR-q.js +0 -1
  230. package/apps/supervisor-web/dist/assets/one-dark-pro-DVMEJ2y_.js +0 -1
  231. package/apps/supervisor-web/dist/assets/one-light-C3Wv6jpd.js +0 -1
  232. package/apps/supervisor-web/dist/assets/openscad-C4EeE6gA.js +0 -1
  233. package/apps/supervisor-web/dist/assets/pascal-D93ZcfNL.js +0 -1
  234. package/apps/supervisor-web/dist/assets/perl-C0TMdlhV.js +0 -1
  235. package/apps/supervisor-web/dist/assets/php-Dhbhpdrm.js +0 -1
  236. package/apps/supervisor-web/dist/assets/pkl-u5AG7uiY.js +0 -1
  237. package/apps/supervisor-web/dist/assets/plastic-3e1v2bzS.js +0 -1
  238. package/apps/supervisor-web/dist/assets/plsql-ChMvpjG-.js +0 -1
  239. package/apps/supervisor-web/dist/assets/po-BTJTHyun.js +0 -1
  240. package/apps/supervisor-web/dist/assets/poimandres-CS3Unz2-.js +0 -1
  241. package/apps/supervisor-web/dist/assets/polar-C0HS_06l.js +0 -1
  242. package/apps/supervisor-web/dist/assets/postcss-CXtECtnM.js +0 -1
  243. package/apps/supervisor-web/dist/assets/powerquery-CEu0bR-o.js +0 -1
  244. package/apps/supervisor-web/dist/assets/powershell-Dpen1YoG.js +0 -1
  245. package/apps/supervisor-web/dist/assets/prisma-Dd19v3D-.js +0 -1
  246. package/apps/supervisor-web/dist/assets/prolog-CbFg5uaA.js +0 -1
  247. package/apps/supervisor-web/dist/assets/proto-C7zT0LnQ.js +0 -1
  248. package/apps/supervisor-web/dist/assets/pug-CGlum2m_.js +0 -1
  249. package/apps/supervisor-web/dist/assets/puppet-BMWR74SV.js +0 -1
  250. package/apps/supervisor-web/dist/assets/purescript-CklMAg4u.js +0 -1
  251. package/apps/supervisor-web/dist/assets/qml-3beO22l8.js +0 -1
  252. package/apps/supervisor-web/dist/assets/qmldir-C8lEn-DE.js +0 -1
  253. package/apps/supervisor-web/dist/assets/qss-IeuSbFQv.js +0 -1
  254. package/apps/supervisor-web/dist/assets/r-Dspwwk_N.js +0 -1
  255. package/apps/supervisor-web/dist/assets/racket-BqYA7rlc.js +0 -1
  256. package/apps/supervisor-web/dist/assets/raku-DXvB9xmW.js +0 -1
  257. package/apps/supervisor-web/dist/assets/razor-Uh8Bk_45.js +0 -1
  258. package/apps/supervisor-web/dist/assets/red-bN70gL4F.js +0 -1
  259. package/apps/supervisor-web/dist/assets/reg-C-SQnVFl.js +0 -1
  260. package/apps/supervisor-web/dist/assets/regexp-CDVJQ6XC.js +0 -1
  261. package/apps/supervisor-web/dist/assets/rel-C3B-1QV4.js +0 -1
  262. package/apps/supervisor-web/dist/assets/riscv-BM1_JUlF.js +0 -1
  263. package/apps/supervisor-web/dist/assets/ron-D8l8udqQ.js +0 -1
  264. package/apps/supervisor-web/dist/assets/rose-pine-dawn-DHQR4-dF.js +0 -1
  265. package/apps/supervisor-web/dist/assets/rose-pine-moon-D4_iv3hh.js +0 -1
  266. package/apps/supervisor-web/dist/assets/rose-pine-qdsjHGoJ.js +0 -1
  267. package/apps/supervisor-web/dist/assets/rosmsg-BJDFO7_C.js +0 -1
  268. package/apps/supervisor-web/dist/assets/rst-BrH8l1NY.js +0 -1
  269. package/apps/supervisor-web/dist/assets/ruby-Dw2BHqvy.js +0 -1
  270. package/apps/supervisor-web/dist/assets/rust-B1yitclQ.js +0 -1
  271. package/apps/supervisor-web/dist/assets/sas-cz2c8ADy.js +0 -1
  272. package/apps/supervisor-web/dist/assets/sass-Cj5Yp3dK.js +0 -1
  273. package/apps/supervisor-web/dist/assets/scala-C151Ov-r.js +0 -1
  274. package/apps/supervisor-web/dist/assets/scheme-C98Dy4si.js +0 -1
  275. package/apps/supervisor-web/dist/assets/scss-OYdSNvt2.js +0 -1
  276. package/apps/supervisor-web/dist/assets/sdbl-DVxCFoDh.js +0 -1
  277. package/apps/supervisor-web/dist/assets/shaderlab-Dg9Lc6iA.js +0 -1
  278. package/apps/supervisor-web/dist/assets/shellsession-BADoaaVG.js +0 -1
  279. package/apps/supervisor-web/dist/assets/slack-dark-BthQWCQV.js +0 -1
  280. package/apps/supervisor-web/dist/assets/slack-ochin-DqwNpetd.js +0 -1
  281. package/apps/supervisor-web/dist/assets/smalltalk-BERRCDM3.js +0 -1
  282. package/apps/supervisor-web/dist/assets/snazzy-light-Bw305WKR.js +0 -1
  283. package/apps/supervisor-web/dist/assets/solarized-dark-DXbdFlpD.js +0 -1
  284. package/apps/supervisor-web/dist/assets/solarized-light-L9t79GZl.js +0 -1
  285. package/apps/supervisor-web/dist/assets/solidity-rGO070M0.js +0 -1
  286. package/apps/supervisor-web/dist/assets/soy-Brmx7dQM.js +0 -1
  287. package/apps/supervisor-web/dist/assets/sparql-rVzFXLq3.js +0 -1
  288. package/apps/supervisor-web/dist/assets/splunk-BtCnVYZw.js +0 -1
  289. package/apps/supervisor-web/dist/assets/ssh-config-_ykCGR6B.js +0 -1
  290. package/apps/supervisor-web/dist/assets/stata-BH5u7GGu.js +0 -1
  291. package/apps/supervisor-web/dist/assets/stylus-BEDo0Tqx.js +0 -1
  292. package/apps/supervisor-web/dist/assets/surrealql-Bq5Q-fJD.js +0 -1
  293. package/apps/supervisor-web/dist/assets/svelte-C_ipcX3V.js +0 -1
  294. package/apps/supervisor-web/dist/assets/swift-D82vCrfD.js +0 -1
  295. package/apps/supervisor-web/dist/assets/synthwave-84-CbfX1IO0.js +0 -1
  296. package/apps/supervisor-web/dist/assets/system-verilog-CnnmHF94.js +0 -1
  297. package/apps/supervisor-web/dist/assets/systemd-4A_iFExJ.js +0 -1
  298. package/apps/supervisor-web/dist/assets/talonscript-CkByrt1z.js +0 -1
  299. package/apps/supervisor-web/dist/assets/tasl-QIJgUcNo.js +0 -1
  300. package/apps/supervisor-web/dist/assets/tcl-dwOrl1Do.js +0 -1
  301. package/apps/supervisor-web/dist/assets/templ-P3uqSqPl.js +0 -1
  302. package/apps/supervisor-web/dist/assets/terraform-BETggiCN.js +0 -1
  303. package/apps/supervisor-web/dist/assets/tex-idrVyKtj.js +0 -1
  304. package/apps/supervisor-web/dist/assets/tokyo-night-hegEt444.js +0 -1
  305. package/apps/supervisor-web/dist/assets/ts-tags-zn1MmPIZ.js +0 -1
  306. package/apps/supervisor-web/dist/assets/tsv-B_m7g4N7.js +0 -1
  307. package/apps/supervisor-web/dist/assets/turtle-BsS91CYL.js +0 -1
  308. package/apps/supervisor-web/dist/assets/twig-DNn4PbVi.js +0 -1
  309. package/apps/supervisor-web/dist/assets/typespec-BGHnOYBU.js +0 -1
  310. package/apps/supervisor-web/dist/assets/typst-DHCkPAjA.js +0 -1
  311. package/apps/supervisor-web/dist/assets/v-BcVCzyr7.js +0 -1
  312. package/apps/supervisor-web/dist/assets/vala-CsfeWuGM.js +0 -1
  313. package/apps/supervisor-web/dist/assets/vb-D17OF-Vu.js +0 -1
  314. package/apps/supervisor-web/dist/assets/verilog-BQ8w6xss.js +0 -1
  315. package/apps/supervisor-web/dist/assets/vesper-DU1UobuO.js +0 -1
  316. package/apps/supervisor-web/dist/assets/vhdl-CeAyd5Ju.js +0 -1
  317. package/apps/supervisor-web/dist/assets/viml-CJc9bBzg.js +0 -1
  318. package/apps/supervisor-web/dist/assets/vitesse-black-Bkuqu6BP.js +0 -1
  319. package/apps/supervisor-web/dist/assets/vitesse-dark-D0r3Knsf.js +0 -1
  320. package/apps/supervisor-web/dist/assets/vitesse-light-CVO1_9PV.js +0 -1
  321. package/apps/supervisor-web/dist/assets/vue-DN_0RTcg.js +0 -1
  322. package/apps/supervisor-web/dist/assets/vue-html-AaS7Mt5G.js +0 -1
  323. package/apps/supervisor-web/dist/assets/vue-vine-CQOfvN7w.js +0 -1
  324. package/apps/supervisor-web/dist/assets/vyper-CDx5xZoG.js +0 -1
  325. package/apps/supervisor-web/dist/assets/wasm-CG6Dc4jp.js +0 -1
  326. package/apps/supervisor-web/dist/assets/wasm-MzD3tlZU.js +0 -1
  327. package/apps/supervisor-web/dist/assets/wenyan-BV7otONQ.js +0 -1
  328. package/apps/supervisor-web/dist/assets/wgsl-Dx-B1_4e.js +0 -1
  329. package/apps/supervisor-web/dist/assets/wikitext-BhOHFoWU.js +0 -1
  330. package/apps/supervisor-web/dist/assets/wit-5i3qLPDT.js +0 -1
  331. package/apps/supervisor-web/dist/assets/wolfram-lXgVvXCa.js +0 -1
  332. package/apps/supervisor-web/dist/assets/xml-sdJ4AIDG.js +0 -1
  333. package/apps/supervisor-web/dist/assets/xsl-CtQFsRM5.js +0 -1
  334. package/apps/supervisor-web/dist/assets/zenscript-DVFEvuxE.js +0 -1
  335. package/apps/supervisor-web/dist/assets/zig-VOosw3JB.js +0 -1
  336. /package/apps/{supervisor-api/dist/worker-index.d.ts → relay-server/dist/index.d.ts} +0 -0
@@ -0,0 +1,140 @@
1
+ #!/usr/bin/env node
2
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
3
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
4
+ import { z } from 'zod';
5
+
6
+ const MOLECULE_ARTIFACT_TYPE = 'chemistry.molecule3d';
7
+ const XYZ_VIEWER_PLUGIN_ID = 'remote-codex.xyz-viewer';
8
+
9
+ function isFiniteNumberToken(value) {
10
+ return typeof value === 'string' && value.trim() !== '' && Number.isFinite(Number(value));
11
+ }
12
+
13
+ function looksLikeXyzMolecule(content) {
14
+ const lines = content.split(/\r?\n/).map((line) => line.trim()).filter(Boolean);
15
+ const atomCount = Number(lines[0]);
16
+ if (!Number.isInteger(atomCount) || atomCount <= 0 || atomCount > 100000) {
17
+ return false;
18
+ }
19
+
20
+ const atomLines = lines.slice(2);
21
+ if (atomLines.length < atomCount) {
22
+ return false;
23
+ }
24
+
25
+ return atomLines.slice(0, atomCount).every((line) => {
26
+ const parts = line.split(/\s+/);
27
+ return (
28
+ parts.length >= 4 &&
29
+ /^([A-Za-z][A-Za-z]?|\d+)$/.test(parts[0] ?? '') &&
30
+ isFiniteNumberToken(parts[1]) &&
31
+ isFiniteNumberToken(parts[2]) &&
32
+ isFiniteNumberToken(parts[3])
33
+ );
34
+ });
35
+ }
36
+
37
+ function looksLikePdbMolecule(content) {
38
+ return content.split(/\r?\n/).some((line) => /^(ATOM|HETATM)\s+/i.test(line));
39
+ }
40
+
41
+ function looksLikeCifMolecule(content) {
42
+ return /\bdata_[^\s]*/i.test(content) && /_atom_site\./i.test(content);
43
+ }
44
+
45
+ function looksLikeMoleculeStructure(content, format) {
46
+ switch (format) {
47
+ case 'xyz':
48
+ case 'extxyz':
49
+ return looksLikeXyzMolecule(content);
50
+ case 'pdb':
51
+ return looksLikePdbMolecule(content);
52
+ case 'cif':
53
+ return looksLikeCifMolecule(content);
54
+ default:
55
+ return false;
56
+ }
57
+ }
58
+
59
+ function pluginEnabled(pluginId) {
60
+ const enabledIds = process.env.REMOTE_CODEX_ENABLED_PLUGIN_IDS;
61
+ if (!enabledIds) {
62
+ return true;
63
+ }
64
+ return enabledIds.split(',').map((entry) => entry.trim()).filter(Boolean).includes(pluginId);
65
+ }
66
+
67
+ const server = new McpServer({
68
+ name: 'remote-codex-plugin-mcp',
69
+ title: 'Remote Codex Plugin MCP',
70
+ version: '0.1.0',
71
+ });
72
+
73
+ if (pluginEnabled(XYZ_VIEWER_PLUGIN_ID)) {
74
+ server.registerTool(
75
+ 'remote_codex_render_molecule',
76
+ {
77
+ title: 'Render 3D Molecule',
78
+ description:
79
+ 'Create a Remote Codex 3D molecule artifact from valid xyz, extxyz, cif, or pdb content. Use this when the user asks for a renderable molecular structure. Do not invent coordinates unless the user explicitly asks you to generate an example.',
80
+ inputSchema: {
81
+ title: z.string().trim().min(1).describe('Short display title for the molecule.'),
82
+ format: z.enum(['xyz', 'extxyz', 'cif', 'pdb']).describe('Molecular source format.'),
83
+ content: z.string().trim().min(1).describe('Raw molecule source text in the selected format.'),
84
+ summaryText: z.string().trim().optional().describe('Optional short summary shown in the timeline.'),
85
+ sourceDescription: z.string().trim().optional().describe('Optional note about where the coordinates came from.'),
86
+ },
87
+ },
88
+ async ({ title, format, content, summaryText, sourceDescription }) => {
89
+ if (!looksLikeMoleculeStructure(content, format)) {
90
+ return {
91
+ isError: true,
92
+ content: [
93
+ {
94
+ type: 'text',
95
+ text: `Unable to create molecule artifact: content does not look like valid ${format} data.`,
96
+ },
97
+ ],
98
+ };
99
+ }
100
+
101
+ const artifact = {
102
+ type: 'remote-codex.artifact',
103
+ artifactType: MOLECULE_ARTIFACT_TYPE,
104
+ title,
105
+ summaryText: summaryText ?? sourceDescription ?? `${format.toUpperCase()} molecule`,
106
+ payload: {
107
+ format,
108
+ content: [content],
109
+ name: title,
110
+ sourceDescription: sourceDescription ?? null,
111
+ },
112
+ };
113
+
114
+ return {
115
+ content: [
116
+ {
117
+ type: 'text',
118
+ text: [
119
+ `Created a 3D molecule artifact for ${title}.`,
120
+ '',
121
+ '```remote-codex-artifact',
122
+ JSON.stringify(artifact, null, 2),
123
+ '```',
124
+ ].join('\n'),
125
+ },
126
+ ],
127
+ structuredContent: {
128
+ pluginId: XYZ_VIEWER_PLUGIN_ID,
129
+ artifactType: MOLECULE_ARTIFACT_TYPE,
130
+ title,
131
+ format,
132
+ },
133
+ };
134
+ },
135
+ );
136
+ }
137
+
138
+ if (import.meta.url === `file://${process.argv[1]}`) {
139
+ await server.connect(new StdioServerTransport());
140
+ }
@@ -9,6 +9,8 @@ const binDir = path.dirname(fileURLToPath(import.meta.url));
9
9
  const packageRoot = path.resolve(binDir, '..');
10
10
  const packageJsonPath = path.join(packageRoot, 'package.json');
11
11
  const serviceManagerPath = path.join(packageRoot, 'scripts', 'service-manager.mjs');
12
+ const relayDistEntry = path.join(packageRoot, 'apps', 'relay-server', 'dist', 'index.js');
13
+ const relaySourceEntry = path.join(packageRoot, 'apps', 'relay-server', 'src', 'index.ts');
12
14
  const sourceCheckout =
13
15
  fs.existsSync(path.join(packageRoot, 'pnpm-workspace.yaml')) &&
14
16
  fs.existsSync(path.join(packageRoot, 'scripts', 'service-restart.mjs'));
@@ -33,30 +35,74 @@ if (command === 'version') {
33
35
  process.exit(0);
34
36
  }
35
37
 
36
- if (!['start', 'stop', 'status'].includes(command)) {
38
+ if (command === 'relay') {
39
+ runRelayServer();
40
+ } else if (!['start', 'stop', 'status'].includes(command)) {
37
41
  printHelp();
38
42
  process.exit(command ? 1 : 0);
43
+ } else {
44
+ const child = spawn(process.execPath, [serviceManagerPath, command], {
45
+ cwd: packageRoot,
46
+ env: process.env,
47
+ stdio: 'inherit',
48
+ });
49
+
50
+ child.on('exit', (code, signal) => {
51
+ if (signal) {
52
+ process.kill(process.pid, signal);
53
+ return;
54
+ }
55
+
56
+ process.exit(code ?? 1);
57
+ });
58
+
59
+ child.on('error', (error) => {
60
+ console.error(`Failed to run remote-codex ${command}: ${error.message}`);
61
+ process.exit(1);
62
+ });
39
63
  }
40
64
 
41
- const child = spawn(process.execPath, [serviceManagerPath, command], {
42
- cwd: packageRoot,
43
- env: process.env,
44
- stdio: 'inherit',
45
- });
65
+ function runRelayServer() {
66
+ const relayEntry = fs.existsSync(relayDistEntry) ? relayDistEntry : relaySourceEntry;
67
+ let commandToRun = process.execPath;
68
+ let args = [relayEntry];
46
69
 
47
- child.on('exit', (code, signal) => {
48
- if (signal) {
49
- process.kill(process.pid, signal);
50
- return;
70
+ if (!fs.existsSync(relayEntry)) {
71
+ console.error('Relay server build artifacts are missing. Run `pnpm build` before using `remote-codex relay`.');
72
+ console.error(`Missing: ${path.relative(packageRoot, relayDistEntry)}`);
73
+ process.exit(1);
51
74
  }
52
75
 
53
- process.exit(code ?? 1);
54
- });
76
+ if (relayEntry === relaySourceEntry) {
77
+ const tsxEntry = path.join(packageRoot, 'node_modules', 'tsx', 'dist', 'cli.mjs');
78
+ if (!fs.existsSync(tsxEntry)) {
79
+ console.error('Relay server build artifacts are missing and tsx is not installed for source execution.');
80
+ console.error('Run `pnpm build` or install dependencies with `pnpm install`.');
81
+ process.exit(1);
82
+ }
83
+ args = [tsxEntry, relaySourceEntry];
84
+ }
55
85
 
56
- child.on('error', (error) => {
57
- console.error(`Failed to run remote-codex ${command}: ${error.message}`);
58
- process.exit(1);
59
- });
86
+ const relay = spawn(commandToRun, args, {
87
+ cwd: packageRoot,
88
+ env: process.env,
89
+ stdio: 'inherit',
90
+ });
91
+
92
+ relay.on('exit', (code, signal) => {
93
+ if (signal) {
94
+ process.kill(process.pid, signal);
95
+ return;
96
+ }
97
+
98
+ process.exit(code ?? 1);
99
+ });
100
+
101
+ relay.on('error', (error) => {
102
+ console.error(`Failed to run remote-codex relay: ${error.message}`);
103
+ process.exit(1);
104
+ });
105
+ }
60
106
 
61
107
  function normalizeCommand(value) {
62
108
  if (!value || value === '-h' || value === '--help') {
@@ -86,6 +132,7 @@ Usage:
86
132
  remote-codex start
87
133
  remote-codex status
88
134
  remote-codex stop
135
+ remote-codex relay
89
136
 
90
137
  Environment:
91
138
  SERVICE_HOST Web listen host, default 127.0.0.1
@@ -93,5 +140,15 @@ Environment:
93
140
  SERVICE_API_HOST API listen host, default 127.0.0.1
94
141
  SERVICE_API_PORT API listen port, default ${defaultApiPort}
95
142
  REMOTE_CODEX_SERVICE_DIR Service state and log directory, default ~/.remote-codex/service
143
+
144
+ Relay:
145
+ REMOTE_CODEX_RELAY_SUPERVISOR_TOKEN Legacy bootstrap token for supervisor tunnels
146
+ REMOTE_CODEX_ADMIN_USERNAME Relay admin username
147
+ REMOTE_CODEX_ADMIN_PASSWORD Relay admin password
148
+ REMOTE_CODEX_RELAY_DATA_DIR Relay user/device store, default .local/relay-server
149
+ REMOTE_CODEX_RELAY_WEB_DIST_DIR Web dist override, defaults to packaged supervisor-web/dist
150
+ REMOTE_CODEX_RELAY_REGISTRATION_ENABLED true/false, default true
151
+ HOST Relay listen host, default 0.0.0.0
152
+ PORT Relay listen port, default 8788
96
153
  `);
97
154
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "remote-codex",
3
- "version": "0.11.1",
3
+ "version": "0.11.3",
4
4
  "description": "Local web supervisor for Codex workspaces and threads.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -12,6 +12,7 @@
12
12
  "scripts/service-manager.mjs",
13
13
  "scripts/run-web-service.mjs",
14
14
  "apps/supervisor-api/dist/",
15
+ "apps/relay-server/dist/",
15
16
  "apps/supervisor-web/dist/",
16
17
  "config/codex-model-pricing.json",
17
18
  "packages/agent-runtime/src/",
@@ -20,12 +21,16 @@
20
21
  "packages/opencode/src/",
21
22
  "packages/db/src/",
22
23
  "packages/db/migrations/*.sql",
24
+ "packages/plugin-terminal/package.json",
25
+ "packages/plugin-terminal/plugin.json",
26
+ "packages/plugin-terminal/src/",
23
27
  "packages/shared/src/",
24
28
  "README.md"
25
29
  ],
26
30
  "packageManager": "pnpm@10.11.1",
27
31
  "pnpm": {
28
32
  "onlyBuiltDependencies": [
33
+ "@homebridge/node-pty-prebuilt-multiarch",
29
34
  "better-sqlite3",
30
35
  "esbuild"
31
36
  ]
@@ -56,6 +61,7 @@
56
61
  "dependencies": {
57
62
  "@fastify/multipart": "^9.0.3",
58
63
  "@fastify/websocket": "^11.0.2",
64
+ "@homebridge/node-pty-prebuilt-multiarch": "^0.13.1",
59
65
  "@modelcontextprotocol/sdk": "^1.29.0",
60
66
  "better-sqlite3": "^12.10.0",
61
67
  "fastify": "^5.2.1",
@@ -259,6 +259,7 @@ export interface StartAgentTurnInput {
259
259
  sandboxMode?: 'read-only' | 'workspace-write' | 'danger-full-access' | null;
260
260
  workspacePath?: string | null;
261
261
  performanceMode?: 'standard' | 'fast' | null;
262
+ developerInstructions?: string | null;
262
263
  hidden?: boolean;
263
264
  displayTurnId?: string | null;
264
265
  }
@@ -14,12 +14,7 @@ import type {
14
14
  AgentRuntime,
15
15
  AgentRuntimeManagementSchema,
16
16
  AgentRuntimeStatus,
17
- InterruptAgentTurnInput,
18
- ReadAgentSessionOptions,
19
- ResumeAgentSessionInput,
20
- StartAgentSessionInput,
21
17
  StartAgentSessionResult,
22
- StartAgentTurnInput,
23
18
  } from './types';
24
19
  import { AgentRuntimeError } from './types';
25
20
 
@@ -136,26 +131,23 @@ export class UnavailableRuntimeAdapter extends EventEmitter implements AgentRunt
136
131
  return [];
137
132
  }
138
133
 
139
- async readSession(
140
- _providerSessionId: string,
141
- _options?: ReadAgentSessionOptions,
142
- ): Promise<AgentSessionDetail> {
134
+ async readSession(): Promise<AgentSessionDetail> {
143
135
  throw this.unavailableError();
144
136
  }
145
137
 
146
- async startSession(_input: StartAgentSessionInput): Promise<StartAgentSessionResult> {
138
+ async startSession(): Promise<StartAgentSessionResult> {
147
139
  throw this.unavailableError();
148
140
  }
149
141
 
150
- async resumeSession(_input: ResumeAgentSessionInput): Promise<StartAgentSessionResult> {
142
+ async resumeSession(): Promise<StartAgentSessionResult> {
151
143
  throw this.unavailableError();
152
144
  }
153
145
 
154
- async startTurn(_input: StartAgentTurnInput): Promise<AgentTurn> {
146
+ async startTurn(): Promise<AgentTurn> {
155
147
  throw this.unavailableError();
156
148
  }
157
149
 
158
- async interruptTurn(_input: InterruptAgentTurnInput): Promise<AgentTurn | null> {
150
+ async interruptTurn(): Promise<AgentTurn | null> {
159
151
  throw this.unavailableError();
160
152
  }
161
153
 
@@ -44,7 +44,6 @@ import {
44
44
  hiddenInitPrompt,
45
45
  isHiddenContinuationMessage,
46
46
  isHiddenInitMessage,
47
- messageContentText,
48
47
  partialReasoningDelta,
49
48
  partialTextDelta,
50
49
  resultForToolUse,
@@ -172,11 +171,11 @@ interface ClaudeQueryOptions {
172
171
  allowDangerouslySkipPermissions?: boolean;
173
172
  pathToClaudeCodeExecutable?: string;
174
173
  }
175
- interface GetSessionInfoOptions {}
174
+ type GetSessionInfoOptions = Record<string, never>;
176
175
  interface GetSessionMessagesOptions {
177
176
  includeSystemMessages?: boolean;
178
177
  }
179
- interface ListSessionsOptions {}
178
+ type ListSessionsOptions = Record<string, never>;
180
179
  interface McpServerStatus {
181
180
  name: string;
182
181
  status: string;
@@ -1471,8 +1470,9 @@ export class ClaudeRuntimeAdapter extends EventEmitter implements AgentRuntime {
1471
1470
 
1472
1471
  mapProviderRequest(
1473
1472
  request: AgentProviderRequest,
1474
- _options: { approvalMode: 'yolo' | 'guarded' },
1473
+ options: { approvalMode: 'yolo' | 'guarded' },
1475
1474
  ): AgentProviderRequestMapping | null {
1475
+ void options;
1476
1476
  return mapClaudeAskUserQuestionRequest(request);
1477
1477
  }
1478
1478
 
@@ -1483,7 +1483,9 @@ export class ClaudeRuntimeAdapter extends EventEmitter implements AgentRuntime {
1483
1483
  return buildClaudeProviderRequestResponse(pending, input);
1484
1484
  }
1485
1485
 
1486
- respondToProviderRequest(_id: string | number, _result: unknown) {
1486
+ respondToProviderRequest(id: string | number, result: unknown) {
1487
+ void id;
1488
+ void result;
1487
1489
  // Claude Code's built-in AskUserQuestion arrives as transcripted tool use in
1488
1490
  // this SDK mode. The supervisor records the user's answer locally so the
1489
1491
  // interaction matches other backends, but there is no live JSON-RPC request
@@ -463,13 +463,13 @@ export class CodexAppServerManager extends EventEmitter {
463
463
  input.serviceTier === undefined ? undefined : input.serviceTier,
464
464
  effort: input.effort ?? null,
465
465
  sandboxPolicy: input.sandboxPolicy ?? null,
466
- collaborationMode: input.collaborationMode
466
+ collaborationMode: input.collaborationMode || input.developerInstructions
467
467
  ? {
468
- mode: input.collaborationMode,
468
+ mode: input.collaborationMode ?? 'default',
469
469
  settings: {
470
470
  model: input.model ?? '',
471
471
  reasoning_effort: input.effort ?? null,
472
- developer_instructions: null
472
+ developer_instructions: input.developerInstructions ?? null
473
473
  }
474
474
  }
475
475
  : null
@@ -30,9 +30,7 @@ describe('codex history item persistence policy', () => {
30
30
  text: 'Streaming draft',
31
31
  });
32
32
 
33
- expect(shouldPersistRuntimeFinalHistoryItem(transientMessage, [transientMessage])).toBe(
34
- false,
35
- );
33
+ expect(shouldPersistRuntimeFinalHistoryItem(transientMessage)).toBe(false);
36
34
  });
37
35
 
38
36
  it('hides transient streamed assistant text once a final assistant message exists', () => {
@@ -54,7 +52,7 @@ describe('codex history item persistence policy', () => {
54
52
  error: null,
55
53
  items: [transientMessage, finalMessage],
56
54
  }).items,
57
- ).toEqual([finalMessage]);
55
+ ).toEqual([{ ...finalMessage, transcriptOrder: 0 }]);
58
56
  });
59
57
 
60
58
  it('maps Codex collab agent tool calls to dedicated agent tool call items', () => {
@@ -435,7 +435,6 @@ export function shouldPersistFinalHistoryItem(item: ThreadHistoryItemDto) {
435
435
 
436
436
  export function shouldPersistRuntimeFinalHistoryItem(
437
437
  item: ThreadHistoryItemDto,
438
- allItems: ThreadHistoryItemDto[],
439
438
  ) {
440
439
  if (item.kind === 'agentMessage' && isTransientAgentHistoryItem(item)) {
441
440
  return false;
@@ -485,18 +484,7 @@ function historyItemSequence(item: ThreadHistoryItemDto) {
485
484
  }
486
485
 
487
486
  export function sortHistoryItemsBySequence<T extends ThreadHistoryItemDto>(items: T[]): T[] {
488
- if (!items.some(hasHistoryItemSequence)) {
489
- return items;
490
- }
491
-
492
- return items
493
- .map((item, index) => ({ item, index }))
494
- .sort((left, right) => {
495
- const sequenceDelta =
496
- historyItemSequence(left.item) - historyItemSequence(right.item);
497
- return sequenceDelta === 0 ? left.index - right.index : sequenceDelta;
498
- })
499
- .map((entry) => entry.item);
487
+ return sortTurnItemsByRecordedSequence(items) as T[];
500
488
  }
501
489
 
502
490
  function sortTurnItemsByRecordedSequence(items: ThreadHistoryItemDto[]) {
@@ -636,12 +624,15 @@ function copyPersistedSequence(
636
624
  item: ThreadHistoryItemDto,
637
625
  persistedItem: ThreadHistoryItemDto,
638
626
  ) {
639
- if (!hasHistoryItemSequence(persistedItem)) {
640
- return item;
627
+ let nextItem = item;
628
+ if (hasHistoryItemSequence(persistedItem)) {
629
+ const sequence = historyItemSequence(persistedItem);
630
+ if (nextItem.sequence !== sequence) {
631
+ nextItem = { ...nextItem, sequence };
632
+ }
641
633
  }
642
634
 
643
- const sequence = historyItemSequence(persistedItem);
644
- return item.sequence === sequence ? item : { ...item, sequence };
635
+ return nextItem;
645
636
  }
646
637
 
647
638
  function shouldAppendPersistedMissingItem(
@@ -1336,7 +1327,11 @@ export function agentTurnToThreadTurnDto(
1336
1327
  startedAt: turn.startedAt ?? parseUuidV7Timestamp(turn.providerTurnId),
1337
1328
  status: turn.status,
1338
1329
  error: turn.error?.message ?? null,
1339
- items: visibleRuntimeTurnItems(turn.items),
1330
+ items: visibleRuntimeTurnItems(turn.items).map((item, transcriptIndex) =>
1331
+ item.transcriptOrder === transcriptIndex
1332
+ ? item
1333
+ : { ...item, transcriptOrder: transcriptIndex },
1334
+ ),
1340
1335
  };
1341
1336
 
1342
1337
  return deferredDetails ? deferLargeHistoryItemDetails(baseTurn, deferredDetails) : baseTurn;
@@ -27,11 +27,6 @@ export function unwrapCodexJsonRpcError(error: unknown): JsonRpcClientError | nu
27
27
  return null;
28
28
  }
29
29
 
30
- function isCodexRemoteError(error: unknown) {
31
- const codexError = unwrapCodexJsonRpcError(error);
32
- return codexError?.code === 'remote_error' ? codexError : null;
33
- }
34
-
35
30
  export function isCodexRuntimeRequestError(error: unknown) {
36
31
  return Boolean(unwrapCodexJsonRpcError(error)) || isRuntimeRequestError(error);
37
32
  }
@@ -667,6 +667,9 @@ export class CodexRuntimeAdapter extends EventEmitter implements AgentRuntime {
667
667
  if (input.collaborationMode !== undefined) {
668
668
  turnInput.collaborationMode = input.collaborationMode;
669
669
  }
670
+ if (input.developerInstructions !== undefined) {
671
+ turnInput.developerInstructions = input.developerInstructions;
672
+ }
670
673
  const sandboxPolicy = buildSandboxPolicy(input.sandboxMode, input.workspacePath);
671
674
  if (sandboxPolicy !== undefined) {
672
675
  turnInput.sandboxPolicy = sandboxPolicy;
@@ -322,6 +322,7 @@ export interface TurnStartInput {
322
322
  collaborationMode?: CollaborationModeKind | null;
323
323
  sandboxPolicy?: SandboxPolicy | null;
324
324
  serviceTier?: ServiceTier | null;
325
+ developerInstructions?: string | null;
325
326
  }
326
327
 
327
328
  export interface TurnSteerInput {
@@ -0,0 +1 @@
1
+ ALTER TABLE shell_sessions ADD COLUMN label TEXT;
@@ -124,12 +124,14 @@ export interface UpsertThreadGoalRecordInput {
124
124
  export interface CreateShellSessionRecordInput {
125
125
  workspaceId: string;
126
126
  threadId: string | null;
127
+ label?: string | null;
127
128
  tmuxSessionName: string;
128
129
  cwd: string;
129
130
  status: string;
130
131
  }
131
132
 
132
133
  export interface UpdateShellSessionRecordInput {
134
+ label?: string | null;
133
135
  tmuxSessionName?: string;
134
136
  cwd?: string;
135
137
  status?: string;
@@ -809,6 +811,15 @@ export function getShellSessionRecordByThreadId(db: DatabaseClient, threadId: st
809
811
  return db.select().from(shellSessions).where(eq(shellSessions.threadId, threadId)).get();
810
812
  }
811
813
 
814
+ export function listShellSessionRecordsByThreadId(db: DatabaseClient, threadId: string) {
815
+ return db
816
+ .select()
817
+ .from(shellSessions)
818
+ .where(eq(shellSessions.threadId, threadId))
819
+ .orderBy(desc(shellSessions.lastActivityAt), desc(shellSessions.createdAt))
820
+ .all();
821
+ }
822
+
812
823
  export function createShellSessionRecord(
813
824
  db: DatabaseClient,
814
825
  input: CreateShellSessionRecordInput,
@@ -818,6 +829,7 @@ export function createShellSessionRecord(
818
829
  id: randomUUID(),
819
830
  workspaceId: input.workspaceId,
820
831
  threadId: input.threadId,
832
+ label: input.label ?? null,
821
833
  tmuxSessionName: input.tmuxSessionName,
822
834
  cwd: input.cwd,
823
835
  status: input.status,
@@ -51,6 +51,7 @@ export const shellSessions = sqliteTable('shell_sessions', {
51
51
  id: text('id').primaryKey(),
52
52
  workspaceId: text('workspace_id').notNull(),
53
53
  threadId: text('thread_id'),
54
+ label: text('label'),
54
55
  tmuxSessionName: text('tmux_session_name'),
55
56
  cwd: text('cwd').notNull(),
56
57
  status: text('status'),
@@ -266,23 +266,6 @@ function fileChangeStatsFromMetadata(metadata: unknown) {
266
266
  };
267
267
  }
268
268
 
269
- function todoSummary(input: unknown, output: string | null) {
270
- const todos = isRecord(input) && Array.isArray(input.todos)
271
- ? input.todos
272
- : null;
273
- if (!todos) {
274
- return output ?? toolSummary(input);
275
- }
276
- const counts = new Map<string, number>();
277
- todos.forEach((todo) => {
278
- const status = isRecord(todo) ? stringValue(todo.status) ?? 'unknown' : 'unknown';
279
- counts.set(status, (counts.get(status) ?? 0) + 1);
280
- });
281
- return Array.from(counts.entries())
282
- .map(([status, count]) => `${count} ${status}`)
283
- .join(', ');
284
- }
285
-
286
269
  function todoRecordsFromValue(value: unknown): unknown[] | null {
287
270
  if (Array.isArray(value)) {
288
271
  return value;
@@ -0,0 +1,17 @@
1
+ {
2
+ "name": "@remote-codex/plugin-terminal",
3
+ "private": true,
4
+ "version": "0.1.0",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "scripts": {
9
+ "build": "tsup src/index.ts --format esm --dts",
10
+ "lint": "eslint src --ext .ts",
11
+ "typecheck": "tsc -p tsconfig.json --noEmit"
12
+ },
13
+ "devDependencies": {
14
+ "tsup": "^8.4.0",
15
+ "typescript": "^5.8.3"
16
+ }
17
+ }
@@ -0,0 +1,25 @@
1
+ {
2
+ "id": "remote-codex.terminal",
3
+ "name": "Terminal",
4
+ "version": "0.1.0",
5
+ "description": "Built-in durable terminal panel backed by the supervisor PTY host.",
6
+ "remoteCodex": "^0.11.0",
7
+ "capabilities": {
8
+ "artifactTypes": [],
9
+ "timelineRenderers": [],
10
+ "threadPanels": [
11
+ {
12
+ "id": "terminal",
13
+ "label": "Terminal",
14
+ "kind": "terminal",
15
+ "artifactTypes": []
16
+ }
17
+ ],
18
+ "frontend": {
19
+ "entry": "./dist/index.js"
20
+ },
21
+ "backend": {
22
+ "entry": "./dist/backend.js"
23
+ }
24
+ }
25
+ }
@@ -0,0 +1,2 @@
1
+ export { TERMINAL_PLUGIN_ID, terminalPluginManifest } from './manifest';
2
+ export type { TerminalPluginManifest } from './manifest';