circuschief 0.7.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/packages/server/src/agents/adapters/CodexAdapter.js +5 -4
- package/packages/server/src/api/canvas.js +22 -57
- package/packages/server/src/api/commandButtons.js +16 -15
- package/packages/server/src/api/index.js +2 -0
- package/packages/server/src/api/kanban.js +4 -2
- package/packages/server/src/api/projects-commandButtons.js +6 -6
- package/packages/server/src/api/projects-helpers.js +20 -3
- package/packages/server/src/api/projects-session-create.js +109 -0
- package/packages/server/src/api/projects-session-defaults.js +51 -0
- package/packages/server/src/api/projects-session-helpers.js +57 -5
- package/packages/server/src/api/projects-templates.js +38 -0
- package/packages/server/src/api/projects.js +28 -170
- package/packages/server/src/api/providers.js +11 -1
- package/packages/server/src/api/sessions-commands.js +46 -25
- package/packages/server/src/api/sessions-lifecycle.js +10 -10
- package/packages/server/src/api/sessions-patch.js +45 -1
- package/packages/server/src/api/sessions.js +6 -5
- package/packages/server/src/database.js +0 -2
- package/packages/server/src/db/DatabaseManager.js +5 -1
- package/packages/server/src/db/ProjectDefaultsRepository.js +3 -3
- package/packages/server/src/db/ProviderRepository.js +87 -32
- package/packages/server/src/db/SessionRepository.js +2 -1
- package/packages/server/src/db/SessionTemplateRepository.js +23 -2
- package/packages/server/src/db/index.js +0 -3
- package/packages/server/src/db/migrations/index.js +60 -7
- package/packages/server/src/db/migrations/kanbanMigrations.js +1 -1
- package/packages/server/src/db/migrations/miscMigrations.js +59 -184
- package/packages/server/src/db/migrations/projectsMigrations.js +31 -0
- package/packages/server/src/db/migrations/providerCommitAttributionMigrations.js +30 -0
- package/packages/server/src/db/migrations/providerMigrations.js +165 -0
- package/packages/server/src/db/migrations/sessionTableRecreate.js +136 -0
- package/packages/server/src/db/migrations/sessionsMigrations.js +18 -5
- package/packages/server/src/db/seedBaselineData.js +137 -0
- package/packages/server/src/db/session-helpers.js +32 -4
- package/packages/server/src/middleware/sessionLookup.js +81 -8
- package/packages/server/src/schema.sql +153 -132
- package/packages/server/src/scripts/backupDatabase.js +21 -0
- package/packages/server/src/scripts/dbUtils.js +81 -0
- package/packages/server/src/scripts/inspectDatabaseSchema.js +81 -0
- package/packages/server/src/scripts/validateDatabaseBaseline.js +212 -0
- package/packages/server/src/services/codexSpawnHelper.js +9 -0
- package/packages/server/src/services/commandButtonPrompts.js +14 -12
- package/packages/server/src/services/commandRunner.js +7 -1
- package/packages/server/src/services/e2eSpawnCapture.js +147 -0
- package/packages/server/src/services/gitCommitAttribution.js +150 -0
- package/packages/server/src/services/gitDiff.js +132 -0
- package/packages/server/src/services/gitRepoUrl.js +174 -0
- package/packages/server/src/services/gitService.js +48 -311
- package/packages/server/src/services/gitSessionSetup.js +11 -1
- package/packages/server/src/services/gitWorktree.js +127 -0
- package/packages/server/src/services/kanbanTriggers.js +6 -3
- package/packages/server/src/services/nodeSpawnHelper.js +9 -0
- package/packages/server/src/services/prUrlService.js +3 -3
- package/packages/server/src/services/queryParamBuilder.js +90 -0
- package/packages/server/src/services/sessionDuplicator.js +1 -5
- package/packages/server/src/services/sessionExecution.js +56 -108
- package/packages/server/src/services/sessionPrompts.js +12 -47
- package/packages/server/src/services/sessionProvider.js +10 -0
- package/packages/server/src/services/summaryService.js +5 -3
- package/packages/server/src/services/summaryStaleCheck.js +23 -4
- package/packages/server/src/services/templateTriggerService.js +3 -1
- package/packages/shared/src/constants.js +3 -0
- package/packages/shared/src/contracts/commandButtons.js +16 -2
- package/packages/shared/src/contracts/projects.js +2 -2
- package/packages/shared/src/contracts/providers.js +60 -0
- package/packages/shared/src/contracts/sessions.js +29 -2
- package/packages/shared/src/contracts/templates.js +12 -2
- package/packages/shared/src/types.js +1 -9
- package/packages/shared/src/utils.js +2 -2
- package/packages/web/dist/assets/{ActiveSessionsView-UJsCILDL.js → ActiveSessionsView-Cxh8mHmB.js} +1 -1
- package/packages/web/dist/assets/{AgentLogsView-BGFPLjLa.js → AgentLogsView-xdfI2bR6.js} +2 -2
- package/packages/web/dist/assets/ApiClient-DfbJwzpz.js +1 -0
- package/packages/web/dist/assets/ArchiveConfirmModal-DXZYdzHR.js +1 -0
- package/packages/web/dist/assets/ArchiveConfirmModal-DeoCVGXt.css +1 -0
- package/packages/web/dist/assets/CommandButtonDetailView-D8xfqLAp.js +1 -0
- package/packages/web/dist/assets/CommandButtonDetailView-D9zjx9ME.css +1 -0
- package/packages/web/dist/assets/EffortLevelSelector-D2Hdzc_8.js +1 -0
- package/packages/web/dist/assets/{GeneralSettingsView-DsHChEhv.js → GeneralSettingsView-sPXkLlLy.js} +1 -1
- package/packages/web/dist/assets/InputWithButton-B-o0DgMH.js +1 -0
- package/packages/web/dist/assets/{InputWithButton-cYdrEmTs.css → InputWithButton-D9HMvfR5.css} +1 -1
- package/packages/web/dist/assets/{InterpolationHelp-CIkOSkWX.js → InterpolationHelp-Dxn1li4l.js} +1 -1
- package/packages/web/dist/assets/MarkdownEditor-D4Kbb-9l.js +2 -0
- package/packages/web/dist/assets/ModelSelector-72C7MUH4.js +1 -0
- package/packages/web/dist/assets/{ModelSelector-D8hbTRIt.css → ModelSelector-BNYKujL-.css} +1 -1
- package/packages/web/dist/assets/NewSessionView-BR_COfgW.js +3 -0
- package/packages/web/dist/assets/NewSessionView-DBl7T2Xp.css +1 -0
- package/packages/web/dist/assets/ProjectEditView-DbqTbA0q.css +1 -0
- package/packages/web/dist/assets/ProjectEditView-WImU7sNd.js +1 -0
- package/packages/web/dist/assets/{ProjectListView-B9FuWESY.js → ProjectListView-CYmmAcBD.js} +1 -1
- package/packages/web/dist/assets/{ProjectNewView-D62jYlBL.js → ProjectNewView-DEhqw3Jv.js} +1 -1
- package/packages/web/dist/assets/ProvidersView-XZh3jkmH.js +1 -0
- package/packages/web/dist/assets/ProvidersView-bZemq_Rv.css +1 -0
- package/packages/web/dist/assets/QuickResponsesPanel-BqmnTd-D.js +1 -0
- package/packages/web/dist/assets/QuickResponsesPanel-dk-Rj8xx.css +1 -0
- package/packages/web/dist/assets/ResizableTextarea-BQNw5e0C.css +1 -0
- package/packages/web/dist/assets/ResizableTextarea-DpWdIAP6.js +1 -0
- package/packages/web/dist/assets/SessionCard-Bw77-KwD.js +1 -0
- package/packages/web/dist/assets/SessionDetailView-B59TEkr-.js +36 -0
- package/packages/web/dist/assets/SessionDetailView-CKVBnR4T.css +1 -0
- package/packages/web/dist/assets/{SessionFormOptions-DYUISplS.js → SessionFormOptions-hqijxc0S.js} +1 -1
- package/packages/web/dist/assets/SessionListView-3-xx6EVs.css +1 -0
- package/packages/web/dist/assets/SessionListView-DYXHM9I-.js +1 -0
- package/packages/web/dist/assets/{SessionLogStream-DpUE6Xsh.js → SessionLogStream-5NfVr9pF.js} +6 -6
- package/packages/web/dist/assets/{SettingsView-BC055tIA.js → SettingsView-DI8ncOAV.js} +1 -1
- package/packages/web/dist/assets/{SlashCommandWizard-DmTyNG9O.js → SlashCommandWizard-BQ_rMzn-.js} +1 -1
- package/packages/web/dist/assets/{SlashCommandWizard-Dn7sNaBd.css → SlashCommandWizard-DJzw3LP5.css} +1 -1
- package/packages/web/dist/assets/{SummarySettingsView-BgnRCwlq.js → SummarySettingsView-C2Qs35mm.js} +1 -1
- package/packages/web/dist/assets/TemplateDetailView-B5NI2oTR.css +1 -0
- package/packages/web/dist/assets/TemplateDetailView-zVkIvgtu.js +1 -0
- package/packages/web/dist/assets/{commandButtons-D4RPpLiu.js → commandButtons-CoU3G4zK.js} +1 -1
- package/packages/web/dist/assets/index-9yF1uCCA.js +1 -0
- package/packages/web/dist/assets/index-BKstCaYU.js +1 -0
- package/packages/web/dist/assets/index-BhbH7eOk.js +1 -0
- package/packages/web/dist/assets/{index-BGwH4Cfn.js → index-BjuRttEY.js} +3 -3
- package/packages/web/dist/assets/index-Bo7PdwM5.js +1 -0
- package/packages/web/dist/assets/index-C2QFVD7d.js +83 -0
- package/packages/web/dist/assets/index-C7Ww2auW.js +1 -0
- package/packages/web/dist/assets/index-CAGdsDh7.js +1 -0
- package/packages/web/dist/assets/index-CLRsVASf.js +3 -0
- package/packages/web/dist/assets/{index-Bn5xdGFM.js → index-CP-SxOlV.js} +1 -1
- package/packages/web/dist/assets/index-CslU0psO.js +1 -0
- package/packages/web/dist/assets/index-DI4NxaWD.js +1 -0
- package/packages/web/dist/assets/index-DOzONENy.js +1 -0
- package/packages/web/dist/assets/index-DUa7adFh.js +1 -0
- package/packages/web/dist/assets/index-DZBpETI5.js +1 -0
- package/packages/web/dist/assets/index-DsjWqc6R.js +7 -0
- package/packages/web/dist/assets/index-c99Bo3JV.js +1 -0
- package/packages/web/dist/assets/index-mT1JpxDc.js +1 -0
- package/packages/web/dist/assets/index-rkQx2tso.js +1 -0
- package/packages/web/dist/assets/{index-Cs2nxhrT.css → index-uySCcnA_.css} +1 -1
- package/packages/web/dist/assets/projectDefaults-B8esIcYq.js +1 -0
- package/packages/web/dist/assets/{projects-BUiOGmmb.js → projects-C-8PSxKi.js} +1 -1
- package/packages/web/dist/assets/{providers-Bh1ZiiJi.js → providers-oXifvvqN.js} +1 -1
- package/packages/web/dist/assets/sessions-Nq5VafSf.js +1 -0
- package/packages/web/dist/assets/{settings-Z4AVVmkJ.js → settings-DtpuiyT6.js} +1 -1
- package/packages/web/dist/index.html +2 -2
- package/packages/server/src/api/sessions-notes.js +0 -51
- package/packages/server/src/db/SessionNoteRepository.js +0 -60
- package/packages/web/dist/assets/ApiClient-B4YTtyY4.js +0 -1
- package/packages/web/dist/assets/ArchiveConfirmModal-BQ-4gI0R.css +0 -1
- package/packages/web/dist/assets/ArchiveConfirmModal-OFaj_uX5.js +0 -1
- package/packages/web/dist/assets/CommandButtonDetailView-D8S258uP.js +0 -1
- package/packages/web/dist/assets/CommandButtonDetailView-DBm3rzhw.css +0 -1
- package/packages/web/dist/assets/EffortLevelSelector-C2378L8e.js +0 -1
- package/packages/web/dist/assets/InputWithButton-Ci15ox0a.js +0 -1
- package/packages/web/dist/assets/MarkdownEditor-5-bexzUT.js +0 -2
- package/packages/web/dist/assets/ModelSelector-BMpR0DPr.js +0 -1
- package/packages/web/dist/assets/NewSessionView-BCqtIgWH.js +0 -3
- package/packages/web/dist/assets/NewSessionView-CUUdHkfv.css +0 -1
- package/packages/web/dist/assets/ProjectEditView-D9sK0fdH.css +0 -1
- package/packages/web/dist/assets/ProjectEditView-RFaxHhAX.js +0 -1
- package/packages/web/dist/assets/ProvidersView-DDKMIQWZ.js +0 -1
- package/packages/web/dist/assets/ProvidersView-DE82G_5W.css +0 -1
- package/packages/web/dist/assets/QuickResponseSettings-B8188A1D.css +0 -1
- package/packages/web/dist/assets/QuickResponseSettings-CDm5vwP7.js +0 -1
- package/packages/web/dist/assets/QuickResponsesPanel-BlFDvnZ2.css +0 -1
- package/packages/web/dist/assets/QuickResponsesPanel-DZ_Lre_l.js +0 -1
- package/packages/web/dist/assets/ResizableTextarea-DiIOEGjN.js +0 -1
- package/packages/web/dist/assets/ResizableTextarea-DsU3TVwF.css +0 -1
- package/packages/web/dist/assets/SessionCard-DmjnVYWn.js +0 -1
- package/packages/web/dist/assets/SessionDetailView-CL7nmfiB.js +0 -36
- package/packages/web/dist/assets/SessionDetailView-CupIkI7u.css +0 -1
- package/packages/web/dist/assets/SessionListView-BcxGz4aC.js +0 -1
- package/packages/web/dist/assets/SessionListView-fHlQyecX.css +0 -1
- package/packages/web/dist/assets/TemplateDetailView-BlhOmLUX.js +0 -1
- package/packages/web/dist/assets/TemplateDetailView-DT2m06W7.css +0 -1
- package/packages/web/dist/assets/index-4rhEeO0B.js +0 -1
- package/packages/web/dist/assets/index-9vb2KaAd.js +0 -1
- package/packages/web/dist/assets/index-B0CvZXuN.js +0 -7
- package/packages/web/dist/assets/index-B6G18FqB.js +0 -82
- package/packages/web/dist/assets/index-BUhvkAdF.js +0 -1
- package/packages/web/dist/assets/index-BcnkUk2o.js +0 -1
- package/packages/web/dist/assets/index-CNwkdB0T.js +0 -1
- package/packages/web/dist/assets/index-CfL84oGW.js +0 -1
- package/packages/web/dist/assets/index-CkmxO8Mm.js +0 -1
- package/packages/web/dist/assets/index-Cpy4-yv3.js +0 -1
- package/packages/web/dist/assets/index-CrAQJmoZ.js +0 -1
- package/packages/web/dist/assets/index-D6Ky9vJe.js +0 -3
- package/packages/web/dist/assets/index-DfrE0gAC.js +0 -1
- package/packages/web/dist/assets/index-KwEyz0F3.js +0 -1
- package/packages/web/dist/assets/index-OfCywayk.js +0 -1
- package/packages/web/dist/assets/index-PDesaJc6.js +0 -1
- package/packages/web/dist/assets/index-uB6nhSvz.js +0 -1
- package/packages/web/dist/assets/sessions-DH1R-NhV.js +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.form-help[data-v-59edf73d]{margin:.25rem 0 0;font-size:.75rem;color:var(--color-text-soft)}.git-loading[data-v-59edf73d]{display:flex;align-items:center;gap:.5rem;color:var(--color-text-soft);font-size:.875rem;margin-bottom:1rem}.segmented-control[data-v-59edf73d]{display:flex;background:var(--color-background-mute, var(--color-bg-soft, #2a2a3e));border:1px solid var(--color-border);border-radius:.5rem;padding:.1875rem;gap:.125rem}.segment-btn[data-v-59edf73d]{flex:1;padding:.375rem .75rem;font-size:.8125rem;font-weight:500;color:var(--color-text-soft);background:transparent;border:none;border-radius:.375rem;cursor:pointer;transition:background-color .15s,color .15s;white-space:nowrap}.segment-btn[data-v-59edf73d]:hover{color:var(--color-text)}.segment-btn--active[data-v-59edf73d]{background-color:var(--color-primary, var(--color-accent, #22c55e));color:#fff}.segment-btn--active[data-v-59edf73d]:hover{color:#fff}.segment-label-short[data-v-59edf73d]{display:none}.branch-input-row[data-v-59edf73d]{margin-top:.5rem}.form-label-small[data-v-59edf73d]{font-size:.75rem;margin-bottom:.25rem}.quick-branch-input[data-v-59edf73d]{display:flex;gap:.5rem;align-items:center}.quick-branch-input input[data-v-59edf73d]{flex:1}.btn-small[data-v-59edf73d]{padding:.25rem .5rem;font-size:.75rem}.current-branch-hint[data-v-59edf73d]{margin-top:.375rem;font-size:.75rem;color:var(--color-text-soft)}@media (max-width: 480px){.segment-btn[data-v-59edf73d]{padding:.375rem .5rem;font-size:.75rem}.segment-label-full[data-v-59edf73d]{display:none}.segment-label-short[data-v-59edf73d]{display:inline}}.form-group[data-v-cfbba021]{margin-bottom:1rem}.form-label[data-v-cfbba021]{display:block;margin-bottom:.5rem;font-weight:500;color:var(--color-text)}.form-input[data-v-cfbba021]{width:100%;padding:.5rem;border:1px solid var(--color-border);border-radius:var(--border-radius, 4px);background:var(--color-background);color:var(--color-text);font-size:.95rem}.form-input[data-v-cfbba021]:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 2px #22c5ff1a}.form-help[data-v-cfbba021]{margin-top:.25rem;font-size:.875rem;color:var(--color-text-soft)}.toggle-switch[data-v-cfbba021]{display:flex;align-items:center;cursor:pointer;gap:.75rem}.toggle-switch input[data-v-cfbba021]{display:none}.toggle-slider[data-v-cfbba021]{position:relative;display:inline-block;width:2.5rem;height:1.25rem;background-color:var(--color-border);border-radius:1rem;transition:background-color .2s}.toggle-slider[data-v-cfbba021]: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-cfbba021]{background-color:var(--color-primary)}.toggle-switch input:checked+.toggle-slider[data-v-cfbba021]:after{transform:translate(1.25rem)}.toggle-label[data-v-cfbba021]{color:var(--color-text);font-weight:500}.reschedule-settings[data-v-cfbba021]{padding:1rem;margin-top:1rem;border-left:2px solid var(--color-primary);background:var(--color-background, rgba(255, 255, 255, .02))}.settings-label[data-v-cfbba021]{margin-bottom:.75rem;font-weight:500;font-size:.95rem;color:var(--color-text)}.checkbox-option[data-v-cfbba021]{display:flex;align-items:center;gap:.75rem;margin-bottom:.75rem;cursor:pointer}.checkbox-option input[data-v-cfbba021]{width:1rem;height:1rem;cursor:pointer}.checkbox-label[data-v-cfbba021]{color:var(--color-text)}.limits-section[data-v-cfbba021]{margin-top:1.5rem;padding-top:1rem;border-top:1px solid var(--color-border)}@media (max-width: 480px){.form-group[data-v-cfbba021]{margin-bottom:.5rem}}.back-link[data-v-3e37bc7e]{font-size:.875rem;color:var(--color-text-soft);display:inline-block;margin-bottom:.25rem;margin-top:0}h1[data-v-3e37bc7e]{margin-bottom:.5rem;margin-top:0}.form[data-v-3e37bc7e]{width:100%}.form-help[data-v-3e37bc7e]{margin:.5rem 0 0;font-size:.75rem;color:var(--color-text-soft)}.attachment-row[data-v-3e37bc7e]{margin-top:.5rem;display:flex;gap:.5rem;align-items:center}.form-actions[data-v-3e37bc7e]{display:flex;gap:.75rem;align-items:center;margin-top:1rem}.btn-submit[data-v-3e37bc7e]{flex:1;justify-content:center;text-align:center;padding-top:.75rem;padding-bottom:.75rem;font-size:1.05rem}.btn-secondary[data-v-3e37bc7e]{padding:.75rem 1.25rem;font-size:1.05rem;background:transparent;border:1px solid var(--color-border);color:var(--color-text-soft);border-radius:var(--border-radius, 4px);cursor:pointer;transition:border-color .15s,color .15s}.btn-secondary[data-v-3e37bc7e]:hover{border-color:var(--color-border-hover);color:var(--color-text)}.error-message[data-v-3e37bc7e]{color:var(--color-error);margin-bottom:1rem}.advanced-options[data-v-3e37bc7e]{margin-top:.5rem;margin-bottom:.5rem}@media (max-width: 480px){h1[data-v-3e37bc7e]{margin-bottom:.5rem;font-size:1.5rem}.form.card[data-v-3e37bc7e]{padding:.75rem}}@media (max-width: 640px){.form-actions[data-v-3e37bc7e]{position:sticky;bottom:0;background:var(--color-background-soft, var(--color-bg-soft, #1a1a2e));border-top:1px solid var(--color-border);padding:.75rem 1rem;margin:0 -1rem -1rem;padding-bottom:calc(.75rem + env(safe-area-inset-bottom));z-index:10}}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.advanced-settings[data-v-44c189d5]{margin-bottom:1rem}.advanced-settings summary[data-v-44c189d5]{cursor:pointer;color:var(--color-primary);font-weight:500;margin-bottom:1rem}.advanced-settings[open] summary[data-v-44c189d5]{margin-bottom:1rem}.form-help[data-v-44c189d5]{margin-top:.5rem;font-size:.875rem;color:var(--color-text-muted)}.checkbox-label[data-v-44c189d5]{display:flex;align-items:center;gap:.5rem;cursor:pointer;font-weight:500}.checkbox-label input[type=checkbox][data-v-44c189d5]{width:1rem;height:1rem;cursor:pointer}.form-input[type=select][data-v-44c189d5],select.form-input[data-v-44c189d5]{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23999' d='M6 9L1 4h10z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right .75rem center;padding-right:2.5rem}h1[data-v-8687e9cb]{margin-bottom:2rem}.loading-state[data-v-8687e9cb]{display:flex;align-items:center;gap:.5rem;justify-content:center;padding:3rem}.form[data-v-8687e9cb]{max-width:500px}.form-actions[data-v-8687e9cb]{display:flex;justify-content:space-between;align-items:center}.form-actions-right[data-v-8687e9cb]{display:flex;gap:.5rem}.error-message[data-v-8687e9cb]{color:var(--color-error);margin-bottom:1rem}.form-textarea[data-v-8687e9cb]{resize:vertical;min-height:120px;font-family:monospace;font-size:.875rem;line-height:1.5}.form-help[data-v-8687e9cb]{margin-top:.5rem;font-size:.875rem;color:var(--color-text-muted)}.advanced-settings[data-v-8687e9cb]{margin-bottom:1rem}.advanced-settings summary[data-v-8687e9cb]{cursor:pointer;color:var(--color-primary);font-weight:500;margin-bottom:1rem}.advanced-settings[open] summary[data-v-8687e9cb]{margin-bottom:1rem}.form-textarea-small[data-v-8687e9cb]{resize:vertical;min-height:60px;font-family:monospace;font-size:.875rem;line-height:1.5}.checkbox-label[data-v-8687e9cb]{display:flex;align-items:center;gap:.5rem;cursor:pointer;font-weight:500}.checkbox-label input[type=checkbox][data-v-8687e9cb]{width:1rem;height:1rem;cursor:pointer}.form-input[type=select][data-v-8687e9cb],select.form-input[data-v-8687e9cb]{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23999' d='M6 9L1 4h10z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right .75rem center;padding-right:2.5rem}.btn-link[data-v-8687e9cb]{background:none;border:none;color:var(--color-primary);font-size:.75rem;padding:0;margin-left:.5rem;cursor:pointer;text-decoration:underline}.btn-link[data-v-8687e9cb]:hover{color:var(--color-primary-hover)}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{_ as L,k as O,o as T,l as B,a as k,c as w,b as e,m as p,p as j,q as $,f as b,e as Q,v as h,d as R,i as V,n as l,u as D,j as q,D as K,t as Y,w as z,s as J,g as X,h as Z}from"./index-B6G18FqB.js";import{u as _}from"./projects-BUiOGmmb.js";import{u as G,a as ee,Q as te}from"./QuickResponseSettings-CDm5vwP7.js";import{P as se}from"./InputWithButton-Ci15ox0a.js";import{M as oe}from"./ModelSelector-BMpR0DPr.js";import{a as le}from"./ApiClient-B4YTtyY4.js";import"./providers-Bh1ZiiJi.js";const ae={class:"advanced-settings"},ne={class:"form-group"},re={class:"form-group"},ie={class:"checkbox-label"},ue={class:"form-group"},de={class:"form-group"},pe={class:"checkbox-label"},me={class:"form-group"},fe={class:"form-group"},ve={class:"form-group"},be=["disabled"],ce={key:0,class:"loading-spinner"},ge={__name:"ProjectSessionDefaults",props:{projectId:{type:String,required:!0}},setup(N,{expose:P}){const u=N,E=G(),c=O(),S=l(""),C=l(!1),g=l(""),v=l(!0),i=l(""),m=l(""),f=l(""),d=l(null),y=l(!1);T(()=>{E.fetchDefaults(u.projectId)}),B(()=>E.getDefaultsForProject(u.projectId),o=>{o&&(S.value=o.mode||"",C.value=o.thinkingEnabled||!1,g.value=o.effortLevel??"",v.value=o.startImmediately!==!1,i.value=o.gitMode||"",m.value=o.gitBranch||"",f.value=o.model||"",d.value=o.providerId||null)},{immediate:!0});function I(){const o={};return S.value&&(o.mode=S.value),C.value&&(o.thinkingEnabled=!0),g.value&&(o.effortLevel=g.value),v.value||(o.startImmediately=!1),i.value&&(o.gitMode=i.value),m.value&&(o.gitBranch=m.value),f.value?(o.model=f.value,o.providerId=d.value||null):(o.model=null,o.providerId=null),o}async function x(){if(confirm("Reset all session defaults to system defaults?")){y.value=!0;try{await E.resetDefaults(u.projectId),S.value="",C.value=!1,g.value="",v.value=!0,i.value="",m.value="",f.value="",d.value=null,c.success("Session defaults reset to system defaults")}catch(o){c.error(o.message)}finally{y.value=!1}}}return P({collectNonDefaultValues:I}),(o,s)=>(k(),w("details",ae,[s[25]||(s[25]=e("summary",null,"Session Defaults",-1)),s[26]||(s[26]=e("p",{class:"form-help"}," Set default values for new sessions created in this project. These values can be overridden when creating individual sessions. ",-1)),e("div",ne,[s[9]||(s[9]=e("label",{class:"form-label",for:"defaultMode"},"Mode",-1)),p(e("select",{id:"defaultMode","onUpdate:modelValue":s[0]||(s[0]=a=>S.value=a),class:"form-input"},[...s[8]||(s[8]=[e("option",{value:""}," Use system default (standard) ",-1),e("option",{value:"plan"}," Plan ",-1),e("option",{value:"standard"}," Standard ",-1),e("option",{value:"yolo"}," YOLO ",-1)])],512),[[j,S.value]])]),e("div",re,[e("label",ie,[p(e("input",{"onUpdate:modelValue":s[1]||(s[1]=a=>C.value=a),type:"checkbox"},null,512),[[$,C.value]]),s[10]||(s[10]=b(" Enable thinking (extended thinking) by default ",-1))]),s[11]||(s[11]=e("p",{class:"form-help"}," Enable the agent's extended thinking capability for new sessions. ",-1))]),e("div",ue,[s[13]||(s[13]=e("label",{class:"form-label",for:"defaultEffortLevel"},"Default Effort Level",-1)),p(e("select",{id:"defaultEffortLevel","onUpdate:modelValue":s[2]||(s[2]=a=>g.value=a),class:"form-input"},[...s[12]||(s[12]=[Q('<option value="" data-v-44c189d5> Auto (default) </option><option value="low" data-v-44c189d5> Low </option><option value="medium" data-v-44c189d5> Medium </option><option value="high" data-v-44c189d5> High </option><option value="max" data-v-44c189d5> Max </option>',5)])],512),[[j,g.value]]),s[14]||(s[14]=e("p",{class:"form-help"}," Set the default effort level for new sessions. Controls how much effort the agent puts into responses. ",-1))]),e("div",de,[e("label",pe,[p(e("input",{"onUpdate:modelValue":s[3]||(s[3]=a=>v.value=a),type:"checkbox"},null,512),[[$,v.value]]),s[15]||(s[15]=b(" Start sessions immediately ",-1))]),s[16]||(s[16]=e("p",{class:"form-help"},' When enabled, sessions will start automatically. When disabled, sessions will be created in "waiting" state. ',-1))]),e("div",me,[s[18]||(s[18]=e("label",{class:"form-label",for:"defaultGitMode"},"Git Mode",-1)),p(e("select",{id:"defaultGitMode","onUpdate:modelValue":s[4]||(s[4]=a=>i.value=a),class:"form-input"},[...s[17]||(s[17]=[e("option",{value:""}," No git isolation ",-1),e("option",{value:"branch"}," Create branch for each session ",-1),e("option",{value:"worktree"}," Create worktree for each session ",-1)])],512),[[j,i.value]]),s[19]||(s[19]=e("p",{class:"form-help"}," Controls how git changes are isolated for each session. ",-1))]),e("div",fe,[s[20]||(s[20]=e("label",{class:"form-label",for:"defaultGitBranch"},"Default Git Branch",-1)),p(e("input",{id:"defaultGitBranch","onUpdate:modelValue":s[5]||(s[5]=a=>m.value=a),type:"text",class:"form-input",placeholder:"e.g., feature/ai-implementation"},null,512),[[h,m.value]]),s[21]||(s[21]=e("p",{class:"form-help"}," When using git branch mode, this is the branch name pattern for new sessions. ",-1))]),e("div",ve,[s[22]||(s[22]=e("label",{class:"form-label",for:"defaultModel"},"Model",-1)),R(oe,{modelValue:f.value,"onUpdate:modelValue":s[6]||(s[6]=a=>f.value=a),"provider-id":d.value,"onUpdate:providerId":s[7]||(s[7]=a=>d.value=a),"allow-empty":!0,"empty-label":"Use system default","select-class":"form-input"},null,8,["modelValue","provider-id"]),s[23]||(s[23]=e("p",{class:"form-help"}," Choose the default model for new sessions in this project. ",-1))]),e("button",{type:"button",class:"btn btn-secondary",disabled:y.value,onClick:x},[y.value?(k(),w("span",ce)):V("",!0),s[24]||(s[24]=b(" Reset to System Defaults ",-1))],8,be)]))}},ye=L(ge,[["__scopeId","data-v-44c189d5"]]),Se={class:"container"},ke={key:0,class:"loading-state"},we={class:"form-group"},Ce={class:"form-group"},De={class:"form-group"},he={class:"input-with-button"},Pe=["placeholder"],Ee=["disabled"],Ie={class:"form-group"},xe={class:"form-group"},Ue={class:"form-label",for:"systemPrompt"},Re={class:"advanced-settings"},Ve={class:"form-group"},Me={class:"form-group"},je={class:"advanced-settings"},$e={class:"advanced-settings"},Ne={class:"form-group"},Le={class:"checkbox-label"},Oe={key:0,class:"error-message"},Te={class:"form-actions"},Be={class:"form-actions-right"},Ge=["disabled"],Fe={key:0,class:"loading-spinner"},He={__name:"ProjectEditView",setup(N){const P=K,u=J(),E=Z(),c=_(),S=G(),C=ee(),g=O(),v=l(""),i=l(""),m=l(""),f=l(""),d=l(""),y=l(""),I=l(""),x=l(!1),o=l(!1),s=l(null),a=l(!1),U=l(null),M=l(!1);T(()=>{c.fetchProject(u.params.id),C.fetchForProject(u.params.id)}),B(()=>c.currentProject,r=>{r&&(v.value=r.name,i.value=r.workingDirectory,m.value=r.worktreePath||"",f.value=r.repoUrl||"",d.value=r.systemPrompt||P,y.value=r.onSessionCreated||"",I.value=r.onSessionDeleted||"",x.value=r.kanbanEnabled||!1)},{immediate:!0});async function F(){if(i.value){o.value=!0;try{const r=await le.detectWorktreePath(i.value);m.value=r.worktreePath}catch{}finally{o.value=!1}}}async function H(){var r;a.value=!0,U.value=null;try{await c.updateProject(u.params.id,{name:v.value,workingDirectory:i.value,worktreePath:m.value||null,repoUrl:f.value||null,systemPrompt:d.value===P?null:d.value,onSessionCreated:y.value||null,onSessionDeleted:I.value||null,kanbanEnabled:x.value});const t=(r=s.value)==null?void 0:r.collectNonDefaultValues();t&&Object.keys(t).length>0&&await S.updateDefaults(u.params.id,t),g.success("Repository updated"),E.push(`/projects/${u.params.id}/sessions`)}catch(t){U.value=t.message}finally{a.value=!1}}async function W(){if(confirm("Are you sure you want to delete this project?"))try{await c.deleteProject(u.params.id),g.success("Repository removed"),E.push("/")}catch(r){U.value=r.message}}return(r,t)=>{const A=X("router-link");return k(),w("div",Se,[t[32]||(t[32]=e("h1",null,"Edit Project",-1)),D(c).loading?(k(),w("div",ke,[...t[11]||(t[11]=[e("span",{class:"loading-spinner"},null,-1),b(" Loading... ",-1)])])):D(c).currentProject?(k(),w("form",{key:1,class:"form card",onSubmit:q(H,["prevent"])},[e("div",we,[t[12]||(t[12]=e("label",{class:"form-label",for:"name"},"Project Name",-1)),p(e("input",{id:"name","onUpdate:modelValue":t[0]||(t[0]=n=>v.value=n),type:"text",class:"form-input",required:""},null,512),[[h,v.value]])]),e("div",Ce,[t[13]||(t[13]=e("label",{class:"form-label",for:"workingDirectory"},"Working Directory",-1)),R(se,{modelValue:i.value,"onUpdate:modelValue":t[1]||(t[1]=n=>i.value=n)},null,8,["modelValue"])]),e("div",De,[t[14]||(t[14]=e("label",{class:"form-label",for:"worktreePath"},"Worktree Path",-1)),e("div",he,[p(e("input",{id:"worktreePath","onUpdate:modelValue":t[2]||(t[2]=n=>m.value=n),type:"text",class:"form-input",placeholder:i.value+"/.worktrees"},null,8,Pe),[[h,m.value]]),e("button",{type:"button",class:"btn btn-secondary btn-sm",disabled:!i.value||o.value,onClick:F}," Detect ",8,Ee)]),t[15]||(t[15]=e("p",{class:"form-help"}," Where git worktrees are created for sessions. Changing this only affects new sessions. ",-1))]),e("div",Ie,[t[16]||(t[16]=e("label",{class:"form-label",for:"repoUrl"},"Repository URL",-1)),p(e("input",{id:"repoUrl","onUpdate:modelValue":t[3]||(t[3]=n=>f.value=n),type:"url",class:"form-input",placeholder:"https://github.com/username/repo"},null,512),[[h,f.value]]),t[17]||(t[17]=e("p",{class:"form-help"}," Link to the project's repository (e.g., GitHub, GitLab). This can be automatically populated from session summaries. ",-1))]),e("div",xe,[e("label",Ue,[t[18]||(t[18]=b(" System Prompt ",-1)),d.value!==D(P)?(k(),w("button",{key:0,type:"button",class:"btn-link",onClick:t[4]||(t[4]=n=>d.value=D(P))}," Reset to Default ")):V("",!0)]),p(e("textarea",{id:"systemPrompt","onUpdate:modelValue":t[5]||(t[5]=n=>d.value=n),class:"form-input form-textarea",rows:"8"},null,512),[[h,d.value]]),t[19]||(t[19]=e("p",{class:"form-help"}," Customize the system prompt for the AI agent. The default prompt is pre-filled above. ",-1))]),e("details",Re,[t[24]||(t[24]=e("summary",null,"Session Lifecycle Hooks",-1)),e("div",Ve,[t[20]||(t[20]=e("label",{class:"form-label",for:"onSessionCreated"},"On Session Created",-1)),p(e("textarea",{id:"onSessionCreated","onUpdate:modelValue":t[6]||(t[6]=n=>y.value=n),class:"form-input form-textarea-small",rows:"3",placeholder:"Shell command to run when a session is created..."},null,512),[[h,y.value]]),t[21]||(t[21]=e("p",{class:"form-help"}," Runs in the background after session creation. Environment variables: CIRCUSCHIEF_SESSION_ID, CIRCUSCHIEF_PROJECT_ID, CIRCUSCHIEF_SESSION_NAME ",-1))]),e("div",Me,[t[22]||(t[22]=e("label",{class:"form-label",for:"onSessionDeleted"},"On Session Deleted",-1)),p(e("textarea",{id:"onSessionDeleted","onUpdate:modelValue":t[7]||(t[7]=n=>I.value=n),class:"form-input form-textarea-small",rows:"3",placeholder:"Shell command to run when a session is deleted..."},null,512),[[h,I.value]]),t[23]||(t[23]=e("p",{class:"form-help"}," Runs in the background after session deletion. Environment variables: CIRCUSCHIEF_SESSION_ID, CIRCUSCHIEF_PROJECT_ID, CIRCUSCHIEF_SESSION_NAME ",-1))])]),R(ye,{ref_key:"sessionDefaultsRef",ref:s,"project-id":D(u).params.id},null,8,["project-id"]),e("details",je,[t[25]||(t[25]=e("summary",null,"Quick Responses",-1)),t[26]||(t[26]=e("p",{class:"form-help"}," Quick responses are shortcuts that can be inserted into the chat input. You can create project-specific or global responses. ",-1)),e("button",{type:"button",class:"btn btn-secondary",onClick:t[8]||(t[8]=n=>M.value=!0)}," Manage Quick Responses ")]),e("details",$e,[t[29]||(t[29]=e("summary",null,[b("Kanban Board "),e("span",{class:"inline-block rounded bg-amber-900/50 px-1.5 py-0.5 text-[10px] font-semibold uppercase text-amber-300 ml-2"},"Experimental")],-1)),e("div",Ne,[e("label",Le,[p(e("input",{"onUpdate:modelValue":t[9]||(t[9]=n=>x.value=n),type:"checkbox"},null,512),[[$,x.value]]),t[27]||(t[27]=b(" Enable Kanban board ",-1))]),t[28]||(t[28]=e("p",{class:"form-help"},[e("strong",null,"Experimental."),b(" This feature is in active development and may change or be removed. Enable a Kanban board to visually organize sessions into lanes. Sessions can be dragged between lanes, and lanes can trigger automated workflows. ")],-1))])]),U.value?(k(),w("div",Oe,Y(U.value),1)):V("",!0),e("div",Te,[e("button",{type:"button",class:"btn btn-danger",onClick:W}," Delete "),e("div",Be,[R(A,{to:`/projects/${D(u).params.id}/sessions`,class:"btn"},{default:z(()=>[...t[30]||(t[30]=[b(" Cancel ",-1)])]),_:1},8,["to"]),e("button",{type:"submit",class:"btn btn-primary",disabled:a.value},[a.value?(k(),w("span",Fe)):V("",!0),t[31]||(t[31]=b(" Save ",-1))],8,Ge)])])],32)):V("",!0),R(te,{"is-open":M.value,"project-id":D(u).params.id,onClose:t[10]||(t[10]=n=>M.value=!1)},null,8,["is-open","project-id"])])}}},Je=L(He,[["__scopeId","data-v-8687e9cb"]]);export{Je as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{k as J,l as se,x as O,n as $,_ as W,a as i,c as d,b as e,e as oe,F as L,r as K,m as I,v as N,p as Q,t as y,u as s,j as z,f as w,i as V,a0 as le,d as X,E as ne,Z,o as ae}from"./index-B6G18FqB.js";import{u as ee}from"./providers-Bh1ZiiJi.js";import"./ApiClient-B4YTtyY4.js";const ie=Object.freeze(["anthropic","openai"]);function te(){return{name:"",kind:"anthropic",baseUrl:null,authToken:null,apiTimeoutMs:null,additionalEnvVars:{}}}function de(_){const m={name:_.name,kind:_.kind||"anthropic",baseUrl:_.baseUrl,authToken:_.authToken==="••••••••"?null:_.authToken,apiTimeoutMs:_.apiTimeoutMs,additionalEnvVars:_.additionalEnvVars?{..._.additionalEnvVars}:{}},p=Object.keys(m.additionalEnvVars),v=(_.models||[]).map(l=>({_serverId:l.id,modelId:l.modelId,displayName:l.displayName,tier:l.tier||"custom"}));return{formData:m,envKeys:p,models:v,authModified:!1}}function re(){return{form:$(te()),localModels:$([]),envVarKeys:$([]),showAuthToken:$(!1),saving:$(!1),testing:$(!1),error:$(null),testResult:$(null),authTokenModified:$(!1)}}function ue(_,m,p){const v=ee(),l=J(),f=re(),{form:n,localModels:b,envVarKeys:M,showAuthToken:A,saving:P,testing:h,error:E,testResult:C,authTokenModified:U}=f,S=O(()=>!!m.value),g=O(()=>!(n.value.name.trim().length===0||!S.value&&!ie.includes(n.value.kind))),a=O(()=>n.value.baseUrl||n.value.authToken);se(()=>[_.value,m.value],([t,u])=>{if(t){if(u){const c=de(u);n.value=c.formData,M.value=c.envKeys,b.value=c.models,U.value=c.authModified}else n.value=te(),M.value=[],b.value=[],U.value=!0;A.value=!1,E.value=null,C.value=null}},{deep:!0});function r(){b.value.push({modelId:"",displayName:"",tier:"custom"})}function B(t){b.value.splice(t,1)}function H(){const t=`ENV_VAR_${Object.keys(n.value.additionalEnvVars).length+1}`;n.value.additionalEnvVars[t]="",M.value.push(t)}function R(t){delete n.value.additionalEnvVars[t],M.value=M.value.filter(u=>u!==t)}function D(t,u){const c=M.value[t];if(c!==u&&c.trim()){const k=n.value.additionalEnvVars[u];delete n.value.additionalEnvVars[u],n.value.additionalEnvVars[c]=k}}async function j(){h.value=!0,E.value=null,C.value=null;try{const t=b.value.find(c=>c.tier==="sonnet"),u={kind:n.value.kind||"anthropic",baseUrl:n.value.baseUrl||void 0,authToken:n.value.authToken||void 0,defaultSonnetModel:(t==null?void 0:t.modelId)||void 0,apiTimeoutMs:n.value.apiTimeoutMs||void 0};C.value=await v.testConnection(u)}catch(t){E.value=t.message}finally{h.value=!1}}function q(t,u){return t.modelId.trim()!==u.modelId||t.displayName.trim()!==u.displayName||t.tier!==u.tier}function F(t){return{modelId:t.modelId.trim(),displayName:t.displayName.trim()||t.modelId.trim(),tier:t.tier||"custom"}}async function x(t,u,c){if(!t._serverId&&t.modelId.trim()){await v.addModel(u,F(t));return}const k=c.get(t._serverId);k&&q(t,k)&&await v.updateModel(u,t._serverId,F(t))}async function Y(t){var G;const u=new Set(b.value.filter(T=>T._serverId).map(T=>T._serverId)),c=((G=m.value)==null?void 0:G.models)||[],k=new Map(c.map(T=>[T.id,T]));for(const T of c)u.has(T.id)||await v.removeModel(t,T.id);for(const T of b.value)await x(T,t,k);await v.fetchProviders()}async function o(){var t,u;P.value=!0,E.value=null;try{const c={name:n.value.name.trim(),baseUrl:((t=n.value.baseUrl)==null?void 0:t.trim())||null,apiTimeoutMs:n.value.apiTimeoutMs||null,additionalEnvVars:Object.keys(n.value.additionalEnvVars).length>0?n.value.additionalEnvVars:null};U.value&&(c.authToken=((u=n.value.authToken)==null?void 0:u.trim())||null);let k;S.value?(k=await v.updateProvider(m.value.id,c),l.success("Provider updated successfully")):(c.kind=n.value.kind||"anthropic",k=await v.createProvider(c),l.success("Provider created successfully")),await Y(k.id),p()}catch(c){E.value=c.message}finally{P.value=!1}}return{form:n,localModels:b,envVarKeys:M,showAuthToken:A,saving:P,testing:h,error:E,testResult:C,authTokenModified:U,isEditing:S,isValid:g,canTest:a,addLocalModel:r,removeLocalModel:B,addEnvVar:H,removeEnvVar:R,updateEnvVarKey:D,testConnection:j,save:o}}const ce={class:"models-section"},ve={key:0,class:"models-list"},me=["onUpdate:modelValue"],pe=["onUpdate:modelValue"],fe=["onUpdate:modelValue"],be=["onClick"],ye={key:1,class:"models-empty"},_e={__name:"ProviderModelsList",props:{models:{type:Array,required:!0}},emits:["add","remove"],setup(_){return(m,p)=>(i(),d("div",ce,[p[3]||(p[3]=e("div",{class:"models-header"},[e("span",{class:"models-title"},"Models"),e("span",{class:"models-hint"},"Assign tiers to map provider models to Opus / Sonnet / Haiku roles")],-1)),_.models.length>0?(i(),d("div",ve,[p[2]||(p[2]=oe('<div class="model-row model-row-header" data-v-3aa7217a><span class="col-model-id" data-v-3aa7217a>Model ID</span><span class="col-display-name" data-v-3aa7217a>Display Name</span><span class="col-tier" data-v-3aa7217a>Tier</span><span class="col-actions" data-v-3aa7217a></span></div>',1)),(i(!0),d(L,null,K(_.models,(v,l)=>(i(),d("div",{key:l,class:"model-row"},[I(e("input",{"onUpdate:modelValue":f=>v.modelId=f,type:"text",placeholder:"anthropic.claude-3-sonnet-…",class:"col-model-id model-input"},null,8,me),[[N,v.modelId]]),I(e("input",{"onUpdate:modelValue":f=>v.displayName=f,type:"text",placeholder:"My Sonnet",class:"col-display-name model-input"},null,8,pe),[[N,v.displayName]]),I(e("select",{"onUpdate:modelValue":f=>v.tier=f,class:"col-tier model-input tier-select"},[...p[1]||(p[1]=[e("option",{value:"opus"}," Opus ",-1),e("option",{value:"sonnet"}," Sonnet ",-1),e("option",{value:"haiku"}," Haiku ",-1),e("option",{value:"custom"}," Custom ",-1)])],8,fe),[[Q,v.tier]]),e("button",{type:"button",class:"col-actions remove-model-btn",title:"Remove model",onClick:f=>m.$emit("remove",l)}," × ",8,be)]))),128))])):(i(),d("div",ye," No models added yet. ")),e("button",{type:"button",class:"btn btn-sm btn-secondary add-model-btn",onClick:p[0]||(p[0]=v=>m.$emit("add"))}," + Add Model ")]))}},ke=W(_e,[["__scopeId","data-v-3aa7217a"]]),he={class:"modal"},ge={class:"modal-header"},Ve={class:"modal-body"},Me={class:"form-group"},$e={class:"form-group"},Ce=["disabled","title"],Te={key:0,class:"field-note"},Ee={class:"form-group"},Ie={for:"base-url"},Pe={class:"label-hint"},Ue=["placeholder"],we={class:"form-group"},Ae={for:"auth-token"},Se={class:"label-hint"},Ne={class:"token-input-wrapper"},Be=["type"],De=["title"],Oe={class:"expandable-section"},xe={class:"section-content"},Re={class:"form-group"},Fe={class:"form-group"},Le={class:"env-vars-list"},Ke=["onUpdate:modelValue","onBlur"],He=["onUpdate:modelValue"],je=["onClick"],qe={key:0,class:"error-message"},ze={class:"test-result-header"},We={class:"test-icon"},Ye={class:"test-message"},Ge={key:0,class:"test-details"},Ze={key:0,class:"test-detail"},Je={key:1,class:"test-detail"},Qe={class:"modal-footer"},Xe=["disabled"],et={class:"footer-actions"},tt=["disabled"],st=["disabled"],ot={__name:"ProviderForm",props:{isOpen:{type:Boolean,default:!1},provider:{type:Object,default:null}},emits:["close","saved"],setup(_,{emit:m}){const p=_,v=m,{form:l,localModels:f,envVarKeys:n,showAuthToken:b,saving:M,testing:A,error:P,testResult:h,authTokenModified:E,isEditing:C,isValid:U,canTest:S,addLocalModel:g,removeLocalModel:a,addEnvVar:r,removeEnvVar:B,updateEnvVarKey:H,testConnection:R,save:D}=ue(Z(p,"isOpen"),Z(p,"provider"),()=>v("saved")),j=O(()=>l.value.kind==="openai"?"OPENAI_BASE_URL":"ANTHROPIC_BASE_URL"),q=O(()=>l.value.kind==="openai"?"OPENAI_API_KEY":"ANTHROPIC_AUTH_TOKEN"),F=O(()=>l.value.kind==="openai"?"https://api.openai.com/v1":"https://bedrock-runtime.us-east-1.amazonaws.com");function x(){v("close")}return(Y,o)=>_.isOpen?(i(),d("div",{key:0,class:"modal-overlay",onClick:z(x,["self"])},[e("div",he,[e("div",ge,[e("h2",null,y(s(C)?"Edit Provider":"Add Provider"),1),e("button",{type:"button",class:"close-btn",title:"Close",onClick:x}," × ")]),e("div",Ve,[e("form",{onSubmit:o[8]||(o[8]=z((...t)=>s(D)&&s(D)(...t),["prevent"]))},[e("div",Me,[o[11]||(o[11]=e("label",{for:"provider-name"},"Provider Name*",-1)),I(e("input",{id:"provider-name","onUpdate:modelValue":o[0]||(o[0]=t=>s(l).name=t),type:"text",placeholder:"e.g., AWS Bedrock",required:"",maxlength:"100"},null,512),[[N,s(l).name]])]),e("div",$e,[o[13]||(o[13]=e("label",{for:"provider-kind"},[w(" Compatibility* "),e("span",{class:"label-hint"},"Wire protocol & env-var convention")],-1)),I(e("select",{id:"provider-kind","onUpdate:modelValue":o[1]||(o[1]=t=>s(l).kind=t),disabled:s(C),title:s(C)?"Compatibility cannot be changed after creation":void 0,class:"kind-select",required:""},[...o[12]||(o[12]=[e("option",{value:"anthropic"}," Anthropic (Claude Code) ",-1),e("option",{value:"openai"}," OpenAI / Codex ",-1)])],8,Ce),[[Q,s(l).kind]]),s(C)?(i(),d("p",Te," Compatibility cannot be changed after creation. ")):V("",!0)]),e("div",Ee,[e("label",Ie,[o[14]||(o[14]=w(" Base URL ",-1)),e("span",Pe,"("+y(j.value)+")",1)]),I(e("input",{id:"base-url","onUpdate:modelValue":o[2]||(o[2]=t=>s(l).baseUrl=t),type:"url",placeholder:F.value},null,8,Ue),[[N,s(l).baseUrl]])]),e("div",we,[e("label",Ae,[o[15]||(o[15]=w(" Auth Token ",-1)),e("span",Se,"("+y(q.value)+")",1)]),e("div",Ne,[I(e("input",{id:"auth-token","onUpdate:modelValue":o[3]||(o[3]=t=>s(l).authToken=t),type:s(b)?"text":"password",placeholder:"Your authentication token",onInput:o[4]||(o[4]=t=>E.value=!0)},null,40,Be),[[le,s(l).authToken]]),e("button",{type:"button",class:"toggle-visibility-btn",title:s(b)?"Hide":"Show",onClick:o[5]||(o[5]=t=>b.value=!s(b))},y(s(b)?"Hide":"Show"),9,De)])]),X(ke,{models:s(f),onAdd:s(g),onRemove:s(a)},null,8,["models","onAdd","onRemove"]),e("details",Oe,[o[18]||(o[18]=e("summary",{class:"section-header"}," Advanced Settings ",-1)),e("div",xe,[e("div",Re,[o[16]||(o[16]=e("label",{for:"api-timeout"},"API Timeout (ms)",-1)),I(e("input",{id:"api-timeout","onUpdate:modelValue":o[6]||(o[6]=t=>s(l).apiTimeoutMs=t),type:"number",placeholder:"120000",min:"1000",step:"1000"},null,512),[[N,s(l).apiTimeoutMs,void 0,{number:!0}]])]),e("div",Fe,[o[17]||(o[17]=e("label",null,"Additional Environment Variables",-1)),e("div",Le,[(i(!0),d(L,null,K(s(l).additionalEnvVars,(t,u,c)=>(i(),d("div",{key:c,class:"env-var-row"},[I(e("input",{"onUpdate:modelValue":k=>s(n)[c]=k,type:"text",placeholder:"KEY",class:"env-key",onBlur:k=>s(H)(c,u)},null,40,Ke),[[N,s(n)[c]]]),I(e("input",{"onUpdate:modelValue":k=>s(l).additionalEnvVars[u]=k,type:"text",placeholder:"value",class:"env-value"},null,8,He),[[N,s(l).additionalEnvVars[u]]]),e("button",{type:"button",class:"remove-env-btn",title:"Remove",onClick:k=>s(B)(u)}," × ",8,je)]))),128)),e("button",{type:"button",class:"btn btn-sm btn-secondary",onClick:o[7]||(o[7]=(...t)=>s(r)&&s(r)(...t))}," + Add Variable ")])])])]),s(P)?(i(),d("div",qe,y(s(P)),1)):V("",!0),s(h)?(i(),d("div",{key:1,class:ne(["test-result",s(h).success?"success":"failure"])},[e("div",ze,[e("span",We,y(s(h).success?"✓":"✗"),1),e("span",Ye,y(s(h).message),1)]),s(h).details?(i(),d("div",Ge,[s(h).details.model?(i(),d("div",Ze,[o[19]||(o[19]=w(" Model: ",-1)),e("code",null,y(s(h).details.model),1)])):V("",!0),s(h).details.code?(i(),d("div",Je,[o[20]||(o[20]=w(" Error Code: ",-1)),e("code",null,y(s(h).details.code),1)])):V("",!0)])):V("",!0)],2)):V("",!0)],32)]),e("div",Qe,[e("button",{type:"button",class:"btn btn-secondary",disabled:s(M)||s(A)||!s(S),onClick:o[9]||(o[9]=(...t)=>s(R)&&s(R)(...t))},y(s(A)?"Testing...":"Test Connection"),9,Xe),e("div",et,[e("button",{type:"button",class:"btn btn-secondary",disabled:s(M),onClick:x}," Cancel ",8,tt),e("button",{type:"button",class:"btn btn-primary",disabled:s(M)||!s(U),onClick:o[10]||(o[10]=(...t)=>s(D)&&s(D)(...t))},y(s(M)?"Saving...":"Save"),9,st)])])])])):V("",!0)}},lt=W(ot,[["__scopeId","data-v-1d0519fa"]]),nt={class:"container"},at={key:0,class:"skeleton-list"},it={key:1,class:"error-message"},dt={key:2,class:"provider-list"},rt={class:"provider-header"},ut={class:"provider-title"},ct={key:0,class:"built-in-badge"},vt={class:"provider-actions"},mt=["disabled","onClick"],pt=["onClick"],ft=["onClick"],bt={class:"provider-details"},yt={key:0,class:"provider-detail"},_t={class:"detail-value"},kt={key:1,class:"provider-detail"},ht={class:"detail-value"},gt={key:2,class:"provider-detail"},Vt={class:"detail-value"},Mt={class:"modal confirm-modal"},$t={class:"modal-header"},Ct={class:"modal-body"},Tt={class:"modal-footer"},Et=["disabled"],It={__name:"ProvidersView",setup(_){const m=ee(),p=J(),v=$(!1),l=$(null),f=$(null),n=$(!1),b=$(null);ae(()=>{m.fetchProviders()});function M(){l.value=null,v.value=!0}function A(g){l.value=g,v.value=!0}function P(){v.value=!1,l.value=null}function h(){P(),m.fetchProviders()}function E(g){return g.kind==="openai"?"Uses official OpenAI API":"Uses official Anthropic API"}async function C(g){b.value=g;try{const a=await m.testExistingProvider(g);a.success?p.success(`Connection successful (model: ${a.details.model})`):p.error(`Connection failed: ${a.message}`)}catch(a){p.error(`Test failed: ${a.message}`)}finally{b.value=null}}function U(g){f.value=g}async function S(){n.value=!0;try{await m.deleteProvider(f.value.id),p.success("Provider deleted"),f.value=null}catch(g){p.error(`Failed to delete provider: ${g.message}`)}finally{n.value=!1}}return(g,a)=>(i(),d("div",nt,[e("div",{class:"page-header"},[e("button",{class:"btn btn-primary",onClick:M},[...a[3]||(a[3]=[e("span",null,"+ Add Provider",-1)])])]),a[10]||(a[10]=e("p",{class:"page-description"}," Configure custom model providers to use the agent through alternative endpoints like AWS Bedrock, Google Vertex AI, or self-hosted proxies. ",-1)),s(m).loading?(i(),d("div",at,[(i(),d(L,null,K(3,r=>e("div",{key:r,class:"skeleton card",style:{height:"120px"}})),64))])):s(m).error?(i(),d("div",it,y(s(m).error),1)):(i(),d("div",dt,[(i(!0),d(L,null,K(s(m).providers,r=>(i(),d("div",{key:r.id,class:"provider-card card"},[e("div",rt,[e("div",ut,[e("h3",null,[w(y(r.name)+" ",1),r.isBuiltIn?(i(),d("span",ct,"Built-in")):V("",!0)])]),e("div",vt,[r.isBuiltIn?V("",!0):(i(),d("button",{key:0,class:"btn btn-sm",disabled:b.value===r.id,title:"Test Connection",onClick:B=>C(r.id)},y(b.value===r.id?"Testing...":"Test"),9,mt)),r.isBuiltIn?V("",!0):(i(),d("button",{key:1,class:"btn btn-sm",onClick:B=>A(r)}," Edit ",8,pt)),r.isBuiltIn?V("",!0):(i(),d("button",{key:2,class:"btn btn-sm btn-danger",onClick:B=>U(r)}," Delete ",8,ft))])]),e("div",bt,[r.baseUrl?(i(),d("div",yt,[a[4]||(a[4]=e("span",{class:"detail-label"},"Base URL:",-1)),e("code",_t,y(r.baseUrl),1)])):V("",!0),r.defaultSonnetModel?(i(),d("div",kt,[a[5]||(a[5]=e("span",{class:"detail-label"},"Default Sonnet Model:",-1)),e("code",ht,y(r.defaultSonnetModel),1)])):V("",!0),!r.baseUrl&&r.isBuiltIn?(i(),d("div",gt,[e("span",Vt,y(E(r)),1)])):V("",!0)])]))),128))])),X(lt,{"is-open":v.value,provider:l.value,onClose:P,onSaved:h},null,8,["is-open","provider"]),f.value?(i(),d("div",{key:3,class:"modal-overlay",onClick:a[2]||(a[2]=z(r=>f.value=null,["self"]))},[e("div",Mt,[e("div",$t,[a[6]||(a[6]=e("h2",null,"Delete Provider",-1)),e("button",{type:"button",class:"close-btn",onClick:a[0]||(a[0]=r=>f.value=null)}," × ")]),e("div",Ct,[e("p",null,[a[7]||(a[7]=w("Are you sure you want to delete ",-1)),e("strong",null,y(f.value.name),1),a[8]||(a[8]=w("?",-1))]),a[9]||(a[9]=e("p",{class:"warning-text"}," This action cannot be undone. ",-1))]),e("div",Tt,[e("button",{type:"button",class:"btn btn-secondary",onClick:a[1]||(a[1]=r=>f.value=null)}," Cancel "),e("button",{type:"button",class:"btn btn-danger",disabled:n.value,onClick:S},y(n.value?"Deleting...":"Delete"),9,Et)])])])):V("",!0)]))}},At=W(It,[["__scopeId","data-v-6db72ff4"]]);export{At as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.models-section[data-v-3aa7217a]{margin-bottom:1.25rem;border:1px solid var(--color-border);border-radius:.25rem;overflow:hidden}.models-header[data-v-3aa7217a]{display:flex;align-items:baseline;gap:.75rem;padding:.75rem 1rem;background:var(--color-background-soft);border-bottom:1px solid var(--color-border)}.models-title[data-v-3aa7217a]{font-weight:500;font-size:.875rem;color:var(--color-text)}.models-hint[data-v-3aa7217a]{font-size:.8125rem;color:var(--color-text-soft)}.models-list[data-v-3aa7217a]{padding:.5rem .75rem}.model-row[data-v-3aa7217a]{display:grid;grid-template-columns:1fr 10rem 6.5rem 2rem;gap:.5rem;align-items:center;margin-bottom:.375rem}.model-row-header[data-v-3aa7217a]{font-size:.75rem;font-weight:500;color:var(--color-text-soft);margin-bottom:.25rem}.model-row-header span[data-v-3aa7217a]{padding:0 .25rem}.model-input[data-v-3aa7217a]{padding:.4rem .6rem;background:var(--color-background-soft);border:1px solid var(--color-border);border-radius:.25rem;color:var(--color-text);font-size:.8125rem}.model-input[data-v-3aa7217a]:focus{outline:none;border-color:var(--color-primary)}.tier-select[data-v-3aa7217a]{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto;cursor:pointer}.remove-model-btn[data-v-3aa7217a]{background:none;border:1px solid var(--color-border);color:var(--color-text-soft);font-size:1.125rem;cursor:pointer;padding:.2rem .4rem;line-height:1;border-radius:.25rem;text-align:center}.remove-model-btn[data-v-3aa7217a]:hover{color:var(--color-danger, #ef4444);border-color:var(--color-danger, #ef4444)}.models-empty[data-v-3aa7217a]{padding:.75rem 1rem;font-size:.8125rem;color:var(--color-text-soft);font-style:italic}.add-model-btn[data-v-3aa7217a]{margin:.5rem .75rem .75rem}.btn[data-v-3aa7217a]{padding:.5rem 1rem;border-radius:.25rem;font-size:.875rem;font-weight:500;cursor:pointer;transition:all .15s}.btn-sm[data-v-3aa7217a]{padding:.375rem .75rem;font-size:.8125rem}.btn-secondary[data-v-3aa7217a]{background:var(--color-background);border:1px solid var(--color-border);color:var(--color-text)}.btn-secondary[data-v-3aa7217a]:hover:not(:disabled){border-color:var(--color-primary);background:var(--color-background-soft)}.modal-overlay[data-v-1d0519fa]{position:fixed;top:0;left:0;right:0;bottom:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:1000}.modal[data-v-1d0519fa]{background:var(--color-background);border:1px solid var(--color-border);border-radius:.5rem;width:100%;max-width:680px;max-height:90vh;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 8px 32px #0000004d}.modal-header[data-v-1d0519fa]{display:flex;align-items:center;justify-content:space-between;padding:1rem 1.25rem;border-bottom:1px solid var(--color-border)}.modal-header h2[data-v-1d0519fa]{margin:0;font-size:1.125rem;font-weight:600}.close-btn[data-v-1d0519fa]{background:none;border:none;color:var(--color-text-soft);font-size:1.5rem;cursor:pointer;padding:.25rem;line-height:1;border-radius:.25rem}.close-btn[data-v-1d0519fa]:hover{color:var(--color-text);background:var(--color-background-soft)}.modal-body[data-v-1d0519fa]{padding:1.25rem;overflow-y:auto}.form-group[data-v-1d0519fa]{margin-bottom:1.25rem}.form-group label[data-v-1d0519fa]{display:block;margin-bottom:.5rem;font-weight:500;font-size:.875rem;color:var(--color-text)}.label-hint[data-v-1d0519fa]{font-weight:400;color:var(--color-text-soft);font-size:.8125rem}.form-group input[type=text][data-v-1d0519fa],.form-group input[type=url][data-v-1d0519fa],.form-group input[type=password][data-v-1d0519fa],.form-group input[type=number][data-v-1d0519fa],.form-group select.kind-select[data-v-1d0519fa]{width:100%;padding:.5rem .75rem;background:var(--color-background-soft);border:1px solid var(--color-border);border-radius:.25rem;color:var(--color-text);font-size:.875rem}.form-group input[data-v-1d0519fa]:focus,.form-group select.kind-select[data-v-1d0519fa]:focus{outline:none;border-color:var(--color-primary)}.form-group select.kind-select[data-v-1d0519fa]:disabled{opacity:.6;cursor:not-allowed}.field-note[data-v-1d0519fa]{margin:.375rem 0 0;font-size:.75rem;color:var(--color-text-soft);font-style:italic}.token-input-wrapper[data-v-1d0519fa]{display:flex;gap:.5rem}.token-input-wrapper input[data-v-1d0519fa]{flex:1}.toggle-visibility-btn[data-v-1d0519fa]{padding:.5rem 1rem;background:var(--color-background);border:1px solid var(--color-border);border-radius:.25rem;color:var(--color-text);font-size:.8125rem;cursor:pointer;white-space:nowrap}.toggle-visibility-btn[data-v-1d0519fa]:hover{background:var(--color-background-soft)}.expandable-section[data-v-1d0519fa]{margin-bottom:1.25rem;border:1px solid var(--color-border);border-radius:.25rem}.section-header[data-v-1d0519fa]{padding:.75rem 1rem;background:var(--color-background-soft);cursor:pointer;-webkit-user-select:none;user-select:none;font-weight:500;font-size:.875rem;color:var(--color-text)}.section-header[data-v-1d0519fa]:hover{background:var(--color-background-mute)}.section-content[data-v-1d0519fa]{padding:1rem}.env-vars-list[data-v-1d0519fa]{display:flex;flex-direction:column;gap:.5rem}.env-var-row[data-v-1d0519fa]{display:flex;gap:.5rem}.env-key[data-v-1d0519fa],.env-value[data-v-1d0519fa]{padding:.5rem .75rem;background:var(--color-background-soft);border:1px solid var(--color-border);border-radius:.25rem;color:var(--color-text);font-size:.875rem;font-family:var(--font-mono)}.env-key[data-v-1d0519fa]{flex:0 0 150px}.env-value[data-v-1d0519fa]{flex:1}.env-key[data-v-1d0519fa]:focus,.env-value[data-v-1d0519fa]:focus{outline:none;border-color:var(--color-primary)}.remove-env-btn[data-v-1d0519fa]{background:none;border:1px solid var(--color-border);color:var(--color-text-soft);font-size:1.25rem;cursor:pointer;padding:.25rem .5rem;line-height:1;border-radius:.25rem}.remove-env-btn[data-v-1d0519fa]:hover{color:var(--color-danger, #ef4444);border-color:var(--color-danger, #ef4444)}.error-message[data-v-1d0519fa]{margin-top:1rem;padding:.75rem;background:#ef44441a;border:1px solid rgba(239,68,68,.3);border-radius:.25rem;color:var(--color-danger, #ef4444);font-size:.875rem}.test-result[data-v-1d0519fa]{margin-top:1rem;padding:.75rem;border-radius:.25rem;font-size:.875rem}.test-result.success[data-v-1d0519fa]{background:#22c55e1a;border:1px solid rgba(34,197,94,.3);color:var(--color-success, #22c55e)}.test-result.failure[data-v-1d0519fa]{background:#ef44441a;border:1px solid rgba(239,68,68,.3);color:var(--color-danger, #ef4444)}.test-result-header[data-v-1d0519fa]{display:flex;align-items:center;gap:.5rem;font-weight:500}.test-icon[data-v-1d0519fa]{font-size:1.125rem}.test-details[data-v-1d0519fa]{margin-top:.5rem;padding-top:.5rem;border-top:1px solid currentColor;opacity:.8}.test-detail[data-v-1d0519fa]{margin-top:.25rem}.test-detail code[data-v-1d0519fa]{font-family:var(--font-mono);font-size:.8125rem}.modal-footer[data-v-1d0519fa]{display:flex;align-items:center;justify-content:space-between;padding:1rem 1.25rem;border-top:1px solid var(--color-border);background:var(--color-background-soft)}.footer-actions[data-v-1d0519fa]{display:flex;gap:.75rem}.btn[data-v-1d0519fa]{padding:.5rem 1rem;border-radius:.25rem;font-size:.875rem;font-weight:500;cursor:pointer;transition:all .15s}.btn[data-v-1d0519fa]:disabled{opacity:.5;cursor:not-allowed}.btn-sm[data-v-1d0519fa]{padding:.375rem .75rem;font-size:.8125rem}.btn-secondary[data-v-1d0519fa]{background:var(--color-background);border:1px solid var(--color-border);color:var(--color-text)}.btn-secondary[data-v-1d0519fa]:hover:not(:disabled){border-color:var(--color-primary);background:var(--color-background-soft)}.btn-primary[data-v-1d0519fa]{background:var(--color-primary);border:1px solid var(--color-primary);color:#fff}.btn-primary[data-v-1d0519fa]:hover:not(:disabled){filter:brightness(1.1)}.page-header[data-v-6db72ff4]{display:flex;justify-content:flex-end;align-items:center;margin-bottom:.5rem}.page-description[data-v-6db72ff4]{color:var(--color-text-soft);margin:0 0 1.5rem;font-size:.875rem;line-height:1.5}.skeleton-list[data-v-6db72ff4]{display:flex;flex-direction:column;gap:1rem}.error-message[data-v-6db72ff4]{color:var(--color-error);padding:1rem;background-color:#f851491a;border-radius:var(--border-radius)}.provider-list[data-v-6db72ff4]{display:flex;flex-direction:column;gap:1rem}.provider-card[data-v-6db72ff4]{padding:1.25rem}.provider-header[data-v-6db72ff4]{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:.75rem;gap:1rem}.provider-title h3[data-v-6db72ff4]{margin:0;font-size:1rem;display:flex;align-items:center;gap:.5rem}.built-in-badge[data-v-6db72ff4]{display:inline-block;padding:.125rem .5rem;background:var(--color-background-soft);border:1px solid var(--color-border);border-radius:.25rem;font-size:.75rem;font-weight:500;text-transform:uppercase;letter-spacing:.025em;color:var(--color-text-soft)}.provider-actions[data-v-6db72ff4]{display:flex;gap:.5rem;flex-shrink:0}.provider-details[data-v-6db72ff4]{display:flex;flex-direction:column;gap:.5rem}.provider-detail[data-v-6db72ff4]{display:flex;gap:.5rem;font-size:.875rem}.detail-label[data-v-6db72ff4]{color:var(--color-text-soft);font-weight:500}.detail-value[data-v-6db72ff4]{color:var(--color-text);font-family:var(--font-mono);font-size:.8125rem}.btn-sm[data-v-6db72ff4]{padding:.375rem .75rem;font-size:.8125rem}.btn-danger[data-v-6db72ff4]{background:var(--color-danger, #ef4444);border:1px solid var(--color-danger, #ef4444);color:#fff}.btn-danger[data-v-6db72ff4]:hover:not(:disabled){filter:brightness(1.1)}.modal-overlay[data-v-6db72ff4]{position:fixed;top:0;left:0;right:0;bottom:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:1000}.modal[data-v-6db72ff4]{background:var(--color-background);border:1px solid var(--color-border);border-radius:.5rem;width:100%;max-width:450px;max-height:90vh;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 8px 32px #0000004d}.confirm-modal[data-v-6db72ff4]{max-width:400px}.modal-header[data-v-6db72ff4]{display:flex;align-items:center;justify-content:space-between;padding:1rem 1.25rem;border-bottom:1px solid var(--color-border)}.modal-header h2[data-v-6db72ff4]{margin:0;font-size:1.125rem;font-weight:600}.close-btn[data-v-6db72ff4]{background:none;border:none;color:var(--color-text-soft);font-size:1.5rem;cursor:pointer;padding:.25rem;line-height:1;border-radius:.25rem}.close-btn[data-v-6db72ff4]:hover{color:var(--color-text);background:var(--color-background-soft)}.modal-body[data-v-6db72ff4]{padding:1.25rem}.modal-body p[data-v-6db72ff4]{margin:0 0 .75rem}.warning-text[data-v-6db72ff4]{color:var(--color-warning, #f59e0b);font-size:.875rem;font-weight:500}.modal-footer[data-v-6db72ff4]{display:flex;justify-content:flex-end;gap:.75rem;padding:1rem 1.25rem;border-top:1px solid var(--color-border);background:var(--color-background-soft)}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.dialog-overlay[data-v-f2c13fd9]{position:fixed;top:0;left:0;right:0;bottom:0;background:#000000b3;display:flex;align-items:center;justify-content:center;z-index:1015}.dialog[data-v-f2c13fd9]{background:var(--color-background);border:1px solid var(--color-border);border-radius:var(--border-radius-lg, 12px);width:100%;max-width:500px;max-height:90vh;display:flex;flex-direction:column;overflow:hidden;box-shadow:0 20px 25px -5px #0000004d}.dialog-header[data-v-f2c13fd9]{display:flex;align-items:center;justify-content:space-between;padding:1rem 1.25rem;border-bottom:1px solid var(--color-border);flex-shrink:0}.dialog-title[data-v-f2c13fd9]{margin:0;font-size:1.125rem;font-weight:600;color:var(--color-text)}.close-button[data-v-f2c13fd9]{background:none;border:none;font-size:1.5rem;color:var(--color-text-soft);cursor:pointer;padding:.25rem;line-height:1}.close-button[data-v-f2c13fd9]:hover{color:var(--color-text)}.dialog-form[data-v-f2c13fd9]{display:flex;flex-direction:column;flex:1;min-height:0}.dialog-content[data-v-f2c13fd9]{flex:1;overflow-y:auto;padding:1.25rem;display:flex;flex-direction:column;gap:1rem}.form-group[data-v-f2c13fd9]{display:flex;flex-direction:column;gap:.25rem}.form-label[data-v-f2c13fd9]{font-size:.875rem;font-weight:500;color:var(--color-text)}.form-input[data-v-f2c13fd9],.form-textarea[data-v-f2c13fd9]{padding:.625rem .75rem;background:var(--color-background-soft);border:1px solid var(--color-border);border-radius:var(--border-radius);color:var(--color-text);font-size:.875rem;font-family:inherit;transition:border-color .15s}.form-input[data-v-f2c13fd9]:focus,.form-textarea[data-v-f2c13fd9]:focus{outline:none;border-color:var(--color-accent)}.form-textarea[data-v-f2c13fd9]{resize:vertical;min-height:80px}.form-help[data-v-f2c13fd9]{font-size:.75rem;color:var(--color-text-soft)}.form-help.indent[data-v-f2c13fd9]{margin-left:1.5rem}.form-error[data-v-f2c13fd9]{font-size:.75rem;color:var(--color-danger, #ef4444)}.checkbox-label[data-v-f2c13fd9],.radio-label[data-v-f2c13fd9]{display:flex;align-items:center;gap:.5rem;cursor:pointer}.checkbox-input[data-v-f2c13fd9],.radio-input[data-v-f2c13fd9]{width:1rem;height:1rem;accent-color:var(--color-accent)}.checkbox-text[data-v-f2c13fd9],.radio-text[data-v-f2c13fd9]{font-size:.875rem;color:var(--color-text)}.radio-group[data-v-f2c13fd9]{display:flex;flex-direction:column;gap:.5rem;margin-top:.25rem}.error-message[data-v-f2c13fd9]{padding:.75rem;background:#ef44441a;border:1px solid rgba(239,68,68,.3);border-radius:var(--border-radius);color:#ef4444;font-size:.875rem}.dialog-footer[data-v-f2c13fd9]{display:flex;justify-content:flex-end;gap:.75rem;padding:1rem 1.25rem;border-top:1px solid var(--color-border);flex-shrink:0}.btn[data-v-f2c13fd9]{padding:.625rem 1rem;border-radius:var(--border-radius);font-size:.875rem;font-weight:500;cursor:pointer;transition:all .15s}.btn-secondary[data-v-f2c13fd9]{background:var(--color-background-soft);border:1px solid var(--color-border);color:var(--color-text)}.btn-secondary[data-v-f2c13fd9]:hover{background:var(--color-background-mute)}.btn-primary[data-v-f2c13fd9]{background:var(--color-accent, #22d3ee);border:1px solid var(--color-accent, #22d3ee);color:var(--color-background, #0d1117)}.btn-primary[data-v-f2c13fd9]:hover:not(:disabled){opacity:.9}.btn-primary[data-v-f2c13fd9]:disabled{opacity:.5;cursor:not-allowed}.settings-overlay[data-v-9fffa8ff]{position:fixed;top:0;left:0;right:0;bottom:0;background:#000000b3;display:flex;align-items:center;justify-content:center;z-index:1010}.settings-panel[data-v-9fffa8ff]{background:var(--color-background);border:1px solid var(--color-border);border-radius:var(--border-radius-lg, 12px);width:100%;max-width:600px;max-height:80vh;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 20px 25px -5px #0000004d}.settings-header[data-v-9fffa8ff]{display:flex;align-items:center;justify-content:space-between;padding:1rem 1.25rem;border-bottom:1px solid var(--color-border);flex-shrink:0}.settings-title[data-v-9fffa8ff]{margin:0;font-size:1.25rem;font-weight:600;color:var(--color-text)}.close-button[data-v-9fffa8ff]{background:none;border:none;font-size:1.5rem;color:var(--color-text-soft);cursor:pointer;padding:.25rem;line-height:1}.close-button[data-v-9fffa8ff]:hover{color:var(--color-text)}.settings-content[data-v-9fffa8ff]{flex:1;overflow-y:auto;padding:1rem 1.25rem}.section[data-v-9fffa8ff]{margin-bottom:1.5rem}.section[data-v-9fffa8ff]:last-child{margin-bottom:0}.section-header[data-v-9fffa8ff]{display:flex;align-items:center;justify-content:space-between;margin-bottom:.75rem}.section-title[data-v-9fffa8ff]{margin:0;font-size:1rem;font-weight:600;color:var(--color-text)}.add-button[data-v-9fffa8ff]{background:var(--color-accent, #22d3ee);color:#000;border:none;padding:.5rem 1rem;border-radius:var(--border-radius);font-size:.875rem;font-weight:600;cursor:pointer;transition:all .15s}.add-button[data-v-9fffa8ff]:hover{background:var(--color-accent-hover, #06b6d4);transform:translateY(-1px)}.loading-state[data-v-9fffa8ff],.empty-state[data-v-9fffa8ff]{padding:1rem;text-align:center;color:var(--color-text-soft);font-size:.875rem;background:var(--color-background-soft);border-radius:var(--border-radius)}.response-list[data-v-9fffa8ff]{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.5rem}.response-item[data-v-9fffa8ff]{display:flex;align-items:center;justify-content:space-between;padding:.75rem 1rem;background:var(--color-background-soft);border:1px solid var(--color-border);border-radius:var(--border-radius);gap:1rem}.response-info[data-v-9fffa8ff]{flex:1;min-width:0;display:flex;flex-direction:column;gap:.25rem}.response-label[data-v-9fffa8ff]{font-weight:600;color:var(--color-text);font-size:.875rem}.response-content[data-v-9fffa8ff]{font-size:.75rem;color:var(--color-text-soft);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.auto-badge[data-v-9fffa8ff]{display:inline-flex;align-items:center;padding:.125rem .375rem;background:#f59e0b26;color:#f59e0b;border-radius:4px;font-size:.625rem;font-weight:500;text-transform:uppercase;width:fit-content}.response-actions[data-v-9fffa8ff]{display:flex;gap:.375rem;flex-shrink:0}.action-button[data-v-9fffa8ff]{background:var(--color-background-mute);border:1px solid var(--color-border);border-radius:var(--border-radius);padding:.375rem;cursor:pointer;color:var(--color-text-soft);transition:all .15s;display:flex;align-items:center;justify-content:center}.action-button[data-v-9fffa8ff]:hover{color:var(--color-text);background:var(--color-background)}.action-button[data-v-9fffa8ff]:disabled{opacity:.3;cursor:not-allowed;pointer-events:none}.action-button.action-danger[data-v-9fffa8ff]:hover{color:#ef4444;background:#ef44441a;border-color:#ef44444d}.action-icon[data-v-9fffa8ff]{width:1rem;height:1rem}.confirm-overlay[data-v-9fffa8ff]{position:fixed;top:0;left:0;right:0;bottom:0;background:#000c;display:flex;align-items:center;justify-content:center;z-index:1020}.confirm-dialog[data-v-9fffa8ff]{background:var(--color-background);border:1px solid var(--color-border);border-radius:var(--border-radius-lg, 12px);padding:1.5rem;max-width:400px;width:100%}.confirm-message[data-v-9fffa8ff]{margin:0 0 1rem;color:var(--color-text);font-size:.9375rem}.confirm-actions[data-v-9fffa8ff]{display:flex;justify-content:flex-end;gap:.75rem}.btn[data-v-9fffa8ff]{padding:.625rem 1rem;border-radius:var(--border-radius);font-size:.875rem;font-weight:500;cursor:pointer;transition:all .15s}.btn-secondary[data-v-9fffa8ff]{background:var(--color-background-soft);border:1px solid var(--color-border);color:var(--color-text)}.btn-secondary[data-v-9fffa8ff]:hover{background:var(--color-background-mute)}.btn-danger[data-v-9fffa8ff]{background:#ef4444;border:1px solid #ef4444;color:#fff}.btn-danger[data-v-9fffa8ff]:hover{background:#dc2626;border-color:#dc2626}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{L as F,_ as U,l as O,a as r,G as M,c as d,b as e,t as y,j as G,m as I,v as q,i as R,q as z,H as V,U as L,x as w,n as j,I as H,F as E,r as A,d as K}from"./index-B6G18FqB.js";import{a as k}from"./ApiClient-B4YTtyY4.js";const Je=F("projectDefaults",{state:()=>({defaultsByProjectId:{},loading:!1,error:null}),getters:{getDefaultsForProject:l=>o=>l.defaultsByProjectId[o]||null},actions:{async fetchDefaults(l){this.loading=!0,this.error=null;try{const o=await k.getProjectSessionDefaults(l);return this.defaultsByProjectId[l]=o,o}catch(o){throw this.error=o.message,o}finally{this.loading=!1}},async updateDefaults(l,o){this.loading=!0,this.error=null;try{const s=await k.updateProjectSessionDefaults(l,o);return this.defaultsByProjectId[l]=s,s}catch(s){throw this.error=s.message,s}finally{this.loading=!1}},async resetDefaults(l){this.loading=!0,this.error=null;try{return await k.resetProjectSessionDefaults(l),this.defaultsByProjectId[l]={mode:null,thinkingEnabled:null,effortLevel:null,startImmediately:null,gitMode:null,gitBranch:null,model:null,providerId:null},this.defaultsByProjectId[l]}catch(o){throw this.error=o.message,o}finally{this.loading=!1}},clearProjectDefaults(l){delete this.defaultsByProjectId[l]},clearAllDefaults(){this.defaultsByProjectId={}}}}),T=F("quickResponses",{state:()=>({projectResponses:[],globalResponses:[],loading:!1,error:null,currentProjectId:null}),getters:{allResponses:l=>[...l.projectResponses,...l.globalResponses],hasResponses:l=>l.projectResponses.length>0||l.globalResponses.length>0},actions:{async fetchForProject(l){this.loading=!0,this.error=null,this.currentProjectId=l;try{const o=await k.getQuickResponses(l);return this.projectResponses=o.project,this.globalResponses=o.global,o}catch(o){throw this.error=o.message,o}finally{this.loading=!1}},async createResponse(l,o){this.loading=!0,this.error=null;try{const s=await k.createQuickResponse(l,o);return s.projectId===null?this.globalResponses.push(s):this.projectResponses.push(s),s}catch(s){throw this.error=s.message,s}finally{this.loading=!1}},async updateResponse(l,o){this.loading=!0,this.error=null;try{const s=await k.updateQuickResponse(l,o),c=this.projectResponses.findIndex(p=>p.id===l);if(c!==-1)this.projectResponses[c]=s;else{const p=this.globalResponses.findIndex(_=>_.id===l);p!==-1&&(this.globalResponses[p]=s)}return s}catch(s){throw this.error=s.message,s}finally{this.loading=!1}},async deleteResponse(l){this.loading=!0,this.error=null;try{await k.deleteQuickResponse(l);const o=this.projectResponses.findIndex(s=>s.id===l);if(o!==-1)this.projectResponses.splice(o,1);else{const s=this.globalResponses.findIndex(c=>c.id===l);s!==-1&&this.globalResponses.splice(s,1)}}catch(o){throw this.error=o.message,o}finally{this.loading=!1}},async reorderResponses(l,o){this.loading=!0,this.error=null;try{const s=o.map((c,p)=>({id:c,sortOrder:p}));if(l){const c=await k.reorderQuickResponses(l,s);this.projectResponses=c.project,this.globalResponses=c.global}else{const c=await k.reorderGlobalQuickResponses(s);this.globalResponses=c}}catch(s){throw this.error=s.message,s}finally{this.loading=!1}},clearResponses(){this.projectResponses=[],this.globalResponses=[],this.currentProjectId=null,this.error=null}}}),Y={class:"dialog-header"},J={class:"dialog-content"},W={class:"form-group"},X={key:0,class:"form-error"},Z={class:"form-group"},ee={key:0,class:"form-error"},se={class:"form-group"},te={class:"form-group"},le={class:"checkbox-label"},oe={key:0,class:"form-group"},ne={class:"radio-group"},ae={class:"radio-label"},ie={class:"radio-label"},re={key:1,class:"error-message"},ue={class:"dialog-footer"},ce=["disabled"],de={__name:"QuickResponseDialog",props:{isOpen:{type:Boolean,default:!1},projectId:{type:String,required:!0},editingResponse:{type:Object,default:null},defaultIsGlobal:{type:Boolean,default:!1}},emits:["close","saved"],setup(l,{emit:o}){const s=l,c=o,p=T(),_=j(null),f=`dialog-title-${Math.random().toString(36).slice(2)}`,n=j({label:"",content:"",category:"",autoSubmit:!1,isGlobal:!1}),g=j(!1),h=j(null),C=w(()=>!!s.editingResponse),S=w(()=>n.value.label&&n.value.label.length>50?"Label must be 50 characters or less":null),x=w(()=>n.value.content&&n.value.content.length>1e4?"Content must be 10,000 characters or less":null),P=w(()=>n.value.label.trim().length>0&&n.value.label.length<=50&&n.value.content.trim().length>0&&n.value.content.length<=1e4);O(()=>s.isOpen,b=>{b&&(s.editingResponse?n.value={label:s.editingResponse.label||"",content:s.editingResponse.content||"",category:s.editingResponse.category||"",autoSubmit:s.editingResponse.autoSubmit||!1,isGlobal:s.editingResponse.projectId===null}:n.value={label:"",content:"",category:"",autoSubmit:!1,isGlobal:s.defaultIsGlobal},h.value=null,H(()=>{var t;(t=_.value)==null||t.focus()}))}),O(()=>s.isOpen,b=>{if(b){const t=a=>{a.key==="Escape"&&$()};return document.addEventListener("keydown",t),()=>document.removeEventListener("keydown",t)}});function $(){c("close")}async function B(){if(!(!P.value||g.value)){g.value=!0,h.value=null;try{const b={label:n.value.label.trim(),content:n.value.content,category:n.value.category.trim()||null,autoSubmit:n.value.autoSubmit};C.value?await p.updateResponse(s.editingResponse.id,b):(b.isGlobal=n.value.isGlobal,await p.createResponse(s.projectId,b)),c("saved"),c("close")}catch(b){h.value=b.message||"Failed to save quick response"}finally{g.value=!1}}}return(b,t)=>(r(),M(L,{to:"body"},[l.isOpen?(r(),d("div",{key:0,class:"dialog-overlay",onClick:G($,["self"])},[e("div",{class:"dialog",role:"dialog","aria-modal":"true","aria-labelledby":f},[e("div",Y,[e("h2",{id:f,class:"dialog-title"},y(C.value?"Edit Quick Response":"Add Quick Response"),1),e("button",{class:"close-button","aria-label":"Close dialog",onClick:$}," × ")]),e("form",{class:"dialog-form",onSubmit:G(B,["prevent"])},[e("div",J,[e("div",W,[t[7]||(t[7]=e("label",{for:"qr-label",class:"form-label"},"Label *",-1)),I(e("input",{id:"qr-label",ref_key:"labelInput",ref:_,"onUpdate:modelValue":t[0]||(t[0]=a=>n.value.label=a),type:"text",class:"form-input",placeholder:"e.g., Yes, LGTM, Run tests",maxlength:"50",required:"",onBlur:t[1]||(t[1]=a=>n.value.label=n.value.label.trim())},null,544),[[q,n.value.label]]),t[8]||(t[8]=e("span",{class:"form-help"},"Short text shown on the button (max 50 characters)",-1)),S.value?(r(),d("span",X,y(S.value),1)):R("",!0)]),e("div",Z,[t[9]||(t[9]=e("label",{for:"qr-content",class:"form-label"},"Content *",-1)),I(e("textarea",{id:"qr-content","onUpdate:modelValue":t[2]||(t[2]=a=>n.value.content=a),class:"form-textarea",placeholder:"The full message that will be inserted into the prompt",rows:"4",maxlength:"10000",required:""},null,512),[[q,n.value.content]]),t[10]||(t[10]=e("span",{class:"form-help"},"The full message that will be inserted (max 10,000 characters)",-1)),x.value?(r(),d("span",ee,y(x.value),1)):R("",!0)]),e("div",se,[t[11]||(t[11]=e("label",{for:"qr-category",class:"form-label"},"Category (optional)",-1)),I(e("input",{id:"qr-category","onUpdate:modelValue":t[3]||(t[3]=a=>n.value.category=a),type:"text",class:"form-input",placeholder:"e.g., feedback, commands",maxlength:"50"},null,512),[[q,n.value.category]]),t[12]||(t[12]=e("span",{class:"form-help"},"Optional grouping for organization",-1))]),e("div",te,[e("label",le,[I(e("input",{"onUpdate:modelValue":t[4]||(t[4]=a=>n.value.autoSubmit=a),type:"checkbox",class:"checkbox-input"},null,512),[[z,n.value.autoSubmit]]),t[13]||(t[13]=e("span",{class:"checkbox-text"},"Auto-submit",-1))]),t[14]||(t[14]=e("span",{class:"form-help indent"},"Send immediately when clicked (no confirmation)",-1))]),C.value?R("",!0):(r(),d("div",oe,[t[17]||(t[17]=e("span",{class:"form-label"},"Scope",-1)),e("div",ne,[e("label",ae,[I(e("input",{"onUpdate:modelValue":t[5]||(t[5]=a=>n.value.isGlobal=a),type:"radio",value:!1,class:"radio-input"},null,512),[[V,n.value.isGlobal]]),t[15]||(t[15]=e("span",{class:"radio-text"},"Project-specific",-1))]),e("label",ie,[I(e("input",{"onUpdate:modelValue":t[6]||(t[6]=a=>n.value.isGlobal=a),type:"radio",value:!0,class:"radio-input"},null,512),[[V,n.value.isGlobal]]),t[16]||(t[16]=e("span",{class:"radio-text"},"Global (all projects)",-1))])])])),h.value?(r(),d("div",re,y(h.value),1)):R("",!0)]),e("div",ue,[e("button",{type:"button",class:"btn btn-secondary",onClick:$}," Cancel "),e("button",{type:"submit",class:"btn btn-primary",disabled:!P.value||g.value},y(g.value?"Saving...":C.value?"Save Changes":"Save Quick Response"),9,ce)])],32)])])):R("",!0)]))}},pe=U(de,[["__scopeId","data-v-f2c13fd9"]]),be={class:"settings-panel",role:"dialog","aria-modal":"true"},ve={class:"settings-header"},fe={class:"settings-content"},ge={class:"section"},he={class:"section-header"},me={key:0,class:"loading-state"},ye={key:1,class:"empty-state"},ke={key:2,class:"response-list"},Re={class:"response-info"},_e={class:"response-label"},je={class:"response-content"},Ce={key:0,class:"auto-badge"},we={class:"response-actions"},$e=["disabled","onClick"],Ie=["disabled","onClick"],Se=["onClick"],xe=["onClick"],De={class:"section"},Pe={class:"section-header"},Be={key:0,class:"loading-state"},Ge={key:1,class:"empty-state"},Qe={key:2,class:"response-list"},qe={class:"response-info"},Ee={class:"response-label"},Me={class:"response-content"},Le={key:0,class:"auto-badge"},Oe={class:"response-actions"},Ve=["disabled","onClick"],Ae=["disabled","onClick"],Fe=["onClick"],Ue=["onClick"],Te={class:"confirm-dialog"},Ne={class:"confirm-message"},ze={class:"confirm-actions"},He={__name:"QuickResponseSettings",props:{isOpen:{type:Boolean,default:!1},projectId:{type:String,required:!0}},emits:["close"],setup(l,{expose:o}){const s=T(),c=j(!1),p=j(null),_=j(!1),f=j(null),n=w(()=>s.loading),g=w(()=>s.projectResponses),h=w(()=>s.globalResponses);function C(a){return a.length<=60?a:`${a.substring(0,60)}...`}function S(a){p.value=null,_.value=a,c.value=!0}function x(a){p.value=a,_.value=a.projectId===null,c.value=!0}function P(){c.value=!1,p.value=null}function $(){}function B(a){f.value=a}async function b(){if(f.value)try{await s.deleteResponse(f.value.id),f.value=null}catch(a){console.error("Failed to delete response:",a)}}async function t(a,u,i,m){const v=i+m;if(v<0||v>=u.length)return;const D=[...u];[D[i],D[v]]=[D[v],D[i]];const N=D.map(Q=>Q.id);try{await s.reorderResponses(a,N)}catch(Q){console.error("Failed to reorder responses:",Q)}}return o({moveResponse:t}),(a,u)=>(r(),d(E,null,[(r(),M(L,{to:"body"},[l.isOpen?(r(),d("div",{key:0,class:"settings-overlay",onClick:u[3]||(u[3]=G(i=>a.$emit("close"),["self"]))},[e("div",be,[e("div",ve,[u[6]||(u[6]=e("h2",{class:"settings-title"}," Quick Responses ",-1)),e("button",{class:"close-button","aria-label":"Close settings",onClick:u[0]||(u[0]=i=>a.$emit("close"))}," × ")]),e("div",fe,[e("div",ge,[e("div",he,[u[7]||(u[7]=e("h3",{class:"section-title"}," Project Responses ",-1)),e("button",{class:"add-button",onClick:u[1]||(u[1]=i=>S(!1))}," + Add ")]),n.value?(r(),d("div",me," Loading... ")):g.value.length===0?(r(),d("div",ye," No project-specific quick responses yet. ")):(r(),d("ul",ke,[(r(!0),d(E,null,A(g.value,(i,m)=>(r(),d("li",{key:i.id,class:"response-item"},[e("div",Re,[e("span",_e,y(i.label),1),e("span",je,y(C(i.content)),1),i.autoSubmit?(r(),d("span",Ce,"Auto-submit")):R("",!0)]),e("div",we,[e("button",{class:"action-button",disabled:m===0,title:"Move up",onClick:v=>t(l.projectId,g.value,m,-1)}," ↑ ",8,$e),e("button",{class:"action-button",disabled:m===g.value.length-1,title:"Move down",onClick:v=>t(l.projectId,g.value,m,1)}," ↓ ",8,Ie),e("button",{class:"action-button",title:"Edit","aria-label":"Edit",onClick:v=>x(i)}," ✏️ ",8,Se),e("button",{class:"action-button action-danger",title:"Delete",onClick:v=>B(i)}," 🗑️ ",8,xe)])]))),128))]))]),e("div",De,[e("div",Pe,[u[8]||(u[8]=e("h3",{class:"section-title"}," Global Responses ",-1)),e("button",{class:"add-button",onClick:u[2]||(u[2]=i=>S(!0))}," + Add ")]),n.value?(r(),d("div",Be," Loading... ")):h.value.length===0?(r(),d("div",Ge," No global quick responses yet. Global responses appear in all projects. ")):(r(),d("ul",Qe,[(r(!0),d(E,null,A(h.value,(i,m)=>(r(),d("li",{key:i.id,class:"response-item"},[e("div",qe,[e("span",Ee,y(i.label),1),e("span",Me,y(C(i.content)),1),i.autoSubmit?(r(),d("span",Le,"Auto-submit")):R("",!0)]),e("div",Oe,[e("button",{class:"action-button",disabled:m===0,title:"Move up",onClick:v=>t(null,h.value,m,-1)}," ↑ ",8,Ve),e("button",{class:"action-button",disabled:m===h.value.length-1,title:"Move down",onClick:v=>t(null,h.value,m,1)}," ↓ ",8,Ae),e("button",{class:"action-button",title:"Edit","aria-label":"Edit",onClick:v=>x(i)}," ✏️ ",8,Fe),e("button",{class:"action-button action-danger",title:"Delete",onClick:v=>B(i)}," 🗑️ ",8,Ue)])]))),128))]))])])])])):R("",!0)])),K(pe,{"is-open":c.value,"project-id":l.projectId,"editing-response":p.value,"default-is-global":_.value,onClose:P,onSaved:$},null,8,["is-open","project-id","editing-response","default-is-global"]),(r(),M(L,{to:"body"},[f.value?(r(),d("div",{key:0,class:"confirm-overlay",onClick:u[5]||(u[5]=G(i=>f.value=null,["self"]))},[e("div",Te,[e("p",Ne,' Are you sure you want to delete "'+y(f.value.label)+'"? ',1),e("div",ze,[e("button",{class:"btn btn-secondary",onClick:u[4]||(u[4]=i=>f.value=null)}," Cancel "),e("button",{class:"btn btn-danger",onClick:b}," Delete ")])])])):R("",!0)]))],64))}},We=U(He,[["__scopeId","data-v-9fffa8ff"]]);export{We as Q,T as a,Je as u};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.file-attachments[data-v-7f03e84b]{position:relative;display:flex;flex-wrap:wrap;align-items:center;gap:.5rem}.hidden-input[data-v-7f03e84b]{position:absolute;opacity:0;width:0;height:0;pointer-events:none}.attach-btn[data-v-7f03e84b]{display:flex;align-items:center;gap:.25rem;padding:.375rem .625rem;font-size:.875rem;background:var(--color-background);border:1px solid var(--color-border);border-radius:.375rem;color:var(--color-text-soft);cursor:pointer;transition:background-color .15s,border-color .15s}.attach-btn[data-v-7f03e84b]:hover{background:var(--color-bg-hover);border-color:var(--color-border-hover)}.attach-icon[data-v-7f03e84b]{font-size:1rem}.attach-text[data-v-7f03e84b]{font-size:.75rem}.drop-zone[data-v-7f03e84b]{position:absolute;top:0;left:0;right:0;bottom:0;display:flex;align-items:center;justify-content:center;background:rgba(var(--color-accent-rgb, 88, 166, 255),.1);border:2px dashed var(--color-accent);border-radius:.375rem;z-index:10}.drop-text[data-v-7f03e84b]{font-size:.875rem;font-weight:500;color:var(--color-accent)}.attached-files[data-v-7f03e84b]{display:flex;flex-wrap:wrap;gap:.5rem}.file-chip[data-v-7f03e84b]{display:flex;align-items:center;gap:.25rem;padding:.25rem .5rem;background:var(--color-background-soft);border:1px solid var(--color-border);border-radius:.375rem;font-size:.75rem}.file-icon[data-v-7f03e84b]{font-size:.875rem}.file-name[data-v-7f03e84b]{max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--color-text)}.file-size[data-v-7f03e84b]{color:var(--color-text-soft);font-size:.625rem}.remove-btn[data-v-7f03e84b]{display:flex;align-items:center;justify-content:center;width:1rem;height:1rem;margin-left:.25rem;padding:0;font-size:.875rem;font-weight:700;background:transparent;border:none;border-radius:50%;color:var(--color-text-soft);cursor:pointer;transition:background-color .15s,color .15s}.remove-btn[data-v-7f03e84b]:hover{background:var(--color-danger, #ef4444);color:#fff}@media (max-width: 480px){.attach-text[data-v-7f03e84b]{display:none}.file-name[data-v-7f03e84b]{max-width:100px}}.quick-responses-panel[data-v-ed1ea1d6]{background:var(--color-background-soft);border:1px solid var(--color-border);border-radius:var(--border-radius);padding:.5rem .75rem;margin-bottom:.5rem}.quick-responses-panel.cursor-pointer[data-v-ed1ea1d6]{cursor:pointer}.panel-header[data-v-ed1ea1d6]{display:flex;align-items:center;justify-content:space-between;margin-bottom:0;gap:.5rem}.header-left[data-v-ed1ea1d6]{display:flex;align-items:center;gap:.5rem;flex:1}.toggle-button[data-v-ed1ea1d6]{background:none;border:none;padding:.25rem;cursor:pointer;color:var(--color-text-soft);display:flex;align-items:center;justify-content:center;border-radius:4px;transition:color .15s,background .15s,transform .2s ease;flex-shrink:0}.toggle-button[data-v-ed1ea1d6]:hover{color:var(--color-text);background:var(--color-background-mute)}.chevron-icon[data-v-ed1ea1d6]{width:1rem;height:1rem;transition:transform .2s ease}.toggle-button[aria-expanded=true] .chevron-icon[data-v-ed1ea1d6]{transform:rotate(180deg)}.panel-title[data-v-ed1ea1d6]{font-size:.75rem;font-weight:600;text-transform:uppercase;color:var(--color-text-soft);letter-spacing:.05em}.settings-button[data-v-ed1ea1d6]{background:none;border:none;padding:.25rem;cursor:pointer;color:var(--color-text-soft);display:flex;align-items:center;justify-content:center;border-radius:4px;transition:color .15s,background .15s}.settings-button[data-v-ed1ea1d6]:hover{color:var(--color-text);background:var(--color-background-mute)}.settings-icon[data-v-ed1ea1d6]{width:1rem;height:1rem}.loading-state[data-v-ed1ea1d6],.empty-state[data-v-ed1ea1d6]{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:1rem;gap:.5rem;margin-top:.5rem}.loading-text[data-v-ed1ea1d6],.empty-text[data-v-ed1ea1d6]{font-size:.875rem;color:var(--color-text-soft)}.responses-content[data-v-ed1ea1d6]{display:flex;flex-direction:column;gap:.5rem;margin-top:.5rem}.response-section[data-v-ed1ea1d6]{display:flex;flex-direction:column;gap:.25rem}.section-label[data-v-ed1ea1d6]{font-size:.625rem;font-weight:500;text-transform:uppercase;color:var(--color-text-soft);letter-spacing:.05em}.responses-row[data-v-ed1ea1d6]{display:flex;flex-wrap:wrap;gap:.5rem;overflow-x:auto}.response-button[data-v-ed1ea1d6]{display:inline-flex;align-items:center;gap:.25rem;min-height:44px;padding:.625rem .875rem;border-radius:6px;font-size:.8125rem;font-weight:500;cursor:pointer;transition:all .15s;border:1px solid transparent;white-space:normal}.response-button[data-v-ed1ea1d6]:focus{outline:none;ring:2px;ring-color:var(--color-accent)}.response-button[data-v-ed1ea1d6]:focus-visible{box-shadow:0 0 0 2px var(--color-accent)}.response-button[data-v-ed1ea1d6]:active{transform:scale(.97)}.project-response[data-v-ed1ea1d6]{background:#0891b226;color:#22d3ee;border-color:#0891b24d}.project-response[data-v-ed1ea1d6]:hover{background:#0891b240;border-color:#0891b280}.global-response[data-v-ed1ea1d6]{background:#4b55634d;color:#d1d5db;border-color:#4b556380}.global-response[data-v-ed1ea1d6]:hover{background:#4b556380;border-color:#4b5563b3}.auto-submit[data-v-ed1ea1d6]{border-color:#f59e0b80}.auto-icon[data-v-ed1ea1d6]{font-size:.75rem;color:#f59e0b}.button-label[data-v-ed1ea1d6]{word-break:break-word}@media (max-width: 640px){.responses-row[data-v-ed1ea1d6]{flex-wrap:wrap}.response-button[data-v-ed1ea1d6]{padding:.625rem .875rem}}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{_ as B,a as l,c as o,b as t,i as r,F,r as z,t as k,j as v,n as S,E as j,x as $}from"./index-B6G18FqB.js";import{a as E}from"./QuickResponseSettings-CDm5vwP7.js";function re(m){return function(d){d.key==="Enter"&&(d.metaKey||d.ctrlKey)&&(d.preventDefault(),m())}}const N=["accept"],Q={key:0,class:"drop-zone"},I={key:1,class:"attached-files"},L={class:"file-icon"},P=["title"],T={class:"file-size"},K=["onClick"],Z={__name:"FileAttachment",props:{maxFiles:{type:Number,default:10},maxSize:{type:Number,default:10*1024*1024},acceptTypes:{type:String,default:"image/*,text/*,.json,.md,.csv,.pdf,.js,.ts,.py,.java,.go,.rs,.c,.cpp,.h,.sh,.yaml,.yml,.xml,.html,.css"}},emits:["update:files"],setup(m,{expose:_,emit:d}){const p=m,u=d,i=S([]),f=S(!1),h=S(null);function b(){var e;(e=h.value)==null||e.click()}function y(e){const s=e.target;a(Array.from(s.files)),s.value=""}function x(){f.value=!0}function g(){f.value=!1}function n(e){f.value=!1,a(Array.from(e.dataTransfer.files))}function a(e){for(const s of e){if(i.value.length>=p.maxFiles){alert(`Maximum ${p.maxFiles} files allowed`);break}if(s.size>p.maxSize){alert(`File "${s.name}" exceeds maximum size of ${R(p.maxSize)}`);continue}i.value.some(c=>c.name===s.name&&c.size===s.size)||i.value.push(s)}u("update:files",i.value)}function w(e){i.value.splice(e,1),u("update:files",i.value)}function A(){i.value=[],u("update:files",[])}function D(e){const s=e.type||"";return s.startsWith("image/")?"🖼️":s.startsWith("text/")||s==="application/json"?"📄":s==="application/pdf"?"📕":s.includes("javascript")||s.includes("typescript")?"📜":"📎"}function R(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}function M(e,s=25){if(e.length<=s)return e;const c=e.split(".").pop();return`${`${e.slice(0,e.length-c.length-1).slice(0,s-c.length-4)}...`}.${c}`}return _({clear:A,files:i,addFiles:a}),(e,s)=>(l(),o("div",{class:"file-attachments",onDragover:v(x,["prevent"]),onDragleave:v(g,["prevent"]),onDrop:v(n,["prevent"])},[t("input",{ref_key:"fileInput",ref:h,type:"file",multiple:"",accept:m.acceptTypes,class:"hidden-input",onChange:y},null,40,N),t("button",{type:"button",class:"attach-btn",title:"Attach files (drag & drop supported)",onClick:b},[...s[0]||(s[0]=[t("span",{class:"attach-icon"},"📎",-1),t("span",{class:"attach-text"},"Attach",-1)])]),f.value?(l(),o("div",Q,[...s[1]||(s[1]=[t("span",{class:"drop-text"},"Drop files here",-1)])])):r("",!0),i.value.length>0?(l(),o("div",I,[(l(!0),o(F,null,z(i.value,(c,C)=>(l(),o("div",{key:C,class:"file-chip"},[t("span",L,k(D(c)),1),t("span",{class:"file-name",title:c.name},k(M(c.name)),9,P),t("span",T,"("+k(R(c.size))+")",1),t("button",{type:"button",class:"remove-btn",title:"Remove file",onClick:q=>w(C)}," × ",8,K)]))),128))])):r("",!0)],32))}},pe=B(Z,[["__scopeId","data-v-7f03e84b"]]),O={class:"panel-header"},V={class:"header-left"},W=["aria-expanded"],G={key:0,class:"loading-state"},H={key:1,class:"empty-state"},J={key:2,class:"responses-content"},U={key:0,class:"response-section"},X={class:"responses-row"},Y=["title","onClick"],ee={class:"button-label"},te={key:0,class:"auto-icon",title:"Auto-submit"},se={key:1,class:"response-section"},ne={class:"responses-row"},ae=["title","onClick"],le={class:"button-label"},oe={key:0,class:"auto-icon",title:"Auto-submit"},ie=Object.assign({name:"QuickResponsesPanel"},{__name:"QuickResponsesPanel",props:{showEmpty:{type:Boolean,default:!0}},emits:["insert","openSettings"],setup(m,{emit:_}){const d=_,p=E(),u=S(!1),i=$(()=>p.loading),f=$(()=>p.projectResponses),h=$(()=>p.globalResponses),b=$(()=>p.hasResponses);function y(){u.value=!u.value}function x(g){d("insert",{content:g.content,autoSubmit:g.autoSubmit}),u.value=!1}return(g,n)=>b.value||m.showEmpty?(l(),o("div",{key:0,class:"quick-responses-panel cursor-pointer",onClick:y},[t("div",O,[t("div",V,[t("button",{type:"button",class:"toggle-button","aria-expanded":u.value,title:"Toggle quick responses panel","aria-label":"Toggle quick responses panel",onClick:v(y,["stop"])},[...n[1]||(n[1]=[t("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",class:"chevron-icon"},[t("path",{"fill-rule":"evenodd",d:"M5.22 8.22a.75.75 0 0 1 1.06 0L10 11.94l3.72-3.72a.75.75 0 1 1 1.06 1.06l-4.25 4.25a.75.75 0 1 1-1.06 0L5.22 9.28a.75.75 0 0 1 0-1.06Z","clip-rule":"evenodd"})],-1)])],8,W),n[2]||(n[2]=t("span",{class:"panel-title"},"Quick Responses",-1))]),u.value?(l(),o("button",{key:0,type:"button",class:"settings-button",title:"Manage quick responses","aria-label":"Manage quick responses",onClick:n[0]||(n[0]=v(a=>g.$emit("openSettings"),["stop"]))},[...n[3]||(n[3]=[t("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",class:"settings-icon"},[t("path",{"fill-rule":"evenodd",d:"M7.84 1.804A1 1 0 0 1 8.82 1h2.36a1 1 0 0 1 .98.804l.331 1.652a6.993 6.993 0 0 1 1.929 1.115l1.598-.54a1 1 0 0 1 1.186.447l1.18 2.044a1 1 0 0 1-.205 1.251l-1.267 1.113a7.047 7.047 0 0 1 0 2.228l1.267 1.113a1 1 0 0 1 .206 1.25l-1.18 2.045a1 1 0 0 1-1.187.447l-1.598-.54a6.993 6.993 0 0 1-1.929 1.115l-.33 1.652a1 1 0 0 1-.98.804H8.82a1 1 0 0 1-.98-.804l-.331-1.652a6.993 6.993 0 0 1-1.929-1.115l-1.598.54a1 1 0 0 1-1.186-.447l-1.18-2.044a1 1 0 0 1 .205-1.251l1.267-1.114a7.05 7.05 0 0 1 0-2.227L1.821 7.773a1 1 0 0 1-.206-1.25l1.18-2.045a1 1 0 0 1 1.187-.447l1.598.54A6.993 6.993 0 0 1 7.51 3.456l.33-1.652ZM10 13a3 3 0 1 0 0-6 3 3 0 0 0 0 6Z","clip-rule":"evenodd"})],-1)])])):r("",!0)]),i.value&&u.value?(l(),o("div",G,[...n[4]||(n[4]=[t("span",{class:"loading-text"},"Loading...",-1)])])):!b.value&&u.value?(l(),o("div",H,[...n[5]||(n[5]=[t("span",{class:"empty-text"},"No quick responses yet",-1)])])):r("",!0),u.value&&b.value&&!i.value?(l(),o("div",J,[f.value.length>0?(l(),o("div",U,[n[6]||(n[6]=t("span",{class:"section-label"},"Project",-1)),t("div",X,[(l(!0),o(F,null,z(f.value,a=>(l(),o("button",{key:a.id,type:"button",class:j(["response-button project-response",{"auto-submit":a.autoSubmit}]),title:a.content,onClick:v(w=>x(a),["stop"])},[t("span",ee,k(a.label),1),a.autoSubmit?(l(),o("span",te,"⚡")):r("",!0)],10,Y))),128))])])):r("",!0),h.value.length>0?(l(),o("div",se,[n[7]||(n[7]=t("span",{class:"section-label"},"Global",-1)),t("div",ne,[(l(!0),o(F,null,z(h.value,a=>(l(),o("button",{key:a.id,type:"button",class:j(["response-button global-response",{"auto-submit":a.autoSubmit}]),title:a.content,onClick:v(w=>x(a),["stop"])},[t("span",le,k(a.label),1),a.autoSubmit?(l(),o("span",oe,"⚡")):r("",!0)],10,ae))),128))])])):r("",!0)])):r("",!0)])):r("",!0)}}),de=B(ie,[["__scopeId","data-v-ed1ea1d6"]]);export{pe as F,de as Q,re as u};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{_ as E,l as x,A as L,a as _,c as b,b as r,a1 as R,j as z,n as H}from"./index-B6G18FqB.js";const w={class:"resizable-textarea-wrapper"},y=["value"],k={__name:"ResizableTextarea",props:{modelValue:{type:String,default:""},minHeight:{type:Number,default:80},maxHeight:{type:Number,default:null}},emits:["update:modelValue","input"],setup(c,{expose:m,emit:h}){const o=c,d=h;function p(e){d("update:modelValue",e.target.value),d("input",e)}const t=H(null);let u=!1;x(()=>o.modelValue,e=>{t.value&&t.value.value!==e&&(t.value.value=e)});function v(e){if(!t.value)return;u=!0;const a=e.type.startsWith("touch")?e.touches[0].clientY:e.clientY,f=t.value.offsetHeight,l=i=>{if(!u)return;const g=i.type.startsWith("touch")?i.touches[0].clientY:i.clientY;let s=f+(g-a);s=Math.max(o.minHeight,s),o.maxHeight&&(s=Math.min(o.maxHeight,s)),t.value.style.height=`${s}px`},n=()=>{u=!1,document.removeEventListener("mousemove",l),document.removeEventListener("mouseup",n),document.removeEventListener("touchmove",l),document.removeEventListener("touchend",n),document.removeEventListener("touchcancel",n)};document.addEventListener("mousemove",l),document.addEventListener("mouseup",n),document.addEventListener("touchmove",l,{passive:!1}),document.addEventListener("touchend",n),document.addEventListener("touchcancel",n)}return m({get value(){var e;return((e=t.value)==null?void 0:e.value)||""},set value(e){t.value&&(t.value.value=e)},focus(){var e;(e=t.value)==null||e.focus()},blur(){var e;(e=t.value)==null||e.blur()},select(){var e;(e=t.value)==null||e.select()},get selectionStart(){var e;return((e=t.value)==null?void 0:e.selectionStart)||0},set selectionStart(e){t.value&&(t.value.selectionStart=e)},get selectionEnd(){var e;return((e=t.value)==null?void 0:e.selectionEnd)||0},set selectionEnd(e){t.value&&(t.value.selectionEnd=e)},dispatchEvent(e){var a;return(a=t.value)==null?void 0:a.dispatchEvent(e)}}),L(()=>{u=!1}),(e,a)=>(_(),b("div",w,[r("textarea",R({ref_key:"textareaRef",ref:t},e.$attrs,{value:c.modelValue,onInput:p}),null,16,y),r("div",{class:"resize-handle","aria-hidden":"true",onMousedown:v,onTouchstart:z(v,["prevent"])},[...a[0]||(a[0]=[r("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none"},[r("path",{d:"M14 10L10 14M14 6L6 14",stroke:"currentColor","stroke-width":"1.5","stroke-linecap":"round"})],-1)])],32)]))}},Y=E(k,[["__scopeId","data-v-c0e567bd"]]);export{Y as R};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.resizable-textarea-wrapper[data-v-c0e567bd]{position:relative;display:flex;flex-direction:column}.resizable-textarea-wrapper textarea[data-v-c0e567bd]{resize:none;padding-bottom:24px;width:100%;box-sizing:border-box}.resize-handle[data-v-c0e567bd]{position:absolute;bottom:4px;right:4px;width:24px;height:24px;cursor:ns-resize;display:flex;align-items:center;justify-content:center;color:var(--color-text-soft, #6b7280);opacity:.5;transition:opacity .15s;touch-action:none;user-select:none;-webkit-user-select:none;border-radius:4px}.resize-handle[data-v-c0e567bd]:hover,.resize-handle[data-v-c0e567bd]:active{opacity:1;background:#ffffff0d}@media (pointer: coarse){.resize-handle[data-v-c0e567bd]{width:32px;height:32px;bottom:2px;right:2px;opacity:.6}}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{_ as j,o as H,a as e,c as o,b as t,t as b,i as c,j as k,n as R,u as q,e as W,x as y,g as z,d as U,w as G,f as K,G as C,F as D,r as J,E}from"./index-B6G18FqB.js";import{u as Q}from"./sessions-DH1R-NhV.js";import{u as X}from"./commandButtons-D4RPpLiu.js";import{u as Y,P as Z,S as _,B as ss,g as ts,f as es,b as ns}from"./SessionLogStream-DpUE6Xsh.js";import{a as os}from"./ApiClient-B4YTtyY4.js";const as={key:0,class:"session-summary"},is={class:"summary-text"},rs={class:"summary-meta"},ls={key:0,class:"summary-files"},us={key:1,class:"session-summary session-summary-loading"},ds={key:2,class:"session-summary session-summary-error"},cs={__name:"SessionCardSummary",props:{sessionId:{type:String,required:!0},summary:{type:Object,default:null},summaryLoading:{type:Boolean,default:!1},summaryError:{type:Boolean,default:!1}},emits:["retrySummary"],setup(s){const g=s,m=R(0);return H(async()=>{var f,r;try{const l=await os.getSessionFilesCount(g.sessionId);m.value=l.count||0}catch(l){console.warn("Failed to fetch files count:",l),(r=(f=g.summary)==null?void 0:f.filesModified)!=null&&r.length&&(m.value=g.summary.filesModified.length)}}),(f,r)=>s.summary?(e(),o("div",as,[t("p",is,b(s.summary.shortSummary),1),t("div",rs,[m.value>0?(e(),o("span",ls,b(m.value)+" "+b(m.value===1?"file":"files")+" modified ",1)):c("",!0)])])):s.summaryLoading?(e(),o("div",us,[...r[1]||(r[1]=[t("span",{class:"loading-spinner-small"},null,-1),t("span",null,"Loading summary...",-1)])])):s.summaryError?(e(),o("div",ds,[r[2]||(r[2]=t("span",{class:"error-icon"},"!",-1)),r[3]||(r[3]=t("span",null,"Summary unavailable",-1)),t("button",{class:"retry-btn",onClick:r[0]||(r[0]=k(l=>f.$emit("retrySummary"),["prevent"]))}," Retry ")])):c("",!0)}},ms=j(cs,[["__scopeId","data-v-a9b445b6"]]);function hs(s){return new Date(s).toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}const vs={class:"session-header-actions"},ys=["title"],fs={key:0,class:"archive-actions"},ws=["title"],gs={key:0,xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"currentColor",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},ks={key:1,xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},bs={__name:"SessionCardHeaderActions",props:{dateToShow:{type:String,default:null},isChild:{type:Boolean,default:!1},isOnBoard:{type:Boolean,default:!1},kanbanEnabled:{type:Boolean,default:!0},showArchive:{type:Boolean,default:!1},showUnarchive:{type:Boolean,default:!1},sessionStatus:{type:String,default:""},starred:{type:Boolean,default:!1}},emits:["archive","unarchive","star","addToBoard"],setup(s,{emit:g}){const m=s,f=g,r=y(()=>m.sessionStatus!=="running"&&m.sessionStatus!=="starting"),l=()=>{f("archive")},u=()=>{confirm("Restore this session to active?")&&f("unarchive")};return(S,i)=>(e(),o("div",vs,[t("div",{class:"session-date",title:s.dateToShow?"Last activity":"No activity yet"},b(s.dateToShow?q(hs)(s.dateToShow):"—"),9,ys),s.isChild?c("",!0):(e(),o("div",fs,[s.kanbanEnabled&&!s.isOnBoard?(e(),o("button",{key:0,class:"add-to-board-btn",title:"Add to kanban board",onClick:i[0]||(i[0]=k(B=>S.$emit("addToBoard"),["stop","prevent"]))},[...i[2]||(i[2]=[t("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[t("rect",{x:"3",y:"3",width:"18",height:"18",rx:"2",ry:"2"}),t("line",{x1:"9",y1:"3",x2:"9",y2:"21"}),t("line",{x1:"15",y1:"3",x2:"15",y2:"21"})],-1)])])):c("",!0),s.showArchive&&r.value?(e(),o("button",{key:1,class:"archive-btn",title:"Archive session",onClick:k(l,["stop","prevent"])},[...i[3]||(i[3]=[t("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[t("rect",{x:"2",y:"4",width:"20",height:"5",rx:"1",ry:"1"}),t("path",{d:"M4 9v9a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9"}),t("path",{d:"M10 13h4"})],-1)])])):c("",!0),s.showUnarchive?(e(),o("button",{key:2,class:"archive-btn",title:"Unarchive session",onClick:k(u,["stop","prevent"])},[...i[4]||(i[4]=[W('<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" data-v-07b0375c><rect x="2" y="4" width="20" height="5" rx="1" ry="1" data-v-07b0375c></rect><path d="M4 9v9a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9" data-v-07b0375c></path><path d="M12 11v6" data-v-07b0375c></path><path d="M9 14l3-3 3 3" data-v-07b0375c></path></svg>',1)])])):c("",!0),t("button",{class:"star-btn star-btn-mobile",title:s.starred?"Unstar session":"Star session",onClick:i[1]||(i[1]=k(B=>S.$emit("star"),["stop","prevent"]))},[s.starred?(e(),o("svg",gs,[...i[5]||(i[5]=[t("polygon",{points:"12 2 15.09 10.26 24 10.5 17.18 16.34 19.34 24.5 12 18.92 4.66 24.5 6.82 16.34 0 10.5 8.91 10.26 12 2"},null,-1)])])):(e(),o("svg",ks,[...i[6]||(i[6]=[t("polygon",{points:"12 2 15.09 10.26 24 10.5 17.18 16.34 19.34 24.5 12 18.92 4.66 24.5 6.82 16.34 0 10.5 8.91 10.26 12 2"},null,-1)])]))],8,ws)]))]))}},Ss=j(bs,[["__scopeId","data-v-07b0375c"]]),ps={class:"workflow-card-wrapper"},Cs={class:"session-header-row"},Bs=["title"],xs={key:0,xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"currentColor",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},$s={key:1,xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},js={class:"session-info"},As={class:"session-name"},Is={class:"session-meta"},Ts={key:0,class:"status-badge status-running"},Ms={key:1,class:"status-badge status-scheduled"},Ls=["title"],Us=["title","aria-label","onClick","innerHTML"],Ds={key:0,class:"session-project"},Es={class:"project-name"},Rs={__name:"SessionCard",props:{session:{type:Object,required:!0},showSummary:{type:Boolean,default:!1},showProject:{type:Boolean,default:!1},summary:{type:Object,default:null},summaryLoading:{type:Boolean,default:!1},summaryError:{type:Boolean,default:!1},isChild:{type:Boolean,default:!1},showArchive:{type:Boolean,default:!1},showUnarchive:{type:Boolean,default:!1},prUrl:{type:String,default:null},prSummary:{type:Object,default:null},kanbanEnabled:{type:Boolean,default:!0}},emits:["retrySummary","archive","unarchive","addToBoard"],setup(s,{emit:g}){const m=Q(),f=X(),r=Y(),l=R(null),u=s,S=g,i=y(()=>r.isSessionOnBoard(u.session.id)),B=()=>{S("addToBoard",u.session)},O=y(()=>u.session.lastActivityAt??null);function x(){return m.getWorkflowSessions(u.session.id)}const A=y(()=>{const d=x(),n=["running","starting"];let h=0,a=0;for(const w of d)n.includes(w.status)&&h++,w.status==="scheduled"&&a++;return{runningCount:h,scheduledCount:a,totalCount:d.length,effectiveStatus:u.session.status}}),I=y(()=>{const d=["running","starting"];return x().filter(n=>d.includes(n.status)).map(n=>n.id)}),N=y(()=>I.value.length>0),p=y(()=>{const d=Date.now();if(u.session.status==="scheduled"&&u.session.scheduledAt)return u.session.scheduledAt;const n=x();let h=null;for(const a of n)if(a.id!==u.session.id&&a.status==="scheduled"&&a.scheduledAt){const w=new Date(a.scheduledAt).getTime();w>=d&&(h===null||w<h)&&(h=w)}return h}),T=y(()=>p.value?es(new Date(p.value),{addSuffix:!0}):null),V=y(()=>p.value?ns(new Date(p.value),"MMM d, h:mm a"):null),F=y(()=>{const d=u.session.projectId;if(!d)return[];m.commandRunVersion;const n=f.getButtonsByProjectId(d),h=Object.fromEntries(n.map(v=>[v.id,v])),a=u.session.id,$=m.sessions.find(v=>v.id===a);return(($==null?void 0:$.latestCommandRuns)||u.session.latestCommandRuns||[]).filter(v=>{var L;return(L=h[v.buttonId])==null?void 0:L.showOnList}).map(v=>({buttonId:v.buttonId,label:h[v.buttonId].label,command:h[v.buttonId].command,status:v.status,latestRun:v}))}),P=d=>ts(d),M=()=>{m.toggleSessionStar(u.session.id)};return(d,n)=>{const h=z("router-link");return e(),o(D,null,[t("div",ps,[U(h,{to:`/sessions/${s.session.id}`,class:E(["session-card card",{"is-child":s.isChild}])},{default:G(()=>[t("div",Cs,[s.isChild?c("",!0):(e(),o("button",{key:0,class:"star-btn",title:s.session.starred?"Unstar session":"Star session",onClick:k(M,["stop","prevent"])},[s.session.starred?(e(),o("svg",xs,[...n[4]||(n[4]=[t("polygon",{points:"12 2 15.09 10.26 24 10.5 17.18 16.34 19.34 24.5 12 18.92 4.66 24.5 6.82 16.34 0 10.5 8.91 10.26 12 2"},null,-1)])])):(e(),o("svg",$s,[...n[5]||(n[5]=[t("polygon",{points:"12 2 15.09 10.26 24 10.5 17.18 16.34 19.34 24.5 12 18.92 4.66 24.5 6.82 16.34 0 10.5 8.91 10.26 12 2"},null,-1)])]))],8,Bs)),t("div",js,[t("h3",As,b(s.session.name),1),t("p",Is,[A.value.runningCount>0?(e(),o("span",Ts," ● running ")):c("",!0),A.value.scheduledCount>0?(e(),o("span",Ms,[...n[6]||(n[6]=[t("svg",{class:"schedule-icon-inline",xmlns:"http://www.w3.org/2000/svg",width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[t("circle",{cx:"12",cy:"12",r:"10"}),t("polyline",{points:"12 6 12 12 16 14"})],-1),K(" scheduled ",-1)])])):c("",!0),T.value?(e(),o("span",{key:2,class:"scheduled-time",title:V.value},b(T.value),9,Ls)):c("",!0),s.prUrl&&!s.isChild?(e(),C(Z,{key:3,"pr-url":s.prUrl,summary:s.prSummary,"data-testid":"session-card-pr-indicators"},null,8,["pr-url","summary"])):c("",!0),(e(!0),o(D,null,J(F.value,a=>(e(),o("span",{key:a.buttonId,class:E(["button-status-indicator",`button-status-${a.status}`]),title:a.label,"aria-label":a.status,onClick:k(w=>l.value=a,["stop","prevent"]),innerHTML:P(a.status)},null,10,Us))),128))]),s.showProject&&s.session.projectName?(e(),o("p",Ds,[t("span",Es,b(s.session.projectName),1)])):c("",!0)]),U(Ss,{"date-to-show":O.value,"is-child":s.isChild,"is-on-board":i.value,"kanban-enabled":s.kanbanEnabled,"show-archive":s.showArchive,"show-unarchive":s.showUnarchive,"session-status":s.session.status,starred:!!s.session.starred,onArchive:n[0]||(n[0]=a=>d.$emit("archive",s.session.id)),onUnarchive:n[1]||(n[1]=a=>d.$emit("unarchive",s.session.id)),onStar:M,onAddToBoard:B},null,8,["date-to-show","is-child","is-on-board","kanban-enabled","show-archive","show-unarchive","session-status","starred"])]),s.showSummary?(e(),C(ms,{key:0,"session-id":s.session.id,summary:s.summary,"summary-loading":s.summaryLoading,"summary-error":s.summaryError,onRetrySummary:n[2]||(n[2]=a=>d.$emit("retrySummary",s.session.id))},null,8,["session-id","summary","summary-loading","summary-error"])):c("",!0),N.value?(e(),C(_,{key:1,"session-ids":I.value,"data-testid":"session-log-stream"},null,8,["session-ids"])):c("",!0)]),_:1},8,["to","class"])]),l.value?(e(),C(ss,{key:0,button:{id:l.value.buttonId,label:l.value.label,command:l.value.command},"latest-run":l.value.latestRun,"is-open":!!l.value,"session-id":s.session.id,onClose:n[3]||(n[3]=a=>l.value=null)},null,8,["button","latest-run","is-open","session-id"])):c("",!0)],64)}}},qs=j(Rs,[["__scopeId","data-v-eef8bbf3"]]);export{qs as S};
|