circuschief 0.7.0 → 0.8.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/index.js +2 -0
- package/packages/server/src/api/kanban.js +4 -2
- package/packages/server/src/api/projects-helpers.js +20 -3
- package/packages/server/src/api/projects-session-helpers.js +10 -4
- package/packages/server/src/api/projects.js +10 -0
- package/packages/server/src/api/providers.js +11 -1
- package/packages/server/src/api/sessions-commands.js +35 -17
- package/packages/server/src/api/sessions-lifecycle.js +10 -10
- package/packages/server/src/api/sessions-patch.js +4 -0
- 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 +1 -0
- package/packages/server/src/db/index.js +0 -3
- package/packages/server/src/db/migrations/index.js +36 -202
- package/packages/server/src/db/seedBaselineData.js +137 -0
- package/packages/server/src/db/session-helpers.js +6 -3
- package/packages/server/src/middleware/sessionLookup.js +81 -8
- package/packages/server/src/schema.sql +149 -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 +8 -8
- 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 +120 -0
- package/packages/server/src/services/gitService.js +11 -2
- package/packages/server/src/services/gitSessionSetup.js +11 -1
- 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 +2 -1
- package/packages/shared/src/contracts/templates.js +2 -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-B0XHqLmv.js} +1 -1
- package/packages/web/dist/assets/{AgentLogsView-BGFPLjLa.js → AgentLogsView-DmsjUMlB.js} +2 -2
- package/packages/web/dist/assets/ApiClient-C3ztI9s9.js +1 -0
- package/packages/web/dist/assets/ArchiveConfirmModal-BlCyn5Vt.js +1 -0
- package/packages/web/dist/assets/ArchiveConfirmModal-DeoCVGXt.css +1 -0
- package/packages/web/dist/assets/{CommandButtonDetailView-D8S258uP.js → CommandButtonDetailView-CdSCPp78.js} +1 -1
- package/packages/web/dist/assets/EffortLevelSelector-hc2MNKg6.js +1 -0
- package/packages/web/dist/assets/{GeneralSettingsView-DsHChEhv.js → GeneralSettingsView-D1nI8_zk.js} +1 -1
- package/packages/web/dist/assets/InputWithButton-CAkttyqx.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-BO1j9Z3_.js} +1 -1
- package/packages/web/dist/assets/MarkdownEditor-ucRAP_UM.js +2 -0
- package/packages/web/dist/assets/{ModelSelector-D8hbTRIt.css → ModelSelector-BSxKUSus.css} +1 -1
- package/packages/web/dist/assets/{ModelSelector-BMpR0DPr.js → ModelSelector-CwTz8ZWO.js} +1 -1
- package/packages/web/dist/assets/{NewSessionView-CUUdHkfv.css → NewSessionView-BDPb-1qr.css} +1 -1
- package/packages/web/dist/assets/NewSessionView-BsDrp8mj.js +3 -0
- package/packages/web/dist/assets/ProjectEditView-CwTOeSun.js +1 -0
- package/packages/web/dist/assets/{ProjectEditView-D9sK0fdH.css → ProjectEditView-J15mcsWz.css} +1 -1
- package/packages/web/dist/assets/{ProjectListView-B9FuWESY.js → ProjectListView-DcNyuINs.js} +1 -1
- package/packages/web/dist/assets/{ProjectNewView-D62jYlBL.js → ProjectNewView-B5YV62hv.js} +1 -1
- package/packages/web/dist/assets/ProvidersView-bZemq_Rv.css +1 -0
- package/packages/web/dist/assets/ProvidersView-nY9GnDdO.js +1 -0
- package/packages/web/dist/assets/QuickResponseSettings-B352c75l.css +1 -0
- package/packages/web/dist/assets/{QuickResponseSettings-CDm5vwP7.js → QuickResponseSettings-BQwQXuL7.js} +1 -1
- package/packages/web/dist/assets/{QuickResponsesPanel-DZ_Lre_l.js → QuickResponsesPanel-BzSYcCSP.js} +1 -1
- package/packages/web/dist/assets/{ResizableTextarea-DiIOEGjN.js → ResizableTextarea-B3YIdIXv.js} +1 -1
- package/packages/web/dist/assets/{SessionCard-DmjnVYWn.js → SessionCard-CjE1tXiT.js} +1 -1
- package/packages/web/dist/assets/SessionDetailView-3cPZrbS3.js +36 -0
- package/packages/web/dist/assets/SessionDetailView-CZRZMrfM.css +1 -0
- package/packages/web/dist/assets/{SessionFormOptions-DYUISplS.js → SessionFormOptions-B6AxyREh.js} +1 -1
- package/packages/web/dist/assets/SessionListView-B5_6gW49.css +1 -0
- package/packages/web/dist/assets/SessionListView-CLXBfLcq.js +1 -0
- package/packages/web/dist/assets/{SessionLogStream-DpUE6Xsh.js → SessionLogStream-LlZ3z_Xj.js} +1 -1
- package/packages/web/dist/assets/{SettingsView-BC055tIA.js → SettingsView-CTGiGvR2.js} +1 -1
- package/packages/web/dist/assets/{SlashCommandWizard-DmTyNG9O.js → SlashCommandWizard-Cy04d7-o.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-BR2ZjEa3.js} +1 -1
- package/packages/web/dist/assets/{TemplateDetailView-BlhOmLUX.js → TemplateDetailView-DH6Oswsp.js} +1 -1
- package/packages/web/dist/assets/{commandButtons-D4RPpLiu.js → commandButtons-BfqR-fqq.js} +1 -1
- package/packages/web/dist/assets/{index-CfL84oGW.js → index-1zziPL6l.js} +1 -1
- package/packages/web/dist/assets/{index-OfCywayk.js → index-7kzHPxSF.js} +1 -1
- package/packages/web/dist/assets/{index-PDesaJc6.js → index-B0N_obMc.js} +1 -1
- package/packages/web/dist/assets/{index-Cpy4-yv3.js → index-BNk_gdfI.js} +1 -1
- package/packages/web/dist/assets/{index-Cs2nxhrT.css → index-BY174HVJ.css} +1 -1
- package/packages/web/dist/assets/{index-9vb2KaAd.js → index-CSqaAH-0.js} +1 -1
- package/packages/web/dist/assets/{index-CNwkdB0T.js → index-C_q4WlK8.js} +1 -1
- package/packages/web/dist/assets/{index-B0CvZXuN.js → index-D1wpU4y0.js} +1 -1
- package/packages/web/dist/assets/{index-4rhEeO0B.js → index-D5zCA8sD.js} +1 -1
- package/packages/web/dist/assets/{index-CkmxO8Mm.js → index-DGR8ELWY.js} +1 -1
- package/packages/web/dist/assets/{index-CrAQJmoZ.js → index-DHga8pXo.js} +1 -1
- package/packages/web/dist/assets/{index-BUhvkAdF.js → index-DSby02Wl.js} +1 -1
- package/packages/web/dist/assets/{index-BGwH4Cfn.js → index-DgkC10TW.js} +3 -3
- package/packages/web/dist/assets/{index-DfrE0gAC.js → index-DqjXJTVI.js} +1 -1
- package/packages/web/dist/assets/{index-Bn5xdGFM.js → index-DtfUt785.js} +1 -1
- package/packages/web/dist/assets/{index-KwEyz0F3.js → index-_4S2uLDI.js} +1 -1
- package/packages/web/dist/assets/{index-B6G18FqB.js → index-fK8FIZgP.js} +15 -14
- package/packages/web/dist/assets/{index-BcnkUk2o.js → index-gmiZeFXN.js} +1 -1
- package/packages/web/dist/assets/{index-D6Ky9vJe.js → index-irD539ZM.js} +1 -1
- package/packages/web/dist/assets/{index-uB6nhSvz.js → index-yq-E1Y00.js} +1 -1
- package/packages/web/dist/assets/{projects-BUiOGmmb.js → projects-DXYQNJIi.js} +1 -1
- package/packages/web/dist/assets/{providers-Bh1ZiiJi.js → providers-1bnH-exJ.js} +1 -1
- package/packages/web/dist/assets/sessions-6zGUlFrt.js +1 -0
- package/packages/web/dist/assets/{settings-Z4AVVmkJ.js → settings-MbfRir0d.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/server/src/db/migrations/canvasItemsMigrations.js +0 -109
- package/packages/server/src/db/migrations/conversationsMigrations.js +0 -187
- package/packages/server/src/db/migrations/kanbanMigrations.js +0 -99
- package/packages/server/src/db/migrations/miscMigrations.js +0 -369
- package/packages/server/src/db/migrations/projectsMigrations.js +0 -99
- package/packages/server/src/db/migrations/sessionsMigrations.js +0 -287
- 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/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/NewSessionView-BCqtIgWH.js +0 -3
- 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/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/sessions-DH1R-NhV.js +0 -1
|
@@ -1,287 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Migrations for the sessions table and closely related session tables.
|
|
3
|
-
* Each export is an array of { name, up(db) } migration objects.
|
|
4
|
-
*/
|
|
5
|
-
import { addColumnIfMissing, getColumns, getTableSql } from './migrationUtils.js';
|
|
6
|
-
|
|
7
|
-
// Table name constants for migrations
|
|
8
|
-
const TABLE_SESSIONS = 'sessions';
|
|
9
|
-
|
|
10
|
-
// Column type constants
|
|
11
|
-
const COL_INTEGER_DEFAULT_0 = 'INTEGER DEFAULT 0';
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* SQL column definition for the sessions table with updated status CHECK constraint.
|
|
15
|
-
*/
|
|
16
|
-
const SESSIONS_BASE_COLUMNS = `
|
|
17
|
-
id TEXT PRIMARY KEY,
|
|
18
|
-
project_id TEXT NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
|
|
19
|
-
name TEXT NOT NULL,
|
|
20
|
-
status TEXT NOT NULL DEFAULT 'starting' CHECK (status IN ('starting', 'running', 'waiting', 'stopped', 'completed', 'error', 'scheduled')),
|
|
21
|
-
mode TEXT NOT NULL DEFAULT 'standard' CHECK (mode IN ('plan', 'standard', 'yolo')),
|
|
22
|
-
thinking_enabled INTEGER NOT NULL DEFAULT 0,
|
|
23
|
-
git_branch TEXT,
|
|
24
|
-
git_worktree TEXT,
|
|
25
|
-
pr_url TEXT,
|
|
26
|
-
error TEXT,
|
|
27
|
-
effort_level TEXT CHECK(effort_level IN ('low', 'medium', 'high', 'max', 'auto')),
|
|
28
|
-
cost_usd REAL DEFAULT 0,
|
|
29
|
-
claude_session_id TEXT,
|
|
30
|
-
model TEXT,
|
|
31
|
-
next_template_id TEXT REFERENCES session_templates(id) ON DELETE SET NULL,
|
|
32
|
-
parent_session_id TEXT REFERENCES sessions(id) ON DELETE SET NULL,
|
|
33
|
-
input_tokens INTEGER DEFAULT 0,
|
|
34
|
-
output_tokens INTEGER DEFAULT 0,
|
|
35
|
-
thinking_tokens INTEGER DEFAULT 0,
|
|
36
|
-
cache_read_input_tokens INTEGER DEFAULT 0,
|
|
37
|
-
cache_creation_input_tokens INTEGER DEFAULT 0,
|
|
38
|
-
web_search_requests INTEGER DEFAULT 0,
|
|
39
|
-
context_window INTEGER DEFAULT 200000,
|
|
40
|
-
archived INTEGER NOT NULL DEFAULT 0,
|
|
41
|
-
starred INTEGER NOT NULL DEFAULT 0,
|
|
42
|
-
manually_named INTEGER NOT NULL DEFAULT 0,
|
|
43
|
-
scheduled_at INTEGER DEFAULT NULL,
|
|
44
|
-
reschedule_delay_minutes INTEGER DEFAULT 15,
|
|
45
|
-
auto_reschedule_enabled INTEGER DEFAULT 0,
|
|
46
|
-
reschedule_on_token_limit INTEGER DEFAULT 1,
|
|
47
|
-
reschedule_on_service_error INTEGER DEFAULT 1,
|
|
48
|
-
max_reschedule_count INTEGER DEFAULT NULL,
|
|
49
|
-
max_total_tokens INTEGER DEFAULT NULL,
|
|
50
|
-
reschedule_count INTEGER DEFAULT 0,
|
|
51
|
-
reschedule_at_token_count INTEGER DEFAULT NULL,
|
|
52
|
-
created_at INTEGER NOT NULL DEFAULT (unixepoch() * 1000),
|
|
53
|
-
updated_at INTEGER NOT NULL DEFAULT (unixepoch() * 1000)
|
|
54
|
-
`;
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
* All possible column names that may exist in the sessions table for migration SELECT.
|
|
58
|
-
*/
|
|
59
|
-
const SESSIONS_ALL_COLUMNS = [
|
|
60
|
-
'id', 'project_id', 'name', 'status', 'mode', 'thinking_enabled',
|
|
61
|
-
'git_branch', 'git_worktree', 'pr_url', 'error', 'effort_level',
|
|
62
|
-
'cost_usd', 'claude_session_id', 'model', 'next_template_id',
|
|
63
|
-
'parent_session_id', 'input_tokens', 'output_tokens', 'thinking_tokens',
|
|
64
|
-
'cache_read_input_tokens', 'cache_creation_input_tokens',
|
|
65
|
-
'web_search_requests', 'context_window', 'archived', 'starred',
|
|
66
|
-
'manually_named', 'scheduled_at', 'reschedule_delay_minutes',
|
|
67
|
-
'auto_reschedule_enabled', 'reschedule_on_token_limit',
|
|
68
|
-
'reschedule_on_service_error', 'max_reschedule_count',
|
|
69
|
-
'max_total_tokens', 'reschedule_count', 'reschedule_at_token_count',
|
|
70
|
-
'created_at', 'updated_at',
|
|
71
|
-
];
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* Migrate sessions table to include 'stopped' and 'scheduled' in status CHECK constraint.
|
|
75
|
-
* SQLite doesn't support ALTER TABLE to modify constraints, so we recreate the table.
|
|
76
|
-
*/
|
|
77
|
-
function migrateSessionsStatusConstraint(db) {
|
|
78
|
-
const tableSql = getTableSql(db, TABLE_SESSIONS);
|
|
79
|
-
|
|
80
|
-
// If schema already includes 'scheduled', no migration needed
|
|
81
|
-
if (tableSql?.includes("'scheduled'")) {
|
|
82
|
-
return;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
const columnNames = getColumns(db, TABLE_SESSIONS);
|
|
86
|
-
const selectColumns = SESSIONS_ALL_COLUMNS
|
|
87
|
-
.filter((col) => columnNames.includes(col))
|
|
88
|
-
.join(', ');
|
|
89
|
-
|
|
90
|
-
db.exec(`
|
|
91
|
-
CREATE TABLE sessions_new (${SESSIONS_BASE_COLUMNS});
|
|
92
|
-
INSERT INTO sessions_new (${selectColumns})
|
|
93
|
-
SELECT ${selectColumns} FROM sessions;
|
|
94
|
-
DROP TABLE sessions;
|
|
95
|
-
ALTER TABLE sessions_new RENAME TO sessions;
|
|
96
|
-
CREATE INDEX IF NOT EXISTS idx_sessions_project ON sessions(project_id);
|
|
97
|
-
CREATE INDEX IF NOT EXISTS idx_sessions_status ON sessions(status);
|
|
98
|
-
CREATE INDEX IF NOT EXISTS idx_sessions_archived ON sessions(archived);
|
|
99
|
-
CREATE INDEX IF NOT EXISTS idx_sessions_starred ON sessions(archived, starred);
|
|
100
|
-
CREATE INDEX IF NOT EXISTS idx_sessions_next_template ON sessions(next_template_id);
|
|
101
|
-
CREATE INDEX IF NOT EXISTS idx_sessions_parent ON sessions(parent_session_id);
|
|
102
|
-
CREATE INDEX IF NOT EXISTS idx_sessions_scheduled ON sessions(scheduled_at) WHERE scheduled_at IS NOT NULL;
|
|
103
|
-
`);
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
/** @type {Array<{name: string, up: (db: import('better-sqlite3').Database) => void}>} */
|
|
107
|
-
export const sessionsMigrations = [
|
|
108
|
-
// --- Initial sessions columns ---
|
|
109
|
-
{
|
|
110
|
-
name: 'sessions-add-cost_usd',
|
|
111
|
-
up(db) { addColumnIfMissing(db, TABLE_SESSIONS, 'cost_usd', 'REAL DEFAULT 0'); },
|
|
112
|
-
},
|
|
113
|
-
{
|
|
114
|
-
name: 'sessions-add-claude_session_id',
|
|
115
|
-
up(db) { addColumnIfMissing(db, TABLE_SESSIONS, 'claude_session_id', 'TEXT'); },
|
|
116
|
-
},
|
|
117
|
-
{
|
|
118
|
-
name: 'sessions-add-model',
|
|
119
|
-
up(db) { addColumnIfMissing(db, TABLE_SESSIONS, 'model', 'TEXT'); },
|
|
120
|
-
},
|
|
121
|
-
{
|
|
122
|
-
name: 'sessions-add-provider_id-early',
|
|
123
|
-
up(db) { addColumnIfMissing(db, TABLE_SESSIONS, 'provider_id', 'TEXT'); },
|
|
124
|
-
},
|
|
125
|
-
{
|
|
126
|
-
name: 'sessions-add-effort_level',
|
|
127
|
-
up(db) {
|
|
128
|
-
addColumnIfMissing(
|
|
129
|
-
db, TABLE_SESSIONS, 'effort_level',
|
|
130
|
-
"TEXT CHECK(effort_level IN ('low', 'medium', 'high', 'max', 'auto'))"
|
|
131
|
-
);
|
|
132
|
-
},
|
|
133
|
-
},
|
|
134
|
-
|
|
135
|
-
// --- Scheduling columns ---
|
|
136
|
-
{
|
|
137
|
-
name: 'sessions-add-scheduled_at',
|
|
138
|
-
up(db) { addColumnIfMissing(db, TABLE_SESSIONS, 'scheduled_at', 'INTEGER DEFAULT NULL'); },
|
|
139
|
-
},
|
|
140
|
-
{
|
|
141
|
-
name: 'sessions-add-reschedule_delay_minutes',
|
|
142
|
-
up(db) { addColumnIfMissing(db, TABLE_SESSIONS, 'reschedule_delay_minutes', 'INTEGER DEFAULT 15'); },
|
|
143
|
-
},
|
|
144
|
-
{
|
|
145
|
-
name: 'sessions-add-auto_reschedule_enabled',
|
|
146
|
-
up(db) { addColumnIfMissing(db, TABLE_SESSIONS, 'auto_reschedule_enabled', COL_INTEGER_DEFAULT_0); },
|
|
147
|
-
},
|
|
148
|
-
{
|
|
149
|
-
name: 'sessions-add-reschedule_on_token_limit',
|
|
150
|
-
up(db) { addColumnIfMissing(db, TABLE_SESSIONS, 'reschedule_on_token_limit', 'INTEGER DEFAULT 1'); },
|
|
151
|
-
},
|
|
152
|
-
{
|
|
153
|
-
name: 'sessions-add-reschedule_on_service_error',
|
|
154
|
-
up(db) { addColumnIfMissing(db, TABLE_SESSIONS, 'reschedule_on_service_error', 'INTEGER DEFAULT 1'); },
|
|
155
|
-
},
|
|
156
|
-
{
|
|
157
|
-
name: 'sessions-add-max_reschedule_count',
|
|
158
|
-
up(db) { addColumnIfMissing(db, TABLE_SESSIONS, 'max_reschedule_count', 'INTEGER DEFAULT NULL'); },
|
|
159
|
-
},
|
|
160
|
-
{
|
|
161
|
-
name: 'sessions-add-max_total_tokens',
|
|
162
|
-
up(db) { addColumnIfMissing(db, TABLE_SESSIONS, 'max_total_tokens', 'INTEGER DEFAULT NULL'); },
|
|
163
|
-
},
|
|
164
|
-
{
|
|
165
|
-
name: 'sessions-add-reschedule_count',
|
|
166
|
-
up(db) { addColumnIfMissing(db, TABLE_SESSIONS, 'reschedule_count', COL_INTEGER_DEFAULT_0); },
|
|
167
|
-
},
|
|
168
|
-
{
|
|
169
|
-
name: 'sessions-add-reschedule_at_token_count',
|
|
170
|
-
up(db) { addColumnIfMissing(db, TABLE_SESSIONS, 'reschedule_at_token_count', 'INTEGER DEFAULT NULL'); },
|
|
171
|
-
},
|
|
172
|
-
|
|
173
|
-
// --- Status constraint migration (table recreation) ---
|
|
174
|
-
{
|
|
175
|
-
name: 'sessions-migrate-status-constraint',
|
|
176
|
-
up(db) { migrateSessionsStatusConstraint(db); },
|
|
177
|
-
},
|
|
178
|
-
|
|
179
|
-
// --- Template chaining ---
|
|
180
|
-
{
|
|
181
|
-
name: 'sessions-add-next_template_id',
|
|
182
|
-
up(db) {
|
|
183
|
-
addColumnIfMissing(
|
|
184
|
-
db, TABLE_SESSIONS, 'next_template_id',
|
|
185
|
-
'TEXT REFERENCES session_templates(id) ON DELETE SET NULL'
|
|
186
|
-
);
|
|
187
|
-
},
|
|
188
|
-
},
|
|
189
|
-
{
|
|
190
|
-
name: 'sessions-add-parent_session_id',
|
|
191
|
-
up(db) {
|
|
192
|
-
addColumnIfMissing(
|
|
193
|
-
db, TABLE_SESSIONS, 'parent_session_id',
|
|
194
|
-
'TEXT REFERENCES sessions(id) ON DELETE SET NULL'
|
|
195
|
-
);
|
|
196
|
-
},
|
|
197
|
-
},
|
|
198
|
-
{
|
|
199
|
-
name: 'sessions-template-chaining-indexes',
|
|
200
|
-
up(db) {
|
|
201
|
-
db.exec('CREATE INDEX IF NOT EXISTS idx_sessions_next_template ON sessions(next_template_id)');
|
|
202
|
-
db.exec('CREATE INDEX IF NOT EXISTS idx_sessions_parent ON sessions(parent_session_id)');
|
|
203
|
-
},
|
|
204
|
-
},
|
|
205
|
-
|
|
206
|
-
// --- Token usage columns ---
|
|
207
|
-
{
|
|
208
|
-
name: 'sessions-add-input_tokens',
|
|
209
|
-
up(db) { addColumnIfMissing(db, TABLE_SESSIONS, 'input_tokens', COL_INTEGER_DEFAULT_0); },
|
|
210
|
-
},
|
|
211
|
-
{
|
|
212
|
-
name: 'sessions-add-output_tokens',
|
|
213
|
-
up(db) { addColumnIfMissing(db, TABLE_SESSIONS, 'output_tokens', COL_INTEGER_DEFAULT_0); },
|
|
214
|
-
},
|
|
215
|
-
{
|
|
216
|
-
name: 'sessions-add-thinking_tokens',
|
|
217
|
-
up(db) { addColumnIfMissing(db, TABLE_SESSIONS, 'thinking_tokens', COL_INTEGER_DEFAULT_0); },
|
|
218
|
-
},
|
|
219
|
-
{
|
|
220
|
-
name: 'sessions-add-cache_read_input_tokens',
|
|
221
|
-
up(db) { addColumnIfMissing(db, TABLE_SESSIONS, 'cache_read_input_tokens', COL_INTEGER_DEFAULT_0); },
|
|
222
|
-
},
|
|
223
|
-
{
|
|
224
|
-
name: 'sessions-add-cache_creation_input_tokens',
|
|
225
|
-
up(db) { addColumnIfMissing(db, TABLE_SESSIONS, 'cache_creation_input_tokens', COL_INTEGER_DEFAULT_0); },
|
|
226
|
-
},
|
|
227
|
-
{
|
|
228
|
-
name: 'sessions-add-web_search_requests',
|
|
229
|
-
up(db) { addColumnIfMissing(db, TABLE_SESSIONS, 'web_search_requests', COL_INTEGER_DEFAULT_0); },
|
|
230
|
-
},
|
|
231
|
-
{
|
|
232
|
-
name: 'sessions-add-context_window',
|
|
233
|
-
up(db) { addColumnIfMissing(db, TABLE_SESSIONS, 'context_window', 'INTEGER DEFAULT 200000'); },
|
|
234
|
-
},
|
|
235
|
-
|
|
236
|
-
// --- Archived / starred / manually_named ---
|
|
237
|
-
{
|
|
238
|
-
name: 'sessions-add-archived',
|
|
239
|
-
up(db) {
|
|
240
|
-
addColumnIfMissing(db, TABLE_SESSIONS, 'archived', 'INTEGER NOT NULL DEFAULT 0');
|
|
241
|
-
db.exec('CREATE INDEX IF NOT EXISTS idx_sessions_archived ON sessions(archived)');
|
|
242
|
-
},
|
|
243
|
-
},
|
|
244
|
-
{
|
|
245
|
-
name: 'sessions-add-starred',
|
|
246
|
-
up(db) {
|
|
247
|
-
addColumnIfMissing(db, TABLE_SESSIONS, 'starred', 'INTEGER NOT NULL DEFAULT 0');
|
|
248
|
-
db.exec('CREATE INDEX IF NOT EXISTS idx_sessions_starred ON sessions(archived, starred)');
|
|
249
|
-
},
|
|
250
|
-
},
|
|
251
|
-
{
|
|
252
|
-
name: 'sessions-add-manually_named',
|
|
253
|
-
up(db) { addColumnIfMissing(db, TABLE_SESSIONS, 'manually_named', 'INTEGER NOT NULL DEFAULT 0'); },
|
|
254
|
-
},
|
|
255
|
-
|
|
256
|
-
// --- Pending prompt / slash commands / pending model / auto send ---
|
|
257
|
-
{
|
|
258
|
-
name: 'sessions-add-pending_prompt',
|
|
259
|
-
up(db) { addColumnIfMissing(db, TABLE_SESSIONS, 'pending_prompt', 'TEXT'); },
|
|
260
|
-
},
|
|
261
|
-
{
|
|
262
|
-
name: 'sessions-add-slash_commands',
|
|
263
|
-
up(db) { addColumnIfMissing(db, TABLE_SESSIONS, 'slash_commands', 'TEXT'); },
|
|
264
|
-
},
|
|
265
|
-
{
|
|
266
|
-
name: 'sessions-add-pending_model',
|
|
267
|
-
up(db) { addColumnIfMissing(db, TABLE_SESSIONS, 'pending_model', 'TEXT'); },
|
|
268
|
-
},
|
|
269
|
-
{
|
|
270
|
-
name: 'sessions-add-auto_send_pending_prompt',
|
|
271
|
-
up(db) { addColumnIfMissing(db, TABLE_SESSIONS, 'auto_send_pending_prompt', COL_INTEGER_DEFAULT_0); },
|
|
272
|
-
},
|
|
273
|
-
|
|
274
|
-
// --- Provider ID (from providers table, added later in sequence) ---
|
|
275
|
-
{
|
|
276
|
-
name: 'sessions-add-provider_id-from-providers',
|
|
277
|
-
up(db) {
|
|
278
|
-
addColumnIfMissing(db, TABLE_SESSIONS, 'provider_id', 'TEXT REFERENCES providers(id)');
|
|
279
|
-
},
|
|
280
|
-
},
|
|
281
|
-
|
|
282
|
-
// --- Agent type ---
|
|
283
|
-
{
|
|
284
|
-
name: 'sessions-add-agent_type',
|
|
285
|
-
up(db) { addColumnIfMissing(db, TABLE_SESSIONS, 'agent_type', "TEXT DEFAULT 'claude-code'"); },
|
|
286
|
-
},
|
|
287
|
-
];
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var b=n=>{throw TypeError(n)};var g=(n,e,s)=>e.has(n)||b("Cannot "+s);var h=(n,e,s)=>(g(n,e,"read from private field"),s?s.call(n):e.get(n)),y=(n,e,s)=>e.has(n)?b("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(n):e.set(n,s),C=(n,e,s,t)=>(g(n,e,"write to private field"),t?t.call(n,s):e.set(n,s),s),l=(n,e,s)=>(g(n,e,"access private method"),s);function S(n){Object.assign(n.prototype,{async getProjects(){return this._get("/projects")},async getProject(e){return this._get(`/projects/${e}`)},async createProject(e){return this._post("/projects",e)},async updateProject(e,s){return this._put(`/projects/${e}`,s)},async deleteProject(e){return this._delete(`/projects/${e}`)}})}function j(n,e,s){for(const t of s)e[t]!==void 0&&e[t]!==null&&n.append(t,e[t])}function k(n,e,s){for(const t of s)e[t]!==void 0&&e[t]!==null&&n.append(t,String(e[t]))}function P(n,e){const s=new FormData;s.append("prompt",n.prompt),j(s,n,["name","mode","model","providerId","effortLevel","gitBranch","gitMode","templateId","parentSessionId"]),k(s,n,["thinkingEnabled","startImmediately","autoRescheduleEnabled","rescheduleOnTokenLimit","rescheduleOnServiceError"]),j(s,n,["scheduledAt","rescheduleDelayMinutes","maxRescheduleCount","maxTotalTokens","rescheduleAtTokenCount"]);for(const t of e)s.append("files",t);return s}function T(n){Object.assign(n.prototype,{async getActiveSessions(){return this._get("/sessions")},async getScheduledSessions(e=null){return this._get(this._buildQueryPath("/sessions/scheduled",{projectId:e||void 0}))},async getProjectSessions(e,s=null,t=null,{limit:r=null,offset:a=0}={}){const o={};return s!==null&&(o.archived=s),t==="starred"?o.starred=!0:t==="unstarred"&&(o.starred=!1),r!==null&&(o.limit=r,o.offset=a),this._get(this._buildQueryPath(`/projects/${e}/sessions`,o))},async createSession(e,s){const{files:t,...r}=s;if(t&&t.length>0){const a=P(r,t);return this._uploadFormData(`/projects/${e}/sessions`,a)}return this._post(`/projects/${e}/sessions`,r)},async getSession(e){return this._get(`/sessions/${e}`)},async getSessionMessages(e){return this._get(`/sessions/${e}/messages`)},async getSessionWorkLogs(e){return this._get(`/sessions/${e}/work-logs`)},async sendMessage(e,s,t=[],r=null){if(console.log(`[MODEL AUDIT - ApiClient] sendMessage called with model: "${r}"`),t&&t.length>0){const a=new FormData;a.append("content",s),r&&a.append("model",r);for(const o of t)a.append("files",o);return this._uploadFormData(`/sessions/${e}/message`,a)}return this._post(`/sessions/${e}/message`,{content:s,model:r})},async stopSession(e){return this._post(`/sessions/${e}/stop`)},async getSessionChanges(e,s="local",t=null){const r={};return s==="branch"&&(r.compareMode="branch",t&&(r.branch=t)),this._get(this._buildQueryPath(`/sessions/${e}/changes`,r))},async getSessionDefaultBranch(e){return this._get(`/sessions/${e}/default-branch`)},async getSessionFilesCount(e){return this._get(`/sessions/${e}/files-count`)},async getSessionFile(e,s){return this._get(`/sessions/${e}/file?path=${encodeURIComponent(s)}`)},async restartSession(e){return this._post(`/sessions/${e}/restart`)},async startSession(e,s,t,r){const a={};return s!==void 0&&(a.prompt=s),t!==void 0&&(a.model=t),r!==void 0&&(a.providerId=r),this._post(`/sessions/${e}/start`,Object.keys(a).length>0?a:void 0)},async updateSessionInitialPrompt(e,s){return this._put(`/sessions/${e}/initial-prompt`,{prompt:s})},async updateSession(e,s){return this._patch(`/sessions/${e}`,s)},async updateSessionPendingPrompt(e,s){return this._patch(`/sessions/${e}/pending-prompt`,{pendingPrompt:s})},async deleteSession(e){return this._delete(`/sessions/${e}`)},async archiveSession(e,{cleanup:s=!1}={}){return this._post(`/sessions/${e}/archive`,{cleanup:s})},async unarchiveSession(e){return this._post(`/sessions/${e}/unarchive`)},async toggleSessionStar(e){return this._post(`/sessions/${e}/star`)},async duplicateSession(e,s={}){return this._post(`/sessions/${e}/duplicate`,s)},async scheduleSession(e,s){return this._post(`/sessions/${e}/schedule`,s)}})}function w(n){Object.assign(n.prototype,{async getCanvasItems(e){return this._get(`/sessions/${e}/canvas`)},async getCanvasFileContent(e,s){return this._get(`/sessions/${e}/canvas/file/${encodeURIComponent(s)}/content`)},async getCanvasItemContent(e,s){return this._get(`/sessions/${e}/canvas/${s}/content`)},async getAllCanvasItems(e){return this._get(`/sessions/${e}/canvas/all`)},async uploadCanvasItem(e,s){const t=new FormData;return t.append("file",s),this._uploadFormData(`/sessions/${e}/canvas`,t)},async createCanvasItem(e,s){return this._post(`/sessions/${e}/canvas`,s)},async updateCanvasItem(e,s,t){return this._put(`/sessions/${e}/canvas/${s}`,t)},async deleteCanvasItem(e,s){return this._delete(`/sessions/${e}/canvas/${s}`)},async getCanvasTrash(e){return this._get(`/sessions/${e}/canvas-trash`)},async recoverCanvasItem(e,s){return this._post(`/sessions/${e}/canvas/${s}/recover`)},async recoverCanvasFile(e,s){return this._post(`/sessions/${e}/canvas-trash/recover-file/${encodeURIComponent(s)}`)},async permanentlyDeleteCanvasItem(e,s){return this._delete(`/sessions/${e}/canvas/${s}/permanent`)},async bulkDeleteCanvasItems(e,s){return this._post(`/sessions/${e}/canvas/bulk-delete`,{itemIds:s})},async bulkRecoverCanvasItems(e,s){return this._post(`/sessions/${e}/canvas/bulk-recover`,{itemIds:s})},async bulkPermanentlyDeleteCanvasItems(e,s){return this._delete(`/sessions/${e}/canvas/bulk-delete-permanent`,{itemIds:s})}})}function A(n){Object.assign(n.prototype,{async getProviders(){return this._get("/providers")},async getProvider(e){return this._get(`/providers/${e}`)},async createProvider(e){return this._post("/providers",e)},async updateProvider(e,s){return this._patch(`/providers/${e}`,s)},async deleteProvider(e){return this._delete(`/providers/${e}`)},async testProviderConnection(e){return this._post("/providers/test",e)},async testExistingProvider(e){return this._post(`/providers/${e}/test`)},async getProviderModels(e){return this._get(`/providers/${e}/models`)},async addProviderModel(e,s){return this._post(`/providers/${e}/models`,s)},async updateProviderModel(e,s,t){return this._patch(`/providers/${e}/models/${s}`,t)},async removeProviderModel(e,s){return this._delete(`/providers/${e}/models/${s}`)}})}function R(n){Object.assign(n.prototype,{async getAgents(){return this._get("/agents")}})}function I(n){Object.assign(n.prototype,{async getCommandButtons(e){return this._get(`/projects/${e}/command-buttons`)},async createCommandButton(e,s){return this._post(`/projects/${e}/command-buttons`,s)},async getCommandButton(e,s){return this._get(`/projects/${e}/command-buttons/${s}`)},async updateCommandButton(e,s,t){return this._patch(`/projects/${e}/command-buttons/${s}`,t)},async deleteCommandButton(e,s){return this._delete(`/projects/${e}/command-buttons/${s}`)},async runCommandButton(e,s){return this._post(`/sessions/${e}/command-buttons/${s}/run`)},async getActiveRuns(e){return this._get(`/sessions/${e}/command-buttons/runs`)},async getCommandRun(e,s){return this._get(`/sessions/${e}/command-buttons/runs/${s}`)},async getLatestRunsForProject(e){return this._get(`/projects/${e}/command-buttons/latest-runs`)},async killCommandRun(e,s){return this._post(`/sessions/${e}/command-buttons/runs/${s}/kill`)},async deleteCommandRun(e,s){return this._delete(`/sessions/${e}/command-buttons/runs/${s}`)},async deleteAllRunsForButton(e,s){return this._delete(`/sessions/${e}/command-buttons/${s}/runs/all`)}})}function O(n){Object.assign(n.prototype,{async getTokenCostWeights(){return this._get("/settings/token-weights")},async updateTokenCostWeights(e){return this._put("/settings/token-weights",e)},async resetTokenCostWeights(){return this._delete("/settings/token-weights")},async getSummarySettings(){return this._get("/settings/summary")},async updateSummarySettings(e){return this._put("/settings/summary",e)},async resetSummarySettings(){return this._delete("/settings/summary")},async getGeneralSettings(){return this._get("/settings/general")},async updateGeneralSettings(e){return this._put("/settings/general",e)},async resetGeneralSettings(){return this._delete("/settings/general")}})}function D(n){Object.assign(n.prototype,{async getConversations(e){return this._get(`/sessions/${e}/conversations`)},async createConversation(e,s=null){return this._post(`/sessions/${e}/conversations`,{name:s})},async getConversation(e,s){return this._get(`/sessions/${e}/conversations/${s}`)},async updateConversation(e,s,t){return this._patch(`/sessions/${e}/conversations/${s}`,t)},async deleteConversation(e,s){return this._delete(`/sessions/${e}/conversations/${s}`)},async branchConversation(e,s,t){return this._post(`/sessions/${e}/conversations/${s}/branch`,t)},async getConversationMessages(e,s){return this._get(`/sessions/${e}/messages?conversation_id=${s}`)}})}function F(n){Object.assign(n.prototype,{async getGlobalTemplates(){return this._get("/templates")},async createGlobalTemplate(e){return this._post("/templates",e)},async getTemplate(e){return this._get(`/templates/${e}`)},async updateTemplate(e,s){return this._patch(`/templates/${e}`,s)},async deleteTemplate(e){return this._delete(`/templates/${e}`)},async getProjectTemplates(e){return this._get(`/projects/${e}/templates`)},async createProjectTemplate(e,s){return this._post(`/projects/${e}/templates`,s)}})}function Q(n){Object.assign(n.prototype,{async getQuickResponses(e){return this._get(`/projects/${e}/quick-responses`)},async getGlobalQuickResponses(){return this._get("/quick-responses/global")},async createQuickResponse(e,s){return this._post(`/projects/${e}/quick-responses`,s)},async updateQuickResponse(e,s){return this._patch(`/quick-responses/${e}`,s)},async deleteQuickResponse(e){return this._delete(`/quick-responses/${e}`)},async reorderQuickResponses(e,s){return this._post(`/projects/${e}/quick-responses/reorder`,s)},async reorderGlobalQuickResponses(e){return this._post("/quick-responses/global/reorder",e)}})}function B(n){Object.assign(n.prototype,{async getGitStatus(e){return this._get(`/git/projects/${e}/status`)},async getWorktrees(e){return this._get(`/git/projects/${e}/worktrees`)},async detectWorktreePath(e){return this._get(this._buildQueryPath("/git/detect-worktree-path",{directory:e}))},async getSessionTodos(e,s=null){return this._get(this._buildQueryPath(`/sessions/${e}/todos`,{conversation_id:s||void 0}))},async getSessionSummary(e,s=!1){const t=s?this._buildQueryPath(`/sessions/${e}/summary`,{generate:"true"}):`/sessions/${e}/summary`;try{return await this._get(t)}catch(r){if(r.message.includes("404")||r.message.includes("not found"))return null;throw r}},async getSessionSummariesBatch(e){return!e||e.length===0?{}:this._post("/sessions/summaries/batch",{ids:e})},async generateSessionSummary(e){return this._post(`/sessions/${e}/summary`)},async getWorkflowLatestResponse(e){try{return await this._get(`/sessions/${e}/workflow-latest-response`)}catch(s){if(s.message.includes("404"))return null;throw s}},async getSessionNotes(e){return this._get(`/sessions/${e}/notes`)},async createNote(e,s){return this._post(`/sessions/${e}/notes`,{content:s})},async updateNote(e,s,t){return this._put(`/sessions/${e}/notes/${s}`,{content:t})},async deleteNote(e,s){return this._delete(`/sessions/${e}/notes/${s}`)},async browseDirectory(e=""){return this._get(this._buildQueryPath("/filesystem/browse",{path:e||void 0}))},async getSlashCommands(e){return this._get(`/commands?directory=${encodeURIComponent(e)}`)},async getSlashCommand(e,s){return this._get(`/commands/${encodeURIComponent(s)}?directory=${encodeURIComponent(e)}`)},async executeSlashCommand(e,s,t={}){return this._post(`/commands/${encodeURIComponent(s)}/execute`,{sessionId:e,args:t})},async getAgentCallLogs({limit:e,offset:s,agentType:t,callType:r,status:a,startDate:o,endDate:m,sessionId:_,model:$,sortBy:f,sortOrder:v}={}){const c={};return e!=null&&(c.limit=e),s!=null&&(c.offset=s),t&&(c.agentType=t),r&&(c.callType=r),a&&(c.status=a),o&&(c.startDate=o),m&&(c.endDate=m),_&&(c.sessionId=_),$&&(c.model=$),f&&(c.sortBy=f),v&&(c.sortOrder=v),this._get(this._buildQueryPath("/agent-calls",c))},async getAgentCallFilterOptions(){return this._get("/agent-calls/filter-options")},async deleteAllAgentCallLogs(){return this._delete("/agent-calls")},async getProjectSessionDefaults(e){return this._get(`/projects/${e}/session-defaults`)},async updateProjectSessionDefaults(e,s){return this._post(`/projects/${e}/session-defaults`,s)},async resetProjectSessionDefaults(e){return this._delete(`/projects/${e}/session-defaults`)}})}function L(n){Object.assign(n.prototype,{async getKanbanBoard(e){return this._get(`/projects/${e}/kanban`)},async deleteKanbanBoard(e){return this._delete(`/projects/${e}/kanban`)},async createKanbanLane(e,s){return this._post(`/projects/${e}/kanban/lanes`,s)},async updateKanbanLane(e,s,t){return this._patch(`/projects/${e}/kanban/lanes/${s}`,t)},async deleteKanbanLane(e,s){return this._delete(`/projects/${e}/kanban/lanes/${s}`)},async reorderKanbanLanes(e,s){return this._put(`/projects/${e}/kanban/lanes/reorder`,s)},async createKanbanCard(e,s){return this._post(`/projects/${e}/kanban/cards`,s)},async moveKanbanCard(e,s,t){return this._patch(`/projects/${e}/kanban/cards/${s}/move`,t)},async deleteKanbanCard(e,s){return this._delete(`/projects/${e}/kanban/cards/${s}`)},async reorderKanbanCards(e,s,t){return this._put(`/projects/${e}/kanban/lanes/${s}/cards/reorder`,t)}})}var p,u,d;class i{constructor(e="/api"){y(this,u);y(this,p);C(this,p,e)}get baseUrl(){return h(this,p)}async _uploadFormData(e,s){const t=await fetch(`${h(this,p)}${e}`,{method:"POST",body:s});if(!t.ok){const r=await t.json().catch(()=>({}));throw new Error(r.message||r.error||`HTTP ${t.status}`)}return t.json()}_buildQueryPath(e,s){const t=new URLSearchParams;for(const[a,o]of Object.entries(s))o!=null&&t.append(a,o);const r=t.toString();return r?`${e}?${r}`:e}_get(e){return l(this,u,d).call(this,"GET",e)}_post(e,s){return l(this,u,d).call(this,"POST",e,s)}_put(e,s){return l(this,u,d).call(this,"PUT",e,s)}_patch(e,s){return l(this,u,d).call(this,"PATCH",e,s)}_delete(e,s){return l(this,u,d).call(this,"DELETE",e,s)}}p=new WeakMap,u=new WeakSet,d=async function(e,s,t=null){const r={method:e,headers:{"Content-Type":"application/json"}};t&&e!=="GET"&&(r.body=JSON.stringify(t));const a=await fetch(`${h(this,p)}${s}`,r);if(!a.ok){const o=await a.json().catch(()=>({}));throw new Error(o.message||o.error||`HTTP ${a.status}`)}return a.status===204?null:a.json()};S(i);T(i);w(i);A(i);R(i);I(i);O(i);D(i);F(i);Q(i);B(i);L(i);const E=new i;export{E as a};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.template-selector[data-v-77a4f989]{padding:1rem;background:var(--color-bg-soft);border-radius:.5rem;margin-bottom:1rem}.selector-label[data-v-77a4f989]{display:block;font-weight:500;font-size:.875rem;margin-bottom:.5rem;color:var(--color-text)}.selector-wrapper[data-v-77a4f989]{display:flex;gap:.5rem;align-items:center}.selector-wrapper .form-input[data-v-77a4f989]{flex:1}.btn-clear[data-v-77a4f989]{background:none;border:1px solid var(--color-border);border-radius:4px;padding:.5rem .75rem;cursor:pointer;color:var(--color-text-soft);font-size:.875rem;transition:all .15s}.btn-clear[data-v-77a4f989]:hover:not(:disabled){background:var(--color-bg-hover);color:var(--color-error);border-color:var(--color-error)}.btn-clear[data-v-77a4f989]:disabled{opacity:.5;cursor:not-allowed}.template-preview[data-v-77a4f989]{margin-top:.75rem;padding:.75rem;background:var(--color-background);border-radius:.375rem;border:1px solid var(--color-border)}.template-prompt-preview[data-v-77a4f989]{margin:0;font-size:.8rem;color:var(--color-text-soft);line-height:1.4;font-style:italic}.chain-indicator[data-v-77a4f989]{display:inline-block;margin-top:.5rem;font-size:.75rem;padding:.2rem .5rem;background:var(--color-warning, #f0ad4e);color:#333;border-radius:4px}.selector-help[data-v-77a4f989]{margin:.5rem 0 0;font-size:.75rem;color:var(--color-text-soft)}.saving-indicator[data-v-77a4f989]{display:flex;align-items:center;gap:.5rem;margin-top:.5rem;font-size:.75rem;color:var(--color-text-soft)}@media (max-width: 480px){.template-selector[data-v-77a4f989]{padding:.75rem}.selector-wrapper[data-v-77a4f989]{flex-direction:column;align-items:stretch}.btn-clear[data-v-77a4f989]{align-self:flex-end}}.modal-backdrop[data-v-e1ffc2da]{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000b3;display:flex;align-items:center;justify-content:center;z-index:1000}.modal-content[data-v-e1ffc2da]{display:flex;flex-direction:column;background:var(--color-background-secondary, #1f2937);border-radius:.5rem;width:100%;max-width:500px;max-height:90vh;overflow:hidden;border:1px solid var(--color-border)}.modal-header[data-v-e1ffc2da]{flex-shrink:0;display:flex;justify-content:space-between;align-items:center;padding:1rem 1.5rem;border-bottom:1px solid var(--color-border)}.modal-title[data-v-e1ffc2da]{margin:0;font-size:1.25rem;font-weight:600;color:var(--color-text)}.close-btn[data-v-e1ffc2da]{background:none;border:none;font-size:1.5rem;color:var(--color-text-soft);cursor:pointer;padding:0;line-height:1}.close-btn[data-v-e1ffc2da]:hover{color:var(--color-text)}.modal-body[data-v-e1ffc2da]{flex:1;overflow-y:auto;min-height:0;padding:1.5rem}.form-section[data-v-e1ffc2da]{margin-bottom:1.5rem;padding-bottom:1.5rem;border-bottom:1px solid var(--color-border)}.form-section[data-v-e1ffc2da]:last-of-type{border-bottom:none}.section-title[data-v-e1ffc2da]{margin:0 0 1rem;font-size:1rem;font-weight:600;color:var(--color-text)}.error-message[data-v-e1ffc2da]{padding:.75rem;margin-bottom:1rem;background:#ef44441a;border:1px solid rgba(239,68,68,.3);border-radius:.25rem;color:#fca5a5;font-size:.9rem}.modal-footer[data-v-e1ffc2da]{flex-shrink:0;display:flex;justify-content:flex-end;gap:.75rem;padding:1rem 1.5rem;border-top:1px solid var(--color-border)}.form-group[data-v-e1ffc2da]{margin-bottom:1rem}.form-label[data-v-e1ffc2da]{display:block;margin-bottom:.5rem;font-weight:500;color:var(--color-text)}.form-input[data-v-e1ffc2da]{width:100%;padding:.5rem;border:1px solid var(--color-border);border-radius:.25rem;background:var(--color-background);color:var(--color-text);font-size:.95rem}.form-input[data-v-e1ffc2da]:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 2px #22c5ff1a}.form-help[data-v-e1ffc2da]{margin-top:.25rem;font-size:.875rem;color:var(--color-text-soft)}.toggle-switch[data-v-e1ffc2da]{display:flex;align-items:center;cursor:pointer;gap:.75rem}.toggle-switch input[data-v-e1ffc2da]{display:none}.toggle-slider[data-v-e1ffc2da]{position:relative;display:inline-block;width:2.5rem;height:1.25rem;background-color:var(--color-border);border-radius:1rem;transition:background-color .2s;flex-shrink:0}.toggle-slider[data-v-e1ffc2da]:after{content:"";position:absolute;width:1rem;height:1rem;border-radius:50%;background-color:#fff;top:.125rem;left:.125rem;transition:transform .2s}.toggle-switch input:checked+.toggle-slider[data-v-e1ffc2da]{background-color:var(--color-primary)}.toggle-switch input:checked+.toggle-slider[data-v-e1ffc2da]:after{transform:translate(1.25rem)}.toggle-label[data-v-e1ffc2da]{color:var(--color-text);font-weight:500}.reschedule-settings[data-v-e1ffc2da]{padding:1rem;margin-top:1rem;border-left:2px solid var(--color-primary);background:var(--color-background, rgba(255, 255, 255, .02));border-radius:0 .25rem .25rem 0}.settings-label[data-v-e1ffc2da]{margin-bottom:.75rem;font-weight:500;font-size:.95rem;color:var(--color-text)}.checkbox-option[data-v-e1ffc2da]{display:flex;align-items:center;gap:.75rem;margin-bottom:.75rem;cursor:pointer;color:var(--color-text)}.checkbox-option input[data-v-e1ffc2da]{width:1rem;height:1rem;cursor:pointer}.btn[data-v-e1ffc2da]{padding:.5rem 1rem;border-radius:.25rem;font-weight:500;cursor:pointer;border:none;font-size:.9rem;transition:opacity .2s,background-color .2s}.btn-primary[data-v-e1ffc2da]{background:var(--color-primary);color:#fff}.btn-primary[data-v-e1ffc2da]:hover:not(:disabled){opacity:.9}.btn-primary[data-v-e1ffc2da]:disabled{opacity:.5;cursor:not-allowed}.btn-secondary[data-v-e1ffc2da]{background:var(--color-background);border:1px solid var(--color-border);color:var(--color-text)}.btn-secondary[data-v-e1ffc2da]:hover{background:var(--color-background-secondary)}.modal-backdrop[data-v-bddc7788]{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000b3;display:flex;align-items:center;justify-content:center;z-index:1000}.modal-content[data-v-bddc7788]{background:var(--color-background-secondary, #1f2937);border-radius:.5rem;width:100%;max-width:500px;max-height:90vh;overflow:hidden;display:flex;flex-direction:column;border:1px solid var(--color-border)}.modal-header[data-v-bddc7788]{display:flex;justify-content:space-between;align-items:center;padding:1rem 1.5rem;border-bottom:1px solid var(--color-border)}.modal-title[data-v-bddc7788]{margin:0;font-size:1.25rem;font-weight:600;color:var(--color-text)}.close-btn[data-v-bddc7788]{background:none;border:none;font-size:1.5rem;color:var(--color-text-soft);cursor:pointer;padding:0;line-height:1}.close-btn[data-v-bddc7788]:hover{color:var(--color-text)}.modal-body[data-v-bddc7788]{padding:1.5rem;flex:1;overflow-y:auto}.modal-footer[data-v-bddc7788]{display:flex;justify-content:flex-end;gap:.75rem;padding:1rem 1.5rem;border-top:1px solid var(--color-border)}.moving-info[data-v-bddc7788]{margin-bottom:1.5rem;padding:.75rem;background:var(--color-bg-soft, rgba(255, 255, 255, .05));border-radius:.25rem}.moving-label[data-v-bddc7788]{display:block;font-size:.75rem;color:var(--color-text-soft);margin-bottom:.25rem}.moving-session-name[data-v-bddc7788]{display:block;font-size:.875rem;font-weight:500;color:var(--color-text)}.empty-state[data-v-bddc7788]{display:flex;align-items:center;justify-content:center;padding:2rem;color:var(--color-text-soft)}.lanes-list[data-v-bddc7788]{display:flex;flex-direction:column;gap:.5rem;margin-bottom:1rem}.lane-row[data-v-bddc7788]{border:1px solid var(--color-border);border-radius:.25rem;transition:background-color .15s,border-color .15s}.lane-row[data-v-bddc7788]:not(.lane-row-disabled):hover{background:var(--color-bg-soft);border-color:var(--color-primary)}.lane-row-current[data-v-bddc7788]{opacity:.6}.lane-label[data-v-bddc7788]{display:flex;align-items:center;padding:.75rem;cursor:pointer;gap:.75rem;width:100%}.lane-label input[type=radio][data-v-bddc7788]{flex-shrink:0;width:1rem;height:1rem;cursor:pointer}.lane-label input[type=radio][data-v-bddc7788]:disabled{cursor:not-allowed}.lane-info[data-v-bddc7788]{display:flex;align-items:center;gap:.5rem;flex:1}.lane-name[data-v-bddc7788]{font-size:.875rem;font-weight:500;color:var(--color-text)}.lane-current-badge[data-v-bddc7788]{font-size:.75rem;color:var(--color-text-soft);font-style:italic}.lane-automation-icon[data-v-bddc7788]{color:#f59e0b;flex-shrink:0;display:flex;align-items:center}.automation-option[data-v-bddc7788]{margin-top:1rem;padding-top:1rem;border-top:1px solid var(--color-border)}.checkbox-label[data-v-bddc7788]{display:flex;align-items:center;gap:.5rem;cursor:pointer;font-size:.875rem;color:var(--color-text)}.checkbox-label input[type=checkbox][data-v-bddc7788]{width:1rem;height:1rem;cursor:pointer}.btn[data-v-bddc7788]{padding:.5rem 1rem;border-radius:.25rem;font-weight:500;cursor:pointer;border:none;font-size:.9rem;transition:opacity .2s,background-color .2s}.btn-primary[data-v-bddc7788]{background:var(--color-primary);color:#fff}.btn-primary[data-v-bddc7788]:hover:not(:disabled){opacity:.9}.btn-primary[data-v-bddc7788]:disabled{opacity:.5;cursor:not-allowed}.btn-secondary[data-v-bddc7788]{background:var(--color-background);border:1px solid var(--color-border);color:var(--color-text)}.btn-secondary[data-v-bddc7788]:hover{background:var(--color-background-secondary)}.btn-danger[data-v-bddc7788]{background:#ef4444;color:#fff}.btn-danger[data-v-bddc7788]:hover:not(:disabled){background:#dc2626}.btn-danger[data-v-bddc7788]:disabled{opacity:.5;cursor:not-allowed}.modal-backdrop[data-v-140e797f]{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000b3;display:flex;align-items:center;justify-content:center;z-index:1000}.modal-content[data-v-140e797f]{background:var(--color-background-secondary, #1f2937);border-radius:.5rem;width:100%;max-width:450px;overflow:hidden;display:flex;flex-direction:column;border:1px solid var(--color-border)}.modal-header[data-v-140e797f]{display:flex;justify-content:space-between;align-items:center;padding:1rem 1.5rem;border-bottom:1px solid var(--color-border)}.modal-title[data-v-140e797f]{margin:0;font-size:1.25rem;font-weight:600;color:var(--color-text)}.close-btn[data-v-140e797f]{background:none;border:none;font-size:1.5rem;color:var(--color-text-soft);cursor:pointer;padding:0;line-height:1}.close-btn[data-v-140e797f]:hover{color:var(--color-text)}.modal-body[data-v-140e797f]{padding:1.5rem}.confirm-message[data-v-140e797f]{margin:0;font-size:.9rem;color:var(--color-text);line-height:1.5}.cleanup-option[data-v-140e797f]{margin-top:1rem;padding-top:1rem;border-top:1px solid var(--color-border)}.checkbox-label[data-v-140e797f]{display:flex;align-items:center;gap:.5rem;cursor:pointer;font-size:.875rem;color:var(--color-text)}.checkbox-label input[type=checkbox][data-v-140e797f]{width:1rem;height:1rem;cursor:pointer}.modal-footer[data-v-140e797f]{display:flex;justify-content:flex-end;gap:.75rem;padding:1rem 1.5rem;border-top:1px solid var(--color-border)}.btn[data-v-140e797f]{padding:.5rem 1rem;border-radius:.25rem;font-weight:500;cursor:pointer;border:none;font-size:.9rem;transition:opacity .2s,background-color .2s}.btn-primary[data-v-140e797f]{background:var(--color-primary);color:#fff}.btn-primary[data-v-140e797f]:hover{opacity:.9}.btn-secondary[data-v-140e797f]{background:var(--color-background);border:1px solid var(--color-border);color:var(--color-text)}.btn-secondary[data-v-140e797f]:hover{background:var(--color-background-secondary)}.btn[data-v-140e797f]:disabled{opacity:.5;cursor:not-allowed}.close-btn[data-v-140e797f]:disabled{opacity:.5;cursor:not-allowed}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{_ as L,n as I,l as O,o as N,a,c as d,b as t,m as T,p as q,F as j,r as D,t as C,i as f,f as B,x,Z as K,k as P,G as z,d as V,q as w,v as A,j as F,U as G,y as W,A as H,E as Y,H as Z}from"./index-B6G18FqB.js";import{u as J,b as Q}from"./EffortLevelSelector-C2378L8e.js";import{M as X}from"./ModelSelector-BMpR0DPr.js";import{M as ee}from"./SlashCommandWizard-DmTyNG9O.js";import{u as te}from"./SessionLogStream-DpUE6Xsh.js";const se={class:"template-selector"},le={class:"selector-wrapper"},ne=["disabled"],oe={key:0,label:"Project Templates"},ae=["value"],de={key:1,label:"Global Templates"},ie=["value"],ue=["disabled"],re={key:0,class:"template-preview"},ce={class:"template-prompt-preview"},me={key:0,class:"chain-indicator"},pe={key:1,class:"selector-help"},ve={key:2,class:"saving-indicator"},be={__name:"TemplateSelector",props:{sessionId:{type:String,required:!1,default:null},projectId:{type:String,required:!0},currentTemplateId:{type:String,default:null},disabled:{type:Boolean,default:!1}},emits:["update:templateId"],setup(o,{emit:M}){const n=o,k=M,p=J(),v=I(n.currentTemplateId),u=I(!1),h=x(()=>p.loading),s=x(()=>p.projectTemplates),g=x(()=>p.globalTemplates),c=x(()=>v.value?p.getTemplateById(v.value):null),$=x(()=>{var S;if(!((S=c.value)!=null&&S.nextTemplateId))return null;const e=[];let i=c.value.nextTemplateId;const m=new Set;for(;i&&!m.has(i);){m.add(i);const l=p.getTemplateById(i);if(l)e.push(l.name),i=l.nextTemplateId;else{e.push("Unknown");break}if(e.length>=3){e.push("...");break}}return e.length>0?`Chains to: ${e.join(" → ")}`:null}),R=K(n,"currentTemplateId");O(R,e=>{v.value=e},{flush:"sync"}),N(()=>{n.projectId&&p.projectTemplates.length===0&&p.globalTemplates.length===0&&p.fetchProjectTemplates(n.projectId)});function _(e,i=100){return e?e.length<=i?e:`${e.substring(0,i)}...`:""}function E(e){var S;const i=((S=e==null?void 0:e.target)==null?void 0:S.value)||v.value,m=i===""?null:i;u.value=!0,k("update:templateId",m),setTimeout(()=>{u.value=!1},1e3)}function r(){v.value=null,E()}return(e,i)=>(a(),d("div",se,[i[3]||(i[3]=t("label",{class:"selector-label"},"Next Template",-1)),t("div",le,[T(t("select",{"onUpdate:modelValue":i[0]||(i[0]=m=>v.value=m),class:"form-input",disabled:o.disabled||h.value,onChange:E},[i[1]||(i[1]=t("option",{value:null}," Select a template to run... ",-1)),s.value.length?(a(),d("optgroup",oe,[(a(!0),d(j,null,D(s.value,m=>(a(),d("option",{key:m.id,value:m.id},C(m.name),9,ae))),128))])):f("",!0),g.value.length?(a(),d("optgroup",de,[(a(!0),d(j,null,D(g.value,m=>(a(),d("option",{key:m.id,value:m.id},C(m.name),9,ie))),128))])):f("",!0)],40,ne),[[q,v.value]]),v.value?(a(),d("button",{key:0,class:"btn-clear",title:"Clear selection",disabled:o.disabled||u.value,onClick:r}," ✕ ",8,ue)):f("",!0)]),c.value?(a(),d("div",re,[t("p",ce,C(_(c.value.prompt)),1),$.value?(a(),d("span",me,C($.value),1)):f("",!0)])):(a(),d("p",pe," When the agent finishes responding, a new session will automatically start using this template. ")),u.value?(a(),d("div",ve,[...i[2]||(i[2]=[t("span",{class:"loading-spinner"},null,-1),B(" Saving... ",-1)])])):f("",!0)]))}},he=L(be,[["__scopeId","data-v-77a4f989"]]),fe={class:"modal-content"},ge={class:"modal-header"},ke={class:"modal-title"},ye={class:"modal-body"},Te={key:0,class:"error-message"},Ce={class:"form-section"},Se={class:"form-group"},$e={class:"form-group"},xe={class:"form-group"},Ie={class:"toggle-switch"},Me={key:1,class:"form-group"},Ee=["min"],we={key:2,class:"form-section"},Re={class:"form-group"},_e={class:"toggle-switch"},Oe={key:3,class:"reschedule-settings"},Ae={class:"form-group"},Le={class:"checkbox-option"},Ue={class:"checkbox-option"},Ve={class:"form-group"},je={class:"form-group"},De={class:"form-group"},Be={class:"form-group"},Ne={key:0,class:"form-group"},Fe={class:"checkbox-option"},qe={class:"form-help"},Pe={class:"modal-footer"},ze=["disabled"],Ge={__name:"SchedulingEditModal",props:{isOpen:{type:Boolean,default:!1},session:{type:Object,default:null}},emits:["close","saved"],setup(o,{emit:M}){const n=o,k=M,p=Q(),v=P(),u=I(!1),h=I(null),s=W({scheduledAtLocal:"",model:null,mode:"standard",thinkingEnabled:!1,nextTemplateId:null,autoRescheduleEnabled:!1,rescheduleDelayMinutes:15,rescheduleOnTokenLimit:!0,rescheduleOnServiceError:!0,maxRescheduleCount:null,maxTotalTokens:null,rescheduleAtTokenCount:null,resetRescheduleCount:!1}),g=x(()=>{const r=new Date;return r.setMinutes(r.getMinutes()+1),r.toISOString().slice(0,16)}),c=x(()=>{var r;return((r=n.session)==null?void 0:r.status)==="scheduled"?"Edit Scheduling Settings":"Auto-Reschedule Settings"});function $(){k("close")}function R(r){s.nextTemplateId=r}function _(r){if(!r)return"";const e=new Date(r),i=e.getFullYear(),m=String(e.getMonth()+1).padStart(2,"0"),S=String(e.getDate()).padStart(2,"0"),l=String(e.getHours()).padStart(2,"0"),b=String(e.getMinutes()).padStart(2,"0");return`${i}-${m}-${S}T${l}:${b}`}async function E(){var r;u.value=!0,h.value=null;try{const e={model:s.model,mode:s.mode,thinkingEnabled:s.thinkingEnabled,nextTemplateId:s.nextTemplateId,autoRescheduleEnabled:s.autoRescheduleEnabled,rescheduleDelayMinutes:s.rescheduleDelayMinutes,rescheduleOnTokenLimit:s.rescheduleOnTokenLimit,rescheduleOnServiceError:s.rescheduleOnServiceError,maxRescheduleCount:s.maxRescheduleCount||null,maxTotalTokens:s.maxTotalTokens||null,rescheduleAtTokenCount:s.rescheduleAtTokenCount||null};((r=n.session)==null?void 0:r.status)==="scheduled"&&s.scheduledAtLocal&&(e.scheduledAt=new Date(s.scheduledAtLocal).getTime()),s.resetRescheduleCount&&(e.rescheduleCount=0),await p.updateSessionFields(n.session.id,e),v.success("Settings saved"),k("saved"),$()}catch(e){h.value=e.message||"Failed to save settings",v.error(`Failed to save settings: ${h.value}`)}finally{u.value=!1}}return O(()=>n.isOpen,r=>{r&&n.session&&(h.value=null,s.scheduledAtLocal=_(n.session.scheduledAt),s.model=n.session.model||null,s.mode=n.session.mode||"standard",s.thinkingEnabled=n.session.thinkingEnabled||!1,s.nextTemplateId=n.session.nextTemplateId||null,s.autoRescheduleEnabled=n.session.autoRescheduleEnabled||!1,s.rescheduleDelayMinutes=n.session.rescheduleDelayMinutes||15,s.rescheduleOnTokenLimit=n.session.rescheduleOnTokenLimit??!0,s.rescheduleOnServiceError=n.session.rescheduleOnServiceError??!0,s.maxRescheduleCount=n.session.maxRescheduleCount,s.maxTotalTokens=n.session.maxTotalTokens,s.rescheduleAtTokenCount=n.session.rescheduleAtTokenCount,s.resetRescheduleCount=!1)}),(r,e)=>{var i,m,S;return a(),z(G,{to:"body"},[o.isOpen?(a(),d("div",{key:0,class:"modal-backdrop",onClick:F($,["self"])},[t("div",fe,[t("div",ge,[t("h2",ke,C(c.value),1),t("button",{class:"close-btn","aria-label":"Close",onClick:$}," × ")]),t("div",ye,[h.value?(a(),d("div",Te,C(h.value),1)):f("",!0),t("div",Ce,[e[16]||(e[16]=t("h3",{class:"section-title"}," Session Settings ",-1)),t("div",Se,[e[12]||(e[12]=t("label",{class:"form-label"},"Model",-1)),V(X,{modelValue:s.model,"onUpdate:modelValue":e[0]||(e[0]=l=>s.model=l)},null,8,["modelValue"])]),t("div",$e,[e[13]||(e[13]=t("label",{class:"form-label"},"Mode",-1)),V(ee,{modelValue:s.mode,"onUpdate:modelValue":e[1]||(e[1]=l=>s.mode=l)},null,8,["modelValue"])]),t("div",xe,[t("label",Ie,[T(t("input",{"onUpdate:modelValue":e[2]||(e[2]=l=>s.thinkingEnabled=l),type:"checkbox"},null,512),[[w,s.thinkingEnabled]]),e[14]||(e[14]=t("span",{class:"toggle-slider"},null,-1)),e[15]||(e[15]=t("span",{class:"toggle-label"},"Extended Thinking",-1))])])]),((i=o.session)==null?void 0:i.status)==="scheduled"?(a(),d("div",Me,[e[17]||(e[17]=t("label",{for:"scheduled-at",class:"form-label"},"Scheduled Time",-1)),T(t("input",{id:"scheduled-at","onUpdate:modelValue":e[3]||(e[3]=l=>s.scheduledAtLocal=l),type:"datetime-local",min:g.value,class:"form-input"},null,8,Ee),[[A,s.scheduledAtLocal]])])):f("",!0),((m=o.session)==null?void 0:m.status)==="scheduled"?(a(),d("div",we,[e[18]||(e[18]=t("h3",{class:"section-title"}," Template Chain ",-1)),V(he,{"session-id":o.session.id,"project-id":o.session.projectId,"current-template-id":s.nextTemplateId,disabled:u.value,"onUpdate:templateId":R},null,8,["session-id","project-id","current-template-id","disabled"])])):f("",!0),t("div",Re,[t("label",_e,[T(t("input",{"onUpdate:modelValue":e[4]||(e[4]=l=>s.autoRescheduleEnabled=l),type:"checkbox"},null,512),[[w,s.autoRescheduleEnabled]]),e[19]||(e[19]=t("span",{class:"toggle-slider"},null,-1)),e[20]||(e[20]=t("span",{class:"toggle-label"},"Auto-reschedule on errors",-1))])]),s.autoRescheduleEnabled?(a(),d("div",Oe,[t("div",Ae,[e[23]||(e[23]=t("p",{class:"settings-label"}," Reschedule Triggers ",-1)),t("label",Le,[T(t("input",{"onUpdate:modelValue":e[5]||(e[5]=l=>s.rescheduleOnTokenLimit=l),type:"checkbox"},null,512),[[w,s.rescheduleOnTokenLimit]]),e[21]||(e[21]=t("span",null,"Token limit errors",-1))]),t("label",Ue,[T(t("input",{"onUpdate:modelValue":e[6]||(e[6]=l=>s.rescheduleOnServiceError=l),type:"checkbox"},null,512),[[w,s.rescheduleOnServiceError]]),e[22]||(e[22]=t("span",null,"Service unavailability",-1))])]),t("div",Ve,[e[25]||(e[25]=t("label",{class:"form-label"},"Reschedule Delay",-1)),T(t("select",{"onUpdate:modelValue":e[7]||(e[7]=l=>s.rescheduleDelayMinutes=l),class:"form-input"},[...e[24]||(e[24]=[t("option",{value:5}," 5 minutes ",-1),t("option",{value:15}," 15 minutes ",-1),t("option",{value:30}," 30 minutes ",-1),t("option",{value:60}," 1 hour ",-1),t("option",{value:120}," 2 hours ",-1)])],512),[[q,s.rescheduleDelayMinutes,void 0,{number:!0}]])]),t("div",je,[e[26]||(e[26]=t("label",{class:"form-label"},"Max Reschedule Count",-1)),T(t("input",{"onUpdate:modelValue":e[8]||(e[8]=l=>s.maxRescheduleCount=l),type:"number",min:"1",max:"100",class:"form-input",placeholder:"Unlimited"},null,512),[[A,s.maxRescheduleCount,void 0,{number:!0}]])]),t("div",De,[e[27]||(e[27]=t("label",{class:"form-label"},"Max Total Tokens",-1)),T(t("input",{"onUpdate:modelValue":e[9]||(e[9]=l=>s.maxTotalTokens=l),type:"number",min:"1000",step:"1000",class:"form-input",placeholder:"Unlimited"},null,512),[[A,s.maxTotalTokens,void 0,{number:!0}]])]),t("div",Be,[e[28]||(e[28]=t("label",{class:"form-label"},"Reschedule At Token Count",-1)),T(t("input",{"onUpdate:modelValue":e[10]||(e[10]=l=>s.rescheduleAtTokenCount=l),type:"number",min:"10000",step:"10000",class:"form-input",placeholder:"None"},null,512),[[A,s.rescheduleAtTokenCount,void 0,{number:!0}]])]),((S=o.session)==null?void 0:S.rescheduleCount)>0?(a(),d("div",Ne,[t("label",Fe,[T(t("input",{"onUpdate:modelValue":e[11]||(e[11]=l=>s.resetRescheduleCount=l),type:"checkbox"},null,512),[[w,s.resetRescheduleCount]]),e[29]||(e[29]=t("span",null,"Reset reschedule count to 0",-1))]),t("p",qe," Current count: "+C(o.session.rescheduleCount),1)])):f("",!0)])):f("",!0)]),t("div",Pe,[t("button",{class:"btn btn-secondary",onClick:$}," Cancel "),t("button",{class:"btn btn-primary",disabled:u.value,onClick:E},C(u.value?"Updating...":"Update"),9,ze)])])])):f("",!0)])}}},Mt=L(Ge,[["__scopeId","data-v-e1ffc2da"]]),He={class:"modal-content",role:"dialog","aria-labelledby":"modal-title"},Ke={class:"modal-body"},We={class:"moving-info"},Ye={class:"moving-session-name"},Ze={key:0,class:"empty-state"},Je={key:1,class:"lanes-list"},Qe={class:"lane-label"},Xe=["name","value","disabled","aria-disabled","aria-label"],et={class:"lane-info"},tt={class:"lane-name"},st={key:0,class:"lane-current-badge"},lt={key:1,class:"lane-automation-icon",title:"Automation enabled"},nt={key:2,class:"automation-option"},ot={class:"checkbox-label"},at={class:"modal-footer"},dt=["disabled"],it=["disabled","aria-label"],ut=["disabled"],rt={__name:"MoveCardModal",props:{isOpen:Boolean,projectId:{type:String,required:!0},cardId:{type:String,required:!0},currentLaneId:{type:String,required:!0},sessionName:{type:String,default:""}},emits:["update:isOpen","close","moved"],setup(o,{emit:M}){const n=o,k=M,p=te(),v=P(),u=I(null),h=I(!0),s=I(!1),g=I(!1),c=x(()=>{var l;return((l=p.board)==null?void 0:l.lanes)||[]}),$=x(()=>n.sessionName?n.sessionName:n.cardId||"Unnamed session"),R=x(()=>u.value&&c.value.find(l=>l.id===u.value)||null),_=x(()=>R.value?r(R.value):!1),E=x(()=>u.value&&u.value!==n.currentLaneId);function r(l){return l?!!(l.onEnterTemplateId||l.onEnterPrompt):!1}function e(){k("update:isOpen",!1),k("close"),u.value=null,h.value=!0}async function i(){if(!(!E.value||!n.cardId)){s.value=!0;try{await p.moveCard(n.projectId,n.cardId,u.value,{runOnEnterTemplate:h.value}),v.success("Card moved successfully"),k("moved"),e()}catch(l){console.error("Failed to move card:",l),v.error(l.message||"Failed to move card")}finally{s.value=!1}}}async function m(){if(confirm("Remove this session from the board?")){g.value=!0;try{await p.removeCard(n.projectId,n.cardId),v.success("Session removed from board"),k("close")}catch(l){console.error("Failed to remove card:",l),v.error(l.message||"Failed to remove session")}finally{g.value=!1}}}O(u,(l,b)=>{if(l!==b){const y=c.value.find(U=>U.id===l);h.value=r(y)}}),O(()=>n.isOpen,l=>{l&&(u.value=null,h.value=!0)});function S(l){l.key==="Escape"&&n.isOpen&&e()}return N(()=>{document.addEventListener("keydown",S)}),H(()=>{document.removeEventListener("keydown",S)}),(l,b)=>o.isOpen?(a(),d("div",{key:0,class:"modal-backdrop",onClick:F(e,["self"])},[t("div",He,[t("div",{class:"modal-header"},[b[2]||(b[2]=t("h2",{id:"modal-title",class:"modal-title"}," Move to Lane ",-1)),t("button",{class:"close-btn","aria-label":"Close modal",onClick:e}," × ")]),t("div",Ke,[t("div",We,[b[3]||(b[3]=t("span",{class:"moving-label"},"Moving:",-1)),t("span",Ye,C($.value),1)]),c.value.length===0?(a(),d("div",Ze,[...b[4]||(b[4]=[t("p",null,"No lanes available",-1)])])):(a(),d("div",Je,[(a(!0),d(j,null,D(c.value,y=>(a(),d("div",{key:y.id,class:Y(["lane-row",{"lane-row-current":y.id===o.currentLaneId,"lane-row-disabled":y.id===o.currentLaneId}])},[t("label",Qe,[T(t("input",{"onUpdate:modelValue":b[0]||(b[0]=U=>u.value=U),type:"radio",name:`lane-${o.cardId}`,value:y.id,disabled:y.id===o.currentLaneId,"aria-disabled":y.id===o.currentLaneId,"aria-label":`Move to ${y.name}`},null,8,Xe),[[Z,u.value]]),t("span",et,[t("span",tt,C(y.name),1),y.id===o.currentLaneId?(a(),d("span",st,"(current)")):f("",!0),r(y)?(a(),d("span",lt,[...b[5]||(b[5]=[t("svg",{xmlns:"http://www.w3.org/2000/svg",width:"14",height:"14",viewBox:"0 0 24 24",fill:"currentColor"},[t("path",{d:"M13 10V3L4 14h7v7l9-11h-7z"})],-1)])])):f("",!0)])])],2))),128))])),_.value?(a(),d("div",nt,[t("label",ot,[T(t("input",{"onUpdate:modelValue":b[1]||(b[1]=y=>h.value=y),type:"checkbox","aria-label":"Run automation on entry"},null,512),[[w,h.value]]),b[6]||(b[6]=t("span",null,"Run automation on entry",-1))])])):f("",!0)]),t("div",at,[t("button",{class:"btn btn-secondary",disabled:g.value,onClick:e}," Cancel ",8,dt),t("button",{class:"btn btn-danger",disabled:g.value,"aria-label":`Remove ${$.value} from board`,onClick:m},C(g.value?"Removing...":"Remove from Board"),9,it),t("button",{class:"btn btn-primary",disabled:!E.value||s.value||g.value,"aria-label":"Move card to selected lane",onClick:i},C(s.value?"Moving...":"Move"),9,ut)])])])):f("",!0)}},Et=L(rt,[["__scopeId","data-v-bddc7788"]]),ct={class:"modal-content",role:"dialog","aria-labelledby":"archive-modal-title"},mt={class:"modal-header"},pt=["disabled"],vt={class:"modal-body"},bt={class:"confirm-message"},ht={key:0,class:"cleanup-option"},ft={class:"checkbox-label"},gt={class:"modal-footer"},kt=["disabled"],yt=["disabled"],Tt={__name:"ArchiveConfirmModal",props:{isOpen:{type:Boolean,default:!1},sessionName:{type:String,default:"this session"},hasCleanupScript:{type:Boolean,default:!1},loading:{type:Boolean,default:!1}},emits:["confirm","cancel"],setup(o,{emit:M}){const n=o,k=M,p=I(!0);O(()=>n.isOpen,g=>{g&&(p.value=!0)});function v(){k("confirm",p.value)}function u(){n.loading||k("cancel")}function h(){n.loading||k("cancel")}function s(g){g.key==="Escape"&&n.isOpen&&!n.loading&&k("cancel")}return N(()=>{document.addEventListener("keydown",s)}),H(()=>{document.removeEventListener("keydown",s)}),(g,c)=>(a(),z(G,{to:"body"},[o.isOpen?(a(),d("div",{key:0,class:"modal-backdrop",onClick:F(h,["self"])},[t("div",ct,[t("div",mt,[c[1]||(c[1]=t("h2",{id:"archive-modal-title",class:"modal-title"}," Archive Session ",-1)),t("button",{class:"close-btn","aria-label":"Close modal",disabled:o.loading,onClick:u}," × ",8,pt)]),t("div",vt,[t("p",bt,[c[2]||(c[2]=B(" Are you sure you want to archive ",-1)),t("strong",null,C(o.sessionName),1),c[3]||(c[3]=B("? ",-1))]),o.hasCleanupScript?(a(),d("div",ht,[t("label",ft,[T(t("input",{"onUpdate:modelValue":c[0]||(c[0]=$=>p.value=$),type:"checkbox","aria-label":"Run git worktree cleanup"},null,512),[[w,p.value]]),c[4]||(c[4]=t("span",null,"Run git worktree cleanup",-1))])])):f("",!0)]),t("div",gt,[t("button",{class:"btn btn-secondary",disabled:o.loading,onClick:u}," Cancel ",8,kt),t("button",{class:"btn btn-primary",disabled:o.loading,onClick:v},C(o.loading?"Archiving...":"Archive"),9,yt)])])])):f("",!0)]))}},wt=L(Tt,[["__scopeId","data-v-140e797f"]]);export{wt as A,Et as M,Mt as S,he as T};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{L as f,$ as g,_ as b,k as E,n as h,l as _,a as p,c as m,b as I,F as w,r as x,t as j,u as L,x as C,Z as O}from"./index-B6G18FqB.js";import{a as r}from"./ApiClient-B4YTtyY4.js";import{u as P}from"./sessions-DH1R-NhV.js";const k=["low","medium","high","max","auto"],Y=[{id:"claude-haiku-4-5-20251001",name:"Haiku 4.5",description:"Fast & lightweight"},{id:"claude-sonnet-4-6",name:"Sonnet 4.6",description:"Balanced"},{id:"claude-opus-4-6",name:"Opus 4.6",description:"Previous generation"},{id:"claude-opus-4-7",name:"Opus 4.7",description:"Most capable (default)"}],$="claude-opus-4-7",z=[{id:"gpt-5.5",name:"GPT-5.5",description:"Flagship coding and professional work",seedId:"openai-gpt-5-5"},{id:"gpt-5.4",name:"GPT-5.4",description:"High capability professional work",seedId:"openai-gpt-5-4"},{id:"gpt-5.4-mini",name:"GPT-5.4 mini",description:"Fast lower-cost coding and subagent work",seedId:"openai-gpt-5-4-mini"},{id:"gpt-5.3-codex",name:"GPT-5.3-Codex",description:"Coding-optimized agentic model",seedId:"openai-gpt-5-3-codex"}],F=f("todos",{state:()=>({items:[],loading:!1,error:null,expanded:!1,currentConversationId:null}),getters:{hasTodos:t=>t.items.length>0,pendingCount:t=>t.items.filter(e=>e.status==="pending").length,inProgressCount:t=>t.items.filter(e=>e.status==="in_progress").length,completedCount:t=>t.items.filter(e=>e.status==="completed").length},actions:{async fetchTodos(t,e=null){this.loading=!0,this.error=null,this.currentConversationId=e;try{this.items=await r.getSessionTodos(t,e)}catch(s){this.error=s.message}finally{this.loading=!1}},updateTodos(t,e=null){(e===null||this.currentConversationId===null||e===this.currentConversationId)&&(this.items=t)},clearTodos(){this.items=[],this.loading=!1,this.error=null,this.currentConversationId=null,this.expanded=!1},toggleExpanded(){this.expanded=!this.expanded},setExpanded(t){this.expanded=t}}}),D=Symbol("overlay-sessions-store"),V=Symbol("overlay-todos-store");function B(){return g(D,P())}function Z(){return g(V,F())}const q=f("templates",{state:()=>({projectTemplates:[],globalTemplates:[],loading:!1,error:null}),getters:{allTemplates:t=>[...t.projectTemplates,...t.globalTemplates],getTemplateById:t=>e=>t.projectTemplates.find(s=>s.id===e)||t.globalTemplates.find(s=>s.id===e)},actions:{async fetchProjectTemplates(t){this.loading=!0,this.error=null;try{const e=await r.getProjectTemplates(t);this.projectTemplates=e.project||[],this.globalTemplates=e.global||[]}catch(e){this.error=e.message}finally{this.loading=!1}},async createProjectTemplate(t,e){this.loading=!0,this.error=null;try{const s=await r.createProjectTemplate(t,e);return this.projectTemplates.unshift(s),s}catch(s){throw this.error=s.message,s}finally{this.loading=!1}},async createGlobalTemplate(t){this.loading=!0,this.error=null;try{const e=await r.createGlobalTemplate(t);return this.globalTemplates.unshift(e),e}catch(e){throw this.error=e.message,e}finally{this.loading=!1}},async updateTemplate(t,e){this.loading=!0,this.error=null;try{const s=await r.updateTemplate(t,e);let l=this.projectTemplates.findIndex(o=>o.id===t);return l!==-1?this.projectTemplates[l]=s:(l=this.globalTemplates.findIndex(o=>o.id===t),l!==-1&&(this.globalTemplates[l]=s)),s}catch(s){throw this.error=s.message,s}finally{this.loading=!1}},async deleteTemplate(t){this.loading=!0,this.error=null;try{await r.deleteTemplate(t),this.projectTemplates=this.projectTemplates.filter(e=>e.id!==t),this.globalTemplates=this.globalTemplates.filter(e=>e.id!==t)}catch(e){throw this.error=e.message,e}finally{this.loading=!1}}}}),G={class:"effort-selector"},R=["value","disabled"],A=["value"],M={__name:"EffortLevelSelector",props:{sessionId:{type:String,default:null},modelValue:{type:String,default:null},disabled:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(t,{emit:e}){const s=t,l=e,o=B(),T=E(),d=h(!1),y=["auto",...k.filter(a=>a!=="auto")].map(a=>({value:a,label:`${a.charAt(0).toUpperCase()+a.slice(1)} Effort`})),u=C(()=>{var a;return s.sessionId?((a=o.currentSession)==null?void 0:a.effortLevel)||"auto":s.modelValue||"auto"}),i=h(u.value),S=O(s,"modelValue");_([u,S],([a])=>{i.value=a||"auto"},{flush:"sync"});async function v(a){if(!d.value&&i.value!==a)if(i.value=a,s.sessionId){d.value=!0;try{await o.updateSessionFields(s.sessionId,{effortLevel:a==="auto"?null:a})}catch(c){i.value=u.value,T.error(c.message)}finally{d.value=!1}}else l("update:modelValue",a==="auto"?null:a)}return(a,c)=>(p(),m("div",G,[I("select",{id:"effort-select",value:i.value,disabled:t.disabled||d.value,class:"effort-select","aria-label":"Effort level",onChange:c[0]||(c[0]=n=>v(n.target.value))},[(p(!0),m(w,null,x(L(y),n=>(p(),m("option",{key:n.value,value:n.value},j(n.label),9,A))),128))],40,R)]))}},J=b(M,[["__scopeId","data-v-8bc1fe64"]]);export{Y as C,$ as D,J as E,z as O,D as S,V as T,F as a,B as b,Z as c,q as u};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{_ as N,n as r,l as $,a as s,c as o,b as t,m as D,v as j,j as F,t as w,f as h,i as f,F as k,r as S}from"./index-B6G18FqB.js";import{a as T}from"./ApiClient-B4YTtyY4.js";const E={class:"path-chooser"},I={class:"path-input-group"},L={class:"path-browser"},M={class:"browser-header"},U={class:"browser-path"},q={class:"browser-content"},z={key:1,class:"browser-loading"},A={key:2,class:"browser-error"},G=["onClick"],H={key:0,class:"browser-empty"},J={key:1,class:"browser-empty"},K={__name:"PathChooser",props:{modelValue:{type:String,default:""}},emits:["update:modelValue"],setup(g,{emit:C}){const y=g,_=C,l=r(y.modelValue);$(()=>y.modelValue,a=>{l.value=a});function V(){_("update:modelValue",l.value)}const v=r(!1),i=r(""),c=r(null),d=r([]),m=r(!1),u=r(null);async function B(){v.value=!0,await b(l.value||"")}function p(){v.value=!1}async function b(a){m.value=!0,u.value=null;try{const e=await T.browseDirectory(a);i.value=e.path,c.value=e.parent,d.value=e.entries,e.error&&(u.value=e.error)}catch(e){u.value=e.message||"Failed to browse directory"}finally{m.value=!1}}function P(){l.value=i.value,_("update:modelValue",i.value),p()}function x(a,e){return a==="/"?`/${e}`:`${a}/${e}`}return(a,e)=>(s(),o("div",E,[t("div",I,[D(t("input",{"onUpdate:modelValue":e[0]||(e[0]=n=>l.value=n),type:"text",class:"form-input",placeholder:"/path/to/project",onInput:V},null,544),[[j,l.value]]),t("button",{type:"button",class:"btn",onClick:B}," Browse ")]),v.value?(s(),o("div",{key:0,class:"path-browser-overlay",onClick:F(p,["self"])},[t("div",L,[t("div",M,[t("span",U,w(i.value),1),t("button",{type:"button",class:"browser-close",onClick:p}," × ")]),t("div",q,[c.value?(s(),o("div",{key:0,class:"browser-item parent",onClick:e[1]||(e[1]=n=>b(c.value))},[...e[2]||(e[2]=[t("span",{class:"browser-item-icon"},"←",-1),h(" Parent Directory ",-1)])])):f("",!0),m.value?(s(),o("div",z,[...e[3]||(e[3]=[t("span",{class:"loading-spinner"},null,-1),h(" Loading... ",-1)])])):u.value?(s(),o("div",A,w(u.value),1)):(s(),o(k,{key:3},[(s(!0),o(k,null,S(d.value,n=>(s(),o("div",{key:n.name,class:"browser-item",onClick:O=>b(x(i.value,n.name))},[e[4]||(e[4]=t("span",{class:"browser-item-icon"},"📁",-1)),h(" "+w(n.name),1)],8,G))),128)),d.value.length===0&&!c.value?(s(),o("div",H," No subdirectories ")):d.value.length===0?(s(),o("div",J," No subdirectories in this folder ")):f("",!0)],64))]),t("div",{class:"browser-footer"},[t("button",{type:"button",class:"btn",onClick:p}," Cancel "),t("button",{type:"button",class:"btn btn-primary",onClick:P}," Select ")])])])):f("",!0)]))}},W=N(K,[["__scopeId","data-v-297ad79a"]]);export{W as P};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-BGwH4Cfn.js","assets/index-B6G18FqB.js","assets/index-Cs2nxhrT.css","assets/SessionDetailView-CL7nmfiB.js","assets/sessions-DH1R-NhV.js","assets/ApiClient-B4YTtyY4.js","assets/projects-BUiOGmmb.js","assets/EffortLevelSelector-C2378L8e.js","assets/EffortLevelSelector-BQaQmU2d.css","assets/SessionLogStream-DpUE6Xsh.js","assets/commandButtons-D4RPpLiu.js","assets/SessionLogStream-zPUTiGbe.css","assets/ArchiveConfirmModal-OFaj_uX5.js","assets/ModelSelector-BMpR0DPr.js","assets/providers-Bh1ZiiJi.js","assets/ModelSelector-D8hbTRIt.css","assets/SlashCommandWizard-DmTyNG9O.js","assets/SlashCommandWizard-Dn7sNaBd.css","assets/ArchiveConfirmModal-BQ-4gI0R.css","assets/useSummaryHelpers-GVg7sMWF.js","assets/QuickResponseSettings-CDm5vwP7.js","assets/QuickResponseSettings-B8188A1D.css","assets/QuickResponsesPanel-DZ_Lre_l.js","assets/QuickResponsesPanel-BlFDvnZ2.css","assets/ResizableTextarea-DiIOEGjN.js","assets/ResizableTextarea-DsU3TVwF.css","assets/SessionDetailView-CupIkI7u.css","assets/style-BTin-zR_.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{n as E,l as u,A as T,a as l,c as y,G as k,w as d,b as m,f as V,d as h,u as w,a3 as x,O as A,P as p}from"./index-B6G18FqB.js";import{u as P}from"./SessionDetailView-CL7nmfiB.js";import"./sessions-DH1R-NhV.js";import"./ApiClient-B4YTtyY4.js";import"./projects-BUiOGmmb.js";import"./EffortLevelSelector-C2378L8e.js";import"./SessionLogStream-DpUE6Xsh.js";import"./commandButtons-D4RPpLiu.js";import"./ArchiveConfirmModal-OFaj_uX5.js";import"./ModelSelector-BMpR0DPr.js";import"./providers-Bh1ZiiJi.js";import"./SlashCommandWizard-DmTyNG9O.js";import"./useSummaryHelpers-GVg7sMWF.js";import"./QuickResponseSettings-CDm5vwP7.js";import"./QuickResponsesPanel-DZ_Lre_l.js";import"./ResizableTextarea-DiIOEGjN.js";const b={class:"canvas-md-editor"},J={__name:"MarkdownEditor",props:{content:{type:String,default:""},sessionId:{type:String,required:!0},filename:{type:String,required:!0},itemId:{type:String,required:!0}},emits:["save"],setup(c,{expose:f,emit:v}){const _=A(()=>p(()=>import("./index-BGwH4Cfn.js").then(e=>e.w),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26])).then(async e=>(await p(()=>Promise.resolve({}),__vite__mapDeps([27])),e.MdEditor))),r=c,n=v,g=P(),o=E(r.content||"");let t=null,a=r.content||"";u(o,e=>{e!==a&&(t&&clearTimeout(t),t=setTimeout(()=>{a=e,n("save",e)},1e3))});function s(){t&&(clearTimeout(t),t=null),o.value!==a&&n("save",o.value)}return f({flushPendingSave:s}),u(()=>r.content,e=>{e!==o.value&&(t&&(clearTimeout(t),t=null),a=e||"",o.value=e||"")}),T(()=>{s(),g.endEditing(r.filename)}),(e,i)=>(l(),y("div",b,[(l(),k(x,null,{default:d(()=>[h(w(_),{modelValue:o.value,"onUpdate:modelValue":i[0]||(i[0]=S=>o.value=S),theme:"dark",preview:!1,language:"en-US","no-upload-img":!0,"show-code-row-number":!0},null,8,["modelValue"])]),fallback:d(()=>[...i[1]||(i[1]=[m("div",{class:"editor-loading"},[m("span",{class:"loading-spinner"}),V(" Loading editor... ")],-1)])]),_:1}))]))}};export{J as default};
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import{I as ge,n as m,_ as de,a as r,c as d,b as l,E as ue,i as h,t as D,f as re,F as N,y as Ve,l as R,m as E,v as X,q as ie,p as _,k as Oe,A as xe,o as Me,d as $,w as Le,u as v,K as Z,r as H,G as fe,j as Ne,s as Ue,g as qe,x as A,h as Ge}from"./index-B6G18FqB.js";import{g as je,u as Fe}from"./sessions-DH1R-NhV.js";import{u as Pe}from"./EffortLevelSelector-C2378L8e.js";import{u as We,a as Qe,Q as ze}from"./QuickResponseSettings-CDm5vwP7.js";import{a as He}from"./ApiClient-B4YTtyY4.js";import{F as Ke,Q as Ye,u as Je}from"./QuickResponsesPanel-DZ_Lre_l.js";import{S as Xe}from"./SessionFormOptions-DYUISplS.js";import{R as Ze}from"./ResizableTextarea-DiIOEGjN.js";import{S as _e,a as et}from"./SlashCommandWizard-DmTyNG9O.js";import{u as tt}from"./projects-BUiOGmmb.js";import"./ModelSelector-BMpR0DPr.js";import"./providers-Bh1ZiiJi.js";function lt(t){const u=m(""),a=m(!1),f=m("yolo"),o=m(null),k=m(null),x=m(!0),C=m(null),g=m(!0),n=m("worktree"),p=m(""),I=m(!1),y=m(""),M=m(null),V=m(null),K=m(null),w=m({scheduledAt:null,autoRescheduleEnabled:!1,rescheduleDelayMinutes:15,rescheduleOnTokenLimit:!0,rescheduleOnServiceError:!0,maxRescheduleCount:null,maxTotalTokens:null,rescheduleAtTokenCount:null}),S=m({mode:!1,model:!1,thinkingEnabled:!1,startImmediately:!1,quickGitMode:!1,quickWorktreeBranch:!1});function U(c){c.mode&&(f.value=c.mode,S.value.mode=!0),c.model?(o.value=c.model,k.value=c.providerId||null,S.value.model=!0):(o.value="sonnet",k.value=null,S.value.model=!0),c.thinkingEnabled!==null&&c.thinkingEnabled!==void 0&&(x.value=c.thinkingEnabled,S.value.thinkingEnabled=!0),c.effortLevel&&(C.value=c.effortLevel),c.startImmediately!==null&&c.startImmediately!==void 0&&(g.value=c.startImmediately,S.value.startImmediately=!0),c.gitMode&&(n.value=c.gitMode,S.value.quickGitMode=!0),c.gitBranch&&(p.value=c.gitBranch,S.value.quickWorktreeBranch=!0)}function ee(c){const T=localStorage.getItem(t.value);T&&(u.value=T,ge(()=>{c.value&&(c.value.value=T,a.value=T.trim().length>0)}))}function Y(){w.value={scheduledAt:null,autoRescheduleEnabled:!1,rescheduleDelayMinutes:15,rescheduleOnTokenLimit:!0,rescheduleOnServiceError:!0,maxRescheduleCount:null,maxTotalTokens:null,rescheduleAtTokenCount:null}}function q(){I.value=!0}function O(){I.value=!1,p.value=y.value}function L(c){y.value=je("",c),I.value||(p.value=y.value)}return{prompt:u,promptHasContent:a,mode:f,model:o,providerId:k,thinkingEnabled:x,effortLevel:C,startImmediately:g,quickGitMode:n,quickWorktreeBranch:p,editingBranch:I,autoBranchName:y,selectedTemplateId:M,startFromTemplateId:V,parentSessionId:K,schedulingData:w,usingDefaults:S,applyProjectDefaults:U,restoreDraftFromStorage:ee,resetSchedulingData:Y,handleBranchEdit:q,resetBranchName:O,updateAutoBranchName:L}}function nt(t,u){if(!t)return;const a=t.selectionStart,f=t.selectionEnd,o=t.value.substring(0,a),k=t.value.substring(f);t.value=o+u+k,t.selectionStart=t.selectionEnd=a+u.length,t.dispatchEvent(new Event("input",{bubbles:!0})),t.focus()}function ot(t,u){if(!t)return;const a=t.value.trim(),f=a?`${a}
|
|
2
|
-
|
|
3
|
-
${u}`:u;t.value=f,t.dispatchEvent(new Event("input",{bubbles:!0}))}function st(t,u,a){t&&(u.prompt.value=t.prompt,a.value&&(a.value.value=t.prompt,a.value.dispatchEvent(new Event("input",{bubbles:!0}))),t.thinkingEnabled!=null&&(u.thinkingEnabled.value=t.thinkingEnabled),t.model&&(u.model.value=t.model),t.mode&&(u.mode.value=t.mode),t.gitBranch&&(u.quickWorktreeBranch.value=t.gitBranch,u.editingBranch.value=!0),t.gitMode&&(u.quickGitMode.value=t.gitMode),t.effortLevel!=null&&(u.effortLevel.value=t.effortLevel),t.nextTemplateId&&(u.selectedTemplateId.value=t.nextTemplateId))}function at(t,u){const{currentPrompt:a,gitStatus:f,files:o}=u,k=t.quickGitMode.value&&(f!=null&&f.isGitRepo)?t.quickGitMode.value:void 0;return{prompt:a,mode:t.mode.value,model:t.model.value,providerId:t.providerId.value,thinkingEnabled:t.thinkingEnabled.value,effortLevel:t.effortLevel.value,startImmediately:t.startImmediately.value,gitMode:k,gitBranch:k?t.quickWorktreeBranch.value:void 0,files:o,templateId:t.selectedTemplateId.value,parentSessionId:t.parentSessionId.value||null,scheduledAt:t.schedulingData.value.scheduledAt,autoRescheduleEnabled:t.schedulingData.value.autoRescheduleEnabled,rescheduleDelayMinutes:t.schedulingData.value.rescheduleDelayMinutes,rescheduleOnTokenLimit:t.schedulingData.value.rescheduleOnTokenLimit,rescheduleOnServiceError:t.schedulingData.value.rescheduleOnServiceError,maxRescheduleCount:t.schedulingData.value.maxRescheduleCount,maxTotalTokens:t.schedulingData.value.maxTotalTokens,rescheduleAtTokenCount:t.schedulingData.value.rescheduleAtTokenCount}}const ut={key:0,class:"form-group"},it={class:"segmented-control"},rt={key:0,class:"branch-input-row"},dt={class:"quick-branch-input"},mt=["value","placeholder"],ct={key:1,class:"current-branch-hint"},pt={key:1,class:"git-loading"},vt={__name:"GitOptionsPanel",props:{gitStatus:{type:Object,default:null},modelValue:{type:String,default:""},branchName:{type:String,default:""},autoBranchName:{type:String,default:""},editingBranch:{type:Boolean,default:!1},loadingGit:{type:Boolean,default:!1}},emits:["update:modelValue","update:branchName","branchEdit","resetBranch"],setup(t){return(u,a)=>{var f;return r(),d(N,null,[(f=t.gitStatus)!=null&&f.isGitRepo?(r(),d("div",ut,[a[9]||(a[9]=l("label",{class:"form-label"},"Git Options",-1)),l("div",it,[l("button",{type:"button",class:ue(["segment-btn",{"segment-btn--active":t.modelValue==="worktree"}]),onClick:a[0]||(a[0]=o=>u.$emit("update:modelValue","worktree"))},[...a[6]||(a[6]=[l("span",{class:"segment-label-full"},"Worktree",-1),l("span",{class:"segment-label-short"},"WT",-1)])],2),l("button",{type:"button",class:ue(["segment-btn",{"segment-btn--active":t.modelValue==="branch"}]),onClick:a[1]||(a[1]=o=>u.$emit("update:modelValue","branch"))}," Branch ",2),l("button",{type:"button",class:ue(["segment-btn",{"segment-btn--active":t.modelValue===""}]),onClick:a[2]||(a[2]=o=>u.$emit("update:modelValue",""))}," Current ",2)]),t.modelValue?(r(),d("div",rt,[a[7]||(a[7]=l("label",{class:"form-label form-label-small"},"Branch Name",-1)),l("div",dt,[l("input",{value:t.branchName,type:"text",class:"form-input",placeholder:t.autoBranchName,onInput:a[3]||(a[3]=o=>u.$emit("update:branchName",o.target.value)),onFocus:a[4]||(a[4]=o=>u.$emit("branchEdit"))},null,40,mt),t.editingBranch?(r(),d("button",{key:0,type:"button",class:"btn btn-small",onClick:a[5]||(a[5]=o=>u.$emit("resetBranch"))}," Reset ")):h("",!0)]),a[8]||(a[8]=l("p",{class:"form-help"}," Auto-generated from prompt ",-1))])):h("",!0),t.modelValue===""?(r(),d("p",ct," On: "+D(t.gitStatus.currentBranch),1)):h("",!0)])):h("",!0),t.loadingGit?(r(),d("div",pt,[...a[10]||(a[10]=[l("span",{class:"loading-spinner"},null,-1),re(" Loading git info... ",-1)])])):h("",!0)],64)}}},ht=de(vt,[["__scopeId","data-v-59edf73d"]]),ft={class:"scheduling-options"},gt={key:0,class:"form-group"},bt={class:"form-group"},kt={class:"toggle-switch"},yt={key:1,class:"reschedule-settings"},Tt={class:"form-group"},St={class:"checkbox-option"},Et={class:"checkbox-option"},Ct={class:"form-group"},It={class:"limits-section"},Rt={class:"form-group"},wt={class:"form-group"},Bt={class:"form-group"},$t={__name:"SchedulingOptions",props:{modelValue:{type:Object,default:()=>({})},hideScheduledAt:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(t,{emit:u}){const a=t,f=u,o=Ve({scheduledAt:a.modelValue.scheduledAt||null,scheduledAtLocal:"",autoRescheduleEnabled:a.modelValue.autoRescheduleEnabled??!1,rescheduleDelayMinutes:a.modelValue.rescheduleDelayMinutes??15,rescheduleOnTokenLimit:a.modelValue.rescheduleOnTokenLimit??!0,rescheduleOnServiceError:a.modelValue.rescheduleOnServiceError??!0,maxRescheduleCount:a.modelValue.maxRescheduleCount??null,maxTotalTokens:a.modelValue.maxTotalTokens??null,rescheduleAtTokenCount:a.modelValue.rescheduleAtTokenCount??null});function k(){if(o.scheduledAtLocal){const g=new Date(o.scheduledAtLocal);o.scheduledAt=g.getTime()}else o.scheduledAt=null;C()}function x(g){if(!g)return"";const n=new Date(g),p=n.getFullYear(),I=String(n.getMonth()+1).padStart(2,"0"),y=String(n.getDate()).padStart(2,"0"),M=String(n.getHours()).padStart(2,"0"),V=String(n.getMinutes()).padStart(2,"0");return`${p}-${I}-${y}T${M}:${V}`}R(()=>a.modelValue.scheduledAt,g=>{g&&(o.scheduledAtLocal=x(g))},{immediate:!0});function C(){f("update:modelValue",{scheduledAt:o.scheduledAt,autoRescheduleEnabled:o.autoRescheduleEnabled,rescheduleDelayMinutes:o.rescheduleDelayMinutes,rescheduleOnTokenLimit:o.rescheduleOnTokenLimit,rescheduleOnServiceError:o.rescheduleOnServiceError,maxRescheduleCount:o.maxRescheduleCount,maxTotalTokens:o.maxTotalTokens,rescheduleAtTokenCount:o.rescheduleAtTokenCount})}return R(()=>({autoRescheduleEnabled:o.autoRescheduleEnabled,rescheduleDelayMinutes:o.rescheduleDelayMinutes,rescheduleOnTokenLimit:o.rescheduleOnTokenLimit,rescheduleOnServiceError:o.rescheduleOnServiceError,maxRescheduleCount:o.maxRescheduleCount,maxTotalTokens:o.maxTotalTokens,rescheduleAtTokenCount:o.rescheduleAtTokenCount}),()=>{C()},{deep:!0}),(g,n)=>(r(),d("div",ft,[t.hideScheduledAt?h("",!0):(r(),d("div",gt,[n[8]||(n[8]=l("label",{for:"scheduled-at",class:"form-label"},"Schedule Start Time (optional)",-1)),E(l("input",{id:"scheduled-at","onUpdate:modelValue":n[0]||(n[0]=p=>o.scheduledAtLocal=p),type:"datetime-local",class:"form-input",onChange:k},null,544),[[X,o.scheduledAtLocal]]),n[9]||(n[9]=l("p",{class:"form-help"}," Leave empty to start immediately ",-1))])),l("div",bt,[l("label",kt,[E(l("input",{"onUpdate:modelValue":n[1]||(n[1]=p=>o.autoRescheduleEnabled=p),type:"checkbox"},null,512),[[ie,o.autoRescheduleEnabled]]),n[10]||(n[10]=l("span",{class:"toggle-slider"},null,-1)),n[11]||(n[11]=l("span",{class:"toggle-label"},"Auto-reschedule on errors",-1))])]),o.autoRescheduleEnabled?(r(),d("div",yt,[l("div",Tt,[n[14]||(n[14]=l("p",{class:"settings-label"}," Reschedule Triggers ",-1)),l("label",St,[E(l("input",{"onUpdate:modelValue":n[2]||(n[2]=p=>o.rescheduleOnTokenLimit=p),type:"checkbox"},null,512),[[ie,o.rescheduleOnTokenLimit]]),n[12]||(n[12]=l("span",{class:"checkbox-label"},"Token limit errors",-1))]),l("label",Et,[E(l("input",{"onUpdate:modelValue":n[3]||(n[3]=p=>o.rescheduleOnServiceError=p),type:"checkbox"},null,512),[[ie,o.rescheduleOnServiceError]]),n[13]||(n[13]=l("span",{class:"checkbox-label"},"Service unavailability",-1))])]),l("div",Ct,[n[16]||(n[16]=l("label",{for:"reschedule-delay",class:"form-label"},"Reschedule Delay",-1)),E(l("select",{id:"reschedule-delay","onUpdate:modelValue":n[4]||(n[4]=p=>o.rescheduleDelayMinutes=p),class:"form-input"},[...n[15]||(n[15]=[l("option",{value:5}," 5 minutes ",-1),l("option",{value:15}," 15 minutes ",-1),l("option",{value:30}," 30 minutes ",-1),l("option",{value:60}," 1 hour ",-1),l("option",{value:120}," 2 hours ",-1)])],512),[[_,o.rescheduleDelayMinutes,void 0,{number:!0}]])]),l("div",It,[n[23]||(n[23]=l("p",{class:"settings-label"}," Limits (optional) ",-1)),l("div",Rt,[n[17]||(n[17]=l("label",{for:"max-reschedule-count",class:"form-label"},"Max Reschedule Count",-1)),E(l("input",{id:"max-reschedule-count","onUpdate:modelValue":n[5]||(n[5]=p=>o.maxRescheduleCount=p),type:"number",min:"1",max:"100",class:"form-input",placeholder:"Unlimited"},null,512),[[X,o.maxRescheduleCount,void 0,{number:!0}]]),n[18]||(n[18]=l("p",{class:"form-help"}," Stop after N reschedule attempts ",-1))]),l("div",wt,[n[19]||(n[19]=l("label",{for:"max-total-tokens",class:"form-label"},"Max Total Tokens (Hard Limit)",-1)),E(l("input",{id:"max-total-tokens","onUpdate:modelValue":n[6]||(n[6]=p=>o.maxTotalTokens=p),type:"number",min:"1000",step:"1000",class:"form-input",placeholder:"Unlimited"},null,512),[[X,o.maxTotalTokens,void 0,{number:!0}]]),n[20]||(n[20]=l("p",{class:"form-help"}," Stop rescheduling after consuming this many tokens ",-1))]),l("div",Bt,[n[21]||(n[21]=l("label",{for:"reschedule-at-token-count",class:"form-label"},"Reschedule At Token Count",-1)),E(l("input",{id:"reschedule-at-token-count","onUpdate:modelValue":n[7]||(n[7]=p=>o.rescheduleAtTokenCount=p),type:"number",min:"10000",step:"10000",class:"form-input",placeholder:"None"},null,512),[[X,o.rescheduleAtTokenCount,void 0,{number:!0}]]),n[22]||(n[22]=l("p",{class:"form-help"}," Proactively reschedule when session reaches this token count ",-1))])])])):h("",!0)]))}},At=de($t,[["__scopeId","data-v-cfbba021"]]),Dt={class:"container"},Vt={key:0,class:"form-group"},Ot={key:0,label:"Project Templates"},xt=["value"],Mt={key:1,label:"Global Templates"},Lt=["value"],Nt={class:"form-group"},Ut={class:"attachment-row"},qt={key:1,class:"error-message"},Gt={key:1,class:"form-group"},jt={key:0,label:"Project Templates"},Ft=["value"],Pt={key:1,label:"Global Templates"},Wt=["value"],Qt={key:2,class:"form-group"},zt=["value"],Ht={class:"form-actions"},Kt=["disabled"],Yt={key:0,class:"loading-spinner"},Jt={__name:"NewSessionView",setup(t){const u=Ue(),a=Ge(),f=Fe();Oe();const o=Pe(),k=We(),x=tt(),C=A(()=>`new-session-draft-${u.params.id}`),g=lt(C),{prompt:n,promptHasContent:p,mode:I,model:y,providerId:M,thinkingEnabled:V,effortLevel:K,startImmediately:w,quickGitMode:S,quickWorktreeBranch:U,editingBranch:ee,autoBranchName:Y,selectedTemplateId:q,startFromTemplateId:O,parentSessionId:L,schedulingData:c,usingDefaults:T,applyProjectDefaults:be,restoreDraftFromStorage:ke,resetSchedulingData:ye,handleBranchEdit:Te,resetBranchName:Se,updateAutoBranchName:me}=g,B=m(null);let G=null,j=null,F=null;const P=m(!1),te=m(!1),le=m(!1),Ee=A(()=>window.innerWidth<=480?80:120),Ce=Je(()=>{var e;const i=((e=B.value)==null?void 0:e.value)||n.value;!P.value&&i.trim()&&ae()}),W=m(null),ce=m([]),pe=m(null),ve=m(null),Q=A(()=>o.projectTemplates),z=A(()=>o.globalTemplates),ne=A(()=>[...Q.value,...z.value]),he=A(()=>{const i=x.getProjectById(u.params.id);return(i==null?void 0:i.workingDirectory)||null}),oe=A(()=>f.sessions.filter(i=>i.status==="completed").sort((i,e)=>new Date(e.createdAt)-new Date(i.createdAt))),Ie=A(()=>!w.value||ne.value.length>0||oe.value.length>0),se=m(!1),J=m(null);function Re(i){var s;const e=i.target.value,b=e.trim().length>0;p.value!==b&&(p.value=b),G&&clearTimeout(G),G=setTimeout(()=>{n.value=e},150),(s=W.value)!=null&&s.isGitRepo&&(F&&clearTimeout(F),F=setTimeout(()=>me(e),300))}R(()=>W.value,i=>{i!=null&&i.isGitRepo&&!Y.value&&me(n.value)},{immediate:!0}),R(I,()=>{T.value.mode=!1}),R(y,()=>{T.value.model=!1}),R(V,()=>{T.value.thinkingEnabled=!1}),R(w,i=>{T.value.startImmediately=!1,i?ye():ge(()=>{var e;(e=ve.value)==null||e.scrollIntoView({behavior:"smooth",block:"nearest"})})}),R(S,()=>{T.value.quickGitMode=!1}),R(U,()=>{T.value.quickWorktreeBranch=!1}),R(n,i=>{j&&clearTimeout(j),j=setTimeout(()=>{i.trim()?localStorage.setItem(C.value,i):localStorage.removeItem(C.value)},500)}),xe(()=>{F&&clearTimeout(F),G&&clearTimeout(G),j&&clearTimeout(j)}),Me(async()=>{const i=u.params.id;ke(B);try{await k.fetchDefaults(i);const b=k.getDefaultsForProject(i);b?be(b):(y.value="sonnet",T.value.model=!0)}catch(b){console.warn("Failed to fetch project defaults:",b),y.value||(y.value="sonnet",T.value.model=!0)}se.value=!0;try{W.value=await He.getGitStatus(i)}catch{}finally{se.value=!1}o.fetchProjectTemplates(i),Qe().fetchForProject(i),u.query.parentSessionId&&(L.value=u.query.parentSessionId)});function we(){a.push(`/projects/${u.params.id}/sessions`)}function Be({text:i}){nt(B.value,i)}function $e({content:i,autoSubmit:e}){var b;ot(B.value,i),e?setTimeout(()=>ae(),0):(b=B.value)==null||b.blur()}function Ae(){const i=O.value&&o.getTemplateById(O.value);st(i,g,B)}async function ae(){var e,b;const i=((e=B.value)==null?void 0:e.value)||n.value;if(i.trim()){P.value=!0,J.value=null;try{const s=at(g,{currentPrompt:i,gitStatus:W.value,files:ce.value}),De=await f.createSession(u.params.id,s);(b=pe.value)==null||b.clear(),localStorage.removeItem(C.value),a.push(`/sessions/${De.id}?overlay=open`)}catch(s){J.value=s.message}finally{P.value=!1}}}return(i,e)=>{const b=qe("router-link");return r(),d("div",Dt,[$(b,{to:`/projects/${v(u).params.id}/sessions`,class:"back-link"},{default:Le(()=>[...e[17]||(e[17]=[re(" ← Sessions ",-1)])]),_:1},8,["to"]),e[26]||(e[26]=l("h1",null,"New Session",-1)),l("form",{class:"form card",onSubmit:Ne(ae,["prevent"])},[ne.value.length>0?(r(),d("div",Vt,[e[19]||(e[19]=l("label",{class:"form-label",for:"start-from-template"},"Start From Template",-1)),E(l("select",{id:"start-from-template","onUpdate:modelValue":e[0]||(e[0]=s=>Z(O)?O.value=s:null),class:"form-input",title:"Selecting a template will populate all form fields below. You can still edit before starting.",onChange:Ae},[e[18]||(e[18]=l("option",{value:null}," Select a template to pre-fill... ",-1)),Q.value.length?(r(),d("optgroup",Ot,[(r(!0),d(N,null,H(Q.value,s=>(r(),d("option",{key:s.id,value:s.id},D(s.name),9,xt))),128))])):h("",!0),z.value.length?(r(),d("optgroup",Mt,[(r(!0),d(N,null,H(z.value,s=>(r(),d("option",{key:s.id,value:s.id},D(s.name),9,Lt))),128))])):h("",!0)],544),[[_,v(O)]])])):h("",!0),l("div",Nt,[$(Ze,{id:"prompt",ref_key:"textareaRef",ref:B,class:"form-input form-textarea",placeholder:"What would you like the agent to help you with?","min-height":Ee.value,required:"",onInput:Re,onKeydown:v(Ce)},null,8,["min-height","onKeydown"]),l("div",Ut,[$(Ke,{ref_key:"fileAttachment",ref:pe,"onUpdate:files":e[1]||(e[1]=s=>ce.value=s)},null,512),he.value?(r(),fe(_e,{key:0,onOpen:e[2]||(e[2]=s=>te.value=!0)})):h("",!0)])]),$(Ye,{"show-empty":!0,onInsert:$e,onOpenSettings:e[3]||(e[3]=s=>le.value=!0)}),$(Xe,{mode:v(I),model:v(y),"provider-id":v(M),"effort-level":v(K),"thinking-enabled":v(V),"start-immediately":v(w),"onUpdate:mode":e[4]||(e[4]=s=>I.value=s),"onUpdate:model":e[5]||(e[5]=s=>y.value=s),"onUpdate:providerId":e[6]||(e[6]=s=>M.value=s),"onUpdate:effortLevel":e[7]||(e[7]=s=>K.value=s),"onUpdate:thinkingEnabled":e[8]||(e[8]=s=>V.value=s),"onUpdate:startImmediately":e[9]||(e[9]=s=>w.value=s)},null,8,["mode","model","provider-id","effort-level","thinking-enabled","start-immediately"]),J.value?(r(),d("div",qt,D(J.value),1)):h("",!0),$(ht,{"git-status":W.value,"model-value":v(S),"branch-name":v(U),"auto-branch-name":v(Y),"editing-branch":v(ee),"loading-git":se.value,"onUpdate:modelValue":e[10]||(e[10]=s=>S.value=s),"onUpdate:branchName":e[11]||(e[11]=s=>U.value=s),onBranchEdit:v(Te),onResetBranch:v(Se)},null,8,["git-status","model-value","branch-name","auto-branch-name","editing-branch","loading-git","onBranchEdit","onResetBranch"]),Ie.value?(r(),d("div",{key:2,ref_key:"advancedOptionsRef",ref:ve,class:"advanced-options"},[v(w)?h("",!0):(r(),fe(At,{key:0,modelValue:v(c),"onUpdate:modelValue":e[12]||(e[12]=s=>Z(c)?c.value=s:null)},null,8,["modelValue"])),ne.value.length>0?(r(),d("div",Gt,[e[21]||(e[21]=l("label",{class:"form-label",for:"template"},"Next Template (optional)",-1)),E(l("select",{id:"template","onUpdate:modelValue":e[13]||(e[13]=s=>Z(q)?q.value=s:null),class:"form-input"},[e[20]||(e[20]=l("option",{value:null}," None - single session ",-1)),Q.value.length?(r(),d("optgroup",jt,[(r(!0),d(N,null,H(Q.value,s=>(r(),d("option",{key:s.id,value:s.id},D(s.name),9,Ft))),128))])):h("",!0),z.value.length?(r(),d("optgroup",Pt,[(r(!0),d(N,null,H(z.value,s=>(r(),d("option",{key:s.id,value:s.id},D(s.name),9,Wt))),128))])):h("",!0)],512),[[_,v(q)]]),e[22]||(e[22]=l("p",{class:"form-help"}," After this session completes, the selected template will automatically start a new session. ",-1))])):h("",!0),oe.value.length>0?(r(),d("div",Qt,[e[24]||(e[24]=l("label",{class:"form-label",for:"parent-session"},"Parent Session (optional)",-1)),E(l("select",{id:"parent-session","onUpdate:modelValue":e[14]||(e[14]=s=>Z(L)?L.value=s:null),class:"form-input"},[e[23]||(e[23]=l("option",{value:null}," None - create standalone session ",-1)),(r(!0),d(N,null,H(oe.value,s=>(r(),d("option",{key:s.id,value:s.id},D(s.name),9,zt))),128))],512),[[_,v(L)]]),e[25]||(e[25]=l("p",{class:"form-help"}," Choose a parent session to link this as a child session. Child sessions help organize related work. ",-1))])):h("",!0)],512)):h("",!0),l("div",Ht,[l("button",{type:"button",class:"btn btn-secondary",onClick:we}," Cancel "),l("button",{type:"submit",class:"btn btn-primary btn-submit",disabled:P.value},[P.value?(r(),d("span",Yt)):h("",!0),re(" "+D(v(w)?"Start Session":"Create Draft"),1)],8,Kt)])],32),$(et,{"is-open":te.value,"onUpdate:isOpen":e[15]||(e[15]=s=>te.value=s),"working-directory":he.value||"",mode:"insert","hide-builtin":!0,onInsert:Be},null,8,["is-open","working-directory"]),$(ze,{"is-open":le.value,"project-id":v(u).params.id,onClose:e[16]||(e[16]=s=>le.value=!1)},null,8,["is-open","project-id"])])}}},rl=de(Jt,[["__scopeId","data-v-3e37bc7e"]]);export{rl as default};
|
|
@@ -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)}
|