@jingyi0605/codingns 0.8.5 → 0.9.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 (439) hide show
  1. package/bin/codingns.mjs +7 -156
  2. package/dist/public/assets/AdaptiveButlerPage-B17QiMyT.js +2 -0
  3. package/dist/public/assets/{App-BOHBGFOd.js → App-CFBwDUNA.js} +6 -6
  4. package/dist/public/assets/{BootstrapPage-BxHQT4nA.js → BootstrapPage-W5wU3BPh.js} +1 -1
  5. package/dist/public/assets/{ConversationPage-DWFsF6BB.js → ConversationPage-DQLX1bUh.js} +6 -6
  6. package/dist/public/assets/{DesktopDetachPreviewPage-DOgEjYEf.js → DesktopDetachPreviewPage-DTPeuAW-.js} +1 -1
  7. package/dist/public/assets/DesktopModal-6ii53_Y9.js +1 -0
  8. package/dist/public/assets/DesktopWindowPage-D0blSuKd.js +2 -0
  9. package/dist/public/assets/FileContextPanel-BrKO8Xt6.js +1 -0
  10. package/dist/public/assets/GitSidebar-BdwiDtOr.js +6 -0
  11. package/dist/public/assets/MobileCreateSessionSheet-Cx_dBiBb.js +1 -0
  12. package/dist/public/assets/MobileSheet-opTWyRe1.js +1 -0
  13. package/dist/public/assets/{MobileTopHeaderFrame-lcp2GscV.js → MobileTopHeaderFrame-BbNON3Y4.js} +1 -1
  14. package/dist/public/assets/MobileWorkspaceSwitcherHeader-BZEzPeMj.js +1 -0
  15. package/dist/public/assets/{PluginAccessOverview-DGcKAMQl.js → PluginAccessOverview-mQDmAljp.js} +1 -1
  16. package/dist/public/assets/PluginContainerPage-CcxUJpM4.js +1 -0
  17. package/dist/public/assets/{PluginDetailPage-CAJ7LFpD.js → PluginDetailPage-D5--ACIt.js} +1 -1
  18. package/dist/public/assets/{PluginsListPage-BxZG1NyT.js → PluginsListPage-D_oJxYXT.js} +1 -1
  19. package/dist/public/assets/{RelayConnectEntryPage-CfNO_TIl.js → RelayConnectEntryPage-DROxpnkv.js} +1 -1
  20. package/dist/public/assets/{ServerSettingsModal-by36Z_5k.js → ServerSettingsModal-CUUOPqSe.js} +1 -1
  21. package/dist/public/assets/SessionIndexPage-C2Jxh6Gp.js +1 -0
  22. package/dist/public/assets/SettingsPage-BlAZCHsy.js +2 -0
  23. package/dist/public/assets/{TerminalManagerPanel-NVZRxxmH.js → TerminalManagerPanel-CjzbiWjl.js} +1 -1
  24. package/dist/public/assets/{TerminalPage-C4LNoPBp.js → TerminalPage-CwWyFDj8.js} +2 -2
  25. package/dist/public/assets/TerminalRuntimeFallbackModal-CSVVbO8r.js +1 -0
  26. package/dist/public/assets/{ToolFilesPage-47zbdgTW.js → ToolFilesPage-QBEY8oCf.js} +1 -1
  27. package/dist/public/assets/{ToolGitPage-Fuk_b_jg.js → ToolGitPage-BKoZ2l9v.js} +1 -1
  28. package/dist/public/assets/{ToolProcessesPage-sWSMWD-9.js → ToolProcessesPage-BOH0ib4G.js} +1 -1
  29. package/dist/public/assets/{ToolsHomePage-R1mZlbZi.js → ToolsHomePage-BcMZ3BCQ.js} +1 -1
  30. package/dist/public/assets/{WorkbenchLandingPage-CqmiFH2u.js → WorkbenchLandingPage-B5zoppEl.js} +1 -1
  31. package/dist/public/assets/WorkbenchLayout-BksVkkFF.css +1 -0
  32. package/dist/public/assets/WorkbenchLayout-CikJBS62.js +1019 -0
  33. package/dist/public/assets/{WorkbenchModal-C7qoQElW.js → WorkbenchModal-NGmPgqaE.js} +1 -1
  34. package/dist/public/assets/WorkbenchShellRoute-BbbSOiZw.js +1 -0
  35. package/dist/public/assets/WorkbenchShellRoute-DT3VMjWD.css +1 -0
  36. package/dist/public/assets/WorkspaceDebugDetailPage-CVivdPx5.js +1 -0
  37. package/dist/public/assets/{WorkspaceDetailPage-BPsrFffw.js → WorkspaceDetailPage-DgOSjscR.js} +1 -1
  38. package/dist/public/assets/{WorkspaceHomePage-KAtqZOAb.js → WorkspaceHomePage-HPa7M_Vh.js} +1 -1
  39. package/dist/public/assets/{client-runtime-manager-wmCJZKYd.js → client-runtime-manager-DXbI9K1K.js} +1 -1
  40. package/dist/public/assets/index-BxJPQpFM.css +1 -0
  41. package/dist/public/assets/index-CeXGOT_T.js +50 -0
  42. package/dist/public/assets/{login-direct-candidate-resolver-BOAgTuUf.js → login-direct-candidate-resolver-DkKyFtQJ.js} +1 -1
  43. package/dist/public/assets/{plugin-permission-copy-Cq99cnzV.js → plugin-permission-copy-CzN269Bk.js} +1 -1
  44. package/dist/public/assets/{plugins-api-BQTV5DOp.js → plugins-api-Bv9DHpLF.js} +1 -1
  45. package/dist/public/assets/{preferences-service-DJxbEEeg.js → preferences-service-D2ISL2Zz.js} +1 -1
  46. package/dist/public/assets/{relay-entry-D-LfvdiX.js → relay-entry-Bg0OisQy.js} +1 -1
  47. package/dist/public/assets/{terminal-runtime-meta-BJmy8dyK.js → terminal-runtime-meta-C8t-CIDF.js} +1 -1
  48. package/dist/public/assets/{useRegisteredDebugTemplates-DQAWVdCo.js → useRegisteredDebugTemplates-Bol3NVfN.js} +1 -1
  49. package/dist/public/assets/{workbench-navigation-MEzCSmsK.js → workbench-navigation-B7IjRQd8.js} +1 -1
  50. package/dist/public/index.html +2 -2
  51. package/dist/server/middlewares/auth-guard.js +10 -5
  52. package/dist/server/middlewares/auth-guard.js.map +1 -1
  53. package/dist/server/modules/affairs-indexer/contracts/src/errors/app-error.d.ts +11 -0
  54. package/dist/server/modules/affairs-indexer/contracts/src/errors/app-error.js +22 -0
  55. package/dist/server/modules/affairs-indexer/contracts/src/errors/app-error.js.map +1 -0
  56. package/dist/server/modules/affairs-indexer/contracts/src/errors/error-codes.d.ts +23 -0
  57. package/dist/server/modules/affairs-indexer/contracts/src/errors/error-codes.js +23 -0
  58. package/dist/server/modules/affairs-indexer/contracts/src/errors/error-codes.js.map +1 -0
  59. package/dist/server/modules/affairs-indexer/contracts/src/index.d.ts +4 -0
  60. package/dist/server/modules/affairs-indexer/contracts/src/index.js +5 -0
  61. package/dist/server/modules/affairs-indexer/contracts/src/index.js.map +1 -0
  62. package/dist/server/modules/affairs-indexer/contracts/src/types/cli-command-context.d.ts +7 -0
  63. package/dist/server/modules/affairs-indexer/contracts/src/types/cli-command-context.js +2 -0
  64. package/dist/server/modules/affairs-indexer/contracts/src/types/cli-command-context.js.map +1 -0
  65. package/dist/server/modules/affairs-indexer/contracts/src/types/runtime-config.d.ts +16 -0
  66. package/dist/server/modules/affairs-indexer/contracts/src/types/runtime-config.js +2 -0
  67. package/dist/server/modules/affairs-indexer/contracts/src/types/runtime-config.js.map +1 -0
  68. package/dist/server/modules/affairs-indexer/core/src/config/load-runtime-config.d.ts +10 -0
  69. package/dist/server/modules/affairs-indexer/core/src/config/load-runtime-config.js +215 -0
  70. package/dist/server/modules/affairs-indexer/core/src/config/load-runtime-config.js.map +1 -0
  71. package/dist/server/modules/affairs-indexer/core/src/index.d.ts +31 -0
  72. package/dist/server/modules/affairs-indexer/core/src/index.js +32 -0
  73. package/dist/server/modules/affairs-indexer/core/src/index.js.map +1 -0
  74. package/dist/server/modules/affairs-indexer/core/src/logging/structured-logger.d.ts +20 -0
  75. package/dist/server/modules/affairs-indexer/core/src/logging/structured-logger.js +47 -0
  76. package/dist/server/modules/affairs-indexer/core/src/logging/structured-logger.js.map +1 -0
  77. package/dist/server/modules/affairs-indexer/core/src/parser/base-complex-parser-adapter.d.ts +17 -0
  78. package/dist/server/modules/affairs-indexer/core/src/parser/base-complex-parser-adapter.js +63 -0
  79. package/dist/server/modules/affairs-indexer/core/src/parser/base-complex-parser-adapter.js.map +1 -0
  80. package/dist/server/modules/affairs-indexer/core/src/parser/complex-document-skip-adapter.d.ts +12 -0
  81. package/dist/server/modules/affairs-indexer/core/src/parser/complex-document-skip-adapter.js +42 -0
  82. package/dist/server/modules/affairs-indexer/core/src/parser/complex-document-skip-adapter.js.map +1 -0
  83. package/dist/server/modules/affairs-indexer/core/src/parser/csv-parser-adapter.d.ts +7 -0
  84. package/dist/server/modules/affairs-indexer/core/src/parser/csv-parser-adapter.js +107 -0
  85. package/dist/server/modules/affairs-indexer/core/src/parser/csv-parser-adapter.js.map +1 -0
  86. package/dist/server/modules/affairs-indexer/core/src/parser/document-parser.d.ts +19 -0
  87. package/dist/server/modules/affairs-indexer/core/src/parser/document-parser.js +37 -0
  88. package/dist/server/modules/affairs-indexer/core/src/parser/document-parser.js.map +1 -0
  89. package/dist/server/modules/affairs-indexer/core/src/parser/docx-parser-adapter.d.ts +7 -0
  90. package/dist/server/modules/affairs-indexer/core/src/parser/docx-parser-adapter.js +123 -0
  91. package/dist/server/modules/affairs-indexer/core/src/parser/docx-parser-adapter.js.map +1 -0
  92. package/dist/server/modules/affairs-indexer/core/src/parser/openxml-utils.d.ts +8 -0
  93. package/dist/server/modules/affairs-indexer/core/src/parser/openxml-utils.js +111 -0
  94. package/dist/server/modules/affairs-indexer/core/src/parser/openxml-utils.js.map +1 -0
  95. package/dist/server/modules/affairs-indexer/core/src/parser/parser-adapter.d.ts +42 -0
  96. package/dist/server/modules/affairs-indexer/core/src/parser/parser-adapter.js +2 -0
  97. package/dist/server/modules/affairs-indexer/core/src/parser/parser-adapter.js.map +1 -0
  98. package/dist/server/modules/affairs-indexer/core/src/parser/parser-capability-registry.d.ts +18 -0
  99. package/dist/server/modules/affairs-indexer/core/src/parser/parser-capability-registry.js +91 -0
  100. package/dist/server/modules/affairs-indexer/core/src/parser/parser-capability-registry.js.map +1 -0
  101. package/dist/server/modules/affairs-indexer/core/src/parser/parser-router.d.ts +18 -0
  102. package/dist/server/modules/affairs-indexer/core/src/parser/parser-router.js +59 -0
  103. package/dist/server/modules/affairs-indexer/core/src/parser/parser-router.js.map +1 -0
  104. package/dist/server/modules/affairs-indexer/core/src/parser/parser-skip-repository.d.ts +48 -0
  105. package/dist/server/modules/affairs-indexer/core/src/parser/parser-skip-repository.js +193 -0
  106. package/dist/server/modules/affairs-indexer/core/src/parser/parser-skip-repository.js.map +1 -0
  107. package/dist/server/modules/affairs-indexer/core/src/parser/pdf-parser-adapter.d.ts +7 -0
  108. package/dist/server/modules/affairs-indexer/core/src/parser/pdf-parser-adapter.js +371 -0
  109. package/dist/server/modules/affairs-indexer/core/src/parser/pdf-parser-adapter.js.map +1 -0
  110. package/dist/server/modules/affairs-indexer/core/src/parser/plain-text-parser-adapter.d.ts +10 -0
  111. package/dist/server/modules/affairs-indexer/core/src/parser/plain-text-parser-adapter.js +55 -0
  112. package/dist/server/modules/affairs-indexer/core/src/parser/plain-text-parser-adapter.js.map +1 -0
  113. package/dist/server/modules/affairs-indexer/core/src/parser/plain-text-parser.d.ts +9 -0
  114. package/dist/server/modules/affairs-indexer/core/src/parser/plain-text-parser.js +2 -0
  115. package/dist/server/modules/affairs-indexer/core/src/parser/plain-text-parser.js.map +1 -0
  116. package/dist/server/modules/affairs-indexer/core/src/parser/pptx-parser-adapter.d.ts +7 -0
  117. package/dist/server/modules/affairs-indexer/core/src/parser/pptx-parser-adapter.js +130 -0
  118. package/dist/server/modules/affairs-indexer/core/src/parser/pptx-parser-adapter.js.map +1 -0
  119. package/dist/server/modules/affairs-indexer/core/src/parser/xlsx-parser-adapter.d.ts +7 -0
  120. package/dist/server/modules/affairs-indexer/core/src/parser/xlsx-parser-adapter.js +228 -0
  121. package/dist/server/modules/affairs-indexer/core/src/parser/xlsx-parser-adapter.js.map +1 -0
  122. package/dist/server/modules/affairs-indexer/core/src/repositories/catalog-repository.d.ts +205 -0
  123. package/dist/server/modules/affairs-indexer/core/src/repositories/catalog-repository.js +1471 -0
  124. package/dist/server/modules/affairs-indexer/core/src/repositories/catalog-repository.js.map +1 -0
  125. package/dist/server/modules/affairs-indexer/core/src/repositories/catalog-write-repository.d.ts +161 -0
  126. package/dist/server/modules/affairs-indexer/core/src/repositories/catalog-write-repository.js +1350 -0
  127. package/dist/server/modules/affairs-indexer/core/src/repositories/catalog-write-repository.js.map +1 -0
  128. package/dist/server/modules/affairs-indexer/core/src/scanner/file-scanner.d.ts +32 -0
  129. package/dist/server/modules/affairs-indexer/core/src/scanner/file-scanner.js +208 -0
  130. package/dist/server/modules/affairs-indexer/core/src/scanner/file-scanner.js.map +1 -0
  131. package/dist/server/modules/affairs-indexer/core/src/services/dirty/dirty-scope-resolver.d.ts +30 -0
  132. package/dist/server/modules/affairs-indexer/core/src/services/dirty/dirty-scope-resolver.js +66 -0
  133. package/dist/server/modules/affairs-indexer/core/src/services/dirty/dirty-scope-resolver.js.map +1 -0
  134. package/dist/server/modules/affairs-indexer/core/src/services/export/export-builder.d.ts +33 -0
  135. package/dist/server/modules/affairs-indexer/core/src/services/export/export-builder.js +705 -0
  136. package/dist/server/modules/affairs-indexer/core/src/services/export/export-builder.js.map +1 -0
  137. package/dist/server/modules/affairs-indexer/core/src/services/indexer/allowed-extensions-diff-service.d.ts +80 -0
  138. package/dist/server/modules/affairs-indexer/core/src/services/indexer/allowed-extensions-diff-service.js +193 -0
  139. package/dist/server/modules/affairs-indexer/core/src/services/indexer/allowed-extensions-diff-service.js.map +1 -0
  140. package/dist/server/modules/affairs-indexer/core/src/services/indexer/text-indexer.d.ts +77 -0
  141. package/dist/server/modules/affairs-indexer/core/src/services/indexer/text-indexer.js +467 -0
  142. package/dist/server/modules/affairs-indexer/core/src/services/indexer/text-indexer.js.map +1 -0
  143. package/dist/server/modules/affairs-indexer/core/src/services/mcp/mcp-stdio-server.d.ts +17 -0
  144. package/dist/server/modules/affairs-indexer/core/src/services/mcp/mcp-stdio-server.js +264 -0
  145. package/dist/server/modules/affairs-indexer/core/src/services/mcp/mcp-stdio-server.js.map +1 -0
  146. package/dist/server/modules/affairs-indexer/core/src/services/search/offline-search-service.d.ts +11 -0
  147. package/dist/server/modules/affairs-indexer/core/src/services/search/offline-search-service.js +76 -0
  148. package/dist/server/modules/affairs-indexer/core/src/services/search/offline-search-service.js.map +1 -0
  149. package/dist/server/modules/affairs-indexer/core/src/services/search/search-index-builder.d.ts +26 -0
  150. package/dist/server/modules/affairs-indexer/core/src/services/search/search-index-builder.js +305 -0
  151. package/dist/server/modules/affairs-indexer/core/src/services/search/search-index-builder.js.map +1 -0
  152. package/dist/server/modules/affairs-indexer/core/src/services/tagging/tag-recompute-service.d.ts +53 -0
  153. package/dist/server/modules/affairs-indexer/core/src/services/tagging/tag-recompute-service.js +566 -0
  154. package/dist/server/modules/affairs-indexer/core/src/services/tagging/tag-recompute-service.js.map +1 -0
  155. package/dist/server/modules/affairs-indexer/core/src/services/watch/watch-service.d.ts +47 -0
  156. package/dist/server/modules/affairs-indexer/core/src/services/watch/watch-service.js +227 -0
  157. package/dist/server/modules/affairs-indexer/core/src/services/watch/watch-service.js.map +1 -0
  158. package/dist/server/modules/affairs-indexer/core/src/sqlite/catalog-schema.d.ts +5 -0
  159. package/dist/server/modules/affairs-indexer/core/src/sqlite/catalog-schema.js +245 -0
  160. package/dist/server/modules/affairs-indexer/core/src/sqlite/catalog-schema.js.map +1 -0
  161. package/dist/server/modules/affairs-indexer/core/src/sqlite/detect-catalog-schema.d.ts +14 -0
  162. package/dist/server/modules/affairs-indexer/core/src/sqlite/detect-catalog-schema.js +87 -0
  163. package/dist/server/modules/affairs-indexer/core/src/sqlite/detect-catalog-schema.js.map +1 -0
  164. package/dist/server/modules/affairs-indexer/core/src/sqlite/init-catalog.d.ts +13 -0
  165. package/dist/server/modules/affairs-indexer/core/src/sqlite/init-catalog.js +16 -0
  166. package/dist/server/modules/affairs-indexer/core/src/sqlite/init-catalog.js.map +1 -0
  167. package/dist/server/modules/affairs-indexer/core/src/sqlite/migration-runner.d.ts +22 -0
  168. package/dist/server/modules/affairs-indexer/core/src/sqlite/migration-runner.js +430 -0
  169. package/dist/server/modules/affairs-indexer/core/src/sqlite/migration-runner.js.map +1 -0
  170. package/dist/server/modules/affairs-indexer/core/src/sqlite/open-database.d.ts +9 -0
  171. package/dist/server/modules/affairs-indexer/core/src/sqlite/open-database.js +19 -0
  172. package/dist/server/modules/affairs-indexer/core/src/sqlite/open-database.js.map +1 -0
  173. package/dist/server/modules/affairs-indexer/core/src/tagging/simple-tag-inference.d.ts +21 -0
  174. package/dist/server/modules/affairs-indexer/core/src/tagging/simple-tag-inference.js +94 -0
  175. package/dist/server/modules/affairs-indexer/core/src/tagging/simple-tag-inference.js.map +1 -0
  176. package/dist/server/modules/affairs-indexer/core/src/utils/abort.d.ts +2 -0
  177. package/dist/server/modules/affairs-indexer/core/src/utils/abort.js +13 -0
  178. package/dist/server/modules/affairs-indexer/core/src/utils/abort.js.map +1 -0
  179. package/dist/server/modules/affairs-indexer/core/src/utils/file-streaming.d.ts +9 -0
  180. package/dist/server/modules/affairs-indexer/core/src/utils/file-streaming.js +64 -0
  181. package/dist/server/modules/affairs-indexer/core/src/utils/file-streaming.js.map +1 -0
  182. package/dist/server/modules/affairs-indexer/core/src/utils/root-command-lock.d.ts +10 -0
  183. package/dist/server/modules/affairs-indexer/core/src/utils/root-command-lock.js +230 -0
  184. package/dist/server/modules/affairs-indexer/core/src/utils/root-command-lock.js.map +1 -0
  185. package/dist/server/modules/affairs-indexer/core/src/utils/rss-log.d.ts +2 -0
  186. package/dist/server/modules/affairs-indexer/core/src/utils/rss-log.js +19 -0
  187. package/dist/server/modules/affairs-indexer/core/src/utils/rss-log.js.map +1 -0
  188. package/dist/server/modules/affairs-indexer/internal-command-runner.d.ts +31 -0
  189. package/dist/server/modules/affairs-indexer/internal-command-runner.js +643 -0
  190. package/dist/server/modules/affairs-indexer/internal-command-runner.js.map +1 -0
  191. package/dist/server/modules/assistant-capability/assistant-capability-controller.d.ts +0 -49
  192. package/dist/server/modules/assistant-capability/assistant-capability-controller.js +10 -56
  193. package/dist/server/modules/assistant-capability/assistant-capability-controller.js.map +1 -1
  194. package/dist/server/modules/assistant-capability/assistant-capability-service.d.ts +2 -46
  195. package/dist/server/modules/assistant-capability/assistant-capability-service.js +15 -158
  196. package/dist/server/modules/assistant-capability/assistant-capability-service.js.map +1 -1
  197. package/dist/server/modules/browser-runtime/opencli-bridge-browser-executor.d.ts +4 -2
  198. package/dist/server/modules/browser-runtime/opencli-bridge-browser-executor.js +62 -21
  199. package/dist/server/modules/browser-runtime/opencli-bridge-browser-executor.js.map +1 -1
  200. package/dist/server/modules/butler/butler-control-session-service.d.ts +3 -4
  201. package/dist/server/modules/butler/butler-control-session-service.js +39 -62
  202. package/dist/server/modules/butler/butler-control-session-service.js.map +1 -1
  203. package/dist/server/modules/butler/butler-controller.d.ts +11 -3
  204. package/dist/server/modules/butler/butler-controller.js +19 -4
  205. package/dist/server/modules/butler/butler-controller.js.map +1 -1
  206. package/dist/server/modules/butler/butler-follow-up-service.js.map +1 -1
  207. package/dist/server/modules/butler/butler-profile-service.d.ts +1 -1
  208. package/dist/server/modules/butler/butler-profile-service.js +34 -63
  209. package/dist/server/modules/butler/butler-profile-service.js.map +1 -1
  210. package/dist/server/modules/butler/butler-project-service.d.ts +1 -3
  211. package/dist/server/modules/butler/butler-project-service.js +1 -7
  212. package/dist/server/modules/butler/butler-project-service.js.map +1 -1
  213. package/dist/server/modules/butler/butler-session-service.d.ts +1 -0
  214. package/dist/server/modules/butler/butler-session-service.js +109 -0
  215. package/dist/server/modules/butler/butler-session-service.js.map +1 -1
  216. package/dist/server/modules/butler/butler-session-summary-service.js +0 -2
  217. package/dist/server/modules/butler/butler-session-summary-service.js.map +1 -1
  218. package/dist/server/modules/butler/butler-workspace-context.d.ts +5 -1
  219. package/dist/server/modules/butler/butler-workspace-context.js +21 -12
  220. package/dist/server/modules/butler/butler-workspace-context.js.map +1 -1
  221. package/dist/server/modules/file/file-content-service.d.ts +11 -0
  222. package/dist/server/modules/file/file-content-service.js +55 -0
  223. package/dist/server/modules/file/file-content-service.js.map +1 -1
  224. package/dist/server/modules/file/file-controller.d.ts +26 -1
  225. package/dist/server/modules/file/file-controller.js +59 -4
  226. package/dist/server/modules/file/file-controller.js.map +1 -1
  227. package/dist/server/modules/file/file-preview-link-service.d.ts +1 -0
  228. package/dist/server/modules/file/file-preview-link-service.js +25 -0
  229. package/dist/server/modules/file/file-preview-link-service.js.map +1 -1
  230. package/dist/server/modules/file/file-preview-service.js +15 -4
  231. package/dist/server/modules/file/file-preview-service.js.map +1 -1
  232. package/dist/server/modules/file/file-preview-types.d.ts +9 -1
  233. package/dist/server/modules/file/file-preview-types.js +8 -1
  234. package/dist/server/modules/file/file-preview-types.js.map +1 -1
  235. package/dist/server/modules/file/recent-modified-file-service.d.ts +15 -0
  236. package/dist/server/modules/file/recent-modified-file-service.js +102 -0
  237. package/dist/server/modules/file/recent-modified-file-service.js.map +1 -0
  238. package/dist/server/modules/file/runtime/codingns-workspace-bridge.js +6 -0
  239. package/dist/server/modules/file/workspace-file-bridge-service.d.ts +11 -0
  240. package/dist/server/modules/file/workspace-file-bridge-service.js +19 -0
  241. package/dist/server/modules/file/workspace-file-bridge-service.js.map +1 -1
  242. package/dist/server/modules/file/workspace-index-apply-service.d.ts +25 -0
  243. package/dist/server/modules/file/workspace-index-apply-service.js +42 -0
  244. package/dist/server/modules/file/workspace-index-apply-service.js.map +1 -0
  245. package/dist/server/modules/office/office-controller.d.ts +15 -1
  246. package/dist/server/modules/office/office-controller.js +26 -1
  247. package/dist/server/modules/office/office-controller.js.map +1 -1
  248. package/dist/server/modules/office/onlyoffice-integration-service.d.ts +78 -0
  249. package/dist/server/modules/office/onlyoffice-integration-service.js +610 -0
  250. package/dist/server/modules/office/onlyoffice-integration-service.js.map +1 -0
  251. package/dist/server/modules/plugins/plugin-file-gateway-service.d.ts +12 -0
  252. package/dist/server/modules/plugins/plugin-file-gateway-service.js +13 -0
  253. package/dist/server/modules/plugins/plugin-file-gateway-service.js.map +1 -1
  254. package/dist/server/modules/preferences/profile-service.d.ts +1 -0
  255. package/dist/server/modules/preferences/profile-service.js +27 -3
  256. package/dist/server/modules/preferences/profile-service.js.map +1 -1
  257. package/dist/server/modules/sessions/codex-app-server-helper-process.js +0 -8
  258. package/dist/server/modules/sessions/codex-app-server-helper-process.js.map +1 -1
  259. package/dist/server/modules/sessions/session-controller.d.ts +1 -0
  260. package/dist/server/modules/sessions/session-controller.js +3 -0
  261. package/dist/server/modules/sessions/session-controller.js.map +1 -1
  262. package/dist/server/modules/sessions/session-history-service.d.ts +2 -0
  263. package/dist/server/modules/sessions/session-history-service.js +78 -3
  264. package/dist/server/modules/sessions/session-history-service.js.map +1 -1
  265. package/dist/server/modules/sessions/session-live-runtime-service.d.ts +1 -0
  266. package/dist/server/modules/sessions/session-live-runtime-service.js +4 -0
  267. package/dist/server/modules/sessions/session-live-runtime-service.js.map +1 -1
  268. package/dist/server/modules/sessions/session-permission-request-service.js +0 -4
  269. package/dist/server/modules/sessions/session-permission-request-service.js.map +1 -1
  270. package/dist/server/modules/sessions/workspace-session-instruction-watch-service.d.ts +23 -0
  271. package/dist/server/modules/sessions/workspace-session-instruction-watch-service.js +122 -0
  272. package/dist/server/modules/sessions/workspace-session-instruction-watch-service.js.map +1 -0
  273. package/dist/server/modules/sessions/workspace-session-runtime-context-service.d.ts +15 -0
  274. package/dist/server/modules/sessions/workspace-session-runtime-context-service.js +93 -10
  275. package/dist/server/modules/sessions/workspace-session-runtime-context-service.js.map +1 -1
  276. package/dist/server/modules/skills/builtin-skills/codingns-assistant/SKILL.md +6 -7
  277. package/dist/server/modules/skills/builtin-skills/codingns-assistant/references/cli-workflow.md +2 -3
  278. package/dist/server/modules/system/host-resource-controller.d.ts +7 -0
  279. package/dist/server/modules/system/host-resource-controller.js +12 -0
  280. package/dist/server/modules/system/host-resource-controller.js.map +1 -0
  281. package/dist/server/modules/system/host-resource-service.d.ts +54 -0
  282. package/dist/server/modules/system/host-resource-service.js +162 -0
  283. package/dist/server/modules/system/host-resource-service.js.map +1 -0
  284. package/dist/server/modules/tasks/observability-service.d.ts +12 -2
  285. package/dist/server/modules/tasks/observability-service.js +13 -1
  286. package/dist/server/modules/tasks/observability-service.js.map +1 -1
  287. package/dist/server/modules/tasks/task-helper-client.d.ts +36 -2
  288. package/dist/server/modules/tasks/task-helper-client.js +201 -19
  289. package/dist/server/modules/tasks/task-helper-client.js.map +1 -1
  290. package/dist/server/modules/tasks/task-helper-pool.d.ts +37 -0
  291. package/dist/server/modules/tasks/task-helper-pool.js +173 -0
  292. package/dist/server/modules/tasks/task-helper-pool.js.map +1 -0
  293. package/dist/server/modules/tasks/task-helper-process-handlers.d.ts +27 -0
  294. package/dist/server/modules/tasks/task-helper-process-handlers.js +25 -1
  295. package/dist/server/modules/tasks/task-helper-process-handlers.js.map +1 -1
  296. package/dist/server/modules/tasks/task-helper-process.js +75 -26
  297. package/dist/server/modules/tasks/task-helper-process.js.map +1 -1
  298. package/dist/server/modules/tasks/task-helper-scheduling.d.ts +11 -0
  299. package/dist/server/modules/tasks/task-helper-scheduling.js +43 -0
  300. package/dist/server/modules/tasks/task-helper-scheduling.js.map +1 -0
  301. package/dist/server/modules/tasks/task-lane-executors.js +19 -3
  302. package/dist/server/modules/tasks/task-lane-executors.js.map +1 -1
  303. package/dist/server/modules/tasks/task-manager.d.ts +1 -0
  304. package/dist/server/modules/tasks/task-manager.js +3 -0
  305. package/dist/server/modules/tasks/task-manager.js.map +1 -1
  306. package/dist/server/modules/tasks/task-registry.d.ts +1 -0
  307. package/dist/server/modules/tasks/task-registry.js +3 -0
  308. package/dist/server/modules/tasks/task-registry.js.map +1 -1
  309. package/dist/server/modules/tasks/task-scheduler.d.ts +6 -0
  310. package/dist/server/modules/tasks/task-scheduler.js +162 -7
  311. package/dist/server/modules/tasks/task-scheduler.js.map +1 -1
  312. package/dist/server/modules/tasks/task-types.d.ts +28 -3
  313. package/dist/server/modules/tasks/task-types.js +14 -2
  314. package/dist/server/modules/tasks/task-types.js.map +1 -1
  315. package/dist/server/modules/workbench/affairs-assistant-session-snapshot-service.d.ts +68 -0
  316. package/dist/server/modules/workbench/affairs-assistant-session-snapshot-service.js +286 -0
  317. package/dist/server/modules/workbench/affairs-assistant-session-snapshot-service.js.map +1 -0
  318. package/dist/server/modules/workbench/workbench-controller.js +11 -1
  319. package/dist/server/modules/workbench/workbench-controller.js.map +1 -1
  320. package/dist/server/modules/workbench/workbench-service.d.ts +9 -2
  321. package/dist/server/modules/workbench/workbench-service.js +58 -18
  322. package/dist/server/modules/workbench/workbench-service.js.map +1 -1
  323. package/dist/server/modules/workspace/affairs-library-controller.d.ts +117 -0
  324. package/dist/server/modules/workspace/affairs-library-controller.js +164 -0
  325. package/dist/server/modules/workspace/affairs-library-controller.js.map +1 -0
  326. package/dist/server/modules/workspace/affairs-library-debug-log.d.ts +23 -0
  327. package/dist/server/modules/workspace/affairs-library-debug-log.js +107 -0
  328. package/dist/server/modules/workspace/affairs-library-debug-log.js.map +1 -0
  329. package/dist/server/modules/workspace/affairs-library-dirty-watch-service.d.ts +52 -0
  330. package/dist/server/modules/workspace/affairs-library-dirty-watch-service.js +555 -0
  331. package/dist/server/modules/workspace/affairs-library-dirty-watch-service.js.map +1 -0
  332. package/dist/server/modules/workspace/affairs-library-preview-link-service.d.ts +24 -0
  333. package/dist/server/modules/workspace/affairs-library-preview-link-service.js +157 -0
  334. package/dist/server/modules/workspace/affairs-library-preview-link-service.js.map +1 -0
  335. package/dist/server/modules/workspace/affairs-library-refresh-contract.d.ts +56 -0
  336. package/dist/server/modules/workspace/affairs-library-refresh-contract.js +48 -0
  337. package/dist/server/modules/workspace/affairs-library-refresh-contract.js.map +1 -0
  338. package/dist/server/modules/workspace/affairs-library-service.d.ts +344 -0
  339. package/dist/server/modules/workspace/affairs-library-service.js +3755 -0
  340. package/dist/server/modules/workspace/affairs-library-service.js.map +1 -0
  341. package/dist/server/modules/workspace/affairs-lightweight-session-controller.d.ts +78 -0
  342. package/dist/server/modules/workspace/affairs-lightweight-session-controller.js +146 -0
  343. package/dist/server/modules/workspace/affairs-lightweight-session-controller.js.map +1 -0
  344. package/dist/server/modules/workspace/affairs-lightweight-session-service.d.ts +133 -0
  345. package/dist/server/modules/workspace/affairs-lightweight-session-service.js +1447 -0
  346. package/dist/server/modules/workspace/affairs-lightweight-session-service.js.map +1 -0
  347. package/dist/server/modules/workspace/affairs-tag-controller.d.ts +107 -0
  348. package/dist/server/modules/workspace/affairs-tag-controller.js +97 -0
  349. package/dist/server/modules/workspace/affairs-tag-controller.js.map +1 -0
  350. package/dist/server/modules/workspace/affairs-tag-service.d.ts +153 -0
  351. package/dist/server/modules/workspace/affairs-tag-service.js +680 -0
  352. package/dist/server/modules/workspace/affairs-tag-service.js.map +1 -0
  353. package/dist/server/modules/workspace/workspace-controller.d.ts +2 -1
  354. package/dist/server/modules/workspace/workspace-controller.js +8 -2
  355. package/dist/server/modules/workspace/workspace-controller.js.map +1 -1
  356. package/dist/server/modules/workspace/workspace-service.js +60 -9
  357. package/dist/server/modules/workspace/workspace-service.js.map +1 -1
  358. package/dist/server/routes/affairs.d.ts +3 -0
  359. package/dist/server/routes/affairs.js +7 -0
  360. package/dist/server/routes/affairs.js.map +1 -0
  361. package/dist/server/routes/assistant.js +0 -5
  362. package/dist/server/routes/assistant.js.map +1 -1
  363. package/dist/server/routes/files.js +5 -0
  364. package/dist/server/routes/files.js.map +1 -1
  365. package/dist/server/routes/office.js +4 -0
  366. package/dist/server/routes/office.js.map +1 -1
  367. package/dist/server/routes/system.d.ts +2 -1
  368. package/dist/server/routes/system.js +2 -1
  369. package/dist/server/routes/system.js.map +1 -1
  370. package/dist/server/routes/workspaces.d.ts +4 -1
  371. package/dist/server/routes/workspaces.js +46 -1
  372. package/dist/server/routes/workspaces.js.map +1 -1
  373. package/dist/server/server/create-server.d.ts +6 -2
  374. package/dist/server/server/create-server.js +113 -32
  375. package/dist/server/server/create-server.js.map +1 -1
  376. package/dist/server/shared/http/error-handler.js +10 -0
  377. package/dist/server/shared/http/error-handler.js.map +1 -1
  378. package/dist/server/storage/repositories/affairs-assistant-session-snapshot-repository.d.ts +10 -0
  379. package/dist/server/storage/repositories/affairs-assistant-session-snapshot-repository.js +47 -0
  380. package/dist/server/storage/repositories/affairs-assistant-session-snapshot-repository.js.map +1 -0
  381. package/dist/server/storage/repositories/butler-profile-repository.js +7 -3
  382. package/dist/server/storage/repositories/butler-profile-repository.js.map +1 -1
  383. package/dist/server/storage/repositories/office-onlyoffice-setting-repository.d.ts +19 -0
  384. package/dist/server/storage/repositories/office-onlyoffice-setting-repository.js +55 -0
  385. package/dist/server/storage/repositories/office-onlyoffice-setting-repository.js.map +1 -0
  386. package/dist/server/storage/repositories/session-index-repository.js +9 -2
  387. package/dist/server/storage/repositories/session-index-repository.js.map +1 -1
  388. package/dist/server/storage/repositories/user-affairs-library-setting-repository.d.ts +10 -0
  389. package/dist/server/storage/repositories/user-affairs-library-setting-repository.js +69 -0
  390. package/dist/server/storage/repositories/user-affairs-library-setting-repository.js.map +1 -0
  391. package/dist/server/storage/repositories/user-preference-profile-repository.js +6 -3
  392. package/dist/server/storage/repositories/user-preference-profile-repository.js.map +1 -1
  393. package/dist/server/storage/repositories/workspace-navigation-state-repository.d.ts +3 -0
  394. package/dist/server/storage/repositories/workspace-navigation-state-repository.js +47 -4
  395. package/dist/server/storage/repositories/workspace-navigation-state-repository.js.map +1 -1
  396. package/dist/server/storage/sqlite/client.js +230 -123
  397. package/dist/server/storage/sqlite/client.js.map +1 -1
  398. package/dist/server/storage/sqlite/schema.sql +48 -25
  399. package/dist/server/types/domain.d.ts +27 -20
  400. package/dist/server/ws/workbench-ws-hub.js +2 -2
  401. package/dist/server/ws/workbench-ws-hub.js.map +1 -1
  402. package/node_modules/@codingns/session-sync-core/dist/runtime/codex-permissions.js +0 -2
  403. package/node_modules/@codingns/session-sync-core/dist/runtime/codex-permissions.js.map +1 -1
  404. package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.js +0 -6
  405. package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.js.map +1 -1
  406. package/package.json +1 -1
  407. package/dist/public/assets/AdaptiveButlerPage-B153lk5H.css +0 -1
  408. package/dist/public/assets/AdaptiveButlerPage-CJw8Ae62.js +0 -3
  409. package/dist/public/assets/DesktopModal-D_A8sgQU.js +0 -1
  410. package/dist/public/assets/DesktopWindowPage-DK7L7osV.js +0 -2
  411. package/dist/public/assets/FileContextPanel-BdCoubcJ.js +0 -1
  412. package/dist/public/assets/GitSidebar-BeZ0hj7A.js +0 -6
  413. package/dist/public/assets/MobileCreateSessionSheet-DfLMVu8q.js +0 -1
  414. package/dist/public/assets/MobileSheet-5kZ-w-gU.js +0 -1
  415. package/dist/public/assets/MobileWorkspaceSwitcherHeader-C6JMiOq_.js +0 -1
  416. package/dist/public/assets/PluginContainerPage-BlY-xJDh.js +0 -1
  417. package/dist/public/assets/SessionIndexPage-DkBp9Mqz.js +0 -1
  418. package/dist/public/assets/SettingsPage-C-ASmJAG.js +0 -2
  419. package/dist/public/assets/TerminalRuntimeFallbackModal-Bzum5nZ0.js +0 -1
  420. package/dist/public/assets/WorkbenchLayout-OFi6CWgH.js +0 -244
  421. package/dist/public/assets/WorkbenchShellRoute-B4XB8SwG.css +0 -1
  422. package/dist/public/assets/WorkbenchShellRoute-BAQe_E0O.js +0 -1
  423. package/dist/public/assets/WorkspaceDebugDetailPage-DhKa6e9y.js +0 -1
  424. package/dist/public/assets/file-tree-icon-Mg1DiBRX.js +0 -590
  425. package/dist/public/assets/index-C4t-vvqk.css +0 -1
  426. package/dist/public/assets/index-CL97fwWB.js +0 -42
  427. package/dist/public/assets/realtime-client-CLafKzzJ.js +0 -1
  428. package/dist/server/modules/butler/assistant-sandbox-cleanup-scheduler.d.ts +0 -32
  429. package/dist/server/modules/butler/assistant-sandbox-cleanup-scheduler.js +0 -93
  430. package/dist/server/modules/butler/assistant-sandbox-cleanup-scheduler.js.map +0 -1
  431. package/dist/server/modules/butler/assistant-sandbox-service.d.ts +0 -69
  432. package/dist/server/modules/butler/assistant-sandbox-service.js +0 -399
  433. package/dist/server/modules/butler/assistant-sandbox-service.js.map +0 -1
  434. package/dist/server/modules/channels/wechat-claw-client.d.ts +0 -51
  435. package/dist/server/modules/channels/wechat-claw-client.js +0 -245
  436. package/dist/server/modules/channels/wechat-claw-client.js.map +0 -1
  437. package/dist/server/storage/repositories/assistant-sandbox-workspace-repository.d.ts +0 -18
  438. package/dist/server/storage/repositories/assistant-sandbox-workspace-repository.js +0 -191
  439. package/dist/server/storage/repositories/assistant-sandbox-workspace-repository.js.map +0 -1
@@ -1 +0,0 @@
1
- var Cn=Object.defineProperty;var jn=(s,r,l)=>r in s?Cn(s,r,{enumerable:!0,configurable:!0,writable:!0,value:l}):s[r]=l;var U=(s,r,l)=>jn(s,typeof r!="symbol"?r+"":r,l);import{t as o,b as n,j as t,u as kn,E as _t,a as js,m as ks,J as Sn,K as Pn,F as Rn}from"./index-CL97fwWB.js";import{g as Wt,e as Nn,f as En}from"./App-BOHBGFOd.js";import{s as Ln,t as Ss}from"./workbench-navigation-MEzCSmsK.js";import{M as qn}from"./MobileSheet-5kZ-w-gU.js";import{bm as In,bn as Tn,bo as An,bp as On,J as Ae,A as Fn,bq as _n,M as de,U as Ps,V as Rs,O as Ns,Q as ue,br as Un,bs as Bn,T as mt,N as Es,K as $n,R as Ut,P as ft,d as Fs,aC as zn,bt as Dn,bu as Hn,bv as Kn,bw as Wn,X as Vn,bx as ht,Y as Ls,by as Qn,aX as Gn,ah as Oe}from"./WorkbenchLayout-OFi6CWgH.js";import{W as Bt}from"./WorkbenchModal-C7qoQElW.js";function $t(s,r){if(!s)return{allowed:!1,hidden:!1,reason:o("conversation.capabilityDenied")};switch(r){case"send_message":return s.canSendMessage===!1?{allowed:!1,hidden:!1,reason:o("conversation.capabilitySendDisabled")}:{allowed:!0,hidden:!1,reason:null};case"attachments":return s.supportsAttachments?{allowed:!0,hidden:!1,reason:null}:{allowed:!1,hidden:!1,reason:o("conversation.capabilityAttachmentDisabled")};case"interrupt":return s.supportsInterrupt?{allowed:!0,hidden:!1,reason:null}:{allowed:!1,hidden:!1,reason:o("conversation.capabilityInterruptDisabled")};default:return{allowed:!1,hidden:!1,reason:o("conversation.capabilityDenied")}}}const pt=12,te=16,Jn=640,zt=180;function Xn({provider:s,messages:r,variant:l="header"}){const[d,p]=n.useState(!1),[f,h]=n.useState(null),i=n.useId(),C=n.useRef(null),v=n.useRef(null),m=n.useMemo(()=>In(r,s),[r,s]);if(n.useLayoutEffect(()=>{if(!d)return;function M(){const S=C.current;if(!S)return;const x=S.getBoundingClientRect(),E=window.innerWidth,R=window.innerHeight,L=Math.min(Jn,Math.max(280,E-te*2)),q=x.left+x.width/2-L/2,G=Yn(q,te,Math.max(te,E-L-te));if(l==="header"){h({left:G,width:L,top:Math.min(x.bottom+pt,R-zt-te),maxHeight:Math.max(zt,R-x.bottom-pt-te)});return}h({left:G,width:L,bottom:Math.max(te,R-x.top+pt),maxHeight:Math.max(zt,x.top-pt-te)})}return M(),window.addEventListener("resize",M),window.addEventListener("scroll",M,!0),()=>{window.removeEventListener("resize",M),window.removeEventListener("scroll",M,!0)}},[d,l]),n.useEffect(()=>{if(!d)return;function M(x){const E=C.current,R=v.current,L=x.target;L instanceof Node&&(E!=null&&E.contains(L)||R!=null&&R.contains(L)||p(!1))}function S(x){x.key==="Escape"&&p(!1)}return document.addEventListener("pointerdown",M),document.addEventListener("keydown",S),()=>{document.removeEventListener("pointerdown",M),document.removeEventListener("keydown",S)}},[d]),!m||m.items.length===0)return null;const $=Tn(m.items),V=$.in_progress||$.pending,N=V>0?V:m.items.length,g=l==="composer"?"conversation-task-progress-button composer-task-progress-button":"conversation-header-ai-button conversation-task-progress-button",y=d&&f?Wt.createPortal(t.jsx("div",{id:i,ref:v,className:"conversation-task-progress-popover",role:"region","aria-label":o("conversation.taskProgressModalTitle"),style:{left:f.left,width:f.width,maxHeight:f.maxHeight,top:f.top,bottom:f.bottom},children:t.jsx(An,{snapshot:m,className:"conversation-task-progress-popover-card"})}),document.body):null;return t.jsxs("div",{className:"conversation-task-progress-entry","data-variant":l,ref:C,children:[t.jsxs("button",{type:"button",className:g,"data-variant":l,"aria-label":o("conversation.taskProgressButton",{count:m.items.length}),"aria-expanded":d,"aria-controls":d?i:void 0,title:o("conversation.taskProgressButton",{count:m.items.length}),onClick:()=>{p(M=>!M)},children:[t.jsx("span",{className:"conversation-header-ai-button-label","aria-hidden":"true",children:t.jsx(On,{})}),t.jsx("span",{className:"conversation-task-progress-badge",children:N})]}),y]})}function Yn(s,r,l){return Math.min(Math.max(s,r),l)}const Zn="codingns.conversation.composer-draft:",eo=1,to=[{id:"builtin-stage-and-summarize",text:"请将本次会话变更的所有代码提交到git暂存区,然后总结一条中文的提交信息"},{id:"builtin-review-module",text:"分析本项目 模块的代码实现,并分析存在的问题"},{id:"builtin-group-commits",text:"分析当前项目中的未提交文件,按照功能模块进行分类提交,提交信息格式请参考我最近的提交记录"}];function Vt(){return typeof window<"u"&&typeof window.localStorage<"u"}function so(s){if(!s||typeof s!="object")return null;const r="id"in s?s.id:null,l="fileName"in s?s.fileName:null,d="mimeType"in s?s.mimeType:null,p="fileSize"in s?s.fileSize:null,f="lastModified"in s?s.lastModified:null,h="contentBase64"in s?s.contentBase64:null;if(typeof r!="string"||typeof l!="string"||typeof d!="string"||typeof p!="number"||typeof f!="number"||typeof h!="string")return null;const i=r.trim(),C=l.trim(),v=d.trim(),m=h.trim();return!i||!C||!v||p<0||f<0||!m?null:{id:i,fileName:C,mimeType:v,fileSize:p,lastModified:f,contentBase64:m}}function no(s){if(!s||typeof s!="object")return null;const r="content"in s?s.content:null,l="attachments"in s?s.attachments:null;if(typeof r!="string"||!Array.isArray(l))return null;const d=l.map(p=>so(p)).filter(p=>p!==null);return d.length!==l.length||r.length===0&&d.length===0?null:{content:r,attachments:d}}function Fe(s){return`${Zn}${s}`}function oo(s){var r,l;return{id:((l=(r=globalThis.crypto)==null?void 0:r.randomUUID)==null?void 0:l.call(r))??`phrase-${Date.now()}-${Math.random().toString(16).slice(2)}`,text:s.trim()}}function ro(s){if(!Vt())return null;const r=s.trim();if(!r)return null;const l=window.localStorage.getItem(Fe(r));if(!l)return null;try{const d=JSON.parse(l),p=d&&typeof d=="object"&&"draft"in d&&d.draft&&typeof d.draft=="object"?d.draft:d,f=no(p);return f||(window.localStorage.removeItem(Fe(r)),null)}catch{return window.localStorage.removeItem(Fe(r)),null}}function io(s,r){if(!Vt())return!1;const l=s.trim();if(!l)return!1;if(r.content.length===0&&r.attachments.length===0)return _s(l),!0;try{return window.localStorage.setItem(Fe(l),JSON.stringify({schemaVersion:eo,draft:r})),!0}catch{return!1}}function _s(s){if(!Vt())return;const r=s.trim();r&&window.localStorage.removeItem(Fe(r))}const qs="workbench:focus-composer",ao=["codex","claude-code","opencode","gemini","kimi"],lo=new Set(["codex","claude-code","opencode"]),co=new Set(["codex","claude-code","opencode"]),Is={position:"absolute",width:"1px",height:"1px",padding:0,margin:"-1px",overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",border:0},ye=new Map;function uo(s){return[{id:ft,name:o("conversation.modelUseCliDefault"),provider:s,usesProviderDefault:!0}]}function Ts(s){return uo(s)}function mo(){var s,r;return((r=(s=globalThis.crypto)==null?void 0:s.randomUUID)==null?void 0:r.call(s))??`${Date.now()}-${Math.random().toString(16).slice(2)}`}function As(s){if(s){s.value="";try{const r=s.showPicker;if(typeof r=="function"){r.call(s);return}}catch{}s.click()}}function ho(s,r,l,d){const p=globalThis.atob(l),f=Uint8Array.from(p,h=>h.charCodeAt(0));return new File([f],s,{type:r,lastModified:d})}function po(s){return s.trim().toLowerCase().startsWith("image/")}function _e(s){const r=s.type.trim().toLowerCase();return r.length>0?r:"application/octet-stream"}function Us(s){return po(_e(s))?"image":"file"}function Bs(s,r=mo()){const l=Us(s);return{id:r,file:s,kind:l,previewUrl:l==="image"?URL.createObjectURL(s):null}}function fo(s){const r=ho(s.fileName,s.mimeType,s.contentBase64,s.lastModified);return Bs(r,s.id)}function vo(s){return s<1024?`${s} B`:s<1024*1024?`${(s/1024).toFixed(1)} KB`:`${(s/(1024*1024)).toFixed(1)} MB`}function go(s){const r=s.trim().replace(/\s+/g," ");return r.length===0?o("conversation.forkDraftEmpty"):r.length>140?`${r.slice(0,140)}…`:r}function bo(s,r){return r===s?co.has(r)?null:o("conversation.forkProviderNativeUnsupported"):lo.has(r)?null:o("conversation.forkProviderReconstructedUnsupported")}function $s(s){return(s==null?void 0:s.canStartSession)===!1}function xo(s){return $s(s)?(s==null?void 0:s.limitations[0])??o("conversation.capabilityDenied"):null}function yo(s,r){return{id:r,kind:Us(s),fileName:s.name,mimeType:_e(s),fileSize:s.size}}function Os(s){return new Promise((r,l)=>{const d=new FileReader;d.onerror=()=>{l(d.error??new Error("FILE_READ_FAILED"))},d.onload=()=>{const p=typeof d.result=="string"?d.result:"",f=p.includes(",")?p.split(",").at(-1)??"":p;r(f)},d.readAsDataURL(s)})}function wo(s){s.forEach(r=>{r.previewUrl&&URL.revokeObjectURL(r.previewUrl)})}function Mo(s,r){const l=new Set(s.map(p=>`${p.file.name}:${p.file.size}:${p.file.lastModified}`)),d=[...s];return r.forEach(p=>{const f=`${p.name}:${p.size}:${p.lastModified}`;l.has(f)||(l.add(f),d.push(Bs(p)))}),d}function Co(s,r,l){const d=s.nativeEvent;return d.isComposing||d.keyCode===229||r||l}function Ho({capabilities:s,placeholder:r,draftStorageId:l,initialModel:d=null,workspaceId:p=null,initialProviderConfigMode:f="global-default",initialProviderPresetId:h=null,forkDraft:i=null,onClearForkDraft:C,onForkDraftChange:v,panelRef:m,portalContainer:$=null,hasActiveRun:V=null,canInterrupt:N=null,contextUsage:g=null,taskProvider:y=null,taskMessages:M=[],hasPendingQueuedMessages:S=!1,isSubmitting:x,isRunning:E=!1,onInterrupt:R,onQueueSend:L,onSend:we}){const q=Nn(),G=n.useId(),zs=n.useId(),[J,me]=n.useState(""),[z,Me]=n.useState(""),[he,Ue]=n.useState("medium"),[X,Ce]=n.useState([]),[Ds,pe]=n.useState(!1),[Be,$e]=n.useState(!1),[I,ze]=n.useState(to),[Hs,De]=n.useState(!1),[Ks,fe]=n.useState(!1),[He,Qt]=n.useState(""),[je,Gt]=n.useState(!1),[Ws,D]=n.useState(!1),[Jt,Xt]=n.useState(!1),[vt,Yt]=n.useState(!1),[se,Ke]=n.useState(null),[Vs,gt]=n.useState(!1),[bt,xt]=n.useState(null),[Zt,yt]=n.useState(!1),es=n.useMemo(()=>Ae(f,h),[f,h]),[F,ke]=n.useState(es.providerConfigMode),[H,We]=n.useState(es.providerPresetId),ne=n.useMemo(()=>Ae(F,H),[F,H]),[wt,Se]=n.useState(null),[Mt,Ve]=n.useState(!1),[oe,Pe]=n.useState(null),[Qs,Qe]=n.useState(!1),[Ge,K]=n.useState("global-default"),[Re,Q]=n.useState(null),[Je,Ct]=n.useState({}),[Xe,Ye]=n.useState(null),Ne=n.useRef(null),jt=n.useRef(null),ts=n.useRef(null),kt=n.useRef(!1),St=n.useRef(!1),Ze=n.useRef(!1),Ee=n.useRef(null),Y=n.useRef(new Set),re=n.useRef(new Map),Pt=n.useRef(0),et=n.useRef(null),{showToast:Le}=En(),tt=Fn(),Rt=n.useCallback(()=>{Ee.current!==null&&(globalThis.clearTimeout(Ee.current),Ee.current=null),Ze.current=!1},[]);n.useEffect(()=>Rt,[Rt]);const w=(s==null?void 0:s.provider)??y??_n(s),ve=de(w),ge=kn(e=>_t(w)?e.profile.providers[w]:null),qe=(ge==null?void 0:ge.defaultModel)??null,Ie=(ge==null?void 0:ge.defaultReasoningLevel)??null;n.useEffect(()=>{const e=Ae(f,h);ke(e.providerConfigMode),We(e.providerPresetId)},[l,f,h,w]),n.useEffect(()=>{if(!i){K("global-default"),Q(null);return}if(de(i.targetProvider)){const e=Ae(i.targetProviderConfigMode,i.targetProviderPresetId);K(e.providerConfigMode),Q(e.providerPresetId);return}K("global-default"),Q(null)},[i]),n.useEffect(()=>{if(!ve){Ke(null),gt(!1);return}const e=ye.get(ve)??null;e&&Ke(e);let a=!1;return gt(!e),Ps().then(c=>{c.items.forEach(u=>{ye.set(u.app,u)}),a||Ke(ye.get(ve)??null)}).catch(()=>{!a&&!e&&Ke(null)}).finally(()=>{a||gt(!1)}),()=>{a=!0}},[ve]),n.useEffect(()=>{const e=i?de(i.targetProvider):null;if(!e){Pe(null),Qe(!1);return}const a=ye.get(e)??null;a&&Pe(a);let c=!1;return Qe(!a),Ps().then(u=>{u.items.forEach(b=>{ye.set(b.app,b)}),c||Pe(ye.get(e)??null)}).catch(()=>{!c&&!a&&Pe(null)}).finally(()=>{c||Qe(!1)}),()=>{c=!0}},[i]),n.useEffect(()=>{if(F==="cc-switch-preset"){if(!H){ke("global-default");return}se&&!se.options.some(e=>e.id===H)&&(ke("global-default"),We(null))}},[se,F,H]),n.useEffect(()=>{if(F!=="cc-switch-preset"||!H||!(p!=null&&p.trim())){xt(null),yt(!1);return}let e=!1;return yt(!0),Rs(w,p,{providerConfigMode:"cc-switch-preset",providerPresetId:H}).then(a=>{e||xt(a)}).catch(()=>{e||xt(null)}).finally(()=>{e||yt(!1)}),()=>{e=!0}},[w,F,H,p]),n.useEffect(()=>{if(!(!i||Ge!=="cc-switch-preset")){if(!Re){K("global-default");return}oe&&!oe.options.some(e=>e.id===Re)&&(K("global-default"),Q(null))}},[oe,i,Ge,Re]);const Nt=n.useMemo(()=>$t(s,"send_message"),[s]),ss=n.useMemo(()=>$t(s,"interrupt"),[s]),T=n.useMemo(()=>$t(s,"attachments"),[s]),be=n.useMemo(()=>F!=="cc-switch-preset"?s:bt??s,[s,bt,F]),B=n.useMemo(()=>{var a;const e=(a=be==null?void 0:be.modelOptions)==null?void 0:a.map(c=>{var u;return{...c,provider:w,supportedReasoningEfforts:(u=c.supportedReasoningEfforts)==null?void 0:u.filter(b=>b==="low"||b==="medium"||b==="high"||b==="xhigh")}});return e!=null&&e.length?e:Ts(w)},[be==null?void 0:be.modelOptions,w]),st=n.useMemo(()=>Ns(se),[se]),Et=F==="cc-switch-preset"?H??ue:ue,ie=n.useMemo(()=>st.find(e=>e.value===Et)??st[0]??null,[st,Et]),A=n.useMemo(()=>B.find(e=>e.id===z)??null,[B,z]),nt=Un(s),Gs=Bn(s),Lt=n.useMemo(()=>[{value:"low",label:o("conversation.reasoningLow")},{value:"medium",label:o("conversation.reasoningMedium")},{value:"high",label:o("conversation.reasoningHigh")},{value:"xhigh",label:o("conversation.reasoningMaximum")}],[]),W=n.useMemo(()=>{if(!nt)return[];const e=A==null?void 0:A.supportedReasoningEfforts;return!e||e.length===0?Lt:Lt.filter(a=>e.includes(a.value))},[nt,Lt,A==null?void 0:A.supportedReasoningEfforts]),ns=n.useMemo(()=>B.map(e=>({value:e.id,label:mt(e)?o("conversation.modelUseCliDefault"):e.name})),[B]),qt=n.useMemo(()=>Es(se),[se]),Js=n.useMemo(()=>{const e=A?mt(A)?o("conversation.modelUseCliDefault"):A.name:o("conversation.modelUseCliDefault");return qt?`${(ie==null?void 0:ie.label)??o("conversation.deploymentDefaultPreset")} · ${e}`:e},[A,ie,qt]),Xs=n.useMemo(()=>W.map(e=>({value:e.value,label:e.label})),[W]),Ys=n.useMemo(()=>[{command:"/plan",label:o("conversation.slashCommandPlan")},{command:"/review",label:o("conversation.slashCommandReview")},{command:"/explain",label:o("conversation.slashCommandExplain")}],[]),os=(s==null?void 0:s.inRunInputMode)??"none",_=!!i,{visibleProviders:ot}=$n(ao,_),rs=(i==null?void 0:i.targetProvider)??null,Zs=de(rs),O=n.useMemo(()=>Ae(Ge,Re),[Ge,Re]),rt=!!i&&(s==null?void 0:s.provider)===rs&&ne.providerConfigMode===O.providerConfigMode&&ne.providerPresetId===O.providerPresetId,Z=n.useMemo(()=>i?rt?s:wt??Ut(i.targetProvider):null,[s,wt,i,rt]),ee=n.useMemo(()=>{var a;if(!i)return[];const e=(a=Z==null?void 0:Z.modelOptions)==null?void 0:a.map(c=>{var u;return{...c,provider:i.targetProvider,supportedReasoningEfforts:(u=c.supportedReasoningEfforts)==null?void 0:u.filter(b=>b==="low"||b==="medium"||b==="high"||b==="xhigh")}});return e!=null&&e.length?e:Ts(i.targetProvider)},[Z==null?void 0:Z.modelOptions,i]),is=n.useMemo(()=>ee.map(e=>({value:e.id,label:mt(e)?o("conversation.modelUseCliDefault"):e.name})),[ee]),it=n.useMemo(()=>!i||!i.targetModel?ft:ee.some(e=>e.id===i.targetModel)?i.targetModel:ft,[ee,i]),at=n.useMemo(()=>Ns(oe),[oe]),It=O.providerConfigMode==="cc-switch-preset"?O.providerPresetId??ue:ue,ae=n.useMemo(()=>at.find(e=>e.value===It)??at[0]??null,[at,It]),lt=n.useMemo(()=>ee.find(e=>e.id===it)??null,[ee,it]),Tt=n.useMemo(()=>Es(oe),[oe]),en=n.useMemo(()=>{const e=lt?mt(lt)?o("conversation.modelUseCliDefault"):lt.name:o("conversation.modelUseCliDefault");return Tt?`${(ae==null?void 0:ae.label)??o("conversation.deploymentDefaultPreset")} · ${e}`:e},[lt,ae,Tt]),le=n.useMemo(()=>i?ot.filter(e=>bo(i.sourceProvider,e)!==null?!1:!$s(Je[e]??null)):[],[i,Je,ot]),as=n.useMemo(()=>i?le.length>0?le:[i.targetProvider]:[],[i,le]),tn=n.useMemo(()=>as.map(e=>({value:e,label:Fs(e,"full")})),[as]),ct=n.useMemo(()=>i?xo(Je[i.targetProvider]??Z??null):null,[Z,i,Je]),dt=V??null,ce=E||dt===!0,sn=ce&&os==="streaming_guidance"&&dt===!1&&!zn(s),ls=!_&&ce&&os==="streaming_guidance"&&!sn,At=!_&&ce&&typeof L=="function"&&Dn(s,dt),P=!_&&ce&&!ls&&!At,Ot=_&&!!ct,cs=J.trim().length>0||X.length>0,ds=N===!1&&dt===!0?ss.allowed:N??ss.allowed,Ft=ce&&ds&&!!R&&!Jt,nn=!cs&&(vt||x||ce||S),us=Ft?o("conversation.capabilityInterrupt"):o("conversation.runtimeRunning"),ms=ce?At?o("conversation.queueGuidanceButton"):ls?o("conversation.sendGuidanceButton"):o("conversation.sendButton"):o("conversation.sendButton"),hs=n.useCallback(e=>{Me(e),_t(w)&&js({providers:{[w]:{defaultModel:e}}}).catch(()=>{})},[w]),on=n.useCallback(e=>{if(e==="__global_default__"){ke("global-default"),We(null);return}ke("cc-switch-preset"),We(e)},[]),rn=n.useCallback(e=>{Ue(e),_t(w)&&js({providers:{[w]:{defaultReasoningLevel:e}}}).catch(()=>{})},[w]),ut=n.useCallback(e=>{Y.current.forEach(a=>{URL.revokeObjectURL(a)}),Y.current.clear(),e.forEach(a=>{a.previewUrl&&Y.current.add(a.previewUrl)}),Ce(e)},[]),Te=n.useCallback(e=>{e.length!==0&&Ce(a=>{const c=Mo(a,e);return c.forEach(u=>{u.previewUrl&&Y.current.add(u.previewUrl)}),c})},[]),an=n.useCallback(e=>{re.current.delete(e),Ce(a=>{const c=a.find(u=>u.id===e);return c!=null&&c.previewUrl&&(Y.current.delete(c.previewUrl),URL.revokeObjectURL(c.previewUrl)),a.filter(u=>u.id!==e)})},[]),ps=n.useCallback(e=>{const a=Array.from(e.target.files??[]);a.length>0&&Te(a),e.target.value=""},[Te]),ln=n.useCallback(e=>{var c;q.isMobile||!T.allowed||P||!((((c=e.dataTransfer.files)==null?void 0:c.length)??0)>0||Array.from(e.dataTransfer.items??[]).some(u=>u.kind==="file"))||(e.preventDefault(),e.dataTransfer.dropEffect="copy",Be||$e(!0),D(!1))},[T.allowed,Be,P,q.isMobile]),cn=n.useCallback(e=>{const a=e.relatedTarget;a instanceof Node&&e.currentTarget.contains(a)||$e(!1)},[]),dn=n.useCallback(e=>{if(q.isMobile||!T.allowed||P)return;const a=Array.from(e.dataTransfer.files??[]);a.length!==0&&(e.preventDefault(),$e(!1),Te(a))},[T.allowed,P,Te,q.isMobile]),fs=n.useCallback(e=>{if(!T.allowed||P)return;const a=e==="camera"?ts.current:jt.current;As(a),pe(!1)},[T.allowed,P]),un=n.useCallback(()=>{if(!(!T.allowed||P)){if(D(!1),q.isNativeMobile){tt.trigger("selection"),pe(!0);return}As(jt.current)}},[T.allowed,tt,P,q.isNativeMobile]),mn=n.useCallback(()=>{D(e=>!e)},[]),hn=n.useCallback(e=>{var a;me(c=>c.trimStart().startsWith(e)?c:c.trim()?`${e} ${c.trim()}`:`${e} `),D(!1),(a=Ne.current)==null||a.focus()},[]),xe=n.useCallback(async e=>{const a=I;Pt.current+=1,ze(e),Gt(!0);try{const c=await Hn(e.map(u=>({id:u.id,text:u.text})));return ze(c.items.map(u=>({id:u.id,text:u.text}))),!0}catch(c){return ze(a),Le({title:c instanceof Error?c.message:o("conversation.quickPhraseSaveFailed"),tone:"error"}),!1}finally{Gt(!1)}},[I,Le]),pn=n.useCallback(async()=>{const e=He.trim();!e||!await xe([...I,oo(e)])||(Qt(""),fe(!1))},[xe,He,I]),fn=n.useCallback(e=>{xe(I.filter(a=>a.id!==e))},[xe,I]),vs=n.useCallback((e,a)=>{const c=I.findIndex(k=>k.id===e);if(c<0)return;const u=c+a;if(u<0||u>=I.length)return;const b=[...I],[j]=b.splice(c,1);b.splice(u,0,j),xe(b)},[xe,I]),vn=n.useCallback(e=>{var a;me(e),De(!1),(a=Ne.current)==null||a.focus()},[]),gs=n.useCallback(e=>{const a=e?ro(e):null,c=(a==null?void 0:a.attachments.map(u=>fo(u)))??[];re.current=new Map(((a==null?void 0:a.attachments)??[]).map(u=>[u.id,u])),ut(c),me((a==null?void 0:a.content)??""),D(!1)},[ut]);n.useEffect(()=>{if(!B.length)return;const e=(d==null?void 0:d.trim())||null,a=`${l??"default"}:${w}:${e??""}`;if(!!(e&&B.some(b=>b.id===e))){if(et.current!==a){et.current=a,z!==e&&Me(e);return}if(B.some(b=>b.id===z))return;Me(e);return}if(!e&&et.current!==a&&(et.current=a),qe&&B.some(b=>b.id===qe)){z!==qe&&Me(qe);return}if(B.some(b=>b.id===z))return;const u=B[0].id;Me(u)},[B,l,w,z,qe,d]),n.useEffect(()=>{if(!Kn(w)||W.length===0)return;if(Ie&&W.some(c=>c.value===Ie)){he!==Ie&&Ue(Ie);return}const e=s==null?void 0:s.defaultReasoningLevel;if(e&&W.some(c=>c.value===e)){he!==e&&Ue(e);return}if(W.some(c=>c.value===he))return;const a=W[0].value;Ue(a)},[W,s==null?void 0:s.defaultReasoningLevel,w,he,Ie]),n.useEffect(()=>{let e=!1;const a=Pt.current;return Wn().then(c=>{e||Pt.current!==a||ze(c.items.map(u=>({id:u.id,text:u.text})))}).catch(()=>{}),()=>{e=!0}},[]),n.useEffect(()=>{gs(l)},[l,gs]),n.useEffect(()=>{if(!l)return;const e=l,a=new Set(X.map(b=>b.id));re.current.forEach((b,j)=>{a.has(j)||re.current.delete(j)});let c=!1;async function u(){if(J.length===0&&X.length===0){_s(e);return}const b=await Promise.all(X.map(async j=>{const k=re.current.get(j.id);return k&&k.fileName===j.file.name&&k.fileSize===j.file.size&&k.lastModified===j.file.lastModified&&k.mimeType===_e(j.file)?k:{id:j.id,fileName:j.file.name,mimeType:_e(j.file),fileSize:j.file.size,lastModified:j.file.lastModified,contentBase64:await Os(j.file)}}));c||(re.current=new Map(b.map(j=>[j.id,j])),io(e,{content:J,attachments:b}))}return u(),()=>{c=!0}},[X,J,l]),n.useEffect(()=>{const e=Ne.current;e&&(e.style.height="0px",e.style.height=`${Math.min(e.scrollHeight,120)}px`)},[J]),n.useEffect(()=>{T.allowed||(re.current.clear(),pe(!1),ut([]))},[T.allowed,ut]),n.useEffect(()=>{q.isMobile||pe(!1)},[q.isMobile]),n.useEffect(()=>()=>{Y.current.forEach(e=>{URL.revokeObjectURL(e)}),Y.current.clear()},[]),n.useEffect(()=>{function e(){var a;(a=Ne.current)==null||a.focus()}return window.addEventListener(qs,e),()=>{window.removeEventListener(qs,e)}},[]),n.useEffect(()=>{if(!i){Se(null),Ve(!1),Pe(null),Qe(!1),Ct({}),Ye(null);return}if(rt){Se(null),Ve(!1);return}let e=!1;return Se(Ut(i.targetProvider)),Ve(!0),Rs(i.targetProvider,i.workspaceId,{providerConfigMode:O.providerConfigMode,providerPresetId:O.providerConfigMode==="cc-switch-preset"?O.providerPresetId:null}).then(a=>{e||Se(a)}).catch(()=>{e||Se(Ut(i.targetProvider))}).finally(()=>{e||Ve(!1)}),()=>{e=!0}},[i,O.providerConfigMode,O.providerPresetId,rt]),n.useEffect(()=>{if(!i){Ct({});return}let e=!1;return Vn(ot,i.workspaceId).then(a=>{e||Ct(a)}),()=>{e=!0}},[i==null?void 0:i.workspaceId,ot]),n.useEffect(()=>{!i||!v||le.length!==0&&(le.includes(i.targetProvider)||v({...i,targetProvider:le[0]??i.targetProvider,targetModel:null,targetProviderConfigMode:"global-default",targetProviderPresetId:null}))},[i,v,le]),n.useEffect(()=>{!i||!i.targetModel||!v||ee.some(e=>e.id===i.targetModel)||v({...i,targetModel:null})},[ee,i,v]);const gn=n.useCallback(e=>{if(!(!i||!v||e===i.targetProvider)){if(e!==i.sourceProvider&&i.targetProvider===i.sourceProvider){Ye(e);return}e===w&&de(e)?(K(ne.providerConfigMode),Q(ne.providerPresetId)):(K("global-default"),Q(null)),v({...i,targetProvider:e,targetModel:null,targetProviderConfigMode:e===w&&de(e)?ne.providerConfigMode:"global-default",targetProviderPresetId:e===w&&de(e)?ne.providerPresetId:null})}},[ne,i,v,w]),bs=n.useCallback(e=>{!i||!v||v({...i,targetModel:e===ft?null:e})},[i,v]),bn=n.useCallback(e=>{!i||!v||(e===ue?(K("global-default"),Q(null)):(K("cc-switch-preset"),Q(e)),v({...i,targetModel:null,targetProviderConfigMode:e===ue?"global-default":"cc-switch-preset",targetProviderPresetId:e===ue?null:e}))},[i,v]),xn=n.useCallback(()=>{!i||!Xe||!v||(K("global-default"),Q(null),v({...i,targetProvider:Xe,targetModel:null,targetProviderConfigMode:"global-default",targetProviderPresetId:null}),Ye(null))},[i,v,Xe]),xs=n.useCallback(()=>{Ye(null)},[]);async function yn(e){if(kt.current)return;const a=J.trim(),c=X;if(a.length===0&&c.length===0||!Nt.allowed||P||Ot){Le({title:P?o("conversation.runtimeRunning"):ct??Nt.reason??o("conversation.capabilityDenied"),tone:"error"});return}kt.current=!0,tt.trigger(e==="queue"?"selection":"action"),Yt(!0),me(""),Ce([]),pe(!1),$e(!1),De(!1),fe(!1),D(!1);try{const u=await Promise.all(c.map(async k=>({kind:k.kind,fileName:k.file.name,mimeType:_e(k.file),fileSize:k.file.size,contentBase64:await Os(k.file)}))),b=c.map(k=>yo(k.file,k.id));await(e==="queue"&&L?L:we)(a,{model:_||A!=null&&A.usesProviderDefault?void 0:z||void 0,reasoningLevel:_?void 0:nt&&W.length>0?he:void 0,providerConfigMode:_?O.providerConfigMode:F,providerPresetId:_?O.providerConfigMode==="cc-switch-preset"?O.providerPresetId:null:F==="cc-switch-preset"?H:null,attachments:u,attachmentMeta:b}),wo(c),c.forEach(k=>{k.previewUrl&&Y.current.delete(k.previewUrl)})}catch(u){me(a),Ce(c),Le({title:u instanceof Error&&u.message==="FILE_READ_FAILED"?o("conversation.attachmentReadFailed"):u instanceof Error?u.message:o("conversation.capabilityDenied"),tone:"error"})}finally{Yt(!1),kt.current=!1}}async function ys(e){e.preventDefault(),await yn(At?"queue":"send")}async function wn(){if(!(!ds||!R||Jt))try{Xt(!0),tt.trigger("action"),await R()}catch(e){Le({title:e instanceof Error?e.message:o("conversation.capabilityInterruptDisabled"),tone:"error"})}finally{Xt(!1)}}const ws=vt||x||P||Ot||!Nt.allowed||!cs,Ms=vt||x||P||!T.allowed,Mn=J.length===0&&!P,Cs=t.jsxs("section",{ref:m,className:"composer-panel",children:[t.jsxs("form",{className:"composer-form",onSubmit:ys,children:[t.jsx("input",{id:G,ref:jt,type:"file",multiple:!0,tabIndex:-1,"aria-hidden":"true",style:Is,onChange:ps}),t.jsx("input",{id:zs,ref:ts,type:"file",accept:"image/*",capture:"environment",tabIndex:-1,"aria-hidden":"true",style:Is,onChange:ps}),t.jsxs("div",{className:"composer-input-container","data-drag-active":Be?"true":void 0,onDragOver:ln,onDragLeave:cn,onDrop:dn,children:[i?t.jsxs("div",{className:"composer-fork-draft",children:[t.jsxs("div",{className:"composer-fork-draft-main",children:[t.jsxs("div",{className:"composer-fork-draft-copy",children:[t.jsx("span",{className:"composer-fork-draft-label",children:o("conversation.forkDraftLabel")}),t.jsx("span",{className:"composer-fork-draft-text",children:go(i.content)})]}),t.jsxs("div",{className:"composer-fork-config",children:[t.jsxs("div",{className:"composer-fork-config-grid",children:[t.jsxs("div",{className:"composer-fork-field",children:[t.jsx("span",{className:"composer-fork-model-label",children:o("conversation.forkTargetProviderLabel")}),t.jsx(ht,{ariaLabel:o("conversation.forkTargetProviderLabel"),value:i.targetProvider,options:tn,onChange:e=>gn(e),compact:!0})]}),t.jsxs("div",{className:"composer-fork-field",children:[t.jsx("span",{className:"composer-fork-model-label",children:o("conversation.forkTargetModelLabel")}),Zs?t.jsx(Ls,{ariaLabel:o("conversation.forkTargetModelLabel"),triggerLabel:en,presetOptions:at,selectedPresetValue:It,selectedPresetSummary:(ae==null?void 0:ae.summary)??null,onSelectPreset:bn,modelOptions:is,selectedModelValue:it,onSelectModel:bs,loadingPresets:Qs,loadingModels:Mt,modelColumnDisabled:O.providerConfigMode==="cc-switch-preset"&&Mt&&wt===null,showPresetColumn:Tt,modelEmptyText:o("conversation.deploymentModelEmpty")}):t.jsx(ht,{ariaLabel:o("conversation.forkTargetModelLabel"),value:it,options:is,onChange:bs,disabled:Mt||Ot,compact:!0})]})]}),ct?t.jsx("p",{className:"composer-capability-hint",children:ct}):null]})]}),C?t.jsx("button",{type:"button",className:"composer-fork-draft-clear","aria-label":o("conversation.forkDraftClear"),title:o("conversation.forkDraftClear"),onClick:C,children:t.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[t.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),t.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})}):null]}):null,X.length>0?t.jsx("div",{className:"composer-attachments",children:X.map(e=>t.jsxs("div",{className:"composer-attachment-card",children:[e.previewUrl?t.jsx("img",{src:e.previewUrl,alt:o("conversation.attachmentPreviewAlt"),className:"composer-attachment-preview"}):t.jsx("div",{className:"composer-attachment-file","aria-hidden":"true",children:t.jsxs("svg",{width:"22",height:"22",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",children:[t.jsx("path",{d:"M14 2H7a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7z"}),t.jsx("path",{d:"M14 2v5h5"}),t.jsx("path",{d:"M9 13h6"}),t.jsx("path",{d:"M9 17h6"})]})}),t.jsxs("div",{className:"composer-attachment-meta",children:[t.jsx("span",{className:"attachment-name",title:e.file.name,children:e.file.name}),t.jsx("span",{className:"attachment-size",children:vo(e.file.size)})]}),t.jsx("button",{type:"button",className:"attachment-remove",onClick:()=>an(e.id),"aria-label":o("conversation.removeAttachment"),children:t.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[t.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),t.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]},e.id))}):null,Be?t.jsx("div",{className:"composer-drop-hint",children:o("conversation.attachmentDropHint")}):null,t.jsxs("div",{className:"composer-input-wrapper",children:[t.jsx("textarea",{ref:Ne,className:"composer-input",value:J,placeholder:r??o("conversation.composerPlaceholder"),readOnly:P,"aria-readonly":P,onChange:e=>me(e.target.value),rows:1,onFocus:()=>D(!1),onCompositionStart:()=>{Rt(),St.current=!0},onCompositionEnd:()=>{St.current=!1,Ze.current=!0,Ee.current=globalThis.setTimeout(()=>{Ze.current=!1,Ee.current=null},0)},onPaste:e=>{if(P||!T.allowed)return;const a=Array.from(e.clipboardData.items).filter(c=>c.kind==="file").map(c=>c.getAsFile()).filter(c=>!!c);a.length!==0&&(e.preventDefault(),Te(a))},onKeyDown:e=>{if(e.key==="Escape"&&D(!1),e.key==="Enter"&&!e.shiftKey){if(Co(e,St.current,Ze.current))return;e.preventDefault(),ws||ys(e)}}}),t.jsx("div",{className:"composer-input-actions",children:nn?t.jsx("button",{className:"composer-send composer-send-busy",type:"button",disabled:!Ft,onClick:()=>{Ft&&wn()},"aria-label":us,title:us,children:t.jsx("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:t.jsx("rect",{x:"6",y:"6",width:"12",height:"12"})})}):t.jsx("button",{className:"composer-send",type:"submit",disabled:ws,"aria-label":ms,title:ms,children:t.jsxs("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:[t.jsx("line",{x1:"22",y1:"2",x2:"11",y2:"13"}),t.jsx("polygon",{points:"22 2 15 22 11 13 2 9 22 2"})]})})})]}),Ws?t.jsx("div",{className:"composer-slash-menu",role:"menu","aria-label":o("conversation.slashMenuTitle"),children:Ys.map(e=>t.jsxs("button",{type:"button",className:"composer-slash-item",onClick:()=>hn(e.command),children:[t.jsx("span",{className:"composer-slash-command",children:e.command}),t.jsx("span",{className:"composer-slash-label",children:e.label})]},e.command))}):null,t.jsxs("div",{className:"composer-controls",children:[t.jsxs("div",{className:"composer-controls-left",children:[T.allowed?q.isNativeMobile?t.jsx("button",{type:"button",className:"composer-attach-btn","aria-label":o("conversation.attachFiles"),title:o("conversation.attachFiles"),disabled:Ms,onClick:un,children:t.jsx(Dt,{})}):Ms?t.jsx("button",{type:"button",className:"composer-attach-btn","aria-label":o("conversation.attachFiles"),title:o("conversation.attachFiles"),disabled:!0,children:t.jsx(Dt,{})}):t.jsx("label",{htmlFor:G,className:"composer-attach-btn","aria-label":o("conversation.attachFiles"),title:o("conversation.attachFiles"),onClick:()=>{D(!1)},children:t.jsx(Dt,{})}):null,!_&&ve?t.jsx(Ls,{ariaLabel:o("conversation.modelSelectorLabel"),triggerLabel:Js,presetOptions:st,selectedPresetValue:Et,selectedPresetSummary:(ie==null?void 0:ie.summary)??null,onSelectPreset:on,modelOptions:ns,selectedModelValue:z,onSelectModel:hs,loadingPresets:Vs,loadingModels:Zt,modelColumnDisabled:F==="cc-switch-preset"&&Zt&&bt===null,showPresetColumn:qt,modelEmptyText:o("conversation.deploymentModelEmpty")}):null,!_&&!ve?t.jsx(ht,{ariaLabel:o("conversation.modelSelectorLabel"),value:z,options:ns,onChange:hs}):null,!_&&nt&&W.length>0?t.jsx(ht,{ariaLabel:o("conversation.reasoningSelectorLabel"),value:he,options:Xs,onChange:e=>rn(e),compact:!0}):null,Gs?t.jsxs("button",{type:"button",className:"composer-slash-btn",onClick:mn,title:o("conversation.slashMenu"),children:[t.jsx("span",{className:"slash-icon",children:"/"}),t.jsx("span",{children:o("conversation.slashMenu")})]}):null,t.jsx(Eo,{contextUsage:g}),t.jsx(Xn,{provider:y,messages:M,variant:"composer"})]}),Mn?t.jsx("div",{className:"composer-quick-phrase-group",children:t.jsx("button",{type:"button",className:"composer-quick-phrase-trigger","aria-label":o("conversation.quickPhraseTrigger"),title:o("conversation.quickPhraseTrigger"),onClick:()=>{De(!0),D(!1)},children:t.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[t.jsx("path",{d:"M7 8h10"}),t.jsx("path",{d:"M7 12h8"}),t.jsx("path",{d:"M7 16h5"}),t.jsx("path",{d:"M5 5h14v14H9l-4 4V5z"})]})})}):null]})]})]}),t.jsx(Bt,{open:Hs,title:o("conversation.quickPhraseModalTitle"),description:o("conversation.quickPhraseModalDescription"),className:"composer-quick-phrase-modal",onClose:()=>{De(!1),fe(!1)},children:t.jsxs("div",{className:"composer-quick-phrase-modal-body",children:[t.jsxs("div",{className:"composer-quick-phrase-toolbar",children:[t.jsx("div",{className:"composer-quick-phrase-toolbar-copy",children:t.jsx("span",{children:o("conversation.quickPhraseListLabel")})}),t.jsx("button",{type:"button",className:"primary-button",disabled:je,onClick:()=>fe(!0),children:o("conversation.quickPhraseOpenCreateAction")})]}),t.jsx("div",{className:"composer-quick-phrase-list",role:"list","aria-label":o("conversation.quickPhraseListLabel"),children:I.length===0?t.jsx("div",{className:"composer-quick-phrase-empty",children:o("conversation.quickPhraseEmpty")}):I.map((e,a)=>t.jsxs("div",{className:"composer-quick-phrase-item",role:"listitem",children:[t.jsxs("button",{type:"button",className:"composer-quick-phrase-select",onClick:()=>vn(e.text),children:[t.jsx("span",{className:"composer-quick-phrase-order",children:o("conversation.quickPhraseOrderLabel",{index:a+1})}),t.jsx("span",{className:"composer-quick-phrase-text",children:e.text})]}),t.jsxs("div",{className:"composer-quick-phrase-actions",children:[t.jsx("button",{type:"button",className:"composer-quick-phrase-action",disabled:je||a===0,"aria-label":o("conversation.quickPhraseMoveUp"),title:o("conversation.quickPhraseMoveUp"),onClick:()=>vs(e.id,-1),children:"↑"}),t.jsx("button",{type:"button",className:"composer-quick-phrase-action",disabled:je||a===I.length-1,"aria-label":o("conversation.quickPhraseMoveDown"),title:o("conversation.quickPhraseMoveDown"),onClick:()=>vs(e.id,1),children:"↓"}),t.jsx("button",{type:"button",className:"composer-quick-phrase-action is-danger",disabled:je,"aria-label":o("conversation.quickPhraseDelete"),title:o("conversation.quickPhraseDelete"),onClick:()=>fn(e.id),children:"×"})]})]},e.id))})]})}),t.jsx(Bt,{open:Ks,title:o("conversation.quickPhraseCreateModalTitle"),description:o("conversation.quickPhraseCreateModalDescription"),className:"composer-quick-phrase-create-modal",onClose:()=>fe(!1),children:t.jsxs("div",{className:"composer-quick-phrase-modal-body",children:[t.jsxs("label",{className:"workbench-modal-field",children:[t.jsx("span",{children:o("conversation.quickPhraseCreateLabel")}),t.jsx("textarea",{className:"composer-quick-phrase-textarea",value:He,placeholder:o("conversation.quickPhraseCreatePlaceholder"),rows:4,onChange:e=>Qt(e.target.value)})]}),t.jsxs("div",{className:"workbench-modal-actions",children:[t.jsx("button",{type:"button",className:"secondary-button",onClick:()=>fe(!1),children:o("common.cancel")}),t.jsx("button",{type:"button",className:"primary-button",disabled:je||He.trim().length===0,onClick:()=>{pn()},children:o("conversation.quickPhraseCreateAction")})]})]})}),t.jsx(Bt,{open:Xe!==null,title:o("conversation.forkSwitchConfirmTitle"),description:o("conversation.forkSwitchConfirmDescription"),className:"composer-fork-confirm-modal",onClose:xs,children:t.jsxs("div",{className:"composer-fork-confirm-body",children:[t.jsxs("div",{className:"composer-fork-confirm-list",children:[t.jsxs("div",{className:"composer-fork-confirm-item",children:[t.jsx("span",{className:"composer-fork-confirm-icon is-keep","aria-hidden":"true",children:t.jsx(Po,{})}),t.jsxs("div",{className:"composer-fork-confirm-copy",children:[t.jsx("strong",{children:o("conversation.forkSwitchConfirmKeepTitle")}),t.jsx("p",{children:o("conversation.forkSwitchConfirmKeepBody")})]})]}),t.jsxs("div",{className:"composer-fork-confirm-item",children:[t.jsx("span",{className:"composer-fork-confirm-icon is-convert","aria-hidden":"true",children:t.jsx(Ro,{})}),t.jsxs("div",{className:"composer-fork-confirm-copy",children:[t.jsx("strong",{children:o("conversation.forkSwitchConfirmConvertTitle")}),t.jsx("p",{children:o("conversation.forkSwitchConfirmConvertBody")})]})]}),t.jsxs("div",{className:"composer-fork-confirm-item",children:[t.jsx("span",{className:"composer-fork-confirm-icon is-drop","aria-hidden":"true",children:t.jsx(No,{})}),t.jsxs("div",{className:"composer-fork-confirm-copy",children:[t.jsx("strong",{children:o("conversation.forkSwitchConfirmDropTitle")}),t.jsx("p",{children:o("conversation.forkSwitchConfirmDropBody")})]})]})]}),t.jsxs("div",{className:"workbench-modal-actions",children:[t.jsx("button",{type:"button",className:"secondary-button",onClick:xs,children:o("conversation.forkSwitchKeepNative")}),t.jsx("button",{type:"button",className:"primary-button",onClick:xn,children:o("conversation.forkSwitchConfirmAction")})]})]})}),t.jsx(jo,{open:Ds&&q.isNativeMobile,onClose:()=>pe(!1),onSelectCamera:()=>fs("camera"),onSelectLibrary:()=>fs("library")})]});return $?Wt.createPortal(Cs,$):Cs}function jo({open:s,onClose:r,onSelectCamera:l,onSelectLibrary:d}){return t.jsx(qn,{open:s,title:o("conversation.attachmentSourceSheetTitle"),description:o("conversation.attachmentSourceSheetDescription"),kind:"action",height:"auto",className:"composer-attachment-sheet",cardClassName:"composer-attachment-sheet-card",bodyClassName:"composer-attachment-sheet-body",showHandle:!0,onClose:r,children:t.jsxs(Ln,{className:"composer-attachment-sheet-actions",children:[t.jsx(Ss,{as:"button",className:"mobile-workspace-home-row composer-attachment-sheet-option","aria-label":o("conversation.attachmentTakePhoto"),label:o("conversation.attachmentTakePhoto"),description:o("conversation.attachmentTakePhotoHint"),trailing:t.jsx(ko,{}),onClick:l}),t.jsx(Ss,{as:"button",className:"mobile-workspace-home-row composer-attachment-sheet-option","aria-label":o("conversation.attachmentChooseFromLibrary"),label:o("conversation.attachmentChooseFromLibrary"),description:o("conversation.attachmentChooseFromLibraryHint"),trailing:t.jsx(So,{}),onClick:d})]})})}function ko(){return t.jsxs("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",children:[t.jsx("path",{d:"M4 8h3l1.5-2h7L17 8h3a1 1 0 0 1 1 1v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V9a1 1 0 0 1 1-1Z"}),t.jsx("circle",{cx:"12",cy:"13",r:"4"})]})}function Dt(){return t.jsxs("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[t.jsx("rect",{x:"3",y:"3",width:"18",height:"18",rx:"4"}),t.jsx("path",{d:"M8 12h8M12 8v8"})]})}function So(){return t.jsxs("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",children:[t.jsx("rect",{x:"4",y:"4",width:"16",height:"16",rx:"2.5"}),t.jsx("path",{d:"m7.5 15 3-3 2.5 2.5 3-4L18 13.5"}),t.jsx("circle",{cx:"8.75",cy:"8.75",r:"1.25",fill:"currentColor",stroke:"none"})]})}function Po(){return t.jsxs("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.9",children:[t.jsx("path",{d:"M12 3 4 7v5c0 5 3.5 8 8 9 4.5-1 8-4 8-9V7l-8-4Z"}),t.jsx("path",{d:"m9.5 12 1.8 1.8L15 10.2"})]})}function Ro(){return t.jsxs("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.9",children:[t.jsx("path",{d:"M4 7h9"}),t.jsx("path",{d:"m10 3 4 4-4 4"}),t.jsx("path",{d:"M20 17h-9"}),t.jsx("path",{d:"m14 13-4 4 4 4"})]})}function No(){return t.jsxs("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.9",children:[t.jsx("path",{d:"m7 7 10 10"}),t.jsx("path",{d:"M17 7 7 17"}),t.jsx("path",{d:"M12 3v2"}),t.jsx("path",{d:"M12 19v2"})]})}function Eo({contextUsage:s}){const[r,l]=n.useState(!1),d=n.useRef(null),p=n.useRef(null),[f,h]=n.useState(null),i=n.useId(),C=s?Math.round(s.usageRatio*100):null,v=s?Math.max(0,Math.min(s.usageRatio,1)):0,m=Lo(v),$=s?qo(s.contextWindowSource):null,V=s?`${o("conversation.contextUsageTitle")} ${C}%`:o("conversation.contextUsageUnavailable"),N=n.useCallback(()=>{const g=d.current;if(!g||typeof window>"u")return;const y=g.getBoundingClientRect(),M=window.innerWidth,S=window.innerHeight,x=12,E=10,R=Math.min(240,Math.max(188,M-x*2)),L=Math.min(Math.max(x,y.left+y.width/2-R/2),Math.max(x,M-R-x)),we=y.top-x,q=S-y.bottom-x,G=we>=140||we>=q;h({position:"fixed",left:L,width:R,maxWidth:M-x*2,top:G?void 0:y.bottom+E,bottom:G?S-y.top+E:void 0})},[]);return n.useEffect(()=>{if(!r)return;function g(M){var x,E;const S=M.target;!((x=d.current)!=null&&x.contains(S))&&!((E=p.current)!=null&&E.contains(S))&&l(!1)}function y(M){M.key==="Escape"&&l(!1)}return window.addEventListener("pointerdown",g),window.addEventListener("keydown",y),window.addEventListener("resize",N),window.addEventListener("scroll",N,!0),N(),()=>{window.removeEventListener("pointerdown",g),window.removeEventListener("keydown",y),window.removeEventListener("resize",N),window.removeEventListener("scroll",N,!0)}},[r,N]),t.jsxs(t.Fragment,{children:[t.jsx("button",{ref:d,type:"button",className:`composer-context-ring ${m}`,style:{"--context-usage-progress":`${v}`},"aria-label":V,"aria-expanded":r,"aria-describedby":r?i:void 0,onClick:()=>l(g=>!g),onMouseEnter:()=>l(!0),onMouseLeave:()=>l(!1),onFocus:()=>l(!0),onBlur:()=>l(!1),children:t.jsx("span",{className:"composer-context-ring-value",children:C===null?"--":t.jsxs(t.Fragment,{children:[t.jsx("span",{children:C}),t.jsx("span",{className:"composer-context-ring-suffix",children:"%"})]})})}),r&&f&&typeof document<"u"?Wt.createPortal(t.jsx("div",{ref:p,id:i,className:"composer-context-tooltip",style:f,role:"tooltip",children:s?t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"composer-context-tooltip-title",children:o("conversation.contextUsageTitle")}),t.jsxs("div",{className:"composer-context-tooltip-line",children:[C,"% · ",Ht(s.promptTokens)," /"," ",Ht(s.contextWindow)," tokens"]}),s.cachedInputTokens>0?t.jsx("div",{className:"composer-context-tooltip-line",children:o("conversation.contextUsageCachedTokens").replace("{count}",Ht(s.cachedInputTokens))}):null,$?t.jsx("div",{className:"composer-context-tooltip-meta",children:$}):null,s.isEstimated?t.jsx("div",{className:"composer-context-tooltip-meta",children:o("conversation.contextUsageEstimated")}):null]}):t.jsx("div",{className:"composer-context-tooltip-line",children:o("conversation.contextUsageUnavailable")})}),document.body):null]})}function Lo(s){return s>=.95?"is-critical":s>=.8?"is-warning":"is-normal"}function qo(s){switch(s){case"provider-log":return o("conversation.contextUsageSourceProviderLog");case"provider-runtime":return o("conversation.contextUsageSourceProviderRuntime");case"provider-config":return o("conversation.contextUsageSourceProviderConfig");case"model-map":return o("conversation.contextUsageSourceModelMap");default:return""}}function Ht(s){return new Intl.NumberFormat().format(s)}function Ko({requests:s,replyingRequestId:r,onReply:l}){const[d,p]=n.useState({}),f=n.useMemo(()=>s.filter(h=>h.status==="pending"),[s]);return f.length===0?null:t.jsxs("section",{className:"permission-request-list",children:[t.jsxs("div",{className:"permission-request-list-header",children:[t.jsxs("div",{children:[t.jsx("strong",{children:o("conversation.permissionRequestSectionTitle")}),t.jsx("p",{children:o("conversation.permissionRequestSectionDescription")})]}),t.jsx("span",{className:"permission-request-count",children:f.length})]}),t.jsx("div",{className:"permission-request-stack",children:f.map(h=>{var V,N;const i=d[h.id]??{},C=h.paths.filter(Boolean),v=h.kind==="command"&&!!((V=h.command)!=null&&V.trim()),m=h.questions.length===0&&C.length===0&&!v&&!!((N=h.summary)!=null&&N.trim()),$=h.kind==="user_input"&&h.questions.some(g=>{var y;return(((y=i[g.id])==null?void 0:y.filter(Boolean).length)??0)===0});return t.jsxs("article",{className:"permission-request-card",children:[t.jsxs("header",{className:"permission-request-card-header",children:[t.jsxs("div",{className:"permission-request-provider",children:[t.jsx("span",{className:"permission-request-provider-icon","aria-hidden":"true",children:t.jsx("img",{src:Qn(h.provider),alt:"",loading:"lazy"})}),t.jsxs("div",{className:"permission-request-provider-copy",children:[t.jsx("strong",{children:h.title}),t.jsx("span",{children:Fs(h.provider,"full")})]})]}),t.jsx("span",{className:"permission-request-kind",children:To(h.kind)})]}),t.jsxs("div",{className:"permission-request-card-body",children:[C.length>0?t.jsx("div",{className:"permission-request-block",children:t.jsx("ul",{className:"permission-request-target-list",children:C.map(g=>t.jsxs("li",{className:"permission-request-target-item",children:[t.jsx("strong",{children:Ao(g)}),t.jsx("span",{children:g})]},`${h.id}:${g}`))})}):null,v?t.jsxs("div",{className:"permission-request-block",children:[t.jsx("div",{className:"permission-request-block-label",children:o("conversation.permissionRequestCommandLabel")}),t.jsx("pre",{children:h.command})]}):null,m?t.jsx("p",{className:"permission-request-summary",children:h.summary}):null,h.questions.length>0?t.jsxs("div",{className:"permission-request-block",children:[t.jsx("div",{className:"permission-request-block-label",children:o("conversation.permissionRequestQuestionsLabel")}),t.jsx("div",{className:"permission-request-question-list",children:h.questions.map(g=>t.jsxs("div",{className:"permission-request-question",children:[t.jsx("div",{className:"permission-request-question-header",children:g.header}),t.jsx("p",{children:g.question}),t.jsx("div",{className:"permission-request-question-options",children:g.options.map(y=>{var S;const M=((S=i[g.id])==null?void 0:S.includes(y.label))??!1;return t.jsxs("label",{className:"permission-request-question-option",children:[t.jsx("input",{type:"radio",name:`${h.id}:${g.id}`,checked:M,onChange:()=>{p(x=>({...x,[h.id]:{...x[h.id]??{},[g.id]:[y.label]}}))}}),t.jsxs("span",{children:[t.jsx("strong",{children:y.label}),y.description?t.jsx("small",{children:y.description}):null]})]},`${g.id}:${y.label}`)})})]},g.id))})]}):null]}),t.jsx("footer",{className:"permission-request-card-footer",children:h.actions.map(g=>t.jsx("button",{type:"button",className:Io(g.tone),disabled:r===h.id||g.value==="submit"&&$,onClick:()=>void l(h.id,{action:g.value,answers:Object.keys(i).length>0?i:void 0}),children:r===h.id?o("conversation.permissionRequestSubmitting"):g.label},`${h.id}:${g.value}`))})]},h.id)})})]})}function Io(s){return s==="danger"?"workbench-danger-button permission-request-action":s==="primary"?"primary-button permission-request-action":"secondary-button permission-request-action"}function To(s){return s==="command"?o("conversation.permissionRequestKindCommand"):s==="file_change"?o("conversation.permissionRequestKindFileChange"):s==="permissions"?o("conversation.permissionRequestKindPermissions"):s==="user_input"?o("conversation.permissionRequestKindUserInput"):o("conversation.permissionRequestKindToolCall")}function Ao(s){return s.split(/[/\\]+/).filter(Boolean).at(-1)??s}class Wo{constructor(r){U(this,"socket",null);U(this,"disposed",!1);U(this,"authRecoveryInFlight",!1);U(this,"latestCursor");U(this,"subscribed",!1);U(this,"pendingOlderRequest",null);U(this,"inFlightOlderRequest",null);U(this,"subscribeStartedAtMs",null);U(this,"firstBackfillLogged",!1);U(this,"olderRequestStartedAtMs",null);U(this,"connectionManager");this.options=r,this.latestCursor=r.cursor,this.connectionManager=new Gn({onReconnect:l=>{this.connect(l)},onStateChange:r.onConnectionChange})}start(){this.connectionManager.start()}updateCursor(r){this.latestCursor=r}reconnectNow(){this.connectionManager.reconnectNow()}requestOlderMessages(r,l){return Oo(this.socket)?this.subscribed?(this.sendOlderMessagesRequest(r,l),!0):(this.pendingOlderRequest={cursor:r,limit:l},!0):!1}close(){var r;this.disposed=!0,this.subscribed=!1,this.pendingOlderRequest=null,this.inFlightOlderRequest=null,this.connectionManager.close(),(r=this.socket)==null||r.close(),this.socket=null}connect(r){var C;if(this.disposed)return;r&&this.socket&&(this.socket.close(),this.socket=null);const l=(C=ks.getState().session)==null?void 0:C.accessToken;if(!l){this.options.onUnauthorized();return}const d=Sn(),p=Pn(d),f=p.baseUrl,h=`${Rn("/ws",f)}?access_token=${encodeURIComponent(l)}`,i=p.transport.createWebSocket({path:"/ws",baseUrl:f,url:h});this.subscribed=!1,this.firstBackfillLogged=!1,this.socket=i,i.addEventListener("open",()=>{this.subscribeStartedAtMs=performance.now(),i.send(JSON.stringify({type:"session.subscribe",sessionId:this.options.sessionId,cursor:this.latestCursor,limit:this.options.limit})),Oe("session.subscribe.sent",{sessionId:this.options.sessionId,hasCursor:this.latestCursor!==null,limit:this.options.limit,baseUrl:f})}),i.addEventListener("message",v=>{if(!(v instanceof MessageEvent)||typeof v.data!="string")return;const m=JSON.parse(v.data);if(m.type==="system.connected"){this.connectionManager.markConnected();return}if(m.type==="session.subscribed"){this.subscribed=!0,Oe("session.subscribe.ack",{sessionId:m.sessionId,durationMs:Kt(this.subscribeStartedAtMs)}),this.options.onSubscribed(),this.flushPendingOlderRequest();return}if(m.type==="session.error"){if(this.clearOlderMessagesRequest(),m.error_code==="UNAUTHORIZED"){this.handleUnauthorized();return}this.options.onError(m);return}if(m.type==="session.runtime_status"){this.options.onRuntimeStatus(m);return}if(m.type==="session.activity"){this.options.onActivity(m);return}if(m.type==="session.history_older"){Oe("session.history_older.received",{sessionId:m.sessionId,messageCount:m.messages.length,olderCursor:m.olderCursor,durationMs:Kt(this.olderRequestStartedAtMs)}),this.olderRequestStartedAtMs=null,this.clearOlderMessagesRequest(),this.options.onOlderHistory(m);return}if(m.type==="session.runtime_message"){this.options.onRuntimeMessage(m);return}if(m.type==="session.runtime_error"){this.options.onRuntimeError(m);return}if(m.type==="session.interrupted"){this.options.onInterrupted(m);return}if(m.type==="session.permission_request"){this.options.onPermissionRequest(m);return}if(m.type==="session.permission_request_resolved"){this.options.onPermissionRequestResolved(m);return}this.latestCursor=m.cursor,this.firstBackfillLogged||(this.firstBackfillLogged=!0,Oe("session.initial_messages.received",{sessionId:m.sessionId,eventType:m.type,messageCount:m.messages.length,olderCursor:m.olderCursor??null,durationMs:Kt(this.subscribeStartedAtMs)})),this.options.onEnvelope(m)}),i.addEventListener("close",()=>{this.disposed||this.socket!==i||(this.subscribed=!1,this.requeueInFlightOlderRequest(),this.connectionManager.markDisconnected())}),i.addEventListener("error",()=>{this.disposed||this.socket!==i||this.connectionManager.markTransientFailure()})}handleUnauthorized(){if(this.authRecoveryInFlight||this.disposed)return;this.authRecoveryInFlight=!0,this.subscribed=!1,this.requeueInFlightOlderRequest();const r=this.socket;this.socket=null,r==null||r.close(),ks.refresh().then(l=>{if(this.authRecoveryInFlight=!1,!this.disposed){if(l.status==="refreshed"){this.connectionManager.reconnectNow();return}if(l.status==="deferred"){this.connectionManager.markDisconnected();return}this.options.onUnauthorized()}})}sendOlderMessagesRequest(r,l){var d;this.inFlightOlderRequest={cursor:r,limit:l},this.olderRequestStartedAtMs=performance.now(),(d=this.socket)==null||d.send(JSON.stringify({type:"session.load_older",sessionId:this.options.sessionId,cursor:r,limit:l})),Oe("session.load_older.sent",{sessionId:this.options.sessionId,hasCursor:r!==null,limit:l})}flushPendingOlderRequest(){if(!this.pendingOlderRequest)return;const r=this.pendingOlderRequest;this.pendingOlderRequest=null,this.sendOlderMessagesRequest(r.cursor,r.limit)}clearOlderMessagesRequest(){this.pendingOlderRequest=null,this.inFlightOlderRequest=null}requeueInFlightOlderRequest(){this.inFlightOlderRequest&&(this.pendingOlderRequest=this.inFlightOlderRequest,this.inFlightOlderRequest=null,this.olderRequestStartedAtMs=null)}}function Kt(s){return s===null||typeof performance>"u"?null:Math.round(performance.now()-s)}function Oo(s){return s!==null&&s.readyState===1}export{Ho as C,Ko as P,Wo as R};
@@ -1,32 +0,0 @@
1
- import { type SchedulerMetrics } from "../tasks/scheduler-metrics.js";
2
- import type { AssistantSandboxService } from "./assistant-sandbox-service.js";
3
- interface AssistantSandboxCleanupSchedulerLogger {
4
- error(message: string, detail?: unknown): void;
5
- }
6
- interface AssistantSandboxCleanupSchedulerOptions {
7
- intervalMs?: number;
8
- maxIntervalMs?: number;
9
- now?: () => string;
10
- logger?: AssistantSandboxCleanupSchedulerLogger;
11
- schedulerMetrics?: SchedulerMetrics;
12
- }
13
- export declare class AssistantSandboxCleanupScheduler {
14
- private readonly assistantSandboxService;
15
- private readonly intervalMs;
16
- private readonly maxIntervalMs;
17
- private readonly now;
18
- private readonly logger;
19
- private readonly schedulerMetrics;
20
- private timer;
21
- private ticking;
22
- private started;
23
- private disposed;
24
- private idleStreak;
25
- constructor(assistantSandboxService: Pick<AssistantSandboxService, "runDueCleanup">, options?: AssistantSandboxCleanupSchedulerOptions);
26
- start(): void;
27
- dispose(): Promise<void>;
28
- runOnce(): Promise<void>;
29
- private scheduleNext;
30
- private tick;
31
- }
32
- export {};
@@ -1,93 +0,0 @@
1
- import { nowIso } from "../../shared/utils/time.js";
2
- import { resolveAdaptiveSchedulerDelayMs } from "../tasks/scheduler-metrics.js";
3
- const DEFAULT_INTERVAL_MS = 60_000;
4
- export class AssistantSandboxCleanupScheduler {
5
- assistantSandboxService;
6
- intervalMs;
7
- maxIntervalMs;
8
- now;
9
- logger;
10
- schedulerMetrics;
11
- timer = null;
12
- ticking = false;
13
- started = false;
14
- disposed = false;
15
- idleStreak = 0;
16
- constructor(assistantSandboxService, options = {}) {
17
- this.assistantSandboxService = assistantSandboxService;
18
- this.intervalMs = Math.max(15_000, options.intervalMs ?? DEFAULT_INTERVAL_MS);
19
- this.maxIntervalMs = Math.max(this.intervalMs, options.maxIntervalMs ?? this.intervalMs * 8);
20
- this.now = options.now ?? nowIso;
21
- this.logger = options.logger ?? console;
22
- this.schedulerMetrics = options.schedulerMetrics ?? null;
23
- }
24
- start() {
25
- if (this.timer || this.disposed) {
26
- return;
27
- }
28
- this.started = true;
29
- this.scheduleNext(0);
30
- }
31
- async dispose() {
32
- this.started = false;
33
- this.disposed = true;
34
- if (this.timer) {
35
- clearTimeout(this.timer);
36
- this.timer = null;
37
- }
38
- while (this.ticking) {
39
- await new Promise((resolve) => setTimeout(resolve, 10));
40
- }
41
- }
42
- async runOnce() {
43
- await this.tick(false);
44
- }
45
- scheduleNext(delayMs) {
46
- this.timer = setTimeout(() => {
47
- this.timer = null;
48
- void this.tick();
49
- }, delayMs);
50
- this.timer.unref?.();
51
- }
52
- async tick(shouldScheduleNext = true) {
53
- if (this.ticking) {
54
- return;
55
- }
56
- this.ticking = true;
57
- const tickStartedAt = Date.now();
58
- const referenceAt = this.now();
59
- let result = null;
60
- let errorCount = 0;
61
- try {
62
- result = await this.assistantSandboxService.runDueCleanup(referenceAt);
63
- }
64
- catch (error) {
65
- errorCount = 1;
66
- this.logger.error("[assistant-sandbox-cleanup-scheduler] tick failed", {
67
- error: error instanceof Error ? error.message : String(error),
68
- referenceAt
69
- });
70
- }
71
- finally {
72
- this.ticking = false;
73
- const idle = result?.idle ?? true;
74
- const taskCount = result?.dueSandboxCount ?? 0;
75
- this.idleStreak = idle ? this.idleStreak + 1 : 0;
76
- const nextDelayMs = resolveAdaptiveSchedulerDelayMs(this.intervalMs, this.maxIntervalMs, this.idleStreak);
77
- this.schedulerMetrics?.recordTick({
78
- schedulerName: "assistant_sandbox_cleanup",
79
- referenceAt,
80
- durationMs: Date.now() - tickStartedAt,
81
- taskCount,
82
- idle,
83
- errorCount,
84
- nextDelayMs,
85
- idleStreak: this.idleStreak
86
- });
87
- if (shouldScheduleNext && this.started && !this.disposed && this.timer === null) {
88
- this.scheduleNext(nextDelayMs);
89
- }
90
- }
91
- }
92
- }
93
- //# sourceMappingURL=assistant-sandbox-cleanup-scheduler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"assistant-sandbox-cleanup-scheduler.js","sourceRoot":"","sources":["../../../../src/modules/butler/assistant-sandbox-cleanup-scheduler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACpD,OAAO,EACL,+BAA+B,EAEhC,MAAM,+BAA+B,CAAC;AAMvC,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAcnC,MAAM,OAAO,gCAAgC;IAaxB;IAZF,UAAU,CAAS;IACnB,aAAa,CAAS;IACtB,GAAG,CAAe;IAClB,MAAM,CAAyC;IAC/C,gBAAgB,CAA0B;IACnD,KAAK,GAAyC,IAAI,CAAC;IACnD,OAAO,GAAG,KAAK,CAAC;IAChB,OAAO,GAAG,KAAK,CAAC;IAChB,QAAQ,GAAG,KAAK,CAAC;IACjB,UAAU,GAAG,CAAC,CAAC;IAEvB,YACmB,uBAAuE,EACxF,UAAmD,EAAE;QADpC,4BAAuB,GAAvB,uBAAuB,CAAgD;QAGxF,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,IAAI,mBAAmB,CAAC,CAAC;QAC9E,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,aAAa,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;QAC7F,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,MAAM,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC;QACxC,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,IAAI,IAAI,CAAC;IAC3D,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChC,OAAO;QACT,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QAErB,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IAEO,YAAY,CAAC,OAAe;QAClC,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC3B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;QACnB,CAAC,EAAE,OAAO,CAAC,CAAC;QACZ,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;IACvB,CAAC;IAEO,KAAK,CAAC,IAAI,CAAC,kBAAkB,GAAG,IAAI;QAC1C,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACjC,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC/B,IAAI,MAAM,GAAyC,IAAI,CAAC;QACxD,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;QACzE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,UAAU,GAAG,CAAC,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,mDAAmD,EAAE;gBACrE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC7D,WAAW;aACZ,CAAC,CAAC;QACL,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;YAErB,MAAM,IAAI,GAAG,MAAM,EAAE,IAAI,IAAI,IAAI,CAAC;YAClC,MAAM,SAAS,GAAG,MAAM,EAAE,eAAe,IAAI,CAAC,CAAC;YAC/C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACjD,MAAM,WAAW,GAAG,+BAA+B,CACjD,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,UAAU,CAChB,CAAC;YACF,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC;gBAChC,aAAa,EAAE,2BAA2B;gBAC1C,WAAW;gBACX,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,aAAa;gBACtC,SAAS;gBACT,IAAI;gBACJ,UAAU;gBACV,WAAW;gBACX,UAAU,EAAE,IAAI,CAAC,UAAU;aAC5B,CAAC,CAAC;YAEH,IAAI,kBAAkB,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;gBAChF,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
@@ -1,69 +0,0 @@
1
- import type { AssistantSandboxWorkspace, Workspace } from "../../types/domain.js";
2
- import type { AssistantSandboxWorkspaceRepository } from "../../storage/repositories/assistant-sandbox-workspace-repository.js";
3
- import type { ButlerProfileService } from "./butler-profile-service.js";
4
- import type { ButlerProjectService } from "./butler-project-service.js";
5
- import { type TaskManager } from "../tasks/task-manager.js";
6
- import type { CloneWorkspaceInput, WorkspaceService } from "../workspace/workspace-service.js";
7
- export interface AssistantSandboxWorkspaceView extends AssistantSandboxWorkspace {
8
- workspace: Workspace | null;
9
- }
10
- export interface CreateAssistantSandboxInput {
11
- userId: string;
12
- controlSessionId?: string | null;
13
- title?: string | null;
14
- description?: string | null;
15
- purpose?: string | null;
16
- expiresAt?: string | null;
17
- source: {
18
- kind: "blank";
19
- directoryName?: string | null;
20
- } | {
21
- kind: "clone";
22
- repositoryUrl: string;
23
- directoryName?: string | null;
24
- auth?: CloneWorkspaceInput["auth"];
25
- };
26
- }
27
- export interface PromoteAssistantSandboxInput {
28
- mode?: "pin" | "project";
29
- projectName?: string | null;
30
- defaultProvider?: "codex" | "claude-code" | null;
31
- }
32
- export interface AssistantSandboxCleanupResult {
33
- dueSandboxCount: number;
34
- cleanedSandboxCount: number;
35
- idle: boolean;
36
- }
37
- export declare class AssistantSandboxService {
38
- private readonly repository;
39
- private readonly butlerProfileService;
40
- private readonly workspaceService;
41
- private readonly butlerProjectService?;
42
- private readonly taskManager;
43
- constructor(repository: AssistantSandboxWorkspaceRepository, butlerProfileService: Pick<ButlerProfileService, "getProfile">, workspaceService: Pick<WorkspaceService, "importWorkspace" | "cloneWorkspace" | "removeWorkspace" | "getWorkspaceOrThrow">, butlerProjectService?: Pick<ButlerProjectService, "create"> | undefined, taskManager?: TaskManager);
44
- listSandboxes(filters: {
45
- userId: string;
46
- controlSessionId?: string | null;
47
- statuses?: Array<"active" | "archived" | "expired" | "orphaned" | "deleted">;
48
- limit?: number;
49
- }): AssistantSandboxWorkspaceView[];
50
- getSandbox(sandboxId: string, userId: string): AssistantSandboxWorkspaceView;
51
- createSandbox(input: CreateAssistantSandboxInput): Promise<AssistantSandboxWorkspaceView>;
52
- promoteSandbox(sandboxId: string, userId: string, input?: PromoteAssistantSandboxInput): AssistantSandboxWorkspaceView;
53
- markSandboxUsedByControlSession(sandboxId: string, userId: string, controlSessionId: string | null): AssistantSandboxWorkspaceView;
54
- markSandboxOrphanedByWorkspaceId(workspaceId: string, userId: string): AssistantSandboxWorkspaceView | null;
55
- expireSandbox(sandboxId: string, userId: string): AssistantSandboxWorkspaceView;
56
- removeSandbox(sandboxId: string, userId: string): AssistantSandboxWorkspaceView;
57
- runDueCleanup(referenceAt: string): Promise<AssistantSandboxCleanupResult>;
58
- resolveWorkspaceId(sandboxId: string, userId: string): string;
59
- private registerBackgroundTasks;
60
- private runDueCleanupDirect;
61
- private cleanupSandboxDirect;
62
- private createBlankWorkspace;
63
- private createCloneWorkspace;
64
- private ensureSandboxRootPath;
65
- private resolveSandboxRootPath;
66
- private removeSandboxDirectoryIfSafe;
67
- private requireSandbox;
68
- private toView;
69
- }