circuschief 0.7.0 → 1.0.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 (185) hide show
  1. package/package.json +1 -1
  2. package/packages/server/src/agents/adapters/CodexAdapter.js +5 -4
  3. package/packages/server/src/api/canvas.js +22 -57
  4. package/packages/server/src/api/commandButtons.js +16 -15
  5. package/packages/server/src/api/index.js +2 -0
  6. package/packages/server/src/api/kanban.js +4 -2
  7. package/packages/server/src/api/projects-commandButtons.js +6 -6
  8. package/packages/server/src/api/projects-helpers.js +20 -3
  9. package/packages/server/src/api/projects-session-create.js +109 -0
  10. package/packages/server/src/api/projects-session-defaults.js +51 -0
  11. package/packages/server/src/api/projects-session-helpers.js +57 -5
  12. package/packages/server/src/api/projects-templates.js +38 -0
  13. package/packages/server/src/api/projects.js +28 -170
  14. package/packages/server/src/api/providers.js +11 -1
  15. package/packages/server/src/api/sessions-commands.js +46 -25
  16. package/packages/server/src/api/sessions-lifecycle.js +10 -10
  17. package/packages/server/src/api/sessions-patch.js +45 -1
  18. package/packages/server/src/api/sessions.js +6 -5
  19. package/packages/server/src/database.js +0 -2
  20. package/packages/server/src/db/DatabaseManager.js +5 -1
  21. package/packages/server/src/db/ProjectDefaultsRepository.js +3 -3
  22. package/packages/server/src/db/ProviderRepository.js +87 -32
  23. package/packages/server/src/db/SessionRepository.js +2 -1
  24. package/packages/server/src/db/SessionTemplateRepository.js +23 -2
  25. package/packages/server/src/db/index.js +0 -3
  26. package/packages/server/src/db/migrations/index.js +60 -7
  27. package/packages/server/src/db/migrations/kanbanMigrations.js +1 -1
  28. package/packages/server/src/db/migrations/miscMigrations.js +59 -184
  29. package/packages/server/src/db/migrations/projectsMigrations.js +31 -0
  30. package/packages/server/src/db/migrations/providerCommitAttributionMigrations.js +30 -0
  31. package/packages/server/src/db/migrations/providerMigrations.js +165 -0
  32. package/packages/server/src/db/migrations/sessionTableRecreate.js +136 -0
  33. package/packages/server/src/db/migrations/sessionsMigrations.js +18 -5
  34. package/packages/server/src/db/seedBaselineData.js +137 -0
  35. package/packages/server/src/db/session-helpers.js +32 -4
  36. package/packages/server/src/middleware/sessionLookup.js +81 -8
  37. package/packages/server/src/schema.sql +153 -132
  38. package/packages/server/src/scripts/backupDatabase.js +21 -0
  39. package/packages/server/src/scripts/dbUtils.js +81 -0
  40. package/packages/server/src/scripts/inspectDatabaseSchema.js +81 -0
  41. package/packages/server/src/scripts/validateDatabaseBaseline.js +212 -0
  42. package/packages/server/src/services/codexSpawnHelper.js +9 -0
  43. package/packages/server/src/services/commandButtonPrompts.js +14 -12
  44. package/packages/server/src/services/commandRunner.js +7 -1
  45. package/packages/server/src/services/e2eSpawnCapture.js +147 -0
  46. package/packages/server/src/services/gitCommitAttribution.js +150 -0
  47. package/packages/server/src/services/gitDiff.js +132 -0
  48. package/packages/server/src/services/gitRepoUrl.js +174 -0
  49. package/packages/server/src/services/gitService.js +48 -311
  50. package/packages/server/src/services/gitSessionSetup.js +11 -1
  51. package/packages/server/src/services/gitWorktree.js +127 -0
  52. package/packages/server/src/services/kanbanTriggers.js +6 -3
  53. package/packages/server/src/services/nodeSpawnHelper.js +9 -0
  54. package/packages/server/src/services/prUrlService.js +3 -3
  55. package/packages/server/src/services/queryParamBuilder.js +90 -0
  56. package/packages/server/src/services/sessionDuplicator.js +1 -5
  57. package/packages/server/src/services/sessionExecution.js +56 -108
  58. package/packages/server/src/services/sessionPrompts.js +12 -47
  59. package/packages/server/src/services/sessionProvider.js +10 -0
  60. package/packages/server/src/services/summaryService.js +5 -3
  61. package/packages/server/src/services/summaryStaleCheck.js +23 -4
  62. package/packages/server/src/services/templateTriggerService.js +3 -1
  63. package/packages/shared/src/constants.js +3 -0
  64. package/packages/shared/src/contracts/commandButtons.js +16 -2
  65. package/packages/shared/src/contracts/projects.js +2 -2
  66. package/packages/shared/src/contracts/providers.js +60 -0
  67. package/packages/shared/src/contracts/sessions.js +29 -2
  68. package/packages/shared/src/contracts/templates.js +12 -2
  69. package/packages/shared/src/types.js +1 -9
  70. package/packages/shared/src/utils.js +2 -2
  71. package/packages/web/dist/assets/{ActiveSessionsView-UJsCILDL.js → ActiveSessionsView-Cxh8mHmB.js} +1 -1
  72. package/packages/web/dist/assets/{AgentLogsView-BGFPLjLa.js → AgentLogsView-xdfI2bR6.js} +2 -2
  73. package/packages/web/dist/assets/ApiClient-DfbJwzpz.js +1 -0
  74. package/packages/web/dist/assets/ArchiveConfirmModal-DXZYdzHR.js +1 -0
  75. package/packages/web/dist/assets/ArchiveConfirmModal-DeoCVGXt.css +1 -0
  76. package/packages/web/dist/assets/CommandButtonDetailView-D8xfqLAp.js +1 -0
  77. package/packages/web/dist/assets/CommandButtonDetailView-D9zjx9ME.css +1 -0
  78. package/packages/web/dist/assets/EffortLevelSelector-D2Hdzc_8.js +1 -0
  79. package/packages/web/dist/assets/{GeneralSettingsView-DsHChEhv.js → GeneralSettingsView-sPXkLlLy.js} +1 -1
  80. package/packages/web/dist/assets/InputWithButton-B-o0DgMH.js +1 -0
  81. package/packages/web/dist/assets/{InputWithButton-cYdrEmTs.css → InputWithButton-D9HMvfR5.css} +1 -1
  82. package/packages/web/dist/assets/{InterpolationHelp-CIkOSkWX.js → InterpolationHelp-Dxn1li4l.js} +1 -1
  83. package/packages/web/dist/assets/MarkdownEditor-D4Kbb-9l.js +2 -0
  84. package/packages/web/dist/assets/ModelSelector-72C7MUH4.js +1 -0
  85. package/packages/web/dist/assets/{ModelSelector-D8hbTRIt.css → ModelSelector-BNYKujL-.css} +1 -1
  86. package/packages/web/dist/assets/NewSessionView-BR_COfgW.js +3 -0
  87. package/packages/web/dist/assets/NewSessionView-DBl7T2Xp.css +1 -0
  88. package/packages/web/dist/assets/ProjectEditView-DbqTbA0q.css +1 -0
  89. package/packages/web/dist/assets/ProjectEditView-WImU7sNd.js +1 -0
  90. package/packages/web/dist/assets/{ProjectListView-B9FuWESY.js → ProjectListView-CYmmAcBD.js} +1 -1
  91. package/packages/web/dist/assets/{ProjectNewView-D62jYlBL.js → ProjectNewView-DEhqw3Jv.js} +1 -1
  92. package/packages/web/dist/assets/ProvidersView-XZh3jkmH.js +1 -0
  93. package/packages/web/dist/assets/ProvidersView-bZemq_Rv.css +1 -0
  94. package/packages/web/dist/assets/QuickResponsesPanel-BqmnTd-D.js +1 -0
  95. package/packages/web/dist/assets/QuickResponsesPanel-dk-Rj8xx.css +1 -0
  96. package/packages/web/dist/assets/ResizableTextarea-BQNw5e0C.css +1 -0
  97. package/packages/web/dist/assets/ResizableTextarea-DpWdIAP6.js +1 -0
  98. package/packages/web/dist/assets/SessionCard-Bw77-KwD.js +1 -0
  99. package/packages/web/dist/assets/SessionDetailView-B59TEkr-.js +36 -0
  100. package/packages/web/dist/assets/SessionDetailView-CKVBnR4T.css +1 -0
  101. package/packages/web/dist/assets/{SessionFormOptions-DYUISplS.js → SessionFormOptions-hqijxc0S.js} +1 -1
  102. package/packages/web/dist/assets/SessionListView-3-xx6EVs.css +1 -0
  103. package/packages/web/dist/assets/SessionListView-DYXHM9I-.js +1 -0
  104. package/packages/web/dist/assets/{SessionLogStream-DpUE6Xsh.js → SessionLogStream-5NfVr9pF.js} +6 -6
  105. package/packages/web/dist/assets/{SettingsView-BC055tIA.js → SettingsView-DI8ncOAV.js} +1 -1
  106. package/packages/web/dist/assets/{SlashCommandWizard-DmTyNG9O.js → SlashCommandWizard-BQ_rMzn-.js} +1 -1
  107. package/packages/web/dist/assets/{SlashCommandWizard-Dn7sNaBd.css → SlashCommandWizard-DJzw3LP5.css} +1 -1
  108. package/packages/web/dist/assets/{SummarySettingsView-BgnRCwlq.js → SummarySettingsView-C2Qs35mm.js} +1 -1
  109. package/packages/web/dist/assets/TemplateDetailView-B5NI2oTR.css +1 -0
  110. package/packages/web/dist/assets/TemplateDetailView-zVkIvgtu.js +1 -0
  111. package/packages/web/dist/assets/{commandButtons-D4RPpLiu.js → commandButtons-CoU3G4zK.js} +1 -1
  112. package/packages/web/dist/assets/index-9yF1uCCA.js +1 -0
  113. package/packages/web/dist/assets/index-BKstCaYU.js +1 -0
  114. package/packages/web/dist/assets/index-BhbH7eOk.js +1 -0
  115. package/packages/web/dist/assets/{index-BGwH4Cfn.js → index-BjuRttEY.js} +3 -3
  116. package/packages/web/dist/assets/index-Bo7PdwM5.js +1 -0
  117. package/packages/web/dist/assets/index-C2QFVD7d.js +83 -0
  118. package/packages/web/dist/assets/index-C7Ww2auW.js +1 -0
  119. package/packages/web/dist/assets/index-CAGdsDh7.js +1 -0
  120. package/packages/web/dist/assets/index-CLRsVASf.js +3 -0
  121. package/packages/web/dist/assets/{index-Bn5xdGFM.js → index-CP-SxOlV.js} +1 -1
  122. package/packages/web/dist/assets/index-CslU0psO.js +1 -0
  123. package/packages/web/dist/assets/index-DI4NxaWD.js +1 -0
  124. package/packages/web/dist/assets/index-DOzONENy.js +1 -0
  125. package/packages/web/dist/assets/index-DUa7adFh.js +1 -0
  126. package/packages/web/dist/assets/index-DZBpETI5.js +1 -0
  127. package/packages/web/dist/assets/index-DsjWqc6R.js +7 -0
  128. package/packages/web/dist/assets/index-c99Bo3JV.js +1 -0
  129. package/packages/web/dist/assets/index-mT1JpxDc.js +1 -0
  130. package/packages/web/dist/assets/index-rkQx2tso.js +1 -0
  131. package/packages/web/dist/assets/{index-Cs2nxhrT.css → index-uySCcnA_.css} +1 -1
  132. package/packages/web/dist/assets/projectDefaults-B8esIcYq.js +1 -0
  133. package/packages/web/dist/assets/{projects-BUiOGmmb.js → projects-C-8PSxKi.js} +1 -1
  134. package/packages/web/dist/assets/{providers-Bh1ZiiJi.js → providers-oXifvvqN.js} +1 -1
  135. package/packages/web/dist/assets/sessions-Nq5VafSf.js +1 -0
  136. package/packages/web/dist/assets/{settings-Z4AVVmkJ.js → settings-DtpuiyT6.js} +1 -1
  137. package/packages/web/dist/index.html +2 -2
  138. package/packages/server/src/api/sessions-notes.js +0 -51
  139. package/packages/server/src/db/SessionNoteRepository.js +0 -60
  140. package/packages/web/dist/assets/ApiClient-B4YTtyY4.js +0 -1
  141. package/packages/web/dist/assets/ArchiveConfirmModal-BQ-4gI0R.css +0 -1
  142. package/packages/web/dist/assets/ArchiveConfirmModal-OFaj_uX5.js +0 -1
  143. package/packages/web/dist/assets/CommandButtonDetailView-D8S258uP.js +0 -1
  144. package/packages/web/dist/assets/CommandButtonDetailView-DBm3rzhw.css +0 -1
  145. package/packages/web/dist/assets/EffortLevelSelector-C2378L8e.js +0 -1
  146. package/packages/web/dist/assets/InputWithButton-Ci15ox0a.js +0 -1
  147. package/packages/web/dist/assets/MarkdownEditor-5-bexzUT.js +0 -2
  148. package/packages/web/dist/assets/ModelSelector-BMpR0DPr.js +0 -1
  149. package/packages/web/dist/assets/NewSessionView-BCqtIgWH.js +0 -3
  150. package/packages/web/dist/assets/NewSessionView-CUUdHkfv.css +0 -1
  151. package/packages/web/dist/assets/ProjectEditView-D9sK0fdH.css +0 -1
  152. package/packages/web/dist/assets/ProjectEditView-RFaxHhAX.js +0 -1
  153. package/packages/web/dist/assets/ProvidersView-DDKMIQWZ.js +0 -1
  154. package/packages/web/dist/assets/ProvidersView-DE82G_5W.css +0 -1
  155. package/packages/web/dist/assets/QuickResponseSettings-B8188A1D.css +0 -1
  156. package/packages/web/dist/assets/QuickResponseSettings-CDm5vwP7.js +0 -1
  157. package/packages/web/dist/assets/QuickResponsesPanel-BlFDvnZ2.css +0 -1
  158. package/packages/web/dist/assets/QuickResponsesPanel-DZ_Lre_l.js +0 -1
  159. package/packages/web/dist/assets/ResizableTextarea-DiIOEGjN.js +0 -1
  160. package/packages/web/dist/assets/ResizableTextarea-DsU3TVwF.css +0 -1
  161. package/packages/web/dist/assets/SessionCard-DmjnVYWn.js +0 -1
  162. package/packages/web/dist/assets/SessionDetailView-CL7nmfiB.js +0 -36
  163. package/packages/web/dist/assets/SessionDetailView-CupIkI7u.css +0 -1
  164. package/packages/web/dist/assets/SessionListView-BcxGz4aC.js +0 -1
  165. package/packages/web/dist/assets/SessionListView-fHlQyecX.css +0 -1
  166. package/packages/web/dist/assets/TemplateDetailView-BlhOmLUX.js +0 -1
  167. package/packages/web/dist/assets/TemplateDetailView-DT2m06W7.css +0 -1
  168. package/packages/web/dist/assets/index-4rhEeO0B.js +0 -1
  169. package/packages/web/dist/assets/index-9vb2KaAd.js +0 -1
  170. package/packages/web/dist/assets/index-B0CvZXuN.js +0 -7
  171. package/packages/web/dist/assets/index-B6G18FqB.js +0 -82
  172. package/packages/web/dist/assets/index-BUhvkAdF.js +0 -1
  173. package/packages/web/dist/assets/index-BcnkUk2o.js +0 -1
  174. package/packages/web/dist/assets/index-CNwkdB0T.js +0 -1
  175. package/packages/web/dist/assets/index-CfL84oGW.js +0 -1
  176. package/packages/web/dist/assets/index-CkmxO8Mm.js +0 -1
  177. package/packages/web/dist/assets/index-Cpy4-yv3.js +0 -1
  178. package/packages/web/dist/assets/index-CrAQJmoZ.js +0 -1
  179. package/packages/web/dist/assets/index-D6Ky9vJe.js +0 -3
  180. package/packages/web/dist/assets/index-DfrE0gAC.js +0 -1
  181. package/packages/web/dist/assets/index-KwEyz0F3.js +0 -1
  182. package/packages/web/dist/assets/index-OfCywayk.js +0 -1
  183. package/packages/web/dist/assets/index-PDesaJc6.js +0 -1
  184. package/packages/web/dist/assets/index-uB6nhSvz.js +0 -1
  185. package/packages/web/dist/assets/sessions-DH1R-NhV.js +0 -1
@@ -1 +1 @@
1
- .toast-icon[data-v-33c0e27f]{font-size:1rem}.toast-message[data-v-33c0e27f]{flex:1}.toast-close[data-v-33c0e27f]{background:none;border:none;color:var(--color-text-soft);font-size:1.25rem;cursor:pointer;padding:0;line-height:1}.toast-close[data-v-33c0e27f]:hover{color:var(--color-text)}.toast-enter-active[data-v-33c0e27f],.toast-leave-active[data-v-33c0e27f]{transition:all .3s ease}.toast-enter-from[data-v-33c0e27f],.toast-leave-to[data-v-33c0e27f]{opacity:0;transform:translate(100%)}.modal-backdrop[data-v-4efd7d7f]{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000b3;display:flex;align-items:center;justify-content:center;z-index:1000}.modal-content[data-v-4efd7d7f]{display:flex;flex-direction:column;background:var(--color-background-secondary, #1f2937);border-radius:.5rem;width:100%;max-width:450px;max-height:90vh;overflow:hidden;border:1px solid var(--color-border)}.modal-header[data-v-4efd7d7f]{flex-shrink:0;display:flex;justify-content:space-between;align-items:center;padding:1rem 1.5rem;border-bottom:1px solid var(--color-border)}.modal-title[data-v-4efd7d7f]{margin:0;font-size:1.25rem;font-weight:600;color:var(--color-text)}.close-btn[data-v-4efd7d7f]{background:none;border:none;font-size:1.5rem;color:var(--color-text-soft);cursor:pointer;padding:0;line-height:1}.close-btn[data-v-4efd7d7f]:hover{color:var(--color-text)}.modal-body[data-v-4efd7d7f]{flex:1;overflow-y:auto;min-height:0;padding:1.5rem}.modal-footer[data-v-4efd7d7f]{flex-shrink:0;display:flex;justify-content:flex-end;gap:.75rem;padding:1rem 1.5rem;border-top:1px solid var(--color-border)}.stat-unavailable[data-v-4efd7d7f]{text-align:center;padding:2rem;color:var(--color-text-soft);font-size:1rem}.stat-details[data-v-4efd7d7f]{display:flex;flex-direction:column;align-items:center;gap:1.5rem}.stat-percentage[data-v-4efd7d7f]{font-size:4rem;font-weight:700;line-height:1}.stat-bar-track[data-v-4efd7d7f]{width:100%;height:12px;background-color:var(--color-background-mute);border-radius:6px;overflow:hidden}.stat-bar-fill[data-v-4efd7d7f]{height:100%;border-radius:6px;transition:width .5s ease,background-color .3s ease}.stat-status-row[data-v-4efd7d7f]{display:flex;justify-content:center}.stat-status[data-v-4efd7d7f]{font-size:1rem;font-weight:600;padding:.25rem .75rem;border-radius:.25rem;background:#ffffff0d}.stat-detail-rows[data-v-4efd7d7f]{width:100%;display:flex;flex-direction:column;gap:.75rem;padding-top:1rem;border-top:1px solid var(--color-border)}.stat-detail-row[data-v-4efd7d7f]{display:flex;justify-content:space-between;align-items:center}.detail-label[data-v-4efd7d7f]{color:var(--color-text-soft);font-size:.95rem}.detail-value[data-v-4efd7d7f]{color:var(--color-text);font-weight:500;font-size:.95rem}.btn[data-v-4efd7d7f]{padding:.5rem 1rem;border-radius:.25rem;font-weight:500;cursor:pointer;border:none;font-size:.9rem;transition:opacity .2s,background-color .2s}.btn-secondary[data-v-4efd7d7f]{background:var(--color-background);border:1px solid var(--color-border);color:var(--color-text)}.btn-secondary[data-v-4efd7d7f]:hover{background:var(--color-background-secondary)}.system-indicators[data-v-f8935b47]{display:flex;align-items:center;gap:.75rem;flex-shrink:1;min-width:0;overflow:hidden}.indicator[data-v-f8935b47]{display:flex;flex-direction:column;align-items:center;gap:3px;cursor:pointer;flex-shrink:0}.indicator-icon[data-v-f8935b47]{color:var(--color-text-soft);flex-shrink:0}.indicator-bar-track[data-v-f8935b47]{width:28px;height:3px;background-color:var(--color-background-mute);border-radius:2px;overflow:hidden}@media (max-width: 480px){.system-indicators[data-v-f8935b47]{gap:.4rem}.indicator-icon[data-v-f8935b47]{width:10px;height:10px}.indicator-bar-track[data-v-f8935b47]{width:18px;height:2px}.indicator[data-v-f8935b47]{gap:2px}}.indicator-bar-fill[data-v-f8935b47]{height:100%;border-radius:2px;transition:width .5s ease,background-color .3s ease;max-width:100%}.connection-status-dot[data-v-f8935b47]{width:8px;height:8px;border-radius:50%;flex-shrink:0;display:inline-block}.dot-amber[data-v-f8935b47]{background-color:var(--color-warning)}.dot-red[data-v-f8935b47]{background-color:var(--color-error)}.dot-pulse[data-v-f8935b47]{animation:status-dot-pulse-f8935b47 1.5s ease-in-out infinite}@keyframes status-dot-pulse-f8935b47{0%,to{opacity:1}50%{opacity:.3}}.connection-banner[data-v-2fc9161b]{position:sticky;top:var(--header-height-computed, 51px);z-index:99;display:flex;align-items:center;gap:.5rem;padding:.5rem 1rem;font-size:.8125rem;font-weight:500}.banner-warning[data-v-2fc9161b]{background-color:#d2992226;border-bottom:1px solid rgba(210,153,34,.3);color:var(--color-warning)}.banner-error[data-v-2fc9161b]{background-color:#f8514926;border-bottom:1px solid rgba(248,81,73,.3);color:var(--color-error)}.banner-dot[data-v-2fc9161b]{width:8px;height:8px;border-radius:50%;flex-shrink:0}.banner-warning .banner-dot[data-v-2fc9161b]{background-color:var(--color-warning)}.banner-error .banner-dot[data-v-2fc9161b]{background-color:var(--color-error)}.dot-pulse[data-v-2fc9161b]{animation:pulse-2fc9161b 1.5s ease-in-out infinite}@keyframes pulse-2fc9161b{0%,to{opacity:1}50%{opacity:.3}}.banner-slide-enter-active[data-v-2fc9161b]{transition:all .3s ease-out}.banner-slide-leave-active[data-v-2fc9161b]{transition:all .2s ease-in}.banner-slide-enter-from[data-v-2fc9161b],.banner-slide-leave-to[data-v-2fc9161b]{transform:translateY(-100%);opacity:0}.app[data-v-f51d3e8c]{min-height:100vh;min-height:100dvh;display:flex;flex-direction:column}.app-header[data-v-f51d3e8c]{background-color:var(--color-background-soft);border-bottom:1px solid var(--color-border);padding:5px 0!important;margin:0!important;display:flex;align-items:center;position:sticky;top:var(--viewport-offset-top, 0px);z-index:100;box-shadow:0 1px 3px #0000001a;padding-top:calc(5px + var(--safe-area-inset-top, 0px))!important}.app-header .container[data-v-f51d3e8c]{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:0 1rem!important;margin:0!important;max-width:100%;width:100%}.logo[data-v-f51d3e8c]{display:flex;align-items:center;gap:.5rem;padding:0!important;margin:0!important;line-height:0;text-decoration:none}.logo-image[data-v-f51d3e8c]{height:40px;width:auto;max-width:200px;display:block;margin:0!important;padding:0!important;transition:opacity .2s ease}.logo-text[data-v-f51d3e8c]{font-family:JetBrains Mono,Fira Code,Source Code Pro,Cascadia Code,Consolas,Courier New,monospace;font-size:1.1rem;font-weight:700;color:var(--color-text);letter-spacing:.02em;line-height:1;transition:opacity .2s ease}.logo:hover .logo-image[data-v-f51d3e8c],.logo:hover .logo-text[data-v-f51d3e8c]{opacity:.8}.nav[data-v-f51d3e8c]{display:flex;gap:1.5rem;align-items:center;flex-shrink:1;min-width:0}.nav-link[data-v-f51d3e8c]{color:var(--color-text-soft);font-size:.875rem;font-weight:500;text-decoration:none;transition:color .2s ease;padding:.5rem 0;border-bottom:2px solid transparent;display:flex;align-items:center;justify-content:center;flex-shrink:0}.nav-link[data-v-f51d3e8c]:hover{color:var(--color-text)}.nav-link.router-link-active[data-v-f51d3e8c]{color:var(--color-primary);border-bottom-color:var(--color-primary)}@media (max-width: 480px){.nav[data-v-f51d3e8c]{gap:.75rem}}.app-main[data-v-f51d3e8c]{flex:1 0 auto;padding:0}:root{--safe-area-inset-top: env(safe-area-inset-top, 0px);--safe-area-inset-bottom: env(safe-area-inset-bottom, 0px);--safe-area-inset-left: env(safe-area-inset-left, 0px);--safe-area-inset-right: env(safe-area-inset-right, 0px);--viewport-offset-top: 0px;--color-background: #0d1117;--color-background-soft: #161b22;--color-background-mute: #21262d;--color-border: #30363d;--color-text: #c9d1d9;--color-text-soft: #8b949e;--color-primary: #58a6ff;--color-primary-soft: #388bfd;--color-success: #3fb950;--color-warning: #d29922;--color-error: #f85149;--color-danger: #f85149;--color-info: #58a6ff;--border-radius: 6px;--font-mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;--header-height: 51px;--header-height-with-safe-area: calc(var(--header-height) + var(--safe-area-inset-top))}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{touch-action:manipulation;-webkit-text-size-adjust:100%;text-size-adjust:100%}button,a,input,select,textarea{touch-action:manipulation}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;background-color:var(--color-background);color:var(--color-text);line-height:1.6;min-height:100vh;min-height:100dvh}a{color:var(--color-primary);text-decoration:none}a:hover{text-decoration:underline}button{font-family:inherit;cursor:pointer}input,textarea,select{font-family:inherit;font-size:inherit}.container{max-width:1200px;margin:0 auto;padding:0 1rem}.btn{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;padding:.5rem 1rem;border:1px solid var(--color-border);border-radius:var(--border-radius);background-color:var(--color-background-soft);color:var(--color-text);font-size:.875rem;font-weight:500;transition:all .2s}.btn:hover{background-color:var(--color-background-mute)}.btn-primary{background-color:var(--color-primary);border-color:var(--color-primary);color:#fff}.btn-primary:hover{background-color:var(--color-primary-soft)}.btn-danger{background-color:var(--color-error);border-color:var(--color-error);color:#fff}.btn-danger:hover{opacity:.9}.btn-outline-danger{background-color:transparent;border-color:var(--color-error);color:var(--color-error)}.btn-outline-danger:hover{background-color:var(--color-error);color:#fff}.btn-secondary{background-color:var(--color-background-mute);border-color:var(--color-border);color:var(--color-text)}.btn-secondary:hover{background-color:var(--color-border)}.btn-sm{padding:.25rem .5rem;font-size:.75rem}.card{background-color:var(--color-background-soft);border:1px solid var(--color-border);border-radius:var(--border-radius);padding:1rem}.form-group{margin-bottom:.5rem}.form-label{display:block;margin-bottom:.5rem;font-weight:500;color:var(--color-text)}.form-input{width:100%;padding:.5rem .75rem;border:1px solid var(--color-border);border-radius:var(--border-radius);background-color:var(--color-background);color:var(--color-text)}.form-input:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 3px #58a6ff4d}.form-textarea{min-height:100px;resize:vertical}.status-badge{display:inline-flex;align-items:center;padding:.25rem .5rem;border-radius:var(--border-radius);font-size:.75rem;font-weight:500;text-transform:uppercase}.status-starting{background-color:#58a6ff33;color:var(--color-info)}.status-running{background-color:#3fb95033;color:var(--color-success)}.status-completed{background-color:#8b949e33;color:var(--color-text-soft)}.status-stopped{background-color:#f59e0b33;color:#f59e0b}.status-error{background-color:#f8514933;color:var(--color-error)}.status-scheduled{background-color:#22c5ff33;color:#22c5ff}.loading-spinner{display:inline-block;width:1rem;height:1rem;border:2px solid var(--color-border);border-top-color:var(--color-primary);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.skeleton{background:linear-gradient(90deg,var(--color-background-soft) 25%,var(--color-background-mute) 50%,var(--color-background-soft) 75%);background-size:200% 100%;animation:skeleton-loading 1.5s ease-in-out infinite;border-radius:var(--border-radius)}@keyframes skeleton-loading{0%{background-position:200% 0}to{background-position:-200% 0}}.tabs{display:flex;align-items:center;border-bottom:1px solid var(--color-border);margin-bottom:1rem;position:-webkit-sticky;position:sticky;top:calc(var(--header-height-computed, 51px) + var(--viewport-offset-top, 0px));background-color:var(--color-background);z-index:99;padding:.5rem .5rem 0}.tab{padding:.75rem 1rem;border:none;background:none;color:var(--color-text-soft);font-size:.875rem;cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px;transition:all .2s}.tab:hover{color:var(--color-text)}.tab.active{color:var(--color-primary);border-bottom-color:var(--color-primary)}.tab.tab-back{color:var(--color-text-soft)}.tab.tab-back:hover{color:var(--color-text);border-bottom-color:transparent}.tab-separator{width:1px;background-color:var(--color-border);margin:.5rem .75rem;align-self:stretch}.tabs-desktop{display:flex}.tabs-mobile{display:none;flex:1}.tab-select{flex:1;width:100%;padding:.5rem 2rem .5rem .75rem;border:1px solid var(--color-border);border-radius:var(--border-radius);background-color:var(--color-background-soft);color:var(--color-text);font-size:.875rem;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12' fill='%238b949e'%3E%3Cpath d='M2.5 4.5L6 8L9.5 4.5' stroke='%238b949e' stroke-width='1.5' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right .75rem center}.tab-select:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 3px #58a6ff4d}@media (max-width: 640px){.tabs-desktop{display:none}.tabs-mobile{display:flex}}pre,code{font-family:var(--font-mono);font-size:.875rem}pre{background-color:var(--color-background);border:1px solid var(--color-border);border-radius:var(--border-radius);padding:1rem;overflow-x:auto}.toast-container{position:fixed;top:1rem;right:1rem;z-index:1100;display:flex;flex-direction:column;gap:.5rem}.toast{padding:.75rem 1rem;border-radius:var(--border-radius);background-color:var(--color-background-soft);border:1px solid var(--color-border);box-shadow:0 4px 12px #0006;display:flex;align-items:center;gap:.5rem;min-width:250px;max-width:400px}.toast-success{border-color:var(--color-success)}.toast-error{border-color:var(--color-error)}.toast-warning{border-color:var(--color-warning)}.toast-info{border-color:var(--color-info)}.preview-toggle{padding:.25rem .5rem;font-size:.625rem;font-weight:500;background-color:var(--color-background);border:1px solid var(--color-border);border-radius:3px;color:var(--color-text-soft);cursor:pointer;transition:all .2s ease}.preview-toggle:hover,.preview-toggle.active{background-color:var(--color-primary);border-color:var(--color-primary);color:#fff}
1
+ .toast-icon[data-v-33c0e27f]{font-size:1rem}.toast-message[data-v-33c0e27f]{flex:1}.toast-close[data-v-33c0e27f]{background:none;border:none;color:var(--color-text-soft);font-size:1.25rem;cursor:pointer;padding:0;line-height:1}.toast-close[data-v-33c0e27f]:hover{color:var(--color-text)}.toast-enter-active[data-v-33c0e27f],.toast-leave-active[data-v-33c0e27f]{transition:all .3s ease}.toast-enter-from[data-v-33c0e27f],.toast-leave-to[data-v-33c0e27f]{opacity:0;transform:translate(100%)}.modal-backdrop[data-v-4efd7d7f]{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000b3;display:flex;align-items:center;justify-content:center;z-index:1000}.modal-content[data-v-4efd7d7f]{display:flex;flex-direction:column;background:var(--color-background-secondary, #1f2937);border-radius:.5rem;width:100%;max-width:450px;max-height:90vh;overflow:hidden;border:1px solid var(--color-border)}.modal-header[data-v-4efd7d7f]{flex-shrink:0;display:flex;justify-content:space-between;align-items:center;padding:1rem 1.5rem;border-bottom:1px solid var(--color-border)}.modal-title[data-v-4efd7d7f]{margin:0;font-size:1.25rem;font-weight:600;color:var(--color-text)}.close-btn[data-v-4efd7d7f]{background:none;border:none;font-size:1.5rem;color:var(--color-text-soft);cursor:pointer;padding:0;line-height:1}.close-btn[data-v-4efd7d7f]:hover{color:var(--color-text)}.modal-body[data-v-4efd7d7f]{flex:1;overflow-y:auto;min-height:0;padding:1.5rem}.modal-footer[data-v-4efd7d7f]{flex-shrink:0;display:flex;justify-content:flex-end;gap:.75rem;padding:1rem 1.5rem;border-top:1px solid var(--color-border)}.stat-unavailable[data-v-4efd7d7f]{text-align:center;padding:2rem;color:var(--color-text-soft);font-size:1rem}.stat-details[data-v-4efd7d7f]{display:flex;flex-direction:column;align-items:center;gap:1.5rem}.stat-percentage[data-v-4efd7d7f]{font-size:4rem;font-weight:700;line-height:1}.stat-bar-track[data-v-4efd7d7f]{width:100%;height:12px;background-color:var(--color-background-mute);border-radius:6px;overflow:hidden}.stat-bar-fill[data-v-4efd7d7f]{height:100%;border-radius:6px;transition:width .5s ease,background-color .3s ease}.stat-status-row[data-v-4efd7d7f]{display:flex;justify-content:center}.stat-status[data-v-4efd7d7f]{font-size:1rem;font-weight:600;padding:.25rem .75rem;border-radius:.25rem;background:#ffffff0d}.stat-detail-rows[data-v-4efd7d7f]{width:100%;display:flex;flex-direction:column;gap:.75rem;padding-top:1rem;border-top:1px solid var(--color-border)}.stat-detail-row[data-v-4efd7d7f]{display:flex;justify-content:space-between;align-items:center}.detail-label[data-v-4efd7d7f]{color:var(--color-text-soft);font-size:.95rem}.detail-value[data-v-4efd7d7f]{color:var(--color-text);font-weight:500;font-size:.95rem}.btn[data-v-4efd7d7f]{padding:.5rem 1rem;border-radius:.25rem;font-weight:500;cursor:pointer;border:none;font-size:.9rem;transition:opacity .2s,background-color .2s}.btn-secondary[data-v-4efd7d7f]{background:var(--color-background);border:1px solid var(--color-border);color:var(--color-text)}.btn-secondary[data-v-4efd7d7f]:hover{background:var(--color-background-secondary)}.system-indicators[data-v-f8935b47]{display:flex;align-items:center;gap:.75rem;flex-shrink:1;min-width:0;overflow:hidden}.indicator[data-v-f8935b47]{display:flex;flex-direction:column;align-items:center;gap:3px;cursor:pointer;flex-shrink:0}.indicator-icon[data-v-f8935b47]{color:var(--color-text-soft);flex-shrink:0}.indicator-bar-track[data-v-f8935b47]{width:28px;height:3px;background-color:var(--color-background-mute);border-radius:2px;overflow:hidden}@media (max-width: 480px){.system-indicators[data-v-f8935b47]{gap:.4rem}.indicator-icon[data-v-f8935b47]{width:10px;height:10px}.indicator-bar-track[data-v-f8935b47]{width:18px;height:2px}.indicator[data-v-f8935b47]{gap:2px}}.indicator-bar-fill[data-v-f8935b47]{height:100%;border-radius:2px;transition:width .5s ease,background-color .3s ease;max-width:100%}.connection-status-dot[data-v-f8935b47]{width:8px;height:8px;border-radius:50%;flex-shrink:0;display:inline-block}.dot-amber[data-v-f8935b47]{background-color:var(--color-warning)}.dot-red[data-v-f8935b47]{background-color:var(--color-error)}.dot-pulse[data-v-f8935b47]{animation:status-dot-pulse-f8935b47 1.5s ease-in-out infinite}@keyframes status-dot-pulse-f8935b47{0%,to{opacity:1}50%{opacity:.3}}.connection-banner[data-v-2fc9161b]{position:sticky;top:var(--header-height-computed, 51px);z-index:99;display:flex;align-items:center;gap:.5rem;padding:.5rem 1rem;font-size:.8125rem;font-weight:500}.banner-warning[data-v-2fc9161b]{background-color:#d2992226;border-bottom:1px solid rgba(210,153,34,.3);color:var(--color-warning)}.banner-error[data-v-2fc9161b]{background-color:#f8514926;border-bottom:1px solid rgba(248,81,73,.3);color:var(--color-error)}.banner-dot[data-v-2fc9161b]{width:8px;height:8px;border-radius:50%;flex-shrink:0}.banner-warning .banner-dot[data-v-2fc9161b]{background-color:var(--color-warning)}.banner-error .banner-dot[data-v-2fc9161b]{background-color:var(--color-error)}.dot-pulse[data-v-2fc9161b]{animation:pulse-2fc9161b 1.5s ease-in-out infinite}@keyframes pulse-2fc9161b{0%,to{opacity:1}50%{opacity:.3}}.banner-slide-enter-active[data-v-2fc9161b]{transition:all .3s ease-out}.banner-slide-leave-active[data-v-2fc9161b]{transition:all .2s ease-in}.banner-slide-enter-from[data-v-2fc9161b],.banner-slide-leave-to[data-v-2fc9161b]{transform:translateY(-100%);opacity:0}.app[data-v-f51d3e8c]{min-height:100vh;min-height:100dvh;display:flex;flex-direction:column}.app-header[data-v-f51d3e8c]{background-color:var(--color-background-soft);border-bottom:1px solid var(--color-border);padding:5px 0!important;margin:0!important;display:flex;align-items:center;position:sticky;top:var(--viewport-offset-top, 0px);z-index:100;box-shadow:0 1px 3px #0000001a;padding-top:calc(5px + var(--safe-area-inset-top, 0px))!important}.app-header .container[data-v-f51d3e8c]{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:0 1rem!important;margin:0!important;max-width:100%;width:100%}.logo[data-v-f51d3e8c]{display:flex;align-items:center;gap:.5rem;padding:0!important;margin:0!important;line-height:0;text-decoration:none}.logo-image[data-v-f51d3e8c]{height:40px;width:auto;max-width:200px;display:block;margin:0!important;padding:0!important;transition:opacity .2s ease}.logo-text[data-v-f51d3e8c]{font-family:JetBrains Mono,Fira Code,Source Code Pro,Cascadia Code,Consolas,Courier New,monospace;font-size:1.1rem;font-weight:700;color:var(--color-text);letter-spacing:.02em;line-height:1;transition:opacity .2s ease}.logo:hover .logo-image[data-v-f51d3e8c],.logo:hover .logo-text[data-v-f51d3e8c]{opacity:.8}.nav[data-v-f51d3e8c]{display:flex;gap:1.5rem;align-items:center;flex-shrink:1;min-width:0}.nav-link[data-v-f51d3e8c]{color:var(--color-text-soft);font-size:.875rem;font-weight:500;text-decoration:none;transition:color .2s ease;padding:.5rem 0;border-bottom:2px solid transparent;display:flex;align-items:center;justify-content:center;flex-shrink:0}.nav-link[data-v-f51d3e8c]:hover{color:var(--color-text)}.nav-link.router-link-active[data-v-f51d3e8c]{color:var(--color-primary);border-bottom-color:var(--color-primary)}@media (max-width: 480px){.nav[data-v-f51d3e8c]{gap:.75rem}}.app-main[data-v-f51d3e8c]{flex:1 0 auto;padding:0}:root{--safe-area-inset-top: env(safe-area-inset-top, 0px);--safe-area-inset-bottom: env(safe-area-inset-bottom, 0px);--safe-area-inset-left: env(safe-area-inset-left, 0px);--safe-area-inset-right: env(safe-area-inset-right, 0px);--viewport-offset-top: 0px;--session-overlay-top-chrome-inset: 0px;--color-background: #0d1117;--color-background-soft: #161b22;--color-background-mute: #21262d;--color-border: #30363d;--color-text: #c9d1d9;--color-text-soft: #8b949e;--color-primary: #58a6ff;--color-primary-soft: #388bfd;--color-success: #3fb950;--color-warning: #d29922;--color-error: #f85149;--color-danger: #f85149;--color-info: #58a6ff;--border-radius: 6px;--font-mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;--header-height: 51px;--header-height-with-safe-area: calc(var(--header-height) + var(--safe-area-inset-top))}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{touch-action:manipulation;-webkit-text-size-adjust:100%;text-size-adjust:100%}button,a,input,select,textarea{touch-action:manipulation}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;background-color:var(--color-background);color:var(--color-text);line-height:1.6;min-height:100vh;min-height:100dvh}a{color:var(--color-primary);text-decoration:none}a:hover{text-decoration:underline}button{font-family:inherit;cursor:pointer}input,textarea,select{font-family:inherit;font-size:inherit}.container{max-width:1200px;margin:0 auto;padding:0 1rem}.btn{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;padding:.5rem 1rem;border:1px solid var(--color-border);border-radius:var(--border-radius);background-color:var(--color-background-soft);color:var(--color-text);font-size:.875rem;font-weight:500;transition:all .2s}.btn:hover{background-color:var(--color-background-mute)}.btn-primary{background-color:var(--color-primary);border-color:var(--color-primary);color:#fff}.btn.btn-primary:hover{background-color:var(--color-primary-soft)}.btn-danger{background-color:var(--color-error);border-color:var(--color-error);color:#fff}.btn.btn-danger:hover{background-color:var(--color-error);opacity:.9}.btn-outline-danger{background-color:transparent;border-color:var(--color-error);color:var(--color-error)}.btn.btn-outline-danger:hover{background-color:var(--color-error);color:#fff}.btn-secondary{background-color:var(--color-background-mute);border-color:var(--color-border);color:var(--color-text)}.btn.btn-secondary:hover{background-color:var(--color-border)}.btn-sm{padding:.25rem .5rem;font-size:.75rem}.card{background-color:var(--color-background-soft);border:1px solid var(--color-border);border-radius:var(--border-radius);padding:1rem}.form-group{margin-bottom:.5rem}.form-label{display:block;margin-bottom:.5rem;font-weight:500;color:var(--color-text)}.form-input{width:100%;padding:.5rem .75rem;border:1px solid var(--color-border);border-radius:var(--border-radius);background-color:var(--color-background);color:var(--color-text)}.form-input:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 3px #58a6ff4d}.form-textarea{min-height:100px;resize:vertical}.status-badge{display:inline-flex;align-items:center;padding:.25rem .5rem;border-radius:var(--border-radius);font-size:.75rem;font-weight:500;text-transform:uppercase}.status-starting{background-color:#58a6ff33;color:var(--color-info)}.status-running{background-color:#3fb95033;color:var(--color-success)}.status-completed{background-color:#8b949e33;color:var(--color-text-soft)}.status-stopped{background-color:#f59e0b33;color:#f59e0b}.status-error{background-color:#f8514933;color:var(--color-error)}.status-scheduled{background-color:#22c5ff33;color:#22c5ff}.loading-spinner{display:inline-block;width:1rem;height:1rem;border:2px solid var(--color-border);border-top-color:var(--color-primary);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.skeleton{background:linear-gradient(90deg,var(--color-background-soft) 25%,var(--color-background-mute) 50%,var(--color-background-soft) 75%);background-size:200% 100%;animation:skeleton-loading 1.5s ease-in-out infinite;border-radius:var(--border-radius)}@keyframes skeleton-loading{0%{background-position:200% 0}to{background-position:-200% 0}}.tabs{display:flex;align-items:center;border-bottom:1px solid var(--color-border);margin-bottom:1rem;position:-webkit-sticky;position:sticky;top:calc(var(--header-height-computed, 51px) + var(--viewport-offset-top, 0px));background-color:var(--color-background);z-index:99;padding:.5rem .5rem 0}.tab{padding:.75rem 1rem;border:none;background:none;color:var(--color-text-soft);font-size:.875rem;cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px;transition:all .2s}.tab:hover{color:var(--color-text)}.tab.active{color:var(--color-primary);border-bottom-color:var(--color-primary)}.tab.tab-back{color:var(--color-text-soft)}.tab.tab-back:hover{color:var(--color-text);border-bottom-color:transparent}.tab-separator{width:1px;background-color:var(--color-border);margin:.5rem .75rem;align-self:stretch}.tabs-desktop{display:flex}.tabs-mobile{display:none;flex:1}.tab-select{flex:1;width:100%;padding:.5rem 2rem .5rem .75rem;border:1px solid var(--color-border);border-radius:var(--border-radius);background-color:var(--color-background-soft);color:var(--color-text);font-size:.875rem;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12' fill='%238b949e'%3E%3Cpath d='M2.5 4.5L6 8L9.5 4.5' stroke='%238b949e' stroke-width='1.5' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right .75rem center}.tab-select:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 3px #58a6ff4d}@media (max-width: 640px){.tabs-desktop{display:none}.tabs-mobile{display:flex}}pre,code{font-family:var(--font-mono);font-size:.875rem}pre{background-color:var(--color-background);border:1px solid var(--color-border);border-radius:var(--border-radius);padding:1rem;overflow-x:auto}.toast-container{position:fixed;top:1rem;right:1rem;z-index:1300;display:flex;flex-direction:column;gap:.5rem}.toast{padding:.75rem 1rem;border-radius:var(--border-radius);background-color:var(--color-background-soft);border:1px solid var(--color-border);box-shadow:0 4px 12px #0006;display:flex;align-items:center;gap:.5rem;min-width:250px;max-width:400px}.toast-success{border-color:var(--color-success)}.toast-error{border-color:var(--color-error)}.toast-warning{border-color:var(--color-warning)}.toast-info{border-color:var(--color-info)}.btn-link{background:none;border:none;color:var(--color-primary);font-size:.75rem;cursor:pointer;padding:0;display:inline-flex;align-items:center;gap:.25rem}.btn-link:hover:not(:disabled){text-decoration:underline}.btn-link:disabled{opacity:.5;cursor:not-allowed}.preview-toggle{padding:.25rem .5rem;font-size:.625rem;font-weight:500;background-color:var(--color-background);border:1px solid var(--color-border);border-radius:3px;color:var(--color-text-soft);cursor:pointer;transition:all .2s ease}.preview-toggle:hover,.preview-toggle.active{background-color:var(--color-primary);border-color:var(--color-primary);color:#fff}
@@ -0,0 +1 @@
1
+ import{p as s}from"./index-C2QFVD7d.js";import{a as r}from"./ApiClient-DfbJwzpz.js";const i=s("projectDefaults",{state:()=>({defaultsByProjectId:{},loading:!1,error:null}),getters:{getDefaultsForProject:t=>e=>t.defaultsByProjectId[e]||null},actions:{async fetchDefaults(t){this.loading=!0,this.error=null;try{const e=await r.getProjectSessionDefaults(t);return this.defaultsByProjectId[t]=e,e}catch(e){throw this.error=e.message,e}finally{this.loading=!1}},async updateDefaults(t,e){this.loading=!0,this.error=null;try{const l=await r.updateProjectSessionDefaults(t,e);return this.defaultsByProjectId[t]=l,l}catch(l){throw this.error=l.message,l}finally{this.loading=!1}},async resetDefaults(t){this.loading=!0,this.error=null;try{return await r.resetProjectSessionDefaults(t),this.defaultsByProjectId[t]={mode:null,thinkingEnabled:null,effortLevel:null,startImmediately:null,gitMode:null,gitBranch:null,model:null,providerId:null},this.defaultsByProjectId[t]}catch(e){throw this.error=e.message,e}finally{this.loading=!1}},clearProjectDefaults(t){delete this.defaultsByProjectId[t]},clearAllDefaults(){this.defaultsByProjectId={}}}});export{i as u};
@@ -1 +1 @@
1
- import{L as a}from"./index-B6G18FqB.js";import{a as i}from"./ApiClient-B4YTtyY4.js";const h=a("projects",{state:()=>({projects:[],currentProject:null,loading:!1,error:null}),getters:{getProjectById:r=>t=>r.projects.find(e=>e.id===t)},actions:{async fetchProjects(){this.loading=!0,this.error=null;try{this.projects=await i.getProjects()}catch(r){this.error=r.message}finally{this.loading=!1}},async fetchProject(r){this.loading=!0,this.error=null;try{const t=await i.getProject(r);this.currentProject=t,this.projects.find(e=>e.id===r)||this.projects.push(t)}catch(t){this.error=t.message}finally{this.loading=!1}},async createProject(r){this.loading=!0,this.error=null;try{const t=await i.createProject(r);return this.projects.unshift(t),t}catch(t){throw this.error=t.message,t}finally{this.loading=!1}},async updateProject(r,t){var e;this.loading=!0,this.error=null;try{const s=await i.updateProject(r,t),o=this.projects.findIndex(c=>c.id===r);return o!==-1&&(this.projects[o]=s),((e=this.currentProject)==null?void 0:e.id)===r&&(this.currentProject=s),s}catch(s){throw this.error=s.message,s}finally{this.loading=!1}},async deleteProject(r){var t;this.loading=!0,this.error=null;try{await i.deleteProject(r),this.projects=this.projects.filter(e=>e.id!==r),((t=this.currentProject)==null?void 0:t.id)===r&&(this.currentProject=null)}catch(e){throw this.error=e.message,e}finally{this.loading=!1}}}});export{h as u};
1
+ import{p as a}from"./index-C2QFVD7d.js";import{a as i}from"./ApiClient-DfbJwzpz.js";const h=a("projects",{state:()=>({projects:[],currentProject:null,loading:!1,error:null}),getters:{getProjectById:r=>t=>r.projects.find(e=>e.id===t)},actions:{async fetchProjects(){this.loading=!0,this.error=null;try{this.projects=await i.getProjects()}catch(r){this.error=r.message}finally{this.loading=!1}},async fetchProject(r){this.loading=!0,this.error=null;try{const t=await i.getProject(r);this.currentProject=t,this.projects.find(e=>e.id===r)||this.projects.push(t)}catch(t){this.error=t.message}finally{this.loading=!1}},async createProject(r){this.loading=!0,this.error=null;try{const t=await i.createProject(r);return this.projects.unshift(t),t}catch(t){throw this.error=t.message,t}finally{this.loading=!1}},async updateProject(r,t){var e;this.loading=!0,this.error=null;try{const s=await i.updateProject(r,t),o=this.projects.findIndex(c=>c.id===r);return o!==-1&&(this.projects[o]=s),((e=this.currentProject)==null?void 0:e.id)===r&&(this.currentProject=s),s}catch(s){throw this.error=s.message,s}finally{this.loading=!1}},async deleteProject(r){var t;this.loading=!0,this.error=null;try{await i.deleteProject(r),this.projects=this.projects.filter(e=>e.id!==r),((t=this.currentProject)==null?void 0:t.id)===r&&(this.currentProject=null)}catch(e){throw this.error=e.message,e}finally{this.loading=!1}}}});export{h as u};
@@ -1 +1 @@
1
- import{L as l}from"./index-B6G18FqB.js";import{a as s}from"./ApiClient-B4YTtyY4.js";const c=l("providers",{state:()=>({providers:[],loading:!1,error:null,testingConnection:!1,testResult:null}),getters:{customProviders:e=>e.providers.filter(r=>!r.isBuiltIn),getById:e=>r=>e.providers.find(t=>t.id===r),allModels:e=>{const r=[];for(const t of e.providers)if(t.models)for(const i of t.models)r.push({...i,providerName:t.name,providerId:t.id});return r}},actions:{async fetchProviders(){this.loading=!0,this.error=null;try{this.providers=await s.getProviders()}catch(e){this.error=e.message}finally{this.loading=!1}},async fetchProvider(e){this.loading=!0,this.error=null;try{const r=await s.getProvider(e),t=this.providers.findIndex(i=>i.id===e);return t!==-1&&(this.providers[t]=r),r}catch(r){throw this.error=r.message,r}finally{this.loading=!1}},async createProvider(e){this.loading=!0,this.error=null;try{const r=await s.createProvider(e);return this.providers.push(r),r}catch(r){throw this.error=r.message,r}finally{this.loading=!1}},async updateProvider(e,r){this.loading=!0,this.error=null;try{const{kind:t,...i}=r||{},o=await s.updateProvider(e,i),a=this.providers.findIndex(n=>n.id===e);return a!==-1&&(this.providers[a]=o),o}catch(t){throw this.error=t.message,t}finally{this.loading=!1}},async deleteProvider(e){this.loading=!0,this.error=null;try{await s.deleteProvider(e),this.providers=this.providers.filter(r=>r.id!==e)}catch(r){throw this.error=r.message,r}finally{this.loading=!1}},async testConnection(e){this.testingConnection=!0,this.testResult=null,this.error=null;try{return this.testResult=await s.testProviderConnection(e),this.testResult}catch(r){throw this.error=r.message,r}finally{this.testingConnection=!1}},async testExistingProvider(e){this.testingConnection=!0,this.testResult=null,this.error=null;try{return this.testResult=await s.testExistingProvider(e),this.testResult}catch(r){throw this.error=r.message,r}finally{this.testingConnection=!1}},async fetchModels(e){this.loading=!0,this.error=null;try{return await s.getProviderModels(e)}catch(r){throw this.error=r.message,r}finally{this.loading=!1}},async addModel(e,r){this.loading=!0,this.error=null;try{return await s.addProviderModel(e,r)}catch(t){throw this.error=t.message,t}finally{this.loading=!1}},async updateModel(e,r,t){this.loading=!0,this.error=null;try{return await s.updateProviderModel(e,r,t)}catch(i){throw this.error=i.message,i}finally{this.loading=!1}},async removeModel(e,r){this.loading=!0,this.error=null;try{await s.removeProviderModel(e,r)}catch(t){throw this.error=t.message,t}finally{this.loading=!1}},clearTestResult(){this.testResult=null}}});export{c as u};
1
+ import{p as l}from"./index-C2QFVD7d.js";import{a as s}from"./ApiClient-DfbJwzpz.js";const c=l("providers",{state:()=>({providers:[],loading:!1,error:null,testingConnection:!1,testResult:null}),getters:{customProviders:e=>e.providers.filter(r=>!r.isBuiltIn),getById:e=>r=>e.providers.find(t=>t.id===r),allModels:e=>{const r=[];for(const t of e.providers)if(t.models)for(const i of t.models)r.push({...i,providerName:t.name,providerId:t.id});return r}},actions:{async fetchProviders(){this.loading=!0,this.error=null;try{this.providers=await s.getProviders()}catch(e){this.error=e.message}finally{this.loading=!1}},async fetchProvider(e){this.loading=!0,this.error=null;try{const r=await s.getProvider(e),t=this.providers.findIndex(i=>i.id===e);return t!==-1&&(this.providers[t]=r),r}catch(r){throw this.error=r.message,r}finally{this.loading=!1}},async createProvider(e){this.loading=!0,this.error=null;try{const r=await s.createProvider(e);return this.providers.push(r),r}catch(r){throw this.error=r.message,r}finally{this.loading=!1}},async updateProvider(e,r){this.loading=!0,this.error=null;try{const{kind:t,...i}=r||{},o=await s.updateProvider(e,i),a=this.providers.findIndex(n=>n.id===e);return a!==-1&&(this.providers[a]=o),o}catch(t){throw this.error=t.message,t}finally{this.loading=!1}},async deleteProvider(e){this.loading=!0,this.error=null;try{await s.deleteProvider(e),this.providers=this.providers.filter(r=>r.id!==e)}catch(r){throw this.error=r.message,r}finally{this.loading=!1}},async testConnection(e){this.testingConnection=!0,this.testResult=null,this.error=null;try{return this.testResult=await s.testProviderConnection(e),this.testResult}catch(r){throw this.error=r.message,r}finally{this.testingConnection=!1}},async testExistingProvider(e){this.testingConnection=!0,this.testResult=null,this.error=null;try{return this.testResult=await s.testExistingProvider(e),this.testResult}catch(r){throw this.error=r.message,r}finally{this.testingConnection=!1}},async fetchModels(e){this.loading=!0,this.error=null;try{return await s.getProviderModels(e)}catch(r){throw this.error=r.message,r}finally{this.loading=!1}},async addModel(e,r){this.loading=!0,this.error=null;try{return await s.addProviderModel(e,r)}catch(t){throw this.error=t.message,t}finally{this.loading=!1}},async updateModel(e,r,t){this.loading=!0,this.error=null;try{return await s.updateProviderModel(e,r,t)}catch(i){throw this.error=i.message,i}finally{this.loading=!1}},async removeModel(e,r){this.loading=!0,this.error=null;try{await s.removeProviderModel(e,r)}catch(t){throw this.error=t.message,t}finally{this.loading=!1}},clearTestResult(){this.testResult=null}}});export{c as u};
@@ -0,0 +1 @@
1
+ import{p as I}from"./index-C2QFVD7d.js";import{a as c}from"./ApiClient-DfbJwzpz.js";function R(){return Math.random().toString(16).substring(2,6)}function l(e){return e?(e.inputTokens||0)+(e.outputTokens||0)+(e.thinkingTokens||0)+(e.cacheReadInputTokens||0)+(e.cacheCreationInputTokens||0):0}function v(e){return!e||e===0?"0":e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}K`:String(e)}function A(e,t=30){return e.toLowerCase().replace(/[^a-z0-9\s-]/g,"").replace(/\s+/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,"").substring(0,t)}function x(e){const t=["a","an","the","to","and","or","for","in","on","at","of","with","is","it","this","that","i","me","my","we","our","you","your","can","please","help"];return e.toLowerCase().replace(/[^a-z0-9\s]/g,"").split(/\s+/).filter(i=>i.length>1&&!t.includes(i)).slice(0,4).join("-")||"session"}function q(e,t){const s=R();let i;return t&&t.trim()?i=A(x(t.trim())):i="session",i||(i="session"),`circus-chief/${s}-${i}`}const L=I("sessionFilters",{state:()=>({statusFilter:null,starredFilter:null,scheduledFilter:null}),actions:{setStatusFilter(e){this.statusFilter=e,this.saveStatusFilter()},saveStatusFilter(){try{this.statusFilter?localStorage.setItem("sessionStatusFilter",this.statusFilter):localStorage.removeItem("sessionStatusFilter")}catch(e){console.warn("Failed to save status filter:",e)}},restoreStatusFilter(){try{const e=localStorage.getItem("sessionStatusFilter");(e==="running"||e==="idle")&&(this.statusFilter=e)}catch(e){console.warn("Failed to restore status filter:",e)}},setStarredFilter(e){this.starredFilter=e,this.saveStarredFilter()},saveStarredFilter(){try{this.starredFilter?sessionStorage.setItem("sessionStarredFilter",this.starredFilter):sessionStorage.removeItem("sessionStarredFilter")}catch(e){console.warn("Failed to save starred filter:",e)}},restoreStarredFilter(){try{const e=sessionStorage.getItem("sessionStarredFilter");e==="starred"||e==="unstarred"?this.starredFilter=e:this.starredFilter=null}catch(e){console.warn("Failed to restore starred filter:",e)}},setScheduledFilter(e){this.scheduledFilter=e,this.saveScheduledFilter()},saveScheduledFilter(){try{this.scheduledFilter?sessionStorage.setItem("sessionScheduledFilter",this.scheduledFilter):sessionStorage.removeItem("sessionScheduledFilter")}catch(e){console.warn("Failed to save scheduled filter:",e)}},restoreScheduledFilter(){try{const e=sessionStorage.getItem("sessionScheduledFilter");e==="scheduled"||e==="not-scheduled"?this.scheduledFilter=e:this.scheduledFilter=null}catch(e){console.warn("Failed to restore scheduled filter:",e)}}}});function g(e){return e==null?"-":e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}K`:String(e)}function C(e){return{input:g(e.inputTokens),output:g(e.outputTokens),thinking:g(e.thinkingTokens),total:g(l(e)),cacheRead:g(e.cacheReadInputTokens),cacheCreation:g(e.cacheCreationInputTokens)}}function T(e){return e.runningUsage?!e.activeConversationId||e.runningUsage.conversationId===e.activeConversationId:!1}function u(e){return e.conversations.find(t=>t.id===e.activeConversationId)}function f(e,t){return{inputTokens:((e==null?void 0:e.inputTokens)||0)+(t.inputTokens||0),outputTokens:((e==null?void 0:e.outputTokens)||0)+(t.outputTokens||0),thinkingTokens:((e==null?void 0:e.thinkingTokens)||0)+(t.thinkingTokens||0),cacheReadInputTokens:((e==null?void 0:e.cacheReadInputTokens)||0)+(t.cacheReadInputTokens||0),cacheCreationInputTokens:((e==null?void 0:e.cacheCreationInputTokens)||0)+(t.cacheCreationInputTokens||0)}}function p(e){return{inputTokens:e.inputTokens,outputTokens:e.outputTokens,thinkingTokens:e.thinkingTokens,cacheReadInputTokens:e.cacheReadInputTokens,cacheCreationInputTokens:e.cacheCreationInputTokens}}const _={conversationTokens:e=>{const t=e.conversations.find(s=>s.id===e.activeConversationId);return t?{inputTokens:t.inputTokens||0,outputTokens:t.outputTokens||0,thinkingTokens:t.thinkingTokens||0,cacheReadInputTokens:t.cacheReadInputTokens||0,cacheCreationInputTokens:t.cacheCreationInputTokens||0,webSearchRequests:t.webSearchRequests||0,contextWindow:t.contextWindow||2e5}:null},totalTokens:e=>{const t=e.conversations.find(s=>s.id===e.activeConversationId);return t?l(t):e.currentSession?l(e.currentSession):0},formattedTokens:e=>{if(T(e)){const t=f(u(e),e.runningUsage);return C(t)}if(e.activeConversationId&&e.conversations.length>0){const t=u(e);if(t)return C(p(t))}return{input:"-",output:"-",thinking:"-",total:"-",cacheRead:"-",cacheCreation:"-"}},contextPercentage:e=>{if(T(e)){const n=u(e),o=f(n,e.runningUsage),r=l(o),a=e.runningUsage.contextWindow||(n==null?void 0:n.contextWindow)||2e5;return Math.min(100,Math.round(r/a*100))}const s=u(e)||e.currentSession;if(!s)return 0;const i=l(s);return Math.min(100,Math.round(i/(s.contextWindow||2e5)*100))},isUsageUpdating:e=>!(!e.runningUsage||e.activeConversationId&&e.runningUsage.conversationId!==e.activeConversationId),getConversationDisplayTokens:e=>t=>{const s=e.conversations.find(i=>i.id===t);if(!s)return{inputTokens:0,outputTokens:0,thinkingTokens:0,total:0};if(e.runningUsage&&e.runningUsage.conversationId===t){const i=f(s,e.runningUsage);return{...i,total:l(i)}}return{inputTokens:s.inputTokens||0,outputTokens:s.outputTokens||0,thinkingTokens:s.thinkingTokens||0,total:l(s)}},tokenTotal:e=>{if(T(e))return l(f(u(e),e.runningUsage));if(e.activeConversationId&&e.conversations.length>0){const t=u(e);if(t)return l(p(t))}return 0},formattedTokenTotal:e=>{if(T(e))return v(l(f(u(e),e.runningUsage)));if(e.activeConversationId&&e.conversations.length>0){const t=u(e);if(t)return v(l(p(t)))}return"-"},getConversationTokenTotal:e=>t=>{const s=e.conversations.find(i=>i.id===t);return s?e.runningUsage&&e.runningUsage.conversationId===t?l(f(s,e.runningUsage)):l(p(s)):0},getFormattedConversationTokenTotal:e=>t=>{const s=e.conversations.find(n=>n.id===t);if(!s)return"-";const i=e.runningUsage&&e.runningUsage.conversationId===t?f(s,e.runningUsage):p(s);return v(l(i))},getSessionTokenTotal:e=>t=>{var a;const s=h=>h?l(h):0,i=e.sessions.find(h=>h.id===t)||(((a=e.currentSession)==null?void 0:a.id)===t?e.currentSession:null);if(!i)return 0;let n=s(i);const o=[t],r=new Set;for(;o.length>0;){const h=o.pop();if(r.has(h))continue;r.add(h);const S=e.sessions.filter(d=>d.parentSessionId===h);for(const d of S)n+=s(d),o.push(d.id)}return n},getFormattedSessionTokenTotal:e=>t=>v(_.getSessionTokenTotal(e)(t))};function k(e,t,s=!1){const i=e,n=i.findIndex(o=>o.id===t.id);n!==-1?i[n]={...i[n],...t}:s&&i.unshift(t)}async function P(e,t,s){try{const o=(await c.getProjectSessions(t)).filter(r=>r.parentSessionId===s).filter(r=>!e.find(a=>a.id===r.id));e.push(...o)}catch(i){console.error("Failed to fetch child sessions:",i)}}function F(e,t,s){const i=e.find(o=>o.id===s.id),n=i?{...i,...s}:s;return k(t,n,!0),e.filter(o=>o.id!==s.id)}async function U(e,t){let s=t;for(;s;){const i=e.find(n=>n.id===s);if(i){s=i.parentSessionId;continue}try{const n=await c.getSession(s);e.push(n),s=n.parentSessionId}catch(n){console.error("Failed to fetch parent session:",n);break}}}const b={async fetchActiveSessions(e=!0){e&&(this.loading=!0),this.error=null;try{this.activeSessions=await c.getActiveSessions()}catch(t){this.error=t.message}finally{e&&(this.loading=!1)}},async fetchSessions(e,{silent:t=!1}={}){t||(this.loading=!0),this.error=null;try{this.sessions=await c.getProjectSessions(e,!1,null)}catch(s){this.error=s.message}finally{t||(this.loading=!1)}},async fetchArchivedSessions(e,{reset:t=!0}={}){t&&(this.archivedSessions=[],this.archivedPagination.offset=0),this.archivedPagination.loading=!0,this.error=null;try{const i=await c.getProjectSessions(e,!0,this.starredFilter,{limit:25,offset:this.archivedPagination.offset});this.archivedSessions=t?i.sessions:[...this.archivedSessions,...i.sessions],this.archivedPagination={total:i.pagination.total,offset:this.archivedPagination.offset+i.sessions.length,hasMore:i.pagination.hasMore,loading:!1}}catch(i){this.error=i.message,this.archivedPagination.loading=!1}},async loadMoreArchivedSessions(e){this.archivedPagination.hasMore&&!this.archivedPagination.loading&&await this.fetchArchivedSessions(e,{reset:!1})},async fetchSession(e,t=!0){var s,i;t&&(this.loading=!0),this.error=null;try{const n=await c.getSession(e);if(this.viewedSessionId&&this.viewedSessionId!==e){const r=this.sessions.findIndex(a=>a.id===e);r!==-1&&(this.sessions[r]={...this.sessions[r],...n});return}this.currentSession=n;const o=this.sessions.findIndex(r=>r.id===e);o!==-1?this.sessions[o]=n:this.sessions.push(n),(s=this.currentSession)!=null&&s.parentSessionId&&await U(this.sessions,this.currentSession.parentSessionId),(i=this.currentSession)!=null&&i.projectId&&await P(this.sessions,this.currentSession.projectId,e)}catch(n){this.error=n.message}finally{t&&(this.loading=!1)}},async createSession(e,t){this.loading=!0,this.error=null;try{const s=await c.createSession(e,t);return this.sessions.unshift(s),s}catch(s){throw this.error=s.message,s}finally{this.loading=!1}},async sendMessage(e,t,s=[],i=null){this.error=null;try{await c.sendMessage(e,t,s,i),this._updateSessionInAllLists(e,{status:"running"})}catch(n){throw this.error=n.message,n}},async stopSession(e){this.error=null;try{await c.stopSession(e),this._updateSessionInAllLists(e,{status:"stopped"})}catch(t){throw this.error=t.message,t}},async restartSession(e){this.error=null;try{await c.restartSession(e),this._updateSessionInAllLists(e,{status:"stopped",error:null})}catch(t){throw this.error=t.message,t}},async startSession(e,t=void 0,s=void 0,i=void 0){this.error=null;try{const n=await c.startSession(e,t,s,i);return this._updateSessionInAllLists(e,{status:"starting"}),n}catch(n){throw this.error=n.message,n}},async deleteSession(e){var t;this.error=null;try{await c.deleteSession(e),this.sessions=this.sessions.filter(s=>s.id!==e),this.archivedSessions=this.archivedSessions.filter(s=>s.id!==e),((t=this.currentSession)==null?void 0:t.id)===e&&(this.currentSession=null)}catch(s){throw this.error=s.message,s}},async archiveSession(e,{cleanup:t=!1}={}){var s;this.error=null;try{const i=await c.archiveSession(e,{cleanup:t});return this.sessions=this.sessions.filter(n=>n.id!==e),this.archivedSessions.unshift(i),this.activeSessions=this.activeSessions.filter(n=>n.id!==e),((s=this.currentSession)==null?void 0:s.id)===e&&(this.currentSession={...this.currentSession,archived:!0}),i}catch(i){throw this.error=i.message,i}},async unarchiveSession(e){var t;this.error=null;try{const s=await c.unarchiveSession(e);return this.archivedSessions=this.archivedSessions.filter(i=>i.id!==e),this.sessions.unshift(s),((t=this.currentSession)==null?void 0:t.id)===e&&(this.currentSession={...this.currentSession,archived:!1}),s}catch(s){throw this.error=s.message,s}},async duplicateSession(e,t={}){this.error=null;try{return await c.duplicateSession(e,t)}catch(s){throw this.error=s.message,s}},async toggleSessionStar(e){this.error=null;try{const t=await c.toggleSessionStar(e);return this._updateSessionInAllLists(e,{starred:t.starred}),t}catch(t){throw this.error=t.message,t}},updateSessionStatus(e,t){const s=this.sessions.find(o=>o.id===e)||this.currentSession,i=(s==null?void 0:s.status)==="running",n={status:t};i&&(t==="waiting"||t==="completed")&&(n.hasResponses=!0),this._updateSessionInAllLists(e,n)},async updateSessionThinking(e,t){return this.updateSessionFields(e,{thinkingEnabled:t})},async updateSessionMode(e,t){return this.updateSessionFields(e,{mode:t})},async updateSessionModel(e,t,s=void 0){var i;this.error=null;try{const n={model:t};s!==void 0&&(n.providerId=s);const o=this.sessions.find(a=>a.id===e)||(((i=this.currentSession)==null?void 0:i.id)===e?this.currentSession:null);o&&o.status==="waiting"&&(n.pendingModel=t);const r=await c.updateSession(e,n);return this._updateSessionInAllLists(e,n),r}catch(n){throw this.error=n.message,n}},async updateNextTemplate(e,t){return this.updateSessionFields(e,{nextTemplateId:t})},async updateAutoSendPendingPrompt(e,t){return this.updateSessionFields(e,{autoSendPendingPrompt:t})},async updateSessionFields(e,t){this.error=null;try{const s=await c.updateSession(e,t);return this._updateSessionInAllLists(e,t),s}catch(s){throw this.error=s.message,s}},updateSession(e){var t;e!=null&&e.id&&(e.archived===!0?(this.sessions=F(this.sessions,this.archivedSessions,e),this.activeSessions=this.activeSessions.filter(s=>s.id!==e.id)):e.archived===!1?this.archivedSessions=F(this.archivedSessions,this.sessions,e):(k(this.sessions,e),k(this.archivedSessions,e)),((t=this.currentSession)==null?void 0:t.id)===e.id&&(this.currentSession={...this.currentSession,...e}),k(this.activeSessions,e))},addSessionToList(e){e!=null&&e.id&&(this.sessions.some(t=>t.id===e.id)||this.sessions.unshift(e),["running","waiting","starting"].includes(e.status)&&(this.activeSessions.some(t=>t.id===e.id)||this.activeSessions.unshift(e)))},removeSessionFromList(e){var t;e&&(this.sessions=this.sessions.filter(s=>s.id!==e),this.archivedSessions=this.archivedSessions.filter(s=>s.id!==e),this.activeSessions=this.activeSessions.filter(s=>s.id!==e),((t=this.currentSession)==null?void 0:t.id)===e&&(this.currentSession=null))}},M={async fetchConversations(e){var t;if(!(this.viewedSessionId&&this.viewedSessionId!==e)){this.error=null;try{const s=await c.getConversations(e);if(this.viewedSessionId&&this.viewedSessionId!==e)return;this.conversations=s;const i=this.conversations.find(n=>n.isActive);this.activeConversationId=(i==null?void 0:i.id)||((t=this.conversations[0])==null?void 0:t.id)||null}catch(s){this.viewedSessionId&&this.viewedSessionId===e&&(this.error=s.message,this.conversations=[],this.activeConversationId=null)}}},async createConversation(e,t=null){this.error=null;try{const s=await c.createConversation(e,t);return this.conversations.push(s),this.conversations=this.conversations.map(i=>({...i,isActive:i.id===s.id})),this.activeConversationId=s.id,this.messages=[],this.runningUsage=null,s}catch(s){throw this.error=s.message,s}},async switchConversation(e,t){if(this.activeConversationId!==t){this.error=null;try{this.runningUsage=null,this.clearPartialThinking(),this.messages=[],this.workLogs={},await c.updateConversation(e,t,{isActive:!0}),this.conversations=this.conversations.map(s=>({...s,isActive:s.id===t})),this.activeConversationId=t,this.messages=await c.getConversationMessages(e,t),this.clearPartialThinking(e),await this.fetchWorkLogs(e)}catch(s){throw this.error=s.message,s}}},async renameConversation(e,t,s){this.error=null;try{const i=await c.updateConversation(e,t,{name:s}),n=this.conversations.findIndex(o=>o.id===t);return n!==-1&&(this.conversations[n]={...this.conversations[n],...i}),i}catch(i){throw this.error=i.message,i}},async deleteConversation(e,t){this.error=null;try{await c.deleteConversation(e,t),this.conversations=this.conversations.filter(s=>s.id!==t),this.activeConversationId===t&&this.conversations.length>0?(await this.fetchConversations(e),this.activeConversationId&&(this.messages=await c.getConversationMessages(e,this.activeConversationId))):this.activeConversationId===t&&(this.activeConversationId=null,this.messages=[])}catch(s){throw this.error=s.message,s}},async branchConversation(e,t,s={}){const{messageId:i=null,prompt:n=null}=s||{};this.error=null;try{const o=await c.branchConversation(e,t,{messageId:i,prompt:n});return this.conversations.some(r=>r.id===o.id)||this.conversations.push(o),this.conversations=this.conversations.map(r=>({...r,isActive:r.id===o.id})),this.activeConversationId=o.id,this.messages=[],this.workLogs={},this.clearPartialThinking(e),Promise.all([c.getConversationMessages(e,o.id).then(r=>{this.activeConversationId===o.id&&(this.messages=r)}).catch(r=>console.error("Failed to fetch messages for branch:",r)),this.fetchWorkLogs(e).catch(r=>console.error("Failed to fetch work logs for branch:",r))]),o}catch(o){throw this.error=o.message,o}},updateConversation(e){if(!(e!=null&&e.id)||this.currentSession&&e.sessionId&&e.sessionId!==this.currentSession.id)return;const t=this.conversations.findIndex(s=>s.id===e.id);t!==-1&&this.conversations.splice(t,1,{...this.conversations[t],...e}),e.isActive&&(this.conversations=this.conversations.map(s=>({...s,isActive:s.id===e.id})),this.activeConversationId=e.id)},addConversation(e){e!=null&&e.id&&(this.currentSession&&e.sessionId&&e.sessionId!==this.currentSession.id||(this.conversations.some(t=>t.id===e.id)||this.conversations.push(e),e.isActive&&(this.conversations=this.conversations.map(t=>({...t,isActive:t.id===e.id})),this.activeConversationId=e.id)))},removeConversation(e,t=null,s=null){var i;this.currentSession&&s&&s!==this.currentSession.id||(this.conversations=this.conversations.filter(n=>n.id!==e),t?(this.conversations.some(n=>n.id===t.id)||this.conversations.push(t),this.conversations=this.conversations.map(n=>({...n,isActive:n.id===t.id})),this.activeConversationId=t.id):this.activeConversationId===e&&(this.activeConversationId=((i=this.conversations[0])==null?void 0:i.id)||null))},clearConversations(){this.conversations=[],this.activeConversationId=null}},m=5e3,W={_isStaleSession(e){return this.viewedSessionId&&this.viewedSessionId!==e},_isActiveSession(e){return this.viewedSessionId&&this.viewedSessionId===e},async fetchMessages(e,t=!0,s=null){if(!this._isStaleSession(e)){t&&(this.loading=!0),this.error=null;try{const i=s||this.activeConversationId,n=i?await c.getConversationMessages(e,i):await c.getSessionMessages(e);if(this._isStaleSession(e))return;const o=new Set(n.map(a=>a.id)),r=this.messages.filter(a=>a.sessionId===e&&!o.has(a.id));r.length>0?this.messages=[...n,...r]:this.messages=n}catch(i){this._isActiveSession(e)&&(this.error=i.message)}finally{t&&(this.loading=!1)}}},addMessage(e){this._bumpActivityTimestamps(e),!(this.currentSession&&e.sessionId&&e.sessionId!==this.currentSession.id)&&(this.messages.some(t=>t.id===e.id)||this.messages.push(e))},_bumpActivityTimestamps(e){if(!(e!=null&&e.sessionId)||typeof this._updateSessionInAllLists!="function")return;const t=e.timestamp??Date.now(),s=this._findSessionById?this._findSessionById(e.sessionId):null,i={},n=(s==null?void 0:s.lastActivityAt)??0;(!n||t>n)&&(i.lastActivityAt=t);const o=(s==null?void 0:s.lastMessageAt)??0;(!o||t>o)&&(i.lastMessageAt=t),Object.keys(i).length>0&&this._updateSessionInAllLists(e.sessionId,i)},async fetchWorkLogs(e){if(!this._isStaleSession(e)){this.error=null;try{const t=await c.getSessionWorkLogs(e);if(this._isStaleSession(e))return;const s=new Set;for(const r of Object.keys(t))for(const a of t[r]||[])s.add(a.id);const n=(this.workLogs._unassociated||[]).filter(r=>!s.has(r.id)),o=t._unassociated||[];this.workLogs={...t,_unassociated:[...o,...n]}}catch(t){this._isActiveSession(e)&&(this.error=t.message)}}},addWorkLog(e){if(this.currentSession&&e.sessionId&&e.sessionId!==this.currentSession.id)return;const t=e.messageId||"_unassociated",s=this.workLogs[t]||[];s.some(i=>i.id===e.id)||(this.workLogs={...this.workLogs,[t]:[...s,e]})},setWorkLogs(e){this.workLogs=e},clearWorkLogs(){this.workLogs={},this.clearAllPartialThinking()},associateWorkLogs(e){const t=this.workLogs._unassociated||[];if(t.length>0){const s=this.workLogs[e]||[],i=new Set(s.map(o=>o.id)),n=t.filter(o=>!i.has(o.id));this.workLogs={...this.workLogs,[e]:[...s,...n],_unassociated:[]}}},setPartialThinking(e,t=null){var i;const s=t||((i=this.currentSession)==null?void 0:i.id);s&&(this.partialThinkingBySession={...this.partialThinkingBySession,[s]:e})},clearPartialThinking(e=null){var s;const t=e||((s=this.currentSession)==null?void 0:s.id);t&&(this.partialThinkingBySession={...this.partialThinkingBySession,[t]:null})},clearAllPartialThinking(){this.partialThinkingBySession={}},setPartialText(e){this._pendingPartialText=e,this._partialThrottleTimer||(this.partialText=e,this._partialThrottleTimer=setTimeout(()=>{this._pendingPartialText!==null&&this._pendingPartialText!==this.partialText&&(this.partialText=this._pendingPartialText),this._partialThrottleTimer=null,this._pendingPartialText=null},150))},clearPartialText(){this.partialText="",this._pendingPartialText=null,this._partialThrottleTimer&&(clearTimeout(this._partialThrottleTimer),this._partialThrottleTimer=null)},updateRunningUsage(e,t=null){this.runningUsage={...e,conversationId:t}},finalizeUsage(e,t=null){if(t){const s=this.conversations.findIndex(i=>i.id===t);s!==-1&&this.conversations.splice(s,1,{...this.conversations[s],inputTokens:e.inputTokens,outputTokens:e.outputTokens,thinkingTokens:e.thinkingTokens,cacheReadInputTokens:e.cacheReadInputTokens,cacheCreationInputTokens:e.cacheCreationInputTokens,webSearchRequests:e.webSearchRequests,contextWindow:e.contextWindow,model:e.model})}this.currentSession&&(this.currentSession={...this.currentSession,inputTokens:e.inputTokens,outputTokens:e.outputTokens,thinkingTokens:e.thinkingTokens,cacheReadInputTokens:e.cacheReadInputTokens,cacheCreationInputTokens:e.cacheCreationInputTokens,webSearchRequests:e.webSearchRequests,contextWindow:e.contextWindow}),this.runningUsage=null},updateConversationUsage(e,t){const s=this.conversations.findIndex(i=>i.id===e);s!==-1&&this.conversations.splice(s,1,{...this.conversations[s],inputTokens:t.inputTokens,outputTokens:t.outputTokens,thinkingTokens:t.thinkingTokens,cacheReadInputTokens:t.cacheReadInputTokens,cacheCreationInputTokens:t.cacheCreationInputTokens,webSearchRequests:t.webSearchRequests,contextWindow:t.contextWindow,model:t.model})},clearRunningUsage(){this.runningUsage=null,this.clearPartialThinking()},markRecentSend(e){e&&(this.recentSends||(this.recentSends={}),this._recentSendTimers||(this._recentSendTimers={}),this.recentSends={...this.recentSends,[e]:Date.now()},this._recentSendTimers[e]&&clearTimeout(this._recentSendTimers[e]),this._recentSendTimers[e]=setTimeout(()=>{if(this._recentSendTimers[e]=null,!this.recentSends)return;const t=this.recentSends[e];t&&Date.now()-t>=m&&this.clearRecentSend(e)},m))},clearRecentSend(e){if(!e||(this._recentSendTimers&&this._recentSendTimers[e]&&(clearTimeout(this._recentSendTimers[e]),this._recentSendTimers[e]=null),!this.recentSends)||!(e in this.recentSends))return;const t={...this.recentSends};delete t[e],this.recentSends=t},cancelAllRecentSendTimers(){if(this._recentSendTimers){for(const e of Object.keys(this._recentSendTimers))this._recentSendTimers[e]&&(clearTimeout(this._recentSendTimers[e]),this._recentSendTimers[e]=null);this._recentSendTimers={}}}},B={isDraftSession:e=>t=>!t||t.status!=="waiting"?!1:t.hasResponses!==void 0?!t.hasResponses:!e.messages.some(s=>s.role==="assistant"),isScheduledDraft:e=>t=>!t||t.status!=="scheduled"?!1:t.hasResponses!==void 0?!t.hasResponses:!e.messages.some(s=>s.role==="assistant"),getWorkLogsForMessage:e=>t=>e.workLogs[t]||[],getUnassociatedWorkLogs:e=>e.workLogs._unassociated||[],partialThinking:e=>{var t;return(t=e.currentSession)!=null&&t.id&&e.partialThinkingBySession[e.currentSession.id]||null},activeConversation:e=>e.conversations.find(t=>t.id===e.activeConversationId)||null,getConversationById:e=>t=>e.conversations.find(s=>s.id===t),rootConversations:e=>e.conversations.filter(t=>!t.parentConversationId),conversationTree:e=>{const t=(s=null)=>e.conversations.filter(i=>i.parentConversationId===s).map(i=>({...i,children:t(i.id)}));return t(null)},getConversationChildren:e=>t=>e.conversations.filter(s=>s.parentConversationId===t),getConversationParent:e=>t=>{const s=e.conversations.find(i=>i.id===t);return s!=null&&s.parentConversationId?e.conversations.find(i=>i.id===s.parentConversationId):null},hasRecentSend:e=>t=>{if(!t||!e.recentSends)return!1;const s=e.recentSends[t];return s?Date.now()-s<m:!1}},$=I("sessions",{state:()=>({sessions:[],archivedSessions:[],activeSessions:[],currentSession:null,viewedSessionId:null,messages:[],conversations:[],activeConversationId:null,workLogs:{},partialThinkingBySession:{},partialText:"",_partialThrottleTimer:null,_pendingPartialText:null,statusFilter:null,starredFilter:null,scheduledFilter:null,runningUsage:null,loading:!1,error:null,commandRunVersion:0,archivedPagination:{total:0,offset:0,hasMore:!1,loading:!1},recentSends:{}}),getters:{_findSessionById:e=>t=>e.sessions.find(s=>s.id===t)||e.activeSessions.find(s=>s.id===t),_findChildren:e=>t=>{const s=e.sessions.filter(r=>r.parentSessionId===t),i=e.activeSessions.filter(r=>r.parentSessionId===t),n=new Set,o=[];for(const r of s)n.has(r.id)||(o.push(r),n.add(r.id));for(const r of i)n.has(r.id)||(o.push(r),n.add(r.id));return o},getSessionById:e=>t=>e.sessions.find(s=>s.id===t),getChildSessions(){return e=>this._findChildren(e)},hasChildren(){return e=>this._findChildren(e).length>0},getChildCount(){return e=>this._findChildren(e).length},getAllDescendants(){return e=>{const t=[],s=[e],i=new Set;for(;s.length>0;){const n=s.pop();if(i.has(n))continue;i.add(n);const o=this._findChildren(n);for(const r of o)t.push(r),s.push(r.id)}return t}},getWorkflowEffectiveStatus(){return e=>{const t=this._findSessionById(e);if(!t)return"idle";const s=[t],i=[e],n=new Set;for(;i.length>0;){const r=i.pop();if(n.has(r))continue;n.add(r);const a=this._findChildren(r);for(const h of a)s.push(h),i.push(h.id)}const o=["running","starting"];return s.some(r=>o.includes(r.status))?"running":"idle"}},getRootSession(){return e=>{let t=this._findSessionById(e);for(;t!=null&&t.parentSessionId;)t=this._findSessionById(t.parentSessionId);return t||null}},getWorkflowAggregatedStatus(){return e=>{const t=this._findSessionById(e);if(!t)return{effectiveStatus:"idle",runningCount:0,scheduledCount:0,waitingCount:0,completedCount:0,totalCount:0,hasScheduledDescendant:!1,rootIsScheduled:!1};const s=[t],i=[e],n=new Set;for(;i.length>0;){const d=i.pop();if(n.has(d))continue;n.add(d);const y=this._findChildren(d);for(const w of y)s.push(w),i.push(w.id)}const o=["running","starting"];let r=0,a=0,h=0,S=0;for(const d of s)o.includes(d.status)?r++:d.status==="scheduled"?a++:d.status==="waiting"?h++:(d.status==="completed"||d.status==="stopped")&&S++;return{effectiveStatus:r>0?"running":"idle",runningCount:r,scheduledCount:a,waitingCount:h,completedCount:S,totalCount:s.length-1,hasScheduledDescendant:s.slice(1).some(d=>d.status==="scheduled"),rootIsScheduled:t.status==="scheduled"}}},getWorkflowSessions(){return e=>{const t=this._findSessionById(e);if(!t)return[];const s=[t],i=[e],n=new Set;for(;i.length>0;){const o=i.pop();if(n.has(o))continue;n.add(o);const r=this._findChildren(o);for(const a of r)s.push(a),i.push(a.id)}return s}},groupedSessions:e=>{const t=[],s=new Set;return e.sessions.forEach(i=>{!i.parentSessionId&&!s.has(i.id)&&(t.push({parent:i,children:e.sessions.filter(n=>n.parentSessionId===i.id)}),s.add(i.id))}),e.sessions.forEach(i=>{!i.parentSessionId&&!t.find(n=>n.parent.id===i.id)&&t.push({parent:i,children:[]})}),t.sort((i,n)=>{const o=i.parent.starred?1:0;return(n.parent.starred?1:0)-o}),t},...B,..._},actions:{_updateSessionInAllLists(e,t){var i;const s=(n,o)=>{const r=n;o!==-1&&(r[o]={...r[o],...t})};s(this.sessions,this.sessions.findIndex(n=>n.id===e)),s(this.archivedSessions,this.archivedSessions.findIndex(n=>n.id===e)),s(this.activeSessions,this.activeSessions.findIndex(n=>n.id===e)),((i=this.currentSession)==null?void 0:i.id)===e&&(this.currentSession={...this.currentSession,...t})},...b,setStatusFilter(e){this.statusFilter=e,this._syncFilterToSubStore("statusFilter"),this._filtersStore().saveStatusFilter()},saveStatusFilter(){this._syncFilterToSubStore("statusFilter"),this._filtersStore().saveStatusFilter()},restoreStatusFilter(){this._filtersStore().restoreStatusFilter(),this.statusFilter=this._filtersStore().statusFilter},setStarredFilter(e){this.starredFilter=e,this._syncFilterToSubStore("starredFilter"),this._filtersStore().saveStarredFilter()},saveStarredFilter(){this._syncFilterToSubStore("starredFilter"),this._filtersStore().saveStarredFilter()},restoreStarredFilter(){this._filtersStore().restoreStarredFilter(),this.starredFilter=this._filtersStore().starredFilter},setScheduledFilter(e){this.scheduledFilter=e,this._syncFilterToSubStore("scheduledFilter"),this._filtersStore().saveScheduledFilter()},saveScheduledFilter(){this._syncFilterToSubStore("scheduledFilter"),this._filtersStore().saveScheduledFilter()},restoreScheduledFilter(){this._filtersStore().restoreScheduledFilter(),this.scheduledFilter=this._filtersStore().scheduledFilter},_filtersStore(){return L()},_syncFilterToSubStore(e){this._filtersStore()[e]=this[e]},updateSessionCommandRun(e,t,s){const i=r=>{if(!r)return null;const a=[...r.latestCommandRuns||[]],h=a.findIndex(S=>S.buttonId===t);return h>=0?a[h]=s:a.push(s),a},n=this.sessions.find(r=>r.id===e)||this.archivedSessions.find(r=>r.id===e)||this.activeSessions.find(r=>r.id===e)||this.currentSession,o=i(n);o&&this._updateSessionInAllLists(e,{latestCommandRuns:o}),this.commandRunVersion++},removeSessionCommandRun(e,t){const s=this.sessions.find(n=>n.id===e)||this.archivedSessions.find(n=>n.id===e)||this.activeSessions.find(n=>n.id===e)||this.currentSession;if(!s)return;const i=(s.latestCommandRuns||[]).filter(n=>n.buttonId!==t);this._updateSessionInAllLists(e,{latestCommandRuns:i}),this.commandRunVersion++},updateSessionCommandRuns(e,t){this._updateSessionInAllLists(e,{latestCommandRuns:t}),this.commandRunVersion++},...W,...M}});export{B as a,M as c,v as f,q as g,W as p,_ as t,$ as u};
@@ -1 +1 @@
1
- import{L as i,a2 as r}from"./index-B6G18FqB.js";import{a as s}from"./ApiClient-B4YTtyY4.js";const l=i("settings",{state:()=>({tokenCostWeights:{...r},summarySettings:{disableSessionSummaries:!1,sessionTitlePrompt:"",summaryModel:"",summaryProviderId:null,defaultSessionTitlePrompt:""},generalSettings:{disableAnalytics:!1},loading:!1,error:null}),getters:{weights:t=>t.tokenCostWeights},actions:{async fetchTokenCostWeights(){this.loading=!0,this.error=null;try{const t=await s.getTokenCostWeights();this.tokenCostWeights=t}catch(t){this.error=t.message,this.tokenCostWeights={...r}}finally{this.loading=!1}},async updateTokenCostWeights(t){this.loading=!0,this.error=null;try{const e=await s.updateTokenCostWeights(t);return this.tokenCostWeights=e,e}catch(e){throw this.error=e.message,e}finally{this.loading=!1}},async resetTokenCostWeights(){this.loading=!0,this.error=null;try{const t=await s.resetTokenCostWeights();return this.tokenCostWeights=t,t}catch(t){throw this.error=t.message,t}finally{this.loading=!1}},async fetchSummarySettings(){this.loading=!0,this.error=null;try{const t=await s.getSummarySettings();this.summarySettings=t}catch(t){this.error=t.message,this.summarySettings={disableSessionSummaries:!1,sessionTitlePrompt:"",summaryModel:"",summaryProviderId:null,defaultSessionTitlePrompt:""}}finally{this.loading=!1}},async updateSummarySettings(t){this.loading=!0,this.error=null;try{const e=await s.updateSummarySettings(t);return this.summarySettings=e,e}catch(e){throw this.error=e.message,e}finally{this.loading=!1}},async resetSummarySettings(){this.loading=!0,this.error=null;try{const t=await s.resetSummarySettings();return this.summarySettings=t,t}catch(t){throw this.error=t.message,t}finally{this.loading=!1}},async fetchGeneralSettings(){this.loading=!0,this.error=null;try{const t=await s.getGeneralSettings();this.generalSettings=t}catch(t){this.error=t.message,this.generalSettings={disableAnalytics:!1}}finally{this.loading=!1}},async updateGeneralSettings(t){this.loading=!0,this.error=null;try{const e=await s.updateGeneralSettings(t);return this.generalSettings=e,e}catch(e){throw this.error=e.message,e}finally{this.loading=!1}},async resetGeneralSettings(){this.loading=!0,this.error=null;try{const t=await s.resetGeneralSettings();return this.generalSettings=t,t}catch(t){throw this.error=t.message,t}finally{this.loading=!1}}}});export{l as u};
1
+ import{p as i,ab as r}from"./index-C2QFVD7d.js";import{a as s}from"./ApiClient-DfbJwzpz.js";const l=i("settings",{state:()=>({tokenCostWeights:{...r},summarySettings:{disableSessionSummaries:!1,sessionTitlePrompt:"",summaryModel:"",summaryProviderId:null,defaultSessionTitlePrompt:""},generalSettings:{disableAnalytics:!1},loading:!1,error:null}),getters:{weights:t=>t.tokenCostWeights},actions:{async fetchTokenCostWeights(){this.loading=!0,this.error=null;try{const t=await s.getTokenCostWeights();this.tokenCostWeights=t}catch(t){this.error=t.message,this.tokenCostWeights={...r}}finally{this.loading=!1}},async updateTokenCostWeights(t){this.loading=!0,this.error=null;try{const e=await s.updateTokenCostWeights(t);return this.tokenCostWeights=e,e}catch(e){throw this.error=e.message,e}finally{this.loading=!1}},async resetTokenCostWeights(){this.loading=!0,this.error=null;try{const t=await s.resetTokenCostWeights();return this.tokenCostWeights=t,t}catch(t){throw this.error=t.message,t}finally{this.loading=!1}},async fetchSummarySettings(){this.loading=!0,this.error=null;try{const t=await s.getSummarySettings();this.summarySettings=t}catch(t){this.error=t.message,this.summarySettings={disableSessionSummaries:!1,sessionTitlePrompt:"",summaryModel:"",summaryProviderId:null,defaultSessionTitlePrompt:""}}finally{this.loading=!1}},async updateSummarySettings(t){this.loading=!0,this.error=null;try{const e=await s.updateSummarySettings(t);return this.summarySettings=e,e}catch(e){throw this.error=e.message,e}finally{this.loading=!1}},async resetSummarySettings(){this.loading=!0,this.error=null;try{const t=await s.resetSummarySettings();return this.summarySettings=t,t}catch(t){throw this.error=t.message,t}finally{this.loading=!1}},async fetchGeneralSettings(){this.loading=!0,this.error=null;try{const t=await s.getGeneralSettings();this.generalSettings=t}catch(t){this.error=t.message,this.generalSettings={disableAnalytics:!1}}finally{this.loading=!1}},async updateGeneralSettings(t){this.loading=!0,this.error=null;try{const e=await s.updateGeneralSettings(t);return this.generalSettings=e,e}catch(e){throw this.error=e.message,e}finally{this.loading=!1}},async resetGeneralSettings(){this.loading=!0,this.error=null;try{const t=await s.resetGeneralSettings();return this.generalSettings=t,t}catch(t){throw this.error=t.message,t}finally{this.loading=!1}}}});export{l as u};
@@ -8,8 +8,8 @@
8
8
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
9
9
  <link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;700&display=swap" rel="stylesheet">
10
10
  <title>Circus Chief</title>
11
- <script type="module" crossorigin src="/assets/index-B6G18FqB.js"></script>
12
- <link rel="stylesheet" crossorigin href="/assets/index-Cs2nxhrT.css">
11
+ <script type="module" crossorigin src="/assets/index-C2QFVD7d.js"></script>
12
+ <link rel="stylesheet" crossorigin href="/assets/index-uySCcnA_.css">
13
13
  </head>
14
14
  <body>
15
15
  <div id="app"></div>
@@ -1,51 +0,0 @@
1
- import { Router } from 'express';
2
- import { sessionNotes } from '../database.js';
3
- import { requireSession } from '../middleware/sessionLookup.js';
4
-
5
- const router = Router();
6
-
7
- // GET /api/sessions/:id/notes - Get session notes
8
- router.get('/:id/notes', requireSession, (req, res) => {
9
- const notes = sessionNotes.getBySessionId(req.params.id);
10
- res.json(notes);
11
- });
12
-
13
- // POST /api/sessions/:id/notes - Create session note
14
- router.post('/:id/notes', requireSession, (req, res) => {
15
- const { content } = req.body;
16
- if (!content) {
17
- return res.status(400).json({ error: 'Content is required' });
18
- }
19
-
20
- const note = sessionNotes.create(req.params.id, content);
21
- res.status(201).json(note);
22
- });
23
-
24
- // PUT /api/sessions/:id/notes/:noteId - Update session note
25
- router.put('/:id/notes/:noteId', (req, res) => {
26
- const note = sessionNotes.getById(req.params.noteId);
27
- if (!note || note.sessionId !== req.params.id) {
28
- return res.status(404).json({ error: 'Note not found' });
29
- }
30
-
31
- const { content } = req.body;
32
- if (!content) {
33
- return res.status(400).json({ error: 'Content is required' });
34
- }
35
-
36
- const updated = sessionNotes.update(req.params.noteId, content);
37
- res.json(updated);
38
- });
39
-
40
- // DELETE /api/sessions/:id/notes/:noteId - Delete session note
41
- router.delete('/:id/notes/:noteId', (req, res) => {
42
- const note = sessionNotes.getById(req.params.noteId);
43
- if (!note || note.sessionId !== req.params.id) {
44
- return res.status(404).json({ error: 'Note not found' });
45
- }
46
-
47
- sessionNotes.delete(req.params.noteId);
48
- res.status(204).send();
49
- });
50
-
51
- export default router;
@@ -1,60 +0,0 @@
1
- import { BaseRepository } from './BaseRepository.js';
2
- import { databaseManager } from './DatabaseManager.js';
3
-
4
- /**
5
- * Session note repository class
6
- */
7
- export class SessionNoteRepository extends BaseRepository {
8
- constructor() {
9
- super('session_notes', SessionNoteRepository.#mapNote);
10
- }
11
-
12
- static #mapNote(row) {
13
- return {
14
- id: row.id,
15
- sessionId: row.session_id,
16
- content: row.content,
17
- createdAt: row.created_at,
18
- updatedAt: row.updated_at,
19
- };
20
- }
21
-
22
- create(sessionId, content) {
23
- const id = databaseManager.generateId();
24
- const now = Date.now();
25
- this.db
26
- .prepare(
27
- `INSERT INTO session_notes (id, session_id, content, created_at, updated_at)
28
- VALUES (?, ?, ?, ?, ?)`
29
- )
30
- .run(id, sessionId, content, now, now);
31
- return this.getById(id);
32
- }
33
-
34
- getBySessionId(sessionId) {
35
- const rows = this.db
36
- .prepare('SELECT * FROM session_notes WHERE session_id = ? ORDER BY created_at DESC')
37
- .all(sessionId);
38
- return this.mapAll(rows);
39
- }
40
-
41
- update(id, content) {
42
- this.db
43
- .prepare('UPDATE session_notes SET content = ?, updated_at = ? WHERE id = ?')
44
- .run(content, Date.now(), id);
45
- return this.getById(id);
46
- }
47
-
48
- /**
49
- * Duplicates all notes from one session to another.
50
- * @param {string} sourceSessionId - Source session ID
51
- * @param {string} targetSessionId - Target session ID
52
- */
53
- duplicateForSession(sourceSessionId, targetSessionId) {
54
- const notes = this.getBySessionId(sourceSessionId);
55
-
56
- for (const note of notes) {
57
- this.create(targetSessionId, note.content);
58
- }
59
- }
60
- }
@@ -1 +0,0 @@
1
- var b=n=>{throw TypeError(n)};var g=(n,e,s)=>e.has(n)||b("Cannot "+s);var h=(n,e,s)=>(g(n,e,"read from private field"),s?s.call(n):e.get(n)),y=(n,e,s)=>e.has(n)?b("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(n):e.set(n,s),C=(n,e,s,t)=>(g(n,e,"write to private field"),t?t.call(n,s):e.set(n,s),s),l=(n,e,s)=>(g(n,e,"access private method"),s);function S(n){Object.assign(n.prototype,{async getProjects(){return this._get("/projects")},async getProject(e){return this._get(`/projects/${e}`)},async createProject(e){return this._post("/projects",e)},async updateProject(e,s){return this._put(`/projects/${e}`,s)},async deleteProject(e){return this._delete(`/projects/${e}`)}})}function j(n,e,s){for(const t of s)e[t]!==void 0&&e[t]!==null&&n.append(t,e[t])}function k(n,e,s){for(const t of s)e[t]!==void 0&&e[t]!==null&&n.append(t,String(e[t]))}function P(n,e){const s=new FormData;s.append("prompt",n.prompt),j(s,n,["name","mode","model","providerId","effortLevel","gitBranch","gitMode","templateId","parentSessionId"]),k(s,n,["thinkingEnabled","startImmediately","autoRescheduleEnabled","rescheduleOnTokenLimit","rescheduleOnServiceError"]),j(s,n,["scheduledAt","rescheduleDelayMinutes","maxRescheduleCount","maxTotalTokens","rescheduleAtTokenCount"]);for(const t of e)s.append("files",t);return s}function T(n){Object.assign(n.prototype,{async getActiveSessions(){return this._get("/sessions")},async getScheduledSessions(e=null){return this._get(this._buildQueryPath("/sessions/scheduled",{projectId:e||void 0}))},async getProjectSessions(e,s=null,t=null,{limit:r=null,offset:a=0}={}){const o={};return s!==null&&(o.archived=s),t==="starred"?o.starred=!0:t==="unstarred"&&(o.starred=!1),r!==null&&(o.limit=r,o.offset=a),this._get(this._buildQueryPath(`/projects/${e}/sessions`,o))},async createSession(e,s){const{files:t,...r}=s;if(t&&t.length>0){const a=P(r,t);return this._uploadFormData(`/projects/${e}/sessions`,a)}return this._post(`/projects/${e}/sessions`,r)},async getSession(e){return this._get(`/sessions/${e}`)},async getSessionMessages(e){return this._get(`/sessions/${e}/messages`)},async getSessionWorkLogs(e){return this._get(`/sessions/${e}/work-logs`)},async sendMessage(e,s,t=[],r=null){if(console.log(`[MODEL AUDIT - ApiClient] sendMessage called with model: "${r}"`),t&&t.length>0){const a=new FormData;a.append("content",s),r&&a.append("model",r);for(const o of t)a.append("files",o);return this._uploadFormData(`/sessions/${e}/message`,a)}return this._post(`/sessions/${e}/message`,{content:s,model:r})},async stopSession(e){return this._post(`/sessions/${e}/stop`)},async getSessionChanges(e,s="local",t=null){const r={};return s==="branch"&&(r.compareMode="branch",t&&(r.branch=t)),this._get(this._buildQueryPath(`/sessions/${e}/changes`,r))},async getSessionDefaultBranch(e){return this._get(`/sessions/${e}/default-branch`)},async getSessionFilesCount(e){return this._get(`/sessions/${e}/files-count`)},async getSessionFile(e,s){return this._get(`/sessions/${e}/file?path=${encodeURIComponent(s)}`)},async restartSession(e){return this._post(`/sessions/${e}/restart`)},async startSession(e,s,t,r){const a={};return s!==void 0&&(a.prompt=s),t!==void 0&&(a.model=t),r!==void 0&&(a.providerId=r),this._post(`/sessions/${e}/start`,Object.keys(a).length>0?a:void 0)},async updateSessionInitialPrompt(e,s){return this._put(`/sessions/${e}/initial-prompt`,{prompt:s})},async updateSession(e,s){return this._patch(`/sessions/${e}`,s)},async updateSessionPendingPrompt(e,s){return this._patch(`/sessions/${e}/pending-prompt`,{pendingPrompt:s})},async deleteSession(e){return this._delete(`/sessions/${e}`)},async archiveSession(e,{cleanup:s=!1}={}){return this._post(`/sessions/${e}/archive`,{cleanup:s})},async unarchiveSession(e){return this._post(`/sessions/${e}/unarchive`)},async toggleSessionStar(e){return this._post(`/sessions/${e}/star`)},async duplicateSession(e,s={}){return this._post(`/sessions/${e}/duplicate`,s)},async scheduleSession(e,s){return this._post(`/sessions/${e}/schedule`,s)}})}function w(n){Object.assign(n.prototype,{async getCanvasItems(e){return this._get(`/sessions/${e}/canvas`)},async getCanvasFileContent(e,s){return this._get(`/sessions/${e}/canvas/file/${encodeURIComponent(s)}/content`)},async getCanvasItemContent(e,s){return this._get(`/sessions/${e}/canvas/${s}/content`)},async getAllCanvasItems(e){return this._get(`/sessions/${e}/canvas/all`)},async uploadCanvasItem(e,s){const t=new FormData;return t.append("file",s),this._uploadFormData(`/sessions/${e}/canvas`,t)},async createCanvasItem(e,s){return this._post(`/sessions/${e}/canvas`,s)},async updateCanvasItem(e,s,t){return this._put(`/sessions/${e}/canvas/${s}`,t)},async deleteCanvasItem(e,s){return this._delete(`/sessions/${e}/canvas/${s}`)},async getCanvasTrash(e){return this._get(`/sessions/${e}/canvas-trash`)},async recoverCanvasItem(e,s){return this._post(`/sessions/${e}/canvas/${s}/recover`)},async recoverCanvasFile(e,s){return this._post(`/sessions/${e}/canvas-trash/recover-file/${encodeURIComponent(s)}`)},async permanentlyDeleteCanvasItem(e,s){return this._delete(`/sessions/${e}/canvas/${s}/permanent`)},async bulkDeleteCanvasItems(e,s){return this._post(`/sessions/${e}/canvas/bulk-delete`,{itemIds:s})},async bulkRecoverCanvasItems(e,s){return this._post(`/sessions/${e}/canvas/bulk-recover`,{itemIds:s})},async bulkPermanentlyDeleteCanvasItems(e,s){return this._delete(`/sessions/${e}/canvas/bulk-delete-permanent`,{itemIds:s})}})}function A(n){Object.assign(n.prototype,{async getProviders(){return this._get("/providers")},async getProvider(e){return this._get(`/providers/${e}`)},async createProvider(e){return this._post("/providers",e)},async updateProvider(e,s){return this._patch(`/providers/${e}`,s)},async deleteProvider(e){return this._delete(`/providers/${e}`)},async testProviderConnection(e){return this._post("/providers/test",e)},async testExistingProvider(e){return this._post(`/providers/${e}/test`)},async getProviderModels(e){return this._get(`/providers/${e}/models`)},async addProviderModel(e,s){return this._post(`/providers/${e}/models`,s)},async updateProviderModel(e,s,t){return this._patch(`/providers/${e}/models/${s}`,t)},async removeProviderModel(e,s){return this._delete(`/providers/${e}/models/${s}`)}})}function R(n){Object.assign(n.prototype,{async getAgents(){return this._get("/agents")}})}function I(n){Object.assign(n.prototype,{async getCommandButtons(e){return this._get(`/projects/${e}/command-buttons`)},async createCommandButton(e,s){return this._post(`/projects/${e}/command-buttons`,s)},async getCommandButton(e,s){return this._get(`/projects/${e}/command-buttons/${s}`)},async updateCommandButton(e,s,t){return this._patch(`/projects/${e}/command-buttons/${s}`,t)},async deleteCommandButton(e,s){return this._delete(`/projects/${e}/command-buttons/${s}`)},async runCommandButton(e,s){return this._post(`/sessions/${e}/command-buttons/${s}/run`)},async getActiveRuns(e){return this._get(`/sessions/${e}/command-buttons/runs`)},async getCommandRun(e,s){return this._get(`/sessions/${e}/command-buttons/runs/${s}`)},async getLatestRunsForProject(e){return this._get(`/projects/${e}/command-buttons/latest-runs`)},async killCommandRun(e,s){return this._post(`/sessions/${e}/command-buttons/runs/${s}/kill`)},async deleteCommandRun(e,s){return this._delete(`/sessions/${e}/command-buttons/runs/${s}`)},async deleteAllRunsForButton(e,s){return this._delete(`/sessions/${e}/command-buttons/${s}/runs/all`)}})}function O(n){Object.assign(n.prototype,{async getTokenCostWeights(){return this._get("/settings/token-weights")},async updateTokenCostWeights(e){return this._put("/settings/token-weights",e)},async resetTokenCostWeights(){return this._delete("/settings/token-weights")},async getSummarySettings(){return this._get("/settings/summary")},async updateSummarySettings(e){return this._put("/settings/summary",e)},async resetSummarySettings(){return this._delete("/settings/summary")},async getGeneralSettings(){return this._get("/settings/general")},async updateGeneralSettings(e){return this._put("/settings/general",e)},async resetGeneralSettings(){return this._delete("/settings/general")}})}function D(n){Object.assign(n.prototype,{async getConversations(e){return this._get(`/sessions/${e}/conversations`)},async createConversation(e,s=null){return this._post(`/sessions/${e}/conversations`,{name:s})},async getConversation(e,s){return this._get(`/sessions/${e}/conversations/${s}`)},async updateConversation(e,s,t){return this._patch(`/sessions/${e}/conversations/${s}`,t)},async deleteConversation(e,s){return this._delete(`/sessions/${e}/conversations/${s}`)},async branchConversation(e,s,t){return this._post(`/sessions/${e}/conversations/${s}/branch`,t)},async getConversationMessages(e,s){return this._get(`/sessions/${e}/messages?conversation_id=${s}`)}})}function F(n){Object.assign(n.prototype,{async getGlobalTemplates(){return this._get("/templates")},async createGlobalTemplate(e){return this._post("/templates",e)},async getTemplate(e){return this._get(`/templates/${e}`)},async updateTemplate(e,s){return this._patch(`/templates/${e}`,s)},async deleteTemplate(e){return this._delete(`/templates/${e}`)},async getProjectTemplates(e){return this._get(`/projects/${e}/templates`)},async createProjectTemplate(e,s){return this._post(`/projects/${e}/templates`,s)}})}function Q(n){Object.assign(n.prototype,{async getQuickResponses(e){return this._get(`/projects/${e}/quick-responses`)},async getGlobalQuickResponses(){return this._get("/quick-responses/global")},async createQuickResponse(e,s){return this._post(`/projects/${e}/quick-responses`,s)},async updateQuickResponse(e,s){return this._patch(`/quick-responses/${e}`,s)},async deleteQuickResponse(e){return this._delete(`/quick-responses/${e}`)},async reorderQuickResponses(e,s){return this._post(`/projects/${e}/quick-responses/reorder`,s)},async reorderGlobalQuickResponses(e){return this._post("/quick-responses/global/reorder",e)}})}function B(n){Object.assign(n.prototype,{async getGitStatus(e){return this._get(`/git/projects/${e}/status`)},async getWorktrees(e){return this._get(`/git/projects/${e}/worktrees`)},async detectWorktreePath(e){return this._get(this._buildQueryPath("/git/detect-worktree-path",{directory:e}))},async getSessionTodos(e,s=null){return this._get(this._buildQueryPath(`/sessions/${e}/todos`,{conversation_id:s||void 0}))},async getSessionSummary(e,s=!1){const t=s?this._buildQueryPath(`/sessions/${e}/summary`,{generate:"true"}):`/sessions/${e}/summary`;try{return await this._get(t)}catch(r){if(r.message.includes("404")||r.message.includes("not found"))return null;throw r}},async getSessionSummariesBatch(e){return!e||e.length===0?{}:this._post("/sessions/summaries/batch",{ids:e})},async generateSessionSummary(e){return this._post(`/sessions/${e}/summary`)},async getWorkflowLatestResponse(e){try{return await this._get(`/sessions/${e}/workflow-latest-response`)}catch(s){if(s.message.includes("404"))return null;throw s}},async getSessionNotes(e){return this._get(`/sessions/${e}/notes`)},async createNote(e,s){return this._post(`/sessions/${e}/notes`,{content:s})},async updateNote(e,s,t){return this._put(`/sessions/${e}/notes/${s}`,{content:t})},async deleteNote(e,s){return this._delete(`/sessions/${e}/notes/${s}`)},async browseDirectory(e=""){return this._get(this._buildQueryPath("/filesystem/browse",{path:e||void 0}))},async getSlashCommands(e){return this._get(`/commands?directory=${encodeURIComponent(e)}`)},async getSlashCommand(e,s){return this._get(`/commands/${encodeURIComponent(s)}?directory=${encodeURIComponent(e)}`)},async executeSlashCommand(e,s,t={}){return this._post(`/commands/${encodeURIComponent(s)}/execute`,{sessionId:e,args:t})},async getAgentCallLogs({limit:e,offset:s,agentType:t,callType:r,status:a,startDate:o,endDate:m,sessionId:_,model:$,sortBy:f,sortOrder:v}={}){const c={};return e!=null&&(c.limit=e),s!=null&&(c.offset=s),t&&(c.agentType=t),r&&(c.callType=r),a&&(c.status=a),o&&(c.startDate=o),m&&(c.endDate=m),_&&(c.sessionId=_),$&&(c.model=$),f&&(c.sortBy=f),v&&(c.sortOrder=v),this._get(this._buildQueryPath("/agent-calls",c))},async getAgentCallFilterOptions(){return this._get("/agent-calls/filter-options")},async deleteAllAgentCallLogs(){return this._delete("/agent-calls")},async getProjectSessionDefaults(e){return this._get(`/projects/${e}/session-defaults`)},async updateProjectSessionDefaults(e,s){return this._post(`/projects/${e}/session-defaults`,s)},async resetProjectSessionDefaults(e){return this._delete(`/projects/${e}/session-defaults`)}})}function L(n){Object.assign(n.prototype,{async getKanbanBoard(e){return this._get(`/projects/${e}/kanban`)},async deleteKanbanBoard(e){return this._delete(`/projects/${e}/kanban`)},async createKanbanLane(e,s){return this._post(`/projects/${e}/kanban/lanes`,s)},async updateKanbanLane(e,s,t){return this._patch(`/projects/${e}/kanban/lanes/${s}`,t)},async deleteKanbanLane(e,s){return this._delete(`/projects/${e}/kanban/lanes/${s}`)},async reorderKanbanLanes(e,s){return this._put(`/projects/${e}/kanban/lanes/reorder`,s)},async createKanbanCard(e,s){return this._post(`/projects/${e}/kanban/cards`,s)},async moveKanbanCard(e,s,t){return this._patch(`/projects/${e}/kanban/cards/${s}/move`,t)},async deleteKanbanCard(e,s){return this._delete(`/projects/${e}/kanban/cards/${s}`)},async reorderKanbanCards(e,s,t){return this._put(`/projects/${e}/kanban/lanes/${s}/cards/reorder`,t)}})}var p,u,d;class i{constructor(e="/api"){y(this,u);y(this,p);C(this,p,e)}get baseUrl(){return h(this,p)}async _uploadFormData(e,s){const t=await fetch(`${h(this,p)}${e}`,{method:"POST",body:s});if(!t.ok){const r=await t.json().catch(()=>({}));throw new Error(r.message||r.error||`HTTP ${t.status}`)}return t.json()}_buildQueryPath(e,s){const t=new URLSearchParams;for(const[a,o]of Object.entries(s))o!=null&&t.append(a,o);const r=t.toString();return r?`${e}?${r}`:e}_get(e){return l(this,u,d).call(this,"GET",e)}_post(e,s){return l(this,u,d).call(this,"POST",e,s)}_put(e,s){return l(this,u,d).call(this,"PUT",e,s)}_patch(e,s){return l(this,u,d).call(this,"PATCH",e,s)}_delete(e,s){return l(this,u,d).call(this,"DELETE",e,s)}}p=new WeakMap,u=new WeakSet,d=async function(e,s,t=null){const r={method:e,headers:{"Content-Type":"application/json"}};t&&e!=="GET"&&(r.body=JSON.stringify(t));const a=await fetch(`${h(this,p)}${s}`,r);if(!a.ok){const o=await a.json().catch(()=>({}));throw new Error(o.message||o.error||`HTTP ${a.status}`)}return a.status===204?null:a.json()};S(i);T(i);w(i);A(i);R(i);I(i);O(i);D(i);F(i);Q(i);B(i);L(i);const E=new i;export{E as a};
@@ -1 +0,0 @@
1
- .template-selector[data-v-77a4f989]{padding:1rem;background:var(--color-bg-soft);border-radius:.5rem;margin-bottom:1rem}.selector-label[data-v-77a4f989]{display:block;font-weight:500;font-size:.875rem;margin-bottom:.5rem;color:var(--color-text)}.selector-wrapper[data-v-77a4f989]{display:flex;gap:.5rem;align-items:center}.selector-wrapper .form-input[data-v-77a4f989]{flex:1}.btn-clear[data-v-77a4f989]{background:none;border:1px solid var(--color-border);border-radius:4px;padding:.5rem .75rem;cursor:pointer;color:var(--color-text-soft);font-size:.875rem;transition:all .15s}.btn-clear[data-v-77a4f989]:hover:not(:disabled){background:var(--color-bg-hover);color:var(--color-error);border-color:var(--color-error)}.btn-clear[data-v-77a4f989]:disabled{opacity:.5;cursor:not-allowed}.template-preview[data-v-77a4f989]{margin-top:.75rem;padding:.75rem;background:var(--color-background);border-radius:.375rem;border:1px solid var(--color-border)}.template-prompt-preview[data-v-77a4f989]{margin:0;font-size:.8rem;color:var(--color-text-soft);line-height:1.4;font-style:italic}.chain-indicator[data-v-77a4f989]{display:inline-block;margin-top:.5rem;font-size:.75rem;padding:.2rem .5rem;background:var(--color-warning, #f0ad4e);color:#333;border-radius:4px}.selector-help[data-v-77a4f989]{margin:.5rem 0 0;font-size:.75rem;color:var(--color-text-soft)}.saving-indicator[data-v-77a4f989]{display:flex;align-items:center;gap:.5rem;margin-top:.5rem;font-size:.75rem;color:var(--color-text-soft)}@media (max-width: 480px){.template-selector[data-v-77a4f989]{padding:.75rem}.selector-wrapper[data-v-77a4f989]{flex-direction:column;align-items:stretch}.btn-clear[data-v-77a4f989]{align-self:flex-end}}.modal-backdrop[data-v-e1ffc2da]{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000b3;display:flex;align-items:center;justify-content:center;z-index:1000}.modal-content[data-v-e1ffc2da]{display:flex;flex-direction:column;background:var(--color-background-secondary, #1f2937);border-radius:.5rem;width:100%;max-width:500px;max-height:90vh;overflow:hidden;border:1px solid var(--color-border)}.modal-header[data-v-e1ffc2da]{flex-shrink:0;display:flex;justify-content:space-between;align-items:center;padding:1rem 1.5rem;border-bottom:1px solid var(--color-border)}.modal-title[data-v-e1ffc2da]{margin:0;font-size:1.25rem;font-weight:600;color:var(--color-text)}.close-btn[data-v-e1ffc2da]{background:none;border:none;font-size:1.5rem;color:var(--color-text-soft);cursor:pointer;padding:0;line-height:1}.close-btn[data-v-e1ffc2da]:hover{color:var(--color-text)}.modal-body[data-v-e1ffc2da]{flex:1;overflow-y:auto;min-height:0;padding:1.5rem}.form-section[data-v-e1ffc2da]{margin-bottom:1.5rem;padding-bottom:1.5rem;border-bottom:1px solid var(--color-border)}.form-section[data-v-e1ffc2da]:last-of-type{border-bottom:none}.section-title[data-v-e1ffc2da]{margin:0 0 1rem;font-size:1rem;font-weight:600;color:var(--color-text)}.error-message[data-v-e1ffc2da]{padding:.75rem;margin-bottom:1rem;background:#ef44441a;border:1px solid rgba(239,68,68,.3);border-radius:.25rem;color:#fca5a5;font-size:.9rem}.modal-footer[data-v-e1ffc2da]{flex-shrink:0;display:flex;justify-content:flex-end;gap:.75rem;padding:1rem 1.5rem;border-top:1px solid var(--color-border)}.form-group[data-v-e1ffc2da]{margin-bottom:1rem}.form-label[data-v-e1ffc2da]{display:block;margin-bottom:.5rem;font-weight:500;color:var(--color-text)}.form-input[data-v-e1ffc2da]{width:100%;padding:.5rem;border:1px solid var(--color-border);border-radius:.25rem;background:var(--color-background);color:var(--color-text);font-size:.95rem}.form-input[data-v-e1ffc2da]:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 2px #22c5ff1a}.form-help[data-v-e1ffc2da]{margin-top:.25rem;font-size:.875rem;color:var(--color-text-soft)}.toggle-switch[data-v-e1ffc2da]{display:flex;align-items:center;cursor:pointer;gap:.75rem}.toggle-switch input[data-v-e1ffc2da]{display:none}.toggle-slider[data-v-e1ffc2da]{position:relative;display:inline-block;width:2.5rem;height:1.25rem;background-color:var(--color-border);border-radius:1rem;transition:background-color .2s;flex-shrink:0}.toggle-slider[data-v-e1ffc2da]:after{content:"";position:absolute;width:1rem;height:1rem;border-radius:50%;background-color:#fff;top:.125rem;left:.125rem;transition:transform .2s}.toggle-switch input:checked+.toggle-slider[data-v-e1ffc2da]{background-color:var(--color-primary)}.toggle-switch input:checked+.toggle-slider[data-v-e1ffc2da]:after{transform:translate(1.25rem)}.toggle-label[data-v-e1ffc2da]{color:var(--color-text);font-weight:500}.reschedule-settings[data-v-e1ffc2da]{padding:1rem;margin-top:1rem;border-left:2px solid var(--color-primary);background:var(--color-background, rgba(255, 255, 255, .02));border-radius:0 .25rem .25rem 0}.settings-label[data-v-e1ffc2da]{margin-bottom:.75rem;font-weight:500;font-size:.95rem;color:var(--color-text)}.checkbox-option[data-v-e1ffc2da]{display:flex;align-items:center;gap:.75rem;margin-bottom:.75rem;cursor:pointer;color:var(--color-text)}.checkbox-option input[data-v-e1ffc2da]{width:1rem;height:1rem;cursor:pointer}.btn[data-v-e1ffc2da]{padding:.5rem 1rem;border-radius:.25rem;font-weight:500;cursor:pointer;border:none;font-size:.9rem;transition:opacity .2s,background-color .2s}.btn-primary[data-v-e1ffc2da]{background:var(--color-primary);color:#fff}.btn-primary[data-v-e1ffc2da]:hover:not(:disabled){opacity:.9}.btn-primary[data-v-e1ffc2da]:disabled{opacity:.5;cursor:not-allowed}.btn-secondary[data-v-e1ffc2da]{background:var(--color-background);border:1px solid var(--color-border);color:var(--color-text)}.btn-secondary[data-v-e1ffc2da]:hover{background:var(--color-background-secondary)}.modal-backdrop[data-v-bddc7788]{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000b3;display:flex;align-items:center;justify-content:center;z-index:1000}.modal-content[data-v-bddc7788]{background:var(--color-background-secondary, #1f2937);border-radius:.5rem;width:100%;max-width:500px;max-height:90vh;overflow:hidden;display:flex;flex-direction:column;border:1px solid var(--color-border)}.modal-header[data-v-bddc7788]{display:flex;justify-content:space-between;align-items:center;padding:1rem 1.5rem;border-bottom:1px solid var(--color-border)}.modal-title[data-v-bddc7788]{margin:0;font-size:1.25rem;font-weight:600;color:var(--color-text)}.close-btn[data-v-bddc7788]{background:none;border:none;font-size:1.5rem;color:var(--color-text-soft);cursor:pointer;padding:0;line-height:1}.close-btn[data-v-bddc7788]:hover{color:var(--color-text)}.modal-body[data-v-bddc7788]{padding:1.5rem;flex:1;overflow-y:auto}.modal-footer[data-v-bddc7788]{display:flex;justify-content:flex-end;gap:.75rem;padding:1rem 1.5rem;border-top:1px solid var(--color-border)}.moving-info[data-v-bddc7788]{margin-bottom:1.5rem;padding:.75rem;background:var(--color-bg-soft, rgba(255, 255, 255, .05));border-radius:.25rem}.moving-label[data-v-bddc7788]{display:block;font-size:.75rem;color:var(--color-text-soft);margin-bottom:.25rem}.moving-session-name[data-v-bddc7788]{display:block;font-size:.875rem;font-weight:500;color:var(--color-text)}.empty-state[data-v-bddc7788]{display:flex;align-items:center;justify-content:center;padding:2rem;color:var(--color-text-soft)}.lanes-list[data-v-bddc7788]{display:flex;flex-direction:column;gap:.5rem;margin-bottom:1rem}.lane-row[data-v-bddc7788]{border:1px solid var(--color-border);border-radius:.25rem;transition:background-color .15s,border-color .15s}.lane-row[data-v-bddc7788]:not(.lane-row-disabled):hover{background:var(--color-bg-soft);border-color:var(--color-primary)}.lane-row-current[data-v-bddc7788]{opacity:.6}.lane-label[data-v-bddc7788]{display:flex;align-items:center;padding:.75rem;cursor:pointer;gap:.75rem;width:100%}.lane-label input[type=radio][data-v-bddc7788]{flex-shrink:0;width:1rem;height:1rem;cursor:pointer}.lane-label input[type=radio][data-v-bddc7788]:disabled{cursor:not-allowed}.lane-info[data-v-bddc7788]{display:flex;align-items:center;gap:.5rem;flex:1}.lane-name[data-v-bddc7788]{font-size:.875rem;font-weight:500;color:var(--color-text)}.lane-current-badge[data-v-bddc7788]{font-size:.75rem;color:var(--color-text-soft);font-style:italic}.lane-automation-icon[data-v-bddc7788]{color:#f59e0b;flex-shrink:0;display:flex;align-items:center}.automation-option[data-v-bddc7788]{margin-top:1rem;padding-top:1rem;border-top:1px solid var(--color-border)}.checkbox-label[data-v-bddc7788]{display:flex;align-items:center;gap:.5rem;cursor:pointer;font-size:.875rem;color:var(--color-text)}.checkbox-label input[type=checkbox][data-v-bddc7788]{width:1rem;height:1rem;cursor:pointer}.btn[data-v-bddc7788]{padding:.5rem 1rem;border-radius:.25rem;font-weight:500;cursor:pointer;border:none;font-size:.9rem;transition:opacity .2s,background-color .2s}.btn-primary[data-v-bddc7788]{background:var(--color-primary);color:#fff}.btn-primary[data-v-bddc7788]:hover:not(:disabled){opacity:.9}.btn-primary[data-v-bddc7788]:disabled{opacity:.5;cursor:not-allowed}.btn-secondary[data-v-bddc7788]{background:var(--color-background);border:1px solid var(--color-border);color:var(--color-text)}.btn-secondary[data-v-bddc7788]:hover{background:var(--color-background-secondary)}.btn-danger[data-v-bddc7788]{background:#ef4444;color:#fff}.btn-danger[data-v-bddc7788]:hover:not(:disabled){background:#dc2626}.btn-danger[data-v-bddc7788]:disabled{opacity:.5;cursor:not-allowed}.modal-backdrop[data-v-140e797f]{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000b3;display:flex;align-items:center;justify-content:center;z-index:1000}.modal-content[data-v-140e797f]{background:var(--color-background-secondary, #1f2937);border-radius:.5rem;width:100%;max-width:450px;overflow:hidden;display:flex;flex-direction:column;border:1px solid var(--color-border)}.modal-header[data-v-140e797f]{display:flex;justify-content:space-between;align-items:center;padding:1rem 1.5rem;border-bottom:1px solid var(--color-border)}.modal-title[data-v-140e797f]{margin:0;font-size:1.25rem;font-weight:600;color:var(--color-text)}.close-btn[data-v-140e797f]{background:none;border:none;font-size:1.5rem;color:var(--color-text-soft);cursor:pointer;padding:0;line-height:1}.close-btn[data-v-140e797f]:hover{color:var(--color-text)}.modal-body[data-v-140e797f]{padding:1.5rem}.confirm-message[data-v-140e797f]{margin:0;font-size:.9rem;color:var(--color-text);line-height:1.5}.cleanup-option[data-v-140e797f]{margin-top:1rem;padding-top:1rem;border-top:1px solid var(--color-border)}.checkbox-label[data-v-140e797f]{display:flex;align-items:center;gap:.5rem;cursor:pointer;font-size:.875rem;color:var(--color-text)}.checkbox-label input[type=checkbox][data-v-140e797f]{width:1rem;height:1rem;cursor:pointer}.modal-footer[data-v-140e797f]{display:flex;justify-content:flex-end;gap:.75rem;padding:1rem 1.5rem;border-top:1px solid var(--color-border)}.btn[data-v-140e797f]{padding:.5rem 1rem;border-radius:.25rem;font-weight:500;cursor:pointer;border:none;font-size:.9rem;transition:opacity .2s,background-color .2s}.btn-primary[data-v-140e797f]{background:var(--color-primary);color:#fff}.btn-primary[data-v-140e797f]:hover{opacity:.9}.btn-secondary[data-v-140e797f]{background:var(--color-background);border:1px solid var(--color-border);color:var(--color-text)}.btn-secondary[data-v-140e797f]:hover{background:var(--color-background-secondary)}.btn[data-v-140e797f]:disabled{opacity:.5;cursor:not-allowed}.close-btn[data-v-140e797f]:disabled{opacity:.5;cursor:not-allowed}
@@ -1 +0,0 @@
1
- import{_ as L,n as I,l as O,o as N,a,c as d,b as t,m as T,p as q,F as j,r as D,t as C,i as f,f as B,x,Z as K,k as P,G as z,d as V,q as w,v as A,j as F,U as G,y as W,A as H,E as Y,H as Z}from"./index-B6G18FqB.js";import{u as J,b as Q}from"./EffortLevelSelector-C2378L8e.js";import{M as X}from"./ModelSelector-BMpR0DPr.js";import{M as ee}from"./SlashCommandWizard-DmTyNG9O.js";import{u as te}from"./SessionLogStream-DpUE6Xsh.js";const se={class:"template-selector"},le={class:"selector-wrapper"},ne=["disabled"],oe={key:0,label:"Project Templates"},ae=["value"],de={key:1,label:"Global Templates"},ie=["value"],ue=["disabled"],re={key:0,class:"template-preview"},ce={class:"template-prompt-preview"},me={key:0,class:"chain-indicator"},pe={key:1,class:"selector-help"},ve={key:2,class:"saving-indicator"},be={__name:"TemplateSelector",props:{sessionId:{type:String,required:!1,default:null},projectId:{type:String,required:!0},currentTemplateId:{type:String,default:null},disabled:{type:Boolean,default:!1}},emits:["update:templateId"],setup(o,{emit:M}){const n=o,k=M,p=J(),v=I(n.currentTemplateId),u=I(!1),h=x(()=>p.loading),s=x(()=>p.projectTemplates),g=x(()=>p.globalTemplates),c=x(()=>v.value?p.getTemplateById(v.value):null),$=x(()=>{var S;if(!((S=c.value)!=null&&S.nextTemplateId))return null;const e=[];let i=c.value.nextTemplateId;const m=new Set;for(;i&&!m.has(i);){m.add(i);const l=p.getTemplateById(i);if(l)e.push(l.name),i=l.nextTemplateId;else{e.push("Unknown");break}if(e.length>=3){e.push("...");break}}return e.length>0?`Chains to: ${e.join(" → ")}`:null}),R=K(n,"currentTemplateId");O(R,e=>{v.value=e},{flush:"sync"}),N(()=>{n.projectId&&p.projectTemplates.length===0&&p.globalTemplates.length===0&&p.fetchProjectTemplates(n.projectId)});function _(e,i=100){return e?e.length<=i?e:`${e.substring(0,i)}...`:""}function E(e){var S;const i=((S=e==null?void 0:e.target)==null?void 0:S.value)||v.value,m=i===""?null:i;u.value=!0,k("update:templateId",m),setTimeout(()=>{u.value=!1},1e3)}function r(){v.value=null,E()}return(e,i)=>(a(),d("div",se,[i[3]||(i[3]=t("label",{class:"selector-label"},"Next Template",-1)),t("div",le,[T(t("select",{"onUpdate:modelValue":i[0]||(i[0]=m=>v.value=m),class:"form-input",disabled:o.disabled||h.value,onChange:E},[i[1]||(i[1]=t("option",{value:null}," Select a template to run... ",-1)),s.value.length?(a(),d("optgroup",oe,[(a(!0),d(j,null,D(s.value,m=>(a(),d("option",{key:m.id,value:m.id},C(m.name),9,ae))),128))])):f("",!0),g.value.length?(a(),d("optgroup",de,[(a(!0),d(j,null,D(g.value,m=>(a(),d("option",{key:m.id,value:m.id},C(m.name),9,ie))),128))])):f("",!0)],40,ne),[[q,v.value]]),v.value?(a(),d("button",{key:0,class:"btn-clear",title:"Clear selection",disabled:o.disabled||u.value,onClick:r}," ✕ ",8,ue)):f("",!0)]),c.value?(a(),d("div",re,[t("p",ce,C(_(c.value.prompt)),1),$.value?(a(),d("span",me,C($.value),1)):f("",!0)])):(a(),d("p",pe," When the agent finishes responding, a new session will automatically start using this template. ")),u.value?(a(),d("div",ve,[...i[2]||(i[2]=[t("span",{class:"loading-spinner"},null,-1),B(" Saving... ",-1)])])):f("",!0)]))}},he=L(be,[["__scopeId","data-v-77a4f989"]]),fe={class:"modal-content"},ge={class:"modal-header"},ke={class:"modal-title"},ye={class:"modal-body"},Te={key:0,class:"error-message"},Ce={class:"form-section"},Se={class:"form-group"},$e={class:"form-group"},xe={class:"form-group"},Ie={class:"toggle-switch"},Me={key:1,class:"form-group"},Ee=["min"],we={key:2,class:"form-section"},Re={class:"form-group"},_e={class:"toggle-switch"},Oe={key:3,class:"reschedule-settings"},Ae={class:"form-group"},Le={class:"checkbox-option"},Ue={class:"checkbox-option"},Ve={class:"form-group"},je={class:"form-group"},De={class:"form-group"},Be={class:"form-group"},Ne={key:0,class:"form-group"},Fe={class:"checkbox-option"},qe={class:"form-help"},Pe={class:"modal-footer"},ze=["disabled"],Ge={__name:"SchedulingEditModal",props:{isOpen:{type:Boolean,default:!1},session:{type:Object,default:null}},emits:["close","saved"],setup(o,{emit:M}){const n=o,k=M,p=Q(),v=P(),u=I(!1),h=I(null),s=W({scheduledAtLocal:"",model:null,mode:"standard",thinkingEnabled:!1,nextTemplateId:null,autoRescheduleEnabled:!1,rescheduleDelayMinutes:15,rescheduleOnTokenLimit:!0,rescheduleOnServiceError:!0,maxRescheduleCount:null,maxTotalTokens:null,rescheduleAtTokenCount:null,resetRescheduleCount:!1}),g=x(()=>{const r=new Date;return r.setMinutes(r.getMinutes()+1),r.toISOString().slice(0,16)}),c=x(()=>{var r;return((r=n.session)==null?void 0:r.status)==="scheduled"?"Edit Scheduling Settings":"Auto-Reschedule Settings"});function $(){k("close")}function R(r){s.nextTemplateId=r}function _(r){if(!r)return"";const e=new Date(r),i=e.getFullYear(),m=String(e.getMonth()+1).padStart(2,"0"),S=String(e.getDate()).padStart(2,"0"),l=String(e.getHours()).padStart(2,"0"),b=String(e.getMinutes()).padStart(2,"0");return`${i}-${m}-${S}T${l}:${b}`}async function E(){var r;u.value=!0,h.value=null;try{const e={model:s.model,mode:s.mode,thinkingEnabled:s.thinkingEnabled,nextTemplateId:s.nextTemplateId,autoRescheduleEnabled:s.autoRescheduleEnabled,rescheduleDelayMinutes:s.rescheduleDelayMinutes,rescheduleOnTokenLimit:s.rescheduleOnTokenLimit,rescheduleOnServiceError:s.rescheduleOnServiceError,maxRescheduleCount:s.maxRescheduleCount||null,maxTotalTokens:s.maxTotalTokens||null,rescheduleAtTokenCount:s.rescheduleAtTokenCount||null};((r=n.session)==null?void 0:r.status)==="scheduled"&&s.scheduledAtLocal&&(e.scheduledAt=new Date(s.scheduledAtLocal).getTime()),s.resetRescheduleCount&&(e.rescheduleCount=0),await p.updateSessionFields(n.session.id,e),v.success("Settings saved"),k("saved"),$()}catch(e){h.value=e.message||"Failed to save settings",v.error(`Failed to save settings: ${h.value}`)}finally{u.value=!1}}return O(()=>n.isOpen,r=>{r&&n.session&&(h.value=null,s.scheduledAtLocal=_(n.session.scheduledAt),s.model=n.session.model||null,s.mode=n.session.mode||"standard",s.thinkingEnabled=n.session.thinkingEnabled||!1,s.nextTemplateId=n.session.nextTemplateId||null,s.autoRescheduleEnabled=n.session.autoRescheduleEnabled||!1,s.rescheduleDelayMinutes=n.session.rescheduleDelayMinutes||15,s.rescheduleOnTokenLimit=n.session.rescheduleOnTokenLimit??!0,s.rescheduleOnServiceError=n.session.rescheduleOnServiceError??!0,s.maxRescheduleCount=n.session.maxRescheduleCount,s.maxTotalTokens=n.session.maxTotalTokens,s.rescheduleAtTokenCount=n.session.rescheduleAtTokenCount,s.resetRescheduleCount=!1)}),(r,e)=>{var i,m,S;return a(),z(G,{to:"body"},[o.isOpen?(a(),d("div",{key:0,class:"modal-backdrop",onClick:F($,["self"])},[t("div",fe,[t("div",ge,[t("h2",ke,C(c.value),1),t("button",{class:"close-btn","aria-label":"Close",onClick:$}," × ")]),t("div",ye,[h.value?(a(),d("div",Te,C(h.value),1)):f("",!0),t("div",Ce,[e[16]||(e[16]=t("h3",{class:"section-title"}," Session Settings ",-1)),t("div",Se,[e[12]||(e[12]=t("label",{class:"form-label"},"Model",-1)),V(X,{modelValue:s.model,"onUpdate:modelValue":e[0]||(e[0]=l=>s.model=l)},null,8,["modelValue"])]),t("div",$e,[e[13]||(e[13]=t("label",{class:"form-label"},"Mode",-1)),V(ee,{modelValue:s.mode,"onUpdate:modelValue":e[1]||(e[1]=l=>s.mode=l)},null,8,["modelValue"])]),t("div",xe,[t("label",Ie,[T(t("input",{"onUpdate:modelValue":e[2]||(e[2]=l=>s.thinkingEnabled=l),type:"checkbox"},null,512),[[w,s.thinkingEnabled]]),e[14]||(e[14]=t("span",{class:"toggle-slider"},null,-1)),e[15]||(e[15]=t("span",{class:"toggle-label"},"Extended Thinking",-1))])])]),((i=o.session)==null?void 0:i.status)==="scheduled"?(a(),d("div",Me,[e[17]||(e[17]=t("label",{for:"scheduled-at",class:"form-label"},"Scheduled Time",-1)),T(t("input",{id:"scheduled-at","onUpdate:modelValue":e[3]||(e[3]=l=>s.scheduledAtLocal=l),type:"datetime-local",min:g.value,class:"form-input"},null,8,Ee),[[A,s.scheduledAtLocal]])])):f("",!0),((m=o.session)==null?void 0:m.status)==="scheduled"?(a(),d("div",we,[e[18]||(e[18]=t("h3",{class:"section-title"}," Template Chain ",-1)),V(he,{"session-id":o.session.id,"project-id":o.session.projectId,"current-template-id":s.nextTemplateId,disabled:u.value,"onUpdate:templateId":R},null,8,["session-id","project-id","current-template-id","disabled"])])):f("",!0),t("div",Re,[t("label",_e,[T(t("input",{"onUpdate:modelValue":e[4]||(e[4]=l=>s.autoRescheduleEnabled=l),type:"checkbox"},null,512),[[w,s.autoRescheduleEnabled]]),e[19]||(e[19]=t("span",{class:"toggle-slider"},null,-1)),e[20]||(e[20]=t("span",{class:"toggle-label"},"Auto-reschedule on errors",-1))])]),s.autoRescheduleEnabled?(a(),d("div",Oe,[t("div",Ae,[e[23]||(e[23]=t("p",{class:"settings-label"}," Reschedule Triggers ",-1)),t("label",Le,[T(t("input",{"onUpdate:modelValue":e[5]||(e[5]=l=>s.rescheduleOnTokenLimit=l),type:"checkbox"},null,512),[[w,s.rescheduleOnTokenLimit]]),e[21]||(e[21]=t("span",null,"Token limit errors",-1))]),t("label",Ue,[T(t("input",{"onUpdate:modelValue":e[6]||(e[6]=l=>s.rescheduleOnServiceError=l),type:"checkbox"},null,512),[[w,s.rescheduleOnServiceError]]),e[22]||(e[22]=t("span",null,"Service unavailability",-1))])]),t("div",Ve,[e[25]||(e[25]=t("label",{class:"form-label"},"Reschedule Delay",-1)),T(t("select",{"onUpdate:modelValue":e[7]||(e[7]=l=>s.rescheduleDelayMinutes=l),class:"form-input"},[...e[24]||(e[24]=[t("option",{value:5}," 5 minutes ",-1),t("option",{value:15}," 15 minutes ",-1),t("option",{value:30}," 30 minutes ",-1),t("option",{value:60}," 1 hour ",-1),t("option",{value:120}," 2 hours ",-1)])],512),[[q,s.rescheduleDelayMinutes,void 0,{number:!0}]])]),t("div",je,[e[26]||(e[26]=t("label",{class:"form-label"},"Max Reschedule Count",-1)),T(t("input",{"onUpdate:modelValue":e[8]||(e[8]=l=>s.maxRescheduleCount=l),type:"number",min:"1",max:"100",class:"form-input",placeholder:"Unlimited"},null,512),[[A,s.maxRescheduleCount,void 0,{number:!0}]])]),t("div",De,[e[27]||(e[27]=t("label",{class:"form-label"},"Max Total Tokens",-1)),T(t("input",{"onUpdate:modelValue":e[9]||(e[9]=l=>s.maxTotalTokens=l),type:"number",min:"1000",step:"1000",class:"form-input",placeholder:"Unlimited"},null,512),[[A,s.maxTotalTokens,void 0,{number:!0}]])]),t("div",Be,[e[28]||(e[28]=t("label",{class:"form-label"},"Reschedule At Token Count",-1)),T(t("input",{"onUpdate:modelValue":e[10]||(e[10]=l=>s.rescheduleAtTokenCount=l),type:"number",min:"10000",step:"10000",class:"form-input",placeholder:"None"},null,512),[[A,s.rescheduleAtTokenCount,void 0,{number:!0}]])]),((S=o.session)==null?void 0:S.rescheduleCount)>0?(a(),d("div",Ne,[t("label",Fe,[T(t("input",{"onUpdate:modelValue":e[11]||(e[11]=l=>s.resetRescheduleCount=l),type:"checkbox"},null,512),[[w,s.resetRescheduleCount]]),e[29]||(e[29]=t("span",null,"Reset reschedule count to 0",-1))]),t("p",qe," Current count: "+C(o.session.rescheduleCount),1)])):f("",!0)])):f("",!0)]),t("div",Pe,[t("button",{class:"btn btn-secondary",onClick:$}," Cancel "),t("button",{class:"btn btn-primary",disabled:u.value,onClick:E},C(u.value?"Updating...":"Update"),9,ze)])])])):f("",!0)])}}},Mt=L(Ge,[["__scopeId","data-v-e1ffc2da"]]),He={class:"modal-content",role:"dialog","aria-labelledby":"modal-title"},Ke={class:"modal-body"},We={class:"moving-info"},Ye={class:"moving-session-name"},Ze={key:0,class:"empty-state"},Je={key:1,class:"lanes-list"},Qe={class:"lane-label"},Xe=["name","value","disabled","aria-disabled","aria-label"],et={class:"lane-info"},tt={class:"lane-name"},st={key:0,class:"lane-current-badge"},lt={key:1,class:"lane-automation-icon",title:"Automation enabled"},nt={key:2,class:"automation-option"},ot={class:"checkbox-label"},at={class:"modal-footer"},dt=["disabled"],it=["disabled","aria-label"],ut=["disabled"],rt={__name:"MoveCardModal",props:{isOpen:Boolean,projectId:{type:String,required:!0},cardId:{type:String,required:!0},currentLaneId:{type:String,required:!0},sessionName:{type:String,default:""}},emits:["update:isOpen","close","moved"],setup(o,{emit:M}){const n=o,k=M,p=te(),v=P(),u=I(null),h=I(!0),s=I(!1),g=I(!1),c=x(()=>{var l;return((l=p.board)==null?void 0:l.lanes)||[]}),$=x(()=>n.sessionName?n.sessionName:n.cardId||"Unnamed session"),R=x(()=>u.value&&c.value.find(l=>l.id===u.value)||null),_=x(()=>R.value?r(R.value):!1),E=x(()=>u.value&&u.value!==n.currentLaneId);function r(l){return l?!!(l.onEnterTemplateId||l.onEnterPrompt):!1}function e(){k("update:isOpen",!1),k("close"),u.value=null,h.value=!0}async function i(){if(!(!E.value||!n.cardId)){s.value=!0;try{await p.moveCard(n.projectId,n.cardId,u.value,{runOnEnterTemplate:h.value}),v.success("Card moved successfully"),k("moved"),e()}catch(l){console.error("Failed to move card:",l),v.error(l.message||"Failed to move card")}finally{s.value=!1}}}async function m(){if(confirm("Remove this session from the board?")){g.value=!0;try{await p.removeCard(n.projectId,n.cardId),v.success("Session removed from board"),k("close")}catch(l){console.error("Failed to remove card:",l),v.error(l.message||"Failed to remove session")}finally{g.value=!1}}}O(u,(l,b)=>{if(l!==b){const y=c.value.find(U=>U.id===l);h.value=r(y)}}),O(()=>n.isOpen,l=>{l&&(u.value=null,h.value=!0)});function S(l){l.key==="Escape"&&n.isOpen&&e()}return N(()=>{document.addEventListener("keydown",S)}),H(()=>{document.removeEventListener("keydown",S)}),(l,b)=>o.isOpen?(a(),d("div",{key:0,class:"modal-backdrop",onClick:F(e,["self"])},[t("div",He,[t("div",{class:"modal-header"},[b[2]||(b[2]=t("h2",{id:"modal-title",class:"modal-title"}," Move to Lane ",-1)),t("button",{class:"close-btn","aria-label":"Close modal",onClick:e}," × ")]),t("div",Ke,[t("div",We,[b[3]||(b[3]=t("span",{class:"moving-label"},"Moving:",-1)),t("span",Ye,C($.value),1)]),c.value.length===0?(a(),d("div",Ze,[...b[4]||(b[4]=[t("p",null,"No lanes available",-1)])])):(a(),d("div",Je,[(a(!0),d(j,null,D(c.value,y=>(a(),d("div",{key:y.id,class:Y(["lane-row",{"lane-row-current":y.id===o.currentLaneId,"lane-row-disabled":y.id===o.currentLaneId}])},[t("label",Qe,[T(t("input",{"onUpdate:modelValue":b[0]||(b[0]=U=>u.value=U),type:"radio",name:`lane-${o.cardId}`,value:y.id,disabled:y.id===o.currentLaneId,"aria-disabled":y.id===o.currentLaneId,"aria-label":`Move to ${y.name}`},null,8,Xe),[[Z,u.value]]),t("span",et,[t("span",tt,C(y.name),1),y.id===o.currentLaneId?(a(),d("span",st,"(current)")):f("",!0),r(y)?(a(),d("span",lt,[...b[5]||(b[5]=[t("svg",{xmlns:"http://www.w3.org/2000/svg",width:"14",height:"14",viewBox:"0 0 24 24",fill:"currentColor"},[t("path",{d:"M13 10V3L4 14h7v7l9-11h-7z"})],-1)])])):f("",!0)])])],2))),128))])),_.value?(a(),d("div",nt,[t("label",ot,[T(t("input",{"onUpdate:modelValue":b[1]||(b[1]=y=>h.value=y),type:"checkbox","aria-label":"Run automation on entry"},null,512),[[w,h.value]]),b[6]||(b[6]=t("span",null,"Run automation on entry",-1))])])):f("",!0)]),t("div",at,[t("button",{class:"btn btn-secondary",disabled:g.value,onClick:e}," Cancel ",8,dt),t("button",{class:"btn btn-danger",disabled:g.value,"aria-label":`Remove ${$.value} from board`,onClick:m},C(g.value?"Removing...":"Remove from Board"),9,it),t("button",{class:"btn btn-primary",disabled:!E.value||s.value||g.value,"aria-label":"Move card to selected lane",onClick:i},C(s.value?"Moving...":"Move"),9,ut)])])])):f("",!0)}},Et=L(rt,[["__scopeId","data-v-bddc7788"]]),ct={class:"modal-content",role:"dialog","aria-labelledby":"archive-modal-title"},mt={class:"modal-header"},pt=["disabled"],vt={class:"modal-body"},bt={class:"confirm-message"},ht={key:0,class:"cleanup-option"},ft={class:"checkbox-label"},gt={class:"modal-footer"},kt=["disabled"],yt=["disabled"],Tt={__name:"ArchiveConfirmModal",props:{isOpen:{type:Boolean,default:!1},sessionName:{type:String,default:"this session"},hasCleanupScript:{type:Boolean,default:!1},loading:{type:Boolean,default:!1}},emits:["confirm","cancel"],setup(o,{emit:M}){const n=o,k=M,p=I(!0);O(()=>n.isOpen,g=>{g&&(p.value=!0)});function v(){k("confirm",p.value)}function u(){n.loading||k("cancel")}function h(){n.loading||k("cancel")}function s(g){g.key==="Escape"&&n.isOpen&&!n.loading&&k("cancel")}return N(()=>{document.addEventListener("keydown",s)}),H(()=>{document.removeEventListener("keydown",s)}),(g,c)=>(a(),z(G,{to:"body"},[o.isOpen?(a(),d("div",{key:0,class:"modal-backdrop",onClick:F(h,["self"])},[t("div",ct,[t("div",mt,[c[1]||(c[1]=t("h2",{id:"archive-modal-title",class:"modal-title"}," Archive Session ",-1)),t("button",{class:"close-btn","aria-label":"Close modal",disabled:o.loading,onClick:u}," × ",8,pt)]),t("div",vt,[t("p",bt,[c[2]||(c[2]=B(" Are you sure you want to archive ",-1)),t("strong",null,C(o.sessionName),1),c[3]||(c[3]=B("? ",-1))]),o.hasCleanupScript?(a(),d("div",ht,[t("label",ft,[T(t("input",{"onUpdate:modelValue":c[0]||(c[0]=$=>p.value=$),type:"checkbox","aria-label":"Run git worktree cleanup"},null,512),[[w,p.value]]),c[4]||(c[4]=t("span",null,"Run git worktree cleanup",-1))])])):f("",!0)]),t("div",gt,[t("button",{class:"btn btn-secondary",disabled:o.loading,onClick:u}," Cancel ",8,kt),t("button",{class:"btn btn-primary",disabled:o.loading,onClick:v},C(o.loading?"Archiving...":"Archive"),9,yt)])])])):f("",!0)]))}},wt=L(Tt,[["__scopeId","data-v-140e797f"]]);export{wt as A,Et as M,Mt as S,he as T};
@@ -1 +0,0 @@
1
- import{_ as N,k as U,o as V,a as r,c as u,b as t,f as _,d as j,w as P,u as I,t as i,m as k,v as D,i as v,q as J,j as h,x as M,s as $,n as m,g as q,h as A}from"./index-B6G18FqB.js";import{u as F}from"./commandButtons-D4RPpLiu.js";import{a as W}from"./ApiClient-B4YTtyY4.js";const p={PROJECT_ID:"projectId",PROJECT_ID_ALT:"id",BUTTON_ID:"buttonId",SESSION_ID:"id",SESSION_TAB:"tab"},z={class:"container command-button-detail"},G={key:0,class:"loading-state"},H={key:1,class:"form-container"},K={class:"form-header"},Q={class:"form-group"},X={key:0,class:"form-error"},Y={class:"form-group"},Z={key:0,class:"form-error"},ee={class:"form-group"},te={key:0,class:"form-error"},oe={class:"form-group form-group-checkbox"},se={for:"showOnList",class:"checkbox-label"},ae={class:"form-actions"},le=["disabled"],ne={key:0,class:"form-error-message"},re={class:"modal-body"},ue={class:"modal-footer"},de=["disabled"],ie={__name:"CommandButtonDetailView",setup(me){const d=$(),w=A(),O=F(),b=U(),B=m(!1),C=m(!1),g=m(!1),f=m(!1),c=m(null),a=m({}),o=m({label:"",command:"",sortOrder:0,showOnList:!1}),y=M(()=>!!d.params.buttonId),S=async s=>{B.value=!0;try{const e=d.params[p.PROJECT_ID];let l=O.getButtonById(s);l||(l=await W.getCommandButton(e,s)),l&&(o.value={label:l.label,command:l.command,sortOrder:l.sortOrder||0,showOnList:l.showOnList||!1})}catch(e){c.value=`Failed to load button: ${e.message}`}finally{B.value=!1}},T=()=>(a.value={},o.value.label.trim()||(a.value.label="Label is required"),o.value.command.trim()||(a.value.command="Command is required"),o.value.sortOrder<0&&(a.value.sortOrder="Sort order must be 0 or greater"),Object.keys(a.value).length===0),L=async()=>{if(c.value=null,!!T()){C.value=!0;try{const s=d.params[p.PROJECT_ID],e={label:o.value.label,command:o.value.command,sortOrder:o.value.sortOrder,showOnList:o.value.showOnList};y.value?(await O.updateButton(s,d.params[p.BUTTON_ID],e),b.success("Command button updated")):(await O.createButton(s,e),b.success("Command button created")),w.push(`/projects/${s}/sessions`)}catch(s){c.value=s.message,b.error(s.message)}finally{C.value=!1}}},x=()=>{w.back()},E=()=>{f.value=!0},R=async()=>{g.value=!0;try{const s=d.params[p.PROJECT_ID],e=d.params[p.BUTTON_ID];await O.deleteButton(s,e),b.success("Command button deleted"),f.value=!1,w.push(`/projects/${s}/sessions`)}catch(s){c.value=s.message,b.error(s.message)}finally{g.value=!1}};return V(async()=>{y.value&&await S(d.params.buttonId)}),(s,e)=>{const l=q("router-link");return r(),u("div",z,[B.value?(r(),u("div",G,[...e[7]||(e[7]=[t("span",{class:"loading-spinner"},null,-1),_(" Loading... ",-1)])])):(r(),u("div",H,[t("div",K,[j(l,{to:`/projects/${I(d).params[I(p).PROJECT_ID]}/sessions`,class:"btn btn-outline-secondary"},{default:P(()=>[...e[8]||(e[8]=[_(" ← Back ",-1)])]),_:1},8,["to"]),t("h2",null,i(y.value?"Edit Command Button":"New Command Button"),1)]),t("form",{class:"command-button-form",onSubmit:h(L,["prevent"])},[t("div",Q,[e[9]||(e[9]=t("label",{for:"label"},"Label",-1)),k(t("input",{id:"label","onUpdate:modelValue":e[0]||(e[0]=n=>o.value.label=n),type:"text",class:"form-input",placeholder:"e.g., Run Tests",required:""},null,512),[[D,o.value.label]]),a.value.label?(r(),u("span",X,i(a.value.label),1)):v("",!0)]),t("div",Y,[e[10]||(e[10]=t("label",{for:"command"},"Command",-1)),k(t("textarea",{id:"command","onUpdate:modelValue":e[1]||(e[1]=n=>o.value.command=n),class:"form-input",placeholder:"e.g., npm test",rows:"4",required:""},null,512),[[D,o.value.command]]),a.value.command?(r(),u("span",Z,i(a.value.command),1)):v("",!0)]),t("div",ee,[e[11]||(e[11]=t("label",{for:"sortOrder"},"Sort Order (optional)",-1)),k(t("input",{id:"sortOrder","onUpdate:modelValue":e[2]||(e[2]=n=>o.value.sortOrder=n),type:"number",class:"form-input",placeholder:"0",min:"0"},null,512),[[D,o.value.sortOrder,void 0,{number:!0}]]),a.value.sortOrder?(r(),u("span",te,i(a.value.sortOrder),1)):v("",!0),e[12]||(e[12]=t("span",{class:"form-help"},"Buttons are displayed in ascending order. Leave as 0 for default.",-1))]),t("div",oe,[t("label",se,[k(t("input",{id:"showOnList","onUpdate:modelValue":e[3]||(e[3]=n=>o.value.showOnList=n),type:"checkbox",class:"form-checkbox"},null,512),[[J,o.value.showOnList]]),e[13]||(e[13]=t("span",null,"Show status indicator on session lists",-1))]),e[14]||(e[14]=t("span",{class:"form-help"},"When enabled, the button status will be displayed on session cards",-1))]),t("div",ae,[t("button",{type:"button",class:"btn btn-outline-secondary",onClick:x}," Cancel "),y.value?(r(),u("button",{key:0,type:"button",class:"btn btn-outline-danger",onClick:E}," Delete ")):v("",!0),t("button",{type:"submit",class:"btn btn-primary",disabled:C.value},i(C.value?"Saving...":y.value?"Update":"Create"),9,le)]),c.value?(r(),u("div",ne,i(c.value),1)):v("",!0)],32)])),f.value?(r(),u("div",{key:2,class:"modal-overlay",onClick:e[6]||(e[6]=n=>f.value=!1)},[t("div",{class:"modal-dialog",onClick:e[5]||(e[5]=h(()=>{},["stop"]))},[e[18]||(e[18]=t("div",{class:"modal-header"},[t("h4",null,"Delete Command Button")],-1)),t("div",re,[t("p",null,[e[15]||(e[15]=_('Are you sure you want to delete "',-1)),t("strong",null,i(o.value.label),1),e[16]||(e[16]=_('"?',-1))]),e[17]||(e[17]=t("p",null,"This action cannot be undone.",-1))]),t("div",ue,[t("button",{class:"btn btn-outline-secondary",onClick:e[4]||(e[4]=n=>f.value=!1)}," Cancel "),t("button",{class:"btn btn-danger",disabled:g.value,onClick:R},i(g.value?"Deleting...":"Delete"),9,de)])])])):v("",!0)])}}},be=N(ie,[["__scopeId","data-v-b4855495"]]);export{be as default};
@@ -1 +0,0 @@
1
- .command-button-detail[data-v-b4855495]{max-width:600px;margin:0 auto;padding:2rem 0}.loading-state[data-v-b4855495]{display:flex;align-items:center;justify-content:center;gap:.75rem;padding:3rem;color:var(--color-text-soft)}.form-container[data-v-b4855495]{display:flex;flex-direction:column;gap:2rem}.form-header[data-v-b4855495]{display:flex;align-items:center;gap:1rem}.form-header h2[data-v-b4855495]{margin:0;color:var(--color-text);flex:1}.command-button-form[data-v-b4855495]{display:flex;flex-direction:column;gap:1.5rem;background-color:var(--color-background-soft);border:1px solid var(--color-border);border-radius:var(--border-radius);padding:2rem}.form-group[data-v-b4855495]{display:flex;flex-direction:column;gap:.5rem}.form-group label[data-v-b4855495]{font-weight:500;color:var(--color-text);font-size:.95rem}.form-input[data-v-b4855495]{padding:.75rem;background-color:var(--color-background);border:1px solid var(--color-border);border-radius:var(--border-radius);color:var(--color-text);font-family:inherit;font-size:.95rem;transition:border-color .2s}.form-input[data-v-b4855495]:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 3px #58a6ff1a}.form-input[data-v-b4855495]::placeholder{color:var(--color-text-soft)}textarea.form-input[data-v-b4855495]{font-family:var(--font-mono);font-size:.85rem;resize:vertical;min-height:100px}.form-help[data-v-b4855495]{font-size:.85rem;color:var(--color-text-soft)}.form-error[data-v-b4855495]{font-size:.85rem;color:var(--color-error)}.form-group-checkbox[data-v-b4855495]{gap:.25rem}.checkbox-label[data-v-b4855495]{display:flex;align-items:center;gap:.5rem;font-weight:500;color:var(--color-text);font-size:.95rem;cursor:pointer;-webkit-user-select:none;user-select:none}.form-checkbox[data-v-b4855495]{width:18px;height:18px;cursor:pointer;accent-color:var(--color-primary)}.form-error-message[data-v-b4855495]{padding:.75rem;background-color:#f851491a;border:1px solid var(--color-error);border-radius:var(--border-radius);color:var(--color-error);font-size:.9rem}.form-actions[data-v-b4855495]{display:flex;gap:.75rem;justify-content:flex-end;margin-top:1rem}.form-actions button[data-v-b4855495]:disabled{opacity:.6;cursor:not-allowed}.modal-overlay[data-v-b4855495]{position:fixed;top:0;left:0;right:0;bottom:0;background-color:#00000080;display:flex;align-items:center;justify-content:center;z-index:1000}.modal-dialog[data-v-b4855495]{background-color:var(--color-background-soft);border:1px solid var(--color-border);border-radius:var(--border-radius);max-width:400px;width:90%;overflow:hidden}.modal-header[data-v-b4855495]{padding:1rem;border-bottom:1px solid var(--color-border)}.modal-header h4[data-v-b4855495]{margin:0;color:var(--color-text)}.modal-body[data-v-b4855495]{padding:1.5rem 1rem;color:var(--color-text-soft)}.modal-body p[data-v-b4855495]{margin:.5rem 0}.modal-footer[data-v-b4855495]{padding:1rem;border-top:1px solid var(--color-border);display:flex;gap:.5rem;justify-content:flex-end}@media (max-width: 640px){.command-button-detail[data-v-b4855495]{padding:1rem}.form-header[data-v-b4855495]{flex-direction:column;align-items:flex-start}.command-button-form[data-v-b4855495]{padding:1.5rem 1rem}.form-actions[data-v-b4855495]{flex-direction:column-reverse}.form-actions button[data-v-b4855495]{width:100%}}
@@ -1 +0,0 @@
1
- import{L as f,$ as g,_ as b,k as E,n as h,l as _,a as p,c as m,b as I,F as w,r as x,t as j,u as L,x as C,Z as O}from"./index-B6G18FqB.js";import{a as r}from"./ApiClient-B4YTtyY4.js";import{u as P}from"./sessions-DH1R-NhV.js";const k=["low","medium","high","max","auto"],Y=[{id:"claude-haiku-4-5-20251001",name:"Haiku 4.5",description:"Fast & lightweight"},{id:"claude-sonnet-4-6",name:"Sonnet 4.6",description:"Balanced"},{id:"claude-opus-4-6",name:"Opus 4.6",description:"Previous generation"},{id:"claude-opus-4-7",name:"Opus 4.7",description:"Most capable (default)"}],$="claude-opus-4-7",z=[{id:"gpt-5.5",name:"GPT-5.5",description:"Flagship coding and professional work",seedId:"openai-gpt-5-5"},{id:"gpt-5.4",name:"GPT-5.4",description:"High capability professional work",seedId:"openai-gpt-5-4"},{id:"gpt-5.4-mini",name:"GPT-5.4 mini",description:"Fast lower-cost coding and subagent work",seedId:"openai-gpt-5-4-mini"},{id:"gpt-5.3-codex",name:"GPT-5.3-Codex",description:"Coding-optimized agentic model",seedId:"openai-gpt-5-3-codex"}],F=f("todos",{state:()=>({items:[],loading:!1,error:null,expanded:!1,currentConversationId:null}),getters:{hasTodos:t=>t.items.length>0,pendingCount:t=>t.items.filter(e=>e.status==="pending").length,inProgressCount:t=>t.items.filter(e=>e.status==="in_progress").length,completedCount:t=>t.items.filter(e=>e.status==="completed").length},actions:{async fetchTodos(t,e=null){this.loading=!0,this.error=null,this.currentConversationId=e;try{this.items=await r.getSessionTodos(t,e)}catch(s){this.error=s.message}finally{this.loading=!1}},updateTodos(t,e=null){(e===null||this.currentConversationId===null||e===this.currentConversationId)&&(this.items=t)},clearTodos(){this.items=[],this.loading=!1,this.error=null,this.currentConversationId=null,this.expanded=!1},toggleExpanded(){this.expanded=!this.expanded},setExpanded(t){this.expanded=t}}}),D=Symbol("overlay-sessions-store"),V=Symbol("overlay-todos-store");function B(){return g(D,P())}function Z(){return g(V,F())}const q=f("templates",{state:()=>({projectTemplates:[],globalTemplates:[],loading:!1,error:null}),getters:{allTemplates:t=>[...t.projectTemplates,...t.globalTemplates],getTemplateById:t=>e=>t.projectTemplates.find(s=>s.id===e)||t.globalTemplates.find(s=>s.id===e)},actions:{async fetchProjectTemplates(t){this.loading=!0,this.error=null;try{const e=await r.getProjectTemplates(t);this.projectTemplates=e.project||[],this.globalTemplates=e.global||[]}catch(e){this.error=e.message}finally{this.loading=!1}},async createProjectTemplate(t,e){this.loading=!0,this.error=null;try{const s=await r.createProjectTemplate(t,e);return this.projectTemplates.unshift(s),s}catch(s){throw this.error=s.message,s}finally{this.loading=!1}},async createGlobalTemplate(t){this.loading=!0,this.error=null;try{const e=await r.createGlobalTemplate(t);return this.globalTemplates.unshift(e),e}catch(e){throw this.error=e.message,e}finally{this.loading=!1}},async updateTemplate(t,e){this.loading=!0,this.error=null;try{const s=await r.updateTemplate(t,e);let l=this.projectTemplates.findIndex(o=>o.id===t);return l!==-1?this.projectTemplates[l]=s:(l=this.globalTemplates.findIndex(o=>o.id===t),l!==-1&&(this.globalTemplates[l]=s)),s}catch(s){throw this.error=s.message,s}finally{this.loading=!1}},async deleteTemplate(t){this.loading=!0,this.error=null;try{await r.deleteTemplate(t),this.projectTemplates=this.projectTemplates.filter(e=>e.id!==t),this.globalTemplates=this.globalTemplates.filter(e=>e.id!==t)}catch(e){throw this.error=e.message,e}finally{this.loading=!1}}}}),G={class:"effort-selector"},R=["value","disabled"],A=["value"],M={__name:"EffortLevelSelector",props:{sessionId:{type:String,default:null},modelValue:{type:String,default:null},disabled:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(t,{emit:e}){const s=t,l=e,o=B(),T=E(),d=h(!1),y=["auto",...k.filter(a=>a!=="auto")].map(a=>({value:a,label:`${a.charAt(0).toUpperCase()+a.slice(1)} Effort`})),u=C(()=>{var a;return s.sessionId?((a=o.currentSession)==null?void 0:a.effortLevel)||"auto":s.modelValue||"auto"}),i=h(u.value),S=O(s,"modelValue");_([u,S],([a])=>{i.value=a||"auto"},{flush:"sync"});async function v(a){if(!d.value&&i.value!==a)if(i.value=a,s.sessionId){d.value=!0;try{await o.updateSessionFields(s.sessionId,{effortLevel:a==="auto"?null:a})}catch(c){i.value=u.value,T.error(c.message)}finally{d.value=!1}}else l("update:modelValue",a==="auto"?null:a)}return(a,c)=>(p(),m("div",G,[I("select",{id:"effort-select",value:i.value,disabled:t.disabled||d.value,class:"effort-select","aria-label":"Effort level",onChange:c[0]||(c[0]=n=>v(n.target.value))},[(p(!0),m(w,null,x(L(y),n=>(p(),m("option",{key:n.value,value:n.value},j(n.label),9,A))),128))],40,R)]))}},J=b(M,[["__scopeId","data-v-8bc1fe64"]]);export{Y as C,$ as D,J as E,z as O,D as S,V as T,F as a,B as b,Z as c,q as u};
@@ -1 +0,0 @@
1
- import{_ as N,n as r,l as $,a as s,c as o,b as t,m as D,v as j,j as F,t as w,f as h,i as f,F as k,r as S}from"./index-B6G18FqB.js";import{a as T}from"./ApiClient-B4YTtyY4.js";const E={class:"path-chooser"},I={class:"path-input-group"},L={class:"path-browser"},M={class:"browser-header"},U={class:"browser-path"},q={class:"browser-content"},z={key:1,class:"browser-loading"},A={key:2,class:"browser-error"},G=["onClick"],H={key:0,class:"browser-empty"},J={key:1,class:"browser-empty"},K={__name:"PathChooser",props:{modelValue:{type:String,default:""}},emits:["update:modelValue"],setup(g,{emit:C}){const y=g,_=C,l=r(y.modelValue);$(()=>y.modelValue,a=>{l.value=a});function V(){_("update:modelValue",l.value)}const v=r(!1),i=r(""),c=r(null),d=r([]),m=r(!1),u=r(null);async function B(){v.value=!0,await b(l.value||"")}function p(){v.value=!1}async function b(a){m.value=!0,u.value=null;try{const e=await T.browseDirectory(a);i.value=e.path,c.value=e.parent,d.value=e.entries,e.error&&(u.value=e.error)}catch(e){u.value=e.message||"Failed to browse directory"}finally{m.value=!1}}function P(){l.value=i.value,_("update:modelValue",i.value),p()}function x(a,e){return a==="/"?`/${e}`:`${a}/${e}`}return(a,e)=>(s(),o("div",E,[t("div",I,[D(t("input",{"onUpdate:modelValue":e[0]||(e[0]=n=>l.value=n),type:"text",class:"form-input",placeholder:"/path/to/project",onInput:V},null,544),[[j,l.value]]),t("button",{type:"button",class:"btn",onClick:B}," Browse ")]),v.value?(s(),o("div",{key:0,class:"path-browser-overlay",onClick:F(p,["self"])},[t("div",L,[t("div",M,[t("span",U,w(i.value),1),t("button",{type:"button",class:"browser-close",onClick:p}," × ")]),t("div",q,[c.value?(s(),o("div",{key:0,class:"browser-item parent",onClick:e[1]||(e[1]=n=>b(c.value))},[...e[2]||(e[2]=[t("span",{class:"browser-item-icon"},"←",-1),h(" Parent Directory ",-1)])])):f("",!0),m.value?(s(),o("div",z,[...e[3]||(e[3]=[t("span",{class:"loading-spinner"},null,-1),h(" Loading... ",-1)])])):u.value?(s(),o("div",A,w(u.value),1)):(s(),o(k,{key:3},[(s(!0),o(k,null,S(d.value,n=>(s(),o("div",{key:n.name,class:"browser-item",onClick:O=>b(x(i.value,n.name))},[e[4]||(e[4]=t("span",{class:"browser-item-icon"},"📁",-1)),h(" "+w(n.name),1)],8,G))),128)),d.value.length===0&&!c.value?(s(),o("div",H," No subdirectories ")):d.value.length===0?(s(),o("div",J," No subdirectories in this folder ")):f("",!0)],64))]),t("div",{class:"browser-footer"},[t("button",{type:"button",class:"btn",onClick:p}," Cancel "),t("button",{type:"button",class:"btn btn-primary",onClick:P}," Select ")])])])):f("",!0)]))}},W=N(K,[["__scopeId","data-v-297ad79a"]]);export{W as P};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-BGwH4Cfn.js","assets/index-B6G18FqB.js","assets/index-Cs2nxhrT.css","assets/SessionDetailView-CL7nmfiB.js","assets/sessions-DH1R-NhV.js","assets/ApiClient-B4YTtyY4.js","assets/projects-BUiOGmmb.js","assets/EffortLevelSelector-C2378L8e.js","assets/EffortLevelSelector-BQaQmU2d.css","assets/SessionLogStream-DpUE6Xsh.js","assets/commandButtons-D4RPpLiu.js","assets/SessionLogStream-zPUTiGbe.css","assets/ArchiveConfirmModal-OFaj_uX5.js","assets/ModelSelector-BMpR0DPr.js","assets/providers-Bh1ZiiJi.js","assets/ModelSelector-D8hbTRIt.css","assets/SlashCommandWizard-DmTyNG9O.js","assets/SlashCommandWizard-Dn7sNaBd.css","assets/ArchiveConfirmModal-BQ-4gI0R.css","assets/useSummaryHelpers-GVg7sMWF.js","assets/QuickResponseSettings-CDm5vwP7.js","assets/QuickResponseSettings-B8188A1D.css","assets/QuickResponsesPanel-DZ_Lre_l.js","assets/QuickResponsesPanel-BlFDvnZ2.css","assets/ResizableTextarea-DiIOEGjN.js","assets/ResizableTextarea-DsU3TVwF.css","assets/SessionDetailView-CupIkI7u.css","assets/style-BTin-zR_.css"])))=>i.map(i=>d[i]);
2
- import{n as E,l as u,A as T,a as l,c as y,G as k,w as d,b as m,f as V,d as h,u as w,a3 as x,O as A,P as p}from"./index-B6G18FqB.js";import{u as P}from"./SessionDetailView-CL7nmfiB.js";import"./sessions-DH1R-NhV.js";import"./ApiClient-B4YTtyY4.js";import"./projects-BUiOGmmb.js";import"./EffortLevelSelector-C2378L8e.js";import"./SessionLogStream-DpUE6Xsh.js";import"./commandButtons-D4RPpLiu.js";import"./ArchiveConfirmModal-OFaj_uX5.js";import"./ModelSelector-BMpR0DPr.js";import"./providers-Bh1ZiiJi.js";import"./SlashCommandWizard-DmTyNG9O.js";import"./useSummaryHelpers-GVg7sMWF.js";import"./QuickResponseSettings-CDm5vwP7.js";import"./QuickResponsesPanel-DZ_Lre_l.js";import"./ResizableTextarea-DiIOEGjN.js";const b={class:"canvas-md-editor"},J={__name:"MarkdownEditor",props:{content:{type:String,default:""},sessionId:{type:String,required:!0},filename:{type:String,required:!0},itemId:{type:String,required:!0}},emits:["save"],setup(c,{expose:f,emit:v}){const _=A(()=>p(()=>import("./index-BGwH4Cfn.js").then(e=>e.w),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26])).then(async e=>(await p(()=>Promise.resolve({}),__vite__mapDeps([27])),e.MdEditor))),r=c,n=v,g=P(),o=E(r.content||"");let t=null,a=r.content||"";u(o,e=>{e!==a&&(t&&clearTimeout(t),t=setTimeout(()=>{a=e,n("save",e)},1e3))});function s(){t&&(clearTimeout(t),t=null),o.value!==a&&n("save",o.value)}return f({flushPendingSave:s}),u(()=>r.content,e=>{e!==o.value&&(t&&(clearTimeout(t),t=null),a=e||"",o.value=e||"")}),T(()=>{s(),g.endEditing(r.filename)}),(e,i)=>(l(),y("div",b,[(l(),k(x,null,{default:d(()=>[h(w(_),{modelValue:o.value,"onUpdate:modelValue":i[0]||(i[0]=S=>o.value=S),theme:"dark",preview:!1,language:"en-US","no-upload-img":!0,"show-code-row-number":!0},null,8,["modelValue"])]),fallback:d(()=>[...i[1]||(i[1]=[m("div",{class:"editor-loading"},[m("span",{class:"loading-spinner"}),V(" Loading editor... ")],-1)])]),_:1}))]))}};export{J as default};
@@ -1 +0,0 @@
1
- import{u as G}from"./providers-Bh1ZiiJi.js";import{_ as J,o as Q,n as b,l as M,a as v,c as p,b as W,t as k,i as X,F as x,r as P,E as Y,x as i,Z as $}from"./index-B6G18FqB.js";const ee=["data-model","data-provider-id"],te=["value","disabled"],le={key:0,value:""},oe=["label","data-agent-type"],de=["value","data-provider-id","data-model-id","data-agent-type"],ne={__name:"ModelSelector",props:{modelValue:{type:String,default:null},disabled:{type:Boolean,default:!1},allowEmpty:{type:Boolean,default:!1},emptyLabel:{type:String,default:"Use system default"},selectClass:{type:String,default:""},providerId:{type:String,default:null},hideBuiltInDuplicates:{type:Boolean,default:!0}},emits:["update:modelValue","model-selected","update:providerId"],setup(I,{emit:E}){const n=I,y=E,a=G(),V=i(()=>a.providers.length>0&&a.providers.some(e=>e.models&&e.models.length>0)),F=i(()=>{const e=new Set;for(const t of h.value)if(t.models)for(const l of t.models)e.add(l.modelId);return e});function w(e){return e&&F.value.has(e)}function s(e){return(e==null?void 0:e.kind)==="openai"?"codex":"claude-code"}function L(e){return s(e)==="codex"?"Codex":"Claude Code"}const D=i(()=>{const e=[...a.providers];return e.sort((t,l)=>{const o=s(t),d=s(l);return o!==d?o==="claude-code"?-1:1:t.isBuiltIn!==l.isBuiltIn?t.isBuiltIn?-1:1:(t.name||"").localeCompare(l.name||"")}),e}),h=i(()=>{const e=new Set;for(const t of a.providers)if(!(t.isBuiltIn||!t.models))for(const l of t.models)e.add(l.modelId);return D.value.map(t=>!n.hideBuiltInDuplicates||!t.isBuiltIn?t:N(t,e)).filter(t=>{var l;return(l=t.models)==null?void 0:l.length})}),K=i(()=>{const e=new Map;for(const t of h.value)for(const l of t.models||[])e.set(l.modelId,(e.get(l.modelId)||0)+1);return new Set([...e.entries()].filter(([,t])=>t>1).map(([t])=>t))});function N(e,t){return{...e,models:(e.models||[]).filter(l=>!t.has(l.modelId))}}const c=i(()=>{var o;const e=a.providers.filter(d=>s(d)==="claude-code");if(e.length===0)return null;const l=e.find(d=>d.isBuiltIn)||e[0];if((o=l==null?void 0:l.models)!=null&&o.length){const d=l.models.find(f=>f.tier==="sonnet");return(d==null?void 0:d.modelId)||l.models[0].modelId}return null}),O=b(!1);Q(async()=>{(a.providers.length===0||!V.value)&&await a.fetchProviders(),O.value=!0});function B(e){var l;if(!e)return null;if(e.includes("claude-"))return e;const t=a.providers.find(o=>o.isBuiltIn&&s(o)==="claude-code");if((l=t==null?void 0:t.models)!=null&&l.length){const o=t.models.find(d=>d.tier===e);if(o)return o.modelId}return e}const r=b(B(n.modelValue)),m=b(n.providerId),u=i(()=>n.allowEmpty&&(!r.value||r.value==="")?"":r.value&&w(r.value)?r.value:c.value?c.value:r.value),C=i(()=>{if(!u.value)return null;const e=g(u.value,n.providerId||m.value);return(e==null?void 0:e.provider.id)||null}),R=i(()=>{if(n.allowEmpty&&(!u.value||u.value==="")||!u.value)return"";const e=g(u.value,n.providerId||m.value);return e?_(e.provider.id,e.model.modelId):u.value}),T=$(n,"modelValue");M(T,e=>{r.value=B(e)},{flush:"sync"}),M($(n,"providerId"),e=>{m.value=e},{flush:"sync"}),M(()=>a.providers,z,{deep:!0,immediate:!0});function z(){if(!V.value)return;if(n.allowEmpty&&(!n.modelValue||n.modelValue==="")){r.value="";return}const e=n.modelValue?B(n.modelValue):null;if(e&&w(e)){H(e);return}U()}function H(e){var t;r.value!==e&&(r.value=e,m.value=((t=g(e,n.providerId))==null?void 0:t.provider.id)||null,e!==n.modelValue&&y("update:modelValue",e))}function U(){var e;!c.value||r.value===c.value||(r.value=c.value,m.value=((e=g(c.value))==null?void 0:e.provider.id)||null,y("update:modelValue",c.value))}function Z(e){const t=e.target.value,l=t?q(t):null,o=l?{modelId:l.modelId,providerId:l.providerId,kind:j(l.providerId)}:{modelId:"",providerId:null,kind:null},d=o.modelId;u.value===d&&C.value===o.providerId||(r.value=d,m.value=o.providerId,y("update:modelValue",d),y("update:providerId",o.providerId),y("model-selected",o))}function j(e){if(!e)return null;const t=a.providers.find(l=>l.id===e);return(t==null?void 0:t.kind)||"anthropic"}function _(e,t){return`${e}::${t}`}function q(e){const t=e.indexOf("::");return t===-1?null:{providerId:e.slice(0,t),modelId:e.slice(t+2)}}function g(e,t=null){var l,o;if(!e)return null;for(const d of h.value){if(t&&d.id!==t)continue;const f=(l=d.models)==null?void 0:l.find(S=>S.modelId===e);if(f)return{provider:d,model:f}}if(t)return null;for(const d of h.value){const f=(o=d.models)==null?void 0:o.find(S=>S.modelId===e);if(f)return{provider:d,model:f}}return null}function A(e,t){const l=e.isBuiltIn?t.displayName:t.modelId;return K.value.has(t.modelId)?`${l} (${e.name})`:l}return(e,t)=>(v(),p("div",{class:"model-selector","data-model":u.value,"data-provider-id":C.value||""},[W("select",{id:"model-select",value:R.value,disabled:I.disabled,class:Y(I.selectClass||"model-select"),onChange:t[0]||(t[0]=l=>Z(l))},[I.allowEmpty?(v(),p("option",le,k(I.emptyLabel),1)):X("",!0),(v(!0),p(x,null,P(h.value,l=>(v(),p("optgroup",{key:l.id,label:`${L(l)} · ${l.name}`,"data-agent-type":s(l)},[(v(!0),p(x,null,P(l.models,o=>(v(),p("option",{key:`${l.id}:${o.id}`,value:_(l.id,o.modelId),"data-provider-id":l.id,"data-model-id":o.modelId,"data-agent-type":s(l)},k(A(l,o)),9,de))),128))],8,oe))),128))],42,te)],8,ee))}},ue=J(ne,[["__scopeId","data-v-3e00f414"]]);export{ue as M};
@@ -1,3 +0,0 @@
1
- import{I as ge,n as m,_ as de,a as r,c as d,b as l,E as ue,i as h,t as D,f as re,F as N,y as Ve,l as R,m as E,v as X,q as ie,p as _,k as Oe,A as xe,o as Me,d as $,w as Le,u as v,K as Z,r as H,G as fe,j as Ne,s as Ue,g as qe,x as A,h as Ge}from"./index-B6G18FqB.js";import{g as je,u as Fe}from"./sessions-DH1R-NhV.js";import{u as Pe}from"./EffortLevelSelector-C2378L8e.js";import{u as We,a as Qe,Q as ze}from"./QuickResponseSettings-CDm5vwP7.js";import{a as He}from"./ApiClient-B4YTtyY4.js";import{F as Ke,Q as Ye,u as Je}from"./QuickResponsesPanel-DZ_Lre_l.js";import{S as Xe}from"./SessionFormOptions-DYUISplS.js";import{R as Ze}from"./ResizableTextarea-DiIOEGjN.js";import{S as _e,a as et}from"./SlashCommandWizard-DmTyNG9O.js";import{u as tt}from"./projects-BUiOGmmb.js";import"./ModelSelector-BMpR0DPr.js";import"./providers-Bh1ZiiJi.js";function lt(t){const u=m(""),a=m(!1),f=m("yolo"),o=m(null),k=m(null),x=m(!0),C=m(null),g=m(!0),n=m("worktree"),p=m(""),I=m(!1),y=m(""),M=m(null),V=m(null),K=m(null),w=m({scheduledAt:null,autoRescheduleEnabled:!1,rescheduleDelayMinutes:15,rescheduleOnTokenLimit:!0,rescheduleOnServiceError:!0,maxRescheduleCount:null,maxTotalTokens:null,rescheduleAtTokenCount:null}),S=m({mode:!1,model:!1,thinkingEnabled:!1,startImmediately:!1,quickGitMode:!1,quickWorktreeBranch:!1});function U(c){c.mode&&(f.value=c.mode,S.value.mode=!0),c.model?(o.value=c.model,k.value=c.providerId||null,S.value.model=!0):(o.value="sonnet",k.value=null,S.value.model=!0),c.thinkingEnabled!==null&&c.thinkingEnabled!==void 0&&(x.value=c.thinkingEnabled,S.value.thinkingEnabled=!0),c.effortLevel&&(C.value=c.effortLevel),c.startImmediately!==null&&c.startImmediately!==void 0&&(g.value=c.startImmediately,S.value.startImmediately=!0),c.gitMode&&(n.value=c.gitMode,S.value.quickGitMode=!0),c.gitBranch&&(p.value=c.gitBranch,S.value.quickWorktreeBranch=!0)}function ee(c){const T=localStorage.getItem(t.value);T&&(u.value=T,ge(()=>{c.value&&(c.value.value=T,a.value=T.trim().length>0)}))}function Y(){w.value={scheduledAt:null,autoRescheduleEnabled:!1,rescheduleDelayMinutes:15,rescheduleOnTokenLimit:!0,rescheduleOnServiceError:!0,maxRescheduleCount:null,maxTotalTokens:null,rescheduleAtTokenCount:null}}function q(){I.value=!0}function O(){I.value=!1,p.value=y.value}function L(c){y.value=je("",c),I.value||(p.value=y.value)}return{prompt:u,promptHasContent:a,mode:f,model:o,providerId:k,thinkingEnabled:x,effortLevel:C,startImmediately:g,quickGitMode:n,quickWorktreeBranch:p,editingBranch:I,autoBranchName:y,selectedTemplateId:M,startFromTemplateId:V,parentSessionId:K,schedulingData:w,usingDefaults:S,applyProjectDefaults:U,restoreDraftFromStorage:ee,resetSchedulingData:Y,handleBranchEdit:q,resetBranchName:O,updateAutoBranchName:L}}function nt(t,u){if(!t)return;const a=t.selectionStart,f=t.selectionEnd,o=t.value.substring(0,a),k=t.value.substring(f);t.value=o+u+k,t.selectionStart=t.selectionEnd=a+u.length,t.dispatchEvent(new Event("input",{bubbles:!0})),t.focus()}function ot(t,u){if(!t)return;const a=t.value.trim(),f=a?`${a}
2
-
3
- ${u}`:u;t.value=f,t.dispatchEvent(new Event("input",{bubbles:!0}))}function st(t,u,a){t&&(u.prompt.value=t.prompt,a.value&&(a.value.value=t.prompt,a.value.dispatchEvent(new Event("input",{bubbles:!0}))),t.thinkingEnabled!=null&&(u.thinkingEnabled.value=t.thinkingEnabled),t.model&&(u.model.value=t.model),t.mode&&(u.mode.value=t.mode),t.gitBranch&&(u.quickWorktreeBranch.value=t.gitBranch,u.editingBranch.value=!0),t.gitMode&&(u.quickGitMode.value=t.gitMode),t.effortLevel!=null&&(u.effortLevel.value=t.effortLevel),t.nextTemplateId&&(u.selectedTemplateId.value=t.nextTemplateId))}function at(t,u){const{currentPrompt:a,gitStatus:f,files:o}=u,k=t.quickGitMode.value&&(f!=null&&f.isGitRepo)?t.quickGitMode.value:void 0;return{prompt:a,mode:t.mode.value,model:t.model.value,providerId:t.providerId.value,thinkingEnabled:t.thinkingEnabled.value,effortLevel:t.effortLevel.value,startImmediately:t.startImmediately.value,gitMode:k,gitBranch:k?t.quickWorktreeBranch.value:void 0,files:o,templateId:t.selectedTemplateId.value,parentSessionId:t.parentSessionId.value||null,scheduledAt:t.schedulingData.value.scheduledAt,autoRescheduleEnabled:t.schedulingData.value.autoRescheduleEnabled,rescheduleDelayMinutes:t.schedulingData.value.rescheduleDelayMinutes,rescheduleOnTokenLimit:t.schedulingData.value.rescheduleOnTokenLimit,rescheduleOnServiceError:t.schedulingData.value.rescheduleOnServiceError,maxRescheduleCount:t.schedulingData.value.maxRescheduleCount,maxTotalTokens:t.schedulingData.value.maxTotalTokens,rescheduleAtTokenCount:t.schedulingData.value.rescheduleAtTokenCount}}const ut={key:0,class:"form-group"},it={class:"segmented-control"},rt={key:0,class:"branch-input-row"},dt={class:"quick-branch-input"},mt=["value","placeholder"],ct={key:1,class:"current-branch-hint"},pt={key:1,class:"git-loading"},vt={__name:"GitOptionsPanel",props:{gitStatus:{type:Object,default:null},modelValue:{type:String,default:""},branchName:{type:String,default:""},autoBranchName:{type:String,default:""},editingBranch:{type:Boolean,default:!1},loadingGit:{type:Boolean,default:!1}},emits:["update:modelValue","update:branchName","branchEdit","resetBranch"],setup(t){return(u,a)=>{var f;return r(),d(N,null,[(f=t.gitStatus)!=null&&f.isGitRepo?(r(),d("div",ut,[a[9]||(a[9]=l("label",{class:"form-label"},"Git Options",-1)),l("div",it,[l("button",{type:"button",class:ue(["segment-btn",{"segment-btn--active":t.modelValue==="worktree"}]),onClick:a[0]||(a[0]=o=>u.$emit("update:modelValue","worktree"))},[...a[6]||(a[6]=[l("span",{class:"segment-label-full"},"Worktree",-1),l("span",{class:"segment-label-short"},"WT",-1)])],2),l("button",{type:"button",class:ue(["segment-btn",{"segment-btn--active":t.modelValue==="branch"}]),onClick:a[1]||(a[1]=o=>u.$emit("update:modelValue","branch"))}," Branch ",2),l("button",{type:"button",class:ue(["segment-btn",{"segment-btn--active":t.modelValue===""}]),onClick:a[2]||(a[2]=o=>u.$emit("update:modelValue",""))}," Current ",2)]),t.modelValue?(r(),d("div",rt,[a[7]||(a[7]=l("label",{class:"form-label form-label-small"},"Branch Name",-1)),l("div",dt,[l("input",{value:t.branchName,type:"text",class:"form-input",placeholder:t.autoBranchName,onInput:a[3]||(a[3]=o=>u.$emit("update:branchName",o.target.value)),onFocus:a[4]||(a[4]=o=>u.$emit("branchEdit"))},null,40,mt),t.editingBranch?(r(),d("button",{key:0,type:"button",class:"btn btn-small",onClick:a[5]||(a[5]=o=>u.$emit("resetBranch"))}," Reset ")):h("",!0)]),a[8]||(a[8]=l("p",{class:"form-help"}," Auto-generated from prompt ",-1))])):h("",!0),t.modelValue===""?(r(),d("p",ct," On: "+D(t.gitStatus.currentBranch),1)):h("",!0)])):h("",!0),t.loadingGit?(r(),d("div",pt,[...a[10]||(a[10]=[l("span",{class:"loading-spinner"},null,-1),re(" Loading git info... ",-1)])])):h("",!0)],64)}}},ht=de(vt,[["__scopeId","data-v-59edf73d"]]),ft={class:"scheduling-options"},gt={key:0,class:"form-group"},bt={class:"form-group"},kt={class:"toggle-switch"},yt={key:1,class:"reschedule-settings"},Tt={class:"form-group"},St={class:"checkbox-option"},Et={class:"checkbox-option"},Ct={class:"form-group"},It={class:"limits-section"},Rt={class:"form-group"},wt={class:"form-group"},Bt={class:"form-group"},$t={__name:"SchedulingOptions",props:{modelValue:{type:Object,default:()=>({})},hideScheduledAt:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(t,{emit:u}){const a=t,f=u,o=Ve({scheduledAt:a.modelValue.scheduledAt||null,scheduledAtLocal:"",autoRescheduleEnabled:a.modelValue.autoRescheduleEnabled??!1,rescheduleDelayMinutes:a.modelValue.rescheduleDelayMinutes??15,rescheduleOnTokenLimit:a.modelValue.rescheduleOnTokenLimit??!0,rescheduleOnServiceError:a.modelValue.rescheduleOnServiceError??!0,maxRescheduleCount:a.modelValue.maxRescheduleCount??null,maxTotalTokens:a.modelValue.maxTotalTokens??null,rescheduleAtTokenCount:a.modelValue.rescheduleAtTokenCount??null});function k(){if(o.scheduledAtLocal){const g=new Date(o.scheduledAtLocal);o.scheduledAt=g.getTime()}else o.scheduledAt=null;C()}function x(g){if(!g)return"";const n=new Date(g),p=n.getFullYear(),I=String(n.getMonth()+1).padStart(2,"0"),y=String(n.getDate()).padStart(2,"0"),M=String(n.getHours()).padStart(2,"0"),V=String(n.getMinutes()).padStart(2,"0");return`${p}-${I}-${y}T${M}:${V}`}R(()=>a.modelValue.scheduledAt,g=>{g&&(o.scheduledAtLocal=x(g))},{immediate:!0});function C(){f("update:modelValue",{scheduledAt:o.scheduledAt,autoRescheduleEnabled:o.autoRescheduleEnabled,rescheduleDelayMinutes:o.rescheduleDelayMinutes,rescheduleOnTokenLimit:o.rescheduleOnTokenLimit,rescheduleOnServiceError:o.rescheduleOnServiceError,maxRescheduleCount:o.maxRescheduleCount,maxTotalTokens:o.maxTotalTokens,rescheduleAtTokenCount:o.rescheduleAtTokenCount})}return R(()=>({autoRescheduleEnabled:o.autoRescheduleEnabled,rescheduleDelayMinutes:o.rescheduleDelayMinutes,rescheduleOnTokenLimit:o.rescheduleOnTokenLimit,rescheduleOnServiceError:o.rescheduleOnServiceError,maxRescheduleCount:o.maxRescheduleCount,maxTotalTokens:o.maxTotalTokens,rescheduleAtTokenCount:o.rescheduleAtTokenCount}),()=>{C()},{deep:!0}),(g,n)=>(r(),d("div",ft,[t.hideScheduledAt?h("",!0):(r(),d("div",gt,[n[8]||(n[8]=l("label",{for:"scheduled-at",class:"form-label"},"Schedule Start Time (optional)",-1)),E(l("input",{id:"scheduled-at","onUpdate:modelValue":n[0]||(n[0]=p=>o.scheduledAtLocal=p),type:"datetime-local",class:"form-input",onChange:k},null,544),[[X,o.scheduledAtLocal]]),n[9]||(n[9]=l("p",{class:"form-help"}," Leave empty to start immediately ",-1))])),l("div",bt,[l("label",kt,[E(l("input",{"onUpdate:modelValue":n[1]||(n[1]=p=>o.autoRescheduleEnabled=p),type:"checkbox"},null,512),[[ie,o.autoRescheduleEnabled]]),n[10]||(n[10]=l("span",{class:"toggle-slider"},null,-1)),n[11]||(n[11]=l("span",{class:"toggle-label"},"Auto-reschedule on errors",-1))])]),o.autoRescheduleEnabled?(r(),d("div",yt,[l("div",Tt,[n[14]||(n[14]=l("p",{class:"settings-label"}," Reschedule Triggers ",-1)),l("label",St,[E(l("input",{"onUpdate:modelValue":n[2]||(n[2]=p=>o.rescheduleOnTokenLimit=p),type:"checkbox"},null,512),[[ie,o.rescheduleOnTokenLimit]]),n[12]||(n[12]=l("span",{class:"checkbox-label"},"Token limit errors",-1))]),l("label",Et,[E(l("input",{"onUpdate:modelValue":n[3]||(n[3]=p=>o.rescheduleOnServiceError=p),type:"checkbox"},null,512),[[ie,o.rescheduleOnServiceError]]),n[13]||(n[13]=l("span",{class:"checkbox-label"},"Service unavailability",-1))])]),l("div",Ct,[n[16]||(n[16]=l("label",{for:"reschedule-delay",class:"form-label"},"Reschedule Delay",-1)),E(l("select",{id:"reschedule-delay","onUpdate:modelValue":n[4]||(n[4]=p=>o.rescheduleDelayMinutes=p),class:"form-input"},[...n[15]||(n[15]=[l("option",{value:5}," 5 minutes ",-1),l("option",{value:15}," 15 minutes ",-1),l("option",{value:30}," 30 minutes ",-1),l("option",{value:60}," 1 hour ",-1),l("option",{value:120}," 2 hours ",-1)])],512),[[_,o.rescheduleDelayMinutes,void 0,{number:!0}]])]),l("div",It,[n[23]||(n[23]=l("p",{class:"settings-label"}," Limits (optional) ",-1)),l("div",Rt,[n[17]||(n[17]=l("label",{for:"max-reschedule-count",class:"form-label"},"Max Reschedule Count",-1)),E(l("input",{id:"max-reschedule-count","onUpdate:modelValue":n[5]||(n[5]=p=>o.maxRescheduleCount=p),type:"number",min:"1",max:"100",class:"form-input",placeholder:"Unlimited"},null,512),[[X,o.maxRescheduleCount,void 0,{number:!0}]]),n[18]||(n[18]=l("p",{class:"form-help"}," Stop after N reschedule attempts ",-1))]),l("div",wt,[n[19]||(n[19]=l("label",{for:"max-total-tokens",class:"form-label"},"Max Total Tokens (Hard Limit)",-1)),E(l("input",{id:"max-total-tokens","onUpdate:modelValue":n[6]||(n[6]=p=>o.maxTotalTokens=p),type:"number",min:"1000",step:"1000",class:"form-input",placeholder:"Unlimited"},null,512),[[X,o.maxTotalTokens,void 0,{number:!0}]]),n[20]||(n[20]=l("p",{class:"form-help"}," Stop rescheduling after consuming this many tokens ",-1))]),l("div",Bt,[n[21]||(n[21]=l("label",{for:"reschedule-at-token-count",class:"form-label"},"Reschedule At Token Count",-1)),E(l("input",{id:"reschedule-at-token-count","onUpdate:modelValue":n[7]||(n[7]=p=>o.rescheduleAtTokenCount=p),type:"number",min:"10000",step:"10000",class:"form-input",placeholder:"None"},null,512),[[X,o.rescheduleAtTokenCount,void 0,{number:!0}]]),n[22]||(n[22]=l("p",{class:"form-help"}," Proactively reschedule when session reaches this token count ",-1))])])])):h("",!0)]))}},At=de($t,[["__scopeId","data-v-cfbba021"]]),Dt={class:"container"},Vt={key:0,class:"form-group"},Ot={key:0,label:"Project Templates"},xt=["value"],Mt={key:1,label:"Global Templates"},Lt=["value"],Nt={class:"form-group"},Ut={class:"attachment-row"},qt={key:1,class:"error-message"},Gt={key:1,class:"form-group"},jt={key:0,label:"Project Templates"},Ft=["value"],Pt={key:1,label:"Global Templates"},Wt=["value"],Qt={key:2,class:"form-group"},zt=["value"],Ht={class:"form-actions"},Kt=["disabled"],Yt={key:0,class:"loading-spinner"},Jt={__name:"NewSessionView",setup(t){const u=Ue(),a=Ge(),f=Fe();Oe();const o=Pe(),k=We(),x=tt(),C=A(()=>`new-session-draft-${u.params.id}`),g=lt(C),{prompt:n,promptHasContent:p,mode:I,model:y,providerId:M,thinkingEnabled:V,effortLevel:K,startImmediately:w,quickGitMode:S,quickWorktreeBranch:U,editingBranch:ee,autoBranchName:Y,selectedTemplateId:q,startFromTemplateId:O,parentSessionId:L,schedulingData:c,usingDefaults:T,applyProjectDefaults:be,restoreDraftFromStorage:ke,resetSchedulingData:ye,handleBranchEdit:Te,resetBranchName:Se,updateAutoBranchName:me}=g,B=m(null);let G=null,j=null,F=null;const P=m(!1),te=m(!1),le=m(!1),Ee=A(()=>window.innerWidth<=480?80:120),Ce=Je(()=>{var e;const i=((e=B.value)==null?void 0:e.value)||n.value;!P.value&&i.trim()&&ae()}),W=m(null),ce=m([]),pe=m(null),ve=m(null),Q=A(()=>o.projectTemplates),z=A(()=>o.globalTemplates),ne=A(()=>[...Q.value,...z.value]),he=A(()=>{const i=x.getProjectById(u.params.id);return(i==null?void 0:i.workingDirectory)||null}),oe=A(()=>f.sessions.filter(i=>i.status==="completed").sort((i,e)=>new Date(e.createdAt)-new Date(i.createdAt))),Ie=A(()=>!w.value||ne.value.length>0||oe.value.length>0),se=m(!1),J=m(null);function Re(i){var s;const e=i.target.value,b=e.trim().length>0;p.value!==b&&(p.value=b),G&&clearTimeout(G),G=setTimeout(()=>{n.value=e},150),(s=W.value)!=null&&s.isGitRepo&&(F&&clearTimeout(F),F=setTimeout(()=>me(e),300))}R(()=>W.value,i=>{i!=null&&i.isGitRepo&&!Y.value&&me(n.value)},{immediate:!0}),R(I,()=>{T.value.mode=!1}),R(y,()=>{T.value.model=!1}),R(V,()=>{T.value.thinkingEnabled=!1}),R(w,i=>{T.value.startImmediately=!1,i?ye():ge(()=>{var e;(e=ve.value)==null||e.scrollIntoView({behavior:"smooth",block:"nearest"})})}),R(S,()=>{T.value.quickGitMode=!1}),R(U,()=>{T.value.quickWorktreeBranch=!1}),R(n,i=>{j&&clearTimeout(j),j=setTimeout(()=>{i.trim()?localStorage.setItem(C.value,i):localStorage.removeItem(C.value)},500)}),xe(()=>{F&&clearTimeout(F),G&&clearTimeout(G),j&&clearTimeout(j)}),Me(async()=>{const i=u.params.id;ke(B);try{await k.fetchDefaults(i);const b=k.getDefaultsForProject(i);b?be(b):(y.value="sonnet",T.value.model=!0)}catch(b){console.warn("Failed to fetch project defaults:",b),y.value||(y.value="sonnet",T.value.model=!0)}se.value=!0;try{W.value=await He.getGitStatus(i)}catch{}finally{se.value=!1}o.fetchProjectTemplates(i),Qe().fetchForProject(i),u.query.parentSessionId&&(L.value=u.query.parentSessionId)});function we(){a.push(`/projects/${u.params.id}/sessions`)}function Be({text:i}){nt(B.value,i)}function $e({content:i,autoSubmit:e}){var b;ot(B.value,i),e?setTimeout(()=>ae(),0):(b=B.value)==null||b.blur()}function Ae(){const i=O.value&&o.getTemplateById(O.value);st(i,g,B)}async function ae(){var e,b;const i=((e=B.value)==null?void 0:e.value)||n.value;if(i.trim()){P.value=!0,J.value=null;try{const s=at(g,{currentPrompt:i,gitStatus:W.value,files:ce.value}),De=await f.createSession(u.params.id,s);(b=pe.value)==null||b.clear(),localStorage.removeItem(C.value),a.push(`/sessions/${De.id}?overlay=open`)}catch(s){J.value=s.message}finally{P.value=!1}}}return(i,e)=>{const b=qe("router-link");return r(),d("div",Dt,[$(b,{to:`/projects/${v(u).params.id}/sessions`,class:"back-link"},{default:Le(()=>[...e[17]||(e[17]=[re(" ← Sessions ",-1)])]),_:1},8,["to"]),e[26]||(e[26]=l("h1",null,"New Session",-1)),l("form",{class:"form card",onSubmit:Ne(ae,["prevent"])},[ne.value.length>0?(r(),d("div",Vt,[e[19]||(e[19]=l("label",{class:"form-label",for:"start-from-template"},"Start From Template",-1)),E(l("select",{id:"start-from-template","onUpdate:modelValue":e[0]||(e[0]=s=>Z(O)?O.value=s:null),class:"form-input",title:"Selecting a template will populate all form fields below. You can still edit before starting.",onChange:Ae},[e[18]||(e[18]=l("option",{value:null}," Select a template to pre-fill... ",-1)),Q.value.length?(r(),d("optgroup",Ot,[(r(!0),d(N,null,H(Q.value,s=>(r(),d("option",{key:s.id,value:s.id},D(s.name),9,xt))),128))])):h("",!0),z.value.length?(r(),d("optgroup",Mt,[(r(!0),d(N,null,H(z.value,s=>(r(),d("option",{key:s.id,value:s.id},D(s.name),9,Lt))),128))])):h("",!0)],544),[[_,v(O)]])])):h("",!0),l("div",Nt,[$(Ze,{id:"prompt",ref_key:"textareaRef",ref:B,class:"form-input form-textarea",placeholder:"What would you like the agent to help you with?","min-height":Ee.value,required:"",onInput:Re,onKeydown:v(Ce)},null,8,["min-height","onKeydown"]),l("div",Ut,[$(Ke,{ref_key:"fileAttachment",ref:pe,"onUpdate:files":e[1]||(e[1]=s=>ce.value=s)},null,512),he.value?(r(),fe(_e,{key:0,onOpen:e[2]||(e[2]=s=>te.value=!0)})):h("",!0)])]),$(Ye,{"show-empty":!0,onInsert:$e,onOpenSettings:e[3]||(e[3]=s=>le.value=!0)}),$(Xe,{mode:v(I),model:v(y),"provider-id":v(M),"effort-level":v(K),"thinking-enabled":v(V),"start-immediately":v(w),"onUpdate:mode":e[4]||(e[4]=s=>I.value=s),"onUpdate:model":e[5]||(e[5]=s=>y.value=s),"onUpdate:providerId":e[6]||(e[6]=s=>M.value=s),"onUpdate:effortLevel":e[7]||(e[7]=s=>K.value=s),"onUpdate:thinkingEnabled":e[8]||(e[8]=s=>V.value=s),"onUpdate:startImmediately":e[9]||(e[9]=s=>w.value=s)},null,8,["mode","model","provider-id","effort-level","thinking-enabled","start-immediately"]),J.value?(r(),d("div",qt,D(J.value),1)):h("",!0),$(ht,{"git-status":W.value,"model-value":v(S),"branch-name":v(U),"auto-branch-name":v(Y),"editing-branch":v(ee),"loading-git":se.value,"onUpdate:modelValue":e[10]||(e[10]=s=>S.value=s),"onUpdate:branchName":e[11]||(e[11]=s=>U.value=s),onBranchEdit:v(Te),onResetBranch:v(Se)},null,8,["git-status","model-value","branch-name","auto-branch-name","editing-branch","loading-git","onBranchEdit","onResetBranch"]),Ie.value?(r(),d("div",{key:2,ref_key:"advancedOptionsRef",ref:ve,class:"advanced-options"},[v(w)?h("",!0):(r(),fe(At,{key:0,modelValue:v(c),"onUpdate:modelValue":e[12]||(e[12]=s=>Z(c)?c.value=s:null)},null,8,["modelValue"])),ne.value.length>0?(r(),d("div",Gt,[e[21]||(e[21]=l("label",{class:"form-label",for:"template"},"Next Template (optional)",-1)),E(l("select",{id:"template","onUpdate:modelValue":e[13]||(e[13]=s=>Z(q)?q.value=s:null),class:"form-input"},[e[20]||(e[20]=l("option",{value:null}," None - single session ",-1)),Q.value.length?(r(),d("optgroup",jt,[(r(!0),d(N,null,H(Q.value,s=>(r(),d("option",{key:s.id,value:s.id},D(s.name),9,Ft))),128))])):h("",!0),z.value.length?(r(),d("optgroup",Pt,[(r(!0),d(N,null,H(z.value,s=>(r(),d("option",{key:s.id,value:s.id},D(s.name),9,Wt))),128))])):h("",!0)],512),[[_,v(q)]]),e[22]||(e[22]=l("p",{class:"form-help"}," After this session completes, the selected template will automatically start a new session. ",-1))])):h("",!0),oe.value.length>0?(r(),d("div",Qt,[e[24]||(e[24]=l("label",{class:"form-label",for:"parent-session"},"Parent Session (optional)",-1)),E(l("select",{id:"parent-session","onUpdate:modelValue":e[14]||(e[14]=s=>Z(L)?L.value=s:null),class:"form-input"},[e[23]||(e[23]=l("option",{value:null}," None - create standalone session ",-1)),(r(!0),d(N,null,H(oe.value,s=>(r(),d("option",{key:s.id,value:s.id},D(s.name),9,zt))),128))],512),[[_,v(L)]]),e[25]||(e[25]=l("p",{class:"form-help"}," Choose a parent session to link this as a child session. Child sessions help organize related work. ",-1))])):h("",!0)],512)):h("",!0),l("div",Ht,[l("button",{type:"button",class:"btn btn-secondary",onClick:we}," Cancel "),l("button",{type:"submit",class:"btn btn-primary btn-submit",disabled:P.value},[P.value?(r(),d("span",Yt)):h("",!0),re(" "+D(v(w)?"Start Session":"Create Draft"),1)],8,Kt)])],32),$(et,{"is-open":te.value,"onUpdate:isOpen":e[15]||(e[15]=s=>te.value=s),"working-directory":he.value||"",mode:"insert","hide-builtin":!0,onInsert:Be},null,8,["is-open","working-directory"]),$(ze,{"is-open":le.value,"project-id":v(u).params.id,onClose:e[16]||(e[16]=s=>le.value=!1)},null,8,["is-open","project-id"])])}}},rl=de(Jt,[["__scopeId","data-v-3e37bc7e"]]);export{rl as default};