remote-codex 0.11.9 → 0.11.11
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.
- package/apps/relay-server/dist/index.js +75 -6
- package/apps/supervisor-api/dist/{chunk-NWZLUCQV.js → chunk-2QAVWDYV.js} +1137 -349
- package/apps/supervisor-api/dist/index.js +1 -1
- package/apps/supervisor-api/dist/worker-index.js +1 -1
- package/apps/supervisor-web/dist/assets/core-oEok_Crl.js +12 -0
- package/apps/supervisor-web/dist/assets/{css-DPfMkruS.js → css-CLj8gQPS.js} +1 -1
- package/apps/supervisor-web/dist/assets/engine-javascript-DBd1bXLz.js +141 -0
- package/apps/supervisor-web/dist/assets/graph-vendor-C5ap-Sga.css +1 -0
- package/apps/supervisor-web/dist/assets/graph-vendor-DVPtkh3h.js +23 -0
- package/apps/supervisor-web/dist/assets/{html-GMplVEZG.js → html-pp8916En.js} +1 -1
- package/apps/supervisor-web/dist/assets/index-Cp9GkemI.css +1 -0
- package/apps/supervisor-web/dist/assets/index-Dsq8QmDr.js +6 -0
- package/apps/supervisor-web/dist/assets/markdown-vendor-BQJfKm05.js +291 -0
- package/apps/supervisor-web/dist/assets/react-vendor-CgLzZcV4.js +60 -0
- package/apps/supervisor-web/dist/assets/{shellscript-Yzrsuije.js → shellscript-CEILq0vU.js} +1 -1
- package/apps/supervisor-web/dist/assets/{sql-BLtJtn59.js → sql-CRqJ_cUM.js} +1 -1
- package/apps/supervisor-web/dist/assets/{terminal-vendor-BHwWZ4Dd.js → terminal-vendor-B365Go3Z.js} +1 -1
- package/apps/supervisor-web/dist/assets/thread-ui-DldLSgqC.js +3604 -0
- package/apps/supervisor-web/dist/assets/ui-vendor-CeKGesq3.js +50 -0
- package/apps/supervisor-web/dist/index.html +9 -8
- package/package.json +2 -2
- package/packages/agent-runtime/src/types.ts +1 -0
- package/packages/codex/src/appServerManager.test.ts +52 -0
- package/packages/codex/src/appServerManager.ts +12 -14
- package/packages/codex/src/historyItems.test.ts +33 -0
- package/packages/codex/src/historyItems.ts +49 -2
- package/packages/codex/src/runtimeAdapter.test.ts +76 -0
- package/packages/codex/src/runtimeAdapter.ts +72 -2
- package/packages/codex/src/types.ts +13 -0
- package/packages/shared/src/index.ts +3 -0
- package/apps/supervisor-api/dist/chunk-2ELO2EVR.js +0 -27897
- package/apps/supervisor-api/dist/chunk-XKQPZVOC.js +0 -27890
- package/apps/supervisor-web/dist/assets/abap-BdImnpbu.js +0 -1
- package/apps/supervisor-web/dist/assets/actionscript-3-CoDkCxhg.js +0 -1
- package/apps/supervisor-web/dist/assets/ada-bCR0ucgS.js +0 -1
- package/apps/supervisor-web/dist/assets/andromeeda-C4gqWexZ.js +0 -1
- package/apps/supervisor-web/dist/assets/angular-html-CU67Zn6k.js +0 -1
- package/apps/supervisor-web/dist/assets/angular-ts-BwZT4LLn.js +0 -1
- package/apps/supervisor-web/dist/assets/apache-Pmp26Uib.js +0 -1
- package/apps/supervisor-web/dist/assets/apex-D8_7TLub.js +0 -1
- package/apps/supervisor-web/dist/assets/apl-dKokRX4l.js +0 -1
- package/apps/supervisor-web/dist/assets/applescript-Co6uUVPk.js +0 -1
- package/apps/supervisor-web/dist/assets/ara-BRHolxvo.js +0 -1
- package/apps/supervisor-web/dist/assets/asciidoc-Ve4PFQV2.js +0 -1
- package/apps/supervisor-web/dist/assets/asm-D_Q5rh1f.js +0 -1
- package/apps/supervisor-web/dist/assets/astro-CbQHKStN.js +0 -1
- package/apps/supervisor-web/dist/assets/aurora-x-D-2ljcwZ.js +0 -1
- package/apps/supervisor-web/dist/assets/awk-DMzUqQB5.js +0 -1
- package/apps/supervisor-web/dist/assets/ayu-mirage-32ctXXKs.js +0 -1
- package/apps/supervisor-web/dist/assets/ballerina-BFfxhgS-.js +0 -1
- package/apps/supervisor-web/dist/assets/bat-BkioyH1T.js +0 -1
- package/apps/supervisor-web/dist/assets/beancount-k_qm7-4y.js +0 -1
- package/apps/supervisor-web/dist/assets/berry-uYugtg8r.js +0 -1
- package/apps/supervisor-web/dist/assets/bibtex-CHM0blh-.js +0 -1
- package/apps/supervisor-web/dist/assets/bicep-Bmn6On1c.js +0 -1
- package/apps/supervisor-web/dist/assets/bird2-DPOp833l.js +0 -1
- package/apps/supervisor-web/dist/assets/blade-D4QpJJKB.js +0 -1
- package/apps/supervisor-web/dist/assets/bsl-BO_Y6i37.js +0 -1
- package/apps/supervisor-web/dist/assets/c-BIGW1oBm.js +0 -1
- package/apps/supervisor-web/dist/assets/c3-eo99z4R2.js +0 -1
- package/apps/supervisor-web/dist/assets/cadence-Bv_4Rxtq.js +0 -1
- package/apps/supervisor-web/dist/assets/cairo-KRGpt6FW.js +0 -1
- package/apps/supervisor-web/dist/assets/catppuccin-frappe-DFWUc33u.js +0 -1
- package/apps/supervisor-web/dist/assets/catppuccin-latte-C9dUb6Cb.js +0 -1
- package/apps/supervisor-web/dist/assets/catppuccin-macchiato-DQyhUUbL.js +0 -1
- package/apps/supervisor-web/dist/assets/catppuccin-mocha-D87Tk5Gz.js +0 -1
- package/apps/supervisor-web/dist/assets/clarity-D53aC0YG.js +0 -1
- package/apps/supervisor-web/dist/assets/clojure-P80f7IUj.js +0 -1
- package/apps/supervisor-web/dist/assets/cmake-D1j8_8rp.js +0 -1
- package/apps/supervisor-web/dist/assets/cobol-nwyudZeR.js +0 -1
- package/apps/supervisor-web/dist/assets/codeowners-Bp6g37R7.js +0 -1
- package/apps/supervisor-web/dist/assets/codeql-DsOJ9woJ.js +0 -1
- package/apps/supervisor-web/dist/assets/coffee-Ch7k5sss.js +0 -1
- package/apps/supervisor-web/dist/assets/common-lisp-Cg-RD9OK.js +0 -1
- package/apps/supervisor-web/dist/assets/coq-DkFqJrB1.js +0 -1
- package/apps/supervisor-web/dist/assets/cpp-CofmeUqb.js +0 -1
- package/apps/supervisor-web/dist/assets/crystal-tKQVLTB8.js +0 -1
- package/apps/supervisor-web/dist/assets/csharp-COcwbKMJ.js +0 -1
- package/apps/supervisor-web/dist/assets/cue-D82EKSYY.js +0 -1
- package/apps/supervisor-web/dist/assets/cypher-COkxafJQ.js +0 -1
- package/apps/supervisor-web/dist/assets/d-85-TOEBH.js +0 -1
- package/apps/supervisor-web/dist/assets/dark-plus-C3mMm8J8.js +0 -1
- package/apps/supervisor-web/dist/assets/dart-CF10PKvl.js +0 -1
- package/apps/supervisor-web/dist/assets/dax-CEL-wOlO.js +0 -1
- package/apps/supervisor-web/dist/assets/desktop-BmXAJ9_W.js +0 -1
- package/apps/supervisor-web/dist/assets/diff-D97Zzqfu.js +0 -1
- package/apps/supervisor-web/dist/assets/docker-BcOcwvcX.js +0 -1
- package/apps/supervisor-web/dist/assets/dotenv-Da5cRb03.js +0 -1
- package/apps/supervisor-web/dist/assets/dracula-BzJJZx-M.js +0 -1
- package/apps/supervisor-web/dist/assets/dracula-soft-BXkSAIEj.js +0 -1
- package/apps/supervisor-web/dist/assets/dream-maker-BtqSS_iP.js +0 -1
- package/apps/supervisor-web/dist/assets/edge-BkV0erSs.js +0 -1
- package/apps/supervisor-web/dist/assets/elixir-CDX3lj18.js +0 -1
- package/apps/supervisor-web/dist/assets/elm-DbKCFpqz.js +0 -1
- package/apps/supervisor-web/dist/assets/emacs-lisp-C9XAeP06.js +0 -1
- package/apps/supervisor-web/dist/assets/erb-B12qg9BL.js +0 -1
- package/apps/supervisor-web/dist/assets/erlang-DsQrWhSR.js +0 -1
- package/apps/supervisor-web/dist/assets/everforest-dark-BgDCqdQA.js +0 -1
- package/apps/supervisor-web/dist/assets/everforest-light-C8M2exoo.js +0 -1
- package/apps/supervisor-web/dist/assets/fennel-BYunw83y.js +0 -1
- package/apps/supervisor-web/dist/assets/fish-BvzEVeQv.js +0 -1
- package/apps/supervisor-web/dist/assets/fluent-C4IJs8-o.js +0 -1
- package/apps/supervisor-web/dist/assets/fortran-fixed-form-CkoXwp7k.js +0 -1
- package/apps/supervisor-web/dist/assets/fortran-free-form-BxgE0vQu.js +0 -1
- package/apps/supervisor-web/dist/assets/fsharp-CXgrBDvD.js +0 -1
- package/apps/supervisor-web/dist/assets/gdresource-BOOCDP_w.js +0 -1
- package/apps/supervisor-web/dist/assets/gdscript-C5YyOfLZ.js +0 -1
- package/apps/supervisor-web/dist/assets/gdshader-DkwncUOv.js +0 -1
- package/apps/supervisor-web/dist/assets/genie-D0YGMca9.js +0 -1
- package/apps/supervisor-web/dist/assets/gherkin-DyxjwDmM.js +0 -1
- package/apps/supervisor-web/dist/assets/git-commit-F4YmCXRG.js +0 -1
- package/apps/supervisor-web/dist/assets/git-rebase-r7XF79zn.js +0 -1
- package/apps/supervisor-web/dist/assets/github-dark-DHJKELXO.js +0 -1
- package/apps/supervisor-web/dist/assets/github-dark-default-Cuk6v7N8.js +0 -1
- package/apps/supervisor-web/dist/assets/github-dark-dimmed-DH5Ifo-i.js +0 -1
- package/apps/supervisor-web/dist/assets/github-dark-high-contrast-E3gJ1_iC.js +0 -1
- package/apps/supervisor-web/dist/assets/github-light-DAi9KRSo.js +0 -1
- package/apps/supervisor-web/dist/assets/github-light-default-D7oLnXFd.js +0 -1
- package/apps/supervisor-web/dist/assets/github-light-high-contrast-BfjtVDDH.js +0 -1
- package/apps/supervisor-web/dist/assets/gleam-BspZqrRM.js +0 -1
- package/apps/supervisor-web/dist/assets/glimmer-js-Rg0-pVw9.js +0 -1
- package/apps/supervisor-web/dist/assets/glimmer-ts-U6CK756n.js +0 -1
- package/apps/supervisor-web/dist/assets/glsl-DplSGwfg.js +0 -1
- package/apps/supervisor-web/dist/assets/gn-n2N0HUVH.js +0 -1
- package/apps/supervisor-web/dist/assets/gnuplot-DdkO51Og.js +0 -1
- package/apps/supervisor-web/dist/assets/go-CxLEBnE3.js +0 -1
- package/apps/supervisor-web/dist/assets/graphql-ChdNCCLP.js +0 -1
- package/apps/supervisor-web/dist/assets/groovy-gcz8RCvz.js +0 -1
- package/apps/supervisor-web/dist/assets/gruvbox-dark-hard-CFHQjOhq.js +0 -1
- package/apps/supervisor-web/dist/assets/gruvbox-dark-medium-GsRaNv29.js +0 -1
- package/apps/supervisor-web/dist/assets/gruvbox-dark-soft-CVdnzihN.js +0 -1
- package/apps/supervisor-web/dist/assets/gruvbox-light-hard-CH1njM8p.js +0 -1
- package/apps/supervisor-web/dist/assets/gruvbox-light-medium-DRw_LuNl.js +0 -1
- package/apps/supervisor-web/dist/assets/gruvbox-light-soft-hJgmCMqR.js +0 -1
- package/apps/supervisor-web/dist/assets/hack-CaT9iCJl.js +0 -1
- package/apps/supervisor-web/dist/assets/haml-B8DHNrY2.js +0 -1
- package/apps/supervisor-web/dist/assets/handlebars-BL8al0AC.js +0 -1
- package/apps/supervisor-web/dist/assets/haskell-Df6bDoY_.js +0 -1
- package/apps/supervisor-web/dist/assets/haxe-CzTSHFRz.js +0 -1
- package/apps/supervisor-web/dist/assets/hcl-BWvSN4gD.js +0 -1
- package/apps/supervisor-web/dist/assets/highlighted-body-OFNGDK62-BRQR8o0F.js +0 -1
- package/apps/supervisor-web/dist/assets/hjson-D5-asLiD.js +0 -1
- package/apps/supervisor-web/dist/assets/hlsl-D3lLCCz7.js +0 -1
- package/apps/supervisor-web/dist/assets/horizon-BUw7H-hv.js +0 -1
- package/apps/supervisor-web/dist/assets/horizon-bright-Cn-bp-IR.js +0 -1
- package/apps/supervisor-web/dist/assets/houston-DnULxvSX.js +0 -1
- package/apps/supervisor-web/dist/assets/html-derivative-BFtXZ54Q.js +0 -1
- package/apps/supervisor-web/dist/assets/http-jrhK8wxY.js +0 -1
- package/apps/supervisor-web/dist/assets/hurl-irOxFIW8.js +0 -1
- package/apps/supervisor-web/dist/assets/hxml-Bvhsp5Yf.js +0 -1
- package/apps/supervisor-web/dist/assets/hy-DFXneXwc.js +0 -1
- package/apps/supervisor-web/dist/assets/imba-DGztddWO.js +0 -1
- package/apps/supervisor-web/dist/assets/index-APXuQABa.js +0 -5
- package/apps/supervisor-web/dist/assets/index-Dh2-KXLR.css +0 -1
- package/apps/supervisor-web/dist/assets/ini-BEwlwnbL.js +0 -1
- package/apps/supervisor-web/dist/assets/java-CylS5w8V.js +0 -1
- package/apps/supervisor-web/dist/assets/jinja-4LBKfQ-Z.js +0 -1
- package/apps/supervisor-web/dist/assets/jison-wvAkD_A8.js +0 -1
- package/apps/supervisor-web/dist/assets/json5-C9tS-k6U.js +0 -1
- package/apps/supervisor-web/dist/assets/jsonc-Des-eS-w.js +0 -1
- package/apps/supervisor-web/dist/assets/jsonl-DcaNXYhu.js +0 -1
- package/apps/supervisor-web/dist/assets/jsonnet-DFQXde-d.js +0 -1
- package/apps/supervisor-web/dist/assets/jssm-C2t-YnRu.js +0 -1
- package/apps/supervisor-web/dist/assets/julia-CxzCAyBv.js +0 -1
- package/apps/supervisor-web/dist/assets/just-Cw27pwNe.js +0 -1
- package/apps/supervisor-web/dist/assets/kanagawa-dragon-CkXjmgJE.js +0 -1
- package/apps/supervisor-web/dist/assets/kanagawa-lotus-CfQXZHmo.js +0 -1
- package/apps/supervisor-web/dist/assets/kanagawa-wave-DWedfzmr.js +0 -1
- package/apps/supervisor-web/dist/assets/kdl-DV7GczEv.js +0 -1
- package/apps/supervisor-web/dist/assets/kotlin-BdnUsdx6.js +0 -1
- package/apps/supervisor-web/dist/assets/kusto-DZf3V79B.js +0 -1
- package/apps/supervisor-web/dist/assets/laserwave-DUszq2jm.js +0 -1
- package/apps/supervisor-web/dist/assets/latex-CWtU0Tv5.js +0 -1
- package/apps/supervisor-web/dist/assets/lean-BZvkOJ9d.js +0 -1
- package/apps/supervisor-web/dist/assets/less-B1dDrJ26.js +0 -1
- package/apps/supervisor-web/dist/assets/light-plus-B7mTdjB0.js +0 -1
- package/apps/supervisor-web/dist/assets/liquid-DYVedYrR.js +0 -1
- package/apps/supervisor-web/dist/assets/llvm-DjAJT7YJ.js +0 -1
- package/apps/supervisor-web/dist/assets/log-2UxHyX5q.js +0 -1
- package/apps/supervisor-web/dist/assets/logo-BtOb2qkB.js +0 -1
- package/apps/supervisor-web/dist/assets/lua-BaeVxFsk.js +0 -1
- package/apps/supervisor-web/dist/assets/luau-C-HG3fhB.js +0 -1
- package/apps/supervisor-web/dist/assets/make-CHLpvVh8.js +0 -1
- package/apps/supervisor-web/dist/assets/markdown-vendor-C22AWDSP.js +0 -29
- package/apps/supervisor-web/dist/assets/marko-CnJfTvn9.js +0 -1
- package/apps/supervisor-web/dist/assets/material-theme-D5KoaKCx.js +0 -1
- package/apps/supervisor-web/dist/assets/material-theme-darker-BfHTSMKl.js +0 -1
- package/apps/supervisor-web/dist/assets/material-theme-lighter-B0m2ddpp.js +0 -1
- package/apps/supervisor-web/dist/assets/material-theme-ocean-CyktbL80.js +0 -1
- package/apps/supervisor-web/dist/assets/material-theme-palenight-Csfq5Kiy.js +0 -1
- package/apps/supervisor-web/dist/assets/matlab-D7o27uSR.js +0 -1
- package/apps/supervisor-web/dist/assets/mdc-BMNejdWA.js +0 -1
- package/apps/supervisor-web/dist/assets/mdx-Cmh6b_Ma.js +0 -1
- package/apps/supervisor-web/dist/assets/mermaid-mWjccvbQ.js +0 -1
- package/apps/supervisor-web/dist/assets/min-dark-CafNBF8u.js +0 -1
- package/apps/supervisor-web/dist/assets/min-light-CTRr51gU.js +0 -1
- package/apps/supervisor-web/dist/assets/mipsasm-CKIfxQSi.js +0 -1
- package/apps/supervisor-web/dist/assets/mojo-rZm6bMo-.js +0 -1
- package/apps/supervisor-web/dist/assets/monokai-D4h5O-jR.js +0 -1
- package/apps/supervisor-web/dist/assets/moonbit-_H4v1dQx.js +0 -1
- package/apps/supervisor-web/dist/assets/move-IF9eRakj.js +0 -1
- package/apps/supervisor-web/dist/assets/narrat-DRg8JJMk.js +0 -1
- package/apps/supervisor-web/dist/assets/nextflow-Zz6hmt5N.js +0 -1
- package/apps/supervisor-web/dist/assets/nextflow-groovy-BeH2EWoN.js +0 -1
- package/apps/supervisor-web/dist/assets/nginx-BpAMiNFr.js +0 -1
- package/apps/supervisor-web/dist/assets/night-owl-C39BiMTA.js +0 -1
- package/apps/supervisor-web/dist/assets/night-owl-light-CMTm3GFP.js +0 -1
- package/apps/supervisor-web/dist/assets/nim-CVrawwO9.js +0 -1
- package/apps/supervisor-web/dist/assets/nix-CwoSXNpI.js +0 -1
- package/apps/supervisor-web/dist/assets/nord-Ddv68eIx.js +0 -1
- package/apps/supervisor-web/dist/assets/nushell-Cz2AlsmD.js +0 -1
- package/apps/supervisor-web/dist/assets/objective-c-DXmwc3jG.js +0 -1
- package/apps/supervisor-web/dist/assets/objective-cpp-CLxacb5B.js +0 -1
- package/apps/supervisor-web/dist/assets/ocaml-C0hk2d4L.js +0 -1
- package/apps/supervisor-web/dist/assets/odin-BBf5iR-q.js +0 -1
- package/apps/supervisor-web/dist/assets/one-dark-pro-DVMEJ2y_.js +0 -1
- package/apps/supervisor-web/dist/assets/one-light-C3Wv6jpd.js +0 -1
- package/apps/supervisor-web/dist/assets/openscad-C4EeE6gA.js +0 -1
- package/apps/supervisor-web/dist/assets/pascal-D93ZcfNL.js +0 -1
- package/apps/supervisor-web/dist/assets/perl-C0TMdlhV.js +0 -1
- package/apps/supervisor-web/dist/assets/php-Dhbhpdrm.js +0 -1
- package/apps/supervisor-web/dist/assets/pkl-u5AG7uiY.js +0 -1
- package/apps/supervisor-web/dist/assets/plastic-3e1v2bzS.js +0 -1
- package/apps/supervisor-web/dist/assets/plsql-ChMvpjG-.js +0 -1
- package/apps/supervisor-web/dist/assets/po-BTJTHyun.js +0 -1
- package/apps/supervisor-web/dist/assets/poimandres-CS3Unz2-.js +0 -1
- package/apps/supervisor-web/dist/assets/polar-C0HS_06l.js +0 -1
- package/apps/supervisor-web/dist/assets/postcss-CXtECtnM.js +0 -1
- package/apps/supervisor-web/dist/assets/powerquery-CEu0bR-o.js +0 -1
- package/apps/supervisor-web/dist/assets/powershell-Dpen1YoG.js +0 -1
- package/apps/supervisor-web/dist/assets/prisma-Dd19v3D-.js +0 -1
- package/apps/supervisor-web/dist/assets/prolog-CbFg5uaA.js +0 -1
- package/apps/supervisor-web/dist/assets/proto-C7zT0LnQ.js +0 -1
- package/apps/supervisor-web/dist/assets/pug-CGlum2m_.js +0 -1
- package/apps/supervisor-web/dist/assets/puppet-BMWR74SV.js +0 -1
- package/apps/supervisor-web/dist/assets/purescript-CklMAg4u.js +0 -1
- package/apps/supervisor-web/dist/assets/qml-3beO22l8.js +0 -1
- package/apps/supervisor-web/dist/assets/qmldir-C8lEn-DE.js +0 -1
- package/apps/supervisor-web/dist/assets/qss-IeuSbFQv.js +0 -1
- package/apps/supervisor-web/dist/assets/r-Dspwwk_N.js +0 -1
- package/apps/supervisor-web/dist/assets/racket-BqYA7rlc.js +0 -1
- package/apps/supervisor-web/dist/assets/raku-DXvB9xmW.js +0 -1
- package/apps/supervisor-web/dist/assets/razor-Uh8Bk_45.js +0 -1
- package/apps/supervisor-web/dist/assets/react-vendor-5VdTO_Bg.js +0 -60
- package/apps/supervisor-web/dist/assets/red-bN70gL4F.js +0 -1
- package/apps/supervisor-web/dist/assets/reg-C-SQnVFl.js +0 -1
- package/apps/supervisor-web/dist/assets/regexp-CDVJQ6XC.js +0 -1
- package/apps/supervisor-web/dist/assets/rel-C3B-1QV4.js +0 -1
- package/apps/supervisor-web/dist/assets/riscv-BM1_JUlF.js +0 -1
- package/apps/supervisor-web/dist/assets/ron-D8l8udqQ.js +0 -1
- package/apps/supervisor-web/dist/assets/rose-pine-dawn-DHQR4-dF.js +0 -1
- package/apps/supervisor-web/dist/assets/rose-pine-moon-D4_iv3hh.js +0 -1
- package/apps/supervisor-web/dist/assets/rose-pine-qdsjHGoJ.js +0 -1
- package/apps/supervisor-web/dist/assets/rosmsg-BJDFO7_C.js +0 -1
- package/apps/supervisor-web/dist/assets/rst-BrH8l1NY.js +0 -1
- package/apps/supervisor-web/dist/assets/ruby-Dw2BHqvy.js +0 -1
- package/apps/supervisor-web/dist/assets/rust-B1yitclQ.js +0 -1
- package/apps/supervisor-web/dist/assets/sas-cz2c8ADy.js +0 -1
- package/apps/supervisor-web/dist/assets/sass-Cj5Yp3dK.js +0 -1
- package/apps/supervisor-web/dist/assets/scala-C151Ov-r.js +0 -1
- package/apps/supervisor-web/dist/assets/scheme-C98Dy4si.js +0 -1
- package/apps/supervisor-web/dist/assets/scss-OYdSNvt2.js +0 -1
- package/apps/supervisor-web/dist/assets/sdbl-DVxCFoDh.js +0 -1
- package/apps/supervisor-web/dist/assets/shaderlab-Dg9Lc6iA.js +0 -1
- package/apps/supervisor-web/dist/assets/shellsession-BADoaaVG.js +0 -1
- package/apps/supervisor-web/dist/assets/slack-dark-BthQWCQV.js +0 -1
- package/apps/supervisor-web/dist/assets/slack-ochin-DqwNpetd.js +0 -1
- package/apps/supervisor-web/dist/assets/smalltalk-BERRCDM3.js +0 -1
- package/apps/supervisor-web/dist/assets/snazzy-light-Bw305WKR.js +0 -1
- package/apps/supervisor-web/dist/assets/solarized-dark-DXbdFlpD.js +0 -1
- package/apps/supervisor-web/dist/assets/solarized-light-L9t79GZl.js +0 -1
- package/apps/supervisor-web/dist/assets/solidity-rGO070M0.js +0 -1
- package/apps/supervisor-web/dist/assets/soy-Brmx7dQM.js +0 -1
- package/apps/supervisor-web/dist/assets/sparql-rVzFXLq3.js +0 -1
- package/apps/supervisor-web/dist/assets/splunk-BtCnVYZw.js +0 -1
- package/apps/supervisor-web/dist/assets/ssh-config-_ykCGR6B.js +0 -1
- package/apps/supervisor-web/dist/assets/stata-BH5u7GGu.js +0 -1
- package/apps/supervisor-web/dist/assets/stylus-BEDo0Tqx.js +0 -1
- package/apps/supervisor-web/dist/assets/surrealql-Bq5Q-fJD.js +0 -1
- package/apps/supervisor-web/dist/assets/svelte-C_ipcX3V.js +0 -1
- package/apps/supervisor-web/dist/assets/swift-D82vCrfD.js +0 -1
- package/apps/supervisor-web/dist/assets/synthwave-84-CbfX1IO0.js +0 -1
- package/apps/supervisor-web/dist/assets/system-verilog-CnnmHF94.js +0 -1
- package/apps/supervisor-web/dist/assets/systemd-4A_iFExJ.js +0 -1
- package/apps/supervisor-web/dist/assets/talonscript-CkByrt1z.js +0 -1
- package/apps/supervisor-web/dist/assets/tasl-QIJgUcNo.js +0 -1
- package/apps/supervisor-web/dist/assets/tcl-dwOrl1Do.js +0 -1
- package/apps/supervisor-web/dist/assets/templ-P3uqSqPl.js +0 -1
- package/apps/supervisor-web/dist/assets/terraform-BETggiCN.js +0 -1
- package/apps/supervisor-web/dist/assets/tex-idrVyKtj.js +0 -1
- package/apps/supervisor-web/dist/assets/thread-ui-BEieA99i.css +0 -1
- package/apps/supervisor-web/dist/assets/thread-ui-LDojdlO_.js +0 -1997
- package/apps/supervisor-web/dist/assets/tokyo-night-hegEt444.js +0 -1
- package/apps/supervisor-web/dist/assets/ts-tags-zn1MmPIZ.js +0 -1
- package/apps/supervisor-web/dist/assets/tsv-B_m7g4N7.js +0 -1
- package/apps/supervisor-web/dist/assets/turtle-BsS91CYL.js +0 -1
- package/apps/supervisor-web/dist/assets/twig-DNn4PbVi.js +0 -1
- package/apps/supervisor-web/dist/assets/typespec-BGHnOYBU.js +0 -1
- package/apps/supervisor-web/dist/assets/typst-DHCkPAjA.js +0 -1
- package/apps/supervisor-web/dist/assets/ui-vendor-xVD8_rhm.js +0 -6
- package/apps/supervisor-web/dist/assets/v-BcVCzyr7.js +0 -1
- package/apps/supervisor-web/dist/assets/vala-CsfeWuGM.js +0 -1
- package/apps/supervisor-web/dist/assets/vb-D17OF-Vu.js +0 -1
- package/apps/supervisor-web/dist/assets/verilog-BQ8w6xss.js +0 -1
- package/apps/supervisor-web/dist/assets/vesper-DU1UobuO.js +0 -1
- package/apps/supervisor-web/dist/assets/vhdl-CeAyd5Ju.js +0 -1
- package/apps/supervisor-web/dist/assets/viml-CJc9bBzg.js +0 -1
- package/apps/supervisor-web/dist/assets/vitesse-black-Bkuqu6BP.js +0 -1
- package/apps/supervisor-web/dist/assets/vitesse-dark-D0r3Knsf.js +0 -1
- package/apps/supervisor-web/dist/assets/vitesse-light-CVO1_9PV.js +0 -1
- package/apps/supervisor-web/dist/assets/vue-DN_0RTcg.js +0 -1
- package/apps/supervisor-web/dist/assets/vue-html-AaS7Mt5G.js +0 -1
- package/apps/supervisor-web/dist/assets/vue-vine-CQOfvN7w.js +0 -1
- package/apps/supervisor-web/dist/assets/vyper-CDx5xZoG.js +0 -1
- package/apps/supervisor-web/dist/assets/wasm-CG6Dc4jp.js +0 -1
- package/apps/supervisor-web/dist/assets/wasm-MzD3tlZU.js +0 -1
- package/apps/supervisor-web/dist/assets/wenyan-BV7otONQ.js +0 -1
- package/apps/supervisor-web/dist/assets/wgsl-Dx-B1_4e.js +0 -1
- package/apps/supervisor-web/dist/assets/wikitext-BhOHFoWU.js +0 -1
- package/apps/supervisor-web/dist/assets/wit-5i3qLPDT.js +0 -1
- package/apps/supervisor-web/dist/assets/wolfram-lXgVvXCa.js +0 -1
- package/apps/supervisor-web/dist/assets/xml-sdJ4AIDG.js +0 -1
- package/apps/supervisor-web/dist/assets/xsl-CtQFsRM5.js +0 -1
- package/apps/supervisor-web/dist/assets/zenscript-DVFEvuxE.js +0 -1
- package/apps/supervisor-web/dist/assets/zig-VOosw3JB.js +0 -1
|
@@ -4,15 +4,16 @@
|
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<title>Remote Codex Supervisor</title>
|
|
7
|
-
<script type="module" crossorigin src="/assets/index-
|
|
8
|
-
<link rel="modulepreload" crossorigin href="/assets/react-vendor-
|
|
9
|
-
<link rel="modulepreload" crossorigin href="/assets/ui-vendor-
|
|
10
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
11
|
-
<link rel="modulepreload" crossorigin href="/assets/terminal-vendor-
|
|
12
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
7
|
+
<script type="module" crossorigin src="/assets/index-Dsq8QmDr.js"></script>
|
|
8
|
+
<link rel="modulepreload" crossorigin href="/assets/react-vendor-CgLzZcV4.js">
|
|
9
|
+
<link rel="modulepreload" crossorigin href="/assets/ui-vendor-CeKGesq3.js">
|
|
10
|
+
<link rel="modulepreload" crossorigin href="/assets/graph-vendor-DVPtkh3h.js">
|
|
11
|
+
<link rel="modulepreload" crossorigin href="/assets/terminal-vendor-B365Go3Z.js">
|
|
12
|
+
<link rel="modulepreload" crossorigin href="/assets/markdown-vendor-BQJfKm05.js">
|
|
13
|
+
<link rel="modulepreload" crossorigin href="/assets/thread-ui-DldLSgqC.js">
|
|
14
|
+
<link rel="stylesheet" crossorigin href="/assets/graph-vendor-C5ap-Sga.css">
|
|
13
15
|
<link rel="stylesheet" crossorigin href="/assets/terminal-vendor-Beg8tuEN.css">
|
|
14
|
-
<link rel="stylesheet" crossorigin href="/assets/
|
|
15
|
-
<link rel="stylesheet" crossorigin href="/assets/index-Dh2-KXLR.css">
|
|
16
|
+
<link rel="stylesheet" crossorigin href="/assets/index-Cp9GkemI.css">
|
|
16
17
|
</head>
|
|
17
18
|
<body class="bg-stone-950">
|
|
18
19
|
<div id="root"></div>
|
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "remote-codex",
|
|
3
|
-
"version": "0.11.
|
|
3
|
+
"version": "0.11.11",
|
|
4
4
|
"description": "Local web supervisor for Codex workspaces and threads.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"bin": {
|
|
8
|
-
"remote-codex": "
|
|
8
|
+
"remote-codex": "bin/remote-codex.mjs"
|
|
9
9
|
},
|
|
10
10
|
"files": [
|
|
11
11
|
"bin/",
|
|
@@ -197,6 +197,58 @@ describe('CodexAppServerManager', () => {
|
|
|
197
197
|
await manager.stop();
|
|
198
198
|
});
|
|
199
199
|
|
|
200
|
+
it('forwards structured image input when starting a turn', async () => {
|
|
201
|
+
const expectedInput = [
|
|
202
|
+
{ type: 'text', text: 'Inspect this ', text_elements: [] },
|
|
203
|
+
{ type: 'localImage', path: '/tmp/workspace/photo.png' },
|
|
204
|
+
{ type: 'text', text: ' and summarize.', text_elements: [] },
|
|
205
|
+
];
|
|
206
|
+
const script = [
|
|
207
|
+
"const readline=require('node:readline');",
|
|
208
|
+
"const rl=readline.createInterface({input:process.stdin,crlfDelay:Infinity});",
|
|
209
|
+
`const expectedInput=${JSON.stringify(expectedInput)};`,
|
|
210
|
+
"rl.on('line',(line)=>{",
|
|
211
|
+
" const msg=JSON.parse(line);",
|
|
212
|
+
" if(msg.method==='initialize'){",
|
|
213
|
+
" process.stdout.write(JSON.stringify({id:msg.id,result:{userAgent:'fake',codexHome:'/tmp',platformFamily:'unix',platformOs:'linux'}})+'\\n');",
|
|
214
|
+
" } else if(msg.method==='turn/start'){",
|
|
215
|
+
" if(JSON.stringify(msg.params?.input)===JSON.stringify(expectedInput)){",
|
|
216
|
+
" process.stdout.write(JSON.stringify({id:msg.id,result:{turn:{id:'turn-1',status:'completed',items:[]}}})+'\\n');",
|
|
217
|
+
" } else {",
|
|
218
|
+
" process.stdout.write(JSON.stringify({id:msg.id,error:{code:-32600,message:'bad start input',data:msg.params}})+'\\n');",
|
|
219
|
+
" }",
|
|
220
|
+
" }",
|
|
221
|
+
"});"
|
|
222
|
+
].join('');
|
|
223
|
+
|
|
224
|
+
const manager = new CodexAppServerManager({
|
|
225
|
+
command: process.execPath,
|
|
226
|
+
startupTimeoutMs: 1000,
|
|
227
|
+
clientInfo: {
|
|
228
|
+
name: 'test',
|
|
229
|
+
title: 'test',
|
|
230
|
+
version: '0.1.0'
|
|
231
|
+
},
|
|
232
|
+
spawnProcess: (command) => {
|
|
233
|
+
return spawn(command, ['-e', script], { stdio: 'pipe' });
|
|
234
|
+
}
|
|
235
|
+
});
|
|
236
|
+
|
|
237
|
+
await manager.start();
|
|
238
|
+
const turn = await manager.startTurn({
|
|
239
|
+
threadId: 'thread-1',
|
|
240
|
+
prompt: 'Inspect this [PHOTO photo.png] and summarize.',
|
|
241
|
+
input: expectedInput,
|
|
242
|
+
});
|
|
243
|
+
|
|
244
|
+
expect(turn).toMatchObject({
|
|
245
|
+
id: 'turn-1',
|
|
246
|
+
status: 'completed',
|
|
247
|
+
});
|
|
248
|
+
|
|
249
|
+
await manager.stop();
|
|
250
|
+
});
|
|
251
|
+
|
|
200
252
|
it('writes hook trust state through config batch writes', async () => {
|
|
201
253
|
const requests: any[] = [];
|
|
202
254
|
const script = [
|
|
@@ -72,6 +72,16 @@ function mapTurn(record: any): CodexTurnRecord {
|
|
|
72
72
|
};
|
|
73
73
|
}
|
|
74
74
|
|
|
75
|
+
function textOnlyUserInput(prompt: string): NonNullable<TurnStartInput['input']> {
|
|
76
|
+
return [
|
|
77
|
+
{
|
|
78
|
+
type: 'text',
|
|
79
|
+
text: prompt,
|
|
80
|
+
text_elements: []
|
|
81
|
+
}
|
|
82
|
+
];
|
|
83
|
+
}
|
|
84
|
+
|
|
75
85
|
function mapModel(record: any): CodexModelRecord {
|
|
76
86
|
return {
|
|
77
87
|
id: record.id,
|
|
@@ -452,13 +462,7 @@ export class CodexAppServerManager extends EventEmitter {
|
|
|
452
462
|
await this.ensureReady();
|
|
453
463
|
const response = await this.client!.request<{ turn: any }>('turn/start', {
|
|
454
464
|
threadId: input.threadId,
|
|
455
|
-
input:
|
|
456
|
-
{
|
|
457
|
-
type: 'text',
|
|
458
|
-
text: input.prompt,
|
|
459
|
-
text_elements: []
|
|
460
|
-
}
|
|
461
|
-
],
|
|
465
|
+
input: input.input ?? textOnlyUserInput(input.prompt),
|
|
462
466
|
model: input.model ?? null,
|
|
463
467
|
serviceTier:
|
|
464
468
|
input.serviceTier === undefined ? undefined : input.serviceTier,
|
|
@@ -483,13 +487,7 @@ export class CodexAppServerManager extends EventEmitter {
|
|
|
483
487
|
const response = await this.client!.request<{ turn?: any }>('turn/steer', {
|
|
484
488
|
threadId: input.threadId,
|
|
485
489
|
expectedTurnId: input.turnId,
|
|
486
|
-
input:
|
|
487
|
-
{
|
|
488
|
-
type: 'text',
|
|
489
|
-
text: input.prompt,
|
|
490
|
-
text_elements: []
|
|
491
|
-
}
|
|
492
|
-
]
|
|
490
|
+
input: input.input ?? textOnlyUserInput(input.prompt)
|
|
493
491
|
});
|
|
494
492
|
return response.turn ? mapTurn(response.turn) : null;
|
|
495
493
|
}
|
|
@@ -84,6 +84,39 @@ describe('codex history item persistence policy', () => {
|
|
|
84
84
|
});
|
|
85
85
|
});
|
|
86
86
|
|
|
87
|
+
it('preserves per-item timestamps when mapping Codex turn history', () => {
|
|
88
|
+
const turn = codexTurnToAgentTurn({
|
|
89
|
+
id: 'turn-1',
|
|
90
|
+
status: 'completed',
|
|
91
|
+
error: null,
|
|
92
|
+
items: [
|
|
93
|
+
{
|
|
94
|
+
id: 'user-1',
|
|
95
|
+
type: 'userMessage',
|
|
96
|
+
text: 'start',
|
|
97
|
+
createdAt: '2026-06-13T22:00:01.123Z',
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
id: 'agent-1',
|
|
101
|
+
type: 'agentMessage',
|
|
102
|
+
text: 'done',
|
|
103
|
+
completedAt: '2026-06-13T22:00:08.456Z',
|
|
104
|
+
},
|
|
105
|
+
],
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
expect(turn.items).toMatchObject([
|
|
109
|
+
{
|
|
110
|
+
id: 'user-1',
|
|
111
|
+
createdAt: '2026-06-13T22:00:01.123Z',
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
id: 'agent-1',
|
|
115
|
+
createdAt: '2026-06-13T22:00:08.456Z',
|
|
116
|
+
},
|
|
117
|
+
]);
|
|
118
|
+
});
|
|
119
|
+
|
|
87
120
|
it('keeps MCP tool result text extractable for plugin artifacts', () => {
|
|
88
121
|
const artifactText = [
|
|
89
122
|
'Created a 3D molecule artifact for Methane.',
|
|
@@ -46,6 +46,51 @@ function stringOrNull(value: unknown) {
|
|
|
46
46
|
return typeof value === 'string' && value.trim() ? value.trim() : null;
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
+
function isoTimestampOrNull(value: unknown) {
|
|
50
|
+
if (typeof value === 'number' && Number.isFinite(value)) {
|
|
51
|
+
const epochMs = value < 10_000_000_000 ? value * 1000 : value;
|
|
52
|
+
return new Date(epochMs).toISOString();
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
const text = stringOrNull(value);
|
|
56
|
+
if (!text) {
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const parsed = Date.parse(text);
|
|
61
|
+
return Number.isFinite(parsed) ? new Date(parsed).toISOString() : null;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
function codexItemCreatedAt(item: CodexTurnItem) {
|
|
65
|
+
const candidates = [
|
|
66
|
+
item.createdAt,
|
|
67
|
+
item.created_at,
|
|
68
|
+
item.startedAt,
|
|
69
|
+
item.started_at,
|
|
70
|
+
item.completedAt,
|
|
71
|
+
item.completed_at,
|
|
72
|
+
];
|
|
73
|
+
|
|
74
|
+
for (const candidate of candidates) {
|
|
75
|
+
const timestamp = isoTimestampOrNull(candidate);
|
|
76
|
+
if (timestamp) {
|
|
77
|
+
return timestamp;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
return parseUuidV7Timestamp(item.id);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
function withCodexItemTimestamp<T extends ThreadHistoryItemDto>(
|
|
85
|
+
item: CodexTurnItem,
|
|
86
|
+
historyItem: T,
|
|
87
|
+
): T {
|
|
88
|
+
return {
|
|
89
|
+
...historyItem,
|
|
90
|
+
createdAt: historyItem.createdAt ?? codexItemCreatedAt(item),
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
|
|
49
94
|
function numberOrNull(value: unknown) {
|
|
50
95
|
if (typeof value === 'number' && Number.isFinite(value)) {
|
|
51
96
|
return value;
|
|
@@ -1319,7 +1364,7 @@ export function liveCodexItemToHistoryItem(
|
|
|
1319
1364
|
item: CodexTurnItem,
|
|
1320
1365
|
phase: 'started' | 'completed',
|
|
1321
1366
|
): ThreadHistoryItemDto | null {
|
|
1322
|
-
const historyItem = itemToHistoryItem(item);
|
|
1367
|
+
const historyItem = withCodexItemTimestamp(item, itemToHistoryItem(item));
|
|
1323
1368
|
|
|
1324
1369
|
if (
|
|
1325
1370
|
historyItem.kind !== 'commandExecution' &&
|
|
@@ -1365,7 +1410,9 @@ export function codexTurnToAgentTurn(turn: CodexTurnRecord): AgentTurn {
|
|
|
1365
1410
|
rawTurnId: turn.id,
|
|
1366
1411
|
status: turn.status,
|
|
1367
1412
|
error: turn.error,
|
|
1368
|
-
items: turn.items.map((item) =>
|
|
1413
|
+
items: turn.items.map((item) =>
|
|
1414
|
+
withCodexItemTimestamp(item, itemToHistoryItem(item)),
|
|
1415
|
+
),
|
|
1369
1416
|
rawTurn: turn,
|
|
1370
1417
|
};
|
|
1371
1418
|
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { EventEmitter } from 'node:events';
|
|
2
|
+
|
|
3
|
+
import { describe, expect, it } from 'vitest';
|
|
4
|
+
|
|
5
|
+
import { CodexRuntimeAdapter } from './runtimeAdapter';
|
|
6
|
+
import type { TurnStartInput } from './types';
|
|
7
|
+
|
|
8
|
+
class FakeCodexManager extends EventEmitter {
|
|
9
|
+
startTurnInput: TurnStartInput | null = null;
|
|
10
|
+
|
|
11
|
+
getStatus() {
|
|
12
|
+
return {
|
|
13
|
+
state: 'ready' as const,
|
|
14
|
+
transport: 'stdio' as const,
|
|
15
|
+
lastStartedAt: null,
|
|
16
|
+
lastError: null,
|
|
17
|
+
restartCount: 0,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
async startTurn(input: TurnStartInput) {
|
|
22
|
+
this.startTurnInput = input;
|
|
23
|
+
return {
|
|
24
|
+
id: 'turn-1',
|
|
25
|
+
status: 'completed' as const,
|
|
26
|
+
error: null,
|
|
27
|
+
items: [],
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
describe('CodexRuntimeAdapter', () => {
|
|
33
|
+
it('converts prompt photo tokens into structured local image input', async () => {
|
|
34
|
+
const manager = new FakeCodexManager();
|
|
35
|
+
const adapter = new CodexRuntimeAdapter(manager as never);
|
|
36
|
+
|
|
37
|
+
await adapter.startTurn({
|
|
38
|
+
providerSessionId: 'thread-1',
|
|
39
|
+
prompt: 'Inspect this [PHOTO ./.temp/threads/thread-1/photo.png] then summarize.',
|
|
40
|
+
workspacePath: '/tmp/workspace',
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
expect(manager.startTurnInput).toMatchObject({
|
|
44
|
+
threadId: 'thread-1',
|
|
45
|
+
prompt: 'Inspect this [PHOTO ./.temp/threads/thread-1/photo.png] then summarize.',
|
|
46
|
+
input: [
|
|
47
|
+
{ type: 'text', text: 'Inspect this ', text_elements: [] },
|
|
48
|
+
{
|
|
49
|
+
type: 'localImage',
|
|
50
|
+
path: '/tmp/workspace/.temp/threads/thread-1/photo.png',
|
|
51
|
+
},
|
|
52
|
+
{ type: 'text', text: ' then summarize.', text_elements: [] },
|
|
53
|
+
],
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
it('keeps mobile photo extensions as structured local image input', async () => {
|
|
58
|
+
const manager = new FakeCodexManager();
|
|
59
|
+
const adapter = new CodexRuntimeAdapter(manager as never);
|
|
60
|
+
|
|
61
|
+
await adapter.startTurn({
|
|
62
|
+
providerSessionId: 'thread-1',
|
|
63
|
+
prompt: 'Inspect [PHOTO ./.temp/threads/thread-1/photo.heic].',
|
|
64
|
+
workspacePath: '/tmp/workspace',
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
expect(manager.startTurnInput?.input).toEqual([
|
|
68
|
+
{ type: 'text', text: 'Inspect ', text_elements: [] },
|
|
69
|
+
{
|
|
70
|
+
type: 'localImage',
|
|
71
|
+
path: '/tmp/workspace/.temp/threads/thread-1/photo.heic',
|
|
72
|
+
},
|
|
73
|
+
{ type: 'text', text: '.', text_elements: [] },
|
|
74
|
+
]);
|
|
75
|
+
});
|
|
76
|
+
});
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { EventEmitter } from 'node:events';
|
|
2
|
+
import path from 'node:path';
|
|
2
3
|
|
|
3
4
|
import type {
|
|
4
5
|
AgentModel,
|
|
@@ -57,6 +58,62 @@ import {
|
|
|
57
58
|
supportsFastMode,
|
|
58
59
|
} from './index';
|
|
59
60
|
|
|
61
|
+
const promptPhotoTokenPattern = /\[PHOTO\s+([^\]]+)\]/g;
|
|
62
|
+
|
|
63
|
+
function resolvePromptAssetPath(assetPath: string, cwd: string | null | undefined) {
|
|
64
|
+
if (!assetPath) {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
if (path.isAbsolute(assetPath)) {
|
|
68
|
+
return path.normalize(assetPath);
|
|
69
|
+
}
|
|
70
|
+
if (!cwd) {
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
return path.resolve(cwd, assetPath);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
function codexUserInputFromPrompt(
|
|
77
|
+
prompt: string,
|
|
78
|
+
cwd: string | null | undefined,
|
|
79
|
+
): TurnStartInput['input'] | undefined {
|
|
80
|
+
const matches = [...prompt.matchAll(promptPhotoTokenPattern)];
|
|
81
|
+
if (matches.length === 0) {
|
|
82
|
+
return undefined;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
const input: NonNullable<TurnStartInput['input']> = [];
|
|
86
|
+
let cursor = 0;
|
|
87
|
+
let includedImage = false;
|
|
88
|
+
|
|
89
|
+
for (const match of matches) {
|
|
90
|
+
const token = match[0];
|
|
91
|
+
const assetPath = match[1]?.trim() ?? '';
|
|
92
|
+
const start = match.index ?? 0;
|
|
93
|
+
const precedingText = prompt.slice(cursor, start);
|
|
94
|
+
if (precedingText) {
|
|
95
|
+
input.push({ type: 'text', text: precedingText, text_elements: [] });
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
const resolvedPath = resolvePromptAssetPath(assetPath, cwd);
|
|
99
|
+
if (resolvedPath) {
|
|
100
|
+
input.push({ type: 'localImage', path: resolvedPath });
|
|
101
|
+
includedImage = true;
|
|
102
|
+
} else {
|
|
103
|
+
input.push({ type: 'text', text: token, text_elements: [] });
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
cursor = start + token.length;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
const trailingText = prompt.slice(cursor);
|
|
110
|
+
if (trailingText) {
|
|
111
|
+
input.push({ type: 'text', text: trailingText, text_elements: [] });
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
return includedImage ? input : undefined;
|
|
115
|
+
}
|
|
116
|
+
|
|
60
117
|
export const codexCapabilities: AgentProviderCapabilities = {
|
|
61
118
|
sessions: {
|
|
62
119
|
list: true,
|
|
@@ -661,6 +718,13 @@ export class CodexRuntimeAdapter extends EventEmitter implements AgentRuntime {
|
|
|
661
718
|
threadId: input.providerSessionId,
|
|
662
719
|
prompt: input.prompt,
|
|
663
720
|
};
|
|
721
|
+
const structuredInput = codexUserInputFromPrompt(
|
|
722
|
+
input.prompt,
|
|
723
|
+
input.workspacePath,
|
|
724
|
+
);
|
|
725
|
+
if (structuredInput) {
|
|
726
|
+
turnInput.input = structuredInput;
|
|
727
|
+
}
|
|
664
728
|
if (input.developerInstructions !== undefined) {
|
|
665
729
|
turnInput.developerInstructions = input.developerInstructions;
|
|
666
730
|
}
|
|
@@ -689,11 +753,17 @@ export class CodexRuntimeAdapter extends EventEmitter implements AgentRuntime {
|
|
|
689
753
|
}
|
|
690
754
|
|
|
691
755
|
async sendInput(input: SendAgentInputInput): Promise<AgentTurn | null> {
|
|
692
|
-
const
|
|
756
|
+
const structuredInput = codexUserInputFromPrompt(
|
|
757
|
+
input.prompt,
|
|
758
|
+
input.workspacePath,
|
|
759
|
+
);
|
|
760
|
+
const steerInput = {
|
|
693
761
|
threadId: input.providerSessionId,
|
|
694
762
|
turnId: input.providerTurnId,
|
|
695
763
|
prompt: input.prompt,
|
|
696
|
-
|
|
764
|
+
...(structuredInput ? { input: structuredInput } : {}),
|
|
765
|
+
};
|
|
766
|
+
const turn = await codexRuntimeCall(() => this.manager.steerTurn(steerInput));
|
|
697
767
|
return turn ? mapTurn(turn) : null;
|
|
698
768
|
}
|
|
699
769
|
|
|
@@ -318,6 +318,7 @@ export interface ThreadRollbackInput {
|
|
|
318
318
|
export interface TurnStartInput {
|
|
319
319
|
threadId: string;
|
|
320
320
|
prompt: string;
|
|
321
|
+
input?: CodexUserInput[];
|
|
321
322
|
developerInstructions?: string | null;
|
|
322
323
|
model?: string | null;
|
|
323
324
|
effort?: ReasoningEffort | null;
|
|
@@ -330,8 +331,20 @@ export interface TurnSteerInput {
|
|
|
330
331
|
threadId: string;
|
|
331
332
|
turnId: string;
|
|
332
333
|
prompt: string;
|
|
334
|
+
input?: CodexUserInput[];
|
|
333
335
|
}
|
|
334
336
|
|
|
337
|
+
export type CodexUserInput =
|
|
338
|
+
| {
|
|
339
|
+
type: 'text';
|
|
340
|
+
text: string;
|
|
341
|
+
text_elements: [];
|
|
342
|
+
}
|
|
343
|
+
| {
|
|
344
|
+
type: 'localImage';
|
|
345
|
+
path: string;
|
|
346
|
+
};
|
|
347
|
+
|
|
335
348
|
export interface ThreadCompactInput {
|
|
336
349
|
threadId: string;
|
|
337
350
|
}
|
|
@@ -211,12 +211,14 @@ export interface RelayHttpRequestPayload {
|
|
|
211
211
|
path: string;
|
|
212
212
|
headers: Record<string, string>;
|
|
213
213
|
body: string | null;
|
|
214
|
+
bodyEncoding?: 'utf8' | 'base64';
|
|
214
215
|
}
|
|
215
216
|
|
|
216
217
|
export interface RelayHttpResponsePayload {
|
|
217
218
|
statusCode: number;
|
|
218
219
|
headers: Record<string, string>;
|
|
219
220
|
body: string;
|
|
221
|
+
bodyEncoding?: 'utf8' | 'base64';
|
|
220
222
|
}
|
|
221
223
|
|
|
222
224
|
export interface AgentRuntimeStatusDto {
|
|
@@ -562,6 +564,7 @@ export interface ThreadDto {
|
|
|
562
564
|
|
|
563
565
|
export interface ThreadHistoryItemDto {
|
|
564
566
|
id: string;
|
|
567
|
+
createdAt?: string | null;
|
|
565
568
|
kind:
|
|
566
569
|
| 'userMessage'
|
|
567
570
|
| 'agentMessage'
|