@organizaone/o1-code 0.20.2 → 0.21.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.
Files changed (284) hide show
  1. package/bundled/qc-helper/docs/common-workflow.md +2 -2
  2. package/bundled/qc-helper/docs/extension/getting-started-extensions.md +1 -1
  3. package/bundled/qc-helper/docs/features/commands.md +15 -1
  4. package/chunks/{MaxSizedBox-M6DCBRB7.js → MaxSizedBox-UVDDWU7T.js} +21 -20
  5. package/chunks/{StandaloneSessionPicker-WOSBURZC.js → StandaloneSessionPicker-BMP4CROY.js} +42 -41
  6. package/chunks/{acp-subagent-executor-G7N4CYL3.js → acp-subagent-executor-FV3XBATE.js} +19 -19
  7. package/chunks/{acpAgent-ELHXS6FM.js → acpAgent-6QL2DRXT.js} +114 -112
  8. package/chunks/{agent-LQAO63NW.js → agent-7RIITHH6.js} +9 -9
  9. package/chunks/{agent-headless-EV6Q2XO5.js → agent-headless-V7G74ZRT.js} +9 -9
  10. package/chunks/{all-providers-ONYYU25K.js → all-providers-NUAV373L.js} +2 -2
  11. package/chunks/{anthropicContentGenerator-O7CCZ4UJ.js → anthropicContentGenerator-IMMO2JES.js} +5 -5
  12. package/chunks/{bridge-GZYADDK2.js → bridge-NOBAHBIW.js} +19 -19
  13. package/chunks/{ca-6DKW436A.js → ca-EMDHXMDN.js} +6 -2
  14. package/chunks/{chunk-DASYHVHI.js → chunk-2327FMUY.js} +4 -4
  15. package/chunks/{chunk-QWLAQVSU.js → chunk-24LWP4WE.js} +2 -2
  16. package/chunks/chunk-2EFFEOP5.js +5043 -0
  17. package/chunks/{chunk-253UI55H.js → chunk-3QWBMA3B.js} +12 -12
  18. package/chunks/{chunk-QFGPKAOX.js → chunk-3ZEBS4OE.js} +9 -9
  19. package/chunks/{chunk-PHRIVPFS.js → chunk-4NXPUJJK.js} +2 -2
  20. package/chunks/{chunk-BP4CPYAM.js → chunk-4VB7VM7K.js} +1 -1
  21. package/chunks/{chunk-HO45CNDB.js → chunk-4XTPBUUX.js} +1 -1
  22. package/chunks/{chunk-RDDHWYCW.js → chunk-5ZH7V5XA.js} +1 -1
  23. package/chunks/{chunk-BORCGVXB.js → chunk-6LZG7Y6K.js} +2 -2
  24. package/chunks/{chunk-NSYASZQH.js → chunk-6YVU3VTW.js} +2 -2
  25. package/chunks/{chunk-XZYINGV2.js → chunk-A3Z6ZU7I.js} +2 -2
  26. package/chunks/{chunk-GQCX6NEQ.js → chunk-AFFISWZB.js} +32 -30
  27. package/chunks/{chunk-PIFTZSA7.js → chunk-B4XD2AVP.js} +2 -2
  28. package/chunks/{chunk-IQPPAGQS.js → chunk-B5BMQDN6.js} +2 -2
  29. package/chunks/{chunk-L6ZZSVWG.js → chunk-BCCQP2PA.js} +3 -3
  30. package/chunks/{chunk-WEVA5QY7.js → chunk-BDXSHKWM.js} +1 -1
  31. package/chunks/{chunk-SK4V5RB5.js → chunk-BG5FFE5T.js} +9 -9
  32. package/chunks/{chunk-A5TZZFQL.js → chunk-BJIFDJVV.js} +2 -2
  33. package/chunks/{chunk-JOYMKIQF.js → chunk-BYQ4WWVG.js} +1 -1
  34. package/chunks/{chunk-JZOLTE57.js → chunk-BZXX2MRG.js} +1 -1
  35. package/chunks/{chunk-ZRR57QY3.js → chunk-COZEN7HG.js} +6 -6
  36. package/chunks/{chunk-BTH7AZKY.js → chunk-CUGVJRCO.js} +2 -2
  37. package/chunks/{chunk-FBUTC46C.js → chunk-DAZ4E2KL.js} +2 -2
  38. package/chunks/{chunk-MYRAFQSK.js → chunk-DEEUE6NL.js} +9 -9
  39. package/chunks/{chunk-ML2FRS6E.js → chunk-EDYCC6T6.js} +5 -5
  40. package/chunks/{chunk-4IIC2T2R.js → chunk-FJVTBMTU.js} +3 -3
  41. package/chunks/{chunk-KMVJINUM.js → chunk-FSM6MGRH.js} +2 -2
  42. package/chunks/{chunk-KAYBWROC.js → chunk-G2GNLDQS.js} +13 -13
  43. package/chunks/{chunk-ELV37APC.js → chunk-GB6XUAYL.js} +1 -1
  44. package/chunks/{chunk-YNZ2HR7V.js → chunk-GWAPD4WA.js} +7 -7
  45. package/chunks/{chunk-ZJKQPIJH.js → chunk-HG2CPZUM.js} +3 -3
  46. package/chunks/{chunk-CHTZUPHL.js → chunk-HJRDPASY.js} +5 -5
  47. package/chunks/{chunk-PT3CIZIT.js → chunk-HVCQOHA6.js} +4 -4
  48. package/chunks/{chunk-WLVSOHOJ.js → chunk-HXOUCS5U.js} +4 -4
  49. package/chunks/{chunk-6M577SEO.js → chunk-IAW6OPW2.js} +3 -3
  50. package/chunks/{chunk-TQDWNJ7Y.js → chunk-IOUCJCNS.js} +1 -1
  51. package/chunks/{chunk-GMZPGNW5.js → chunk-ISDTLMDF.js} +1 -1
  52. package/chunks/{chunk-KBC3LE6C.js → chunk-J3I2P6J4.js} +1 -1
  53. package/chunks/{chunk-32HPDVH7.js → chunk-J4JE4YP3.js} +6 -6
  54. package/chunks/{chunk-TZGS6KLY.js → chunk-J5RKE7HJ.js} +8 -8
  55. package/chunks/{chunk-6UDLEDID.js → chunk-JEI2AYFD.js} +1 -1
  56. package/chunks/{chunk-BRSXP3HF.js → chunk-JJNBSJTF.js} +2 -2
  57. package/chunks/{chunk-VO56ZLLC.js → chunk-JYBDW4YQ.js} +1 -1
  58. package/chunks/{chunk-MFZ5PUYA.js → chunk-KK2WC2WS.js} +2 -2
  59. package/chunks/{chunk-D5LGZ7CS.js → chunk-KRPFK75A.js} +2 -2
  60. package/chunks/{chunk-S57KYLOB.js → chunk-KZ6OFUYM.js} +8 -8
  61. package/chunks/chunk-LRHUT6ZW.js +880 -0
  62. package/chunks/{chunk-O3FUFDAZ.js → chunk-LU3L67JW.js} +1 -1
  63. package/chunks/{chunk-IEF53O5P.js → chunk-MJFHIUKG.js} +2 -2
  64. package/chunks/{chunk-5J5ZKY2X.js → chunk-NXQOTJAA.js} +2 -2
  65. package/chunks/{chunk-SXRGKQMZ.js → chunk-NZYHDUMN.js} +1 -1
  66. package/chunks/{chunk-XKT7PPJD.js → chunk-O7V7JWOM.js} +86 -43
  67. package/chunks/{chunk-76WI2Y4C.js → chunk-OK7GPGMS.js} +2 -2
  68. package/chunks/{chunk-I4F5VMM4.js → chunk-ONTIVYTW.js} +3 -3
  69. package/chunks/{chunk-O2WH4QNE.js → chunk-P4OBMVRT.js} +3 -3
  70. package/chunks/{chunk-VFSP4ZUZ.js → chunk-P7RO4QSF.js} +28 -938
  71. package/chunks/{chunk-652EXJDT.js → chunk-PK3MLBOH.js} +1 -1
  72. package/chunks/{chunk-MSAWM65X.js → chunk-PP3G5KXH.js} +1 -1
  73. package/chunks/{chunk-Y5VJG35A.js → chunk-QAJ7AQSA.js} +1 -1
  74. package/chunks/{chunk-5ENVC5EC.js → chunk-QKZVYY6J.js} +5 -5
  75. package/chunks/{chunk-NTUVIB2G.js → chunk-R5HO4EJV.js} +1 -1
  76. package/chunks/{chunk-GQHMMDBT.js → chunk-RMYDHM23.js} +3 -3
  77. package/chunks/{chunk-R76Q5SQV.js → chunk-SL3PHYCR.js} +3 -3
  78. package/chunks/{chunk-FHB6IME5.js → chunk-SYZ5WTE6.js} +2 -2
  79. package/chunks/{chunk-TTZZ44LB.js → chunk-T7MXEOXM.js} +2 -2
  80. package/chunks/{chunk-DSAFH5CY.js → chunk-TJQTTY4F.js} +1 -1
  81. package/chunks/{chunk-VZW44QV7.js → chunk-TMYTIDVN.js} +3 -3
  82. package/chunks/{chunk-WLGGCE26.js → chunk-TZRF4LY7.js} +3 -3
  83. package/chunks/{chunk-JTE4PIZM.js → chunk-UKCKAG2F.js} +39 -39
  84. package/chunks/{chunk-CSL5UZA7.js → chunk-UUT7HQPM.js} +3 -3
  85. package/chunks/{chunk-7LQBFCI2.js → chunk-UWSO6VOM.js} +1 -1
  86. package/chunks/{chunk-OGVEQRC5.js → chunk-UXJP6322.js} +3 -3
  87. package/chunks/{chunk-BYWZ477D.js → chunk-V5QHABRY.js} +1 -1
  88. package/chunks/chunk-VDSY3ODQ.js +2405 -0
  89. package/chunks/{chunk-JIFFPY6X.js → chunk-VT5GZKMO.js} +1 -1
  90. package/chunks/{chunk-63XJSNCN.js → chunk-W3XJPDIO.js} +13 -13
  91. package/chunks/{chunk-AFP5Z5YY.js → chunk-WKGMAUE7.js} +1 -1
  92. package/chunks/{chunk-PU7HOH55.js → chunk-WOAI6G73.js} +3 -3
  93. package/chunks/{chunk-OZZ3NZGD.js → chunk-WQYJ72JS.js} +1 -1
  94. package/chunks/{chunk-X3ZRMOXL.js → chunk-WTC5HDJJ.js} +10 -10
  95. package/chunks/{chunk-UK437Y3P.js → chunk-WU7DQB4Q.js} +4 -4
  96. package/chunks/{chunk-7VO74Y4N.js → chunk-X7Q5L62S.js} +1 -1
  97. package/chunks/{chunk-A7LMIP3N.js → chunk-XCWRCCIS.js} +1 -1
  98. package/chunks/{chunk-MJPCZDA4.js → chunk-XHHPCZOZ.js} +2 -2
  99. package/chunks/{chunk-4S4AE3LJ.js → chunk-XIYHMMHO.js} +4 -4
  100. package/chunks/{chunk-NJZNVJKQ.js → chunk-XMEAEIT7.js} +1 -1
  101. package/chunks/{chunk-DNEDFRFX.js → chunk-XXPXFR7S.js} +48 -48
  102. package/chunks/chunk-YQQ7QFC5.js +945 -0
  103. package/chunks/{chunk-REFJETG4.js → chunk-YXRFXEIU.js} +5 -5
  104. package/chunks/{chunk-EFTQJBOI.js → chunk-ZGHZRHUW.js} +1 -1
  105. package/chunks/{codex-subagent-executor-42IWHTXH.js → codex-subagent-executor-3MIEB3VJ.js} +19 -19
  106. package/chunks/{contextCommand-SKHYM3K7.js → contextCommand-H6YVYBS3.js} +19 -19
  107. package/chunks/{core-runtime-XN7ACQRM.js → core-runtime-2HHFL26H.js} +17 -17
  108. package/chunks/{create-sub-session-3AA2Y4KO.js → create-sub-session-ALKLKZWI.js} +18 -18
  109. package/chunks/{daemon-git-worktree-guard-6GL7GAMY.js → daemon-git-worktree-guard-FKKXZKOZ.js} +17 -17
  110. package/chunks/{daemon-status-provider-HZVH6OMF.js → daemon-status-provider-L3JVFUFB.js} +24 -24
  111. package/chunks/{daemon-trust-policy-4O62GJPW.js → daemon-trust-policy-UKZ4URR5.js} +24 -24
  112. package/chunks/{daemon-trust-policy-monitor-PADS3D5B.js → daemon-trust-policy-monitor-O3BAF5WQ.js} +24 -24
  113. package/chunks/{de-E75VCQRZ.js → de-OMV463ND.js} +6 -2
  114. package/chunks/{deferred-core-runtime-TE5JZ4CV.js → deferred-core-runtime-TX4M62JC.js} +17 -17
  115. package/chunks/{edit-IIBA4J2Y.js → edit-URCTP3DW.js} +11 -11
  116. package/chunks/{en-LFESTYTB.js → en-EEVIOXSR.js} +14 -2
  117. package/chunks/{enterPlanMode-6XRRTOGI.js → enterPlanMode-JGAWYT7U.js} +9 -9
  118. package/chunks/{environment-CDJ5LMVD.js → environment-5NRP4NYH.js} +19 -19
  119. package/chunks/{errors-LCCBD2N5.js → errors-7BX5N6WH.js} +19 -19
  120. package/chunks/{execution-tool-46DCOYFU.js → execution-tool-4MAOTD33.js} +11 -11
  121. package/chunks/{execution-worker-MA7UKLYX.js → execution-worker-FE64M6YB.js} +14 -14
  122. package/chunks/{exitPlanMode-VUWTTAFT.js → exitPlanMode-MRIMIR7S.js} +9 -9
  123. package/chunks/{fast-path-Z5M2OGP3.js → fast-path-PI7IUZO5.js} +5 -5
  124. package/chunks/foreground-runner-ODCBQ62T.js +1496 -0
  125. package/chunks/{fr-KWQ6T7MX.js → fr-ZHVJMULM.js} +6 -2
  126. package/chunks/{glob-KZDAWIYT.js → glob-VVMTH2FZ.js} +9 -9
  127. package/chunks/{goal-tools-WOAVAL6R.js → goal-tools-PIZJOC5V.js} +9 -9
  128. package/chunks/{handleAutoUpdate-M52FPIM7.js → handleAutoUpdate-7CYUYIFT.js} +20 -20
  129. package/chunks/{i18n-2ORJ7EUZ.js → i18n-DZGPXZHL.js} +18 -18
  130. package/chunks/{initializer-JKXV3VM4.js → initializer-6MWLCO6O.js} +26 -25
  131. package/chunks/{installationInfo-YAFZTTXR.js → installationInfo-2YFHIA4G.js} +17 -17
  132. package/chunks/{ja-NLAMHYSV.js → ja-MQ3LTDXD.js} +6 -2
  133. package/chunks/{list-PADJYOVB.js → list-2PCYJ5KG.js} +26 -26
  134. package/chunks/{llm-KRH33LVO.js → llm-QVOVDL2Q.js} +70 -70
  135. package/chunks/{llm-content-generator-TJSVJP3S.js → llm-content-generator-P4MM2G4V.js} +4 -4
  136. package/chunks/{loadedSettingsAdapter-MBW46SD5.js → loadedSettingsAdapter-6DG3R23U.js} +24 -24
  137. package/chunks/{local-execution-environment-VN3IR5HW.js → local-execution-environment-RQZE5ZPQ.js} +14 -14
  138. package/chunks/{loggingContentGenerator-23F4KFBU.js → loggingContentGenerator-T5HYYF2G.js} +9 -9
  139. package/chunks/{managed-npm-update-ZY3PJP5Q.js → managed-npm-update-FKD3RX22.js} +17 -17
  140. package/chunks/{mcp-4PZN2LIR.js → mcp-CONKBRY3.js} +24 -24
  141. package/chunks/{model-call-collection-WYHY6DOD.js → model-call-collection-L6GU4PEV.js} +1 -1
  142. package/chunks/{model-configuration-Z4DFPL2P.js → model-configuration-TBFXQOP6.js} +25 -25
  143. package/chunks/{modelConfigUtils-Y3CJEJLV.js → modelConfigUtils-ID2MFVCP.js} +19 -19
  144. package/chunks/{monitor-ICRZWUVU.js → monitor-ETBC2KHX.js} +9 -9
  145. package/chunks/{nonInteractiveCli-I2V6MAM6.js → nonInteractiveCli-QPKDUFGH.js} +62 -60
  146. package/chunks/{nonInteractiveToolExecutor-T4U2SQTB.js → nonInteractiveToolExecutor-7ZDYEIOV.js} +10 -10
  147. package/chunks/{notebook-edit-RAQ3E2IY.js → notebook-edit-PBP4CLHC.js} +10 -10
  148. package/chunks/{omni-NM6NMFX7.js → omni-EBPCPKLP.js} +9 -9
  149. package/chunks/{openaiContentGenerator-6HGOFBCF.js → openaiContentGenerator-FJJDGKFI.js} +6 -6
  150. package/chunks/{openaiResponsesContentGenerator-LEX4GEAX.js → openaiResponsesContentGenerator-Y27KA4YJ.js} +4 -4
  151. package/chunks/{processUtils-QVXMEUVY.js → processUtils-EUHGQHUQ.js} +2 -2
  152. package/chunks/{prompt-terminal-ledger-SLWWZ32V.js → prompt-terminal-ledger-XV4MIV4H.js} +18 -18
  153. package/chunks/{pt-EY6TJFGW.js → pt-AVWESYKZ.js} +14 -2
  154. package/chunks/pty-host-process-PKCVFICX.js +29 -0
  155. package/chunks/{reactive-degrade-RYXUWQNZ.js → reactive-degrade-LL5MSPMK.js} +8 -8
  156. package/chunks/{read-file-CN7ZTEDI.js → read-file-HQVTDGX5.js} +1 -1
  157. package/chunks/{resumeHistoryUtils-RJOR4X7G.js → resumeHistoryUtils-DKTD3ZG2.js} +26 -25
  158. package/chunks/{ripGrep-XGQKPFSN.js → ripGrep-WA7AGEV7.js} +1 -1
  159. package/chunks/{ru-QXDK3EHQ.js → ru-CSBDIXDS.js} +6 -2
  160. package/chunks/{run-o1-code-serve-OILFC54C.js → run-o1-code-serve-27EWAN7V.js} +49 -49
  161. package/chunks/{sandboxConfig-HAPLL76L.js → sandboxConfig-B4Z7RRB6.js} +17 -17
  162. package/chunks/{scheduled-tasks-4THWTS4Y.js → scheduled-tasks-KBBSAL7T.js} +22 -22
  163. package/chunks/{scheduler-ZFPQQHCZ.js → scheduler-WUFLFLZX.js} +19 -19
  164. package/chunks/{serve-COVK43MI.js → serve-GHD5P7VM.js} +24 -24
  165. package/chunks/{server-LGQYXUFH.js → server-O7S2DL3A.js} +141 -141
  166. package/chunks/{session-WSCO5TIG.js → session-4COCQNXM.js} +63 -61
  167. package/chunks/{session-P2DYIN6R.js → session-74Z72LNM.js} +1 -1
  168. package/chunks/{session-attachments-root-JGGALEUS.js → session-attachments-root-QTVKHZO3.js} +17 -17
  169. package/chunks/{session-pr-refresh-CPWDRHGO.js → session-pr-refresh-4XWL7OWU.js} +22 -22
  170. package/chunks/{settings-27RICWM3.js → settings-LKHHDZ22.js} +23 -23
  171. package/chunks/{shell-GXQXRLV5.js → shell-MBJWYI6H.js} +9 -9
  172. package/chunks/{skill-TTXC325A.js → skill-P47GW76V.js} +1 -1
  173. package/chunks/{skill-settings-MAULQ3TM.js → skill-settings-OOKHO2VX.js} +23 -23
  174. package/chunks/{spawnChannel-3S2M7K2F.js → spawnChannel-BCCGOYBS.js} +18 -18
  175. package/chunks/{standalone-update-3A556HIG.js → standalone-update-GFWLCIJA.js} +19 -19
  176. package/chunks/{startInteractiveUI-SUV4VAT4.js → startInteractiveUI-4U37J3U3.js} +1092 -889
  177. package/chunks/supervisor-runner-JHRQ2FCR.js +24 -0
  178. package/chunks/{team-create-3PPBCJY7.js → team-create-V7TS7YKU.js} +9 -9
  179. package/chunks/{team-plan-approval-CTXSTGLT.js → team-plan-approval-AZFDDNWX.js} +9 -9
  180. package/chunks/{terminal-image-renderer-WQY3JFVO.js → terminal-image-renderer-VKFNJYLX.js} +17 -17
  181. package/chunks/{theme-manager-J7AAKTK2.js → theme-manager-NJUI6CSB.js} +19 -18
  182. package/chunks/{tool-result-media-M3P2DAG4.js → tool-result-media-PNMKSY4I.js} +9 -9
  183. package/chunks/{tool-search-7U7FG4IT.js → tool-search-G775WYWX.js} +1 -1
  184. package/chunks/{total-session-admission-FLRO4VNA.js → total-session-admission-EU3OANCQ.js} +19 -19
  185. package/chunks/{trustedFolders-NKXMHVAW.js → trustedFolders-SHDE6P4A.js} +18 -18
  186. package/chunks/{update-relaunch-MJD4TQTQ.js → update-relaunch-WO4XSFPM.js} +5 -5
  187. package/chunks/{updateCheck-FWIBLR2D.js → updateCheck-VXMUIJQI.js} +19 -19
  188. package/chunks/{upload-config-RRVEVXT4.js → upload-config-W3I5KJ6Z.js} +6 -6
  189. package/chunks/{useAutoAcceptIndicator-CBTKHLEO.js → useAutoAcceptIndicator-RVZ7NA4T.js} +27 -27
  190. package/chunks/{validateNonInterActiveAuth-35VKND26.js → validateNonInterActiveAuth-Z6VWDBAU.js} +59 -57
  191. package/chunks/{version-RW367FEL.js → version-BAIHAZMG.js} +1 -1
  192. package/chunks/{web-fetch-IR64PH6P.js → web-fetch-UVYCFIDA.js} +1 -1
  193. package/chunks/{web-search-575SSD6B.js → web-search-2HZLV7U7.js} +7 -7
  194. package/chunks/{workflow-2BTPXLOQ.js → workflow-MH5F52EN.js} +10 -10
  195. package/chunks/{workspace-providers-status-7ETHMLKH.js → workspace-providers-status-QGZHLTTK.js} +28 -28
  196. package/chunks/{workspace-registration-store-Z2KQL5YM.js → workspace-registration-store-ZOS5W3KI.js} +1 -1
  197. package/chunks/{workspace-registry-SHLVHQ2E.js → workspace-registry-S5UI2GMP.js} +19 -19
  198. package/chunks/{workspace-runtime-coordinator-DHUENYXW.js → workspace-runtime-coordinator-3VT4F7QU.js} +19 -19
  199. package/chunks/{workspace-service-RMGMLOY4.js → workspace-service-FPIDJZQX.js} +27 -27
  200. package/chunks/{workspace-skills-status-VYXV72SD.js → workspace-skills-status-3NDFOQ7X.js} +24 -24
  201. package/chunks/{workspace-trust-reconciler-I54XA63T.js → workspace-trust-reconciler-MIYMY5WA.js} +28 -28
  202. package/chunks/{write-file-EE43NO7H.js → write-file-RLFFQHIF.js} +11 -11
  203. package/chunks/{zh-5CH77RQJ.js → zh-6TC2VRKR.js} +6 -2
  204. package/chunks/{zh-TW-7ASXOAM2.js → zh-TW-O23FCREL.js} +6 -2
  205. package/chunks/{zoom-image-Q6QNOKVS.js → zoom-image-TGJMTGFW.js} +1 -1
  206. package/cli.js +67 -14
  207. package/examples/starter/README.md +2 -2
  208. package/execution-worker.js +1 -1
  209. package/export-transcript-document.js +1 -1
  210. package/locales/ca.js +9 -2
  211. package/locales/de.js +9 -2
  212. package/locales/en.js +17 -2
  213. package/locales/fr.js +9 -2
  214. package/locales/ja.js +9 -2
  215. package/locales/pt.js +18 -2
  216. package/locales/ru.js +8 -2
  217. package/locales/zh-TW.js +6 -2
  218. package/locales/zh.js +6 -2
  219. package/package.json +2 -2
  220. package/release-notes.json +11 -0
  221. package/web-shell/assets/{abnfDiagram-VCTEODGH-z6c0GFXg.js → abnfDiagram-VCTEODGH-DvRQo4_D.js} +1 -1
  222. package/web-shell/assets/{arc-D1H1BUod.js → arc-BdiXk54-.js} +1 -1
  223. package/web-shell/assets/{architectureDiagram-5GKGNRK7-Bn0PpSHC.js → architectureDiagram-5GKGNRK7-ghhLp2fv.js} +1 -1
  224. package/web-shell/assets/{blockDiagram-NRAW4CY4-1iNfJHTQ.js → blockDiagram-NRAW4CY4-D1Mnhplm.js} +1 -1
  225. package/web-shell/assets/{c4Diagram-UCG6FXSJ-D6zRDM8T.js → c4Diagram-UCG6FXSJ-DUXySExV.js} +1 -1
  226. package/web-shell/assets/channel-Dh8nmHXD.js +1 -0
  227. package/web-shell/assets/{chunk-2Q5K7J3B-D1Rmjg2y.js → chunk-2Q5K7J3B-emXgDXOn.js} +1 -1
  228. package/web-shell/assets/{chunk-5VM5RSS4-COdyNeyR.js → chunk-5VM5RSS4-BAe_FRUg.js} +1 -1
  229. package/web-shell/assets/{chunk-F27PBJKO-GK0cRat4.js → chunk-F27PBJKO-BFNyq3ws.js} +1 -1
  230. package/web-shell/assets/{chunk-G27WJ6UU-CH4_aaaL.js → chunk-G27WJ6UU-CsbX0ea1.js} +1 -1
  231. package/web-shell/assets/{chunk-JWPE2WC7-DVihw01K.js → chunk-JWPE2WC7-BJsqlFOz.js} +1 -1
  232. package/web-shell/assets/{chunk-LCL6LL3I-DSvGjOZE.js → chunk-LCL6LL3I-BhkoNwBC.js} +1 -1
  233. package/web-shell/assets/{chunk-POPQ4Y6H-D6SVQZ2M.js → chunk-POPQ4Y6H-DDHhZe1n.js} +1 -1
  234. package/web-shell/assets/{chunk-SVP7TREG-up0BrUtx.js → chunk-SVP7TREG-EMrfHdyh.js} +1 -1
  235. package/web-shell/assets/{chunk-XXDRQBXY-CqtnzNig.js → chunk-XXDRQBXY-B7vzOyPt.js} +1 -1
  236. package/web-shell/assets/classDiagram-DTDB5LWJ-CBwKEPG_.js +1 -0
  237. package/web-shell/assets/classDiagram-v2-JRS7N3AN-CBwKEPG_.js +1 -0
  238. package/web-shell/assets/{cose-bilkent-JH36ORCC-B02bBecO.js → cose-bilkent-JH36ORCC-C12GhrmQ.js} +1 -1
  239. package/web-shell/assets/{cynefin-OW5HDTMX-Br_1z3cO.js → cynefin-OW5HDTMX-B1PlOkHW.js} +1 -1
  240. package/web-shell/assets/{cynefinDiagram-5FMLGOSQ-CS1KWbEy.js → cynefinDiagram-5FMLGOSQ-DqlIu1-5.js} +1 -1
  241. package/web-shell/assets/{dagre-3AP2YEHR-CsvBQRDU.js → dagre-3AP2YEHR-jwha3DyI.js} +1 -1
  242. package/web-shell/assets/{diagram-S7CK7UJ4--rElHeb7.js → diagram-S7CK7UJ4-WJo7RwdL.js} +1 -1
  243. package/web-shell/assets/{diagram-UQ7AKVKN-Be49Etur.js → diagram-UQ7AKVKN-HNgwz504.js} +1 -1
  244. package/web-shell/assets/{diagram-VSXAHHWV-Ba2t14dC.js → diagram-VSXAHHWV-CnSKwatX.js} +1 -1
  245. package/web-shell/assets/{diagram-VX7I27RA-1oLVSxkG.js → diagram-VX7I27RA-Bl2_wm4a.js} +1 -1
  246. package/web-shell/assets/{diagram-Z3DM3KII-BptCVC1-.js → diagram-Z3DM3KII-C-h8dvnx.js} +1 -1
  247. package/web-shell/assets/{ebnfDiagram-PWID7BFC-jC_pcjdP.js → ebnfDiagram-PWID7BFC-xPu9lOPC.js} +1 -1
  248. package/web-shell/assets/{erDiagram-SSCWMZ5O-B2RtFSSf.js → erDiagram-SSCWMZ5O-lL-N4ln4.js} +1 -1
  249. package/web-shell/assets/{flowDiagram-A5DVABFB-BOpivMwc.js → flowDiagram-A5DVABFB-DzBl_JGY.js} +1 -1
  250. package/web-shell/assets/{ganttDiagram-EL5Y4UJY-Yx9XRrrM.js → ganttDiagram-EL5Y4UJY-CaDwMjwZ.js} +1 -1
  251. package/web-shell/assets/{gitGraphDiagram-WWUBYQGX-BI27bUeL.js → gitGraphDiagram-WWUBYQGX-DieKNHv6.js} +1 -1
  252. package/web-shell/assets/{index-ChRB-xAg.js → index-B8kdqIl5.js} +1 -1
  253. package/web-shell/assets/{index-D0lgrJdb.js → index-Dh9PvEFA.js} +3 -3
  254. package/web-shell/assets/{infoDiagram-RXCK75RN-hcu4wZLS.js → infoDiagram-RXCK75RN-DAavpH0B.js} +1 -1
  255. package/web-shell/assets/{ishikawaDiagram-5VMMS53U-ClNh6AxU.js → ishikawaDiagram-5VMMS53U-UPSFQgsr.js} +1 -1
  256. package/web-shell/assets/{journeyDiagram-EYS64GPL-X-hxvs-e.js → journeyDiagram-EYS64GPL-tatKO6kZ.js} +1 -1
  257. package/web-shell/assets/{kanban-definition-3QL26DDD-j1-Bo3JP.js → kanban-definition-3QL26DDD-DQVeuSX5.js} +1 -1
  258. package/web-shell/assets/{layout-DBz0Jmvk.js → layout-CRt7C8gi.js} +1 -1
  259. package/web-shell/assets/{linear-iMTtJ54o.js → linear-CtupaiXZ.js} +1 -1
  260. package/web-shell/assets/{mermaid.core-CZFkyVjC.js → mermaid.core-Pq6FiKYN.js} +6 -6
  261. package/web-shell/assets/{mindmap-definition-FBJOCRG2-vpFv_mCH.js → mindmap-definition-FBJOCRG2-C3aBV9q4.js} +1 -1
  262. package/web-shell/assets/{pegDiagram-XKGWAZYB-B_VYmyAS.js → pegDiagram-XKGWAZYB-DPC6gXxQ.js} +1 -1
  263. package/web-shell/assets/{pieDiagram-E7YTZNPT-HAULF0GF.js → pieDiagram-E7YTZNPT-Bnulswji.js} +1 -1
  264. package/web-shell/assets/{quadrantDiagram-AXDQQJYC-Dp6iZe8P.js → quadrantDiagram-AXDQQJYC-CgN1vgtM.js} +1 -1
  265. package/web-shell/assets/{railroadDiagram-O6MQD6OU-C0wfx3Ka.js → railroadDiagram-O6MQD6OU-XdwHEwkM.js} +1 -1
  266. package/web-shell/assets/{requirementDiagram-EFPCY7ZU-t5dXKrc9.js → requirementDiagram-EFPCY7ZU-BrptICwx.js} +1 -1
  267. package/web-shell/assets/{sankeyDiagram-P5KCCOFB-DOXeBVgk.js → sankeyDiagram-P5KCCOFB-UVmNE7OK.js} +1 -1
  268. package/web-shell/assets/{sequenceDiagram-WJ2MYXX4-CghIZFeC.js → sequenceDiagram-WJ2MYXX4-CbLJdOim.js} +1 -1
  269. package/web-shell/assets/{sizeCapture-X5ZJPWSS-ChafU-3p.js → sizeCapture-X5ZJPWSS-DHeZCcKI.js} +1 -1
  270. package/web-shell/assets/{stateDiagram-HBIQ2CUA-hK7ohLs4.js → stateDiagram-HBIQ2CUA-oYkdhZ_G.js} +1 -1
  271. package/web-shell/assets/stateDiagram-v2-4QOOHH4V-DbneQiPu.js +1 -0
  272. package/web-shell/assets/{swimlanes-XN3QIQJK-DfzxuHbo.js → swimlanes-XN3QIQJK-CFK29lSu.js} +1 -1
  273. package/web-shell/assets/swimlanesDiagram-VK2B7HYN-DxcqGRuT.js +8 -0
  274. package/web-shell/assets/{timeline-definition-24CTP7MA-CEg8YNZQ.js → timeline-definition-24CTP7MA-BfAZG1ah.js} +1 -1
  275. package/web-shell/assets/{vennDiagram-4TSXK5OY-BvfG9FFY.js → vennDiagram-4TSXK5OY-x129VjoM.js} +1 -1
  276. package/web-shell/assets/{wardleyDiagram-VM6X3IG4-Bt7Yotxp.js → wardleyDiagram-VM6X3IG4-B5aBvbvt.js} +1 -1
  277. package/web-shell/assets/{xychartDiagram-S5SC5T6Z-hn8Ssagi.js → xychartDiagram-S5SC5T6Z-DLbk6hf2.js} +1 -1
  278. package/web-shell/index.html +1 -1
  279. package/web-shell/sw.js +1 -1
  280. package/web-shell/assets/channel-oE8pKJFn.js +0 -1
  281. package/web-shell/assets/classDiagram-DTDB5LWJ-XqK7eu8w.js +0 -1
  282. package/web-shell/assets/classDiagram-v2-JRS7N3AN-XqK7eu8w.js +0 -1
  283. package/web-shell/assets/stateDiagram-v2-4QOOHH4V-BcE4kAA6.js +0 -1
  284. package/web-shell/assets/swimlanesDiagram-VK2B7HYN-BUE7JFK6.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-WOAI6G73.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-24LWP4WE.js";
33
+ import "./chunk-32722SNN.js";
34
+ import "./chunk-AGTM6524.js";
35
+ import "./chunk-HJRDPASY.js";
36
+ import "./chunk-UWSO6VOM.js";
37
+ import "./chunk-ZMZRVR62.js";
38
+ import "./chunk-B5BMQDN6.js";
39
+ import "./chunk-SL3PHYCR.js";
40
+ import "./chunk-UW4Q5E5P.js";
41
+ import "./chunk-JYBDW4YQ.js";
42
+ import "./chunk-F3FKDGHN.js";
43
+ import "./chunk-BDXSHKWM.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-XXPXFR7S.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-GB6XUAYL.js";
77
+ import "./chunk-SYMKXR42.js";
78
+ import "./chunk-JOBZWTVK.js";
79
+ import "./chunk-HPQNI3OQ.js";
80
+ import "./chunk-NZYHDUMN.js";
81
+ import "./chunk-VT5GZKMO.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-RMYDHM23.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-KK2WC2WS.js";
123
+ import "./chunk-TC2TJAOF.js";
124
+ import "./chunk-CP63SY5N.js";
125
+ import "./chunk-QAJ7AQSA.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-ONTIVYTW.js";
153
+ import "./chunk-72EBG4FJ.js";
154
+ import "./chunk-QKZVYY6J.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
+ };