atoo-studio 0.0.1 → 0.0.2
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/LICENSE +21 -0
- package/README.github.md +322 -0
- package/README.md +112 -0
- package/README.npm.md +112 -0
- package/bin/atoo-studio.js +90 -0
- package/dist/src/agents/claude-code-terminal/adapter.d.ts +42 -0
- package/dist/src/agents/claude-code-terminal/adapter.js +166 -0
- package/dist/src/agents/claude-code-terminal/index.d.ts +13 -0
- package/dist/src/agents/claude-code-terminal/index.js +45 -0
- package/dist/src/agents/claude-code-terminal/spawner.d.ts +9 -0
- package/dist/src/agents/claude-code-terminal/spawner.js +37 -0
- package/dist/src/agents/claude-code-terminal-chatro/adapter.d.ts +51 -0
- package/dist/src/agents/claude-code-terminal-chatro/adapter.js +301 -0
- package/dist/src/agents/claude-code-terminal-chatro/index.d.ts +13 -0
- package/dist/src/agents/claude-code-terminal-chatro/index.js +45 -0
- package/dist/src/agents/claude-code-terminal-chatro/jsonl-watcher.d.ts +67 -0
- package/dist/src/agents/claude-code-terminal-chatro/jsonl-watcher.js +431 -0
- package/dist/src/agents/claude-code-terminal-chatro/spawner.d.ts +9 -0
- package/dist/src/agents/claude-code-terminal-chatro/spawner.js +37 -0
- package/dist/src/agents/codex-terminal/adapter.d.ts +40 -0
- package/dist/src/agents/codex-terminal/adapter.js +160 -0
- package/dist/src/agents/codex-terminal/index.d.ts +13 -0
- package/dist/src/agents/codex-terminal/index.js +47 -0
- package/dist/src/agents/codex-terminal/spawner.d.ts +9 -0
- package/dist/src/agents/codex-terminal/spawner.js +56 -0
- package/dist/src/agents/codex-terminal-chatro/adapter.d.ts +58 -0
- package/dist/src/agents/codex-terminal-chatro/adapter.js +266 -0
- package/dist/src/agents/codex-terminal-chatro/index.d.ts +13 -0
- package/dist/src/agents/codex-terminal-chatro/index.js +50 -0
- package/dist/src/agents/codex-terminal-chatro/jsonl-watcher.d.ts +36 -0
- package/dist/src/agents/codex-terminal-chatro/jsonl-watcher.js +205 -0
- package/dist/src/agents/codex-terminal-chatro/spawner.d.ts +9 -0
- package/dist/src/agents/codex-terminal-chatro/spawner.js +57 -0
- package/dist/src/agents/lib/chain-builder.d.ts +21 -0
- package/dist/src/agents/lib/chain-builder.js +139 -0
- package/dist/src/agents/lib/claude/fs-sessions.d.ts +31 -0
- package/dist/src/agents/lib/claude/fs-sessions.js +329 -0
- package/dist/src/agents/lib/claude/jsonl-writer.d.ts +32 -0
- package/dist/src/agents/lib/claude/jsonl-writer.js +342 -0
- package/dist/src/agents/lib/claude/workspace-trust.d.ts +1 -0
- package/dist/src/agents/lib/claude/workspace-trust.js +29 -0
- package/dist/src/agents/lib/codex/fs-sessions.d.ts +34 -0
- package/dist/src/agents/lib/codex/fs-sessions.js +255 -0
- package/dist/src/agents/lib/codex/jsonl-mapper.d.ts +11 -0
- package/dist/src/agents/lib/codex/jsonl-mapper.js +154 -0
- package/dist/src/agents/lib/codex/jsonl-writer.d.ts +8 -0
- package/dist/src/agents/lib/codex/jsonl-writer.js +440 -0
- package/dist/src/agents/lib/fs-tracking.d.ts +36 -0
- package/dist/src/agents/lib/fs-tracking.js +109 -0
- package/dist/src/agents/lib/pty-activity-tracker.d.ts +37 -0
- package/dist/src/agents/lib/pty-activity-tracker.js +105 -0
- package/dist/src/agents/lib/session-id-utils.d.ts +46 -0
- package/dist/src/agents/lib/session-id-utils.js +147 -0
- package/dist/src/agents/lib/session-precreate.d.ts +17 -0
- package/dist/src/agents/lib/session-precreate.js +177 -0
- package/dist/src/agents/registry.d.ts +72 -0
- package/dist/src/agents/registry.js +337 -0
- package/dist/src/agents/types.d.ts +135 -0
- package/dist/src/agents/types.js +1 -0
- package/dist/src/auth/crypto-key.d.ts +6 -0
- package/dist/src/auth/crypto-key.js +45 -0
- package/dist/src/auth/middleware.d.ts +18 -0
- package/dist/src/auth/middleware.js +54 -0
- package/dist/src/auth/password.d.ts +2 -0
- package/dist/src/auth/password.js +12 -0
- package/dist/src/auth/session.d.ts +10 -0
- package/dist/src/auth/session.js +33 -0
- package/dist/src/auth/totp.d.ts +12 -0
- package/dist/src/auth/totp.js +61 -0
- package/dist/src/auth/webauthn.d.ts +6 -0
- package/dist/src/auth/webauthn.js +117 -0
- package/dist/src/config.d.ts +10 -0
- package/dist/src/config.js +16 -0
- package/dist/src/database/connection-manager.d.ts +25 -0
- package/dist/src/database/connection-manager.js +211 -0
- package/dist/src/database/discovery/container.d.ts +6 -0
- package/dist/src/database/discovery/container.js +226 -0
- package/dist/src/database/discovery/env-parser.d.ts +9 -0
- package/dist/src/database/discovery/env-parser.js +525 -0
- package/dist/src/database/discovery/local-files.d.ts +6 -0
- package/dist/src/database/discovery/local-files.js +58 -0
- package/dist/src/database/discovery/port-scan.d.ts +7 -0
- package/dist/src/database/discovery/port-scan.js +61 -0
- package/dist/src/database/drivers/cassandra.d.ts +12 -0
- package/dist/src/database/drivers/cassandra.js +91 -0
- package/dist/src/database/drivers/clickhouse.d.ts +11 -0
- package/dist/src/database/drivers/clickhouse.js +127 -0
- package/dist/src/database/drivers/elasticsearch.d.ts +12 -0
- package/dist/src/database/drivers/elasticsearch.js +169 -0
- package/dist/src/database/drivers/influxdb.d.ts +14 -0
- package/dist/src/database/drivers/influxdb.js +194 -0
- package/dist/src/database/drivers/memcached.d.ts +11 -0
- package/dist/src/database/drivers/memcached.js +117 -0
- package/dist/src/database/drivers/mongodb.d.ts +12 -0
- package/dist/src/database/drivers/mongodb.js +128 -0
- package/dist/src/database/drivers/mysql.d.ts +11 -0
- package/dist/src/database/drivers/mysql.js +112 -0
- package/dist/src/database/drivers/neo4j.d.ts +11 -0
- package/dist/src/database/drivers/neo4j.js +158 -0
- package/dist/src/database/drivers/postgresql.d.ts +11 -0
- package/dist/src/database/drivers/postgresql.js +133 -0
- package/dist/src/database/drivers/redis.d.ts +11 -0
- package/dist/src/database/drivers/redis.js +91 -0
- package/dist/src/database/drivers/sqlite.d.ts +10 -0
- package/dist/src/database/drivers/sqlite.js +100 -0
- package/dist/src/database/query-stream.d.ts +5 -0
- package/dist/src/database/query-stream.js +75 -0
- package/dist/src/database/types.d.ts +71 -0
- package/dist/src/database/types.js +1 -0
- package/dist/src/events/index.d.ts +3 -0
- package/dist/src/events/index.js +3 -0
- package/dist/src/events/types.d.ts +214 -0
- package/dist/src/events/types.js +22 -0
- package/dist/src/events/wire.d.ts +114 -0
- package/dist/src/events/wire.js +296 -0
- package/dist/src/fs-monitor-types.d.ts +24 -0
- package/dist/src/fs-monitor-types.js +1 -0
- package/dist/src/fs-monitor.d.ts +80 -0
- package/dist/src/fs-monitor.js +637 -0
- package/dist/src/handlers/auth.d.ts +1 -0
- package/dist/src/handlers/auth.js +170 -0
- package/dist/src/handlers/changes.d.ts +1 -0
- package/dist/src/handlers/changes.js +203 -0
- package/dist/src/handlers/containers.d.ts +12 -0
- package/dist/src/handlers/containers.js +379 -0
- package/dist/src/handlers/databases.d.ts +3 -0
- package/dist/src/handlers/databases.js +327 -0
- package/dist/src/handlers/environments.d.ts +3 -0
- package/dist/src/handlers/environments.js +286 -0
- package/dist/src/handlers/github.d.ts +1 -0
- package/dist/src/handlers/github.js +153 -0
- package/dist/src/handlers/projects.d.ts +1 -0
- package/dist/src/handlers/projects.js +895 -0
- package/dist/src/handlers/ssh.d.ts +1 -0
- package/dist/src/handlers/ssh.js +162 -0
- package/dist/src/handlers/users.d.ts +1 -0
- package/dist/src/handlers/users.js +195 -0
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.js +228 -0
- package/dist/src/mcp/config.d.ts +32 -0
- package/dist/src/mcp/config.js +227 -0
- package/dist/src/mcp/server.d.ts +1 -0
- package/dist/src/mcp/server.js +574 -0
- package/dist/src/serial/cuse-device.d.ts +19 -0
- package/dist/src/serial/cuse-device.js +260 -0
- package/dist/src/serial/manager.d.ts +63 -0
- package/dist/src/serial/manager.js +206 -0
- package/dist/src/serial/pty-pair.d.ts +16 -0
- package/dist/src/serial/pty-pair.js +68 -0
- package/dist/src/services/fs-browser.d.ts +14 -0
- package/dist/src/services/fs-browser.js +98 -0
- package/dist/src/services/git-ops.d.ts +78 -0
- package/dist/src/services/git-ops.js +288 -0
- package/dist/src/services/github-ops.d.ts +104 -0
- package/dist/src/services/github-ops.js +192 -0
- package/dist/src/services/obfuscation.d.ts +2 -0
- package/dist/src/services/obfuscation.js +16 -0
- package/dist/src/services/preview/headless-backend.d.ts +62 -0
- package/dist/src/services/preview/headless-backend.js +698 -0
- package/dist/src/services/preview/injected-scripts.d.ts +9 -0
- package/dist/src/services/preview/injected-scripts.js +232 -0
- package/dist/src/services/preview/preview-backend.d.ts +92 -0
- package/dist/src/services/preview/preview-backend.js +15 -0
- package/dist/src/services/preview/universal-setter.d.ts +7 -0
- package/dist/src/services/preview/universal-setter.js +46 -0
- package/dist/src/services/preview-manager.d.ts +50 -0
- package/dist/src/services/preview-manager.js +216 -0
- package/dist/src/services/project-watcher.d.ts +6 -0
- package/dist/src/services/project-watcher.js +307 -0
- package/dist/src/services/remote-fs-browser.d.ts +11 -0
- package/dist/src/services/remote-fs-browser.js +50 -0
- package/dist/src/services/remote-git-ops.d.ts +71 -0
- package/dist/src/services/remote-git-ops.js +215 -0
- package/dist/src/services/session-search.d.ts +56 -0
- package/dist/src/services/session-search.js +303 -0
- package/dist/src/services/ssh-manager.d.ts +44 -0
- package/dist/src/services/ssh-manager.js +359 -0
- package/dist/src/session-writer.d.ts +9 -0
- package/dist/src/session-writer.js +66 -0
- package/dist/src/spawner.d.ts +56 -0
- package/dist/src/spawner.js +135 -0
- package/dist/src/state/db.d.ts +214 -0
- package/dist/src/state/db.js +897 -0
- package/dist/src/state/store.d.ts +37 -0
- package/dist/src/state/store.js +108 -0
- package/dist/src/state/types.d.ts +13 -0
- package/dist/src/state/types.js +1 -0
- package/dist/src/web/devtools-proxy.d.ts +7 -0
- package/dist/src/web/devtools-proxy.js +176 -0
- package/dist/src/web/port-proxy.d.ts +15 -0
- package/dist/src/web/port-proxy.js +124 -0
- package/dist/src/web/preview-ws.d.ts +5 -0
- package/dist/src/web/preview-ws.js +207 -0
- package/dist/src/web/server.d.ts +6 -0
- package/dist/src/web/server.js +1694 -0
- package/dist/src/ws/agent-ws.d.ts +5 -0
- package/dist/src/ws/agent-ws.js +93 -0
- package/frontend/dist/assets/_basePickBy-B-LibQ4-.js +1 -0
- package/frontend/dist/assets/_baseUniq-CprifHap.js +1 -0
- package/frontend/dist/assets/_createAssigner-ByDUqGii.js +1 -0
- package/frontend/dist/assets/abap-DuT-3z4x.js +1 -0
- package/frontend/dist/assets/addon-fit-CxQet2ja.js +1 -0
- package/frontend/dist/assets/addon-web-links-D_jRkPIl.js +1 -0
- package/frontend/dist/assets/apex-B-em86xX.js +1 -0
- package/frontend/dist/assets/api-SUPuHhSY.js +2 -0
- package/frontend/dist/assets/arc-Z0_eVteO.js +1 -0
- package/frontend/dist/assets/architecture-PBZL5I3N-hvVXGhqd.js +1 -0
- package/frontend/dist/assets/architectureDiagram-2XIMDMQ5-DiHPxX4j.js +36 -0
- package/frontend/dist/assets/array-CwG8vNfn.js +1 -0
- package/frontend/dist/assets/auth-store-R7eW5SVu.js +1 -0
- package/frontend/dist/assets/azcli-Bg9wQloi.js +1 -0
- package/frontend/dist/assets/bat-BM46z99L.js +1 -0
- package/frontend/dist/assets/bicep-DcBsJUfh.js +2 -0
- package/frontend/dist/assets/blockDiagram-WCTKOSBZ-C40u_hLo.js +132 -0
- package/frontend/dist/assets/c4Diagram-IC4MRINW-Ct7LjWFQ.js +10 -0
- package/frontend/dist/assets/cameligo-zw7JTtim.js +1 -0
- package/frontend/dist/assets/channel-ClCsE6HN.js +1 -0
- package/frontend/dist/assets/chunk-4BX2VUAB-zZ6P90VO.js +1 -0
- package/frontend/dist/assets/chunk-55IACEB6-DXllTDQl.js +1 -0
- package/frontend/dist/assets/chunk-7E7YKBS2-7zRaOLjj.js +1 -0
- package/frontend/dist/assets/chunk-7R4GIKGN-Csst1274.js +80 -0
- package/frontend/dist/assets/chunk-C72U2L5F-_JbQPbLN.js +1 -0
- package/frontend/dist/assets/chunk-CFjPhJqf.js +1 -0
- package/frontend/dist/assets/chunk-EGIJ26TM-B--aFyPw.js +1 -0
- package/frontend/dist/assets/chunk-FMBD7UC4-DVR34RNb.js +15 -0
- package/frontend/dist/assets/chunk-GEFDOKGD-CnmN6cC8.js +2 -0
- package/frontend/dist/assets/chunk-JSJVCQXG-CWxHBzeJ.js +1 -0
- package/frontend/dist/assets/chunk-KX2RTZJC-DkRk56s7.js +1 -0
- package/frontend/dist/assets/chunk-KYZI473N-DCCsG2dK.js +53 -0
- package/frontend/dist/assets/chunk-L3YUKLVL-C-DkZTMr.js +1 -0
- package/frontend/dist/assets/chunk-MX3YWQON-OUdzv5sZ.js +1 -0
- package/frontend/dist/assets/chunk-NQ4KR5QH-Bpu9FsM7.js +220 -0
- package/frontend/dist/assets/chunk-O4XLMI2P-BMLK6_ib.js +7 -0
- package/frontend/dist/assets/chunk-OZEHJAEY-CNNiJtG0.js +1 -0
- package/frontend/dist/assets/chunk-PQ6SQG4A-evVHD3KM.js +1 -0
- package/frontend/dist/assets/chunk-PU5JKC2W-DPFTYuvl.js +70 -0
- package/frontend/dist/assets/chunk-QZHKN3VN-JRdddPvu.js +1 -0
- package/frontend/dist/assets/chunk-R5LLSJPH-CHQzVVOV.js +1 -0
- package/frontend/dist/assets/chunk-WL4C6EOR-BNFU6IIi.js +189 -0
- package/frontend/dist/assets/chunk-XIRO2GV7-98T93G85.js +1 -0
- package/frontend/dist/assets/chunk-XZSTWKYB-BcW3cyNp.js +94 -0
- package/frontend/dist/assets/chunk-YBOYWFTD-BgKO1qAJ.js +1 -0
- package/frontend/dist/assets/classDiagram-VBA2DB6C-DikXzgcD.js +1 -0
- package/frontend/dist/assets/classDiagram-v2-RAHNMMFH-D7E3tQUK.js +1 -0
- package/frontend/dist/assets/clojure-FspFoNNQ.js +1 -0
- package/frontend/dist/assets/clone-mOXuZa7C.js +1 -0
- package/frontend/dist/assets/codicon-ngg6Pgfi.ttf +0 -0
- package/frontend/dist/assets/coffee-13n8Bk2W.js +1 -0
- package/frontend/dist/assets/cose-bilkent-S5V4N54A-zUOWQqLe.js +1 -0
- package/frontend/dist/assets/cpp-BVm2xGEs.js +1 -0
- package/frontend/dist/assets/csharp-D2kAWmUm.js +1 -0
- package/frontend/dist/assets/csp-Ezvgpf0e.js +1 -0
- package/frontend/dist/assets/css-CYxRwcFy.js +3 -0
- package/frontend/dist/assets/css.worker-Cd5h-ZOL.js +89 -0
- package/frontend/dist/assets/cssMode-CrXej49V.js +1 -0
- package/frontend/dist/assets/cypher-jg3SGErc.js +1 -0
- package/frontend/dist/assets/cytoscape.esm-kyyvzxNV.js +321 -0
- package/frontend/dist/assets/dagre-DH4bgZO7.js +1 -0
- package/frontend/dist/assets/dagre-KLK3FWXG-DNSqDkwT.js +4 -0
- package/frontend/dist/assets/dart-179jqhK4.js +1 -0
- package/frontend/dist/assets/defaultLocale-Dda4OpKy.js +1 -0
- package/frontend/dist/assets/diagram-E7M64L7V-RqPNT5Vs.js +24 -0
- package/frontend/dist/assets/diagram-IFDJBPK2-B-5NRyaE.js +43 -0
- package/frontend/dist/assets/diagram-P4PSJMXO-BrP69Hk0.js +24 -0
- package/frontend/dist/assets/dist-CU_Nb1G5.js +1 -0
- package/frontend/dist/assets/dockerfile-CIAtSGxS.js +1 -0
- package/frontend/dist/assets/ecl-CGVKfDxD.js +1 -0
- package/frontend/dist/assets/editor-Br_kD0ds.css +1 -0
- package/frontend/dist/assets/editor.api2-YXkDn0Gm.js +872 -0
- package/frontend/dist/assets/editor.main-fBaXZjJ0.js +6 -0
- package/frontend/dist/assets/elixir-BZ-6w0y3.js +1 -0
- package/frontend/dist/assets/erDiagram-INFDFZHY-BYiB9NYg.js +70 -0
- package/frontend/dist/assets/flow9-CVuOjTMv.js +1 -0
- package/frontend/dist/assets/flowDiagram-PKNHOUZH-Cwq47rsR.js +162 -0
- package/frontend/dist/assets/freemarker2-DM-pztJU.js +3 -0
- package/frontend/dist/assets/fsharp-q0pGJYr6.js +1 -0
- package/frontend/dist/assets/ganttDiagram-A5KZAMGK-Dnx3szD9.js +292 -0
- package/frontend/dist/assets/gitGraph-HDMCJU4V-COlTQ7bA.js +1 -0
- package/frontend/dist/assets/gitGraphDiagram-K3NZZRJ6-BaUxboNc.js +65 -0
- package/frontend/dist/assets/go-dzSPfdEO.js +1 -0
- package/frontend/dist/assets/graphlib-kEFlkt3U.js +1 -0
- package/frontend/dist/assets/graphql-CG4OUoEV.js +1 -0
- package/frontend/dist/assets/handlebars-BbK53Vec.js +1 -0
- package/frontend/dist/assets/hcl-Cy14JPk3.js +1 -0
- package/frontend/dist/assets/html-DYtTQNOG.js +1 -0
- package/frontend/dist/assets/html.worker-BjVEKLoU.js +502 -0
- package/frontend/dist/assets/htmlMode-C6GTouth.js +1 -0
- package/frontend/dist/assets/index-DMLxes_u.js +157 -0
- package/frontend/dist/assets/index-DmzeqkB1.css +1 -0
- package/frontend/dist/assets/info-3K5VOQVL-DBtHyA4C.js +1 -0
- package/frontend/dist/assets/infoDiagram-LFFYTUFH-yBXLgMPI.js +2 -0
- package/frontend/dist/assets/ini-Pbg8HGVD.js +1 -0
- package/frontend/dist/assets/init-D6KNwrax.js +1 -0
- package/frontend/dist/assets/ishikawaDiagram-PHBUUO56-Bld4two_.js +70 -0
- package/frontend/dist/assets/java-BmVu6Qrl.js +1 -0
- package/frontend/dist/assets/javascript-PbfQEdcJ.js +1 -0
- package/frontend/dist/assets/journeyDiagram-4ABVD52K-4HyMd4R2.js +139 -0
- package/frontend/dist/assets/json.worker-DqU5Wxnl.js +58 -0
- package/frontend/dist/assets/jsonMode-CASsGppE.js +7 -0
- package/frontend/dist/assets/julia-3cGnieBq.js +1 -0
- package/frontend/dist/assets/kanban-definition-K7BYSVSG-DpgsZmpG.js +89 -0
- package/frontend/dist/assets/katex-CEw3x5bf.js +261 -0
- package/frontend/dist/assets/kotlin-BuWkVcfV.js +1 -0
- package/frontend/dist/assets/less-CJ_VPy2C.js +2 -0
- package/frontend/dist/assets/lexon-BygAuZPu.js +1 -0
- package/frontend/dist/assets/line-CA_wh_TY.js +1 -0
- package/frontend/dist/assets/linear-BAcLW45z.js +1 -0
- package/frontend/dist/assets/liquid-kz84dle6.js +1 -0
- package/frontend/dist/assets/lspLanguageFeatures-C7hAHFn1.js +4 -0
- package/frontend/dist/assets/lua-C8Xs3dCx.js +1 -0
- package/frontend/dist/assets/m3-DTJeKBk4.js +1 -0
- package/frontend/dist/assets/markdown-QCgx8JqZ.js +1 -0
- package/frontend/dist/assets/math-D0YcMJAn.js +1 -0
- package/frontend/dist/assets/mdx-yRw0ap-E.js +1 -0
- package/frontend/dist/assets/mermaid-parser.core-DAeTodBQ.js +4 -0
- package/frontend/dist/assets/mindmap-definition-YRQLILUH-CoNlFyVl.js +68 -0
- package/frontend/dist/assets/mips-DopWaYgE.js +1 -0
- package/frontend/dist/assets/monaco.contribution-DeY0Qei-.js +2 -0
- package/frontend/dist/assets/msdax-BDis4ARV.js +1 -0
- package/frontend/dist/assets/mysql-BV6MLsOI.js +1 -0
- package/frontend/dist/assets/objective-c-B1UuzKs6.js +1 -0
- package/frontend/dist/assets/ordinal-jM7S0YHN.js +1 -0
- package/frontend/dist/assets/packet-RMMSAZCW-FF6-Tmai.js +1 -0
- package/frontend/dist/assets/pascal-BkvESCrc.js +1 -0
- package/frontend/dist/assets/pascaligo-lTy0kZYr.js +1 -0
- package/frontend/dist/assets/path-DNPd7Py7.js +1 -0
- package/frontend/dist/assets/perl-CrtUPXLV.js +1 -0
- package/frontend/dist/assets/pgsql-B9IbNWx2.js +1 -0
- package/frontend/dist/assets/php-CXvQBY2p.js +1 -0
- package/frontend/dist/assets/pie-UPGHQEXC-CFvXY2o-.js +1 -0
- package/frontend/dist/assets/pieDiagram-SKSYHLDU-CM_hbCcn.js +30 -0
- package/frontend/dist/assets/pla-DxBxuqWu.js +1 -0
- package/frontend/dist/assets/postiats-OkEuT5YF.js +1 -0
- package/frontend/dist/assets/powerquery-CMx5Tq4K.js +1 -0
- package/frontend/dist/assets/powershell-CstRxrEc.js +1 -0
- package/frontend/dist/assets/preload-helper-D4M6sveU.js +1 -0
- package/frontend/dist/assets/protobuf-Bx0Z-uRj.js +2 -0
- package/frontend/dist/assets/pug--W8vanWl.js +1 -0
- package/frontend/dist/assets/python-DA0rnlw3.js +1 -0
- package/frontend/dist/assets/qsharp-CRtr0YbN.js +1 -0
- package/frontend/dist/assets/quadrantDiagram-337W2JSQ-B3n3IUhC.js +7 -0
- package/frontend/dist/assets/r-C6E1d6iv.js +1 -0
- package/frontend/dist/assets/radar-KQ55EAFF-MPZu7SdX.js +1 -0
- package/frontend/dist/assets/razor-yd73uata.js +1 -0
- package/frontend/dist/assets/redis-Dx13voP3.js +1 -0
- package/frontend/dist/assets/redshift-D66HwlyV.js +1 -0
- package/frontend/dist/assets/requirementDiagram-Z7DCOOCP-CorP7L7F.js +73 -0
- package/frontend/dist/assets/restructuredtext-DQT2NKJ2.js +1 -0
- package/frontend/dist/assets/rough.esm-DxAX5Vpo.js +1 -0
- package/frontend/dist/assets/ruby-iFXI8hwH.js +1 -0
- package/frontend/dist/assets/rust-CSKiei34.js +1 -0
- package/frontend/dist/assets/sankeyDiagram-WA2Y5GQK-RDx6Bd-B.js +10 -0
- package/frontend/dist/assets/sb-Bo3ttdP2.js +1 -0
- package/frontend/dist/assets/scala-BC1D-Nxp.js +1 -0
- package/frontend/dist/assets/scheme-Z4OAo4Lv.js +1 -0
- package/frontend/dist/assets/scss-BvrdPs6B.js +3 -0
- package/frontend/dist/assets/sequenceDiagram-2WXFIKYE-JMqJSFq6.js +145 -0
- package/frontend/dist/assets/shell-Bh_aCyF-.js +1 -0
- package/frontend/dist/assets/solidity-CWHj6tSe.js +1 -0
- package/frontend/dist/assets/sophia-raoNtKtm.js +1 -0
- package/frontend/dist/assets/sparql-XzmoGnue.js +1 -0
- package/frontend/dist/assets/sql-BD0i9Gvg.js +1 -0
- package/frontend/dist/assets/src-Bn-kKzs7.js +1 -0
- package/frontend/dist/assets/st-DtVKyms6.js +1 -0
- package/frontend/dist/assets/stateDiagram-RAJIS63D-CgFfENdy.js +1 -0
- package/frontend/dist/assets/stateDiagram-v2-FVOUBMTO-C4Hh2P-U.js +1 -0
- package/frontend/dist/assets/swift--UZs77wT.js +1 -0
- package/frontend/dist/assets/systemverilog-CDnBSWUd.js +1 -0
- package/frontend/dist/assets/tcl-DdCEuTHZ.js +1 -0
- package/frontend/dist/assets/timeline-definition-YZTLITO2-BnatPBR5.js +61 -0
- package/frontend/dist/assets/treemap-KZPCXAKY-qb1Pl9la.js +1 -0
- package/frontend/dist/assets/ts.worker-DyPAEIuH.js +67719 -0
- package/frontend/dist/assets/tsMode-iuvyEpyO.js +11 -0
- package/frontend/dist/assets/twig-SSL-Altf.js +1 -0
- package/frontend/dist/assets/typescript-17918Hud.js +1 -0
- package/frontend/dist/assets/typespec-BT7S0ETg.js +1 -0
- package/frontend/dist/assets/vb-CrIgucua.js +1 -0
- package/frontend/dist/assets/vennDiagram-LZ73GAT5-DygS4Zzd.js +34 -0
- package/frontend/dist/assets/wgsl-BeKc3oEp.js +298 -0
- package/frontend/dist/assets/workers-DTfwKVoM.js +1 -0
- package/frontend/dist/assets/xml-CBMr_Wbw.js +1 -0
- package/frontend/dist/assets/xterm-BrP-ENHg.css +1 -0
- package/frontend/dist/assets/xterm-CBX2m0YM.js +36 -0
- package/frontend/dist/assets/xychartDiagram-JWTSCODW-D6wY1Jwd.js +7 -0
- package/frontend/dist/assets/yaml-CTjCH7Bv.js +1 -0
- package/frontend/dist/fonts/inter-300.ttf +0 -0
- package/frontend/dist/fonts/inter-400.ttf +0 -0
- package/frontend/dist/fonts/inter-500.ttf +0 -0
- package/frontend/dist/fonts/inter-600.ttf +0 -0
- package/frontend/dist/fonts/inter-700.ttf +0 -0
- package/frontend/dist/index.html +49 -0
- package/frontend/dist/logo_192x192.png +0 -0
- package/frontend/dist/logo_32x32.png +0 -0
- package/frontend/dist/logo_512x512.png +0 -0
- package/frontend/dist/logo_64x64.png +0 -0
- package/frontend/dist/logobg_192x192.png +0 -0
- package/frontend/dist/logobg_512x512.png +0 -0
- package/frontend/dist/logobg_64x64.png +0 -0
- package/frontend/dist/manifest.json +25 -0
- package/frontend/dist/sw.js +22 -0
- package/package.json +74 -7
- package/preload/Makefile +12 -0
- package/preload/atoo-studio-preload.c +647 -0
- package/preload/atoo-studio-preload.so +0 -0
- package/setup-cuse.sh +260 -0
- package/setup.sh +81 -0
- package/src/serial/native/binding.gyp +10 -0
- package/src/serial/native/pty_pair.c +222 -0
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SessionEvent — canonical superset type for all agent message formats.
|
|
3
|
+
*
|
|
4
|
+
* Discriminated union on `type`. Every raw JSONL event from any agent
|
|
5
|
+
* (Claude Code, future Codex/Gemini) maps 1:1 to a SessionEvent variant.
|
|
6
|
+
*
|
|
7
|
+
* See docs/session-event-schema.md for how this type was derived.
|
|
8
|
+
*/
|
|
9
|
+
export interface TextBlock {
|
|
10
|
+
type: 'text';
|
|
11
|
+
text: string;
|
|
12
|
+
}
|
|
13
|
+
export interface ThinkingBlock {
|
|
14
|
+
type: 'thinking';
|
|
15
|
+
thinking: string;
|
|
16
|
+
signature?: string;
|
|
17
|
+
}
|
|
18
|
+
export interface ToolUseBlock {
|
|
19
|
+
type: 'tool_use';
|
|
20
|
+
id: string;
|
|
21
|
+
name: string;
|
|
22
|
+
input: Record<string, any>;
|
|
23
|
+
caller?: string;
|
|
24
|
+
}
|
|
25
|
+
export interface ToolResultBlock {
|
|
26
|
+
type: 'tool_result';
|
|
27
|
+
tool_use_id: string;
|
|
28
|
+
content: string | ToolResultContentBlock[];
|
|
29
|
+
is_error?: boolean;
|
|
30
|
+
}
|
|
31
|
+
export type ToolResultContentBlock = {
|
|
32
|
+
type: 'text';
|
|
33
|
+
text: string;
|
|
34
|
+
} | {
|
|
35
|
+
type: 'image';
|
|
36
|
+
source: ImageSource;
|
|
37
|
+
};
|
|
38
|
+
export interface ImageBlock {
|
|
39
|
+
type: 'image';
|
|
40
|
+
source: ImageSource;
|
|
41
|
+
}
|
|
42
|
+
export interface DocumentBlock {
|
|
43
|
+
type: 'document';
|
|
44
|
+
source: {
|
|
45
|
+
type: 'base64';
|
|
46
|
+
media_type: string;
|
|
47
|
+
data: string;
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
export interface ImageSource {
|
|
51
|
+
type: 'base64';
|
|
52
|
+
media_type: string;
|
|
53
|
+
data: string;
|
|
54
|
+
}
|
|
55
|
+
export type AssistantContentBlock = TextBlock | ThinkingBlock | ToolUseBlock;
|
|
56
|
+
export type UserContentBlock = TextBlock | ToolResultBlock | ImageBlock | DocumentBlock;
|
|
57
|
+
export type ContentBlock = AssistantContentBlock | UserContentBlock;
|
|
58
|
+
export interface SessionEventEnvelope {
|
|
59
|
+
uuid: string;
|
|
60
|
+
sessionId?: string;
|
|
61
|
+
session_id?: string;
|
|
62
|
+
parentUuid?: string | null;
|
|
63
|
+
timestamp?: string;
|
|
64
|
+
cwd?: string;
|
|
65
|
+
gitBranch?: string;
|
|
66
|
+
version?: string;
|
|
67
|
+
slug?: string;
|
|
68
|
+
userType?: string;
|
|
69
|
+
isSidechain?: boolean;
|
|
70
|
+
isSynthetic?: boolean;
|
|
71
|
+
agentId?: string;
|
|
72
|
+
parent_tool_use_id?: string | null;
|
|
73
|
+
}
|
|
74
|
+
export interface UserEvent extends SessionEventEnvelope {
|
|
75
|
+
type: 'user';
|
|
76
|
+
message: {
|
|
77
|
+
role: 'user';
|
|
78
|
+
content: string | UserContentBlock[];
|
|
79
|
+
};
|
|
80
|
+
toolUseResult?: ToolUseResult;
|
|
81
|
+
}
|
|
82
|
+
export interface ToolUseResult {
|
|
83
|
+
type?: string;
|
|
84
|
+
content?: string;
|
|
85
|
+
filePath?: string;
|
|
86
|
+
file?: {
|
|
87
|
+
content: string;
|
|
88
|
+
filePath: string;
|
|
89
|
+
numLines?: number;
|
|
90
|
+
startLine?: number;
|
|
91
|
+
totalLines?: number;
|
|
92
|
+
};
|
|
93
|
+
originalFile?: string;
|
|
94
|
+
structuredPatch?: any;
|
|
95
|
+
prompt?: string;
|
|
96
|
+
status?: string;
|
|
97
|
+
totalDurationMs?: number;
|
|
98
|
+
totalTokens?: number;
|
|
99
|
+
totalToolUseCount?: number;
|
|
100
|
+
usage?: Record<string, any>;
|
|
101
|
+
}
|
|
102
|
+
export interface AssistantEvent extends SessionEventEnvelope {
|
|
103
|
+
type: 'assistant';
|
|
104
|
+
message: {
|
|
105
|
+
role: 'assistant';
|
|
106
|
+
content: string | AssistantContentBlock[];
|
|
107
|
+
model?: string;
|
|
108
|
+
stop_reason?: string | null;
|
|
109
|
+
usage?: {
|
|
110
|
+
input_tokens?: number;
|
|
111
|
+
output_tokens?: number;
|
|
112
|
+
cache_creation_input_tokens?: number;
|
|
113
|
+
cache_read_input_tokens?: number;
|
|
114
|
+
};
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
export interface SystemEvent extends SessionEventEnvelope {
|
|
118
|
+
type: 'system';
|
|
119
|
+
subtype?: string;
|
|
120
|
+
model?: string;
|
|
121
|
+
permissionMode?: string;
|
|
122
|
+
durationMs?: number;
|
|
123
|
+
content?: string;
|
|
124
|
+
hookCount?: number;
|
|
125
|
+
hookInfos?: any[];
|
|
126
|
+
hookErrors?: any[];
|
|
127
|
+
hasOutput?: boolean;
|
|
128
|
+
preventedContinuation?: boolean;
|
|
129
|
+
url?: string;
|
|
130
|
+
compactMetadata?: {
|
|
131
|
+
preTokens?: number;
|
|
132
|
+
trigger?: string;
|
|
133
|
+
};
|
|
134
|
+
message?: {
|
|
135
|
+
role: string;
|
|
136
|
+
content: any;
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
export interface ProgressEvent extends SessionEventEnvelope {
|
|
140
|
+
type: 'progress';
|
|
141
|
+
data?: {
|
|
142
|
+
agentId?: string;
|
|
143
|
+
content?: string;
|
|
144
|
+
type?: string;
|
|
145
|
+
[key: string]: any;
|
|
146
|
+
};
|
|
147
|
+
message?: {
|
|
148
|
+
role: string;
|
|
149
|
+
content: any;
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
export interface ControlRequestEvent extends SessionEventEnvelope {
|
|
153
|
+
type: 'control_request';
|
|
154
|
+
request_id?: string;
|
|
155
|
+
request?: {
|
|
156
|
+
subtype?: string;
|
|
157
|
+
tool_use?: {
|
|
158
|
+
name: string;
|
|
159
|
+
input: Record<string, any>;
|
|
160
|
+
};
|
|
161
|
+
tool_name?: string;
|
|
162
|
+
input?: Record<string, any>;
|
|
163
|
+
model?: string;
|
|
164
|
+
[key: string]: any;
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
export interface ControlResponseEvent extends SessionEventEnvelope {
|
|
168
|
+
type: 'control_response';
|
|
169
|
+
response?: {
|
|
170
|
+
subtype?: string;
|
|
171
|
+
request_id?: string;
|
|
172
|
+
response?: {
|
|
173
|
+
behavior?: string;
|
|
174
|
+
message?: string;
|
|
175
|
+
updatedInput?: any;
|
|
176
|
+
updatedPermissions?: any[];
|
|
177
|
+
};
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
export interface ResultEvent extends SessionEventEnvelope {
|
|
181
|
+
type: 'result';
|
|
182
|
+
subtype?: string;
|
|
183
|
+
result?: string;
|
|
184
|
+
message?: {
|
|
185
|
+
role: string;
|
|
186
|
+
content: any;
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
export interface FileHistorySnapshotEvent extends SessionEventEnvelope {
|
|
190
|
+
type: 'file-history-snapshot';
|
|
191
|
+
filePath?: string;
|
|
192
|
+
content?: string;
|
|
193
|
+
[key: string]: any;
|
|
194
|
+
}
|
|
195
|
+
export interface LastPromptEvent extends SessionEventEnvelope {
|
|
196
|
+
type: 'last-prompt';
|
|
197
|
+
prompt?: string;
|
|
198
|
+
[key: string]: any;
|
|
199
|
+
}
|
|
200
|
+
export interface QueueOperationEvent extends SessionEventEnvelope {
|
|
201
|
+
type: 'queue-operation';
|
|
202
|
+
operation?: string;
|
|
203
|
+
[key: string]: any;
|
|
204
|
+
}
|
|
205
|
+
export type SessionEvent = UserEvent | AssistantEvent | SystemEvent | ProgressEvent | ControlRequestEvent | ControlResponseEvent | ResultEvent | FileHistorySnapshotEvent | LastPromptEvent | QueueOperationEvent;
|
|
206
|
+
export declare function isUserEvent(e: SessionEvent): e is UserEvent;
|
|
207
|
+
export declare function isAssistantEvent(e: SessionEvent): e is AssistantEvent;
|
|
208
|
+
export declare function isSystemEvent(e: SessionEvent): e is SystemEvent;
|
|
209
|
+
export declare function isProgressEvent(e: SessionEvent): e is ProgressEvent;
|
|
210
|
+
export declare function isControlRequestEvent(e: SessionEvent): e is ControlRequestEvent;
|
|
211
|
+
export declare function isControlResponseEvent(e: SessionEvent): e is ControlResponseEvent;
|
|
212
|
+
export declare function isResultEvent(e: SessionEvent): e is ResultEvent;
|
|
213
|
+
/** Get the session ID from either camelCase or snake_case field. */
|
|
214
|
+
export declare function getSessionId(e: SessionEvent): string;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SessionEvent — canonical superset type for all agent message formats.
|
|
3
|
+
*
|
|
4
|
+
* Discriminated union on `type`. Every raw JSONL event from any agent
|
|
5
|
+
* (Claude Code, future Codex/Gemini) maps 1:1 to a SessionEvent variant.
|
|
6
|
+
*
|
|
7
|
+
* See docs/session-event-schema.md for how this type was derived.
|
|
8
|
+
*/
|
|
9
|
+
// ═══════════════════════════════════════════════════════
|
|
10
|
+
// Type guards
|
|
11
|
+
// ═══════════════════════════════════════════════════════
|
|
12
|
+
export function isUserEvent(e) { return e.type === 'user'; }
|
|
13
|
+
export function isAssistantEvent(e) { return e.type === 'assistant'; }
|
|
14
|
+
export function isSystemEvent(e) { return e.type === 'system'; }
|
|
15
|
+
export function isProgressEvent(e) { return e.type === 'progress'; }
|
|
16
|
+
export function isControlRequestEvent(e) { return e.type === 'control_request'; }
|
|
17
|
+
export function isControlResponseEvent(e) { return e.type === 'control_response'; }
|
|
18
|
+
export function isResultEvent(e) { return e.type === 'result'; }
|
|
19
|
+
/** Get the session ID from either camelCase or snake_case field. */
|
|
20
|
+
export function getSessionId(e) {
|
|
21
|
+
return e.sessionId || e.session_id || '';
|
|
22
|
+
}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import type { SessionEvent } from './types.js';
|
|
2
|
+
export interface WireBase {
|
|
3
|
+
id: string;
|
|
4
|
+
sessionId: string;
|
|
5
|
+
timestamp: number;
|
|
6
|
+
rawEventUuid?: string;
|
|
7
|
+
_sidechain?: boolean;
|
|
8
|
+
_parentToolUseId?: string;
|
|
9
|
+
_agentId?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface WireUserMessage extends WireBase {
|
|
12
|
+
type: 'user_message';
|
|
13
|
+
text: string;
|
|
14
|
+
attachments?: WireAttachment[];
|
|
15
|
+
}
|
|
16
|
+
export interface WireAssistantMessage extends WireBase {
|
|
17
|
+
type: 'assistant_message';
|
|
18
|
+
text: string;
|
|
19
|
+
isPartial?: boolean;
|
|
20
|
+
}
|
|
21
|
+
export interface WireThinking extends WireBase {
|
|
22
|
+
type: 'thinking';
|
|
23
|
+
text: string;
|
|
24
|
+
}
|
|
25
|
+
export interface WireToolUse extends WireBase {
|
|
26
|
+
type: 'tool_result';
|
|
27
|
+
requestId: string;
|
|
28
|
+
toolName: string;
|
|
29
|
+
input?: any;
|
|
30
|
+
output: string;
|
|
31
|
+
isError: boolean;
|
|
32
|
+
isPending?: boolean;
|
|
33
|
+
}
|
|
34
|
+
export interface WireToolRequest extends WireBase {
|
|
35
|
+
type: 'tool_request';
|
|
36
|
+
requestId: string;
|
|
37
|
+
toolName: string;
|
|
38
|
+
input: any;
|
|
39
|
+
description?: string;
|
|
40
|
+
responded: boolean;
|
|
41
|
+
response?: 'approved' | 'denied';
|
|
42
|
+
}
|
|
43
|
+
export interface WireQuestion extends WireBase {
|
|
44
|
+
type: 'question';
|
|
45
|
+
requestId: string;
|
|
46
|
+
questions: WireQuestionItem[];
|
|
47
|
+
responded: boolean;
|
|
48
|
+
}
|
|
49
|
+
export interface WireQuestionItem {
|
|
50
|
+
question: string;
|
|
51
|
+
header?: string;
|
|
52
|
+
options: {
|
|
53
|
+
label: string;
|
|
54
|
+
description?: string;
|
|
55
|
+
}[];
|
|
56
|
+
allowFreeInput?: boolean;
|
|
57
|
+
multiSelect?: boolean;
|
|
58
|
+
}
|
|
59
|
+
export interface WirePlanApproval extends WireBase {
|
|
60
|
+
type: 'plan_approval';
|
|
61
|
+
requestId: string;
|
|
62
|
+
plan: string;
|
|
63
|
+
responded: boolean;
|
|
64
|
+
response?: 'approved' | 'denied';
|
|
65
|
+
}
|
|
66
|
+
export interface WireStatusUpdate extends WireBase {
|
|
67
|
+
type: 'status_update';
|
|
68
|
+
status: 'initializing' | 'idle' | 'active' | 'waiting' | 'error' | 'exited';
|
|
69
|
+
mode?: string;
|
|
70
|
+
model?: string;
|
|
71
|
+
}
|
|
72
|
+
export interface WireContextUsage extends WireBase {
|
|
73
|
+
type: 'context_usage';
|
|
74
|
+
model: string;
|
|
75
|
+
usedTokens: number;
|
|
76
|
+
totalTokens: number;
|
|
77
|
+
percent: number;
|
|
78
|
+
freePercent: number;
|
|
79
|
+
}
|
|
80
|
+
export interface WireSystemMessage extends WireBase {
|
|
81
|
+
type: 'system_message';
|
|
82
|
+
text: string;
|
|
83
|
+
subtype?: string;
|
|
84
|
+
}
|
|
85
|
+
export interface WireResult extends WireBase {
|
|
86
|
+
type: 'result';
|
|
87
|
+
subtype?: string;
|
|
88
|
+
summary?: string;
|
|
89
|
+
}
|
|
90
|
+
export interface WireAttachment {
|
|
91
|
+
media_type: string;
|
|
92
|
+
data: string;
|
|
93
|
+
name?: string;
|
|
94
|
+
text?: string;
|
|
95
|
+
}
|
|
96
|
+
export type WireMessage = WireUserMessage | WireAssistantMessage | WireThinking | WireToolUse | WireToolRequest | WireQuestion | WirePlanApproval | WireStatusUpdate | WireContextUsage | WireSystemMessage | WireResult;
|
|
97
|
+
/**
|
|
98
|
+
* Convert a SessionEvent to zero or more WireMessages for frontend display.
|
|
99
|
+
* This replaces mapIngressEvent() from claude-message-mapper.ts.
|
|
100
|
+
*
|
|
101
|
+
* @param uiSessionId - The UI-facing session ID (agent session ID)
|
|
102
|
+
* @param event - Raw SessionEvent
|
|
103
|
+
* @param pendingToolUses - Map tracking tool_use blocks for correlation
|
|
104
|
+
* @returns Array of WireMessages (may be empty for filtered events)
|
|
105
|
+
*/
|
|
106
|
+
export declare function toWireMessages(uiSessionId: string, event: SessionEvent, pendingToolUses: Map<string, {
|
|
107
|
+
name: string;
|
|
108
|
+
input: any;
|
|
109
|
+
}>): WireMessage[];
|
|
110
|
+
/**
|
|
111
|
+
* Try to parse /context output for token usage info.
|
|
112
|
+
* Returns a WireContextUsage message if found, null otherwise.
|
|
113
|
+
*/
|
|
114
|
+
export declare function tryParseContextUsageWire(sessionId: string, event: SessionEvent): WireContextUsage | null;
|
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WireMessage — slim projection of SessionEvent for frontend display.
|
|
3
|
+
* Replaces the AbstractMessage hierarchy and mapIngressEvent().
|
|
4
|
+
*/
|
|
5
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
6
|
+
// ═══════════════════════════════════════════════════════
|
|
7
|
+
// Helpers
|
|
8
|
+
// ═══════════════════════════════════════════════════════
|
|
9
|
+
function hasAnsi(text) {
|
|
10
|
+
return /\x1b\[/.test(text);
|
|
11
|
+
}
|
|
12
|
+
function getEventText(content) {
|
|
13
|
+
if (typeof content === 'string')
|
|
14
|
+
return content;
|
|
15
|
+
if (Array.isArray(content)) {
|
|
16
|
+
return content.map((b) => b.text || b.content || '').join('');
|
|
17
|
+
}
|
|
18
|
+
return '';
|
|
19
|
+
}
|
|
20
|
+
// ═══════════════════════════════════════════════════════
|
|
21
|
+
// toWireMessages — SessionEvent → WireMessage[]
|
|
22
|
+
// ═══════════════════════════════════════════════════════
|
|
23
|
+
/**
|
|
24
|
+
* Convert a SessionEvent to zero or more WireMessages for frontend display.
|
|
25
|
+
* This replaces mapIngressEvent() from claude-message-mapper.ts.
|
|
26
|
+
*
|
|
27
|
+
* @param uiSessionId - The UI-facing session ID (agent session ID)
|
|
28
|
+
* @param event - Raw SessionEvent
|
|
29
|
+
* @param pendingToolUses - Map tracking tool_use blocks for correlation
|
|
30
|
+
* @returns Array of WireMessages (may be empty for filtered events)
|
|
31
|
+
*/
|
|
32
|
+
export function toWireMessages(uiSessionId, event, pendingToolUses) {
|
|
33
|
+
const messages = [];
|
|
34
|
+
const now = Date.now();
|
|
35
|
+
if (event.type === 'assistant') {
|
|
36
|
+
const msg = event.message;
|
|
37
|
+
// Skip synthetic messages
|
|
38
|
+
if (msg.model === '<synthetic>')
|
|
39
|
+
return messages;
|
|
40
|
+
if (Array.isArray(msg.content)) {
|
|
41
|
+
for (const block of msg.content) {
|
|
42
|
+
if (block.type === 'thinking' && 'thinking' in block) {
|
|
43
|
+
messages.push({
|
|
44
|
+
id: uuidv4(),
|
|
45
|
+
sessionId: uiSessionId,
|
|
46
|
+
timestamp: now,
|
|
47
|
+
type: 'thinking',
|
|
48
|
+
text: block.thinking,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
else if (block.type === 'text') {
|
|
52
|
+
if (hasAnsi(block.text))
|
|
53
|
+
continue;
|
|
54
|
+
messages.push({
|
|
55
|
+
id: uuidv4(),
|
|
56
|
+
sessionId: uiSessionId,
|
|
57
|
+
timestamp: now,
|
|
58
|
+
type: 'assistant_message',
|
|
59
|
+
text: block.text,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
else if (block.type === 'tool_use' && 'id' in block && 'name' in block) {
|
|
63
|
+
pendingToolUses.set(block.id, {
|
|
64
|
+
name: block.name,
|
|
65
|
+
input: block.input || {},
|
|
66
|
+
});
|
|
67
|
+
messages.push({
|
|
68
|
+
id: block.id,
|
|
69
|
+
sessionId: uiSessionId,
|
|
70
|
+
timestamp: now,
|
|
71
|
+
type: 'tool_result',
|
|
72
|
+
requestId: block.id,
|
|
73
|
+
toolName: block.name,
|
|
74
|
+
input: block.input || {},
|
|
75
|
+
output: '',
|
|
76
|
+
isError: false,
|
|
77
|
+
isPending: true,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
else if (typeof msg.content === 'string') {
|
|
83
|
+
if (!hasAnsi(msg.content)) {
|
|
84
|
+
messages.push({
|
|
85
|
+
id: uuidv4(),
|
|
86
|
+
sessionId: uiSessionId,
|
|
87
|
+
timestamp: now,
|
|
88
|
+
type: 'assistant_message',
|
|
89
|
+
text: msg.content,
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
else if (event.type === 'control_request') {
|
|
95
|
+
const cr = event;
|
|
96
|
+
if (cr.request?.subtype === 'initialize')
|
|
97
|
+
return messages;
|
|
98
|
+
const toolUse = cr.request?.tool_use;
|
|
99
|
+
const toolName = toolUse?.name || cr.request?.tool_name || '';
|
|
100
|
+
const toolInput = toolUse?.input || cr.request?.input || {};
|
|
101
|
+
const controlRequestId = cr.request_id || cr.uuid || uuidv4();
|
|
102
|
+
if (toolName === 'AskUserQuestion') {
|
|
103
|
+
const rawQuestions = toolInput.questions || [];
|
|
104
|
+
const typedQuestions = rawQuestions.map((q) => ({
|
|
105
|
+
question: q.question || '',
|
|
106
|
+
header: q.header,
|
|
107
|
+
options: Array.isArray(q.options)
|
|
108
|
+
? q.options.map((o) => ({ label: o.label || '', description: o.description }))
|
|
109
|
+
: [],
|
|
110
|
+
allowFreeInput: true,
|
|
111
|
+
multiSelect: !!q.multiSelect,
|
|
112
|
+
}));
|
|
113
|
+
messages.push({
|
|
114
|
+
id: cr.uuid || controlRequestId,
|
|
115
|
+
sessionId: uiSessionId,
|
|
116
|
+
timestamp: now,
|
|
117
|
+
type: 'question',
|
|
118
|
+
requestId: controlRequestId,
|
|
119
|
+
questions: typedQuestions,
|
|
120
|
+
responded: false,
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
else if (toolName === 'ExitPlanMode') {
|
|
124
|
+
messages.push({
|
|
125
|
+
id: cr.uuid || controlRequestId,
|
|
126
|
+
sessionId: uiSessionId,
|
|
127
|
+
timestamp: now,
|
|
128
|
+
type: 'plan_approval',
|
|
129
|
+
requestId: controlRequestId,
|
|
130
|
+
plan: toolInput.plan || '',
|
|
131
|
+
responded: false,
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
const name = toolName || cr.request?.subtype || 'unknown';
|
|
136
|
+
const input = Object.keys(toolInput).length > 0 ? toolInput : (cr.request || {});
|
|
137
|
+
let description;
|
|
138
|
+
if (name === 'Bash' && input.command) {
|
|
139
|
+
description = input.command.substring(0, 200);
|
|
140
|
+
}
|
|
141
|
+
else if ((name === 'Edit' || name === 'Write') && input.file_path) {
|
|
142
|
+
description = input.file_path;
|
|
143
|
+
}
|
|
144
|
+
else if (name === 'Read' && input.file_path) {
|
|
145
|
+
description = input.file_path;
|
|
146
|
+
}
|
|
147
|
+
messages.push({
|
|
148
|
+
id: controlRequestId,
|
|
149
|
+
sessionId: uiSessionId,
|
|
150
|
+
timestamp: now,
|
|
151
|
+
type: 'tool_request',
|
|
152
|
+
requestId: controlRequestId,
|
|
153
|
+
toolName: name,
|
|
154
|
+
input,
|
|
155
|
+
description,
|
|
156
|
+
responded: false,
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
else if (event.type === 'user') {
|
|
161
|
+
const ue = event;
|
|
162
|
+
if (ue.isSynthetic)
|
|
163
|
+
return messages;
|
|
164
|
+
const content = ue.message.content;
|
|
165
|
+
// Handle tool_result blocks
|
|
166
|
+
if (Array.isArray(content)) {
|
|
167
|
+
const allToolResults = content.every((b) => b.type === 'tool_result');
|
|
168
|
+
if (allToolResults) {
|
|
169
|
+
for (const block of content) {
|
|
170
|
+
if (block.type === 'tool_result' && 'tool_use_id' in block) {
|
|
171
|
+
const toolUse = pendingToolUses.get(block.tool_use_id);
|
|
172
|
+
const toolName = toolUse?.name || 'unknown';
|
|
173
|
+
const output = typeof block.content === 'string'
|
|
174
|
+
? block.content
|
|
175
|
+
: Array.isArray(block.content)
|
|
176
|
+
? block.content.map((b) => b.text || '').join('')
|
|
177
|
+
: JSON.stringify(block.content || '');
|
|
178
|
+
messages.push({
|
|
179
|
+
id: uuidv4(),
|
|
180
|
+
sessionId: uiSessionId,
|
|
181
|
+
timestamp: now,
|
|
182
|
+
type: 'tool_result',
|
|
183
|
+
requestId: block.tool_use_id,
|
|
184
|
+
toolName,
|
|
185
|
+
input: toolUse?.input,
|
|
186
|
+
output: output.substring(0, 5000),
|
|
187
|
+
isError: !!block.is_error,
|
|
188
|
+
});
|
|
189
|
+
pendingToolUses.delete(block.tool_use_id);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
return messages;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
// Regular user message
|
|
196
|
+
const text = getEventText(content);
|
|
197
|
+
if (text.startsWith('/') || hasAnsi(text))
|
|
198
|
+
return messages;
|
|
199
|
+
if (/<command-name>|<local-command-caveat>|<command-message>/.test(text))
|
|
200
|
+
return messages;
|
|
201
|
+
const displayContent = typeof content === 'string' ? content : text;
|
|
202
|
+
if (displayContent) {
|
|
203
|
+
messages.push({
|
|
204
|
+
id: event.uuid || uuidv4(),
|
|
205
|
+
sessionId: uiSessionId,
|
|
206
|
+
timestamp: now,
|
|
207
|
+
type: 'user_message',
|
|
208
|
+
text: displayContent,
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
else if (event.type === 'result') {
|
|
213
|
+
const re = event;
|
|
214
|
+
messages.push({
|
|
215
|
+
id: re.uuid || uuidv4(),
|
|
216
|
+
sessionId: uiSessionId,
|
|
217
|
+
timestamp: now,
|
|
218
|
+
type: 'result',
|
|
219
|
+
subtype: re.subtype,
|
|
220
|
+
summary: re.result,
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
else if (event.type === 'system' && event.subtype === 'init') {
|
|
224
|
+
const se = event;
|
|
225
|
+
messages.push({
|
|
226
|
+
id: se.uuid || uuidv4(),
|
|
227
|
+
sessionId: uiSessionId,
|
|
228
|
+
timestamp: now,
|
|
229
|
+
type: 'status_update',
|
|
230
|
+
status: 'idle',
|
|
231
|
+
model: se.model,
|
|
232
|
+
mode: se.permissionMode,
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
else if (event.type === 'system' && event.subtype === 'status') {
|
|
236
|
+
const se = event;
|
|
237
|
+
if (se.permissionMode) {
|
|
238
|
+
messages.push({
|
|
239
|
+
id: se.uuid || uuidv4(),
|
|
240
|
+
sessionId: uiSessionId,
|
|
241
|
+
timestamp: now,
|
|
242
|
+
type: 'status_update',
|
|
243
|
+
status: 'idle',
|
|
244
|
+
mode: se.permissionMode,
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
// Skip: progress, file-history-snapshot, last-prompt, queue-operation, control_response
|
|
249
|
+
// Tag all produced messages with the source event UUID
|
|
250
|
+
const eventUuid = event.uuid;
|
|
251
|
+
if (eventUuid) {
|
|
252
|
+
for (const msg of messages) {
|
|
253
|
+
msg.rawEventUuid = eventUuid;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
return messages;
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Try to parse /context output for token usage info.
|
|
260
|
+
* Returns a WireContextUsage message if found, null otherwise.
|
|
261
|
+
*/
|
|
262
|
+
export function tryParseContextUsageWire(sessionId, event) {
|
|
263
|
+
if (event.type !== 'user' && event.type !== 'system')
|
|
264
|
+
return null;
|
|
265
|
+
let text = '';
|
|
266
|
+
const content = event.message?.content;
|
|
267
|
+
if (typeof content === 'string') {
|
|
268
|
+
text = content;
|
|
269
|
+
}
|
|
270
|
+
else if (Array.isArray(content)) {
|
|
271
|
+
text = content.map((b) => b.text || (typeof b.content === 'string' ? b.content : '') || '').join('');
|
|
272
|
+
}
|
|
273
|
+
if (!text || !hasAnsi(text))
|
|
274
|
+
return null;
|
|
275
|
+
const clean = text.replace(/\x1b\[[0-9;]*[a-zA-Z]/g, '');
|
|
276
|
+
const tokenMatch = clean.match(/([\w.-]+)\s*[·•]\s*([\d.]+)k?\/([\d.]+)k?\s*tokens?\s*\((\d+)%\)/);
|
|
277
|
+
if (!tokenMatch)
|
|
278
|
+
return null;
|
|
279
|
+
const model = tokenMatch[1];
|
|
280
|
+
const usedTokens = Math.round(parseFloat(tokenMatch[2]) * 1000);
|
|
281
|
+
const totalTokens = Math.round(parseFloat(tokenMatch[3]) * 1000);
|
|
282
|
+
const usedPercent = parseInt(tokenMatch[4], 10);
|
|
283
|
+
const freeMatch = clean.match(/Free\s+space:\s*([\d.]+)k?\s*\(([\d.]+)%\)/);
|
|
284
|
+
const freePercent = freeMatch ? parseFloat(freeMatch[2]) : (100 - usedPercent);
|
|
285
|
+
return {
|
|
286
|
+
id: uuidv4(),
|
|
287
|
+
sessionId,
|
|
288
|
+
timestamp: Date.now(),
|
|
289
|
+
type: 'context_usage',
|
|
290
|
+
model,
|
|
291
|
+
usedTokens,
|
|
292
|
+
totalTokens,
|
|
293
|
+
percent: usedPercent,
|
|
294
|
+
freePercent,
|
|
295
|
+
};
|
|
296
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export type ChangeOperation = 'create' | 'modify' | 'delete' | 'rename';
|
|
2
|
+
export interface FileChange {
|
|
3
|
+
changeId: string;
|
|
4
|
+
sessionId: string;
|
|
5
|
+
timestamp: number;
|
|
6
|
+
pid: number;
|
|
7
|
+
operation: ChangeOperation;
|
|
8
|
+
path: string;
|
|
9
|
+
oldPath?: string;
|
|
10
|
+
beforeHash: string | null;
|
|
11
|
+
afterHash: string | null;
|
|
12
|
+
fileSize: number;
|
|
13
|
+
isBinary: boolean;
|
|
14
|
+
}
|
|
15
|
+
/** JSON line event from the LD_PRELOAD shared library */
|
|
16
|
+
export interface PreloadEvent {
|
|
17
|
+
session_id: string;
|
|
18
|
+
op: 'write' | 'rename' | 'delete' | 'truncate';
|
|
19
|
+
path: string;
|
|
20
|
+
old_path?: string;
|
|
21
|
+
snapshot?: string;
|
|
22
|
+
file_existed: boolean;
|
|
23
|
+
ts: number;
|
|
24
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|