@organizaone/o1-code 0.20.3 → 0.21.1
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/bundled/qc-helper/docs/common-workflow.md +2 -2
- package/bundled/qc-helper/docs/extension/getting-started-extensions.md +1 -1
- package/bundled/qc-helper/docs/features/commands.md +16 -1
- package/chunks/{MaxSizedBox-EZERR2VP.js → MaxSizedBox-ICHZQXOC.js} +21 -20
- package/chunks/{StandaloneSessionPicker-JNWXQZWK.js → StandaloneSessionPicker-NUNGDLEK.js} +42 -41
- package/chunks/{acp-subagent-executor-SWU2HEK2.js → acp-subagent-executor-2QB2XKHF.js} +19 -19
- package/chunks/{acpAgent-KBGZCBFV.js → acpAgent-7HJVGVK7.js} +114 -112
- package/chunks/{agent-IXG5INIW.js → agent-NRULZSLB.js} +9 -9
- package/chunks/{agent-headless-SY563G4Y.js → agent-headless-5KFFNZAU.js} +9 -9
- package/chunks/{all-providers-GEEOO5NG.js → all-providers-PBLJP7ZP.js} +2 -2
- package/chunks/{anthropicContentGenerator-QPZOYWP7.js → anthropicContentGenerator-S5N2I7GF.js} +5 -5
- package/chunks/{bridge-RCKHVFJ3.js → bridge-QIZ7R2BN.js} +19 -19
- package/chunks/{ca-6DKW436A.js → ca-EMDHXMDN.js} +6 -2
- package/chunks/{chunk-SKAH52QV.js → chunk-2AVSJ6YM.js} +1 -1
- package/chunks/chunk-2EFFEOP5.js +5043 -0
- package/chunks/{chunk-ZJ3GFM2U.js → chunk-2J4JQ2N4.js} +1 -1
- package/chunks/{chunk-RATJ5RDQ.js → chunk-3EWATM2M.js} +2 -2
- package/chunks/{chunk-LNWFWFJ4.js → chunk-3OU2KLMT.js} +3 -3
- package/chunks/{chunk-3DMPE7V6.js → chunk-3VKECQVW.js} +1 -1
- package/chunks/{chunk-L5MVOG3F.js → chunk-3ZAL7E5H.js} +1 -1
- package/chunks/{chunk-F5OH2PNI.js → chunk-4FUZP37P.js} +1 -1
- package/chunks/{chunk-XVYLALS6.js → chunk-4MTOCDP5.js} +2 -2
- package/chunks/{chunk-GNZQPESW.js → chunk-4NYLN5W2.js} +1 -1
- package/chunks/{chunk-ME6C5KAY.js → chunk-4PGPOGT5.js} +1 -1
- package/chunks/{chunk-Q6RYNLZS.js → chunk-63JTYQRD.js} +2 -2
- package/chunks/{chunk-WILZABQC.js → chunk-6NJGVFEF.js} +1 -1
- package/chunks/{chunk-CX4XYMNF.js → chunk-7CGD5SXJ.js} +7 -7
- package/chunks/{chunk-RI3VQTAX.js → chunk-7OP457SY.js} +3 -3
- package/chunks/{chunk-EZ3OQPXV.js → chunk-7T5XLH7W.js} +2 -2
- package/chunks/{chunk-2DFFYJGZ.js → chunk-AB76QMX5.js} +4 -4
- package/chunks/{chunk-2HLFWCUP.js → chunk-AG4TACE2.js} +1 -1
- package/chunks/{chunk-AP5DFANZ.js → chunk-ALOGVVOM.js} +5 -5
- package/chunks/{chunk-7EXAMT2I.js → chunk-AT7KYJE5.js} +2 -2
- package/chunks/{chunk-Q6OW4P7O.js → chunk-AVKRSELA.js} +1 -1
- package/chunks/{chunk-LYYJBCAH.js → chunk-B76JTBXH.js} +3 -3
- package/chunks/{chunk-SLIL7BEZ.js → chunk-BENP2MGF.js} +2 -2
- package/chunks/{chunk-A5JZKZ6Q.js → chunk-BJSDPW6T.js} +5 -5
- package/chunks/{chunk-FG53SLIP.js → chunk-BJVBQEFV.js} +2 -2
- package/chunks/{chunk-N2JEPFUF.js → chunk-BNOGS4FX.js} +3 -3
- package/chunks/{chunk-LFMK5B3W.js → chunk-BPJSYUTS.js} +1 -1
- package/chunks/{chunk-KSXF26WD.js → chunk-CKZ4CWXJ.js} +2 -2
- package/chunks/{chunk-VJWTK75T.js → chunk-CQZV6HQY.js} +8 -8
- package/chunks/{chunk-RBNHPCLB.js → chunk-CWJUH3EP.js} +2 -2
- package/chunks/{chunk-E6FTSEFU.js → chunk-DYLKYM5L.js} +3 -3
- package/chunks/{chunk-HDVWETU2.js → chunk-EQQRWB52.js} +12 -12
- package/chunks/{chunk-GLHPVNIZ.js → chunk-EULKBEV3.js} +4 -4
- package/chunks/{chunk-YPR43UHE.js → chunk-H7FQO2AI.js} +39 -39
- package/chunks/{chunk-GVELMYCX.js → chunk-HB6UJVMB.js} +1 -1
- package/chunks/{chunk-RHZORPOC.js → chunk-HHESWHDQ.js} +3 -3
- package/chunks/{chunk-PFOXLZCP.js → chunk-I6WVVBQB.js} +9 -9
- package/chunks/{chunk-23MB6DC2.js → chunk-I762YPHY.js} +5 -5
- package/chunks/{chunk-FDKCSPGD.js → chunk-ISCYNEVI.js} +13 -13
- package/chunks/{chunk-VWOLZXSN.js → chunk-JDEVIYN7.js} +4 -4
- package/chunks/{chunk-KV5NXG3S.js → chunk-JTFJDKOH.js} +2 -2
- package/chunks/{chunk-R3QWLJJF.js → chunk-K2G3JOA2.js} +13 -13
- package/chunks/{chunk-MBJJLPMX.js → chunk-KAKO4FTG.js} +32 -30
- package/chunks/{chunk-QKL4LXBU.js → chunk-L4O2KABK.js} +8 -8
- package/chunks/chunk-LRHUT6ZW.js +880 -0
- package/chunks/{chunk-ZKBTWORX.js → chunk-LY7DCKUQ.js} +2 -2
- package/chunks/{chunk-VQYBOX6T.js → chunk-M433S7FB.js} +2 -2
- package/chunks/{chunk-4B3VOPKW.js → chunk-MDNLB3UK.js} +5 -5
- package/chunks/{chunk-GDRFBPU5.js → chunk-MGEJU367.js} +1 -1
- package/chunks/{chunk-LPP5I5D7.js → chunk-MHMNVRN7.js} +3 -3
- package/chunks/{chunk-2FDD7R4M.js → chunk-MIM5ENJO.js} +6 -6
- package/chunks/{chunk-7UME3BB3.js → chunk-MLTPPT33.js} +1 -1
- package/chunks/{chunk-EW76FWYR.js → chunk-MVA53QCQ.js} +1 -1
- package/chunks/{chunk-OMBM5PM7.js → chunk-MW7MEKI4.js} +6 -6
- package/chunks/{chunk-6F6GDT4W.js → chunk-N37OR5HF.js} +9 -9
- package/chunks/{chunk-PRHAZ5WA.js → chunk-N4TE7U5S.js} +1 -1
- package/chunks/{chunk-CEQQIJ45.js → chunk-NLC655HE.js} +2 -2
- package/chunks/{chunk-VLAUXCTV.js → chunk-NYIPXPK4.js} +4 -4
- package/chunks/{chunk-AY7TZ56V.js → chunk-OCPL4PPW.js} +86 -43
- package/chunks/{chunk-TR4DEKSP.js → chunk-OMVVKQSW.js} +2 -2
- package/chunks/{chunk-P6YI66SA.js → chunk-ONHO7K3C.js} +1 -1
- package/chunks/{chunk-3TLBRQSX.js → chunk-P2QG25IN.js} +1 -1
- package/chunks/{chunk-VFSP4ZUZ.js → chunk-P7RO4QSF.js} +28 -938
- package/chunks/{chunk-5KLLG2CZ.js → chunk-Q4OQQMBM.js} +1 -1
- package/chunks/{chunk-NTUVIB2G.js → chunk-R5HO4EJV.js} +1 -1
- package/chunks/{chunk-TBVRYAVY.js → chunk-RRR7ZLSX.js} +3 -3
- package/chunks/{chunk-CN7MCAV5.js → chunk-RV5JQNMP.js} +4 -4
- package/chunks/{chunk-4ABEICOS.js → chunk-S3PGH3X6.js} +1 -1
- package/chunks/{chunk-UCXFJKY7.js → chunk-S445OAV2.js} +2 -2
- package/chunks/{chunk-QTKR2GD7.js → chunk-SLYDITP6.js} +1 -1
- package/chunks/{chunk-IUFEZVEZ.js → chunk-SMTIRSBP.js} +3 -3
- package/chunks/{chunk-DSAFH5CY.js → chunk-TJQTTY4F.js} +1 -1
- package/chunks/{chunk-4WQOE2IB.js → chunk-TUHTOEMJ.js} +2 -2
- package/chunks/{chunk-CIQ2CLQ2.js → chunk-TW6YBXRS.js} +1 -1
- package/chunks/{chunk-RTTJOKFS.js → chunk-UGGPKFNW.js} +10 -10
- package/chunks/{chunk-KMIBUJJV.js → chunk-UMBH4KSJ.js} +3 -3
- package/chunks/{chunk-LKRP2YCP.js → chunk-V44ZGIAX.js} +48 -48
- package/chunks/{chunk-MDJ4DEEJ.js → chunk-VACXX3OU.js} +1 -1
- package/chunks/chunk-VDSY3ODQ.js +2405 -0
- package/chunks/{chunk-6YH4HZFZ.js → chunk-VEWUBZZA.js} +3 -3
- package/chunks/{chunk-TQ65TNCT.js → chunk-VKDFX366.js} +1 -1
- package/chunks/{chunk-CH4NSUSE.js → chunk-VPHE2AYS.js} +9 -9
- package/chunks/{chunk-GFSDXCA6.js → chunk-WBH5MEDL.js} +3 -3
- package/chunks/{chunk-FBHAG372.js → chunk-WG3EVBEA.js} +3 -3
- package/chunks/{chunk-K6XWNSG7.js → chunk-WMLBM6FX.js} +1 -1
- package/chunks/{chunk-SAA7VWPH.js → chunk-XHAP6TX4.js} +1 -1
- package/chunks/{chunk-QAWZUGTG.js → chunk-YGZY5CAA.js} +2 -2
- package/chunks/chunk-YQQ7QFC5.js +945 -0
- package/chunks/{chunk-2GPRQW4P.js → chunk-YSLT46MG.js} +2 -2
- package/chunks/{chunk-FRXXYR4K.js → chunk-Z26JZJS7.js} +2 -2
- package/chunks/{chunk-URHRCX4D.js → chunk-ZCFFGFMQ.js} +2 -2
- package/chunks/{codex-subagent-executor-WNFU67G7.js → codex-subagent-executor-C5LFSQDT.js} +19 -19
- package/chunks/{contextCommand-6LFH2YPP.js → contextCommand-KQVTLA7W.js} +19 -19
- package/chunks/{core-runtime-MFXIMNSH.js → core-runtime-YR4XELUK.js} +17 -17
- package/chunks/{create-sub-session-NUE3R5WZ.js → create-sub-session-ULOGZEVK.js} +18 -18
- package/chunks/{daemon-git-worktree-guard-PQ3SE2KI.js → daemon-git-worktree-guard-CWE46OLL.js} +17 -17
- package/chunks/{daemon-status-provider-Z5OUOPTR.js → daemon-status-provider-ILG5O2E3.js} +24 -24
- package/chunks/{daemon-trust-policy-TX4QULOJ.js → daemon-trust-policy-FLL572SJ.js} +24 -24
- package/chunks/{daemon-trust-policy-monitor-CNBHLZT7.js → daemon-trust-policy-monitor-ZZD77SCF.js} +24 -24
- package/chunks/{de-E75VCQRZ.js → de-OMV463ND.js} +6 -2
- package/chunks/{deferred-core-runtime-XDE6DRBZ.js → deferred-core-runtime-PKKIUQY7.js} +17 -17
- package/chunks/{edit-QONTKKDS.js → edit-YY7OEZD4.js} +11 -11
- package/chunks/{en-TS3SF6KR.js → en-EEVIOXSR.js} +6 -2
- package/chunks/{enterPlanMode-A3NZ5LMR.js → enterPlanMode-RQJNH7BZ.js} +9 -9
- package/chunks/{environment-6FE7XGAC.js → environment-2KUMDVHJ.js} +19 -19
- package/chunks/{errors-R5Y7H2GW.js → errors-YG2MGIUH.js} +19 -19
- package/chunks/{execution-tool-BTPXNHGK.js → execution-tool-KO3S2ZMM.js} +11 -11
- package/chunks/{execution-worker-Q2WOKDYJ.js → execution-worker-T46PXAUX.js} +14 -14
- package/chunks/{exitPlanMode-FWVAIF2G.js → exitPlanMode-TZTA7KK3.js} +9 -9
- package/chunks/{fast-path-ADV46XXY.js → fast-path-NX5R5TEE.js} +5 -5
- package/chunks/foreground-runner-B37S5XWE.js +1496 -0
- package/chunks/{fr-KWQ6T7MX.js → fr-ZHVJMULM.js} +6 -2
- package/chunks/{glob-7C5LFIFY.js → glob-G4O2HUPX.js} +9 -9
- package/chunks/{goal-tools-ZBOA3S6T.js → goal-tools-LPZGCCGC.js} +9 -9
- package/chunks/{handleAutoUpdate-OZFXXZGE.js → handleAutoUpdate-FZZY67SI.js} +20 -20
- package/chunks/{i18n-ETDHGUAS.js → i18n-TER6KDYN.js} +18 -18
- package/chunks/{initializer-3TGPNDS6.js → initializer-WMM3T4IM.js} +26 -25
- package/chunks/{installationInfo-53FUD2SP.js → installationInfo-FTE33LPP.js} +17 -17
- package/chunks/{ja-NLAMHYSV.js → ja-MQ3LTDXD.js} +6 -2
- package/chunks/{list-D2SFACP2.js → list-CPFDTK72.js} +26 -26
- package/chunks/{llm-6JBUAXKT.js → llm-JEZJRZJX.js} +70 -70
- package/chunks/{llm-content-generator-X2YXGOCB.js → llm-content-generator-IUI5TQIN.js} +4 -4
- package/chunks/{loadedSettingsAdapter-S2OW76SD.js → loadedSettingsAdapter-FPRQ7O5E.js} +24 -24
- package/chunks/{local-execution-environment-TCIIK3JA.js → local-execution-environment-AY4TUGMD.js} +14 -14
- package/chunks/{loggingContentGenerator-GDJB7R3H.js → loggingContentGenerator-H4K7K3LL.js} +9 -9
- package/chunks/{managed-npm-update-I3YZBNY7.js → managed-npm-update-V7VEVX6I.js} +17 -17
- package/chunks/{mcp-6GZRGYAG.js → mcp-7PZ6AUCD.js} +24 -24
- package/chunks/{model-call-collection-YAUSBU5N.js → model-call-collection-RJ73WWKF.js} +1 -1
- package/chunks/{model-configuration-SMKT6PVP.js → model-configuration-AG546PXF.js} +25 -25
- package/chunks/{modelConfigUtils-FEON5T3Z.js → modelConfigUtils-4OUURPZ6.js} +19 -19
- package/chunks/{monitor-RNGWRP7C.js → monitor-7T2C33DH.js} +9 -9
- package/chunks/{nonInteractiveCli-5N55OFDF.js → nonInteractiveCli-JH3JQDRV.js} +62 -60
- package/chunks/{nonInteractiveToolExecutor-EURXYN6L.js → nonInteractiveToolExecutor-D5QJW7E6.js} +10 -10
- package/chunks/{notebook-edit-DMEOTACP.js → notebook-edit-2G52PPMW.js} +10 -10
- package/chunks/{omni-A6J5PKS7.js → omni-QYW5TRUE.js} +9 -9
- package/chunks/{openaiContentGenerator-2ZU6S23B.js → openaiContentGenerator-M63PIBVK.js} +6 -6
- package/chunks/{openaiResponsesContentGenerator-4RE34Y4W.js → openaiResponsesContentGenerator-GYKYO3UN.js} +4 -4
- package/chunks/{processUtils-VBBXC2KT.js → processUtils-ZXHN3JVL.js} +2 -2
- package/chunks/{prompt-terminal-ledger-6DE5MRV3.js → prompt-terminal-ledger-VYDSE5AW.js} +18 -18
- package/chunks/{pt-F6OOJLH6.js → pt-QYD5TZDW.js} +7 -2
- package/chunks/pty-host-process-PKCVFICX.js +29 -0
- package/chunks/{reactive-degrade-S3SQRQ4D.js → reactive-degrade-OMVZTLAX.js} +8 -8
- package/chunks/{read-file-HDY4MSJE.js → read-file-ZSZXWENP.js} +1 -1
- package/chunks/{resumeHistoryUtils-BX3CLUM7.js → resumeHistoryUtils-TZ22ZUX7.js} +26 -25
- package/chunks/{ripGrep-4E63BMST.js → ripGrep-LXMRMOTC.js} +1 -1
- package/chunks/{ru-QXDK3EHQ.js → ru-CSBDIXDS.js} +6 -2
- package/chunks/{run-o1-code-serve-FR3YWC7D.js → run-o1-code-serve-2ZM6TNAJ.js} +49 -49
- package/chunks/{sandboxConfig-7D6ZZBBU.js → sandboxConfig-N4V3RKXB.js} +17 -17
- package/chunks/{scheduled-tasks-FEV7YG7C.js → scheduled-tasks-YJHWVMUP.js} +22 -22
- package/chunks/{scheduler-OOZEZWGT.js → scheduler-S7IIBQUG.js} +19 -19
- package/chunks/{serve-5CZRH2NI.js → serve-5JQUI7RR.js} +24 -24
- package/chunks/{server-AIIM3MRX.js → server-3BXWI3A3.js} +141 -141
- package/chunks/{session-FZ3NBZYB.js → session-GTZ4UFHV.js} +1 -1
- package/chunks/{session-5IHMC2GA.js → session-PSL2EVMQ.js} +63 -61
- package/chunks/{session-attachments-root-ANZOYK7U.js → session-attachments-root-RPA44E4B.js} +17 -17
- package/chunks/{session-pr-refresh-CJLDHDTN.js → session-pr-refresh-ELTZKRHT.js} +22 -22
- package/chunks/{settings-35ADR3M3.js → settings-E3PBFDUS.js} +23 -23
- package/chunks/{shell-T7WI2AB4.js → shell-XLBUVRGS.js} +9 -9
- package/chunks/{skill-3J334MPG.js → skill-NWMDK2KV.js} +1 -1
- package/chunks/{skill-settings-VGNIJ4ZG.js → skill-settings-R6JWYTB3.js} +23 -23
- package/chunks/{spawnChannel-4GZBVZWY.js → spawnChannel-PJDEPU2B.js} +18 -18
- package/chunks/{standalone-update-3MMGTOKU.js → standalone-update-B3BXNT35.js} +19 -19
- package/chunks/{startInteractiveUI-ACAXKMOW.js → startInteractiveUI-F5FKSAUY.js} +233 -134
- package/chunks/supervisor-runner-JHRQ2FCR.js +24 -0
- package/chunks/{team-create-OL5P2TT3.js → team-create-VHVRQHVZ.js} +9 -9
- package/chunks/{team-plan-approval-AVOMP63W.js → team-plan-approval-23SRLJF6.js} +9 -9
- package/chunks/{terminal-image-renderer-YIP3F3SW.js → terminal-image-renderer-XKZZBFHE.js} +17 -17
- package/chunks/{theme-manager-WGBSECIC.js → theme-manager-IDIP6CUL.js} +19 -18
- package/chunks/{tool-result-media-43B2V5GK.js → tool-result-media-22WEAYPA.js} +9 -9
- package/chunks/{tool-search-D4CTJZQZ.js → tool-search-M7KEVANW.js} +1 -1
- package/chunks/{total-session-admission-5AVX4GWU.js → total-session-admission-ANEFPOUC.js} +19 -19
- package/chunks/{trustedFolders-A3EQT2KU.js → trustedFolders-B3BX2KJM.js} +18 -18
- package/chunks/{update-relaunch-ZFQ3KKWC.js → update-relaunch-NO3TRLFX.js} +5 -5
- package/chunks/{updateCheck-6WIKLTOC.js → updateCheck-EDPN2W6U.js} +19 -19
- package/chunks/{upload-config-CYAXYVA5.js → upload-config-W75CYANV.js} +6 -6
- package/chunks/{useAutoAcceptIndicator-WQCDJ3GF.js → useAutoAcceptIndicator-FJGWGDP2.js} +27 -27
- package/chunks/{validateNonInterActiveAuth-YAKY5TIW.js → validateNonInterActiveAuth-MXJJWDQC.js} +59 -57
- package/chunks/{version-2JL37LTE.js → version-DNGAJY4A.js} +1 -1
- package/chunks/{web-fetch-3RS7AC6O.js → web-fetch-3QOUWJFX.js} +1 -1
- package/chunks/{web-search-32AOEQHL.js → web-search-LWRUF5S7.js} +7 -7
- package/chunks/{workflow-N6HB4M7K.js → workflow-VE63BIR7.js} +10 -10
- package/chunks/{workspace-providers-status-ZWERGC3Q.js → workspace-providers-status-SGUGDW4E.js} +28 -28
- package/chunks/{workspace-registration-store-CCUU3WMT.js → workspace-registration-store-7D7EMQ6X.js} +1 -1
- package/chunks/{workspace-registry-HWKUKITM.js → workspace-registry-767IFWSB.js} +19 -19
- package/chunks/{workspace-runtime-coordinator-7I7MNHER.js → workspace-runtime-coordinator-LPFBHIUA.js} +19 -19
- package/chunks/{workspace-service-YYLFPQLW.js → workspace-service-TSICCAYR.js} +27 -27
- package/chunks/{workspace-skills-status-ZW3EQWQ6.js → workspace-skills-status-BSORV2X3.js} +24 -24
- package/chunks/{workspace-trust-reconciler-G777OJEA.js → workspace-trust-reconciler-AQKSFA6C.js} +28 -28
- package/chunks/{write-file-IL2RFUQS.js → write-file-HU2MM2ND.js} +11 -11
- package/chunks/{zh-5CH77RQJ.js → zh-6TC2VRKR.js} +6 -2
- package/chunks/{zh-TW-7ASXOAM2.js → zh-TW-O23FCREL.js} +6 -2
- package/chunks/{zoom-image-K4VOMJ5H.js → zoom-image-2MEKHWCA.js} +1 -1
- package/cli.js +67 -14
- package/examples/starter/README.md +2 -2
- package/execution-worker.js +1 -1
- package/export-transcript-document.js +1 -1
- package/locales/ca.js +9 -2
- package/locales/de.js +9 -2
- package/locales/en.js +8 -2
- package/locales/fr.js +9 -2
- package/locales/ja.js +9 -2
- package/locales/pt.js +10 -2
- package/locales/ru.js +8 -2
- package/locales/zh-TW.js +6 -2
- package/locales/zh.js +6 -2
- package/package.json +2 -2
- package/release-notes.json +11 -0
- package/web-shell/assets/{abnfDiagram-VCTEODGH-BvS-3VoN.js → abnfDiagram-VCTEODGH-DjlxT6Sr.js} +1 -1
- package/web-shell/assets/{arc-oqBoN1VH.js → arc-BTG52NX0.js} +1 -1
- package/web-shell/assets/{architectureDiagram-5GKGNRK7-BM3vyqvf.js → architectureDiagram-5GKGNRK7-B3yKxxDY.js} +1 -1
- package/web-shell/assets/{blockDiagram-NRAW4CY4-S94Kz5ys.js → blockDiagram-NRAW4CY4-MuQ7Q0WE.js} +1 -1
- package/web-shell/assets/{c4Diagram-UCG6FXSJ-wFyXR3PR.js → c4Diagram-UCG6FXSJ-BMKpk3YI.js} +1 -1
- package/web-shell/assets/channel-DIPEHWyn.js +1 -0
- package/web-shell/assets/{chunk-2Q5K7J3B-BXpOLBvy.js → chunk-2Q5K7J3B-DoMEjvF1.js} +1 -1
- package/web-shell/assets/{chunk-5VM5RSS4-BWnRV7wD.js → chunk-5VM5RSS4-Cncm10Cs.js} +1 -1
- package/web-shell/assets/{chunk-F27PBJKO-NJG1XfCH.js → chunk-F27PBJKO-B_8A0pWW.js} +1 -1
- package/web-shell/assets/{chunk-G27WJ6UU-D1MDovk_.js → chunk-G27WJ6UU-B5sAuPr5.js} +1 -1
- package/web-shell/assets/{chunk-JWPE2WC7-Biw0OjWW.js → chunk-JWPE2WC7-CGsZtxy2.js} +1 -1
- package/web-shell/assets/{chunk-LCL6LL3I-CWoypbS8.js → chunk-LCL6LL3I-BHG7Uh8x.js} +1 -1
- package/web-shell/assets/{chunk-POPQ4Y6H-ZHBPGpI1.js → chunk-POPQ4Y6H-BYVcbHXm.js} +1 -1
- package/web-shell/assets/{chunk-SVP7TREG-BmhiTHIA.js → chunk-SVP7TREG-nspp3_tv.js} +1 -1
- package/web-shell/assets/{chunk-XXDRQBXY-Ctjd24gG.js → chunk-XXDRQBXY-BPVXAnc6.js} +1 -1
- package/web-shell/assets/classDiagram-DTDB5LWJ-j4RKZFKw.js +1 -0
- package/web-shell/assets/classDiagram-v2-JRS7N3AN-j4RKZFKw.js +1 -0
- package/web-shell/assets/{cose-bilkent-JH36ORCC-CEq9XMDz.js → cose-bilkent-JH36ORCC-DFhIl1B_.js} +1 -1
- package/web-shell/assets/{cynefin-OW5HDTMX-3oDMxKvV.js → cynefin-OW5HDTMX-B4z0nkv3.js} +1 -1
- package/web-shell/assets/{cynefinDiagram-5FMLGOSQ-yGJvzOyq.js → cynefinDiagram-5FMLGOSQ-CgmbbcAV.js} +1 -1
- package/web-shell/assets/{dagre-3AP2YEHR-aeyZyzOG.js → dagre-3AP2YEHR-C7FLTqkC.js} +1 -1
- package/web-shell/assets/{diagram-S7CK7UJ4-BAAcB3gC.js → diagram-S7CK7UJ4-z9SCYxX5.js} +1 -1
- package/web-shell/assets/{diagram-UQ7AKVKN-B1_QGLRY.js → diagram-UQ7AKVKN-Du7TwJIE.js} +1 -1
- package/web-shell/assets/{diagram-VSXAHHWV-BiBpaCap.js → diagram-VSXAHHWV-TKRGx1uc.js} +1 -1
- package/web-shell/assets/{diagram-VX7I27RA-BUzzHihe.js → diagram-VX7I27RA-B0KvMoUC.js} +1 -1
- package/web-shell/assets/{diagram-Z3DM3KII-6JxaEF1R.js → diagram-Z3DM3KII-DefoJUnQ.js} +1 -1
- package/web-shell/assets/{ebnfDiagram-PWID7BFC-D1-6Yjiz.js → ebnfDiagram-PWID7BFC-ZYgJb4PE.js} +1 -1
- package/web-shell/assets/{erDiagram-SSCWMZ5O-DpcEbarm.js → erDiagram-SSCWMZ5O-BuM0aSoT.js} +1 -1
- package/web-shell/assets/{flowDiagram-A5DVABFB-DlRnvlQ3.js → flowDiagram-A5DVABFB-DzNaogy6.js} +1 -1
- package/web-shell/assets/{ganttDiagram-EL5Y4UJY-DABNtKOf.js → ganttDiagram-EL5Y4UJY-C9yeWyJ1.js} +1 -1
- package/web-shell/assets/{gitGraphDiagram-WWUBYQGX-Bpq0tIqs.js → gitGraphDiagram-WWUBYQGX-Dnr2eLom.js} +1 -1
- package/web-shell/assets/{index-Bjv2-WpQ.js → index-DfLQ3XsK.js} +3 -3
- package/web-shell/assets/{index-Bm3BviDi.js → index-DvsOnaoV.js} +1 -1
- package/web-shell/assets/{infoDiagram-RXCK75RN-D7e7VPRa.js → infoDiagram-RXCK75RN-DRuFQcW5.js} +1 -1
- package/web-shell/assets/{ishikawaDiagram-5VMMS53U-BlOJr8s3.js → ishikawaDiagram-5VMMS53U-BNXQTQvc.js} +1 -1
- package/web-shell/assets/{journeyDiagram-EYS64GPL-BJOqE-Ku.js → journeyDiagram-EYS64GPL-TCyttpgn.js} +1 -1
- package/web-shell/assets/{kanban-definition-3QL26DDD-9Jp1HpGG.js → kanban-definition-3QL26DDD-1GVc7gxH.js} +1 -1
- package/web-shell/assets/{layout-BXGcWPmh.js → layout-D5cYP-BL.js} +1 -1
- package/web-shell/assets/{linear-Bb-3dQRR.js → linear-CIn1s0y9.js} +1 -1
- package/web-shell/assets/{mermaid.core-BQ9PYOoO.js → mermaid.core-DBEpygcO.js} +6 -6
- package/web-shell/assets/{mindmap-definition-FBJOCRG2-BbRVue0a.js → mindmap-definition-FBJOCRG2-XCMaUnbr.js} +1 -1
- package/web-shell/assets/{pegDiagram-XKGWAZYB-CLALfcXo.js → pegDiagram-XKGWAZYB-yUUjcw04.js} +1 -1
- package/web-shell/assets/{pieDiagram-E7YTZNPT-BPa_8owh.js → pieDiagram-E7YTZNPT-Dccmiudc.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-AXDQQJYC-DTMPh3lk.js → quadrantDiagram-AXDQQJYC-iR076kxI.js} +1 -1
- package/web-shell/assets/{railroadDiagram-O6MQD6OU-CTqUx3sg.js → railroadDiagram-O6MQD6OU-Dn9VpVQ7.js} +1 -1
- package/web-shell/assets/{requirementDiagram-EFPCY7ZU-BMfxMhwk.js → requirementDiagram-EFPCY7ZU-DRWZ70Aj.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-P5KCCOFB-ciGAnluT.js → sankeyDiagram-P5KCCOFB-CvSeUvzD.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-WJ2MYXX4-D6eZeHbE.js → sequenceDiagram-WJ2MYXX4-Dw5pDaEn.js} +1 -1
- package/web-shell/assets/{sizeCapture-X5ZJPWSS-DQPYzdVi.js → sizeCapture-X5ZJPWSS-COHyCmqe.js} +1 -1
- package/web-shell/assets/{stateDiagram-HBIQ2CUA-DkqKm2SL.js → stateDiagram-HBIQ2CUA-DrD0m5Xy.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-4QOOHH4V-BoV3x5L6.js +1 -0
- package/web-shell/assets/{swimlanes-XN3QIQJK-C6XGW_tM.js → swimlanes-XN3QIQJK-Ca2nCc8O.js} +1 -1
- package/web-shell/assets/swimlanesDiagram-VK2B7HYN-CTpICgX7.js +8 -0
- package/web-shell/assets/{timeline-definition-24CTP7MA-CExT5Nqx.js → timeline-definition-24CTP7MA-DnDeuzB5.js} +1 -1
- package/web-shell/assets/{vennDiagram-4TSXK5OY-DYNNQGHI.js → vennDiagram-4TSXK5OY-Cws_OFVz.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-VM6X3IG4-py3CuGuQ.js → wardleyDiagram-VM6X3IG4-ruIrciDw.js} +1 -1
- package/web-shell/assets/{xychartDiagram-S5SC5T6Z-CI5rcSdT.js → xychartDiagram-S5SC5T6Z-wL2dgaWC.js} +1 -1
- package/web-shell/index.html +1 -1
- package/web-shell/sw.js +1 -1
- package/web-shell/assets/channel-QDRh2gO3.js +0 -1
- package/web-shell/assets/classDiagram-DTDB5LWJ-CjY5Knq0.js +0 -1
- package/web-shell/assets/classDiagram-v2-JRS7N3AN-CjY5Knq0.js +0 -1
- package/web-shell/assets/stateDiagram-v2-4QOOHH4V-BDHScdF2.js +0 -1
- package/web-shell/assets/swimlanesDiagram-VK2B7HYN-CftAjGJO.js +0 -8
|
@@ -0,0 +1,1496 @@
|
|
|
1
|
+
// Force strict mode and setup for ESM
|
|
2
|
+
"use strict";
|
|
3
|
+
import {
|
|
4
|
+
O1CodeDark,
|
|
5
|
+
O1CodeLight
|
|
6
|
+
} from "./chunk-YQQ7QFC5.js";
|
|
7
|
+
import {
|
|
8
|
+
stringWidth
|
|
9
|
+
} from "./chunk-F5IN4KK7.js";
|
|
10
|
+
import "./chunk-ZCZKKAIG.js";
|
|
11
|
+
import {
|
|
12
|
+
ensureAgentViewSupervisor
|
|
13
|
+
} from "./chunk-2EFFEOP5.js";
|
|
14
|
+
import {
|
|
15
|
+
readAgentViewSupervisor
|
|
16
|
+
} from "./chunk-VDSY3ODQ.js";
|
|
17
|
+
import {
|
|
18
|
+
attachAgentViewSupervisorTerminal,
|
|
19
|
+
callAgentViewSupervisor,
|
|
20
|
+
watchAgentViewOwner
|
|
21
|
+
} from "./chunk-LRHUT6ZW.js";
|
|
22
|
+
import "./chunk-B76JTBXH.js";
|
|
23
|
+
import "./chunk-MYMATZAY.js";
|
|
24
|
+
import "./chunk-6IFQXZTP.js";
|
|
25
|
+
import "./chunk-BNJ3IJB7.js";
|
|
26
|
+
import "./chunk-SHADJNT6.js";
|
|
27
|
+
import "./chunk-Q6IDKPJW.js";
|
|
28
|
+
import "./chunk-4JDEAIW5.js";
|
|
29
|
+
import "./chunk-AEGEUWVC.js";
|
|
30
|
+
import "./chunk-OJAGNSHH.js";
|
|
31
|
+
import "./chunk-NWCDFCWK.js";
|
|
32
|
+
import "./chunk-Z26JZJS7.js";
|
|
33
|
+
import "./chunk-32722SNN.js";
|
|
34
|
+
import "./chunk-AGTM6524.js";
|
|
35
|
+
import "./chunk-MDNLB3UK.js";
|
|
36
|
+
import "./chunk-MLTPPT33.js";
|
|
37
|
+
import "./chunk-ZMZRVR62.js";
|
|
38
|
+
import "./chunk-4MTOCDP5.js";
|
|
39
|
+
import "./chunk-3OU2KLMT.js";
|
|
40
|
+
import "./chunk-UW4Q5E5P.js";
|
|
41
|
+
import "./chunk-S3PGH3X6.js";
|
|
42
|
+
import "./chunk-F3FKDGHN.js";
|
|
43
|
+
import "./chunk-WMLBM6FX.js";
|
|
44
|
+
import "./chunk-UBWL27PO.js";
|
|
45
|
+
import "./chunk-DM6W2QYB.js";
|
|
46
|
+
import "./chunk-UAACCQBD.js";
|
|
47
|
+
import "./chunk-2QYMJSSC.js";
|
|
48
|
+
import "./chunk-HVQQIKDI.js";
|
|
49
|
+
import {
|
|
50
|
+
SessionService
|
|
51
|
+
} from "./chunk-V44ZGIAX.js";
|
|
52
|
+
import "./chunk-WXTAP6NR.js";
|
|
53
|
+
import "./chunk-BZOAEOYF.js";
|
|
54
|
+
import "./chunk-BIDB75DA.js";
|
|
55
|
+
import "./chunk-GYGA6V6B.js";
|
|
56
|
+
import "./chunk-EYWIFUPJ.js";
|
|
57
|
+
import "./chunk-THO5UG52.js";
|
|
58
|
+
import "./chunk-7H3GWNGJ.js";
|
|
59
|
+
import "./chunk-X427DWFD.js";
|
|
60
|
+
import "./chunk-JHRVJBV5.js";
|
|
61
|
+
import "./chunk-DJOP5LOE.js";
|
|
62
|
+
import "./chunk-FDNTWDR3.js";
|
|
63
|
+
import "./chunk-4MSX3ERA.js";
|
|
64
|
+
import "./chunk-YGG52IIN.js";
|
|
65
|
+
import "./chunk-EP7GGUVV.js";
|
|
66
|
+
import {
|
|
67
|
+
listLiveSessions
|
|
68
|
+
} from "./chunk-KEPNWFUD.js";
|
|
69
|
+
import "./chunk-OI7IVUEO.js";
|
|
70
|
+
import "./chunk-DNFPKNWM.js";
|
|
71
|
+
import "./chunk-LO6VR36F.js";
|
|
72
|
+
import "./chunk-4ESI3MQ5.js";
|
|
73
|
+
import "./chunk-CDYMT4OZ.js";
|
|
74
|
+
import "./chunk-TC7UXK4M.js";
|
|
75
|
+
import "./chunk-DS3COGEF.js";
|
|
76
|
+
import "./chunk-SLYDITP6.js";
|
|
77
|
+
import "./chunk-SYMKXR42.js";
|
|
78
|
+
import "./chunk-JOBZWTVK.js";
|
|
79
|
+
import "./chunk-HPQNI3OQ.js";
|
|
80
|
+
import "./chunk-MGEJU367.js";
|
|
81
|
+
import "./chunk-P2QG25IN.js";
|
|
82
|
+
import "./chunk-CI2ZHR5C.js";
|
|
83
|
+
import "./chunk-M7ZHP7VU.js";
|
|
84
|
+
import "./chunk-IO32UWHY.js";
|
|
85
|
+
import "./chunk-PHCY2DQ2.js";
|
|
86
|
+
import "./chunk-WU3R2YUE.js";
|
|
87
|
+
import "./chunk-M7AWQAB7.js";
|
|
88
|
+
import "./chunk-SBM747MY.js";
|
|
89
|
+
import "./chunk-Z2IHOXIK.js";
|
|
90
|
+
import "./chunk-5JTXPGNQ.js";
|
|
91
|
+
import "./chunk-5QSLFAMR.js";
|
|
92
|
+
import "./chunk-3K7BQWZY.js";
|
|
93
|
+
import "./chunk-4LCUE7BN.js";
|
|
94
|
+
import "./chunk-RIN7SNJN.js";
|
|
95
|
+
import "./chunk-VEGSKFFR.js";
|
|
96
|
+
import "./chunk-4J6KRUQB.js";
|
|
97
|
+
import "./chunk-JEUH2DSW.js";
|
|
98
|
+
import "./chunk-WXMXXBCC.js";
|
|
99
|
+
import "./chunk-KQAVEXYD.js";
|
|
100
|
+
import "./chunk-WZCKDUBO.js";
|
|
101
|
+
import "./chunk-CZWW4DCB.js";
|
|
102
|
+
import "./chunk-5UXWOCCO.js";
|
|
103
|
+
import "./chunk-ETGSZYWP.js";
|
|
104
|
+
import "./chunk-RCZHQZJJ.js";
|
|
105
|
+
import "./chunk-6YS3YH6O.js";
|
|
106
|
+
import "./chunk-AVCUVYSA.js";
|
|
107
|
+
import "./chunk-6CW53FOJ.js";
|
|
108
|
+
import "./chunk-HX6AICAX.js";
|
|
109
|
+
import "./chunk-SMTIRSBP.js";
|
|
110
|
+
import "./chunk-65B6QBMP.js";
|
|
111
|
+
import "./chunk-O4IWNFDK.js";
|
|
112
|
+
import "./chunk-WMJL2XAM.js";
|
|
113
|
+
import "./chunk-QCE3SPTV.js";
|
|
114
|
+
import "./chunk-FOZEB37P.js";
|
|
115
|
+
import "./chunk-DNMM4RF7.js";
|
|
116
|
+
import "./chunk-2SMHE6PC.js";
|
|
117
|
+
import "./chunk-JSFADKTB.js";
|
|
118
|
+
import "./chunk-OHAUN3Q5.js";
|
|
119
|
+
import "./chunk-O7QDVXNJ.js";
|
|
120
|
+
import "./chunk-SRFL3HFU.js";
|
|
121
|
+
import "./chunk-BQAZCJF7.js";
|
|
122
|
+
import "./chunk-OMVVKQSW.js";
|
|
123
|
+
import "./chunk-TC2TJAOF.js";
|
|
124
|
+
import "./chunk-CP63SY5N.js";
|
|
125
|
+
import "./chunk-TW6YBXRS.js";
|
|
126
|
+
import "./chunk-2F3GZ6WG.js";
|
|
127
|
+
import "./chunk-ASQLIG2L.js";
|
|
128
|
+
import "./chunk-242JUBPM.js";
|
|
129
|
+
import "./chunk-5P5ZJMW2.js";
|
|
130
|
+
import "./chunk-GADK6OTE.js";
|
|
131
|
+
import "./chunk-ROO6F2BT.js";
|
|
132
|
+
import "./chunk-3CMX5LCG.js";
|
|
133
|
+
import "./chunk-IC57EPC7.js";
|
|
134
|
+
import "./chunk-SZ26YNBZ.js";
|
|
135
|
+
import "./chunk-R7FX7HIR.js";
|
|
136
|
+
import "./chunk-V4XETRAG.js";
|
|
137
|
+
import "./chunk-ABTPVII7.js";
|
|
138
|
+
import "./chunk-HOPKSSYR.js";
|
|
139
|
+
import "./chunk-23AFREUQ.js";
|
|
140
|
+
import "./chunk-IMLPJ76O.js";
|
|
141
|
+
import "./chunk-JOFGX5ZA.js";
|
|
142
|
+
import "./chunk-NO2WYQWE.js";
|
|
143
|
+
import "./chunk-V44Y3PCO.js";
|
|
144
|
+
import "./chunk-HAZNBQPI.js";
|
|
145
|
+
import "./chunk-SYMYKLO4.js";
|
|
146
|
+
import "./chunk-IQEM74QW.js";
|
|
147
|
+
import "./chunk-TYYTQIEZ.js";
|
|
148
|
+
import "./chunk-FKI7XUZK.js";
|
|
149
|
+
import "./chunk-EPSJPAHV.js";
|
|
150
|
+
import "./chunk-JKXGHDQ2.js";
|
|
151
|
+
import "./chunk-EPJAMNLS.js";
|
|
152
|
+
import "./chunk-HHESWHDQ.js";
|
|
153
|
+
import "./chunk-72EBG4FJ.js";
|
|
154
|
+
import "./chunk-ALOGVVOM.js";
|
|
155
|
+
import "./chunk-LEXKU5FI.js";
|
|
156
|
+
import "./chunk-HDGYCLNB.js";
|
|
157
|
+
import "./chunk-RC67CA5Z.js";
|
|
158
|
+
import "./chunk-AK6T4SJC.js";
|
|
159
|
+
import "./chunk-KMWAEX43.js";
|
|
160
|
+
import "./chunk-EVC2HZ5T.js";
|
|
161
|
+
import "./chunk-7TK6OY2J.js";
|
|
162
|
+
import "./chunk-UK2KIU2V.js";
|
|
163
|
+
import "./chunk-HBBBH6YA.js";
|
|
164
|
+
import {
|
|
165
|
+
Storage
|
|
166
|
+
} from "./chunk-S3HSUBBN.js";
|
|
167
|
+
import "./chunk-3X2X4BF3.js";
|
|
168
|
+
import "./chunk-JAQAGKIV.js";
|
|
169
|
+
import {
|
|
170
|
+
init_esbuild_shims
|
|
171
|
+
} from "./chunk-S2467S6L.js";
|
|
172
|
+
import {
|
|
173
|
+
__name
|
|
174
|
+
} from "./chunk-J2S4EL5Y.js";
|
|
175
|
+
|
|
176
|
+
// packages/cli/src/agent-view/foreground-runner.ts
|
|
177
|
+
init_esbuild_shims();
|
|
178
|
+
import { setTimeout as delay2 } from "node:timers/promises";
|
|
179
|
+
import { randomUUID } from "node:crypto";
|
|
180
|
+
|
|
181
|
+
// packages/cli/src/agent-view/foreground-controller.ts
|
|
182
|
+
init_esbuild_shims();
|
|
183
|
+
var AgentSessionForegroundController = class {
|
|
184
|
+
constructor(transport) {
|
|
185
|
+
this.transport = transport;
|
|
186
|
+
}
|
|
187
|
+
static {
|
|
188
|
+
__name(this, "AgentSessionForegroundController");
|
|
189
|
+
}
|
|
190
|
+
active;
|
|
191
|
+
lastSessionId;
|
|
192
|
+
sequence = Promise.resolve();
|
|
193
|
+
get activeSessionId() {
|
|
194
|
+
return this.active?.sessionId;
|
|
195
|
+
}
|
|
196
|
+
select(sessionId) {
|
|
197
|
+
return this.serialize(() => this.selectLocked(sessionId));
|
|
198
|
+
}
|
|
199
|
+
suspend() {
|
|
200
|
+
return this.serialize(() => this.detachActive());
|
|
201
|
+
}
|
|
202
|
+
resume() {
|
|
203
|
+
return this.serialize(async () => {
|
|
204
|
+
if (!this.lastSessionId)
|
|
205
|
+
throw new Error("No previous session to resume.");
|
|
206
|
+
await this.selectLocked(this.lastSessionId);
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
async selectLocked(sessionId) {
|
|
210
|
+
if (this.active?.sessionId === sessionId) return;
|
|
211
|
+
if (!await this.transport.canAttach(sessionId)) {
|
|
212
|
+
throw new Error(`Session ${sessionId} is unavailable.`);
|
|
213
|
+
}
|
|
214
|
+
const outgoing = this.active?.sessionId;
|
|
215
|
+
await this.detachActive();
|
|
216
|
+
try {
|
|
217
|
+
await this.attach(sessionId);
|
|
218
|
+
this.lastSessionId = sessionId;
|
|
219
|
+
} catch (error) {
|
|
220
|
+
if (outgoing) {
|
|
221
|
+
try {
|
|
222
|
+
await this.attach(outgoing);
|
|
223
|
+
this.lastSessionId = outgoing;
|
|
224
|
+
} catch (restoreError) {
|
|
225
|
+
throw new AggregateError(
|
|
226
|
+
[error, restoreError],
|
|
227
|
+
"Could not attach the target or restore the previous session."
|
|
228
|
+
);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
throw error;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
async attach(sessionId) {
|
|
235
|
+
const abort = new AbortController();
|
|
236
|
+
let markAttached = /* @__PURE__ */ __name(() => {
|
|
237
|
+
}, "markAttached");
|
|
238
|
+
const attached = new Promise((resolve2) => {
|
|
239
|
+
markAttached = resolve2;
|
|
240
|
+
});
|
|
241
|
+
const outcome = this.transport.attach(sessionId, abort.signal, markAttached).then(
|
|
242
|
+
() => ({ error: void 0 }),
|
|
243
|
+
(error) => ({ error })
|
|
244
|
+
);
|
|
245
|
+
const attachment = { sessionId, abort, outcome };
|
|
246
|
+
this.active = attachment;
|
|
247
|
+
void outcome.then(() => {
|
|
248
|
+
if (this.active === attachment) this.active = void 0;
|
|
249
|
+
});
|
|
250
|
+
await Promise.race([
|
|
251
|
+
attached,
|
|
252
|
+
outcome.then(({ error }) => {
|
|
253
|
+
throw error ?? new Error(`Session ${sessionId} detached before ready.`);
|
|
254
|
+
})
|
|
255
|
+
]);
|
|
256
|
+
}
|
|
257
|
+
async detachActive() {
|
|
258
|
+
const attachment = this.active;
|
|
259
|
+
if (!attachment) return;
|
|
260
|
+
attachment.abort.abort();
|
|
261
|
+
await attachment.outcome;
|
|
262
|
+
await this.transport.waitDetached?.(attachment.sessionId);
|
|
263
|
+
if (this.active === attachment) this.active = void 0;
|
|
264
|
+
}
|
|
265
|
+
serialize(action) {
|
|
266
|
+
const next = this.sequence.then(action, action);
|
|
267
|
+
this.sequence = next.then(
|
|
268
|
+
() => void 0,
|
|
269
|
+
() => void 0
|
|
270
|
+
);
|
|
271
|
+
return next;
|
|
272
|
+
}
|
|
273
|
+
};
|
|
274
|
+
|
|
275
|
+
// packages/cli/src/agent-view/supervisor-foreground-transport.ts
|
|
276
|
+
init_esbuild_shims();
|
|
277
|
+
import { setTimeout as delay } from "node:timers/promises";
|
|
278
|
+
function createSupervisorForegroundTransport(options) {
|
|
279
|
+
return {
|
|
280
|
+
async canAttach(sessionId) {
|
|
281
|
+
const snapshot = await options.peek(sessionId);
|
|
282
|
+
const state = readState(snapshot);
|
|
283
|
+
if (state?.["ownership"] !== "managed") return false;
|
|
284
|
+
if (state["processState"] === "alive" || state["processState"] === "hibernated")
|
|
285
|
+
return true;
|
|
286
|
+
return state["processState"] === "exited" && ["completed", "idle", "failed", "stopped"].includes(
|
|
287
|
+
String(state["sessionState"])
|
|
288
|
+
);
|
|
289
|
+
},
|
|
290
|
+
async waitDetached(sessionId) {
|
|
291
|
+
const deadline = Date.now() + (options.detachTimeoutMs ?? 3e3);
|
|
292
|
+
do {
|
|
293
|
+
const snapshot = await options.peek(sessionId);
|
|
294
|
+
const state = readState(snapshot);
|
|
295
|
+
if (state?.["attachState"] === "detached") return;
|
|
296
|
+
if (!state || state["processState"] === "exited") return;
|
|
297
|
+
await delay(options.detachPollMs ?? 50);
|
|
298
|
+
} while (Date.now() < deadline);
|
|
299
|
+
throw new Error(`Session ${sessionId} did not detach in time.`);
|
|
300
|
+
},
|
|
301
|
+
attach(sessionId, detachSignal, onAttached) {
|
|
302
|
+
return attachAgentViewSupervisorTerminal(options.socketPath, sessionId, {
|
|
303
|
+
authToken: options.authToken,
|
|
304
|
+
...options.stdin ? { stdin: options.stdin } : {},
|
|
305
|
+
...options.stdout ? { stdout: options.stdout } : {},
|
|
306
|
+
detachSignal,
|
|
307
|
+
onAttached
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
};
|
|
311
|
+
}
|
|
312
|
+
__name(createSupervisorForegroundTransport, "createSupervisorForegroundTransport");
|
|
313
|
+
function readState(snapshot) {
|
|
314
|
+
if (!isRecord(snapshot) || !isRecord(snapshot["state"])) return void 0;
|
|
315
|
+
return snapshot["state"];
|
|
316
|
+
}
|
|
317
|
+
__name(readState, "readState");
|
|
318
|
+
function isRecord(value) {
|
|
319
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
320
|
+
}
|
|
321
|
+
__name(isRecord, "isRecord");
|
|
322
|
+
|
|
323
|
+
// packages/cli/src/agent-view/session-catalog.ts
|
|
324
|
+
init_esbuild_shims();
|
|
325
|
+
import * as path from "node:path";
|
|
326
|
+
import * as fs from "node:fs/promises";
|
|
327
|
+
var MAX_SAVED_PER_WORKSPACE = 80;
|
|
328
|
+
var MAX_PROJECTS = 64;
|
|
329
|
+
var MAX_TRANSCRIPT_SAMPLES = 8;
|
|
330
|
+
var MAX_HEAD_BYTES = 16 * 1024;
|
|
331
|
+
var MAX_TAIL_BYTES = 64 * 1024;
|
|
332
|
+
async function loadAgentSessionCatalog(currentWorkspace, currentSessionId, listLive) {
|
|
333
|
+
const [rawLive, direct] = await Promise.all([listLive(), listLiveSessions()]);
|
|
334
|
+
const live = Array.isArray(rawLive) ? rawLive.filter(isAgentViewSessionSnapshot) : [];
|
|
335
|
+
const workspaces = /* @__PURE__ */ new Set([path.resolve(currentWorkspace)]);
|
|
336
|
+
for (const workspace of await discoverAgentSessionWorkspaces(
|
|
337
|
+
Storage.getRuntimeBaseDir()
|
|
338
|
+
)) {
|
|
339
|
+
workspaces.add(workspace);
|
|
340
|
+
}
|
|
341
|
+
for (const snapshot of live) {
|
|
342
|
+
if (snapshot.state.projectCwd) {
|
|
343
|
+
workspaces.add(path.resolve(snapshot.state.projectCwd));
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
for (const record of direct) {
|
|
347
|
+
if (record.kind === "tui" || record.kind === void 0) {
|
|
348
|
+
workspaces.add(path.resolve(record.cwd));
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
const saved = (await Promise.all(
|
|
352
|
+
[...workspaces].map(async (cwd) => {
|
|
353
|
+
try {
|
|
354
|
+
return (await new SessionService(cwd).listSessions({
|
|
355
|
+
size: MAX_SAVED_PER_WORKSPACE
|
|
356
|
+
})).items;
|
|
357
|
+
} catch {
|
|
358
|
+
return [];
|
|
359
|
+
}
|
|
360
|
+
})
|
|
361
|
+
)).flat();
|
|
362
|
+
return mergeAgentSessionCatalog(saved, live, currentSessionId, direct);
|
|
363
|
+
}
|
|
364
|
+
__name(loadAgentSessionCatalog, "loadAgentSessionCatalog");
|
|
365
|
+
async function discoverAgentSessionWorkspaces(runtimeBaseDir) {
|
|
366
|
+
const projectsDir = path.join(runtimeBaseDir, "projects");
|
|
367
|
+
let projects;
|
|
368
|
+
try {
|
|
369
|
+
projects = await fs.readdir(projectsDir, { withFileTypes: true });
|
|
370
|
+
} catch {
|
|
371
|
+
return [];
|
|
372
|
+
}
|
|
373
|
+
const workspaces = /* @__PURE__ */ new Set();
|
|
374
|
+
for (const project of projects.filter((item) => item.isDirectory()).slice(0, MAX_PROJECTS)) {
|
|
375
|
+
const chatsDir = path.join(projectsDir, project.name, "chats");
|
|
376
|
+
let chats;
|
|
377
|
+
try {
|
|
378
|
+
chats = await fs.readdir(chatsDir, { withFileTypes: true });
|
|
379
|
+
} catch {
|
|
380
|
+
continue;
|
|
381
|
+
}
|
|
382
|
+
for (const chat of chats.filter((item) => item.isFile() && item.name.endsWith(".jsonl")).slice(0, MAX_TRANSCRIPT_SAMPLES)) {
|
|
383
|
+
const cwd = await readTranscriptHeadCwd(path.join(chatsDir, chat.name));
|
|
384
|
+
if (cwd) {
|
|
385
|
+
workspaces.add(path.resolve(cwd));
|
|
386
|
+
break;
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
return [...workspaces];
|
|
391
|
+
}
|
|
392
|
+
__name(discoverAgentSessionWorkspaces, "discoverAgentSessionWorkspaces");
|
|
393
|
+
async function loadAgentSessionExcerpt(row) {
|
|
394
|
+
const filePath = row.transcriptPath ?? (await new SessionService(row.workspace).getSessionListItem(row.sessionId))?.filePath;
|
|
395
|
+
return filePath ? readLatestTranscriptMessage(filePath) : void 0;
|
|
396
|
+
}
|
|
397
|
+
__name(loadAgentSessionExcerpt, "loadAgentSessionExcerpt");
|
|
398
|
+
async function readLatestTranscriptMessage(filePath) {
|
|
399
|
+
let handle;
|
|
400
|
+
try {
|
|
401
|
+
handle = await fs.open(filePath, "r");
|
|
402
|
+
const { size } = await handle.stat();
|
|
403
|
+
const start = Math.max(0, size - MAX_TAIL_BYTES);
|
|
404
|
+
const buffer = Buffer.alloc(Math.min(size, MAX_TAIL_BYTES));
|
|
405
|
+
const { bytesRead } = await handle.read(buffer, 0, buffer.length, start);
|
|
406
|
+
const lines = buffer.subarray(0, bytesRead).toString("utf8").split(/\r?\n/u);
|
|
407
|
+
for (let index = lines.length - 1; index >= (start > 0 ? 1 : 0); index--) {
|
|
408
|
+
let record;
|
|
409
|
+
try {
|
|
410
|
+
record = JSON.parse(lines[index]);
|
|
411
|
+
} catch {
|
|
412
|
+
continue;
|
|
413
|
+
}
|
|
414
|
+
if (typeof record !== "object" || record === null) continue;
|
|
415
|
+
const value = record;
|
|
416
|
+
if (value["type"] !== "user" && value["type"] !== "assistant") continue;
|
|
417
|
+
const message = value["message"];
|
|
418
|
+
if (typeof message !== "object" || message === null) continue;
|
|
419
|
+
const parts = message["parts"];
|
|
420
|
+
if (!Array.isArray(parts)) continue;
|
|
421
|
+
const text = parts.map(
|
|
422
|
+
(part) => typeof part === "object" && part !== null && typeof part["text"] === "string" ? part["text"] : ""
|
|
423
|
+
).join(" ").trim();
|
|
424
|
+
if (text) return text.slice(0, 500);
|
|
425
|
+
}
|
|
426
|
+
return void 0;
|
|
427
|
+
} catch {
|
|
428
|
+
return void 0;
|
|
429
|
+
} finally {
|
|
430
|
+
await handle?.close();
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
__name(readLatestTranscriptMessage, "readLatestTranscriptMessage");
|
|
434
|
+
async function readTranscriptHeadCwd(filePath) {
|
|
435
|
+
let handle;
|
|
436
|
+
try {
|
|
437
|
+
handle = await fs.open(filePath, "r");
|
|
438
|
+
const buffer = Buffer.alloc(MAX_HEAD_BYTES);
|
|
439
|
+
const { bytesRead } = await handle.read(buffer, 0, buffer.length, 0);
|
|
440
|
+
const head = buffer.subarray(0, bytesRead).toString("utf8").split("\n", 1)[0];
|
|
441
|
+
const record = JSON.parse(head);
|
|
442
|
+
if (typeof record !== "object" || record === null) return void 0;
|
|
443
|
+
const cwd = record["cwd"];
|
|
444
|
+
return typeof cwd === "string" && path.isAbsolute(cwd) ? cwd : void 0;
|
|
445
|
+
} catch {
|
|
446
|
+
return void 0;
|
|
447
|
+
} finally {
|
|
448
|
+
await handle?.close();
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
__name(readTranscriptHeadCwd, "readTranscriptHeadCwd");
|
|
452
|
+
function mergeAgentSessionCatalog(saved, live, currentSessionId, direct = []) {
|
|
453
|
+
const rows = /* @__PURE__ */ new Map();
|
|
454
|
+
for (const item of saved) {
|
|
455
|
+
if (item.isArchived || item.parentSessionId) continue;
|
|
456
|
+
if (!item.customTitle && !item.prompt && !item.goalObjective) continue;
|
|
457
|
+
const workspace = path.resolve(item.cwd);
|
|
458
|
+
rows.set(item.sessionId.toLowerCase(), {
|
|
459
|
+
sessionId: item.sessionId,
|
|
460
|
+
workspace,
|
|
461
|
+
title: item.customTitle || item.prompt || item.goalObjective || "Untitled task",
|
|
462
|
+
status: "inactive",
|
|
463
|
+
updatedAt: item.mtime,
|
|
464
|
+
...item.gitBranch ? { branch: item.gitBranch } : {},
|
|
465
|
+
...item.prompt ? { lastMessage: item.prompt } : {},
|
|
466
|
+
transcriptPath: item.filePath,
|
|
467
|
+
current: item.sessionId.toLowerCase() === currentSessionId.toLowerCase(),
|
|
468
|
+
switchable: true,
|
|
469
|
+
source: "saved"
|
|
470
|
+
});
|
|
471
|
+
}
|
|
472
|
+
for (const snapshot of live) {
|
|
473
|
+
if (snapshot.state.ownership !== "managed") continue;
|
|
474
|
+
const key = snapshot.sessionId.toLowerCase();
|
|
475
|
+
if (snapshot.state.processState === "exited" && !rows.has(key)) continue;
|
|
476
|
+
const workspace = path.resolve(snapshot.state.projectCwd);
|
|
477
|
+
const prior = rows.get(key);
|
|
478
|
+
const conflict = prior && !sameWorkspace(prior.workspace, workspace);
|
|
479
|
+
const status = conflict ? "unknown" : statusOf(snapshot);
|
|
480
|
+
const title = snapshot.rosterEntry?.displayName || prior?.title || snapshot.activity?.summary || "Untitled task";
|
|
481
|
+
rows.set(key, {
|
|
482
|
+
...prior,
|
|
483
|
+
sessionId: snapshot.sessionId,
|
|
484
|
+
workspace,
|
|
485
|
+
title,
|
|
486
|
+
status,
|
|
487
|
+
updatedAt: Date.parse(
|
|
488
|
+
snapshot.activity?.lastActivityAt ?? snapshot.state.updatedAt
|
|
489
|
+
) || 0,
|
|
490
|
+
...snapshot.activity?.model || snapshot.launch?.model ? { model: snapshot.activity?.model ?? snapshot.launch?.model } : {},
|
|
491
|
+
...snapshot.activity?.summary ? { summary: snapshot.activity.summary } : {},
|
|
492
|
+
current: key === currentSessionId.toLowerCase(),
|
|
493
|
+
switchable: !conflict && (snapshot.state.processState === "alive" || snapshot.state.processState === "hibernated" || snapshot.state.processState === "exited" && ["completed", "idle", "failed", "stopped"].includes(
|
|
494
|
+
snapshot.state.sessionState
|
|
495
|
+
)),
|
|
496
|
+
source: "live"
|
|
497
|
+
});
|
|
498
|
+
}
|
|
499
|
+
const managedIds = new Set(
|
|
500
|
+
live.map((snapshot) => snapshot.sessionId.toLowerCase())
|
|
501
|
+
);
|
|
502
|
+
for (const record of direct) {
|
|
503
|
+
if (record.kind !== "tui" && record.kind !== void 0) continue;
|
|
504
|
+
const key = record.sessionId.toLowerCase();
|
|
505
|
+
if (managedIds.has(key)) continue;
|
|
506
|
+
const prior = rows.get(key);
|
|
507
|
+
const workspace = path.resolve(record.cwd);
|
|
508
|
+
rows.set(key, {
|
|
509
|
+
...prior,
|
|
510
|
+
sessionId: record.sessionId,
|
|
511
|
+
workspace,
|
|
512
|
+
title: prior?.title ?? record.name,
|
|
513
|
+
status: "unknown",
|
|
514
|
+
updatedAt: Math.max(prior?.updatedAt ?? 0, record.startedAt),
|
|
515
|
+
current: key === currentSessionId.toLowerCase(),
|
|
516
|
+
switchable: false,
|
|
517
|
+
source: "direct"
|
|
518
|
+
});
|
|
519
|
+
}
|
|
520
|
+
return [...rows.values()].sort((a, b) => {
|
|
521
|
+
if (a.current !== b.current) return a.current ? -1 : 1;
|
|
522
|
+
return b.updatedAt - a.updatedAt;
|
|
523
|
+
});
|
|
524
|
+
}
|
|
525
|
+
__name(mergeAgentSessionCatalog, "mergeAgentSessionCatalog");
|
|
526
|
+
function statusOf(snapshot) {
|
|
527
|
+
if (snapshot.state.sessionState === "failed") return "failed";
|
|
528
|
+
if (snapshot.state.processState === "exited") return "inactive";
|
|
529
|
+
if (snapshot.state.processState === "hibernated") return "inactive";
|
|
530
|
+
if (snapshot.state.processState !== "alive") return "unknown";
|
|
531
|
+
if (snapshot.activity?.lastResult === "failed") return "failed";
|
|
532
|
+
switch (snapshot.state.sessionState) {
|
|
533
|
+
case "working":
|
|
534
|
+
return "working";
|
|
535
|
+
case "needs_input":
|
|
536
|
+
return "needs_input";
|
|
537
|
+
case "idle":
|
|
538
|
+
case "completed":
|
|
539
|
+
return "idle";
|
|
540
|
+
default:
|
|
541
|
+
return "unknown";
|
|
542
|
+
}
|
|
543
|
+
}
|
|
544
|
+
__name(statusOf, "statusOf");
|
|
545
|
+
function sameWorkspace(a, b) {
|
|
546
|
+
return process.platform === "win32" ? a.toLowerCase() === b.toLowerCase() : a === b;
|
|
547
|
+
}
|
|
548
|
+
__name(sameWorkspace, "sameWorkspace");
|
|
549
|
+
function isAgentViewSessionSnapshot(value) {
|
|
550
|
+
if (typeof value !== "object" || value === null) return false;
|
|
551
|
+
const record = value;
|
|
552
|
+
const state = record["state"];
|
|
553
|
+
return typeof record["sessionId"] === "string" && typeof state === "object" && state !== null && typeof state["projectCwd"] === "string";
|
|
554
|
+
}
|
|
555
|
+
__name(isAgentViewSessionSnapshot, "isAgentViewSessionSnapshot");
|
|
556
|
+
|
|
557
|
+
// packages/cli/src/agent-view/session-dashboard.ts
|
|
558
|
+
init_esbuild_shims();
|
|
559
|
+
import readline from "node:readline";
|
|
560
|
+
|
|
561
|
+
// packages/cli/src/agent-view/dashboard-copy.ts
|
|
562
|
+
init_esbuild_shims();
|
|
563
|
+
var en = {
|
|
564
|
+
sessions: "SESSIONS",
|
|
565
|
+
task: "TASK",
|
|
566
|
+
status: "STATUS",
|
|
567
|
+
time: "TIME",
|
|
568
|
+
model: "MODEL",
|
|
569
|
+
session: "SESSION",
|
|
570
|
+
folder: "Folder",
|
|
571
|
+
branch: "Branch",
|
|
572
|
+
lastActivity: "Last activity",
|
|
573
|
+
currentSession: "current session",
|
|
574
|
+
summary: "SUMMARY",
|
|
575
|
+
now: "NOW",
|
|
576
|
+
lastMessage: "LAST MESSAGE",
|
|
577
|
+
working: "WORKING",
|
|
578
|
+
action: "NEEDS YOU",
|
|
579
|
+
failed: "FAILED",
|
|
580
|
+
idle: "IDLE",
|
|
581
|
+
inactive: "INACTIVE",
|
|
582
|
+
unknown: "UNKNOWN",
|
|
583
|
+
folders: "folders",
|
|
584
|
+
conversations: "conversations",
|
|
585
|
+
workShort: "work",
|
|
586
|
+
actionShort: "action",
|
|
587
|
+
failShort: "fail",
|
|
588
|
+
noSessions: "No sessions found.",
|
|
589
|
+
unavailable: "Session unavailable for switching.",
|
|
590
|
+
pressSearch: "Press / to search",
|
|
591
|
+
search: "Search:",
|
|
592
|
+
filter: "Filter:",
|
|
593
|
+
shortcutsWide: "\u2191\u2193 move \xB7 PgUp/PgDn details \xB7 enter open \xB7 esc back",
|
|
594
|
+
shortcutsNarrow: "\u2191\u2193 move \xB7 enter open \xB7 space details \xB7 esc",
|
|
595
|
+
shortcutsDetail: "PgUp/PgDn details \xB7 esc list \xB7 enter open",
|
|
596
|
+
workProgress: "Work in progress.",
|
|
597
|
+
waitingAction: "Waiting for your action.",
|
|
598
|
+
sessionFailed: "The session failed.",
|
|
599
|
+
savedLater: "Saved for later.",
|
|
600
|
+
waitingMessage: "Waiting for a new message.",
|
|
601
|
+
untitled: "Untitled task"
|
|
602
|
+
};
|
|
603
|
+
var pt = {
|
|
604
|
+
sessions: "SESS\xD5ES",
|
|
605
|
+
task: "TAREFA",
|
|
606
|
+
status: "STATUS",
|
|
607
|
+
time: "TEMPO",
|
|
608
|
+
model: "MODELO",
|
|
609
|
+
session: "SESS\xC3O",
|
|
610
|
+
folder: "Pasta",
|
|
611
|
+
branch: "Branch",
|
|
612
|
+
lastActivity: "\xDAltima atividade",
|
|
613
|
+
currentSession: "sess\xE3o atual",
|
|
614
|
+
summary: "RESUMO",
|
|
615
|
+
now: "AGORA",
|
|
616
|
+
lastMessage: "\xDALTIMA MENSAGEM",
|
|
617
|
+
working: "TRABALHANDO",
|
|
618
|
+
action: "SUA A\xC7\xC3O",
|
|
619
|
+
failed: "FALHOU",
|
|
620
|
+
idle: "OCIOSA",
|
|
621
|
+
inactive: "INATIVA",
|
|
622
|
+
unknown: "INDEFINIDA",
|
|
623
|
+
folders: "pastas",
|
|
624
|
+
conversations: "conversas",
|
|
625
|
+
workShort: "trab.",
|
|
626
|
+
actionShort: "a\xE7\xE3o",
|
|
627
|
+
failShort: "falha",
|
|
628
|
+
noSessions: "Nenhuma sess\xE3o encontrada.",
|
|
629
|
+
unavailable: "Sess\xE3o indispon\xEDvel para altern\xE2ncia.",
|
|
630
|
+
pressSearch: "Pressione / para buscar",
|
|
631
|
+
search: "Buscar:",
|
|
632
|
+
filter: "Filtro:",
|
|
633
|
+
shortcutsWide: "\u2191\u2193 navegar \xB7 PgUp/PgDn detalhes \xB7 enter abrir \xB7 esc voltar",
|
|
634
|
+
shortcutsNarrow: "\u2191\u2193 mover \xB7 enter abrir \xB7 espa\xE7o detalhes \xB7 esc",
|
|
635
|
+
shortcutsDetail: "PgUp/PgDn detalhes \xB7 esc lista \xB7 enter abrir",
|
|
636
|
+
workProgress: "Trabalho em andamento.",
|
|
637
|
+
waitingAction: "Aguardando sua a\xE7\xE3o.",
|
|
638
|
+
sessionFailed: "A sess\xE3o falhou.",
|
|
639
|
+
savedLater: "Sess\xE3o salva para continuar.",
|
|
640
|
+
waitingMessage: "Aguardando nova mensagem.",
|
|
641
|
+
untitled: "Tarefa sem t\xEDtulo"
|
|
642
|
+
};
|
|
643
|
+
var de = {
|
|
644
|
+
sessions: "SITZUNGEN",
|
|
645
|
+
task: "AUFGABE",
|
|
646
|
+
status: "STATUS",
|
|
647
|
+
time: "ZEIT",
|
|
648
|
+
model: "MODELL",
|
|
649
|
+
session: "SITZUNG",
|
|
650
|
+
folder: "Ordner",
|
|
651
|
+
branch: "Branch",
|
|
652
|
+
lastActivity: "Letzte Aktivit\xE4t",
|
|
653
|
+
currentSession: "aktuelle Sitzung",
|
|
654
|
+
summary: "ZUSAMMENFASSUNG",
|
|
655
|
+
now: "JETZT",
|
|
656
|
+
lastMessage: "LETZTE NACHRICHT",
|
|
657
|
+
working: "ARBEITET",
|
|
658
|
+
action: "AKTION N\xD6TIG",
|
|
659
|
+
failed: "FEHLER",
|
|
660
|
+
idle: "BEREIT",
|
|
661
|
+
inactive: "INAKTIV",
|
|
662
|
+
unknown: "UNBEKANNT",
|
|
663
|
+
folders: "Ordner",
|
|
664
|
+
conversations: "Gespr\xE4che",
|
|
665
|
+
workShort: "aktiv",
|
|
666
|
+
actionShort: "Aktion",
|
|
667
|
+
failShort: "Fehler",
|
|
668
|
+
noSessions: "Keine Sitzungen gefunden.",
|
|
669
|
+
unavailable: "Sitzung kann nicht gewechselt werden.",
|
|
670
|
+
pressSearch: "/ zum Suchen",
|
|
671
|
+
search: "Suchen:",
|
|
672
|
+
filter: "Filter:",
|
|
673
|
+
shortcutsWide: "\u2191\u2193 w\xE4hlen \xB7 PgUp/PgDn Details \xB7 Enter \xF6ffnen \xB7 Esc zur\xFCck",
|
|
674
|
+
shortcutsNarrow: "\u2191\u2193 w\xE4hlen \xB7 Enter \xF6ffnen \xB7 Leertaste Details \xB7 Esc",
|
|
675
|
+
shortcutsDetail: "PgUp/PgDn Details \xB7 Esc Liste \xB7 Enter \xF6ffnen",
|
|
676
|
+
workProgress: "Arbeit l\xE4uft.",
|
|
677
|
+
waitingAction: "Wartet auf Ihre Aktion.",
|
|
678
|
+
sessionFailed: "Die Sitzung ist fehlgeschlagen.",
|
|
679
|
+
savedLater: "F\xFCr sp\xE4ter gespeichert.",
|
|
680
|
+
waitingMessage: "Wartet auf eine neue Nachricht.",
|
|
681
|
+
untitled: "Unbenannte Aufgabe"
|
|
682
|
+
};
|
|
683
|
+
var fr = {
|
|
684
|
+
sessions: "SESSIONS",
|
|
685
|
+
task: "T\xC2CHE",
|
|
686
|
+
status: "STATUT",
|
|
687
|
+
time: "TEMPS",
|
|
688
|
+
model: "MOD\xC8LE",
|
|
689
|
+
session: "SESSION",
|
|
690
|
+
folder: "Dossier",
|
|
691
|
+
branch: "Branche",
|
|
692
|
+
lastActivity: "Derni\xE8re activit\xE9",
|
|
693
|
+
currentSession: "session actuelle",
|
|
694
|
+
summary: "R\xC9SUM\xC9",
|
|
695
|
+
now: "MAINTENANT",
|
|
696
|
+
lastMessage: "DERNIER MESSAGE",
|
|
697
|
+
working: "EN COURS",
|
|
698
|
+
action: "VOTRE ACTION",
|
|
699
|
+
failed: "\xC9CHEC",
|
|
700
|
+
idle: "EN ATTENTE",
|
|
701
|
+
inactive: "INACTIVE",
|
|
702
|
+
unknown: "INCONNU",
|
|
703
|
+
folders: "dossiers",
|
|
704
|
+
conversations: "conversations",
|
|
705
|
+
workShort: "actif",
|
|
706
|
+
actionShort: "action",
|
|
707
|
+
failShort: "\xE9chec",
|
|
708
|
+
noSessions: "Aucune session trouv\xE9e.",
|
|
709
|
+
unavailable: "Session indisponible pour le changement.",
|
|
710
|
+
pressSearch: "Appuyez sur / pour chercher",
|
|
711
|
+
search: "Chercher :",
|
|
712
|
+
filter: "Filtre :",
|
|
713
|
+
shortcutsWide: "\u2191\u2193 d\xE9placer \xB7 PgUp/PgDn d\xE9tails \xB7 Entr\xE9e ouvrir \xB7 \xC9chap retour",
|
|
714
|
+
shortcutsNarrow: "\u2191\u2193 d\xE9placer \xB7 Entr\xE9e ouvrir \xB7 espace d\xE9tails \xB7 \xC9chap",
|
|
715
|
+
shortcutsDetail: "PgUp/PgDn d\xE9tails \xB7 \xC9chap liste \xB7 Entr\xE9e ouvrir",
|
|
716
|
+
workProgress: "Travail en cours.",
|
|
717
|
+
waitingAction: "En attente de votre action.",
|
|
718
|
+
sessionFailed: "La session a \xE9chou\xE9.",
|
|
719
|
+
savedLater: "Enregistr\xE9e pour plus tard.",
|
|
720
|
+
waitingMessage: "En attente d\u2019un nouveau message.",
|
|
721
|
+
untitled: "T\xE2che sans titre"
|
|
722
|
+
};
|
|
723
|
+
var ca = {
|
|
724
|
+
sessions: "SESSIONS",
|
|
725
|
+
task: "TASCA",
|
|
726
|
+
status: "ESTAT",
|
|
727
|
+
time: "TEMPS",
|
|
728
|
+
model: "MODEL",
|
|
729
|
+
session: "SESSI\xD3",
|
|
730
|
+
folder: "Carpeta",
|
|
731
|
+
branch: "Branca",
|
|
732
|
+
lastActivity: "Darrera activitat",
|
|
733
|
+
currentSession: "sessi\xF3 actual",
|
|
734
|
+
summary: "RESUM",
|
|
735
|
+
now: "ARA",
|
|
736
|
+
lastMessage: "DARRER MISSATGE",
|
|
737
|
+
working: "TREBALLANT",
|
|
738
|
+
action: "CAL ACCI\xD3",
|
|
739
|
+
failed: "ERROR",
|
|
740
|
+
idle: "EN ESPERA",
|
|
741
|
+
inactive: "INACTIVA",
|
|
742
|
+
unknown: "DESCONEGUDA",
|
|
743
|
+
folders: "carpetes",
|
|
744
|
+
conversations: "converses",
|
|
745
|
+
workShort: "actiu",
|
|
746
|
+
actionShort: "acci\xF3",
|
|
747
|
+
failShort: "error",
|
|
748
|
+
noSessions: "No s\u2019han trobat sessions.",
|
|
749
|
+
unavailable: "No es pot canviar a aquesta sessi\xF3.",
|
|
750
|
+
pressSearch: "Premeu / per cercar",
|
|
751
|
+
search: "Cercar:",
|
|
752
|
+
filter: "Filtre:",
|
|
753
|
+
shortcutsWide: "\u2191\u2193 moure \xB7 PgUp/PgDn detalls \xB7 Retorn obrir \xB7 Esc tornar",
|
|
754
|
+
shortcutsNarrow: "\u2191\u2193 moure \xB7 Retorn obrir \xB7 espai detalls \xB7 Esc",
|
|
755
|
+
shortcutsDetail: "PgUp/PgDn detalls \xB7 Esc llista \xB7 Retorn obrir",
|
|
756
|
+
workProgress: "Treball en curs.",
|
|
757
|
+
waitingAction: "S\u2019espera la vostra acci\xF3.",
|
|
758
|
+
sessionFailed: "La sessi\xF3 ha fallat.",
|
|
759
|
+
savedLater: "Desada per a m\xE9s tard.",
|
|
760
|
+
waitingMessage: "S\u2019espera un missatge nou.",
|
|
761
|
+
untitled: "Tasca sense t\xEDtol"
|
|
762
|
+
};
|
|
763
|
+
var ru = {
|
|
764
|
+
sessions: "\u0421\u0415\u0421\u0421\u0418\u0418",
|
|
765
|
+
task: "\u0417\u0410\u0414\u0410\u0427\u0410",
|
|
766
|
+
status: "\u0421\u0422\u0410\u0422\u0423\u0421",
|
|
767
|
+
time: "\u0412\u0420\u0415\u041C\u042F",
|
|
768
|
+
model: "\u041C\u041E\u0414\u0415\u041B\u042C",
|
|
769
|
+
session: "\u0421\u0415\u0421\u0421\u0418\u042F",
|
|
770
|
+
folder: "\u041F\u0430\u043F\u043A\u0430",
|
|
771
|
+
branch: "\u0412\u0435\u0442\u043A\u0430",
|
|
772
|
+
lastActivity: "\u041F\u043E\u0441\u043B\u0435\u0434\u043D\u044F\u044F \u0430\u043A\u0442\u0438\u0432\u043D\u043E\u0441\u0442\u044C",
|
|
773
|
+
currentSession: "\u0442\u0435\u043A\u0443\u0449\u0430\u044F \u0441\u0435\u0441\u0441\u0438\u044F",
|
|
774
|
+
summary: "\u0421\u0412\u041E\u0414\u041A\u0410",
|
|
775
|
+
now: "\u0421\u0415\u0419\u0427\u0410\u0421",
|
|
776
|
+
lastMessage: "\u041F\u041E\u0421\u041B\u0415\u0414\u041D\u0415\u0415 \u0421\u041E\u041E\u0411\u0429\u0415\u041D\u0418\u0415",
|
|
777
|
+
working: "\u0420\u0410\u0411\u041E\u0422\u0410\u0415\u0422",
|
|
778
|
+
action: "\u041D\u0423\u0416\u041D\u041E \u0414\u0415\u0419\u0421\u0422\u0412\u0418\u0415",
|
|
779
|
+
failed: "\u041E\u0428\u0418\u0411\u041A\u0410",
|
|
780
|
+
idle: "\u041E\u0416\u0418\u0414\u0410\u0415\u0422",
|
|
781
|
+
inactive: "\u041D\u0415\u0410\u041A\u0422\u0418\u0412\u041D\u0410",
|
|
782
|
+
unknown: "\u041D\u0415\u0418\u0417\u0412\u0415\u0421\u0422\u041D\u041E",
|
|
783
|
+
folders: "\u043F\u0430\u043F\u043E\u043A",
|
|
784
|
+
conversations: "\u0431\u0435\u0441\u0435\u0434",
|
|
785
|
+
workShort: "\u0440\u0430\u0431\u043E\u0442\u0430",
|
|
786
|
+
actionShort: "\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435",
|
|
787
|
+
failShort: "\u043E\u0448\u0438\u0431\u043A\u0430",
|
|
788
|
+
noSessions: "\u0421\u0435\u0441\u0441\u0438\u0438 \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u044B.",
|
|
789
|
+
unavailable: "\u041F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0435 \u043D\u0430 \u0441\u0435\u0441\u0441\u0438\u044E \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u043E.",
|
|
790
|
+
pressSearch: "\u041D\u0430\u0436\u043C\u0438\u0442\u0435 / \u0434\u043B\u044F \u043F\u043E\u0438\u0441\u043A\u0430",
|
|
791
|
+
search: "\u041F\u043E\u0438\u0441\u043A:",
|
|
792
|
+
filter: "\u0424\u0438\u043B\u044C\u0442\u0440:",
|
|
793
|
+
shortcutsWide: "\u2191\u2193 \u0432\u044B\u0431\u043E\u0440 \xB7 PgUp/PgDn \u0434\u0435\u0442\u0430\u043B\u0438 \xB7 Enter \u043E\u0442\u043A\u0440\u044B\u0442\u044C \xB7 Esc \u043D\u0430\u0437\u0430\u0434",
|
|
794
|
+
shortcutsNarrow: "\u2191\u2193 \u0432\u044B\u0431\u043E\u0440 \xB7 Enter \u043E\u0442\u043A\u0440\u044B\u0442\u044C \xB7 \u043F\u0440\u043E\u0431\u0435\u043B \u0434\u0435\u0442\u0430\u043B\u0438 \xB7 Esc",
|
|
795
|
+
shortcutsDetail: "PgUp/PgDn \u0434\u0435\u0442\u0430\u043B\u0438 \xB7 Esc \u0441\u043F\u0438\u0441\u043E\u043A \xB7 Enter \u043E\u0442\u043A\u0440\u044B\u0442\u044C",
|
|
796
|
+
workProgress: "\u0420\u0430\u0431\u043E\u0442\u0430 \u0432\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442\u0441\u044F.",
|
|
797
|
+
waitingAction: "\u041E\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044F \u0432\u0430\u0448\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435.",
|
|
798
|
+
sessionFailed: "\u0421\u0435\u0441\u0441\u0438\u044F \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043B\u0430\u0441\u044C \u0441 \u043E\u0448\u0438\u0431\u043A\u043E\u0439.",
|
|
799
|
+
savedLater: "\u0421\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u043E \u043D\u0430 \u043F\u043E\u0442\u043E\u043C.",
|
|
800
|
+
waitingMessage: "\u041E\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044F \u043D\u043E\u0432\u043E\u0435 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435.",
|
|
801
|
+
untitled: "\u0411\u0435\u0437 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u044F"
|
|
802
|
+
};
|
|
803
|
+
var ja = {
|
|
804
|
+
sessions: "\u30BB\u30C3\u30B7\u30E7\u30F3",
|
|
805
|
+
task: "\u30BF\u30B9\u30AF",
|
|
806
|
+
status: "\u72B6\u614B",
|
|
807
|
+
time: "\u6642\u9593",
|
|
808
|
+
model: "\u30E2\u30C7\u30EB",
|
|
809
|
+
session: "\u30BB\u30C3\u30B7\u30E7\u30F3",
|
|
810
|
+
folder: "\u30D5\u30A9\u30EB\u30C0\u30FC",
|
|
811
|
+
branch: "\u30D6\u30E9\u30F3\u30C1",
|
|
812
|
+
lastActivity: "\u6700\u7D42\u66F4\u65B0",
|
|
813
|
+
currentSession: "\u73FE\u5728\u306E\u30BB\u30C3\u30B7\u30E7\u30F3",
|
|
814
|
+
summary: "\u6982\u8981",
|
|
815
|
+
now: "\u73FE\u5728",
|
|
816
|
+
lastMessage: "\u6700\u5F8C\u306E\u30E1\u30C3\u30BB\u30FC\u30B8",
|
|
817
|
+
working: "\u4F5C\u696D\u4E2D",
|
|
818
|
+
action: "\u8981\u5BFE\u5FDC",
|
|
819
|
+
failed: "\u5931\u6557",
|
|
820
|
+
idle: "\u5F85\u6A5F\u4E2D",
|
|
821
|
+
inactive: "\u975E\u30A2\u30AF\u30C6\u30A3\u30D6",
|
|
822
|
+
unknown: "\u4E0D\u660E",
|
|
823
|
+
folders: "\u30D5\u30A9\u30EB\u30C0\u30FC",
|
|
824
|
+
conversations: "\u4F1A\u8A71",
|
|
825
|
+
workShort: "\u4F5C\u696D",
|
|
826
|
+
actionShort: "\u5BFE\u5FDC",
|
|
827
|
+
failShort: "\u5931\u6557",
|
|
828
|
+
noSessions: "\u30BB\u30C3\u30B7\u30E7\u30F3\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002",
|
|
829
|
+
unavailable: "\u3053\u306E\u30BB\u30C3\u30B7\u30E7\u30F3\u306B\u306F\u5207\u308A\u66FF\u3048\u3089\u308C\u307E\u305B\u3093\u3002",
|
|
830
|
+
pressSearch: "/ \u3067\u691C\u7D22",
|
|
831
|
+
search: "\u691C\u7D22:",
|
|
832
|
+
filter: "\u7D5E\u308A\u8FBC\u307F:",
|
|
833
|
+
shortcutsWide: "\u2191\u2193 \u79FB\u52D5 \xB7 PgUp/PgDn \u8A73\u7D30 \xB7 Enter \u958B\u304F \xB7 Esc \u623B\u308B",
|
|
834
|
+
shortcutsNarrow: "\u2191\u2193 \u79FB\u52D5 \xB7 Enter \u958B\u304F \xB7 Space \u8A73\u7D30 \xB7 Esc",
|
|
835
|
+
shortcutsDetail: "PgUp/PgDn \u8A73\u7D30 \xB7 Esc \u4E00\u89A7 \xB7 Enter \u958B\u304F",
|
|
836
|
+
workProgress: "\u4F5C\u696D\u3092\u9032\u3081\u3066\u3044\u307E\u3059\u3002",
|
|
837
|
+
waitingAction: "\u64CD\u4F5C\u3092\u5F85\u3063\u3066\u3044\u307E\u3059\u3002",
|
|
838
|
+
sessionFailed: "\u30BB\u30C3\u30B7\u30E7\u30F3\u304C\u5931\u6557\u3057\u307E\u3057\u305F\u3002",
|
|
839
|
+
savedLater: "\u5F8C\u3067\u7D9A\u3051\u3089\u308C\u308B\u3088\u3046\u4FDD\u5B58\u3057\u307E\u3057\u305F\u3002",
|
|
840
|
+
waitingMessage: "\u65B0\u3057\u3044\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u5F85\u3063\u3066\u3044\u307E\u3059\u3002",
|
|
841
|
+
untitled: "\u7121\u984C\u306E\u30BF\u30B9\u30AF"
|
|
842
|
+
};
|
|
843
|
+
var zh = {
|
|
844
|
+
sessions: "\u4F1A\u8BDD",
|
|
845
|
+
task: "\u4EFB\u52A1",
|
|
846
|
+
status: "\u72B6\u6001",
|
|
847
|
+
time: "\u65F6\u95F4",
|
|
848
|
+
model: "\u6A21\u578B",
|
|
849
|
+
session: "\u4F1A\u8BDD",
|
|
850
|
+
folder: "\u6587\u4EF6\u5939",
|
|
851
|
+
branch: "\u5206\u652F",
|
|
852
|
+
lastActivity: "\u6700\u8FD1\u6D3B\u52A8",
|
|
853
|
+
currentSession: "\u5F53\u524D\u4F1A\u8BDD",
|
|
854
|
+
summary: "\u6458\u8981",
|
|
855
|
+
now: "\u5F53\u524D",
|
|
856
|
+
lastMessage: "\u6700\u65B0\u6D88\u606F",
|
|
857
|
+
working: "\u5DE5\u4F5C\u4E2D",
|
|
858
|
+
action: "\u9700\u8981\u64CD\u4F5C",
|
|
859
|
+
failed: "\u5931\u8D25",
|
|
860
|
+
idle: "\u7A7A\u95F2",
|
|
861
|
+
inactive: "\u672A\u8FD0\u884C",
|
|
862
|
+
unknown: "\u672A\u77E5",
|
|
863
|
+
folders: "\u4E2A\u6587\u4EF6\u5939",
|
|
864
|
+
conversations: "\u4E2A\u4F1A\u8BDD",
|
|
865
|
+
workShort: "\u5DE5\u4F5C",
|
|
866
|
+
actionShort: "\u64CD\u4F5C",
|
|
867
|
+
failShort: "\u5931\u8D25",
|
|
868
|
+
noSessions: "\u672A\u627E\u5230\u4F1A\u8BDD\u3002",
|
|
869
|
+
unavailable: "\u65E0\u6CD5\u5207\u6362\u5230\u6B64\u4F1A\u8BDD\u3002",
|
|
870
|
+
pressSearch: "\u6309 / \u641C\u7D22",
|
|
871
|
+
search: "\u641C\u7D22\uFF1A",
|
|
872
|
+
filter: "\u7B5B\u9009\uFF1A",
|
|
873
|
+
shortcutsWide: "\u2191\u2193 \u79FB\u52A8 \xB7 PgUp/PgDn \u8BE6\u60C5 \xB7 Enter \u6253\u5F00 \xB7 Esc \u8FD4\u56DE",
|
|
874
|
+
shortcutsNarrow: "\u2191\u2193 \u79FB\u52A8 \xB7 Enter \u6253\u5F00 \xB7 \u7A7A\u683C\u8BE6\u60C5 \xB7 Esc",
|
|
875
|
+
shortcutsDetail: "PgUp/PgDn \u8BE6\u60C5 \xB7 Esc \u5217\u8868 \xB7 Enter \u6253\u5F00",
|
|
876
|
+
workProgress: "\u6B63\u5728\u5DE5\u4F5C\u3002",
|
|
877
|
+
waitingAction: "\u7B49\u5F85\u60A8\u64CD\u4F5C\u3002",
|
|
878
|
+
sessionFailed: "\u4F1A\u8BDD\u5931\u8D25\u3002",
|
|
879
|
+
savedLater: "\u5DF2\u4FDD\u5B58\uFF0C\u7A0D\u540E\u7EE7\u7EED\u3002",
|
|
880
|
+
waitingMessage: "\u7B49\u5F85\u65B0\u6D88\u606F\u3002",
|
|
881
|
+
untitled: "\u672A\u547D\u540D\u4EFB\u52A1"
|
|
882
|
+
};
|
|
883
|
+
var zhTW = {
|
|
884
|
+
sessions: "\u5C0D\u8A71",
|
|
885
|
+
task: "\u4EFB\u52D9",
|
|
886
|
+
status: "\u72C0\u614B",
|
|
887
|
+
time: "\u6642\u9593",
|
|
888
|
+
model: "\u6A21\u578B",
|
|
889
|
+
session: "\u5C0D\u8A71",
|
|
890
|
+
folder: "\u8CC7\u6599\u593E",
|
|
891
|
+
branch: "\u5206\u652F",
|
|
892
|
+
lastActivity: "\u6700\u8FD1\u6D3B\u52D5",
|
|
893
|
+
currentSession: "\u76EE\u524D\u5C0D\u8A71",
|
|
894
|
+
summary: "\u6458\u8981",
|
|
895
|
+
now: "\u76EE\u524D",
|
|
896
|
+
lastMessage: "\u6700\u65B0\u8A0A\u606F",
|
|
897
|
+
working: "\u5DE5\u4F5C\u4E2D",
|
|
898
|
+
action: "\u9700\u8981\u64CD\u4F5C",
|
|
899
|
+
failed: "\u5931\u6557",
|
|
900
|
+
idle: "\u9592\u7F6E",
|
|
901
|
+
inactive: "\u672A\u57F7\u884C",
|
|
902
|
+
unknown: "\u672A\u77E5",
|
|
903
|
+
folders: "\u500B\u8CC7\u6599\u593E",
|
|
904
|
+
conversations: "\u500B\u5C0D\u8A71",
|
|
905
|
+
workShort: "\u5DE5\u4F5C",
|
|
906
|
+
actionShort: "\u64CD\u4F5C",
|
|
907
|
+
failShort: "\u5931\u6557",
|
|
908
|
+
noSessions: "\u627E\u4E0D\u5230\u5C0D\u8A71\u3002",
|
|
909
|
+
unavailable: "\u7121\u6CD5\u5207\u63DB\u81F3\u6B64\u5C0D\u8A71\u3002",
|
|
910
|
+
pressSearch: "\u6309 / \u641C\u5C0B",
|
|
911
|
+
search: "\u641C\u5C0B\uFF1A",
|
|
912
|
+
filter: "\u7BE9\u9078\uFF1A",
|
|
913
|
+
shortcutsWide: "\u2191\u2193 \u79FB\u52D5 \xB7 PgUp/PgDn \u8A73\u60C5 \xB7 Enter \u958B\u555F \xB7 Esc \u8FD4\u56DE",
|
|
914
|
+
shortcutsNarrow: "\u2191\u2193 \u79FB\u52D5 \xB7 Enter \u958B\u555F \xB7 \u7A7A\u767D\u9375\u8A73\u60C5 \xB7 Esc",
|
|
915
|
+
shortcutsDetail: "PgUp/PgDn \u8A73\u60C5 \xB7 Esc \u6E05\u55AE \xB7 Enter \u958B\u555F",
|
|
916
|
+
workProgress: "\u6B63\u5728\u5DE5\u4F5C\u3002",
|
|
917
|
+
waitingAction: "\u7B49\u5F85\u60A8\u7684\u64CD\u4F5C\u3002",
|
|
918
|
+
sessionFailed: "\u5C0D\u8A71\u5931\u6557\u3002",
|
|
919
|
+
savedLater: "\u5DF2\u5132\u5B58\uFF0C\u7A0D\u5F8C\u7E7C\u7E8C\u3002",
|
|
920
|
+
waitingMessage: "\u7B49\u5F85\u65B0\u8A0A\u606F\u3002",
|
|
921
|
+
untitled: "\u672A\u547D\u540D\u4EFB\u52D9"
|
|
922
|
+
};
|
|
923
|
+
function getDashboardCopy(language) {
|
|
924
|
+
switch (language.toLowerCase()) {
|
|
925
|
+
case "pt":
|
|
926
|
+
case "pt-br":
|
|
927
|
+
return pt;
|
|
928
|
+
case "de":
|
|
929
|
+
case "de-de":
|
|
930
|
+
return de;
|
|
931
|
+
case "fr":
|
|
932
|
+
case "fr-fr":
|
|
933
|
+
return fr;
|
|
934
|
+
case "ca":
|
|
935
|
+
case "ca-es":
|
|
936
|
+
return ca;
|
|
937
|
+
case "ru":
|
|
938
|
+
case "ru-ru":
|
|
939
|
+
return ru;
|
|
940
|
+
case "ja":
|
|
941
|
+
case "ja-jp":
|
|
942
|
+
return ja;
|
|
943
|
+
case "zh-tw":
|
|
944
|
+
return zhTW;
|
|
945
|
+
case "zh":
|
|
946
|
+
case "zh-cn":
|
|
947
|
+
return zh;
|
|
948
|
+
default:
|
|
949
|
+
return en;
|
|
950
|
+
}
|
|
951
|
+
}
|
|
952
|
+
__name(getDashboardCopy, "getDashboardCopy");
|
|
953
|
+
|
|
954
|
+
// packages/cli/src/agent-view/session-dashboard.ts
|
|
955
|
+
var CSI = "\x1B[";
|
|
956
|
+
function ansiColor(hex, background = false) {
|
|
957
|
+
const match = /^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/iu.exec(hex);
|
|
958
|
+
if (!match || process.env["NO_COLOR"]) return "";
|
|
959
|
+
return `${CSI}${background ? 48 : 38};2;${parseInt(match[1], 16)};${parseInt(match[2], 16)};${parseInt(match[3], 16)}m`;
|
|
960
|
+
}
|
|
961
|
+
__name(ansiColor, "ansiColor");
|
|
962
|
+
function dashboardColors(type) {
|
|
963
|
+
const theme = type === "light" ? O1CodeLight : O1CodeDark;
|
|
964
|
+
return {
|
|
965
|
+
reset: process.env["NO_COLOR"] ? "" : `${CSI}0m`,
|
|
966
|
+
bold: process.env["NO_COLOR"] ? "" : `${CSI}1m`,
|
|
967
|
+
selected: ansiColor(theme.extendedColors.ui.brand, true) + ansiColor(theme.semanticColors.background.primary),
|
|
968
|
+
muted: ansiColor(theme.semanticColors.text.secondary),
|
|
969
|
+
meta: ansiColor(theme.extendedColors.text.muted),
|
|
970
|
+
accent: ansiColor(theme.semanticColors.text.accent),
|
|
971
|
+
rule: ansiColor(theme.extendedColors.ui.separator)
|
|
972
|
+
};
|
|
973
|
+
}
|
|
974
|
+
__name(dashboardColors, "dashboardColors");
|
|
975
|
+
function groupSessionRows(rows) {
|
|
976
|
+
const groups = /* @__PURE__ */ new Map();
|
|
977
|
+
for (const row of rows) {
|
|
978
|
+
const group = groups.get(row.workspace) ?? [];
|
|
979
|
+
group.push(row);
|
|
980
|
+
groups.set(row.workspace, group);
|
|
981
|
+
}
|
|
982
|
+
return [...groups.values()].flat();
|
|
983
|
+
}
|
|
984
|
+
__name(groupSessionRows, "groupSessionRows");
|
|
985
|
+
function renderAgentSessionDashboard(allRows, view) {
|
|
986
|
+
const width = Math.max(8, view.columns - 1);
|
|
987
|
+
const color = dashboardColors(view.theme ?? "dark");
|
|
988
|
+
const copy = getDashboardCopy(view.language ?? "en");
|
|
989
|
+
const inner = width - 4;
|
|
990
|
+
const bodyHeight = Math.max(1, view.rows - 4);
|
|
991
|
+
const search = view.search ?? "";
|
|
992
|
+
const rows = groupSessionRows(
|
|
993
|
+
allRows.filter(
|
|
994
|
+
(row) => `${row.title} ${row.workspace}`.toLocaleLowerCase().includes(search.toLocaleLowerCase())
|
|
995
|
+
)
|
|
996
|
+
);
|
|
997
|
+
const selected = Math.max(0, Math.min(view.selected, rows.length - 1));
|
|
998
|
+
const split = view.columns >= 110;
|
|
999
|
+
const rosterWidth = split ? Math.floor(inner * 0.59) : inner;
|
|
1000
|
+
const detailWidth = split ? inner - rosterWidth - 3 : inner;
|
|
1001
|
+
const statusWidth = rosterWidth >= 75 ? 13 : 9;
|
|
1002
|
+
const timeWidth = 5;
|
|
1003
|
+
const modelWidth = rosterWidth >= 60 ? 16 : 10;
|
|
1004
|
+
const gap = " ";
|
|
1005
|
+
const titleWidth = Math.max(
|
|
1006
|
+
6,
|
|
1007
|
+
rosterWidth - statusWidth - timeWidth - modelWidth - 3
|
|
1008
|
+
);
|
|
1009
|
+
const groups = /* @__PURE__ */ new Map();
|
|
1010
|
+
for (const [index, row] of rows.entries()) {
|
|
1011
|
+
const group = groups.get(row.workspace) ?? [];
|
|
1012
|
+
group.push({ row, index });
|
|
1013
|
+
groups.set(row.workspace, group);
|
|
1014
|
+
}
|
|
1015
|
+
const roster = [
|
|
1016
|
+
{ text: "" },
|
|
1017
|
+
{
|
|
1018
|
+
text: `${color.meta}${pad(copy.task, titleWidth)}${gap}${pad(copy.status, statusWidth)}${gap}${pad(copy.time, timeWidth)}${gap}${pad(copy.model, modelWidth)}${color.reset}`
|
|
1019
|
+
}
|
|
1020
|
+
];
|
|
1021
|
+
for (const [workspace, entries] of groups) {
|
|
1022
|
+
roster.push({
|
|
1023
|
+
text: `${color.meta}${spread(workspace, String(entries.length), rosterWidth)}${color.reset}`
|
|
1024
|
+
});
|
|
1025
|
+
for (const entry of entries) {
|
|
1026
|
+
const { row, index } = entry;
|
|
1027
|
+
const active = index === selected;
|
|
1028
|
+
const marker = row.current ? "\u25CF" : " ";
|
|
1029
|
+
const label = statusLabel(row.status, statusWidth, copy);
|
|
1030
|
+
const title = pad(
|
|
1031
|
+
`${active ? "\u276F" : " "} ${marker} ${row.title || copy.untitled}`,
|
|
1032
|
+
titleWidth
|
|
1033
|
+
);
|
|
1034
|
+
const facts = `${pad(label, statusWidth)}${gap}${pad(shortAge(row.updatedAt, copy), timeWidth)}${gap}${pad(row.model ?? "\u2014", modelWidth)}`;
|
|
1035
|
+
roster.push({
|
|
1036
|
+
text: active ? `${color.selected}${color.bold}${title}${gap}${facts}${color.reset}` : `${color.bold}${title}${color.reset}${gap}${color.muted}${facts}${color.reset}`,
|
|
1037
|
+
index
|
|
1038
|
+
});
|
|
1039
|
+
}
|
|
1040
|
+
roster.push({ text: "" });
|
|
1041
|
+
}
|
|
1042
|
+
if (rows.length === 0) roster.push({ text: copy.noSessions });
|
|
1043
|
+
const selectedLine = Math.max(
|
|
1044
|
+
0,
|
|
1045
|
+
roster.findIndex((line) => line.index === selected)
|
|
1046
|
+
);
|
|
1047
|
+
const maxOffset = Math.max(0, roster.length - bodyHeight);
|
|
1048
|
+
const offset = Math.min(
|
|
1049
|
+
maxOffset,
|
|
1050
|
+
Math.max(0, selectedLine - bodyHeight + 3)
|
|
1051
|
+
);
|
|
1052
|
+
const visibleRoster = roster.slice(offset, offset + bodyHeight).map((line) => line.text);
|
|
1053
|
+
const detail = rows[selected] ? detailLines(
|
|
1054
|
+
rows[selected],
|
|
1055
|
+
detailWidth,
|
|
1056
|
+
bodyHeight,
|
|
1057
|
+
view.detailScroll ?? 0,
|
|
1058
|
+
color,
|
|
1059
|
+
copy
|
|
1060
|
+
) : [copy.noSessions];
|
|
1061
|
+
const counts = {
|
|
1062
|
+
working: rows.filter((row) => row.status === "working").length,
|
|
1063
|
+
input: rows.filter((row) => row.status === "needs_input").length,
|
|
1064
|
+
failed: rows.filter((row) => row.status === "failed").length
|
|
1065
|
+
};
|
|
1066
|
+
const overview = inner < 70 ? `${rows.length} ${copy.conversations} \xB7 ${copy.workShort} ${counts.working} \xB7 ${copy.actionShort} ${counts.input} \xB7 ${copy.failShort} ${counts.failed}` : `${groups.size} ${copy.folders} \xB7 ${rows.length} ${copy.conversations} \xB7 ${copy.working.toLowerCase()} ${counts.working} \xB7 ${copy.action.toLowerCase()} ${counts.input} \xB7 ${copy.failShort} ${counts.failed}`;
|
|
1067
|
+
const lines = [
|
|
1068
|
+
`${color.bold}${copy.sessions}${color.reset} ${color.meta}\xB7 ${overview}${color.reset}`
|
|
1069
|
+
];
|
|
1070
|
+
for (let index = 0; index < bodyHeight; index++) {
|
|
1071
|
+
if (split) {
|
|
1072
|
+
lines.push(
|
|
1073
|
+
`${pad(visibleRoster[index] ?? "", rosterWidth)} ${color.rule}\u2502${color.reset} ${pad(detail[index] ?? "", detailWidth)}`
|
|
1074
|
+
);
|
|
1075
|
+
} else {
|
|
1076
|
+
lines.push(
|
|
1077
|
+
view.detailFocused ? detail[index] ?? "" : visibleRoster[index] ?? ""
|
|
1078
|
+
);
|
|
1079
|
+
}
|
|
1080
|
+
}
|
|
1081
|
+
const shortcuts = split ? copy.shortcutsWide : view.detailFocused ? copy.shortcutsDetail : copy.shortcutsNarrow;
|
|
1082
|
+
const searchHint = view.message || (view.searchMode ? `${copy.search} ${search}\u258C` : search ? `${copy.filter} ${search}` : copy.pressSearch);
|
|
1083
|
+
lines.push(spread(shortcuts, searchHint, inner));
|
|
1084
|
+
return [
|
|
1085
|
+
`\u256D${"\u2500".repeat(width - 2)}\u256E`,
|
|
1086
|
+
...lines.slice(0, Math.max(0, view.rows - 2)).map((line) => frameLine(line, width)),
|
|
1087
|
+
`\u2570${"\u2500".repeat(width - 2)}\u256F`
|
|
1088
|
+
].join("\n");
|
|
1089
|
+
}
|
|
1090
|
+
__name(renderAgentSessionDashboard, "renderAgentSessionDashboard");
|
|
1091
|
+
async function runAgentSessionDashboard(loadRows, currentSessionId, theme = "dark", language = "en") {
|
|
1092
|
+
const stdin = process.stdin;
|
|
1093
|
+
const stdout = process.stdout;
|
|
1094
|
+
if (!stdin.isTTY || !stdout.isTTY || !stdin.setRawMode) {
|
|
1095
|
+
throw new Error("Agent sessions require an interactive terminal.");
|
|
1096
|
+
}
|
|
1097
|
+
let rows = groupSessionRows(await loadRows());
|
|
1098
|
+
let selected = Math.max(
|
|
1099
|
+
0,
|
|
1100
|
+
rows.findIndex((row) => row.sessionId === currentSessionId)
|
|
1101
|
+
);
|
|
1102
|
+
let search = "";
|
|
1103
|
+
let searchMode = false;
|
|
1104
|
+
let detailScroll = 0;
|
|
1105
|
+
let detailFocused = false;
|
|
1106
|
+
let message = "";
|
|
1107
|
+
let active = true;
|
|
1108
|
+
const details = /* @__PURE__ */ new Map();
|
|
1109
|
+
const filtered = /* @__PURE__ */ __name(() => rows.filter(
|
|
1110
|
+
(row) => `${row.title} ${row.workspace}`.toLocaleLowerCase().includes(search.toLocaleLowerCase())
|
|
1111
|
+
), "filtered");
|
|
1112
|
+
const render = /* @__PURE__ */ __name(() => {
|
|
1113
|
+
stdout.write(
|
|
1114
|
+
`${CSI}H${CSI}2J${renderAgentSessionDashboard(rows, {
|
|
1115
|
+
columns: stdout.columns || 80,
|
|
1116
|
+
rows: stdout.rows || 24,
|
|
1117
|
+
selected,
|
|
1118
|
+
search,
|
|
1119
|
+
searchMode,
|
|
1120
|
+
detailScroll,
|
|
1121
|
+
detailFocused,
|
|
1122
|
+
message,
|
|
1123
|
+
theme,
|
|
1124
|
+
language
|
|
1125
|
+
})}`
|
|
1126
|
+
);
|
|
1127
|
+
}, "render");
|
|
1128
|
+
const refreshDetail = /* @__PURE__ */ __name(() => {
|
|
1129
|
+
const row = filtered()[selected];
|
|
1130
|
+
if (!row || details.has(row.sessionId)) return;
|
|
1131
|
+
details.set(row.sessionId, void 0);
|
|
1132
|
+
void loadAgentSessionExcerpt(row).then((excerpt) => {
|
|
1133
|
+
details.set(row.sessionId, excerpt);
|
|
1134
|
+
const current = rows.find((item) => item.sessionId === row.sessionId);
|
|
1135
|
+
if (current && excerpt) current.lastMessage = excerpt;
|
|
1136
|
+
if (active) render();
|
|
1137
|
+
}).catch(() => {
|
|
1138
|
+
});
|
|
1139
|
+
}, "refreshDetail");
|
|
1140
|
+
readline.emitKeypressEvents(stdin);
|
|
1141
|
+
stdin.setRawMode(true);
|
|
1142
|
+
stdin.resume();
|
|
1143
|
+
stdout.write(`${CSI}?1049h${CSI}?25l`);
|
|
1144
|
+
render();
|
|
1145
|
+
refreshDetail();
|
|
1146
|
+
return new Promise((resolve2) => {
|
|
1147
|
+
let finished = false;
|
|
1148
|
+
let refreshing = false;
|
|
1149
|
+
const close = /* @__PURE__ */ __name((target) => {
|
|
1150
|
+
if (finished) return;
|
|
1151
|
+
finished = true;
|
|
1152
|
+
active = false;
|
|
1153
|
+
clearInterval(refreshTimer);
|
|
1154
|
+
stdout.off("resize", render);
|
|
1155
|
+
stdin.off("keypress", onKey);
|
|
1156
|
+
stdin.setRawMode?.(false);
|
|
1157
|
+
stdin.pause();
|
|
1158
|
+
stdout.write(`${CSI}?25h${CSI}?1049l`);
|
|
1159
|
+
resolve2(target);
|
|
1160
|
+
}, "close");
|
|
1161
|
+
const onKey = /* @__PURE__ */ __name((character, key) => {
|
|
1162
|
+
message = "";
|
|
1163
|
+
if (key.ctrl && key.name === "c") return close();
|
|
1164
|
+
if (searchMode) {
|
|
1165
|
+
if (key.name === "escape" || key.name === "return") searchMode = false;
|
|
1166
|
+
else if (key.name === "backspace")
|
|
1167
|
+
search = [...search].slice(0, -1).join("");
|
|
1168
|
+
else if (character && !key.ctrl && !key.meta && character.length === 1)
|
|
1169
|
+
search += character;
|
|
1170
|
+
selected = 0;
|
|
1171
|
+
detailScroll = 0;
|
|
1172
|
+
} else if (key.name === "escape" || key.name === "left") {
|
|
1173
|
+
if (detailFocused) detailFocused = false;
|
|
1174
|
+
else return close();
|
|
1175
|
+
} else if (character === "/") {
|
|
1176
|
+
searchMode = true;
|
|
1177
|
+
} else if (key.name === "up" || character === "k") {
|
|
1178
|
+
selected = Math.max(0, selected - 1);
|
|
1179
|
+
detailScroll = 0;
|
|
1180
|
+
} else if (key.name === "down" || character === "j") {
|
|
1181
|
+
selected = Math.min(filtered().length - 1, selected + 1);
|
|
1182
|
+
detailScroll = 0;
|
|
1183
|
+
} else if (key.name === "pageup" || key.name === "pagedown") {
|
|
1184
|
+
detailScroll = Math.max(
|
|
1185
|
+
0,
|
|
1186
|
+
detailScroll + (key.name === "pageup" ? -8 : 8)
|
|
1187
|
+
);
|
|
1188
|
+
} else if (character === " " && stdout.columns < 110) {
|
|
1189
|
+
detailFocused = !detailFocused;
|
|
1190
|
+
} else if (key.name === "return") {
|
|
1191
|
+
const target = filtered()[selected];
|
|
1192
|
+
if (target?.switchable) return close(target.sessionId);
|
|
1193
|
+
message = getDashboardCopy(language).unavailable;
|
|
1194
|
+
}
|
|
1195
|
+
render();
|
|
1196
|
+
refreshDetail();
|
|
1197
|
+
}, "onKey");
|
|
1198
|
+
const refreshTimer = setInterval(() => {
|
|
1199
|
+
if (refreshing) return;
|
|
1200
|
+
refreshing = true;
|
|
1201
|
+
const selectedId = filtered()[selected]?.sessionId;
|
|
1202
|
+
void loadRows().then((next) => {
|
|
1203
|
+
rows = groupSessionRows(next);
|
|
1204
|
+
for (const row of rows) {
|
|
1205
|
+
const excerpt = details.get(row.sessionId);
|
|
1206
|
+
if (excerpt) row.lastMessage = excerpt;
|
|
1207
|
+
}
|
|
1208
|
+
selected = Math.max(
|
|
1209
|
+
0,
|
|
1210
|
+
filtered().findIndex((row) => row.sessionId === selectedId)
|
|
1211
|
+
);
|
|
1212
|
+
if (!finished) {
|
|
1213
|
+
render();
|
|
1214
|
+
refreshDetail();
|
|
1215
|
+
}
|
|
1216
|
+
}).catch(() => {
|
|
1217
|
+
}).finally(() => {
|
|
1218
|
+
refreshing = false;
|
|
1219
|
+
});
|
|
1220
|
+
}, 5e3);
|
|
1221
|
+
stdout.on("resize", render);
|
|
1222
|
+
stdin.on("keypress", onKey);
|
|
1223
|
+
});
|
|
1224
|
+
}
|
|
1225
|
+
__name(runAgentSessionDashboard, "runAgentSessionDashboard");
|
|
1226
|
+
function detailLines(row, width, height, scroll, color, copy) {
|
|
1227
|
+
const status = statusLabel(row.status, 16, copy);
|
|
1228
|
+
const heading = spread(
|
|
1229
|
+
`${color.selected} ${truncate(row.title || copy.untitled, Math.max(5, width - status.length - 3))} ${color.reset}`,
|
|
1230
|
+
`${color.selected} ${status} ${color.reset}`,
|
|
1231
|
+
width
|
|
1232
|
+
);
|
|
1233
|
+
const content = [
|
|
1234
|
+
heading,
|
|
1235
|
+
"",
|
|
1236
|
+
`${color.accent}${copy.session}${color.reset}`,
|
|
1237
|
+
`${copy.folder} ${row.workspace}`,
|
|
1238
|
+
`${copy.model} ${row.model ?? "\u2014"}`,
|
|
1239
|
+
`${copy.branch} ${row.branch ?? "\u2014"}`,
|
|
1240
|
+
`${copy.lastActivity} ${shortAge(row.updatedAt, copy)}${row.current ? ` \xB7 ${copy.currentSession}` : ""}`,
|
|
1241
|
+
"",
|
|
1242
|
+
`${color.accent}${copy.summary}${color.reset}`,
|
|
1243
|
+
...wrap(row.summary || row.title || copy.untitled, width),
|
|
1244
|
+
"",
|
|
1245
|
+
`${color.accent}${copy.now}${color.reset}`,
|
|
1246
|
+
...wrap(
|
|
1247
|
+
row.status === "working" ? copy.workProgress : row.status === "needs_input" ? copy.waitingAction : row.status === "failed" ? copy.sessionFailed : row.status === "inactive" ? copy.savedLater : copy.waitingMessage,
|
|
1248
|
+
width
|
|
1249
|
+
),
|
|
1250
|
+
"",
|
|
1251
|
+
`${color.accent}${copy.lastMessage}${color.reset}`,
|
|
1252
|
+
...wrap(row.lastMessage || row.summary || "\u2014", width)
|
|
1253
|
+
];
|
|
1254
|
+
const offset = Math.min(
|
|
1255
|
+
Math.max(0, scroll),
|
|
1256
|
+
Math.max(0, content.length - height)
|
|
1257
|
+
);
|
|
1258
|
+
return content.slice(offset, offset + height);
|
|
1259
|
+
}
|
|
1260
|
+
__name(detailLines, "detailLines");
|
|
1261
|
+
function statusLabel(status, width, copy) {
|
|
1262
|
+
const labels = {
|
|
1263
|
+
working: `\u25CC ${copy.working}`,
|
|
1264
|
+
needs_input: `! ${copy.action}`,
|
|
1265
|
+
failed: `\xD7 ${copy.failed}`,
|
|
1266
|
+
idle: `\u25CB ${copy.idle}`,
|
|
1267
|
+
inactive: `\u25CB ${copy.inactive}`,
|
|
1268
|
+
unknown: `? ${copy.unknown}`
|
|
1269
|
+
};
|
|
1270
|
+
return width < 11 && status === "working" ? `\u25CC ${copy.workShort}` : labels[status];
|
|
1271
|
+
}
|
|
1272
|
+
__name(statusLabel, "statusLabel");
|
|
1273
|
+
function shortAge(timestamp, copy) {
|
|
1274
|
+
const minutes = Math.max(0, Math.floor((Date.now() - timestamp) / 6e4));
|
|
1275
|
+
if (minutes < 1) return copy.now.toLowerCase();
|
|
1276
|
+
if (minutes < 60) return `${minutes}m`;
|
|
1277
|
+
if (minutes < 1440) return `${Math.floor(minutes / 60)}h`;
|
|
1278
|
+
return `${Math.floor(minutes / 1440)}d`;
|
|
1279
|
+
}
|
|
1280
|
+
__name(shortAge, "shortAge");
|
|
1281
|
+
function wrap(value, width) {
|
|
1282
|
+
const result = [];
|
|
1283
|
+
let line = "";
|
|
1284
|
+
for (const word of value.split(/\s+/u)) {
|
|
1285
|
+
if (stringWidth(`${line} ${word}`) > width && line) {
|
|
1286
|
+
result.push(line);
|
|
1287
|
+
line = word;
|
|
1288
|
+
} else line = line ? `${line} ${word}` : word;
|
|
1289
|
+
}
|
|
1290
|
+
if (line) result.push(line);
|
|
1291
|
+
return result.length ? result : [""];
|
|
1292
|
+
}
|
|
1293
|
+
__name(wrap, "wrap");
|
|
1294
|
+
function pad(value, width) {
|
|
1295
|
+
const clipped = truncate(value, width);
|
|
1296
|
+
return clipped + " ".repeat(Math.max(0, width - visibleWidth(clipped)));
|
|
1297
|
+
}
|
|
1298
|
+
__name(pad, "pad");
|
|
1299
|
+
function truncate(value, width) {
|
|
1300
|
+
if (width <= 0) return "";
|
|
1301
|
+
if (visibleWidth(value) <= width) return value;
|
|
1302
|
+
const plain = value.replace(new RegExp(String.raw`\x1b\[[0-9;]*m`, "gu"), "");
|
|
1303
|
+
let result = "";
|
|
1304
|
+
for (const character of plain) {
|
|
1305
|
+
if (stringWidth(result + character) >= width) break;
|
|
1306
|
+
result += character;
|
|
1307
|
+
}
|
|
1308
|
+
return `${result}\u2026`;
|
|
1309
|
+
}
|
|
1310
|
+
__name(truncate, "truncate");
|
|
1311
|
+
function visibleWidth(value) {
|
|
1312
|
+
return stringWidth(
|
|
1313
|
+
value.replace(new RegExp(String.raw`\x1b\[[0-9;]*m`, "gu"), "")
|
|
1314
|
+
);
|
|
1315
|
+
}
|
|
1316
|
+
__name(visibleWidth, "visibleWidth");
|
|
1317
|
+
function spread(left, right, width) {
|
|
1318
|
+
const clippedRight = truncate(right, Math.max(1, width - 4));
|
|
1319
|
+
const clippedLeft = truncate(
|
|
1320
|
+
left,
|
|
1321
|
+
Math.max(1, width - visibleWidth(clippedRight) - 1)
|
|
1322
|
+
);
|
|
1323
|
+
return `${clippedLeft}${" ".repeat(Math.max(1, width - visibleWidth(clippedLeft) - visibleWidth(clippedRight)))}${clippedRight}`;
|
|
1324
|
+
}
|
|
1325
|
+
__name(spread, "spread");
|
|
1326
|
+
function frameLine(value, width) {
|
|
1327
|
+
return `\u2502 ${pad(value, width - 4)} \u2502`;
|
|
1328
|
+
}
|
|
1329
|
+
__name(frameLine, "frameLine");
|
|
1330
|
+
|
|
1331
|
+
// packages/cli/src/agent-view/foreground-runner.ts
|
|
1332
|
+
var WORKER_READY_TIMEOUT_MS = 45e3;
|
|
1333
|
+
async function runAgentSessionForeground(onReady = () => {
|
|
1334
|
+
}) {
|
|
1335
|
+
const supervisor = await ensureAgentViewSupervisor();
|
|
1336
|
+
const record = await readAgentViewSupervisor();
|
|
1337
|
+
if (!record?.authToken) {
|
|
1338
|
+
throw new Error("Agent session supervisor authentication is unavailable.");
|
|
1339
|
+
}
|
|
1340
|
+
const ownerId = randomUUID();
|
|
1341
|
+
const lease = await watchAgentViewOwner(supervisor.socketPath, ownerId, {
|
|
1342
|
+
authToken: record.authToken
|
|
1343
|
+
});
|
|
1344
|
+
let created;
|
|
1345
|
+
try {
|
|
1346
|
+
created = await callAgentViewSupervisor(
|
|
1347
|
+
supervisor.socketPath,
|
|
1348
|
+
"dispatch",
|
|
1349
|
+
{ cwd: process.cwd(), interactive: true, ownerId },
|
|
1350
|
+
{ authToken: record.authToken, timeoutMs: 3e4 }
|
|
1351
|
+
);
|
|
1352
|
+
} catch (error) {
|
|
1353
|
+
lease.dispose();
|
|
1354
|
+
throw error;
|
|
1355
|
+
}
|
|
1356
|
+
if (!isRecord2(created) || typeof created["sessionId"] !== "string") {
|
|
1357
|
+
lease.dispose();
|
|
1358
|
+
throw new Error("Agent session supervisor returned no session ID.");
|
|
1359
|
+
}
|
|
1360
|
+
const sessionId = created["sessionId"];
|
|
1361
|
+
const controller = new AgentSessionForegroundController(
|
|
1362
|
+
createSupervisorForegroundTransport({
|
|
1363
|
+
socketPath: supervisor.socketPath,
|
|
1364
|
+
authToken: record.authToken,
|
|
1365
|
+
peek: /* @__PURE__ */ __name((id) => supervisor.peek(id), "peek")
|
|
1366
|
+
})
|
|
1367
|
+
);
|
|
1368
|
+
let attached = false;
|
|
1369
|
+
try {
|
|
1370
|
+
await waitForWorkerReady(sessionId, supervisor.peek);
|
|
1371
|
+
await controller.select(sessionId);
|
|
1372
|
+
attached = true;
|
|
1373
|
+
onReady();
|
|
1374
|
+
let activeId = sessionId;
|
|
1375
|
+
let lastDashboardRequestId;
|
|
1376
|
+
while (controller.activeSessionId) {
|
|
1377
|
+
await delay2(150);
|
|
1378
|
+
const snapshot = await supervisor.peek(activeId);
|
|
1379
|
+
const state = readState2(snapshot);
|
|
1380
|
+
if (state?.["processState"] === "exited") break;
|
|
1381
|
+
const requestId = readDashboardRequestId(snapshot);
|
|
1382
|
+
if (!requestId || requestId === lastDashboardRequestId) continue;
|
|
1383
|
+
lastDashboardRequestId = requestId;
|
|
1384
|
+
await controller.suspend();
|
|
1385
|
+
try {
|
|
1386
|
+
const loadRows = /* @__PURE__ */ __name(() => loadAgentSessionCatalog(
|
|
1387
|
+
process.cwd(),
|
|
1388
|
+
activeId,
|
|
1389
|
+
() => supervisor.list()
|
|
1390
|
+
), "loadRows");
|
|
1391
|
+
const theme = readDashboardTheme(snapshot);
|
|
1392
|
+
const target = await runAgentSessionDashboard(
|
|
1393
|
+
loadRows,
|
|
1394
|
+
activeId,
|
|
1395
|
+
theme,
|
|
1396
|
+
readDashboardLanguage(snapshot)
|
|
1397
|
+
);
|
|
1398
|
+
if (target && target !== activeId) {
|
|
1399
|
+
const row = (await loadRows()).find(
|
|
1400
|
+
(candidate) => candidate.sessionId === target
|
|
1401
|
+
);
|
|
1402
|
+
if (!row?.switchable)
|
|
1403
|
+
throw new Error(`Session ${target} is unavailable.`);
|
|
1404
|
+
if (row.source === "saved") {
|
|
1405
|
+
await supervisor.adopt({
|
|
1406
|
+
sessionId: target,
|
|
1407
|
+
projectCwd: row.workspace,
|
|
1408
|
+
activeCwd: row.workspace,
|
|
1409
|
+
terminal: {
|
|
1410
|
+
columns: process.stdout.columns ?? 80,
|
|
1411
|
+
rows: process.stdout.rows ?? 24
|
|
1412
|
+
},
|
|
1413
|
+
ownerId
|
|
1414
|
+
});
|
|
1415
|
+
await waitForWorkerReady(target, supervisor.peek);
|
|
1416
|
+
} else {
|
|
1417
|
+
await callAgentViewSupervisor(
|
|
1418
|
+
supervisor.socketPath,
|
|
1419
|
+
"claimOwner",
|
|
1420
|
+
{ ownerId, sessionId: target },
|
|
1421
|
+
{ authToken: record.authToken }
|
|
1422
|
+
);
|
|
1423
|
+
}
|
|
1424
|
+
await controller.select(target);
|
|
1425
|
+
activeId = target;
|
|
1426
|
+
lastDashboardRequestId = readDashboardRequestId(
|
|
1427
|
+
await supervisor.peek(target)
|
|
1428
|
+
);
|
|
1429
|
+
} else {
|
|
1430
|
+
await controller.resume();
|
|
1431
|
+
}
|
|
1432
|
+
} catch (error) {
|
|
1433
|
+
await controller.resume();
|
|
1434
|
+
process.stderr.write(
|
|
1435
|
+
`Could not switch agent session: ${error instanceof Error ? error.message : String(error)}
|
|
1436
|
+
`
|
|
1437
|
+
);
|
|
1438
|
+
}
|
|
1439
|
+
}
|
|
1440
|
+
} catch (error) {
|
|
1441
|
+
if (!attached) await supervisor.stop(sessionId).catch(() => {
|
|
1442
|
+
});
|
|
1443
|
+
throw error;
|
|
1444
|
+
} finally {
|
|
1445
|
+
try {
|
|
1446
|
+
await controller.suspend();
|
|
1447
|
+
} finally {
|
|
1448
|
+
lease.dispose();
|
|
1449
|
+
}
|
|
1450
|
+
}
|
|
1451
|
+
}
|
|
1452
|
+
__name(runAgentSessionForeground, "runAgentSessionForeground");
|
|
1453
|
+
function readDashboardRequestId(snapshot) {
|
|
1454
|
+
if (!isRecord2(snapshot) || !isRecord2(snapshot["activity"])) return void 0;
|
|
1455
|
+
const id = snapshot["activity"]["dashboardRequestId"];
|
|
1456
|
+
return typeof id === "string" ? id : void 0;
|
|
1457
|
+
}
|
|
1458
|
+
__name(readDashboardRequestId, "readDashboardRequestId");
|
|
1459
|
+
function readDashboardTheme(snapshot) {
|
|
1460
|
+
if (!isRecord2(snapshot) || !isRecord2(snapshot["activity"])) return "dark";
|
|
1461
|
+
return snapshot["activity"]["theme"] === "light" ? "light" : "dark";
|
|
1462
|
+
}
|
|
1463
|
+
__name(readDashboardTheme, "readDashboardTheme");
|
|
1464
|
+
function readDashboardLanguage(snapshot) {
|
|
1465
|
+
if (!isRecord2(snapshot) || !isRecord2(snapshot["activity"])) return "auto";
|
|
1466
|
+
const language = snapshot["activity"]["language"];
|
|
1467
|
+
return typeof language === "string" ? language : "auto";
|
|
1468
|
+
}
|
|
1469
|
+
__name(readDashboardLanguage, "readDashboardLanguage");
|
|
1470
|
+
async function waitForWorkerReady(sessionId, peek) {
|
|
1471
|
+
const deadline = Date.now() + WORKER_READY_TIMEOUT_MS;
|
|
1472
|
+
do {
|
|
1473
|
+
const state = readState2(await peek(sessionId));
|
|
1474
|
+
if (state?.["processState"] === "alive" && state["sessionState"] === "idle") {
|
|
1475
|
+
return;
|
|
1476
|
+
}
|
|
1477
|
+
if (state?.["processState"] === "exited" || state?.["sessionState"] === "failed") {
|
|
1478
|
+
throw new Error(`Agent session ${sessionId} failed to start.`);
|
|
1479
|
+
}
|
|
1480
|
+
await delay2(100);
|
|
1481
|
+
} while (Date.now() < deadline);
|
|
1482
|
+
throw new Error(`Agent session ${sessionId} did not become ready in time.`);
|
|
1483
|
+
}
|
|
1484
|
+
__name(waitForWorkerReady, "waitForWorkerReady");
|
|
1485
|
+
function readState2(snapshot) {
|
|
1486
|
+
if (!isRecord2(snapshot) || !isRecord2(snapshot["state"])) return void 0;
|
|
1487
|
+
return snapshot["state"];
|
|
1488
|
+
}
|
|
1489
|
+
__name(readState2, "readState");
|
|
1490
|
+
function isRecord2(value) {
|
|
1491
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
1492
|
+
}
|
|
1493
|
+
__name(isRecord2, "isRecord");
|
|
1494
|
+
export {
|
|
1495
|
+
runAgentSessionForeground
|
|
1496
|
+
};
|