@juspay/shooter 1.0.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/hooks/notifier.cjs +117 -33
- package/.claude/settings.json +14 -14
- package/README.md +116 -84
- package/bin/shooter.cjs +471 -102
- package/build/client/_app/immutable/assets/{0.CM9Hl6d-.css → 0.BhZOCxO4.css} +1 -1
- package/build/client/_app/immutable/assets/0.BhZOCxO4.css.br +0 -0
- package/build/client/_app/immutable/assets/0.BhZOCxO4.css.gz +0 -0
- package/build/client/_app/immutable/assets/1.BYutk3aU.css +1 -0
- package/build/client/_app/immutable/assets/1.BYutk3aU.css.br +0 -0
- package/build/client/_app/immutable/assets/1.BYutk3aU.css.gz +0 -0
- package/build/client/_app/immutable/assets/2.CAShZ7lQ.css.gz +0 -0
- package/build/client/_app/immutable/assets/3.DGDHCVnW.css +1 -0
- package/build/client/_app/immutable/assets/3.DGDHCVnW.css.br +0 -0
- package/build/client/_app/immutable/assets/3.DGDHCVnW.css.gz +0 -0
- package/build/client/_app/immutable/assets/4.BFUut--w.css +1 -0
- package/build/client/_app/immutable/assets/4.BFUut--w.css.br +0 -0
- package/build/client/_app/immutable/assets/4.BFUut--w.css.gz +0 -0
- package/build/client/_app/immutable/assets/5.BTOx7yt7.css +1 -0
- package/build/client/_app/immutable/assets/5.BTOx7yt7.css.br +0 -0
- package/build/client/_app/immutable/assets/5.BTOx7yt7.css.gz +0 -0
- package/build/client/_app/immutable/assets/6.eZGZN-BF.css +1 -0
- package/build/client/_app/immutable/assets/6.eZGZN-BF.css.br +0 -0
- package/build/client/_app/immutable/assets/6.eZGZN-BF.css.gz +0 -0
- package/build/client/_app/immutable/assets/7.DwS5ZHBh.css +1 -0
- package/build/client/_app/immutable/assets/7.DwS5ZHBh.css.br +0 -0
- package/build/client/_app/immutable/assets/7.DwS5ZHBh.css.gz +0 -0
- package/build/client/_app/immutable/assets/ChatView.CwWbzIL-.css +1 -0
- package/build/client/_app/immutable/assets/ChatView.CwWbzIL-.css.br +0 -0
- package/build/client/_app/immutable/assets/ChatView.CwWbzIL-.css.gz +0 -0
- package/build/client/_app/immutable/assets/Phone.FQEfwCX2.css +1 -0
- package/build/client/_app/immutable/assets/Phone.FQEfwCX2.css.br +0 -0
- package/build/client/_app/immutable/assets/Phone.FQEfwCX2.css.gz +0 -0
- package/build/client/_app/immutable/assets/markdown.Dc-OSJWY.css +1 -0
- package/build/client/_app/immutable/assets/markdown.Dc-OSJWY.css.br +0 -0
- package/build/client/_app/immutable/assets/markdown.Dc-OSJWY.css.gz +0 -0
- package/build/client/_app/immutable/assets/xterm.DFuMZ0ql.css.gz +0 -0
- package/build/client/_app/immutable/chunks/B-K5Sh65.js +1 -0
- package/build/client/_app/immutable/chunks/B-K5Sh65.js.br +0 -0
- package/build/client/_app/immutable/chunks/B-K5Sh65.js.gz +0 -0
- package/build/client/_app/immutable/chunks/B5NAKyil.js +20 -0
- package/build/client/_app/immutable/chunks/B5NAKyil.js.br +0 -0
- package/build/client/_app/immutable/chunks/B5NAKyil.js.gz +0 -0
- package/build/client/_app/immutable/chunks/B8XegpSE.js +1 -0
- package/build/client/_app/immutable/chunks/B8XegpSE.js.br +0 -0
- package/build/client/_app/immutable/chunks/B8XegpSE.js.gz +0 -0
- package/build/client/_app/immutable/chunks/B8zoBsv3.js +6 -0
- package/build/client/_app/immutable/chunks/B8zoBsv3.js.br +0 -0
- package/build/client/_app/immutable/chunks/B8zoBsv3.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BLszSzTT.js +1 -0
- package/build/client/_app/immutable/chunks/BLszSzTT.js.br +0 -0
- package/build/client/_app/immutable/chunks/BLszSzTT.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BOYo8yTr.js +1 -0
- package/build/client/_app/immutable/chunks/BOYo8yTr.js.br +0 -0
- package/build/client/_app/immutable/chunks/BOYo8yTr.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BTGVxaYV.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BYqGCrTe.js +1 -0
- package/build/client/_app/immutable/chunks/BYqGCrTe.js.br +0 -0
- package/build/client/_app/immutable/chunks/BYqGCrTe.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BlxrFPDK.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Bu1aqm5j.js +1 -0
- package/build/client/_app/immutable/chunks/Bu1aqm5j.js.br +0 -0
- package/build/client/_app/immutable/chunks/Bu1aqm5j.js.gz +0 -0
- package/build/client/_app/immutable/chunks/C4mLaWWx.js +1 -0
- package/build/client/_app/immutable/chunks/C4mLaWWx.js.br +0 -0
- package/build/client/_app/immutable/chunks/C4mLaWWx.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CQjSATpv.js +61 -0
- package/build/client/_app/immutable/chunks/CQjSATpv.js.br +0 -0
- package/build/client/_app/immutable/chunks/CQjSATpv.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CSoRdFvv.js +1 -0
- package/build/client/_app/immutable/chunks/CSoRdFvv.js.br +0 -0
- package/build/client/_app/immutable/chunks/CSoRdFvv.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CZHsSL_X.js +1 -0
- package/build/client/_app/immutable/chunks/CZHsSL_X.js.br +0 -0
- package/build/client/_app/immutable/chunks/CZHsSL_X.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DLu6yJIZ.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DSU1n5N_.js +1 -0
- package/build/client/_app/immutable/chunks/DSU1n5N_.js.br +0 -0
- package/build/client/_app/immutable/chunks/DSU1n5N_.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DVkn4r72.js +1 -0
- package/build/client/_app/immutable/chunks/DVkn4r72.js.br +0 -0
- package/build/client/_app/immutable/chunks/DVkn4r72.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DjsDGxCa.js +41 -0
- package/build/client/_app/immutable/chunks/DjsDGxCa.js.br +0 -0
- package/build/client/_app/immutable/chunks/DjsDGxCa.js.gz +0 -0
- package/build/client/_app/immutable/chunks/PPVm8Dsz.js.gz +0 -0
- package/build/client/_app/immutable/chunks/UJOiqIYE.js +1 -0
- package/build/client/_app/immutable/chunks/UJOiqIYE.js.br +0 -0
- package/build/client/_app/immutable/chunks/UJOiqIYE.js.gz +0 -0
- package/build/client/_app/immutable/chunks/r0JawsZc.js +2 -0
- package/build/client/_app/immutable/chunks/r0JawsZc.js.br +0 -0
- package/build/client/_app/immutable/chunks/r0JawsZc.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.Z3zMnuSx.js +2 -0
- package/build/client/_app/immutable/entry/app.Z3zMnuSx.js.br +0 -0
- package/build/client/_app/immutable/entry/app.Z3zMnuSx.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.Dd-gIP4y.js +1 -0
- package/build/client/_app/immutable/entry/start.Dd-gIP4y.js.br +2 -0
- package/build/client/_app/immutable/entry/start.Dd-gIP4y.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.D2YR8tTD.js +1 -0
- package/build/client/_app/immutable/nodes/0.D2YR8tTD.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.D2YR8tTD.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.B3m6rO4C.js +1 -0
- package/build/client/_app/immutable/nodes/1.B3m6rO4C.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.B3m6rO4C.js.gz +0 -0
- package/build/client/_app/immutable/nodes/2.CyRB2euU.js +1 -0
- package/build/client/_app/immutable/nodes/2.CyRB2euU.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.CyRB2euU.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.3yohCM25.js +3 -0
- package/build/client/_app/immutable/nodes/3.3yohCM25.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.3yohCM25.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.DEAcwl7l.js +1 -0
- package/build/client/_app/immutable/nodes/4.DEAcwl7l.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.DEAcwl7l.js.gz +0 -0
- package/build/client/_app/immutable/nodes/5.C6bLGWQR.js +4 -0
- package/build/client/_app/immutable/nodes/5.C6bLGWQR.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.C6bLGWQR.js.gz +0 -0
- package/build/client/_app/immutable/nodes/6.ByTzlA2D.js +2 -0
- package/build/client/_app/immutable/nodes/6.ByTzlA2D.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.ByTzlA2D.js.gz +0 -0
- package/build/client/_app/immutable/nodes/7.BPMfwzd2.js +2 -0
- package/build/client/_app/immutable/nodes/7.BPMfwzd2.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.BPMfwzd2.js.gz +0 -0
- package/build/client/_app/version.json +1 -1
- package/build/client/_app/version.json.br +0 -0
- package/build/client/_app/version.json.gz +0 -0
- package/build/client/favicon.svg.gz +0 -0
- package/build/client/manifest.json +13 -0
- package/build/client/manifest.json.br +0 -0
- package/build/client/manifest.json.gz +0 -0
- package/build/pty-holder.cjs +37 -8
- package/build/server/chunks/0-Vk38tI2J.js +9 -0
- package/build/server/chunks/0-Vk38tI2J.js.map +1 -0
- package/build/server/chunks/1-BvYQX5MR.js +9 -0
- package/build/server/chunks/1-BvYQX5MR.js.map +1 -0
- package/build/server/chunks/2-Cl7R4Qk2.js +9 -0
- package/build/server/chunks/2-Cl7R4Qk2.js.map +1 -0
- package/build/server/chunks/3-Ck7ewhOX.js +9 -0
- package/build/server/chunks/3-Ck7ewhOX.js.map +1 -0
- package/build/server/chunks/4-CnDeRm2Z.js +9 -0
- package/build/server/chunks/4-CnDeRm2Z.js.map +1 -0
- package/build/server/chunks/5-IxitzEvN.js +9 -0
- package/build/server/chunks/5-IxitzEvN.js.map +1 -0
- package/build/server/chunks/6-CyZ3r1iS.js +9 -0
- package/build/server/chunks/6-CyZ3r1iS.js.map +1 -0
- package/build/server/chunks/7-BmI7du46.js +9 -0
- package/build/server/chunks/7-BmI7du46.js.map +1 -0
- package/build/server/chunks/Button-Cs1aE6ka.js +80 -0
- package/build/server/chunks/Button-Cs1aE6ka.js.map +1 -0
- package/build/server/chunks/EmptyState-DDFH1K8g.js +26 -0
- package/build/server/chunks/EmptyState-DDFH1K8g.js.map +1 -0
- package/build/server/chunks/Icon-CEUrotA6.js +36 -0
- package/build/server/chunks/Icon-CEUrotA6.js.map +1 -0
- package/build/server/chunks/Shimmer-DB8W1zt6.js +10 -0
- package/build/server/chunks/Shimmer-DB8W1zt6.js.map +1 -0
- package/build/server/chunks/_error.svelte-uCOJNxvr.js +39 -0
- package/build/server/chunks/_error.svelte-uCOJNxvr.js.map +1 -0
- package/build/server/chunks/_layout.svelte-CtWmEJwe.js +56 -0
- package/build/server/chunks/_layout.svelte-CtWmEJwe.js.map +1 -0
- package/build/server/chunks/_page.svelte-BcZaKdX9.js +45 -0
- package/build/server/chunks/_page.svelte-BcZaKdX9.js.map +1 -0
- package/build/server/chunks/_page.svelte-BdYynOck.js +85 -0
- package/build/server/chunks/_page.svelte-BdYynOck.js.map +1 -0
- package/build/server/chunks/_page.svelte-BgevQjq1.js +101 -0
- package/build/server/chunks/_page.svelte-BgevQjq1.js.map +1 -0
- package/build/server/chunks/_page.svelte-CVq6tRb3.js +550 -0
- package/build/server/chunks/_page.svelte-CVq6tRb3.js.map +1 -0
- package/build/server/chunks/_page.svelte-CxWcQ0Am.js +651 -0
- package/build/server/chunks/_page.svelte-CxWcQ0Am.js.map +1 -0
- package/build/server/chunks/_page.svelte-DO4oa_LY.js +44 -0
- package/build/server/chunks/_page.svelte-DO4oa_LY.js.map +1 -0
- package/build/server/chunks/{_server.ts-CbDRDIoP.js → _server.ts-BStnNIcq.js} +9 -11
- package/build/server/chunks/_server.ts-BStnNIcq.js.map +1 -0
- package/build/server/chunks/{_server.ts-DRVbgm6k.js → _server.ts-CAxsWKvS.js} +22 -25
- package/build/server/chunks/_server.ts-CAxsWKvS.js.map +1 -0
- package/build/server/chunks/{_server.ts-CPa6DgIt.js → _server.ts-COu0vNpd.js} +6 -6
- package/build/server/chunks/_server.ts-COu0vNpd.js.map +1 -0
- package/build/server/chunks/{_server.ts-C29xzfaw.js → _server.ts-CTpcLUH8.js} +10 -10
- package/build/server/chunks/_server.ts-CTpcLUH8.js.map +1 -0
- package/build/server/chunks/{_server.ts-D4MNi4cD.js → _server.ts-Cf84YIaW.js} +3 -3
- package/build/server/chunks/{_server.ts-D4MNi4cD.js.map → _server.ts-Cf84YIaW.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BL2FGb5Z.js → _server.ts-Ch-6iOHp.js} +99 -53
- package/build/server/chunks/_server.ts-Ch-6iOHp.js.map +1 -0
- package/build/server/chunks/_server.ts-CtH0dhUp.js +71 -0
- package/build/server/chunks/_server.ts-CtH0dhUp.js.map +1 -0
- package/build/server/chunks/_server.ts-DB_Kg97c.js +73 -0
- package/build/server/chunks/_server.ts-DB_Kg97c.js.map +1 -0
- package/build/server/chunks/{_server.ts-DfajWaqh.js → _server.ts-DV8zTCF9.js} +7 -9
- package/build/server/chunks/_server.ts-DV8zTCF9.js.map +1 -0
- package/build/server/chunks/_server.ts-DYpJImqd.js +99 -0
- package/build/server/chunks/_server.ts-DYpJImqd.js.map +1 -0
- package/build/server/chunks/{_server.ts-ColfDHW8.js → _server.ts-DYvb9ijZ.js} +21 -10
- package/build/server/chunks/_server.ts-DYvb9ijZ.js.map +1 -0
- package/build/server/chunks/{_server.ts-Cv_OrRuL.js → _server.ts-Deok2y88.js} +209 -34
- package/build/server/chunks/_server.ts-Deok2y88.js.map +1 -0
- package/build/server/chunks/{_server.ts-y9-WYDMa.js → _server.ts-WhTJBEJy.js} +5 -4
- package/build/server/chunks/{_server.ts-y9-WYDMa.js.map → _server.ts-WhTJBEJy.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BjOJsoy4.js → _server.ts-XzT2UHM1.js} +6 -5
- package/build/server/chunks/_server.ts-XzT2UHM1.js.map +1 -0
- package/build/server/chunks/{_server.ts-BgdjBZco.js → _server.ts-tSpgyl1D.js} +7 -5
- package/build/server/chunks/_server.ts-tSpgyl1D.js.map +1 -0
- package/build/server/chunks/{_server.ts-BihKSdj_.js → _server.ts-vekTmWAx.js} +8 -8
- package/build/server/chunks/_server.ts-vekTmWAx.js.map +1 -0
- package/build/server/chunks/{auth-CEgFis71.js → auth-DeCdZ83n.js} +2 -2
- package/build/server/chunks/{auth-CEgFis71.js.map → auth-DeCdZ83n.js.map} +1 -1
- package/build/server/chunks/client-BdGHe_hY.js +25 -0
- package/build/server/chunks/client-BdGHe_hY.js.map +1 -0
- package/build/server/chunks/client2-CCBGA-2V.js +7 -0
- package/build/server/chunks/client2-CCBGA-2V.js.map +1 -0
- package/build/server/chunks/error-DDXB3duW.js +12 -0
- package/build/server/chunks/error-DDXB3duW.js.map +1 -0
- package/build/server/chunks/{exports-CJ0Q5XmL.js → index-DwaY1cAm.js} +1111 -1634
- package/build/server/chunks/index-DwaY1cAm.js.map +1 -0
- package/build/server/chunks/index-server-CrDaL06Y.js +9 -0
- package/build/server/chunks/index-server-CrDaL06Y.js.map +1 -0
- package/build/server/chunks/index2-CgclKpUj.js +58 -0
- package/build/server/chunks/index2-CgclKpUj.js.map +1 -0
- package/build/server/chunks/{library-apns-BHxLmuIx.js → library-apns-BqJbvSKh.js} +4 -4
- package/build/server/chunks/library-apns-BqJbvSKh.js.map +1 -0
- package/build/server/chunks/markdown-W_mTBct0.js +8 -0
- package/build/server/chunks/markdown-W_mTBct0.js.map +1 -0
- package/build/server/chunks/opencode-db-path-DcfhJtJy.js +15 -0
- package/build/server/chunks/opencode-db-path-DcfhJtJy.js.map +1 -0
- package/build/server/chunks/{pty-manager-C0FhBiVq.js → pty-manager-BQVB7IVj.js} +155 -326
- package/build/server/chunks/pty-manager-BQVB7IVj.js.map +1 -0
- package/build/server/chunks/root-DDSnEAZv.js +1171 -0
- package/build/server/chunks/root-DDSnEAZv.js.map +1 -0
- package/build/server/chunks/{shared-server-BDY8jh20.js → shared-server-sSGG17Df.js} +2 -3
- package/build/server/chunks/{shared-server-BDY8jh20.js.map → shared-server-sSGG17Df.js.map} +1 -1
- package/build/server/chunks/state.svelte-hBbXlUak.js +11 -0
- package/build/server/chunks/state.svelte-hBbXlUak.js.map +1 -0
- package/build/server/chunks/stores-DHNzYNpX.js +28 -0
- package/build/server/chunks/stores-DHNzYNpX.js.map +1 -0
- package/build/server/index.js +1085 -2242
- package/build/server/index.js.map +1 -1
- package/build/server/manifest.js +39 -25
- package/build/server/manifest.js.map +1 -1
- package/package.json +32 -9
- package/scripts/fix-generated-types.sh +37 -0
- package/scripts/homebrew/shooter.rb +51 -0
- package/scripts/install.sh +348 -186
- package/scripts/setup.cjs +215 -45
- package/server.ts +114 -71
- package/src/app.css +12 -3
- package/src/app.d.ts +13 -20
- package/src/app.html +3 -2
- package/src/generated/types/API.ts +280 -0
- package/src/generated/types/APN.ts +186 -203
- package/src/generated/types/CLI.ts +18 -25
- package/src/generated/types/Client.ts +589 -0
- package/src/generated/types/Config.ts +53 -0
- package/src/generated/types/Holder.ts +638 -0
- package/src/generated/types/JWT.ts +39 -50
- package/src/generated/types/Notification.ts +426 -0
- package/src/generated/types/OpenCode.ts +356 -0
- package/src/generated/types/Sessions.ts +570 -0
- package/src/generated/types/Terminal.ts +2184 -2071
- package/src/generated/types/WsProtocol.ts +2004 -0
- package/src/generated/types/index.ts +9 -3
- package/src/lib/env.ts +29 -0
- package/src/lib/modules/client/common/cache.ts +10 -2
- package/src/lib/modules/client/common/config-guard.ts +37 -5
- package/src/lib/modules/client/common/error.ts +10 -0
- package/src/lib/modules/client/common/index.ts +6 -5
- package/src/lib/modules/client/common/markdown.ts +22 -1
- package/src/lib/modules/client/common/native-bridge.ts +28 -20
- package/src/lib/modules/client/common/time.ts +13 -11
- package/src/lib/modules/client/terminal/ChatView.svelte +354 -74
- package/src/lib/modules/client/terminal/CommandPalette.svelte +3 -2
- package/src/lib/modules/client/terminal/ConnectionStatus.svelte +7 -1
- package/src/lib/modules/client/terminal/LaunchSheet.svelte +147 -84
- package/src/lib/modules/client/terminal/QuickKeys.svelte +3 -1
- package/src/lib/modules/client/terminal/ShortcutsHelp.svelte +2 -5
- package/src/lib/modules/client/terminal/keyboard-shortcuts.ts +27 -24
- package/src/lib/modules/client/terminal/xterm-wrapper.ts +74 -45
- package/src/lib/modules/server/apn/library-apns.ts +3 -2
- package/src/lib/modules/server/apn/notification-history.ts +2 -13
- package/src/lib/modules/server/apn/notification-sessions.ts +3 -13
- package/src/lib/modules/server/apn/pending-requests.ts +3 -8
- package/src/lib/modules/server/apn/types.ts +5 -4
- package/src/lib/modules/server/cli/index.ts +3 -2
- package/src/lib/modules/server/fcm/fcm-service.ts +8 -6
- package/src/lib/modules/server/sessions/jsonl-parser.ts +3 -3
- package/src/lib/modules/server/sessions/jsonl-reader.ts +86 -26
- package/src/lib/modules/server/sessions/opencode-db-path.ts +26 -0
- package/src/lib/modules/server/sessions/opencode-reader.ts +13 -15
- package/src/lib/modules/server/sessions/process-detector.ts +103 -0
- package/src/lib/modules/server/sessions/types.ts +11 -22
- package/src/lib/modules/server/terminal/holder-client.ts +272 -248
- package/src/lib/modules/server/terminal/opencode-watcher.ts +547 -556
- package/src/lib/modules/server/terminal/pty-holder.cjs +37 -8
- package/src/lib/modules/server/terminal/pty-manager.ts +157 -115
- package/src/lib/modules/server/terminal/session-watcher.ts +6 -4
- package/src/lib/modules/server/terminal/terminal-store.ts +131 -128
- package/src/lib/modules/server/utils/error.ts +9 -0
- package/src/lib/modules/server/ws/events-handler.ts +12 -6
- package/src/lib/modules/server/ws/keepalive.ts +86 -69
- package/src/lib/modules/server/ws/server.ts +43 -37
- package/src/lib/modules/server/ws/session-handler.ts +332 -147
- package/src/lib/modules/server/ws/terminal-handler.ts +29 -17
- package/src/lib/modules/server/ws/ticket-store.ts +29 -26
- package/src/lib/theme.css +30 -0
- package/src/lib/types/config.ts +1 -6
- package/src/routes/+error.svelte +94 -0
- package/src/routes/+layout.svelte +66 -31
- package/src/routes/+page.svelte +25 -22
- package/src/routes/api/debug/+server.ts +3 -1
- package/src/routes/api/device-token/+server.ts +60 -60
- package/src/routes/api/health/+server.ts +81 -73
- package/src/routes/api/notify/+server.ts +115 -68
- package/src/routes/api/qr-config/+server.ts +30 -32
- package/src/routes/api/response/+server.ts +9 -4
- package/src/routes/api/sessions/+server.ts +15 -5
- package/src/routes/api/sessions/connect/+server.ts +125 -0
- package/src/routes/api/sessions/detect/+server.ts +27 -0
- package/src/routes/api/terminals/+server.ts +26 -24
- package/src/routes/api/terminals/[id]/+server.ts +13 -7
- package/src/routes/api/terminals/[id]/paste-image/+server.ts +54 -52
- package/src/routes/api/terminals/[id]/resize/+server.ts +6 -3
- package/src/routes/api/webhook/+server.ts +8 -10
- package/src/routes/api/ws-status/+server.ts +7 -5
- package/src/routes/api/ws-ticket/+server.ts +42 -41
- package/src/routes/config/+page.svelte +149 -75
- package/src/routes/project/+page.svelte +165 -35
- package/src/routes/session/[id]/+page.svelte +479 -283
- package/src/routes/terminals/+page.svelte +58 -45
- package/src/routes/terminals/[id]/+page.svelte +223 -91
- package/build/client/_app/immutable/assets/0.CM9Hl6d-.css.br +0 -0
- package/build/client/_app/immutable/assets/0.CM9Hl6d-.css.gz +0 -0
- package/build/client/_app/immutable/assets/3.C0uFg0IS.css +0 -1
- package/build/client/_app/immutable/assets/3.C0uFg0IS.css.br +0 -0
- package/build/client/_app/immutable/assets/3.C0uFg0IS.css.gz +0 -0
- package/build/client/_app/immutable/assets/4.cJuCkJKZ.css +0 -1
- package/build/client/_app/immutable/assets/4.cJuCkJKZ.css.br +0 -0
- package/build/client/_app/immutable/assets/4.cJuCkJKZ.css.gz +0 -0
- package/build/client/_app/immutable/assets/5.DRjApZQW.css +0 -1
- package/build/client/_app/immutable/assets/5.DRjApZQW.css.br +0 -0
- package/build/client/_app/immutable/assets/5.DRjApZQW.css.gz +0 -0
- package/build/client/_app/immutable/assets/6.AraZrY8I.css +0 -1
- package/build/client/_app/immutable/assets/6.AraZrY8I.css.br +0 -0
- package/build/client/_app/immutable/assets/6.AraZrY8I.css.gz +0 -0
- package/build/client/_app/immutable/assets/7.BCJ1IuMx.css +0 -1
- package/build/client/_app/immutable/assets/7.BCJ1IuMx.css.br +0 -0
- package/build/client/_app/immutable/assets/7.BCJ1IuMx.css.gz +0 -0
- package/build/client/_app/immutable/assets/ChatView.CsdBAOKx.css +0 -1
- package/build/client/_app/immutable/assets/ChatView.CsdBAOKx.css.br +0 -0
- package/build/client/_app/immutable/assets/ChatView.CsdBAOKx.css.gz +0 -0
- package/build/client/_app/immutable/assets/markdown.B0b5w2tq.css +0 -1
- package/build/client/_app/immutable/assets/markdown.B0b5w2tq.css.br +0 -0
- package/build/client/_app/immutable/assets/markdown.B0b5w2tq.css.gz +0 -0
- package/build/client/_app/immutable/chunks/BNJphC1q.js +0 -56
- package/build/client/_app/immutable/chunks/BNJphC1q.js.br +0 -0
- package/build/client/_app/immutable/chunks/BNJphC1q.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Bvk7mfPM.js +0 -1
- package/build/client/_app/immutable/chunks/Bvk7mfPM.js.br +0 -0
- package/build/client/_app/immutable/chunks/Bvk7mfPM.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CAokzuPQ.js +0 -1
- package/build/client/_app/immutable/chunks/CAokzuPQ.js.br +0 -0
- package/build/client/_app/immutable/chunks/CAokzuPQ.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CGLrx-H5.js +0 -1
- package/build/client/_app/immutable/chunks/CGLrx-H5.js.br +0 -0
- package/build/client/_app/immutable/chunks/CGLrx-H5.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CgCpWzEA.js +0 -1
- package/build/client/_app/immutable/chunks/CgCpWzEA.js.br +0 -0
- package/build/client/_app/immutable/chunks/CgCpWzEA.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Cjwk_cGO.js +0 -6
- package/build/client/_app/immutable/chunks/Cjwk_cGO.js.br +0 -0
- package/build/client/_app/immutable/chunks/Cjwk_cGO.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CtQ8EED1.js +0 -11
- package/build/client/_app/immutable/chunks/CtQ8EED1.js.br +0 -0
- package/build/client/_app/immutable/chunks/CtQ8EED1.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DERQCisl.js +0 -1
- package/build/client/_app/immutable/chunks/DERQCisl.js.br +0 -0
- package/build/client/_app/immutable/chunks/DERQCisl.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DKrg8TQs.js +0 -1
- package/build/client/_app/immutable/chunks/DKrg8TQs.js.br +0 -0
- package/build/client/_app/immutable/chunks/DKrg8TQs.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Dkkpz_4D.js +0 -126
- package/build/client/_app/immutable/chunks/Dkkpz_4D.js.br +0 -0
- package/build/client/_app/immutable/chunks/Dkkpz_4D.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DoczjQhA.js +0 -1
- package/build/client/_app/immutable/chunks/DoczjQhA.js.br +0 -0
- package/build/client/_app/immutable/chunks/DoczjQhA.js.gz +0 -0
- package/build/client/_app/immutable/chunks/RpcNruLP.js +0 -2
- package/build/client/_app/immutable/chunks/RpcNruLP.js.br +0 -0
- package/build/client/_app/immutable/chunks/RpcNruLP.js.gz +0 -0
- package/build/client/_app/immutable/chunks/a-St0Zwo.js +0 -1
- package/build/client/_app/immutable/chunks/a-St0Zwo.js.br +0 -0
- package/build/client/_app/immutable/chunks/a-St0Zwo.js.gz +0 -0
- package/build/client/_app/immutable/chunks/bo70OQUZ.js +0 -1
- package/build/client/_app/immutable/chunks/bo70OQUZ.js.br +0 -0
- package/build/client/_app/immutable/chunks/bo70OQUZ.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.QvGgdvTI.js +0 -2
- package/build/client/_app/immutable/entry/app.QvGgdvTI.js.br +0 -0
- package/build/client/_app/immutable/entry/app.QvGgdvTI.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.BntDNRMC.js +0 -1
- package/build/client/_app/immutable/entry/start.BntDNRMC.js.br +0 -0
- package/build/client/_app/immutable/entry/start.BntDNRMC.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.CzkdvJ7j.js +0 -1
- package/build/client/_app/immutable/nodes/0.CzkdvJ7j.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.CzkdvJ7j.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.MG1QhfrI.js +0 -1
- package/build/client/_app/immutable/nodes/1.MG1QhfrI.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.MG1QhfrI.js.gz +0 -0
- package/build/client/_app/immutable/nodes/2.B4MlOSh6.js +0 -1
- package/build/client/_app/immutable/nodes/2.B4MlOSh6.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.B4MlOSh6.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.DIwYkjDn.js +0 -3
- package/build/client/_app/immutable/nodes/3.DIwYkjDn.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.DIwYkjDn.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.D-cIe70D.js +0 -1
- package/build/client/_app/immutable/nodes/4.D-cIe70D.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.D-cIe70D.js.gz +0 -0
- package/build/client/_app/immutable/nodes/5.D7zPRe3L.js +0 -1
- package/build/client/_app/immutable/nodes/5.D7zPRe3L.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.D7zPRe3L.js.gz +0 -0
- package/build/client/_app/immutable/nodes/6.BB7QE48r.js +0 -2
- package/build/client/_app/immutable/nodes/6.BB7QE48r.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.BB7QE48r.js.gz +0 -0
- package/build/client/_app/immutable/nodes/7.D8mqsrZG.js +0 -2
- package/build/client/_app/immutable/nodes/7.D8mqsrZG.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.D8mqsrZG.js.gz +0 -0
- package/build/client/manifest.webmanifest +0 -1
- package/build/client/registerSW.js +0 -1
- package/build/client/registerSW.js.br +0 -0
- package/build/client/registerSW.js.gz +0 -0
- package/build/client/sw.js +0 -222
- package/build/client/sw.js.br +0 -0
- package/build/client/sw.js.gz +0 -0
- package/build/client/workbox-5119daf5.js +0 -3395
- package/build/client/workbox-5119daf5.js.br +0 -0
- package/build/client/workbox-5119daf5.js.gz +0 -0
- package/build/server/chunks/0-q2IUp76Y.js +0 -9
- package/build/server/chunks/0-q2IUp76Y.js.map +0 -1
- package/build/server/chunks/1-CU50G5wZ.js +0 -9
- package/build/server/chunks/1-CU50G5wZ.js.map +0 -1
- package/build/server/chunks/2-D01t9s8T.js +0 -9
- package/build/server/chunks/2-D01t9s8T.js.map +0 -1
- package/build/server/chunks/3-5PUQ04wC.js +0 -9
- package/build/server/chunks/3-5PUQ04wC.js.map +0 -1
- package/build/server/chunks/4-e7gywnSG.js +0 -9
- package/build/server/chunks/4-e7gywnSG.js.map +0 -1
- package/build/server/chunks/5-CA1SA6KZ.js +0 -9
- package/build/server/chunks/5-CA1SA6KZ.js.map +0 -1
- package/build/server/chunks/6-71H221sV.js +0 -9
- package/build/server/chunks/6-71H221sV.js.map +0 -1
- package/build/server/chunks/7-Bo-vmdyz.js +0 -9
- package/build/server/chunks/7-Bo-vmdyz.js.map +0 -1
- package/build/server/chunks/_layout.svelte-SFHOxs74.js +0 -132
- package/build/server/chunks/_layout.svelte-SFHOxs74.js.map +0 -1
- package/build/server/chunks/_page.svelte-B4w-2wD-.js +0 -120
- package/build/server/chunks/_page.svelte-B4w-2wD-.js.map +0 -1
- package/build/server/chunks/_page.svelte-B_qAXjkh.js +0 -213
- package/build/server/chunks/_page.svelte-B_qAXjkh.js.map +0 -1
- package/build/server/chunks/_page.svelte-CsF1_TRG.js +0 -50
- package/build/server/chunks/_page.svelte-CsF1_TRG.js.map +0 -1
- package/build/server/chunks/_page.svelte-DJC6U-P0.js +0 -68
- package/build/server/chunks/_page.svelte-DJC6U-P0.js.map +0 -1
- package/build/server/chunks/_page.svelte-DQ6HBtsz.js +0 -407
- package/build/server/chunks/_page.svelte-DQ6HBtsz.js.map +0 -1
- package/build/server/chunks/_page.svelte-LbhhjP21.js +0 -148
- package/build/server/chunks/_page.svelte-LbhhjP21.js.map +0 -1
- package/build/server/chunks/_server.ts-BL2FGb5Z.js.map +0 -1
- package/build/server/chunks/_server.ts-BgdjBZco.js.map +0 -1
- package/build/server/chunks/_server.ts-BihKSdj_.js.map +0 -1
- package/build/server/chunks/_server.ts-BjOJsoy4.js.map +0 -1
- package/build/server/chunks/_server.ts-C29xzfaw.js.map +0 -1
- package/build/server/chunks/_server.ts-CPa6DgIt.js.map +0 -1
- package/build/server/chunks/_server.ts-CbDRDIoP.js.map +0 -1
- package/build/server/chunks/_server.ts-Cl1OEWL4.js +0 -54
- package/build/server/chunks/_server.ts-Cl1OEWL4.js.map +0 -1
- package/build/server/chunks/_server.ts-ColfDHW8.js.map +0 -1
- package/build/server/chunks/_server.ts-Cv_OrRuL.js.map +0 -1
- package/build/server/chunks/_server.ts-DRVbgm6k.js.map +0 -1
- package/build/server/chunks/_server.ts-DfajWaqh.js.map +0 -1
- package/build/server/chunks/client-CxCatAKr.js +0 -255
- package/build/server/chunks/client-CxCatAKr.js.map +0 -1
- package/build/server/chunks/error.svelte-BqdwMWdK.js +0 -26
- package/build/server/chunks/error.svelte-BqdwMWdK.js.map +0 -1
- package/build/server/chunks/exports-CJ0Q5XmL.js.map +0 -1
- package/build/server/chunks/index2-DAxIoAO-.js +0 -36
- package/build/server/chunks/index2-DAxIoAO-.js.map +0 -1
- package/build/server/chunks/jsonl-parser-dmZU_Hyu.js +0 -137
- package/build/server/chunks/jsonl-parser-dmZU_Hyu.js.map +0 -1
- package/build/server/chunks/library-apns-BHxLmuIx.js.map +0 -1
- package/build/server/chunks/markdown-Bxrl3cCF.js +0 -1241
- package/build/server/chunks/markdown-Bxrl3cCF.js.map +0 -1
- package/build/server/chunks/pty-manager-C0FhBiVq.js.map +0 -1
- package/build/server/chunks/stores-D0HorpgL.js +0 -36
- package/build/server/chunks/stores-D0HorpgL.js.map +0 -1
|
@@ -0,0 +1,570 @@
|
|
|
1
|
+
import {
|
|
2
|
+
isJSON,
|
|
3
|
+
decodeString,
|
|
4
|
+
_decodeString,
|
|
5
|
+
decodeNumber,
|
|
6
|
+
_decodeNumber,
|
|
7
|
+
decodeArray,
|
|
8
|
+
_decodeArray,
|
|
9
|
+
decodeBoolean,
|
|
10
|
+
_decodeBoolean,
|
|
11
|
+
} from 'type-decoder';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* @type { SessionSource }
|
|
15
|
+
* @description Source tool that produced the session
|
|
16
|
+
*/
|
|
17
|
+
export type SessionSource = 'claude-code' | 'opencode';
|
|
18
|
+
|
|
19
|
+
export function decodeSessionSource(rawInput: unknown): SessionSource | null {
|
|
20
|
+
switch (rawInput) {
|
|
21
|
+
case 'claude-code':
|
|
22
|
+
case 'opencode':
|
|
23
|
+
return rawInput;
|
|
24
|
+
}
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export function _decodeSessionSource(rawInput: unknown): SessionSource | undefined {
|
|
29
|
+
switch (rawInput) {
|
|
30
|
+
case 'claude-code':
|
|
31
|
+
case 'opencode':
|
|
32
|
+
return rawInput;
|
|
33
|
+
}
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* @type { MessageRole }
|
|
39
|
+
* @description Role of the conversation message sender
|
|
40
|
+
*/
|
|
41
|
+
export type MessageRole = 'assistant' | 'system' | 'user';
|
|
42
|
+
|
|
43
|
+
export function decodeMessageRole(rawInput: unknown): MessageRole | null {
|
|
44
|
+
switch (rawInput) {
|
|
45
|
+
case 'assistant':
|
|
46
|
+
case 'system':
|
|
47
|
+
case 'user':
|
|
48
|
+
return rawInput;
|
|
49
|
+
}
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export function _decodeMessageRole(rawInput: unknown): MessageRole | undefined {
|
|
54
|
+
switch (rawInput) {
|
|
55
|
+
case 'assistant':
|
|
56
|
+
case 'system':
|
|
57
|
+
case 'user':
|
|
58
|
+
return rawInput;
|
|
59
|
+
}
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* @type { SessionInfo }
|
|
65
|
+
* @description Metadata about a single coding session
|
|
66
|
+
*/
|
|
67
|
+
export type SessionInfo = {
|
|
68
|
+
/**
|
|
69
|
+
* @description ISO 8601 timestamp when the session was created
|
|
70
|
+
* @type { string }
|
|
71
|
+
* @memberof SessionInfo
|
|
72
|
+
*/
|
|
73
|
+
created: string;
|
|
74
|
+
/**
|
|
75
|
+
* @description Git branch active during the session
|
|
76
|
+
* @type { string }
|
|
77
|
+
* @memberof SessionInfo
|
|
78
|
+
*/
|
|
79
|
+
gitBranch: string;
|
|
80
|
+
/**
|
|
81
|
+
* @description Unique session identifier
|
|
82
|
+
* @type { string }
|
|
83
|
+
* @memberof SessionInfo
|
|
84
|
+
*/
|
|
85
|
+
id: string;
|
|
86
|
+
/**
|
|
87
|
+
* @description Total number of messages in the session
|
|
88
|
+
* @type { number }
|
|
89
|
+
* @memberof SessionInfo
|
|
90
|
+
*/
|
|
91
|
+
messageCount: number;
|
|
92
|
+
/**
|
|
93
|
+
* @description ISO 8601 timestamp when the session was last modified
|
|
94
|
+
* @type { string }
|
|
95
|
+
* @memberof SessionInfo
|
|
96
|
+
*/
|
|
97
|
+
modified: string;
|
|
98
|
+
/**
|
|
99
|
+
* @description Absolute path to the project directory
|
|
100
|
+
* @type { string }
|
|
101
|
+
* @memberof SessionInfo
|
|
102
|
+
*/
|
|
103
|
+
projectPath: string;
|
|
104
|
+
/**
|
|
105
|
+
* @description Source tool that produced the session
|
|
106
|
+
* @type { SessionSource }
|
|
107
|
+
* @memberof SessionInfo
|
|
108
|
+
*/
|
|
109
|
+
source: SessionSource;
|
|
110
|
+
/**
|
|
111
|
+
* @description Brief summary of the session content
|
|
112
|
+
* @type { string }
|
|
113
|
+
* @memberof SessionInfo
|
|
114
|
+
*/
|
|
115
|
+
summary: string;
|
|
116
|
+
/**
|
|
117
|
+
* @description Display title for the session
|
|
118
|
+
* @type { string }
|
|
119
|
+
* @memberof SessionInfo
|
|
120
|
+
*/
|
|
121
|
+
title: string;
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
export function decodeSessionInfo(rawInput: unknown): SessionInfo | null {
|
|
125
|
+
if (isJSON(rawInput)) {
|
|
126
|
+
const decodedCreated = decodeString(rawInput['created']);
|
|
127
|
+
const decodedGitBranch = decodeString(rawInput['gitBranch']);
|
|
128
|
+
const decodedId = decodeString(rawInput['id']);
|
|
129
|
+
const decodedMessageCount = decodeNumber(rawInput['messageCount']);
|
|
130
|
+
const decodedModified = decodeString(rawInput['modified']);
|
|
131
|
+
const decodedProjectPath = decodeString(rawInput['projectPath']);
|
|
132
|
+
const decodedSource = decodeSessionSource(rawInput['source']);
|
|
133
|
+
const decodedSummary = decodeString(rawInput['summary']);
|
|
134
|
+
const decodedTitle = decodeString(rawInput['title']);
|
|
135
|
+
|
|
136
|
+
if (
|
|
137
|
+
decodedCreated === null ||
|
|
138
|
+
decodedGitBranch === null ||
|
|
139
|
+
decodedId === null ||
|
|
140
|
+
decodedMessageCount === null ||
|
|
141
|
+
decodedModified === null ||
|
|
142
|
+
decodedProjectPath === null ||
|
|
143
|
+
decodedSource === null ||
|
|
144
|
+
decodedSummary === null ||
|
|
145
|
+
decodedTitle === null
|
|
146
|
+
) {
|
|
147
|
+
return null;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
return {
|
|
151
|
+
created: decodedCreated,
|
|
152
|
+
gitBranch: decodedGitBranch,
|
|
153
|
+
id: decodedId,
|
|
154
|
+
messageCount: decodedMessageCount,
|
|
155
|
+
modified: decodedModified,
|
|
156
|
+
projectPath: decodedProjectPath,
|
|
157
|
+
source: decodedSource,
|
|
158
|
+
summary: decodedSummary,
|
|
159
|
+
title: decodedTitle,
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
return null;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* @type { ProjectGroup }
|
|
167
|
+
* @description A project with its associated sessions grouped together
|
|
168
|
+
*/
|
|
169
|
+
export type ProjectGroup = {
|
|
170
|
+
/**
|
|
171
|
+
* @description Absolute filesystem path to the project
|
|
172
|
+
* @type { string }
|
|
173
|
+
* @memberof ProjectGroup
|
|
174
|
+
*/
|
|
175
|
+
fullPath: string;
|
|
176
|
+
/**
|
|
177
|
+
* @description Unique project identifier
|
|
178
|
+
* @type { string }
|
|
179
|
+
* @memberof ProjectGroup
|
|
180
|
+
*/
|
|
181
|
+
id: string;
|
|
182
|
+
/**
|
|
183
|
+
* @description ISO 8601 timestamp of the most recently modified session
|
|
184
|
+
* @type { string }
|
|
185
|
+
* @memberof ProjectGroup
|
|
186
|
+
*/
|
|
187
|
+
lastModified: string;
|
|
188
|
+
/**
|
|
189
|
+
* @description Display name for the project
|
|
190
|
+
* @type { string }
|
|
191
|
+
* @memberof ProjectGroup
|
|
192
|
+
*/
|
|
193
|
+
name: string;
|
|
194
|
+
/**
|
|
195
|
+
* @description Total number of sessions in this project
|
|
196
|
+
* @type { number }
|
|
197
|
+
* @memberof ProjectGroup
|
|
198
|
+
*/
|
|
199
|
+
sessionCount: number;
|
|
200
|
+
/**
|
|
201
|
+
* @description Array of sessions belonging to this project
|
|
202
|
+
* @type { SessionInfo[] }
|
|
203
|
+
* @memberof ProjectGroup
|
|
204
|
+
*/
|
|
205
|
+
sessions: SessionInfo[];
|
|
206
|
+
};
|
|
207
|
+
|
|
208
|
+
export function decodeProjectGroup(rawInput: unknown): ProjectGroup | null {
|
|
209
|
+
if (isJSON(rawInput)) {
|
|
210
|
+
const decodedFullPath = decodeString(rawInput['fullPath']);
|
|
211
|
+
const decodedId = decodeString(rawInput['id']);
|
|
212
|
+
const decodedLastModified = decodeString(rawInput['lastModified']);
|
|
213
|
+
const decodedName = decodeString(rawInput['name']);
|
|
214
|
+
const decodedSessionCount = decodeNumber(rawInput['sessionCount']);
|
|
215
|
+
const decodedSessions = decodeArray(rawInput['sessions'], decodeSessionInfo);
|
|
216
|
+
|
|
217
|
+
if (
|
|
218
|
+
decodedFullPath === null ||
|
|
219
|
+
decodedId === null ||
|
|
220
|
+
decodedLastModified === null ||
|
|
221
|
+
decodedName === null ||
|
|
222
|
+
decodedSessionCount === null ||
|
|
223
|
+
decodedSessions === null
|
|
224
|
+
) {
|
|
225
|
+
return null;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
return {
|
|
229
|
+
fullPath: decodedFullPath,
|
|
230
|
+
id: decodedId,
|
|
231
|
+
lastModified: decodedLastModified,
|
|
232
|
+
name: decodedName,
|
|
233
|
+
sessionCount: decodedSessionCount,
|
|
234
|
+
sessions: decodedSessions,
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
return null;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* @type { TextPart }
|
|
242
|
+
* @description A plain text content block in a conversation message
|
|
243
|
+
*/
|
|
244
|
+
export type TextPart = {
|
|
245
|
+
/**
|
|
246
|
+
* @type { string }
|
|
247
|
+
* @memberof TextPart
|
|
248
|
+
*/
|
|
249
|
+
type: string;
|
|
250
|
+
/**
|
|
251
|
+
* @description The text content
|
|
252
|
+
* @type { string }
|
|
253
|
+
* @memberof TextPart
|
|
254
|
+
*/
|
|
255
|
+
content: string;
|
|
256
|
+
};
|
|
257
|
+
|
|
258
|
+
export function decodeTextPart(rawInput: unknown): TextPart | null {
|
|
259
|
+
if (isJSON(rawInput)) {
|
|
260
|
+
const decodedType = decodeString(rawInput['type']);
|
|
261
|
+
const decodedContent = decodeString(rawInput['content']);
|
|
262
|
+
|
|
263
|
+
if (decodedType === null || decodedContent === null) {
|
|
264
|
+
return null;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
return {
|
|
268
|
+
type: decodedType,
|
|
269
|
+
content: decodedContent,
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
return null;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
/**
|
|
276
|
+
* @type { ThinkingPart }
|
|
277
|
+
* @description An AI thinking/reasoning block in a conversation message
|
|
278
|
+
*/
|
|
279
|
+
export type ThinkingPart = {
|
|
280
|
+
/**
|
|
281
|
+
* @type { string }
|
|
282
|
+
* @memberof ThinkingPart
|
|
283
|
+
*/
|
|
284
|
+
type: string;
|
|
285
|
+
/**
|
|
286
|
+
* @description The thinking/reasoning content
|
|
287
|
+
* @type { string }
|
|
288
|
+
* @memberof ThinkingPart
|
|
289
|
+
*/
|
|
290
|
+
content: string;
|
|
291
|
+
};
|
|
292
|
+
|
|
293
|
+
export function decodeThinkingPart(rawInput: unknown): ThinkingPart | null {
|
|
294
|
+
if (isJSON(rawInput)) {
|
|
295
|
+
const decodedType = decodeString(rawInput['type']);
|
|
296
|
+
const decodedContent = decodeString(rawInput['content']);
|
|
297
|
+
|
|
298
|
+
if (decodedType === null || decodedContent === null) {
|
|
299
|
+
return null;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
return {
|
|
303
|
+
type: decodedType,
|
|
304
|
+
content: decodedContent,
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
return null;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
/**
|
|
311
|
+
* @type { ToolUsePart }
|
|
312
|
+
* @description A tool invocation block in a conversation message
|
|
313
|
+
*/
|
|
314
|
+
export type ToolUsePart = {
|
|
315
|
+
/**
|
|
316
|
+
* @type { string }
|
|
317
|
+
* @memberof ToolUsePart
|
|
318
|
+
*/
|
|
319
|
+
type: string;
|
|
320
|
+
/**
|
|
321
|
+
* @description Unique identifier for this tool use
|
|
322
|
+
* @type { string }
|
|
323
|
+
* @memberof ToolUsePart
|
|
324
|
+
*/
|
|
325
|
+
id: string;
|
|
326
|
+
/**
|
|
327
|
+
* @description Name of the tool being invoked
|
|
328
|
+
* @type { string }
|
|
329
|
+
* @memberof ToolUsePart
|
|
330
|
+
*/
|
|
331
|
+
toolName: string;
|
|
332
|
+
/**
|
|
333
|
+
* @description Tool input parameters as key-value pairs
|
|
334
|
+
* @type { ToolUsePartInput }
|
|
335
|
+
* @memberof ToolUsePart
|
|
336
|
+
*/
|
|
337
|
+
input: ToolUsePartInput;
|
|
338
|
+
};
|
|
339
|
+
|
|
340
|
+
export function decodeToolUsePart(rawInput: unknown): ToolUsePart | null {
|
|
341
|
+
if (isJSON(rawInput)) {
|
|
342
|
+
const decodedType = decodeString(rawInput['type']);
|
|
343
|
+
const decodedId = decodeString(rawInput['id']);
|
|
344
|
+
const decodedToolName = decodeString(rawInput['toolName']);
|
|
345
|
+
const decodedInput = decodeToolUsePartInput(rawInput['input']);
|
|
346
|
+
|
|
347
|
+
if (
|
|
348
|
+
decodedType === null ||
|
|
349
|
+
decodedId === null ||
|
|
350
|
+
decodedToolName === null ||
|
|
351
|
+
decodedInput === null
|
|
352
|
+
) {
|
|
353
|
+
return null;
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
return {
|
|
357
|
+
type: decodedType,
|
|
358
|
+
id: decodedId,
|
|
359
|
+
toolName: decodedToolName,
|
|
360
|
+
input: decodedInput,
|
|
361
|
+
};
|
|
362
|
+
}
|
|
363
|
+
return null;
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
/**
|
|
367
|
+
* @type { ToolUsePartInput }
|
|
368
|
+
* @description Tool input parameters as key-value pairs
|
|
369
|
+
*/
|
|
370
|
+
export type ToolUsePartInput = Record<string, unknown>;
|
|
371
|
+
|
|
372
|
+
export function decodeToolUsePartInput(rawInput: unknown): ToolUsePartInput | null {
|
|
373
|
+
if (isJSON(rawInput)) {
|
|
374
|
+
return {
|
|
375
|
+
...rawInput,
|
|
376
|
+
};
|
|
377
|
+
}
|
|
378
|
+
return null;
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
/**
|
|
382
|
+
* @type { ToolResultPart }
|
|
383
|
+
* @description A tool result block in a conversation message
|
|
384
|
+
*/
|
|
385
|
+
export type ToolResultPart = {
|
|
386
|
+
/**
|
|
387
|
+
* @type { string }
|
|
388
|
+
* @memberof ToolResultPart
|
|
389
|
+
*/
|
|
390
|
+
type: string;
|
|
391
|
+
/**
|
|
392
|
+
* @description Tool use ID this result corresponds to
|
|
393
|
+
* @type { string }
|
|
394
|
+
* @memberof ToolResultPart
|
|
395
|
+
*/
|
|
396
|
+
toolUseId: string;
|
|
397
|
+
/**
|
|
398
|
+
* @description Tool output text
|
|
399
|
+
* @type { string }
|
|
400
|
+
* @memberof ToolResultPart
|
|
401
|
+
*/
|
|
402
|
+
output: string;
|
|
403
|
+
/**
|
|
404
|
+
* @description Whether the tool execution resulted in an error
|
|
405
|
+
* @type { boolean }
|
|
406
|
+
* @memberof ToolResultPart
|
|
407
|
+
*/
|
|
408
|
+
isError: boolean;
|
|
409
|
+
};
|
|
410
|
+
|
|
411
|
+
export function decodeToolResultPart(rawInput: unknown): ToolResultPart | null {
|
|
412
|
+
if (isJSON(rawInput)) {
|
|
413
|
+
const decodedType = decodeString(rawInput['type']);
|
|
414
|
+
const decodedToolUseId = decodeString(rawInput['toolUseId']);
|
|
415
|
+
const decodedOutput = decodeString(rawInput['output']);
|
|
416
|
+
const decodedIsError = decodeBoolean(rawInput['isError']);
|
|
417
|
+
|
|
418
|
+
if (
|
|
419
|
+
decodedType === null ||
|
|
420
|
+
decodedToolUseId === null ||
|
|
421
|
+
decodedOutput === null ||
|
|
422
|
+
decodedIsError === null
|
|
423
|
+
) {
|
|
424
|
+
return null;
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
return {
|
|
428
|
+
type: decodedType,
|
|
429
|
+
toolUseId: decodedToolUseId,
|
|
430
|
+
output: decodedOutput,
|
|
431
|
+
isError: decodedIsError,
|
|
432
|
+
};
|
|
433
|
+
}
|
|
434
|
+
return null;
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
export type MessagePart =
|
|
438
|
+
| CMessagePartTextPart
|
|
439
|
+
| CMessagePartThinkingPart
|
|
440
|
+
| CMessagePartToolUsePart
|
|
441
|
+
| CMessagePartToolResultPart;
|
|
442
|
+
|
|
443
|
+
export function decodeMessagePart(rawInput: unknown): MessagePart | null {
|
|
444
|
+
const result: MessagePart | null =
|
|
445
|
+
decodeCMessagePartTextPart(rawInput) ??
|
|
446
|
+
decodeCMessagePartThinkingPart(rawInput) ??
|
|
447
|
+
decodeCMessagePartToolUsePart(rawInput) ??
|
|
448
|
+
decodeCMessagePartToolResultPart(rawInput);
|
|
449
|
+
|
|
450
|
+
return result;
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
export class CMessagePartTextPart {
|
|
454
|
+
data: TextPart;
|
|
455
|
+
constructor(data: TextPart) {
|
|
456
|
+
this.data = data;
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
export function decodeCMessagePartTextPart(rawInput: unknown): CMessagePartTextPart | null {
|
|
461
|
+
const result = decodeTextPart(rawInput);
|
|
462
|
+
if (result === null) {
|
|
463
|
+
return null;
|
|
464
|
+
}
|
|
465
|
+
return new CMessagePartTextPart(result);
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
export class CMessagePartThinkingPart {
|
|
469
|
+
data: ThinkingPart;
|
|
470
|
+
constructor(data: ThinkingPart) {
|
|
471
|
+
this.data = data;
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
export function decodeCMessagePartThinkingPart(rawInput: unknown): CMessagePartThinkingPart | null {
|
|
476
|
+
const result = decodeThinkingPart(rawInput);
|
|
477
|
+
if (result === null) {
|
|
478
|
+
return null;
|
|
479
|
+
}
|
|
480
|
+
return new CMessagePartThinkingPart(result);
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
export class CMessagePartToolUsePart {
|
|
484
|
+
data: ToolUsePart;
|
|
485
|
+
constructor(data: ToolUsePart) {
|
|
486
|
+
this.data = data;
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
export function decodeCMessagePartToolUsePart(rawInput: unknown): CMessagePartToolUsePart | null {
|
|
491
|
+
const result = decodeToolUsePart(rawInput);
|
|
492
|
+
if (result === null) {
|
|
493
|
+
return null;
|
|
494
|
+
}
|
|
495
|
+
return new CMessagePartToolUsePart(result);
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
export class CMessagePartToolResultPart {
|
|
499
|
+
data: ToolResultPart;
|
|
500
|
+
constructor(data: ToolResultPart) {
|
|
501
|
+
this.data = data;
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
export function decodeCMessagePartToolResultPart(
|
|
506
|
+
rawInput: unknown
|
|
507
|
+
): CMessagePartToolResultPart | null {
|
|
508
|
+
const result = decodeToolResultPart(rawInput);
|
|
509
|
+
if (result === null) {
|
|
510
|
+
return null;
|
|
511
|
+
}
|
|
512
|
+
return new CMessagePartToolResultPart(result);
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
/**
|
|
516
|
+
* @type { ConversationMessage }
|
|
517
|
+
* @description A single message in a coding session conversation
|
|
518
|
+
*/
|
|
519
|
+
export type ConversationMessage = {
|
|
520
|
+
/**
|
|
521
|
+
* @description Unique message identifier
|
|
522
|
+
* @type { string }
|
|
523
|
+
* @memberof ConversationMessage
|
|
524
|
+
*/
|
|
525
|
+
id: string;
|
|
526
|
+
/**
|
|
527
|
+
* @description Ordered content parts that make up the message body
|
|
528
|
+
* @type { MessagePart[] }
|
|
529
|
+
* @memberof ConversationMessage
|
|
530
|
+
*/
|
|
531
|
+
parts: MessagePart[];
|
|
532
|
+
/**
|
|
533
|
+
* @description Role of the message sender
|
|
534
|
+
* @type { MessageRole }
|
|
535
|
+
* @memberof ConversationMessage
|
|
536
|
+
*/
|
|
537
|
+
role: MessageRole;
|
|
538
|
+
/**
|
|
539
|
+
* @description ISO 8601 timestamp when the message was created
|
|
540
|
+
* @type { string }
|
|
541
|
+
* @memberof ConversationMessage
|
|
542
|
+
*/
|
|
543
|
+
timestamp: string;
|
|
544
|
+
};
|
|
545
|
+
|
|
546
|
+
export function decodeConversationMessage(rawInput: unknown): ConversationMessage | null {
|
|
547
|
+
if (isJSON(rawInput)) {
|
|
548
|
+
const decodedId = decodeString(rawInput['id']);
|
|
549
|
+
const decodedParts = decodeArray(rawInput['parts'], decodeMessagePart);
|
|
550
|
+
const decodedRole = decodeMessageRole(rawInput['role']);
|
|
551
|
+
const decodedTimestamp = decodeString(rawInput['timestamp']);
|
|
552
|
+
|
|
553
|
+
if (
|
|
554
|
+
decodedId === null ||
|
|
555
|
+
decodedParts === null ||
|
|
556
|
+
decodedRole === null ||
|
|
557
|
+
decodedTimestamp === null
|
|
558
|
+
) {
|
|
559
|
+
return null;
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
return {
|
|
563
|
+
id: decodedId,
|
|
564
|
+
parts: decodedParts,
|
|
565
|
+
role: decodedRole,
|
|
566
|
+
timestamp: decodedTimestamp,
|
|
567
|
+
};
|
|
568
|
+
}
|
|
569
|
+
return null;
|
|
570
|
+
}
|