circuschief 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +33 -0
- package/packages/server/bin/cli.js +4 -0
- package/packages/server/src/agents/AgentGateway.js +64 -0
- package/packages/server/src/agents/BaseAgent.js +41 -0
- package/packages/server/src/agents/LoggingAgentWrapper.js +73 -0
- package/packages/server/src/agents/adapters/ClaudeCodeAdapter.js +33 -0
- package/packages/server/src/agents/adapters/CodexAdapter.js +26 -0
- package/packages/server/src/agents/types.js +43 -0
- package/packages/server/src/agents/vcr/CassetteStore.js +111 -0
- package/packages/server/src/agents/vcr/VCRAgentAdapter.js +126 -0
- package/packages/server/src/agents/vcr/VCRSummaryWrapper.js +71 -0
- package/packages/server/src/api/canvas-helpers.js +249 -0
- package/packages/server/src/api/canvas-trash-routes.js +205 -0
- package/packages/server/src/api/canvas.js +331 -0
- package/packages/server/src/api/commandButtons.js +312 -0
- package/packages/server/src/api/commands.js +169 -0
- package/packages/server/src/api/filesystem.js +62 -0
- package/packages/server/src/api/git.js +85 -0
- package/packages/server/src/api/index.js +44 -0
- package/packages/server/src/api/kanban.js +342 -0
- package/packages/server/src/api/metrics.js +194 -0
- package/packages/server/src/api/projects-helpers.js +43 -0
- package/packages/server/src/api/projects-session-helpers.js +295 -0
- package/packages/server/src/api/projects.js +384 -0
- package/packages/server/src/api/providers.js +249 -0
- package/packages/server/src/api/quickResponses.js +129 -0
- package/packages/server/src/api/sessions-archive.js +69 -0
- package/packages/server/src/api/sessions-commands.js +220 -0
- package/packages/server/src/api/sessions-conversations.js +168 -0
- package/packages/server/src/api/sessions-draft.js +72 -0
- package/packages/server/src/api/sessions-lifecycle.js +190 -0
- package/packages/server/src/api/sessions-messages.js +141 -0
- package/packages/server/src/api/sessions-notes.js +51 -0
- package/packages/server/src/api/sessions-patch.js +252 -0
- package/packages/server/src/api/sessions-streaming.js +86 -0
- package/packages/server/src/api/sessions.js +269 -0
- package/packages/server/src/api/settings.js +194 -0
- package/packages/server/src/api/templates.js +63 -0
- package/packages/server/src/app.js +51 -0
- package/packages/server/src/database.js +58 -0
- package/packages/server/src/db/AgentCallLogRepository.js +322 -0
- package/packages/server/src/db/AttachmentRepository.js +191 -0
- package/packages/server/src/db/BaseRepository.js +39 -0
- package/packages/server/src/db/CanvasItemRepository.js +315 -0
- package/packages/server/src/db/CommandButtonRepository.js +75 -0
- package/packages/server/src/db/CommandRunRepository.js +219 -0
- package/packages/server/src/db/ConversationRepository.js +379 -0
- package/packages/server/src/db/DatabaseManager.js +91 -0
- package/packages/server/src/db/KanbanBoardRepository.js +92 -0
- package/packages/server/src/db/KanbanCardRepository.js +286 -0
- package/packages/server/src/db/KanbanLaneRepository.js +279 -0
- package/packages/server/src/db/MessageRepository.js +156 -0
- package/packages/server/src/db/ProjectDefaultsRepository.js +173 -0
- package/packages/server/src/db/ProjectRepository.js +110 -0
- package/packages/server/src/db/ProviderRepository.js +307 -0
- package/packages/server/src/db/QuickResponseRepository.js +186 -0
- package/packages/server/src/db/SessionNoteRepository.js +60 -0
- package/packages/server/src/db/SessionRepository.js +314 -0
- package/packages/server/src/db/SessionSummaryRepository.js +200 -0
- package/packages/server/src/db/SessionTemplateRepository.js +171 -0
- package/packages/server/src/db/SettingsRepository.js +211 -0
- package/packages/server/src/db/TodoRepository.js +132 -0
- package/packages/server/src/db/WorkLogRepository.js +122 -0
- package/packages/server/src/db/conversation-helpers.js +119 -0
- package/packages/server/src/db/index.js +100 -0
- package/packages/server/src/db/migrations/canvasItemsMigrations.js +109 -0
- package/packages/server/src/db/migrations/conversationsMigrations.js +183 -0
- package/packages/server/src/db/migrations/index.js +199 -0
- package/packages/server/src/db/migrations/kanbanMigrations.js +99 -0
- package/packages/server/src/db/migrations/migrationUtils.js +55 -0
- package/packages/server/src/db/migrations/miscMigrations.js +242 -0
- package/packages/server/src/db/migrations/projectsMigrations.js +95 -0
- package/packages/server/src/db/migrations/sessionsMigrations.js +282 -0
- package/packages/server/src/db/session-helpers.js +150 -0
- package/packages/server/src/index.js +106 -0
- package/packages/server/src/logger.js +22 -0
- package/packages/server/src/middleware/sessionLookup.js +57 -0
- package/packages/server/src/middleware/upload.js +94 -0
- package/packages/server/src/schema.sql +363 -0
- package/packages/server/src/services/agentCallLogger.js +116 -0
- package/packages/server/src/services/canvasStore.js +56 -0
- package/packages/server/src/services/childSessionContext.js +61 -0
- package/packages/server/src/services/commandRunner.js +422 -0
- package/packages/server/src/services/conversationContext.js +72 -0
- package/packages/server/src/services/diffService.js +172 -0
- package/packages/server/src/services/draftSessionService.js +181 -0
- package/packages/server/src/services/encryption.js +134 -0
- package/packages/server/src/services/ghService.js +169 -0
- package/packages/server/src/services/gitService.js +520 -0
- package/packages/server/src/services/gitSessionSetup.js +48 -0
- package/packages/server/src/services/hookService.js +60 -0
- package/packages/server/src/services/kanbanService.js +262 -0
- package/packages/server/src/services/kanbanTriggers.js +273 -0
- package/packages/server/src/services/nodeSpawnHelper.js +63 -0
- package/packages/server/src/services/prStatusService.js +204 -0
- package/packages/server/src/services/prUrlService.js +224 -0
- package/packages/server/src/services/providerTestService.js +81 -0
- package/packages/server/src/services/scheduleService.js +110 -0
- package/packages/server/src/services/schedulerService.js +281 -0
- package/packages/server/src/services/sessionDuplicator.js +63 -0
- package/packages/server/src/services/sessionErrors.js +173 -0
- package/packages/server/src/services/sessionExecution.js +378 -0
- package/packages/server/src/services/sessionManager.js +356 -0
- package/packages/server/src/services/sessionPrompts.js +427 -0
- package/packages/server/src/services/sessionProvider.js +107 -0
- package/packages/server/src/services/slashCommandDiscovery.js +258 -0
- package/packages/server/src/services/slashCommandPluginDiscovery.js +216 -0
- package/packages/server/src/services/slashCommandService.js +306 -0
- package/packages/server/src/services/streamEventCallbacks.js +170 -0
- package/packages/server/src/services/streamEventHandler.js +488 -0
- package/packages/server/src/services/streamUsageHandler.js +228 -0
- package/packages/server/src/services/summaryBroadcast.js +61 -0
- package/packages/server/src/services/summaryClaudeClient.js +180 -0
- package/packages/server/src/services/summaryPrompts.js +169 -0
- package/packages/server/src/services/summaryService.js +552 -0
- package/packages/server/src/services/summaryStaleCheck.js +35 -0
- package/packages/server/src/services/systemMonitor.js +281 -0
- package/packages/server/src/services/templateTriggerService.js +197 -0
- package/packages/server/src/services/terminalOutput.js +160 -0
- package/packages/server/src/services/todoStore.js +58 -0
- package/packages/server/src/services/usageTracker.js +69 -0
- package/packages/server/src/services/withConcurrencyGuard.js +110 -0
- package/packages/server/src/websocket.js +10 -0
- package/packages/server/src/ws/WebSocketManager.js +240 -0
- package/packages/server/src/ws/index.js +50 -0
- package/packages/shared/package.json +27 -0
- package/packages/shared/src/constants.js +44 -0
- package/packages/shared/src/contracts/canvas.js +25 -0
- package/packages/shared/src/contracts/commandButtons.js +36 -0
- package/packages/shared/src/contracts/kanban.js +142 -0
- package/packages/shared/src/contracts/projects.js +63 -0
- package/packages/shared/src/contracts/providers.js +81 -0
- package/packages/shared/src/contracts/quickResponses.js +44 -0
- package/packages/shared/src/contracts/sessions.js +112 -0
- package/packages/shared/src/contracts/templates.js +51 -0
- package/packages/shared/src/index.js +5 -0
- package/packages/shared/src/protocol.js +76 -0
- package/packages/shared/src/routeParams.js +36 -0
- package/packages/shared/src/types.js +167 -0
- package/packages/shared/src/utils.js +101 -0
- package/packages/web/dist/assets/ActiveSessionsView-BQc76Jc8.js +1 -0
- package/packages/web/dist/assets/ActiveSessionsView-ofSvx-K1.css +1 -0
- package/packages/web/dist/assets/AgentLogsView-CTCjHjsu.js +2 -0
- package/packages/web/dist/assets/AgentLogsView-D90PnQVk.css +1 -0
- package/packages/web/dist/assets/ApiClient-Dbs1H78V.js +1 -0
- package/packages/web/dist/assets/ArchiveConfirmModal-CCxSZ52u.js +1 -0
- package/packages/web/dist/assets/ArchiveConfirmModal-CQZeuYBz.css +1 -0
- package/packages/web/dist/assets/CommandButtonDetailView-CF_-LXpU.js +1 -0
- package/packages/web/dist/assets/CommandButtonDetailView-DBm3rzhw.css +1 -0
- package/packages/web/dist/assets/EffortLevelSelector-BQaQmU2d.css +1 -0
- package/packages/web/dist/assets/EffortLevelSelector-DPofLvm-.js +1 -0
- package/packages/web/dist/assets/GeneralSettingsView-BCf53fpC.css +1 -0
- package/packages/web/dist/assets/GeneralSettingsView-BY1G-Kv8.js +1 -0
- package/packages/web/dist/assets/InterpolationHelp-CgdbNcJB.js +1 -0
- package/packages/web/dist/assets/InterpolationHelp-iNxTxmhs.css +1 -0
- package/packages/web/dist/assets/MarkdownEditor-CqT1U8lo.js +2 -0
- package/packages/web/dist/assets/MarkdownEditor-enuH2yvP.css +1 -0
- package/packages/web/dist/assets/ModelSelector-BBn_Ve0D.js +1 -0
- package/packages/web/dist/assets/ModelSelector-DPPD-92R.css +1 -0
- package/packages/web/dist/assets/NewSessionView-Bo5l49nu.js +3 -0
- package/packages/web/dist/assets/NewSessionView-Byoi1XdQ.css +1 -0
- package/packages/web/dist/assets/PathChooser-BoMGzeg2.css +1 -0
- package/packages/web/dist/assets/PathChooser-Cx9gQ-Qt.js +1 -0
- package/packages/web/dist/assets/ProjectEditView-BFuscj-V.js +1 -0
- package/packages/web/dist/assets/ProjectEditView-DNwBUNRk.css +1 -0
- package/packages/web/dist/assets/ProjectListView-C55H1JHQ.css +1 -0
- package/packages/web/dist/assets/ProjectListView-Dj0jBZ46.js +1 -0
- package/packages/web/dist/assets/ProjectNewView-Brdp-xUu.js +1 -0
- package/packages/web/dist/assets/ProjectNewView-CpgE4R-l.css +1 -0
- package/packages/web/dist/assets/ProvidersView-B_QQF3RM.css +1 -0
- package/packages/web/dist/assets/ProvidersView-Cxc-1skq.js +1 -0
- package/packages/web/dist/assets/QuickResponseSettings-B2eVAtHW.js +1 -0
- package/packages/web/dist/assets/QuickResponseSettings-B8188A1D.css +1 -0
- package/packages/web/dist/assets/QuickResponsesPanel-DIBQFj0W.css +1 -0
- package/packages/web/dist/assets/QuickResponsesPanel-lU8pW2B0.js +1 -0
- package/packages/web/dist/assets/ResizableTextarea-B5nAA0RV.css +1 -0
- package/packages/web/dist/assets/ResizableTextarea-DSy1mWGY.js +1 -0
- package/packages/web/dist/assets/SessionCard-BvjLwVYg.js +1 -0
- package/packages/web/dist/assets/SessionCard-D20G3bX8.css +1 -0
- package/packages/web/dist/assets/SessionDetailView-BQbPg-RJ.js +36 -0
- package/packages/web/dist/assets/SessionDetailView-BrMG4p2-.css +1 -0
- package/packages/web/dist/assets/SessionFormOptions-BgqFR-5f.js +1 -0
- package/packages/web/dist/assets/SessionFormOptions-BuLlDF-7.css +1 -0
- package/packages/web/dist/assets/SessionListView-BAIBtJF7.css +1 -0
- package/packages/web/dist/assets/SessionListView-CYIHI8qF.js +1 -0
- package/packages/web/dist/assets/SessionLogStream-B-FwUMJQ.js +18 -0
- package/packages/web/dist/assets/SessionLogStream-zPUTiGbe.css +1 -0
- package/packages/web/dist/assets/SettingsView-DC8-hTQ-.css +1 -0
- package/packages/web/dist/assets/SettingsView-fZxpiGp7.js +1 -0
- package/packages/web/dist/assets/SlashCommandWizard-BB30cSvo.css +1 -0
- package/packages/web/dist/assets/SlashCommandWizard-BgaOw9W3.js +1 -0
- package/packages/web/dist/assets/SummarySettingsView-DcsmSVJI.css +1 -0
- package/packages/web/dist/assets/SummarySettingsView-eeu1Xq86.js +1 -0
- package/packages/web/dist/assets/TemplateDetailView-DEPKSwDo.js +1 -0
- package/packages/web/dist/assets/TemplateDetailView-DT2m06W7.css +1 -0
- package/packages/web/dist/assets/apl-B4CMkyY2.js +1 -0
- package/packages/web/dist/assets/asciiarmor-Df11BRmG.js +1 -0
- package/packages/web/dist/assets/asn1-EdZsLKOL.js +1 -0
- package/packages/web/dist/assets/asterisk-B-8jnY81.js +1 -0
- package/packages/web/dist/assets/brainfuck-C4LP7Hcl.js +1 -0
- package/packages/web/dist/assets/clike-B9uivgTg.js +1 -0
- package/packages/web/dist/assets/clojure-BMjYHr_A.js +1 -0
- package/packages/web/dist/assets/cmake-BQqOBYOt.js +1 -0
- package/packages/web/dist/assets/cobol-CWcv1MsR.js +1 -0
- package/packages/web/dist/assets/coffeescript-S37ZYGWr.js +1 -0
- package/packages/web/dist/assets/commandButtons-DNSHH8IA.js +4 -0
- package/packages/web/dist/assets/commonlisp-DBKNyK5s.js +1 -0
- package/packages/web/dist/assets/crystal-SjHAIU92.js +1 -0
- package/packages/web/dist/assets/css-BnMrqG3P.js +1 -0
- package/packages/web/dist/assets/cypher-C_CwsFkJ.js +1 -0
- package/packages/web/dist/assets/d-pRatUO7H.js +1 -0
- package/packages/web/dist/assets/diff-DbItnlRl.js +1 -0
- package/packages/web/dist/assets/dockerfile-BKs6k2Af.js +1 -0
- package/packages/web/dist/assets/dtd-DF_7sFjM.js +1 -0
- package/packages/web/dist/assets/dylan-DwRh75JA.js +1 -0
- package/packages/web/dist/assets/ebnf-CDyGwa7X.js +1 -0
- package/packages/web/dist/assets/ecl-Cabwm37j.js +1 -0
- package/packages/web/dist/assets/eiffel-CnydiIhH.js +1 -0
- package/packages/web/dist/assets/elm-vLlmbW-K.js +1 -0
- package/packages/web/dist/assets/erlang-BNw1qcRV.js +1 -0
- package/packages/web/dist/assets/factor-kuTfRLto.js +1 -0
- package/packages/web/dist/assets/fcl-Kvtd6kyn.js +1 -0
- package/packages/web/dist/assets/forth-Ffai-XNe.js +1 -0
- package/packages/web/dist/assets/fortran-DYz_wnZ1.js +1 -0
- package/packages/web/dist/assets/gas-Bneqetm1.js +1 -0
- package/packages/web/dist/assets/gherkin-heZmZLOM.js +1 -0
- package/packages/web/dist/assets/groovy-D9Dt4D0W.js +1 -0
- package/packages/web/dist/assets/haskell-BWDZoCOh.js +1 -0
- package/packages/web/dist/assets/haxe-H-WmDvRZ.js +1 -0
- package/packages/web/dist/assets/http-DBlCnlav.js +1 -0
- package/packages/web/dist/assets/idl-BEugSyMb.js +1 -0
- package/packages/web/dist/assets/index-BZlHgDSz.js +1 -0
- package/packages/web/dist/assets/index-BhWX8AfE.js +2 -0
- package/packages/web/dist/assets/index-Bi3XvF_f.js +1 -0
- package/packages/web/dist/assets/index-BqXoPf_D.js +1 -0
- package/packages/web/dist/assets/index-CAuTOZSD.js +1 -0
- package/packages/web/dist/assets/index-CKYk-fkb.js +1 -0
- package/packages/web/dist/assets/index-CTumW_tV.js +318 -0
- package/packages/web/dist/assets/index-CVOJVSsC.js +82 -0
- package/packages/web/dist/assets/index-CXK2Z3_z.js +1 -0
- package/packages/web/dist/assets/index-CYllQ3Vd.js +1 -0
- package/packages/web/dist/assets/index-CpsfI08O.js +1 -0
- package/packages/web/dist/assets/index-DQkhDeTA.js +3 -0
- package/packages/web/dist/assets/index-DWP8iCBp.js +1 -0
- package/packages/web/dist/assets/index-DkVb9W_J.js +1 -0
- package/packages/web/dist/assets/index-DmKHPbIa.js +1 -0
- package/packages/web/dist/assets/index-DrlQi03X.js +1 -0
- package/packages/web/dist/assets/index-gmCCsCQ1.css +1 -0
- package/packages/web/dist/assets/index-prTEzzgO.js +1 -0
- package/packages/web/dist/assets/index-wqgejMCM.js +1 -0
- package/packages/web/dist/assets/index-yh0ZHIWw.js +7 -0
- package/packages/web/dist/assets/javascript-qCveANmP.js +1 -0
- package/packages/web/dist/assets/julia-DuME0IfC.js +1 -0
- package/packages/web/dist/assets/livescript-BwQOo05w.js +1 -0
- package/packages/web/dist/assets/lua-BgMRiT3U.js +1 -0
- package/packages/web/dist/assets/mathematica-DTrFuWx2.js +1 -0
- package/packages/web/dist/assets/mbox-CNhZ1qSd.js +1 -0
- package/packages/web/dist/assets/mirc-CjQqDB4T.js +1 -0
- package/packages/web/dist/assets/mllike-CXdrOF99.js +1 -0
- package/packages/web/dist/assets/modelica-Dc1JOy9r.js +1 -0
- package/packages/web/dist/assets/mscgen-BA5vi2Kp.js +1 -0
- package/packages/web/dist/assets/mumps-BT43cFF4.js +1 -0
- package/packages/web/dist/assets/nginx-DdIZxoE0.js +1 -0
- package/packages/web/dist/assets/nsis-LdVXkNf5.js +1 -0
- package/packages/web/dist/assets/ntriples-BfvgReVJ.js +1 -0
- package/packages/web/dist/assets/octave-Ck1zUtKM.js +1 -0
- package/packages/web/dist/assets/oz-BzwKVEFT.js +1 -0
- package/packages/web/dist/assets/pascal--L3eBynH.js +1 -0
- package/packages/web/dist/assets/perl-CdXCOZ3F.js +1 -0
- package/packages/web/dist/assets/pig-CevX1Tat.js +1 -0
- package/packages/web/dist/assets/powershell-CFHJl5sT.js +1 -0
- package/packages/web/dist/assets/projects-DbBQQH-V.js +1 -0
- package/packages/web/dist/assets/properties-C78fOPTZ.js +1 -0
- package/packages/web/dist/assets/protobuf-ChK-085T.js +1 -0
- package/packages/web/dist/assets/providers-ceCc4xRU.js +1 -0
- package/packages/web/dist/assets/pug-DukmZTjD.js +1 -0
- package/packages/web/dist/assets/puppet-DMA9R1ak.js +1 -0
- package/packages/web/dist/assets/python-BuPzkPfP.js +1 -0
- package/packages/web/dist/assets/q-pXgVlZs6.js +1 -0
- package/packages/web/dist/assets/r-DUYO_cvP.js +1 -0
- package/packages/web/dist/assets/rpm-CTu-6PCP.js +1 -0
- package/packages/web/dist/assets/ruby-B2Rjki9n.js +1 -0
- package/packages/web/dist/assets/sas-B4kiWyti.js +1 -0
- package/packages/web/dist/assets/scheme-C41bIUwD.js +1 -0
- package/packages/web/dist/assets/sessions-D681M81k.js +1 -0
- package/packages/web/dist/assets/settings-D0evez2V.js +1 -0
- package/packages/web/dist/assets/shell-CjFT_Tl9.js +1 -0
- package/packages/web/dist/assets/sieve-C3Gn_uJK.js +1 -0
- package/packages/web/dist/assets/simple-mode-GW_nhZxv.js +1 -0
- package/packages/web/dist/assets/smalltalk-CnHTOXQT.js +1 -0
- package/packages/web/dist/assets/solr-DehyRSwq.js +1 -0
- package/packages/web/dist/assets/sparql-DkYu6x3z.js +1 -0
- package/packages/web/dist/assets/spreadsheet-BCZA_wO0.js +1 -0
- package/packages/web/dist/assets/sql-D0XecflT.js +1 -0
- package/packages/web/dist/assets/stex-C3f8Ysf7.js +1 -0
- package/packages/web/dist/assets/style-BTin-zR_.css +1 -0
- package/packages/web/dist/assets/stylus-B533Al4x.js +1 -0
- package/packages/web/dist/assets/swift-BzpIVaGY.js +1 -0
- package/packages/web/dist/assets/tcl-DVfN8rqt.js +1 -0
- package/packages/web/dist/assets/textile-CnDTJFAw.js +1 -0
- package/packages/web/dist/assets/tiddlywiki-DO-Gjzrf.js +1 -0
- package/packages/web/dist/assets/tiki-DGYXhP31.js +1 -0
- package/packages/web/dist/assets/toml-Bm5Em-hy.js +1 -0
- package/packages/web/dist/assets/troff-wAsdV37c.js +1 -0
- package/packages/web/dist/assets/ttcn-CfJYG6tj.js +1 -0
- package/packages/web/dist/assets/ttcn-cfg-B9xdYoR4.js +1 -0
- package/packages/web/dist/assets/turtle-B1tBg_DP.js +1 -0
- package/packages/web/dist/assets/vb-CmGdzxic.js +1 -0
- package/packages/web/dist/assets/vbscript-BuJXcnF6.js +1 -0
- package/packages/web/dist/assets/velocity-D8B20fx6.js +1 -0
- package/packages/web/dist/assets/verilog-C6RDOZhf.js +1 -0
- package/packages/web/dist/assets/vhdl-lSbBsy5d.js +1 -0
- package/packages/web/dist/assets/webidl-ZXfAyPTL.js +1 -0
- package/packages/web/dist/assets/xquery-CQfU5ijd.js +1 -0
- package/packages/web/dist/assets/yacas-BJ4BC0dw.js +1 -0
- package/packages/web/dist/assets/z80-Hz9HOZM7.js +1 -0
- package/packages/web/dist/favicon.png +0 -0
- package/packages/web/dist/index.html +17 -0
- package/packages/web/dist/logo.png +0 -0
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @typedef {'starting' | 'running' | 'waiting' | 'stopped' | 'error'} SessionStatus
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @typedef {'plan' | 'standard' | 'yolo'} SessionMode
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* @typedef {'claude-sonnet-4-6' | 'claude-opus-4-6' | 'claude-haiku-4-5-20251001'} ClaudeModel
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* @typedef {'low' | 'medium' | 'high' | 'max' | 'auto'} EffortLevel
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* @typedef {'user' | 'assistant' | 'system'} MessageRole
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* @typedef {'image' | 'markdown' | 'text' | 'json'} CanvasItemType
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* @typedef {'command' | 'prompt'} ToolTemplatePayloadType
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* @typedef {Object} Project
|
|
31
|
+
* @property {string} id
|
|
32
|
+
* @property {string} name
|
|
33
|
+
* @property {string} workingDirectory
|
|
34
|
+
* @property {number} createdAt
|
|
35
|
+
* @property {number} updatedAt
|
|
36
|
+
*/
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* @typedef {Object} Session
|
|
40
|
+
* @property {string} id
|
|
41
|
+
* @property {string} projectId
|
|
42
|
+
* @property {string} name
|
|
43
|
+
* @property {SessionStatus} status
|
|
44
|
+
* @property {SessionMode} mode
|
|
45
|
+
* @property {ClaudeModel|null} model
|
|
46
|
+
* @property {EffortLevel|null} effortLevel
|
|
47
|
+
* @property {string|null} gitBranch
|
|
48
|
+
* @property {string|null} gitWorktree
|
|
49
|
+
* @property {string|null} prUrl
|
|
50
|
+
* @property {string|null} error
|
|
51
|
+
* @property {number} createdAt
|
|
52
|
+
* @property {number} updatedAt
|
|
53
|
+
*/
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* @typedef {Object} ConversationMessage
|
|
57
|
+
* @property {string} id
|
|
58
|
+
* @property {string} sessionId
|
|
59
|
+
* @property {MessageRole} role
|
|
60
|
+
* @property {string} content
|
|
61
|
+
* @property {Object[]|null} toolUse
|
|
62
|
+
* @property {number} timestamp
|
|
63
|
+
*/
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* @typedef {Object} CanvasItem
|
|
67
|
+
* @property {string} id
|
|
68
|
+
* @property {string|null} sessionId
|
|
69
|
+
* @property {CanvasItemType} type
|
|
70
|
+
* @property {string|null} content
|
|
71
|
+
* @property {string|null} data
|
|
72
|
+
* @property {string|null} mimeType
|
|
73
|
+
* @property {string|null} filename
|
|
74
|
+
* @property {string|null} label
|
|
75
|
+
* @property {number|null} width
|
|
76
|
+
* @property {number|null} height
|
|
77
|
+
* @property {number} createdAt
|
|
78
|
+
*/
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* @typedef {Object} SessionNote
|
|
82
|
+
* @property {string} id
|
|
83
|
+
* @property {string} sessionId
|
|
84
|
+
* @property {string} content
|
|
85
|
+
* @property {number} createdAt
|
|
86
|
+
* @property {number} updatedAt
|
|
87
|
+
*/
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* @typedef {Object} GlobalToolTemplate
|
|
91
|
+
* @property {string} id
|
|
92
|
+
* @property {string} name
|
|
93
|
+
* @property {string} payload
|
|
94
|
+
* @property {'command'} payloadType
|
|
95
|
+
* @property {number} createdAt
|
|
96
|
+
* @property {number} updatedAt
|
|
97
|
+
*/
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* @typedef {Object} ProjectToolTemplate
|
|
101
|
+
* @property {string} id
|
|
102
|
+
* @property {string} projectId
|
|
103
|
+
* @property {string} name
|
|
104
|
+
* @property {string} payload
|
|
105
|
+
* @property {ToolTemplatePayloadType} payloadType
|
|
106
|
+
* @property {number} createdAt
|
|
107
|
+
* @property {number} updatedAt
|
|
108
|
+
*/
|
|
109
|
+
|
|
110
|
+
export const SESSION_STATUSES = ['starting', 'running', 'waiting', 'stopped', 'error'];
|
|
111
|
+
export const SESSION_MODES = ['plan', 'standard', 'yolo'];
|
|
112
|
+
export const EFFORT_LEVELS = ['low', 'medium', 'high', 'max', 'auto'];
|
|
113
|
+
export const MESSAGE_ROLES = ['user', 'assistant', 'system'];
|
|
114
|
+
export const CANVAS_ITEM_TYPES = ['image', 'markdown', 'text', 'json'];
|
|
115
|
+
export const TOOL_TEMPLATE_PAYLOAD_TYPES = ['command', 'prompt'];
|
|
116
|
+
|
|
117
|
+
export const CLAUDE_MODELS = [
|
|
118
|
+
{ id: 'claude-haiku-4-5-20251001', name: 'Haiku 4.5', description: 'Fast & lightweight' },
|
|
119
|
+
{ id: 'claude-sonnet-4-6', name: 'Sonnet 4.6', description: 'Balanced' },
|
|
120
|
+
{ id: 'claude-opus-4-6', name: 'Opus 4.6', description: 'Most capable (default)' },
|
|
121
|
+
];
|
|
122
|
+
export const DEFAULT_MODEL = 'claude-opus-4-6';
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* @typedef {Object} KanbanBoard
|
|
126
|
+
* @property {string} id
|
|
127
|
+
* @property {string} projectId
|
|
128
|
+
* @property {KanbanLane[]} lanes
|
|
129
|
+
* @property {number} createdAt
|
|
130
|
+
* @property {number} updatedAt
|
|
131
|
+
*/
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* @typedef {Object} KanbanLane
|
|
135
|
+
* @property {string} id
|
|
136
|
+
* @property {string} boardId
|
|
137
|
+
* @property {string} name
|
|
138
|
+
* @property {number} sortOrder
|
|
139
|
+
* @property {string|null} onEnterTemplateId
|
|
140
|
+
* @property {number} createdAt
|
|
141
|
+
* @property {number} updatedAt
|
|
142
|
+
*/
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* @typedef {Object} KanbanCard
|
|
146
|
+
* @property {string} id
|
|
147
|
+
* @property {string} laneId
|
|
148
|
+
* @property {number} sortOrder
|
|
149
|
+
* @property {KanbanCardSession[]} sessions
|
|
150
|
+
* @property {number} createdAt
|
|
151
|
+
* @property {number} updatedAt
|
|
152
|
+
*/
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* @typedef {Object} KanbanCardSession
|
|
156
|
+
* @property {string} id
|
|
157
|
+
* @property {string} name
|
|
158
|
+
* @property {SessionStatus} status
|
|
159
|
+
* @property {SessionMode} [mode]
|
|
160
|
+
* @property {number} [costUsd]
|
|
161
|
+
* @property {boolean} [starred]
|
|
162
|
+
* @property {string|null} [prUrl]
|
|
163
|
+
* @property {number} createdAt
|
|
164
|
+
* @property {number} updatedAt
|
|
165
|
+
*/
|
|
166
|
+
|
|
167
|
+
export const DEFAULT_KANBAN_LANES = ['To Do', 'In Progress', 'Review', 'Done'];
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { DEFAULT_TOKEN_COST_WEIGHTS } from './constants.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Generate a short random ID (4 hex characters)
|
|
5
|
+
* @returns {string}
|
|
6
|
+
*/
|
|
7
|
+
export function generateShortId() {
|
|
8
|
+
return Math.random().toString(16).substring(2, 6);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Calculate Billable Token Equivalent (BTE) - a cost-weighted token score
|
|
13
|
+
* @param {Object} usage - Token usage object
|
|
14
|
+
* @param {number} [usage.inputTokens] - Number of input tokens
|
|
15
|
+
* @param {number} [usage.outputTokens] - Number of output tokens
|
|
16
|
+
* @param {number} [usage.cacheReadInputTokens] - Number of cache read tokens
|
|
17
|
+
* @param {number} [usage.cacheCreationInputTokens] - Number of cache creation tokens
|
|
18
|
+
* @param {Object} [weights] - Custom weights (defaults to DEFAULT_TOKEN_COST_WEIGHTS)
|
|
19
|
+
* @returns {number} The calculated BTE score
|
|
20
|
+
*/
|
|
21
|
+
export function calculateBillableTokens(usage, weights = DEFAULT_TOKEN_COST_WEIGHTS) {
|
|
22
|
+
if (!usage) return 0;
|
|
23
|
+
return Math.round(
|
|
24
|
+
(usage.inputTokens || 0) * weights.input +
|
|
25
|
+
(usage.outputTokens || 0) * weights.output +
|
|
26
|
+
(usage.cacheReadInputTokens || 0) * weights.cacheRead +
|
|
27
|
+
(usage.cacheCreationInputTokens || 0) * weights.cacheCreation
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Format a token count for display (e.g., 1234 → "1.2K", 1234567 → "1.2M")
|
|
33
|
+
* @param {number} n - The token count
|
|
34
|
+
* @returns {string} Formatted string
|
|
35
|
+
*/
|
|
36
|
+
export function formatTokenCount(n) {
|
|
37
|
+
if (!n || n === 0) return '0';
|
|
38
|
+
if (n >= 1000000) return `${(n / 1000000).toFixed(1)}M`;
|
|
39
|
+
if (n >= 1000) return `${(n / 1000).toFixed(1)}K`;
|
|
40
|
+
return String(n);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Sanitize a string for use in a git branch name
|
|
45
|
+
* @param {string} text - The text to sanitize
|
|
46
|
+
* @param {number} [maxLength=30] - Maximum length of the result
|
|
47
|
+
* @returns {string}
|
|
48
|
+
*/
|
|
49
|
+
export function sanitizeBranchName(text, maxLength = 30) {
|
|
50
|
+
return text
|
|
51
|
+
.toLowerCase()
|
|
52
|
+
.replace(/[^a-z0-9\s-]/g, '') // Remove special characters
|
|
53
|
+
.replace(/\s+/g, '-') // Replace spaces with hyphens
|
|
54
|
+
.replace(/-+/g, '-') // Collapse multiple hyphens
|
|
55
|
+
.replace(/^-|-$/g, '') // Trim leading/trailing hyphens
|
|
56
|
+
.substring(0, maxLength);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Extract a slug from a prompt (first few meaningful words)
|
|
61
|
+
* @param {string} prompt - The prompt text
|
|
62
|
+
* @returns {string}
|
|
63
|
+
*/
|
|
64
|
+
export function extractSlugFromPrompt(prompt) {
|
|
65
|
+
// Take first 5 words, filter out common stop words
|
|
66
|
+
const stopWords = ['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'];
|
|
67
|
+
const words = prompt
|
|
68
|
+
.toLowerCase()
|
|
69
|
+
.replace(/[^a-z0-9\s]/g, '')
|
|
70
|
+
.split(/\s+/)
|
|
71
|
+
.filter((word) => word.length > 1 && !stopWords.includes(word))
|
|
72
|
+
.slice(0, 4);
|
|
73
|
+
|
|
74
|
+
return words.join('-') || 'session';
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Generate a git branch name for a worktree
|
|
79
|
+
* @param {string} [sessionName] - Optional session name
|
|
80
|
+
* @param {string} [prompt] - Optional prompt to extract slug from
|
|
81
|
+
* @returns {string} Branch name in format: claude-tools/{shortId}-{slug}
|
|
82
|
+
*/
|
|
83
|
+
export function generateWorktreeBranch(sessionName, prompt) {
|
|
84
|
+
const shortId = generateShortId();
|
|
85
|
+
|
|
86
|
+
let slug;
|
|
87
|
+
if (sessionName && sessionName.trim()) {
|
|
88
|
+
slug = sanitizeBranchName(sessionName.trim());
|
|
89
|
+
} else if (prompt && prompt.trim()) {
|
|
90
|
+
slug = sanitizeBranchName(extractSlugFromPrompt(prompt.trim()));
|
|
91
|
+
} else {
|
|
92
|
+
slug = 'session';
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// Ensure slug is not empty
|
|
96
|
+
if (!slug) {
|
|
97
|
+
slug = 'session';
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
return `claude-tools/${shortId}-${slug}`;
|
|
101
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{u as Y}from"./sessions-D681M81k.js";import{u as $}from"./commandButtons-DNSHH8IA.js";import{B as g,W as u,_ as z,o as q,z as J,m as K,a,c,b as p,F as A,r as C,E as T,u as m,t as O,d as Q,w as X,e as Z,l as ee,y as D,x as b,f as te,G as se}from"./index-CVOJVSsC.js";import{a as x}from"./ApiClient-Dbs1H78V.js";import{S as re}from"./SessionCard-BvjLwVYg.js";import"./settings-D0evez2V.js";import"./SessionLogStream-B-FwUMJQ.js";function ne(){const{on:E,off:t}=g(),d=y=>_=>{const i=f=>{f.session&&_(f.session,f.projectId)};return E(y,i),()=>t(y,i)},w=d(u.SESSION_CREATED),N=d(u.SESSION_UPDATED);return{onSessionCreated:w,onSessionUpdated:N,onSessionDeleted:y=>{const _=i=>{i.sessionId&&y(i.sessionId,i.projectId)};return E(u.SESSION_DELETED,_),()=>t(u.SESSION_DELETED,_)},onSessionSummaryUpdated:y=>{const _=i=>{i.sessionId&&i.summary&&y(i.sessionId,i.summary,i.projectId)};return E(u.SESSION_SUMMARY_UPDATED,_),()=>t(u.SESSION_SUMMARY_UPDATED,_)}}}const oe={class:"container"},ie={class:"filters-container"},ae={class:"status-filters"},le=["onClick"],ce=["title"],ue={key:0,class:"star-icon"},de={key:1,class:"star-icon star-crossed"},fe={key:2,class:"star-icon"},Se={key:0,class:"skeleton-list"},pe={key:1,class:"error-message"},me={key:2,class:"empty-state"},_e={key:3,class:"empty-state"},he={key:4,class:"session-list"},ye={__name:"ActiveSessionsView",setup(E){const t=Y(),d=$(),w=["waiting","stopped","error"],N=["running","starting"],F=ee(new Set),R=r=>{t.statusFilter===r?t.setStatusFilter(null):t.setStatusFilter(r)},y=()=>{t.starredFilter===null?t.setStarredFilter("starred"):t.starredFilter==="starred"?t.setStarredFilter("unstarred"):t.setStarredFilter(null)},_=b(()=>t.starredFilter==="starred"?"Showing starred sessions only. Click to filter unstarred.":t.starredFilter==="unstarred"?"Showing unstarred sessions only. Click to show all.":"Showing all sessions. Click to filter by starred."),i=b(()=>{let r=t.activeSessions;return t.statusFilter&&(r=r.filter(s=>{const e=s.status;return!!(t.statusFilter==="idle"&&w.includes(e)||t.statusFilter==="running"&&N.includes(e))})),t.starredFilter==="starred"?r=r.filter(s=>s.starred):t.starredFilter==="unstarred"&&(r=r.filter(s=>!s.starred)),r}),f=D({}),S=D({}),h=D({});let k=null;const v=[],{onSessionCreated:j,onSessionUpdated:P,onSessionDeleted:B,onSessionSummaryUpdated:L}=ne();async function M(){const r=new Set(t.activeSessions.map(s=>s.projectId).filter(s=>s&&!F.value.has(s)));for(const s of r)try{await d.fetchButtons(s),await d.fetchLatestRunsForProject(s),F.value.add(s)}catch(e){console.error(`Failed to fetch buttons for project ${s}:`,e)}}function U(r,s,e){d.runs[r]||(d.runs[r]={runId:r,buttonId:s,sessionId:e,status:"running",output:"",exitCode:null,startedAt:Date.now(),outputTruncated:!1})}function V(r,s,e){const n=o=>{U(o.runId,o.buttonId,o.sessionId),d.appendOutput(o.runId,o.output)};r(u.COMMAND_RUN_OUTPUT,n),e.push(()=>s(u.COMMAND_RUN_OUTPUT,n));const l=o=>{U(o.runId,o.buttonId,o.sessionId),d.completeRun(o.runId,o.exitCode,o.output)};r(u.COMMAND_RUN_COMPLETE,l),e.push(()=>s(u.COMMAND_RUN_COMPLETE,l));const I=o=>{U(o.runId,o.buttonId,o.sessionId),d.errorRun(o.runId,o.error)};r(u.COMMAND_RUN_ERROR,I),e.push(()=>s(u.COMMAND_RUN_ERROR,I))}q(async()=>{t.restoreStatusFilter(),t.restoreStarredFilter(),await t.fetchActiveSessions(),await M(),v.push(j(e=>{["running","waiting","starting"].includes(e.status)&&(t.activeSessions.some(l=>l.id===e.id)||(t.activeSessions.unshift(e),e.projectId&&!F.value.has(e.projectId)&&(d.fetchButtons(e.projectId),F.value.add(e.projectId))))})),v.push(P(e=>{const n=["running","waiting","starting"].includes(e.status),l=t.activeSessions.findIndex(I=>I.id===e.id);n?l>=0?t.activeSessions[l]=e:t.activeSessions.unshift(e):l>=0&&(t.activeSessions.splice(l,1),delete f[e.id],delete S[e.id],delete h[e.id])})),v.push(B(e=>{const n=t.activeSessions.findIndex(l=>l.id===e);n>=0&&t.activeSessions.splice(n,1),delete f[e],delete S[e],delete h[e]})),v.push(L((e,n)=>{f[e]=n,S[e]=!1,h[e]=!1}));const{on:r,off:s}=g();V(r,s,v),k=setInterval(()=>{t.fetchActiveSessions(!1)},3e4)}),J(()=>{v.forEach(r=>r()),k&&clearInterval(k)}),K(()=>t.activeSessions,()=>{H(),M()},{immediate:!0});async function H(){const s=t.activeSessions.filter(e=>!f[e.id]&&!S[e.id]).map(e=>e.id);if(s.length!==0){for(const e of s)S[e]=!0,h[e]=!1;try{const e=await x.getSessionSummariesBatch(s);for(const n of s)e[n]&&(f[n]=e[n]),S[n]=!1}catch(e){console.warn("Failed to fetch summaries batch:",e.message);for(const n of s)h[n]=!0,S[n]=!1}}}async function G(r){var s;S[r]=!0,h[r]=!1;try{const e=await x.getSessionSummary(r);e&&(f[r]=e)}catch(e){((s=e.response)==null?void 0:s.status)!==404&&(console.warn(`Failed to fetch summary for session ${r}:`,e.message),h[r]=!0)}finally{S[r]=!1}}async function W(r){h[r]=!1,await G(r)}return(r,s)=>{const e=te("router-link");return a(),c("div",oe,[s[3]||(s[3]=p("div",{class:"page-header"},[p("div",null,[p("p",{class:"page-description"}," All active sessions across your projects ")])],-1)),p("div",ie,[p("div",ae,[(a(),c(A,null,C(["running","idle"],n=>p("button",{key:n,class:T(["filter-btn",{active:m(t).statusFilter===n}]),onClick:l=>R(n)},O(n),11,le)),64)),p("button",{class:T(["filter-btn star-btn",{"star-filter-active":m(t).starredFilter==="starred","star-filter-unstarred":m(t).starredFilter==="unstarred","star-filter-all":m(t).starredFilter===null}]),title:_.value,onClick:y},[m(t).starredFilter==="starred"?(a(),c("span",ue,"⭐")):m(t).starredFilter==="unstarred"?(a(),c("span",de,"⭐")):(a(),c("span",fe,"☆"))],10,ce)])]),m(t).loading?(a(),c("div",Se,[(a(),c(A,null,C(3,n=>p("div",{key:n,class:"skeleton card",style:{height:"120px"}})),64))])):m(t).error?(a(),c("div",pe,O(m(t).error),1)):m(t).activeSessions.length===0?(a(),c("div",me,[s[1]||(s[1]=p("p",null,"No active sessions. All sessions are completed or there are no sessions yet.",-1)),Q(e,{to:"/",class:"btn btn-primary"},{default:X(()=>[...s[0]||(s[0]=[Z(" View Projects ",-1)])]),_:1})])):i.value.length===0?(a(),c("div",_e,[...s[2]||(s[2]=[p("p",null,"No sessions match the current filter.",-1)])])):(a(),c("div",he,[(a(!0),c(A,null,C(i.value,n=>(a(),se(re,{key:n.id,session:n,"show-project":!0,"show-summary":!0,summary:f[n.id],"summary-loading":S[n.id],"summary-error":h[n.id],onRetrySummary:W},null,8,["session","summary","summary-loading","summary-error"]))),128))]))])}}},Ue=z(ye,[["__scopeId","data-v-21acfc18"]]);export{Ue as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.page-header[data-v-21acfc18]{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:2rem}.page-header h1[data-v-21acfc18]{margin:0}.page-description[data-v-21acfc18]{margin:.25rem 0 0;font-size:.875rem;color:var(--color-text-soft)}.skeleton-list[data-v-21acfc18]{display:flex;flex-direction:column;gap:1rem}.error-message[data-v-21acfc18]{color:var(--color-error);padding:1rem;background-color:#f851491a;border-radius:var(--border-radius)}.empty-state[data-v-21acfc18]{text-align:center;padding:3rem;color:var(--color-text-soft)}.empty-state p[data-v-21acfc18]{margin-bottom:1rem}.session-list[data-v-21acfc18]{display:flex;flex-direction:column;gap:1rem}.status-filters[data-v-21acfc18]{display:flex;align-items:center;gap:.5rem;margin-bottom:1rem}.filter-label[data-v-21acfc18]{font-size:.875rem;color:var(--color-text-soft)}.filter-btn[data-v-21acfc18]{background:none;border:1px solid var(--color-border);padding:.375rem .75rem;font-size:.8rem;color:var(--color-text-soft);cursor:pointer;border-radius:var(--border-radius);transition:all .15s;text-transform:capitalize}.filter-btn[data-v-21acfc18]:hover{border-color:var(--color-primary);color:var(--color-text)}.star-icon[data-v-21acfc18]{position:relative;display:inline-block}.filter-btn.star-filter-all[data-v-21acfc18]{background:transparent;border-color:var(--color-border);color:var(--color-text-soft)}.filter-btn.star-filter-all[data-v-21acfc18]:hover{border-color:var(--color-primary);color:var(--color-text)}.filter-btn.star-filter-active[data-v-21acfc18],.filter-btn.active[data-v-21acfc18]{background:var(--color-primary);border-color:var(--color-primary);color:#fff}.filter-btn.star-filter-unstarred[data-v-21acfc18]{background:transparent;border-color:#f97316;color:#f97316}.star-crossed[data-v-21acfc18]:after{content:"";position:absolute;top:50%;left:-10%;right:-10%;height:2px;background:currentColor;transform:translateY(-50%) rotate(-45deg);pointer-events:none}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{L as q,_ as O,a as r,c as i,b as t,F as k,r as $,t as f,k as _,E as A,x as p,f as W,e as F,G as z,w as G,o as H,z as J,d as w,u as m,l as B}from"./index-CVOJVSsC.js";import{a as L}from"./ApiClient-Dbs1H78V.js";const U=q("agentLogs",{state:()=>({logs:[],pagination:{total:0,limit:25,offset:0,hasMore:!1},filters:{agentType:null,callType:null,status:null,model:null,startDate:null,endDate:null,sessionId:null},filterOptions:{agentTypes:[],callTypes:[],statuses:[],models:[]},perPage:25,currentPage:1,sortBy:"started_at",sortOrder:"DESC",loading:!1,error:null}),getters:{totalPages:s=>Math.ceil(s.pagination.total/s.perPage)||0,activeFilters:s=>{const e={};for(const[y,h]of Object.entries(s.filters))h!=null&&(e[y]=h);return e}},actions:{async fetchLogs(){this.loading=!0,this.error=null;try{const s=(this.currentPage-1)*this.perPage,e=await L.getAgentCallLogs({limit:this.perPage,offset:s,...this.activeFilters,sortBy:this.sortBy,sortOrder:this.sortOrder});this.logs=e.logs,this.pagination=e.pagination}catch(s){this.error=s.message}finally{this.loading=!1}},async fetchFilterOptions(){try{const s=await L.getAgentCallFilterOptions();this.filterOptions=s}catch(s){console.error("Failed to fetch filter options:",s)}},setFilter(s,e){this.filters[s]=e||null,this.currentPage=1,this.fetchLogs()},clearFilters(){Object.keys(this.filters).forEach(s=>this.filters[s]=null),this.currentPage=1,this.fetchLogs()},setPage(s){this.currentPage=s,this.fetchLogs()},setPerPage(s){this.perPage=s,this.currentPage=1,this.fetchLogs()},setSort(s,e){this.sortBy=s,this.sortOrder=e,this.currentPage=1,this.fetchLogs()},async clearAllLogs(){this.loading=!0,this.error=null;try{await L.deleteAllAgentCallLogs(),this.logs=[],this.pagination={total:0,limit:this.perPage,offset:0,hasMore:!1},this.currentPage=1,await this.fetchFilterOptions()}catch(s){this.error=s.message}finally{this.loading=!1}}}}),Z={class:"filter-bar"},Q={class:"filter-row"},X={class:"filter-group"},Y=["value"],K={class:"filter-group"},tt=["value"],et={class:"filter-group"},st=["value"],lt=["value"],at={class:"filter-group"},nt=["value"],ot=["value"],rt={class:"filter-group"},it=["value"],ut=["value"],dt={class:"filter-group"},ct=["value"],ft=["value"],gt={__name:"AgentLogFilters",props:{filters:{type:Object,required:!0},filterOptions:{type:Object,required:!0},hasActiveFilters:{type:Boolean,default:!1},confirming:{type:Boolean,default:!1}},emits:["filter-change","date-change","clear-filters","clear-all"],setup(s){const e=s;function y(v){return new Date(v).toISOString().slice(0,10)}const h=p(()=>e.filters.startDate?y(e.filters.startDate):""),b=p(()=>e.filters.endDate?y(e.filters.endDate):"");return(v,a)=>(r(),i("div",Z,[t("div",Q,[t("div",X,[a[8]||(a[8]=t("label",{class:"filter-label"},"From",-1)),t("input",{type:"date",class:"filter-input",value:h.value,onChange:a[0]||(a[0]=n=>v.$emit("date-change","startDate",n))},null,40,Y)]),t("div",K,[a[9]||(a[9]=t("label",{class:"filter-label"},"To",-1)),t("input",{type:"date",class:"filter-input",value:b.value,onChange:a[1]||(a[1]=n=>v.$emit("date-change","endDate",n))},null,40,tt)]),t("div",et,[a[11]||(a[11]=t("label",{class:"filter-label"},"Agent Type",-1)),t("select",{class:"filter-select",value:s.filters.agentType||"",onChange:a[2]||(a[2]=n=>v.$emit("filter-change","agentType",n.target.value))},[a[10]||(a[10]=t("option",{value:""}," All ",-1)),(r(!0),i(k,null,$(s.filterOptions.agentTypes,n=>(r(),i("option",{key:n,value:n},f(n),9,lt))),128))],40,st)]),t("div",at,[a[13]||(a[13]=t("label",{class:"filter-label"},"Call Type",-1)),t("select",{class:"filter-select",value:s.filters.callType||"",onChange:a[3]||(a[3]=n=>v.$emit("filter-change","callType",n.target.value))},[a[12]||(a[12]=t("option",{value:""}," All ",-1)),(r(!0),i(k,null,$(s.filterOptions.callTypes,n=>(r(),i("option",{key:n,value:n},f(n),9,ot))),128))],40,nt)]),t("div",rt,[a[15]||(a[15]=t("label",{class:"filter-label"},"Status",-1)),t("select",{class:"filter-select",value:s.filters.status||"",onChange:a[4]||(a[4]=n=>v.$emit("filter-change","status",n.target.value))},[a[14]||(a[14]=t("option",{value:""}," All ",-1)),(r(!0),i(k,null,$(s.filterOptions.statuses,n=>(r(),i("option",{key:n,value:n},f(n),9,ut))),128))],40,it)]),t("div",dt,[a[17]||(a[17]=t("label",{class:"filter-label"},"Model",-1)),t("select",{class:"filter-select",value:s.filters.model||"",onChange:a[5]||(a[5]=n=>v.$emit("filter-change","model",n.target.value))},[a[16]||(a[16]=t("option",{value:""}," All ",-1)),(r(!0),i(k,null,$(s.filterOptions.models,n=>(r(),i("option",{key:n,value:n},f(n),9,ft))),128))],40,ct)]),s.hasActiveFilters?(r(),i("button",{key:0,class:"btn-clear",onClick:a[6]||(a[6]=n=>v.$emit("clear-filters"))}," Clear Filters ")):_("",!0),t("button",{class:A(["btn-clear-all",{confirming:s.confirming}]),onClick:a[7]||(a[7]=n=>v.$emit("clear-all"))},f(s.confirming?"Confirm Clear All?":"Clear All Logs"),3)])]))}},vt=O(gt,[["__scopeId","data-v-780329d3"]]),pt={class:"table-wrapper"},ht={key:0,class:"loading-overlay"},yt={class:"log-table"},bt=["onClick"],mt={key:0,class:"sort-indicator"},kt={key:0},$t=["colspan"],Ct={class:"td"},_t={class:"status-text"},Tt={class:"td font-mono text-sm"},At={class:"td font-mono text-sm"},Pt={class:"td model-cell"},Lt={class:"td"},Ot={key:1},St={class:"td"},Dt={key:1},Ft=["title"],wt={class:"td text-right"},Bt=["title"],Mt={__name:"AgentLogTable",props:{logs:{type:Array,required:!0},loading:{type:Boolean,default:!1},sortBy:{type:String,default:"started_at"},sortOrder:{type:String,default:"DESC"}},emits:["sort"],setup(s){const e=[{key:"status",label:"Status",sortable:!0},{key:"agent_type",label:"Agent Type",sortable:!0},{key:"call_type",label:"Call Type",sortable:!0},{key:"model",label:"Model",sortable:!0},{key:"session",label:"Session",sortable:!1},{key:"effort",label:"Effort",sortable:!1},{key:"total_tokens",label:"Tokens",sortable:!0},{key:"duration_ms",label:"Duration",sortable:!0},{key:"started_at",label:"Started",sortable:!0}];function y(l){switch(l){case"completed":return"dot-completed";case"error":return"dot-error";case"streaming":case"pending":return"dot-pending";default:return"dot-default"}}function h(l){const d=[];return l.inputTokens&&d.push(`Input: ${b(l.inputTokens)}`),l.outputTokens&&d.push(`Output: ${b(l.outputTokens)}`),l.thinkingTokens&&d.push(`Thinking: ${b(l.thinkingTokens)}`),l.cacheReadTokens&&d.push(`Cache Read: ${b(l.cacheReadTokens)}`),l.cacheWriteTokens&&d.push(`Cache Write: ${b(l.cacheWriteTokens)}`),d.join(`
|
|
2
|
+
`)||"No token data"}function b(l){return l==null||l===0?"0":l.toLocaleString()}function v(l){if(l==null)return"—";if(l<1e3)return`${l}ms`;if(l<6e4)return`${(l/1e3).toFixed(1)}s`;const d=Math.floor(l/6e4),C=Math.floor(l%6e4/1e3);return`${d}m ${C}s`}function a(l){const d=Date.now()-l;return d<6e4?"just now":d<36e5?`${Math.floor(d/6e4)}m ago`:d<864e5?`${Math.floor(d/36e5)}h ago`:`${Math.floor(d/864e5)}d ago`}function n(l){try{if(l.metadata)return(typeof l.metadata=="string"?JSON.parse(l.metadata):l.metadata).effortLevel||null}catch{}return null}function P(l){return{auto:"Auto",low:"Low",medium:"Med",high:"High",max:"Max"}[l]||l}return(l,d)=>{const C=W("router-link");return r(),i("div",pt,[s.loading?(r(),i("div",ht,[...d[0]||(d[0]=[t("div",{class:"spinner"},null,-1)])])):_("",!0),t("table",yt,[t("thead",null,[t("tr",null,[(r(),i(k,null,$(e,o=>t("th",{key:o.key,class:A(["th",o.sortable?"sortable":""]),onClick:S=>o.sortable?l.$emit("sort",o.key):null},[F(f(o.label)+" ",1),o.sortable&&s.sortBy===o.key?(r(),i("span",mt,f(s.sortOrder==="ASC"?"↑":"↓"),1)):_("",!0)],10,bt)),64))])]),t("tbody",null,[!s.loading&&s.logs.length===0?(r(),i("tr",kt,[t("td",{colspan:e.length,class:"empty-cell"}," No agent call logs found. ",8,$t)])):_("",!0),(r(!0),i(k,null,$(s.logs,o=>(r(),i("tr",{key:o.id,class:"log-row"},[t("td",Ct,[t("span",{class:A(["status-dot",y(o.status)])},null,2),t("span",_t,f(o.status),1)]),t("td",Tt,f(o.agentType||"—"),1),t("td",At,f(o.callType||"—"),1),t("td",Pt,f(o.model||"—"),1),t("td",Lt,[o.sessionId?(r(),z(C,{key:0,to:`/sessions/${o.sessionId}`,class:"session-link"},{default:G(()=>[F(f(o.sessionName||o.sessionId),1)]),_:2},1032,["to"])):(r(),i("span",Ot,"—"))]),t("td",St,[n(o)?(r(),i("span",{key:0,class:A(["effort-badge",`effort-${n(o)}`])},f(P(n(o))),3)):(r(),i("span",Dt,"—"))]),t("td",{class:"td text-right",title:h(o)},f(b(o.totalTokens)),9,Ft),t("td",wt,f(v(o.durationMs)),1),t("td",{class:"td text-right",title:o.startedAt?new Date(o.startedAt).toLocaleString():""},f(o.startedAt?a(o.startedAt):"—"),9,Bt)]))),128))])])])}}},It=O(Mt,[["__scopeId","data-v-20d5856a"]]),Et={class:"agent-logs"},Nt={key:0,class:"error-banner"},Vt={key:1,class:"pagination-bar"},xt={class:"per-page-control"},jt=["value"],Rt=["value"],qt={class:"page-info"},Wt={class:"page-buttons"},zt=["disabled"],Gt=["disabled"],Ht={key:0,class:"page-ellipsis"},Jt=["onClick"],Ut=["disabled"],Zt=["disabled"],Qt={__name:"AgentLogsView",setup(s){const e=U(),y=B(!1),h=B(null),b=p(()=>e.logs),v=p(()=>e.pagination),a=p(()=>e.filters),n=p(()=>e.filterOptions),P=p(()=>e.perPage),l=p(()=>e.currentPage),d=p(()=>e.totalPages),C=p(()=>e.sortBy),o=p(()=>e.sortOrder),S=p(()=>e.loading),D=p(()=>e.error),M=p(()=>Object.values(e.filters).some(g=>g!=null)),I=p(()=>v.value.total===0?0:v.value.offset+1),E=p(()=>Math.min(v.value.offset+P.value,v.value.total)),N=p(()=>{const g=d.value,c=l.value;if(g<=7)return Array.from({length:g},(T,R)=>R+1);const u=[];return c<=4?u.push(1,2,3,4,5,"...",g):c>=g-3?u.push(1,"...",g-4,g-3,g-2,g-1,g):u.push(1,"...",c-1,c,c+1,"...",g),u});function V(g){C.value===g?e.setSort(g,o.value==="ASC"?"DESC":"ASC"):e.setSort(g,"DESC")}function x(g,c){const u=c.target.value;if(!u){e.setFilter(g,null);return}const T=new Date(`${u}T00:00:00Z`).getTime();e.filters[g]=T,e.currentPage=1,e.fetchLogs()}function j(){y.value?(h.value&&(clearTimeout(h.value),h.value=null),y.value=!1,e.clearAllLogs()):(y.value=!0,h.value=setTimeout(()=>{y.value=!1,h.value=null},3e3))}return H(()=>{e.fetchLogs(),e.fetchFilterOptions()}),J(()=>{h.value&&clearTimeout(h.value)}),(g,c)=>(r(),i("div",Et,[w(vt,{filters:a.value,"filter-options":n.value,"has-active-filters":M.value,confirming:y.value,onFilterChange:c[0]||(c[0]=(u,T)=>m(e).setFilter(u,T)),onDateChange:x,onClearFilters:c[1]||(c[1]=u=>m(e).clearFilters()),onClearAll:j},null,8,["filters","filter-options","has-active-filters","confirming"]),D.value?(r(),i("div",Nt,[t("span",null,f(D.value),1),t("button",{class:"btn-retry",onClick:c[2]||(c[2]=u=>m(e).fetchLogs())}," Retry ")])):_("",!0),w(It,{logs:b.value,loading:S.value,"sort-by":C.value,"sort-order":o.value,onSort:V},null,8,["logs","loading","sort-by","sort-order"]),v.value.total>0?(r(),i("div",Vt,[t("div",xt,[c[8]||(c[8]=t("label",{class:"filter-label"},"Per page",-1)),t("select",{class:"filter-select per-page-select",value:P.value,onChange:c[3]||(c[3]=u=>m(e).setPerPage(parseInt(u.target.value)))},[(r(),i(k,null,$([10,25,50,100],u=>t("option",{key:u,value:u},f(u),9,Rt)),64))],40,jt)]),t("div",qt," Showing "+f(I.value)+"–"+f(E.value)+" of "+f(v.value.total)+" logs ",1),t("div",Wt,[t("button",{class:"page-btn",disabled:l.value===1,onClick:c[4]||(c[4]=u=>m(e).setPage(1))}," « ",8,zt),t("button",{class:"page-btn",disabled:l.value===1,onClick:c[5]||(c[5]=u=>m(e).setPage(l.value-1))}," ‹ ",8,Gt),(r(!0),i(k,null,$(N.value,u=>(r(),i(k,{key:u},[u==="..."?(r(),i("span",Ht,"…")):(r(),i("button",{key:1,class:A(["page-btn",{"page-btn-active":u===l.value}]),onClick:T=>m(e).setPage(u)},f(u),11,Jt))],64))),128)),t("button",{class:"page-btn",disabled:l.value===d.value,onClick:c[6]||(c[6]=u=>m(e).setPage(l.value+1))}," › ",8,Ut),t("button",{class:"page-btn",disabled:l.value===d.value,onClick:c[7]||(c[7]=u=>m(e).setPage(d.value))}," » ",8,Zt)])])):_("",!0)]))}},Kt=O(Qt,[["__scopeId","data-v-e1df2011"]]);export{Kt as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.filter-bar[data-v-780329d3]{background-color:var(--color-surface, #1f2937);border:1px solid var(--color-border, #374151);border-radius:.5rem;padding:.75rem 1rem}.filter-row[data-v-780329d3]{display:flex;flex-wrap:wrap;gap:.75rem;align-items:flex-end}.filter-group[data-v-780329d3]{display:flex;flex-direction:column;gap:.25rem}.filter-label[data-v-780329d3]{font-size:.75rem;color:var(--color-text-soft, #9ca3af);font-weight:500}.filter-input[data-v-780329d3],.filter-select[data-v-780329d3]{background-color:var(--color-background, #111827);border:1px solid var(--color-border, #374151);border-radius:.375rem;color:var(--color-text, #f3f4f6);padding:.375rem .5rem;font-size:.875rem;min-width:8rem}.filter-input[data-v-780329d3]:focus,.filter-select[data-v-780329d3]:focus{outline:none;border-color:var(--color-primary, #22d3ee)}.btn-clear[data-v-780329d3]{background-color:transparent;border:1px solid var(--color-border, #374151);border-radius:.375rem;color:var(--color-text-soft, #9ca3af);padding:.375rem .75rem;font-size:.875rem;cursor:pointer;align-self:flex-end;transition:border-color .2s,color .2s}.btn-clear[data-v-780329d3]:hover{border-color:var(--color-text, #f3f4f6);color:var(--color-text, #f3f4f6)}.btn-clear-all[data-v-780329d3]{background-color:transparent;border:1px solid rgba(239,68,68,.5);border-radius:.375rem;color:#f87171;padding:.375rem .75rem;font-size:.875rem;cursor:pointer;align-self:flex-end;transition:all .2s}.btn-clear-all[data-v-780329d3]:hover{border-color:#ef4444cc;color:#fca5a5}.btn-clear-all.confirming[data-v-780329d3]{background-color:#ef444433;border-color:#f87171;color:#fca5a5;font-weight:600}.table-wrapper[data-v-20d5856a]{position:relative;overflow-x:auto;border:1px solid var(--color-border, #374151);border-radius:.5rem}.loading-overlay[data-v-20d5856a]{position:absolute;top:0;right:0;bottom:0;left:0;background-color:#11182799;display:flex;align-items:center;justify-content:center;z-index:10;border-radius:.5rem}.spinner[data-v-20d5856a]{width:2rem;height:2rem;border:3px solid var(--color-border, #374151);border-top-color:var(--color-primary, #22d3ee);border-radius:50%;animation:spin-20d5856a .7s linear infinite}@keyframes spin-20d5856a{to{transform:rotate(360deg)}}.log-table[data-v-20d5856a]{width:100%;border-collapse:collapse;font-size:.875rem}.th[data-v-20d5856a]{text-align:left;padding:.625rem .75rem;color:var(--color-text-soft, #9ca3af);font-weight:600;font-size:.75rem;text-transform:uppercase;letter-spacing:.05em;background-color:var(--color-surface, #1f2937);border-bottom:1px solid var(--color-border, #374151);white-space:nowrap;-webkit-user-select:none;user-select:none}.th.sortable[data-v-20d5856a]{cursor:pointer}.th.sortable[data-v-20d5856a]:hover{color:var(--color-text, #f3f4f6)}.sort-indicator[data-v-20d5856a]{margin-left:.25rem;color:var(--color-primary, #22d3ee)}.log-row[data-v-20d5856a]{border-bottom:1px solid var(--color-border, #374151)}.log-row[data-v-20d5856a]:nth-child(2n){background-color:#1f293780}.log-row[data-v-20d5856a]:last-child{border-bottom:none}.td[data-v-20d5856a]{padding:.5rem .75rem;color:var(--color-text, #f3f4f6);vertical-align:middle;white-space:nowrap}.text-right[data-v-20d5856a]{text-align:right}.font-mono[data-v-20d5856a]{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace}.text-sm[data-v-20d5856a]{font-size:.8125rem}.model-cell[data-v-20d5856a]{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.8125rem;max-width:16rem;overflow:hidden;text-overflow:ellipsis}.empty-cell[data-v-20d5856a]{text-align:center;padding:2rem;color:var(--color-text-soft, #9ca3af)}.status-dot[data-v-20d5856a]{display:inline-block;width:.5rem;height:.5rem;border-radius:50%;margin-right:.375rem;vertical-align:middle}.dot-completed[data-v-20d5856a]{background-color:#34d399}.dot-error[data-v-20d5856a]{background-color:#f87171}.dot-pending[data-v-20d5856a]{background-color:#fbbf24}.dot-default[data-v-20d5856a]{background-color:#6b7280}.status-text[data-v-20d5856a]{vertical-align:middle}.session-link[data-v-20d5856a]{color:var(--color-primary, #22d3ee);text-decoration:none;font-size:.8125rem}.session-link[data-v-20d5856a]:hover{text-decoration:underline}.effort-badge[data-v-20d5856a]{display:inline-block;padding:.125rem .5rem;border-radius:.25rem;font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em}.effort-auto[data-v-20d5856a]{background-color:#6b728033;color:#9ca3af;border:1px solid rgba(107,114,128,.4)}.effort-low[data-v-20d5856a]{background-color:#34d39933;color:#34d399;border:1px solid rgba(52,211,153,.4)}.effort-medium[data-v-20d5856a]{background-color:#fbbf2433;color:#fbbf24;border:1px solid rgba(251,191,36,.4)}.effort-high[data-v-20d5856a]{background-color:#fb923c33;color:#fb923c;border:1px solid rgba(251,146,60,.4)}.effort-max[data-v-20d5856a]{background-color:#ef444433;color:#ef4444;border:1px solid rgba(239,68,68,.4)}.agent-logs[data-v-e1df2011]{display:flex;flex-direction:column;gap:1rem}.error-banner[data-v-e1df2011]{display:flex;align-items:center;gap:1rem;background-color:#ef44441a;border:1px solid rgba(239,68,68,.4);border-radius:.375rem;padding:.75rem 1rem;color:#f87171;font-size:.875rem}.btn-retry[data-v-e1df2011]{background-color:transparent;border:1px solid rgba(239,68,68,.4);border-radius:.25rem;color:#f87171;padding:.25rem .5rem;font-size:.75rem;cursor:pointer}.btn-retry[data-v-e1df2011]:hover{border-color:#f87171}.filter-label[data-v-e1df2011]{font-size:.75rem;color:var(--color-text-soft, #9ca3af);font-weight:500}.filter-select[data-v-e1df2011]{background-color:var(--color-background, #111827);border:1px solid var(--color-border, #374151);border-radius:.375rem;color:var(--color-text, #f3f4f6);padding:.375rem .5rem;font-size:.875rem;min-width:8rem}.pagination-bar[data-v-e1df2011]{display:flex;align-items:center;gap:1rem;flex-wrap:wrap;padding:.5rem 0}.per-page-control[data-v-e1df2011]{display:flex;align-items:center;gap:.5rem}.per-page-select[data-v-e1df2011]{min-width:4rem;padding:.25rem .375rem}.page-info[data-v-e1df2011]{color:var(--color-text-soft, #9ca3af);font-size:.875rem;flex:1;text-align:center}.page-buttons[data-v-e1df2011]{display:flex;gap:.25rem;align-items:center}.page-btn[data-v-e1df2011]{background-color:var(--color-surface, #1f2937);border:1px solid var(--color-border, #374151);border-radius:.25rem;color:var(--color-text, #f3f4f6);padding:.25rem .625rem;font-size:.875rem;cursor:pointer;min-width:2rem;transition:background-color .15s,border-color .15s}.page-btn[data-v-e1df2011]:hover:not(:disabled){background-color:var(--color-border, #374151);border-color:var(--color-text-soft, #9ca3af)}.page-btn[data-v-e1df2011]:disabled{opacity:.4;cursor:not-allowed}.page-btn-active[data-v-e1df2011]{background-color:var(--color-primary, #22d3ee);border-color:var(--color-primary, #22d3ee);color:#111827;font-weight:600}.page-ellipsis[data-v-e1df2011]{color:var(--color-text-soft, #9ca3af);padding:0 .25rem}
|
|
@@ -0,0 +1 @@
|
|
|
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 j(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 S(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),S(s,n,["name","mode","model","effortLevel","gitBranch","gitMode","templateId","parentSessionId"]),k(s,n,["thinkingEnabled","startImmediately","autoRescheduleEnabled","rescheduleOnTokenLimit","rescheduleOnServiceError"]),S(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){const r={};return s!==void 0&&(r.prompt=s),t!==void 0&&(r.model=t),this._post(`/sessions/${e}/start`,Object.keys(r).length>0?r: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 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 R(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 A(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 I(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 O(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 D(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 F(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 Q(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 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 i={};return e!=null&&(i.limit=e),s!=null&&(i.offset=s),t&&(i.agentType=t),r&&(i.callType=r),a&&(i.status=a),o&&(i.startDate=o),m&&(i.endDate=m),_&&(i.sessionId=_),$&&(i.model=$),f&&(i.sortBy=f),v&&(i.sortOrder=v),this._get(this._buildQueryPath("/agent-calls",i))},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 B(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 c{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.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.error||`HTTP ${a.status}`)}return a.status===204?null:a.json()};j(c);T(c);w(c);R(c);A(c);I(c);O(c);D(c);F(c);Q(c);B(c);const M=new c;export{M as a};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{_ as A,l as I,m as O,o as N,a,c as d,b as t,j as T,n as q,F as j,r as D,t as C,k as f,e as B,x,$ as K,i as P,G as z,d as U,p as R,v as L,h as F,V as G,y as W,z as H,E as Y,H as J}from"./index-CVOJVSsC.js";import{u as Q,b as X}from"./EffortLevelSelector-DPofLvm-.js";import{M as Z}from"./ModelSelector-BBn_Ve0D.js";import{M as ee}from"./SlashCommandWizard-BgaOw9W3.js";import{u as te}from"./SessionLogStream-B-FwUMJQ.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=Q(),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}),w=K(n,"currentTemplateId");O(w,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 Claude 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=A(be,[["__scopeId","data-v-d206f8db"]]),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"],Re={key:2,class:"form-section"},we={class:"form-group"},_e={class:"toggle-switch"},Oe={key:3,class:"reschedule-settings"},Le={class:"form-group"},Ae={class:"checkbox-option"},Ve={class:"checkbox-option"},Ue={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=X(),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 w(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)),U(Z,{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)),U(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),[[R,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),[[L,s.scheduledAtLocal]])])):f("",!0),((m=o.session)==null?void 0:m.status)==="scheduled"?(a(),d("div",Re,[e[18]||(e[18]=t("h3",{class:"section-title"}," Template Chain ",-1)),U(he,{"session-id":o.session.id,"project-id":o.session.projectId,"current-template-id":s.nextTemplateId,disabled:u.value,"onUpdate:templateId":w},null,8,["session-id","project-id","current-template-id","disabled"])])):f("",!0),t("div",we,[t("label",_e,[T(t("input",{"onUpdate:modelValue":e[4]||(e[4]=l=>s.autoRescheduleEnabled=l),type:"checkbox"},null,512),[[R,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",Le,[e[23]||(e[23]=t("p",{class:"settings-label"}," Reschedule Triggers ",-1)),t("label",Ae,[T(t("input",{"onUpdate:modelValue":e[5]||(e[5]=l=>s.rescheduleOnTokenLimit=l),type:"checkbox"},null,512),[[R,s.rescheduleOnTokenLimit]]),e[21]||(e[21]=t("span",null,"Token limit errors",-1))]),t("label",Ve,[T(t("input",{"onUpdate:modelValue":e[6]||(e[6]=l=>s.rescheduleOnServiceError=l),type:"checkbox"},null,512),[[R,s.rescheduleOnServiceError]]),e[22]||(e[22]=t("span",null,"Service unavailability",-1))])]),t("div",Ue,[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),[[L,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),[[L,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),[[L,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),[[R,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=A(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"},Je={key:0,class:"empty-state"},Qe={key:1,class:"lanes-list"},Xe={class:"lane-label"},Ze=["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"),w=x(()=>u.value&&c.value.find(l=>l.id===u.value)||null),_=x(()=>w.value?r(w.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(V=>V.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",Je,[...b[4]||(b[4]=[t("p",null,"No lanes available",-1)])])):(a(),d("div",Qe,[(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",Xe,[T(t("input",{"onUpdate:modelValue":b[0]||(b[0]=V=>u.value=V),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,Ze),[[J,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),[[R,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=A(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 project cleanup script"},null,512),[[R,p.value]]),c[4]||(c[4]=t("span",null,"Run project cleanup script",-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)]))}},Rt=A(Tt,[["__scopeId","data-v-58eef4e8"]]);export{Rt as A,Et as M,Mt as S,he as T};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.template-selector[data-v-d206f8db]{padding:1rem;background:var(--color-bg-soft);border-radius:.5rem;margin-bottom:1rem}.selector-label[data-v-d206f8db]{display:block;font-weight:500;font-size:.875rem;margin-bottom:.5rem;color:var(--color-text)}.selector-wrapper[data-v-d206f8db]{display:flex;gap:.5rem;align-items:center}.selector-wrapper .form-input[data-v-d206f8db]{flex:1}.btn-clear[data-v-d206f8db]{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-d206f8db]:hover:not(:disabled){background:var(--color-bg-hover);color:var(--color-error);border-color:var(--color-error)}.btn-clear[data-v-d206f8db]:disabled{opacity:.5;cursor:not-allowed}.template-preview[data-v-d206f8db]{margin-top:.75rem;padding:.75rem;background:var(--color-background);border-radius:.375rem;border:1px solid var(--color-border)}.template-prompt-preview[data-v-d206f8db]{margin:0;font-size:.8rem;color:var(--color-text-soft);line-height:1.4;font-style:italic}.chain-indicator[data-v-d206f8db]{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-d206f8db]{margin:.5rem 0 0;font-size:.75rem;color:var(--color-text-soft)}.saving-indicator[data-v-d206f8db]{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-d206f8db]{padding:.75rem}.selector-wrapper[data-v-d206f8db]{flex-direction:column;align-items:stretch}.btn-clear[data-v-d206f8db]{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-58eef4e8]{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-58eef4e8]{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-58eef4e8]{display:flex;justify-content:space-between;align-items:center;padding:1rem 1.5rem;border-bottom:1px solid var(--color-border)}.modal-title[data-v-58eef4e8]{margin:0;font-size:1.25rem;font-weight:600;color:var(--color-text)}.close-btn[data-v-58eef4e8]{background:none;border:none;font-size:1.5rem;color:var(--color-text-soft);cursor:pointer;padding:0;line-height:1}.close-btn[data-v-58eef4e8]:hover{color:var(--color-text)}.modal-body[data-v-58eef4e8]{padding:1.5rem}.confirm-message[data-v-58eef4e8]{margin:0;font-size:.9rem;color:var(--color-text);line-height:1.5}.cleanup-option[data-v-58eef4e8]{margin-top:1rem;padding-top:1rem;border-top:1px solid var(--color-border)}.checkbox-label[data-v-58eef4e8]{display:flex;align-items:center;gap:.5rem;cursor:pointer;font-size:.875rem;color:var(--color-text)}.checkbox-label input[type=checkbox][data-v-58eef4e8]{width:1rem;height:1rem;cursor:pointer}.modal-footer[data-v-58eef4e8]{display:flex;justify-content:flex-end;gap:.75rem;padding:1rem 1.5rem;border-top:1px solid var(--color-border)}.btn[data-v-58eef4e8]{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-58eef4e8]{background:var(--color-primary);color:#fff}.btn-primary[data-v-58eef4e8]:hover{opacity:.9}.btn-secondary[data-v-58eef4e8]{background:var(--color-background);border:1px solid var(--color-border);color:var(--color-text)}.btn-secondary[data-v-58eef4e8]:hover{background:var(--color-background-secondary)}.btn[data-v-58eef4e8]:disabled{opacity:.5;cursor:not-allowed}.close-btn[data-v-58eef4e8]:disabled{opacity:.5;cursor:not-allowed}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{_ as N,i as U,o as V,a as r,c as u,b as t,e as _,d as j,w as P,u as I,t as i,j as k,v as D,k as v,p as J,h,x as M,s as $,l as m,f as A,g as q}from"./index-CVOJVSsC.js";import{u as F}from"./commandButtons-DNSHH8IA.js";import{a as W}from"./ApiClient-Dbs1H78V.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=q(),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=A("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};
|
|
@@ -0,0 +1 @@
|
|
|
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%}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.effort-selector[data-v-8bc1fe64]{display:flex;align-items:center;gap:.5rem}.effort-select[data-v-8bc1fe64]{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:.375rem 2rem .375rem .5rem;font-size:.75rem;font-weight:500;background-color:var(--color-background);border:1px solid var(--color-border);border-radius:.375rem;color:var(--color-text-soft);cursor:pointer;transition:all .15s;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%239ca3af' d='M1.5 4.5l4.5 4 4.5-4'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right .5rem center;background-size:12px}.effort-select[data-v-8bc1fe64]:hover:not(:disabled){border-color:var(--color-border-hover);background-color:var(--color-bg-hover)}.effort-select[data-v-8bc1fe64]:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 2px #06b6d41a}.effort-select[data-v-8bc1fe64]:disabled{opacity:.5;cursor:not-allowed}.effort-select option[data-v-8bc1fe64]{background-color:var(--color-background);color:var(--color-text)}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{L as f,a0 as g,_ as b,i as _,l as m,m as E,a as p,c as h,b as j,F as L,r as x,t as w,u as I,x as C,$ as O}from"./index-CVOJVSsC.js";import{a as r}from"./ApiClient-Dbs1H78V.js";import{u as V}from"./sessions-D681M81k.js";const D=["low","medium","high","max","auto"],$=[{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:"Most capable (default)"}],H="claude-opus-4-6",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}}}),B=Symbol("overlay-sessions-store"),k=Symbol("overlay-todos-store");function P(){return g(B,V())}function q(){return g(k,F())}const z=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}}}}),R={class:"effort-selector"},U=["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=P(),T=_(),u=m(!1),y=["auto",...D.filter(a=>a!=="auto")].map(a=>({value:a,label:`${a.charAt(0).toUpperCase()+a.slice(1)} Effort`})),c=C(()=>{var a;return s.sessionId?((a=o.currentSession)==null?void 0:a.effortLevel)||"auto":s.modelValue||"auto"}),n=m(c.value),S=O(s,"modelValue");E([c,S],([a])=>{n.value=a||"auto"},{flush:"sync"});async function v(a){if(!u.value&&n.value!==a)if(n.value=a,s.sessionId){u.value=!0;try{await o.updateSessionFields(s.sessionId,{effortLevel:a==="auto"?null:a})}catch(d){n.value=c.value,T.error(d.message)}finally{u.value=!1}}else l("update:modelValue",a==="auto"?null:a)}return(a,d)=>(p(),h("div",R,[j("select",{id:"effort-select",value:n.value,disabled:t.disabled||u.value,class:"effort-select","aria-label":"Effort level",onChange:d[0]||(d[0]=i=>v(i.target.value))},[(p(!0),h(L,null,x(I(y),i=>(p(),h("option",{key:i.value,value:i.value},w(i.label),9,A))),128))],40,U)]))}},J=b(M,[["__scopeId","data-v-8bc1fe64"]]);export{$ as C,H as D,J as E,B as S,k as T,F as a,P as b,q as c,z as u};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.loading-state[data-v-0cd79804]{display:flex;align-items:center;gap:.5rem;justify-content:center;padding:3rem}.form[data-v-0cd79804]{max-width:600px}.form-actions[data-v-0cd79804]{display:flex;justify-content:flex-end;gap:.75rem}.error-message[data-v-0cd79804]{color:var(--color-error);margin-bottom:1rem}.form-help[data-v-0cd79804]{margin-top:.5rem;font-size:.875rem;color:var(--color-text-muted)}.checkbox-label[data-v-0cd79804]{display:flex;align-items:center;gap:.5rem;cursor:pointer;font-weight:500}.checkbox-label input[type=checkbox][data-v-0cd79804]{width:1rem;height:1rem;cursor:pointer}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{_ as f,i as _,o as b,m as y,u as S,a as i,c as r,b as s,e as c,j as h,p as k,t as d,k as p,h as x,l as u}from"./index-CVOJVSsC.js";import{u as w}from"./settings-D0evez2V.js";import"./ApiClient-Dbs1H78V.js";const V={key:0,class:"loading-state"},G={class:"form-group"},A={class:"checkbox-label"},B={key:0,class:"error-message"},C={class:"form-actions"},D=["disabled"],M={key:0,class:"loading-spinner"},N={__name:"GeneralSettingsView",setup(U){const n=w(),v=_(),l=u(!1),a=u(!1),o=u(null);b(()=>{n.fetchGeneralSettings()}),y(()=>n.generalSettings,t=>{t&&(l.value=t.disableAnalytics)},{immediate:!0});async function g(){a.value=!0,o.value=null;try{await n.updateGeneralSettings({disableAnalytics:l.value}),v.success("General settings saved successfully")}catch(t){o.value=t.message}finally{a.value=!1}}return(t,e)=>S(n).loading?(i(),r("div",V,[...e[1]||(e[1]=[s("span",{class:"loading-spinner"},null,-1),c(" Loading... ",-1)])])):(i(),r("form",{key:1,class:"form card",onSubmit:x(g,["prevent"])},[s("div",G,[s("label",A,[h(s("input",{"onUpdate:modelValue":e[0]||(e[0]=m=>l.value=m),type:"checkbox"},null,512),[[k,l.value]]),e[2]||(e[2]=c(" Disable analytics tracking ",-1))]),e[3]||(e[3]=s("p",{class:"form-help"}," When checked, no usage analytics will be collected. Changes take effect on next page load. ",-1))]),o.value?(i(),r("div",B,d(o.value),1)):p("",!0),s("div",C,[s("button",{type:"submit",class:"btn btn-primary",disabled:a.value},[a.value?(i(),r("span",M)):p("",!0),c(" "+d(a.value?"Saving...":"Save Settings"),1)],8,D)])],32))}},L=f(N,[["__scopeId","data-v-0cd79804"]]);export{L as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{_ as t,a,c as n,e,b as o}from"./index-CVOJVSsC.js";const r={class:"form-help"},l={__name:"InterpolationHelp",setup(c){return(p,s)=>(a(),n("p",r,[...s[0]||(s[0]=[e(" Available variables: ",-1),o("code",null,"{{rootSession.id}}",-1),e(", ",-1),o("code",null,"{{rootSession.name}}",-1),e(", ",-1),o("code",null,"{{rootSession.summary}}",-1),e(", ",-1),o("code",null,"{{rootSession.status}}",-1)])]))}},i=t(l,[["__scopeId","data-v-26718cef"]]);export{i as I};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.form-help[data-v-26718cef]{font-size:.85rem;color:var(--color-text-soft);margin:.25rem 0 0}.form-help code[data-v-26718cef]{background:var(--color-bg-soft);padding:.1rem .3rem;border-radius:3px;font-size:.8rem}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-CTumW_tV.js","assets/index-CVOJVSsC.js","assets/index-gmCCsCQ1.css","assets/SessionDetailView-BQbPg-RJ.js","assets/sessions-D681M81k.js","assets/ApiClient-Dbs1H78V.js","assets/settings-D0evez2V.js","assets/projects-DbBQQH-V.js","assets/EffortLevelSelector-DPofLvm-.js","assets/EffortLevelSelector-BQaQmU2d.css","assets/SessionLogStream-B-FwUMJQ.js","assets/commandButtons-DNSHH8IA.js","assets/SessionLogStream-zPUTiGbe.css","assets/ArchiveConfirmModal-CCxSZ52u.js","assets/ModelSelector-BBn_Ve0D.js","assets/providers-ceCc4xRU.js","assets/ModelSelector-DPPD-92R.css","assets/SlashCommandWizard-BgaOw9W3.js","assets/SlashCommandWizard-BB30cSvo.css","assets/ArchiveConfirmModal-CQZeuYBz.css","assets/QuickResponseSettings-B2eVAtHW.js","assets/QuickResponseSettings-B8188A1D.css","assets/QuickResponsesPanel-lU8pW2B0.js","assets/QuickResponsesPanel-DIBQFj0W.css","assets/ResizableTextarea-DSy1mWGY.js","assets/ResizableTextarea-B5nAA0RV.css","assets/SessionDetailView-BrMG4p2-.css","assets/style-BTin-zR_.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{l as E,m as d,z as T,a as l,c as V,G as h,w as u,b as m,e as k,d as w,u as y,a3 as x,O as P,P as p}from"./index-CVOJVSsC.js";import{u as b}from"./SessionDetailView-BQbPg-RJ.js";import"./sessions-D681M81k.js";import"./ApiClient-Dbs1H78V.js";import"./settings-D0evez2V.js";import"./projects-DbBQQH-V.js";import"./EffortLevelSelector-DPofLvm-.js";import"./SessionLogStream-B-FwUMJQ.js";import"./commandButtons-DNSHH8IA.js";import"./ArchiveConfirmModal-CCxSZ52u.js";import"./ModelSelector-BBn_Ve0D.js";import"./providers-ceCc4xRU.js";import"./SlashCommandWizard-BgaOw9W3.js";import"./QuickResponseSettings-B2eVAtHW.js";import"./QuickResponsesPanel-lU8pW2B0.js";import"./ResizableTextarea-DSy1mWGY.js";const A={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:v,emit:f}){const _=P(()=>p(()=>import("./index-CTumW_tV.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(e=>p(()=>Promise.resolve({}),__vite__mapDeps([27])).then(()=>e.MdEditor))),r=c,n=f,g=b(),t=E(r.content||"");let o=null,i=r.content||"";d(t,e=>{o&&clearTimeout(o),o=setTimeout(()=>{i=e,n("save",e)},1e3)});function s(){o&&(clearTimeout(o),o=null),t.value!==i&&n("save",t.value)}return v({flushPendingSave:s}),d(()=>r.content,e=>{e!==t.value&&(t.value=e||"")}),T(()=>{s(),g.endEditing(r.filename)}),(e,a)=>(l(),V("div",A,[(l(),h(x,null,{default:u(()=>[w(y(_),{modelValue:t.value,"onUpdate:modelValue":a[0]||(a[0]=S=>t.value=S),theme:"dark",preview:!1,language:"en-US","no-upload-img":!0,"show-code-row-number":!0},null,8,["modelValue"])]),fallback:u(()=>[...a[1]||(a[1]=[m("div",{class:"editor-loading"},[m("span",{class:"loading-spinner"}),k(" Loading editor... ")],-1)])]),_:1}))]))}};export{J as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.canvas-md-editor{flex:1;display:flex;flex-direction:column;min-height:0}.canvas-md-editor .md-editor{flex:1;--md-bk-color: rgb(17 24 39) !important;--md-border-color: var(--color-border, #374151) !important;--md-color: rgb(243 244 246) !important;border:none!important}.canvas-md-editor .md-editor-dark{--md-bk-color: rgb(17 24 39) !important;--md-bk-color-outstand: rgb(31 41 55) !important;--md-bk-hover: rgb(55 65 81) !important;--md-border-color: var(--color-border, #374151) !important;--md-border-hover: rgb(75 85 99) !important;--md-border-active: rgb(34 211 238) !important;--md-color: rgb(243 244 246) !important;--md-modal-mask: rgba(0, 0, 0, .5) !important;--md-scrollbar-bg-color: rgb(55 65 81) !important;--md-scrollbar-thumb-color: rgb(107 114 128) !important;--md-scrollbar-thumb-hover-color: rgb(156 163 175) !important}.canvas-md-editor .md-editor-toolbar-wrapper,.canvas-md-editor .md-editor-footer{background:#1f2937!important}.canvas-md-editor .editor-loading{display:flex;align-items:center;gap:.5rem;justify-content:center;padding:2rem;color:var(--color-text-soft)}.canvas-md-editor .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)}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{u as x}from"./providers-ceCc4xRU.js";import{_ as L,o as N,l as M,m as V,a as r,c as n,b as z,t as _,k as F,F as I,r as S,u as R,E as D,x as f,$ as H}from"./index-CVOJVSsC.js";const P=["data-model"],U=["value","disabled"],$={key:0,value:""},j=["label"],q=["value","data-provider-id"],A={__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:""}},emits:["update:modelValue"],setup(i,{emit:b}){const d=i,v=b,s=x(),h=f(()=>s.providers.length>0&&s.providers.some(e=>e.models&&e.models.length>0)),B=f(()=>{const e=new Set;for(const t of s.providers)if(t.models)for(const l of t.models)e.add(l.modelId);return e});function g(e){return e&&B.value.has(e)}const u=f(()=>{var l,o,m;const e=s.providers.find(c=>c.isBuiltIn);if((l=e==null?void 0:e.models)!=null&&l.length){const c=e.models.find(E=>E.tier==="sonnet");return(c==null?void 0:c.modelId)||e.models[0].modelId}const t=s.providers[0];return((m=(o=t==null?void 0:t.models)==null?void 0:o[0])==null?void 0:m.modelId)||null}),w=M(!1);N(async()=>{(s.providers.length===0||!h.value)&&await s.fetchProviders(),w.value=!0});function p(e){var l;if(!e)return null;if(e.includes("claude-"))return e;const t=s.providers.find(o=>o.isBuiltIn);if((l=t==null?void 0:t.models)!=null&&l.length){const o=t.models.find(m=>m.tier===e);if(o)return o.modelId}return e}const a=M(p(d.modelValue)),y=f(()=>d.allowEmpty&&(!a.value||a.value==="")?"":a.value&&g(a.value)?a.value:u.value?u.value:a.value),k=H(d,"modelValue");V(k,e=>{a.value=p(e)},{flush:"sync"}),V(()=>s.providers,()=>{if(!h.value)return;if(d.allowEmpty&&(!d.modelValue||d.modelValue==="")){a.value="";return}let e=null;d.modelValue&&(e=p(d.modelValue)),e&&g(e)?a.value!==e&&(a.value=e,e!==d.modelValue&&v("update:modelValue",e)):u.value&&a.value!==u.value&&(a.value=u.value,v("update:modelValue",u.value))},{deep:!0,immediate:!0});function C(e){y.value!==e&&(a.value=e,v("update:modelValue",e))}return(e,t)=>(r(),n("div",{class:"model-selector","data-model":y.value},[z("select",{id:"model-select",value:y.value,disabled:i.disabled,class:D(i.selectClass||"model-select"),onChange:t[0]||(t[0]=l=>C(l.target.value))},[i.allowEmpty?(r(),n("option",$,_(i.emptyLabel),1)):F("",!0),(r(!0),n(I,null,S(R(s).providers,l=>(r(),n("optgroup",{key:l.id,label:l.name},[(r(!0),n(I,null,S(l.models,o=>(r(),n("option",{key:o.id,value:o.modelId,"data-provider-id":l.id},_(l.isBuiltIn?o.displayName:o.modelId),9,q))),128))],8,j))),128))],42,U)],8,P))}},K=L(A,[["__scopeId","data-v-ea265eb4"]]);export{K as M};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.model-selector[data-v-ea265eb4]{display:flex;align-items:center;gap:.5rem}.model-select[data-v-ea265eb4]{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:.375rem 2rem .375rem .5rem;font-size:.75rem;font-weight:500;background-color:var(--color-background);border:1px solid var(--color-border);border-radius:.375rem;color:var(--color-text-soft);cursor:pointer;transition:all .15s;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%239ca3af' d='M1.5 4.5l4.5 4 4.5-4'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right .5rem center;background-size:12px}.model-select[data-v-ea265eb4]:hover:not(:disabled){border-color:var(--color-border-hover);background-color:var(--color-bg-hover)}.model-select[data-v-ea265eb4]:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 2px #06b6d41a}.model-select[data-v-ea265eb4]:disabled{opacity:.5;cursor:not-allowed}.model-select option[data-v-ea265eb4]{background-color:var(--color-background);color:var(--color-text)}
|