circuschief 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/packages/server/src/agents/AgentGateway.js +2 -0
- package/packages/server/src/agents/adapters/GeminiAdapter.js +105 -0
- package/packages/server/src/agents/adapters/cliUtils.js +15 -0
- package/packages/server/src/agents/adapters/codexCliRunner.js +1 -8
- package/packages/server/src/agents/adapters/geminiCliRunner.js +183 -0
- package/packages/server/src/agents/adapters/geminiEventMapper.js +195 -0
- package/packages/server/src/db/ProviderRepository.js +4 -2
- package/packages/server/src/db/migrations/index.js +9 -0
- package/packages/server/src/db/migrations/providerMigrations.js +88 -3
- package/packages/server/src/db/seedBaselineData.js +23 -1
- package/packages/server/src/schema.sql +1 -1
- package/packages/server/src/services/e2eSpawnCapture.js +47 -6
- package/packages/server/src/services/geminiSpawnHelper.js +47 -0
- package/packages/server/src/services/gitDiff.js +22 -47
- package/packages/server/src/services/gitService.js +6 -2
- package/packages/server/src/services/providerTestService.js +59 -1
- package/packages/server/src/services/queryParamBuilder.js +33 -1
- package/packages/server/src/services/sessionExecution.js +4 -0
- package/packages/server/src/services/sessionPrompts.js +22 -0
- package/packages/server/src/services/sessionProvider.js +41 -1
- package/packages/shared/src/constants.js +1 -1
- package/packages/shared/src/contracts/providers.js +1 -1
- package/packages/shared/src/types.js +7 -0
- package/packages/web/dist/assets/{ActiveSessionsView-Cxh8mHmB.js → ActiveSessionsView-EdNxmPmZ.js} +1 -1
- package/packages/web/dist/assets/{AgentLogsView-xdfI2bR6.js → AgentLogsView-C2wX0JPP.js} +1 -1
- package/packages/web/dist/assets/{ArchiveConfirmModal-DXZYdzHR.js → ArchiveConfirmModal-DJERn5XO.js} +1 -1
- package/packages/web/dist/assets/{CommandButtonDetailView-D8xfqLAp.js → CommandButtonDetailView-CBPI8-US.js} +1 -1
- package/packages/web/dist/assets/EffortLevelSelector-PaBpUveC.js +1 -0
- package/packages/web/dist/assets/{GeneralSettingsView-sPXkLlLy.js → GeneralSettingsView-Dw-x83R0.js} +1 -1
- package/packages/web/dist/assets/{InputWithButton-B-o0DgMH.js → InputWithButton-CHHcpF4I.js} +1 -1
- package/packages/web/dist/assets/{InterpolationHelp-Dxn1li4l.js → InterpolationHelp-CLNPz8s8.js} +1 -1
- package/packages/web/dist/assets/MarkdownEditor-DYi1igfT.js +2 -0
- package/packages/web/dist/assets/ModelSelector-Cko_yTO5.js +1 -0
- package/packages/web/dist/assets/{ModelSelector-BNYKujL-.css → ModelSelector-Dtwe5xLH.css} +1 -1
- package/packages/web/dist/assets/{NewSessionView-BR_COfgW.js → NewSessionView-DwUfBg70.js} +1 -1
- package/packages/web/dist/assets/{ProjectEditView-WImU7sNd.js → ProjectEditView-CSbsea3U.js} +1 -1
- package/packages/web/dist/assets/{ProjectListView-CYmmAcBD.js → ProjectListView-CEc_LWZL.js} +1 -1
- package/packages/web/dist/assets/{ProjectNewView-DEhqw3Jv.js → ProjectNewView-D4U0uRlp.js} +1 -1
- package/packages/web/dist/assets/ProvidersView-2KCOiY6Q.css +1 -0
- package/packages/web/dist/assets/ProvidersView-CD1j8BOv.js +1 -0
- package/packages/web/dist/assets/{QuickResponsesPanel-BqmnTd-D.js → QuickResponsesPanel-Dp39f12o.js} +1 -1
- package/packages/web/dist/assets/ResizableTextarea-BWywIqOv.js +1 -0
- package/packages/web/dist/assets/ResizableTextarea-DERSH3Wz.css +1 -0
- package/packages/web/dist/assets/{SessionCard-Bw77-KwD.js → SessionCard-B6d5ijDW.js} +1 -1
- package/packages/web/dist/assets/{SessionDetailView-B59TEkr-.js → SessionDetailView-DWbXdx7A.js} +19 -19
- package/packages/web/dist/assets/{SessionDetailView-CKVBnR4T.css → SessionDetailView-ULeIkWS0.css} +1 -1
- package/packages/web/dist/assets/{SessionFormOptions-hqijxc0S.js → SessionFormOptions-Dz9ik4Fo.js} +1 -1
- package/packages/web/dist/assets/{SessionListView-DYXHM9I-.js → SessionListView-C129buBe.js} +1 -1
- package/packages/web/dist/assets/{SessionLogStream-5NfVr9pF.js → SessionLogStream-BvXUNNBZ.js} +1 -1
- package/packages/web/dist/assets/{SettingsView-DI8ncOAV.js → SettingsView-DW1NvpX_.js} +1 -1
- package/packages/web/dist/assets/SlashCommandWizard-DleYBxrE.js +1 -0
- package/packages/web/dist/assets/{SummarySettingsView-C2Qs35mm.js → SummarySettingsView-CLUfcWvf.js} +1 -1
- package/packages/web/dist/assets/{TemplateDetailView-zVkIvgtu.js → TemplateDetailView-Cukb205e.js} +1 -1
- package/packages/web/dist/assets/{commandButtons-CoU3G4zK.js → commandButtons-DejH0rVN.js} +1 -1
- package/packages/web/dist/assets/{index-CLRsVASf.js → index-BD7Y3rBE.js} +1 -1
- package/packages/web/dist/assets/{index-uySCcnA_.css → index-Bd20AzX1.css} +1 -1
- package/packages/web/dist/assets/{index-CslU0psO.js → index-BgJiarKe.js} +1 -1
- package/packages/web/dist/assets/{index-9yF1uCCA.js → index-Bk32fSSG.js} +1 -1
- package/packages/web/dist/assets/{index-CAGdsDh7.js → index-BkA6pF2Z.js} +1 -1
- package/packages/web/dist/assets/{index-DsjWqc6R.js → index-Cltr-Ldt.js} +1 -1
- package/packages/web/dist/assets/{index-DI4NxaWD.js → index-Co-46Tp3.js} +1 -1
- package/packages/web/dist/assets/{index-DUa7adFh.js → index-Cpykk857.js} +1 -1
- package/packages/web/dist/assets/{index-C7Ww2auW.js → index-CtABl0D1.js} +1 -1
- package/packages/web/dist/assets/{index-BKstCaYU.js → index-Cuqk5m9S.js} +1 -1
- package/packages/web/dist/assets/{index-C2QFVD7d.js → index-CvXApbVC.js} +15 -15
- package/packages/web/dist/assets/{index-BhbH7eOk.js → index-D2gN-xEH.js} +1 -1
- package/packages/web/dist/assets/{index-Bo7PdwM5.js → index-Dd3WpmyQ.js} +1 -1
- package/packages/web/dist/assets/{index-c99Bo3JV.js → index-Dk6--9rj.js} +1 -1
- package/packages/web/dist/assets/{index-BjuRttEY.js → index-MZf7MlPX.js} +3 -3
- package/packages/web/dist/assets/{index-CP-SxOlV.js → index-NShCcwfj.js} +1 -1
- package/packages/web/dist/assets/{index-rkQx2tso.js → index-hA3VEuSq.js} +1 -1
- package/packages/web/dist/assets/{index-DOzONENy.js → index-p0mp3nca.js} +1 -1
- package/packages/web/dist/assets/{index-mT1JpxDc.js → index-qntNa5r_.js} +1 -1
- package/packages/web/dist/assets/{index-DZBpETI5.js → index-qq9ceNSK.js} +1 -1
- package/packages/web/dist/assets/{projectDefaults-B8esIcYq.js → projectDefaults-D9xkp2XR.js} +1 -1
- package/packages/web/dist/assets/{projects-C-8PSxKi.js → projects-BvLADGKx.js} +1 -1
- package/packages/web/dist/assets/{providers-oXifvvqN.js → providers-DZ-fOa4G.js} +1 -1
- package/packages/web/dist/assets/{sessions-Nq5VafSf.js → sessions-DETEyjPI.js} +1 -1
- package/packages/web/dist/assets/{settings-DtpuiyT6.js → settings-TWfbahn5.js} +1 -1
- package/packages/web/dist/index.html +2 -2
- package/packages/web/dist/assets/EffortLevelSelector-D2Hdzc_8.js +0 -1
- package/packages/web/dist/assets/MarkdownEditor-D4Kbb-9l.js +0 -2
- package/packages/web/dist/assets/ModelSelector-72C7MUH4.js +0 -1
- package/packages/web/dist/assets/ProvidersView-XZh3jkmH.js +0 -1
- package/packages/web/dist/assets/ProvidersView-bZemq_Rv.css +0 -1
- package/packages/web/dist/assets/ResizableTextarea-BQNw5e0C.css +0 -1
- package/packages/web/dist/assets/ResizableTextarea-DpWdIAP6.js +0 -1
- package/packages/web/dist/assets/SlashCommandWizard-BQ_rMzn-.js +0 -1
|
@@ -41,6 +41,7 @@ export function resolveAgentTypeFromModel(modelId) {
|
|
|
41
41
|
// Fallback for test doubles that don't implement getAgentTypeForProvider:
|
|
42
42
|
// derive from kind directly.
|
|
43
43
|
if (provider.kind === 'openai') return 'codex';
|
|
44
|
+
if (provider.kind === 'google') return 'gemini';
|
|
44
45
|
return 'claude-code';
|
|
45
46
|
}
|
|
46
47
|
|
|
@@ -62,7 +63,9 @@ export function buildProviderEnv(provider) {
|
|
|
62
63
|
const kind = provider.kind || 'anthropic';
|
|
63
64
|
const env = kind === 'openai'
|
|
64
65
|
? buildOpenAIProviderEnv(provider)
|
|
65
|
-
:
|
|
66
|
+
: kind === 'google'
|
|
67
|
+
? buildGoogleProviderEnv(provider)
|
|
68
|
+
: buildAnthropicProviderEnv(provider);
|
|
66
69
|
|
|
67
70
|
if (provider.apiTimeoutMs) {
|
|
68
71
|
env.API_TIMEOUT_MS = String(provider.apiTimeoutMs);
|
|
@@ -78,6 +81,12 @@ export function buildProviderEnv(provider) {
|
|
|
78
81
|
return env;
|
|
79
82
|
}
|
|
80
83
|
|
|
84
|
+
function buildGoogleProviderEnv(provider) {
|
|
85
|
+
const env = {};
|
|
86
|
+
if (provider.authToken) env.GEMINI_API_KEY = provider.authToken;
|
|
87
|
+
return env;
|
|
88
|
+
}
|
|
89
|
+
|
|
81
90
|
function buildOpenAIProviderEnv(provider) {
|
|
82
91
|
const env = {};
|
|
83
92
|
if (provider.baseUrl) env.OPENAI_BASE_URL = provider.baseUrl;
|
|
@@ -120,6 +129,14 @@ function logProviderEnv(provider, kind, env) {
|
|
|
120
129
|
return;
|
|
121
130
|
}
|
|
122
131
|
|
|
132
|
+
if (kind === 'google') {
|
|
133
|
+
console.log(`[SessionManager] buildProviderEnv: Provider "${provider.name}" (google) env vars:`, {
|
|
134
|
+
GEMINI_API_KEY: env.GEMINI_API_KEY ? '[SET]' : '[NOT SET]',
|
|
135
|
+
API_TIMEOUT_MS: env.API_TIMEOUT_MS,
|
|
136
|
+
});
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
|
|
123
140
|
console.log(`[SessionManager] buildProviderEnv: Provider "${provider.name}" (anthropic) env vars:`, {
|
|
124
141
|
ANTHROPIC_BASE_URL: env.ANTHROPIC_BASE_URL,
|
|
125
142
|
ANTHROPIC_API_KEY: env.ANTHROPIC_API_KEY ? '[SET]' : '[NOT SET]',
|
|
@@ -164,8 +181,11 @@ export function buildSessionEnv(provider, thinkingEnabled = false, effortLevel =
|
|
|
164
181
|
stripProviderRuntimeEnv(sessionEnv);
|
|
165
182
|
} else if (kind === 'openai') {
|
|
166
183
|
applyOpenAISessionEnv(sessionEnv, providerEnv);
|
|
184
|
+
} else if (kind === 'google') {
|
|
185
|
+
applyGoogleSessionEnv(sessionEnv, providerEnv);
|
|
167
186
|
} else {
|
|
168
187
|
stripOpenAIHostEnv(sessionEnv);
|
|
188
|
+
stripGoogleHostEnv(sessionEnv);
|
|
169
189
|
}
|
|
170
190
|
|
|
171
191
|
// Claude-only session env vars. Only set for Anthropic-kind providers
|
|
@@ -194,10 +214,22 @@ function stripProviderRuntimeEnv(env) {
|
|
|
194
214
|
delete target.ANTHROPIC_BASE_URL;
|
|
195
215
|
delete target.OPENAI_API_KEY;
|
|
196
216
|
delete target.OPENAI_BASE_URL;
|
|
217
|
+
delete target.GEMINI_API_KEY;
|
|
218
|
+
delete target.GOOGLE_CLOUD_PROJECT;
|
|
219
|
+
delete target.GOOGLE_CLOUD_LOCATION;
|
|
220
|
+
delete target.GOOGLE_GENAI_USE_VERTEXAI;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
function applyGoogleSessionEnv(sessionEnv, providerEnv) {
|
|
224
|
+
stripAnthropicHostEnv(sessionEnv);
|
|
225
|
+
stripOpenAIHostEnv(sessionEnv);
|
|
226
|
+
// Apply provider-specific env vars
|
|
227
|
+
Object.assign(sessionEnv, providerEnv);
|
|
197
228
|
}
|
|
198
229
|
|
|
199
230
|
function applyOpenAISessionEnv(sessionEnv, providerEnv) {
|
|
200
231
|
stripAnthropicHostEnv(sessionEnv);
|
|
232
|
+
stripGoogleHostEnv(sessionEnv);
|
|
201
233
|
if (!providerEnv.OPENAI_API_KEY) {
|
|
202
234
|
replaceWithCodexCliEnv(sessionEnv, providerEnv);
|
|
203
235
|
return;
|
|
@@ -234,3 +266,11 @@ function stripOpenAIHostEnv(env) {
|
|
|
234
266
|
delete target.OPENAI_API_KEY;
|
|
235
267
|
delete target.OPENAI_BASE_URL;
|
|
236
268
|
}
|
|
269
|
+
|
|
270
|
+
function stripGoogleHostEnv(env) {
|
|
271
|
+
const target = env;
|
|
272
|
+
delete target.GEMINI_API_KEY;
|
|
273
|
+
delete target.GOOGLE_CLOUD_PROJECT;
|
|
274
|
+
delete target.GOOGLE_CLOUD_LOCATION;
|
|
275
|
+
delete target.GOOGLE_GENAI_USE_VERTEXAI;
|
|
276
|
+
}
|
|
@@ -23,7 +23,7 @@ export const TOAST_DURATION = 5000;
|
|
|
23
23
|
/** Default delay (in minutes) before auto-rescheduling a session. */
|
|
24
24
|
export const DEFAULT_RESCHEDULE_DELAY_MINUTES = 60;
|
|
25
25
|
|
|
26
|
-
export const DEFAULT_SYSTEM_PROMPT = `You are
|
|
26
|
+
export const DEFAULT_SYSTEM_PROMPT = `You are an AI coding assistant. You help users with software engineering tasks including writing code, debugging, refactoring, and explaining code. You have full access to the shell and can execute any commands needed to assist the user. Be helpful, accurate, and thorough.
|
|
27
27
|
|
|
28
28
|
IMPORTANT: Your working directory is already set correctly for this session. NEVER use \`cd\` to change to a hardcoded project path before running commands (e.g., \`cd /path/to/project && git status\`). This bypasses git worktree isolation and causes commands to run in the wrong directory. Always run commands directly without changing directory.
|
|
29
29
|
|
|
@@ -64,7 +64,7 @@ const CommitAttributionOverride = z
|
|
|
64
64
|
* Kind is **immutable after create**; switching kind invalidates the provider's
|
|
65
65
|
* registered models.
|
|
66
66
|
*/
|
|
67
|
-
export const ProviderKind = z.enum(['anthropic', 'openai']);
|
|
67
|
+
export const ProviderKind = z.enum(['anthropic', 'openai', 'google']);
|
|
68
68
|
|
|
69
69
|
export const CreateProviderRequest = z.object({
|
|
70
70
|
name: z.string().min(1).max(100),
|
|
@@ -142,6 +142,13 @@ export const OPENAI_MODELS = [
|
|
|
142
142
|
];
|
|
143
143
|
export const DEFAULT_OPENAI_MODEL = 'gpt-5.5';
|
|
144
144
|
|
|
145
|
+
export const GEMINI_MODELS = [
|
|
146
|
+
{ id: 'gemini-2.5-pro', name: 'Gemini 2.5 Pro', description: 'Most capable reasoning model', seedId: 'google-gemini-2-5-pro' },
|
|
147
|
+
{ id: 'gemini-2.5-flash', name: 'Gemini 2.5 Flash', description: 'Fast & cost-efficient', seedId: 'google-gemini-2-5-flash' },
|
|
148
|
+
{ id: 'gemini-2.5-flash-lite', name: 'Gemini 2.5 Flash Lite', description: 'Lightweight & cost-efficient', seedId: 'google-gemini-2-5-flash-lite' },
|
|
149
|
+
];
|
|
150
|
+
export const DEFAULT_GEMINI_MODEL = 'gemini-2.5-flash';
|
|
151
|
+
|
|
145
152
|
/**
|
|
146
153
|
* @typedef {Object} KanbanBoard
|
|
147
154
|
* @property {string} id
|
package/packages/web/dist/assets/{ActiveSessionsView-Cxh8mHmB.js → ActiveSessionsView-EdNxmPmZ.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{u as K}from"./sessions-
|
|
1
|
+
import{u as K}from"./sessions-DETEyjPI.js";import{u as Q}from"./commandButtons-DejH0rVN.js";import{E as j,W as c,_ as X,o as Z,G as ee,l as te,a,c as l,b as f,F as C,r as D,J as O,u as S,t as b,d as se,w as re,f as ne,z as A,g as oe,n as ie,C as R,x as ae}from"./index-CvXApbVC.js";import{a as x}from"./ApiClient-DfbJwzpz.js";import{S as le}from"./SessionCard-B6d5ijDW.js";import"./SessionLogStream-BvXUNNBZ.js";function ce(){const{on:E,off:s}=j(),d=h=>p=>{const i=F=>{F.session&&p(F.session,F.projectId)};return E(h,i),()=>s(h,i)},I=d(c.SESSION_CREATED),w=d(c.SESSION_UPDATED);return{onSessionCreated:I,onSessionUpdated:w,onSessionDeleted:h=>{const p=i=>{i.sessionId&&h(i.sessionId,i.projectId)};return E(c.SESSION_DELETED,p),()=>s(c.SESSION_DELETED,p)},onSessionSummaryUpdated:h=>{const p=i=>{i.sessionId&&i.summary&&h(i.sessionId,i.summary,i.projectId)};return E(c.SESSION_SUMMARY_UPDATED,p),()=>s(c.SESSION_SUMMARY_UPDATED,p)}}}const de=["data-state"],ue={class:"filters-container"},fe={class:"status-filters"},Se=["onClick"],pe=["title"],me={key:0,class:"star-icon"},he={key:1,class:"star-icon star-crossed"},_e={key:2,class:"star-icon"},ve={key:0,class:"skeleton-list"},ye={key:1,class:"error-message"},Fe={key:2,class:"empty-state","data-testid":"active-sessions-empty"},Ee={key:3,class:"empty-state","data-testid":"active-sessions-empty"},Ie={key:4,class:"session-list"},we={__name:"ActiveSessionsView",setup(E){const s=K(),d=Q(),I=["waiting","stopped","error"],w=["running","starting"],y=ie(new Set),g=e=>{s.statusFilter===e?s.setStatusFilter(null):s.setStatusFilter(e)},h=()=>{s.starredFilter===null?s.setStarredFilter("starred"):s.starredFilter==="starred"?s.setStarredFilter("unstarred"):s.setStarredFilter(null)},p=A(()=>s.starredFilter==="starred"?"Showing starred sessions only. Click to filter unstarred.":s.starredFilter==="unstarred"?"Showing unstarred sessions only. Click to show all.":"Showing all sessions. Click to filter by starred."),i=A(()=>{let e=s.activeSessions;return s.statusFilter&&(e=e.filter(t=>{const r=t.status;return!!(s.statusFilter==="idle"&&I.includes(r)||s.statusFilter==="running"&&w.includes(r))})),s.starredFilter==="starred"?e=e.filter(t=>t.starred):s.starredFilter==="unstarred"&&(e=e.filter(t=>!t.starred)),e}),F=A(()=>s.loading?"loading":s.error?"error":s.activeSessions.length===0?"empty-all":i.value.length===0?"empty-filtered":"results"),_=R({}),u=R({}),m=R({});let N=null;const v=[],{onSessionCreated:P,onSessionUpdated:B,onSessionDeleted:L,onSessionSummaryUpdated:V}=ce();async function M(){const e=new Set(s.activeSessions.map(t=>t.projectId).filter(t=>t&&!y.value.has(t)));for(const t of e)try{await d.fetchButtons(t),await d.fetchLatestRunsForProject(t),y.value.add(t)}catch(r){console.error(`Failed to fetch buttons for project ${t}:`,r)}}function U(e,t,r){d.runs[e]||(d.runs[e]={runId:e,buttonId:t,sessionId:r,status:"running",output:"",exitCode:null,startedAt:Date.now(),outputTruncated:!1})}function H(e){["running","waiting","starting"].includes(e.status)&&(s.activeSessions.some(r=>r.id===e.id)||(s.activeSessions.unshift(e),e.projectId&&!y.value.has(e.projectId)&&(d.fetchButtons(e.projectId),y.value.add(e.projectId))))}function G(e){const t=["running","waiting","starting"].includes(e.status),r=s.activeSessions.findIndex(n=>n.id===e.id);t?r>=0?s.activeSessions[r]=e:s.activeSessions.unshift(e):r>=0&&(s.activeSessions.splice(r,1),delete _[e.id],delete u[e.id],delete m[e.id])}function W(e){const t=s.activeSessions.findIndex(r=>r.id===e);t>=0&&s.activeSessions.splice(t,1),delete _[e],delete u[e],delete m[e]}function Y(e,t){_[e]=t,u[e]=!1,m[e]=!1}function $(e,t,r){const n=o=>{U(o.runId,o.buttonId,o.sessionId),d.appendOutput(o.runId,o.output)};e(c.COMMAND_RUN_OUTPUT,n),r.push(()=>t(c.COMMAND_RUN_OUTPUT,n));const k=o=>{U(o.runId,o.buttonId,o.sessionId),d.completeRun(o.runId,o.exitCode,o.output)};e(c.COMMAND_RUN_COMPLETE,k),r.push(()=>t(c.COMMAND_RUN_COMPLETE,k));const T=o=>{U(o.runId,o.buttonId,o.sessionId),d.errorRun(o.runId,o.error)};e(c.COMMAND_RUN_ERROR,T),r.push(()=>t(c.COMMAND_RUN_ERROR,T))}Z(async()=>{s.restoreStatusFilter(),s.restoreStarredFilter(),await s.fetchActiveSessions(),await M(),v.push(P(H)),v.push(B(G)),v.push(L(W)),v.push(V(Y));const{on:e,off:t}=j();$(e,t,v),N=setInterval(()=>{s.fetchActiveSessions(!1)},3e4)}),ee(()=>{v.forEach(e=>e()),N&&clearInterval(N)}),te(()=>s.activeSessions,()=>{z(),M()},{immediate:!0});async function z(){const t=s.activeSessions.filter(r=>!_[r.id]&&!u[r.id]).map(r=>r.id);if(t.length!==0){for(const r of t)u[r]=!0,m[r]=!1;try{const r=await x.getSessionSummariesBatch(t);for(const n of t)r[n]&&(_[n]=r[n]),u[n]=!1}catch(r){console.warn("Failed to fetch summaries batch:",r.message);for(const n of t)m[n]=!0,u[n]=!1}}}async function q(e){var t;u[e]=!0,m[e]=!1;try{const r=await x.getSessionSummary(e);r&&(_[e]=r)}catch(r){((t=r.response)==null?void 0:t.status)!==404&&(console.warn(`Failed to fetch summary for session ${e}:`,r.message),m[e]=!0)}finally{u[e]=!1}}async function J(e){m[e]=!1,await q(e)}return(e,t)=>{const r=oe("router-link");return a(),l("div",{class:"container","data-testid":"active-sessions-view","data-state":F.value},[t[3]||(t[3]=f("div",{class:"page-header"},[f("div",null,[f("p",{class:"page-description"}," All active sessions across your projects ")])],-1)),f("div",ue,[f("div",fe,[(a(),l(C,null,D(["running","idle"],n=>f("button",{key:n,class:O(["filter-btn",{active:S(s).statusFilter===n}]),onClick:k=>g(n)},b(n),11,Se)),64)),f("button",{class:O(["filter-btn star-btn",{"star-filter-active":S(s).starredFilter==="starred","star-filter-unstarred":S(s).starredFilter==="unstarred","star-filter-all":S(s).starredFilter===null}]),title:p.value,onClick:h},[S(s).starredFilter==="starred"?(a(),l("span",me,"⭐")):S(s).starredFilter==="unstarred"?(a(),l("span",he,"⭐")):(a(),l("span",_e,"☆"))],10,pe)])]),S(s).loading?(a(),l("div",ve,[(a(),l(C,null,D(3,n=>f("div",{key:n,class:"skeleton card",style:{height:"120px"}})),64))])):S(s).error?(a(),l("div",ye,b(S(s).error),1)):S(s).activeSessions.length===0?(a(),l("div",Fe,[t[1]||(t[1]=f("p",null,"No active sessions. All sessions are completed or there are no sessions yet.",-1)),se(r,{to:"/",class:"btn btn-primary"},{default:re(()=>[...t[0]||(t[0]=[ne(" View Projects ",-1)])]),_:1})])):i.value.length===0?(a(),l("div",Ee,[...t[2]||(t[2]=[f("p",null,"No sessions match the current filter.",-1)])])):(a(),l("div",Ie,[(a(!0),l(C,null,D(i.value,n=>(a(),ae(le,{key:n.id,session:n,"show-project":!0,"show-summary":!0,summary:_[n.id],"summary-loading":u[n.id],"summary-error":m[n.id],onRetrySummary:J},null,8,["session","summary","summary-loading","summary-error"]))),128))]))],8,de)}}},Re=X(we,[["__scopeId","data-v-9a53578e"]]);export{Re as default};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{p as q,_ as O,a as r,c as i,b as t,F as k,r as $,t as f,i as _,J as A,z as p,g as W,f as F,x as z,w as J,o as G,G as H,d as w,u as m,n as B}from"./index-
|
|
1
|
+
import{p as q,_ as O,a as r,c as i,b as t,F as k,r as $,t as f,i as _,J as A,z as p,g as W,f as F,x as z,w as J,o as G,G as H,d as w,u as m,n as B}from"./index-CvXApbVC.js";import{a as L}from"./ApiClient-DfbJwzpz.js";const U=q("agentLogs",{state:()=>({logs:[],pagination:{total:0,limit:25,offset:0,hasMore:!1},filters:{agentType:null,callType:null,status:null,model:null,startDate:null,endDate:null,sessionId:null},filterOptions:{agentTypes:[],callTypes:[],statuses:[],models:[]},perPage:25,currentPage:1,sortBy:"started_at",sortOrder:"DESC",loading:!1,error:null}),getters:{totalPages:s=>Math.ceil(s.pagination.total/s.perPage)||0,activeFilters:s=>{const e={};for(const[y,h]of Object.entries(s.filters))h!=null&&(e[y]=h);return e}},actions:{async fetchLogs(){this.loading=!0,this.error=null;try{const s=(this.currentPage-1)*this.perPage,e=await L.getAgentCallLogs({limit:this.perPage,offset:s,...this.activeFilters,sortBy:this.sortBy,sortOrder:this.sortOrder});this.logs=e.logs,this.pagination=e.pagination}catch(s){this.error=s.message}finally{this.loading=!1}},async fetchFilterOptions(){try{const s=await L.getAgentCallFilterOptions();this.filterOptions=s}catch(s){console.error("Failed to fetch filter options:",s)}},setFilter(s,e){this.filters[s]=e||null,this.currentPage=1,this.fetchLogs()},clearFilters(){Object.keys(this.filters).forEach(s=>this.filters[s]=null),this.currentPage=1,this.fetchLogs()},setPage(s){this.currentPage=s,this.fetchLogs()},setPerPage(s){this.perPage=s,this.currentPage=1,this.fetchLogs()},setSort(s,e){this.sortBy=s,this.sortOrder=e,this.currentPage=1,this.fetchLogs()},async clearAllLogs(){this.loading=!0,this.error=null;try{await L.deleteAllAgentCallLogs(),this.logs=[],this.pagination={total:0,limit:this.perPage,offset:0,hasMore:!1},this.currentPage=1,await this.fetchFilterOptions()}catch(s){this.error=s.message}finally{this.loading=!1}}}}),Z={class:"filter-bar"},Q={class:"filter-row"},X={class:"filter-group"},Y=["value"],K={class:"filter-group"},tt=["value"],et={class:"filter-group"},st=["value"],lt=["value"],at={class:"filter-group"},nt=["value"],ot=["value"],rt={class:"filter-group"},it=["value"],ut=["value"],dt={class:"filter-group"},ct=["value"],ft=["value"],gt={__name:"AgentLogFilters",props:{filters:{type:Object,required:!0},filterOptions:{type:Object,required:!0},hasActiveFilters:{type:Boolean,default:!1},confirming:{type:Boolean,default:!1}},emits:["filter-change","date-change","clear-filters","clear-all"],setup(s){const e=s;function y(v){return new Date(v).toISOString().slice(0,10)}const h=p(()=>e.filters.startDate?y(e.filters.startDate):""),b=p(()=>e.filters.endDate?y(e.filters.endDate):"");return(v,a)=>(r(),i("div",Z,[t("div",Q,[t("div",X,[a[8]||(a[8]=t("label",{class:"filter-label"},"From",-1)),t("input",{type:"date",class:"filter-input",value:h.value,onChange:a[0]||(a[0]=n=>v.$emit("date-change","startDate",n))},null,40,Y)]),t("div",K,[a[9]||(a[9]=t("label",{class:"filter-label"},"To",-1)),t("input",{type:"date",class:"filter-input",value:b.value,onChange:a[1]||(a[1]=n=>v.$emit("date-change","endDate",n))},null,40,tt)]),t("div",et,[a[11]||(a[11]=t("label",{class:"filter-label"},"Agent Type",-1)),t("select",{class:"filter-select",value:s.filters.agentType||"",onChange:a[2]||(a[2]=n=>v.$emit("filter-change","agentType",n.target.value))},[a[10]||(a[10]=t("option",{value:""}," All ",-1)),(r(!0),i(k,null,$(s.filterOptions.agentTypes,n=>(r(),i("option",{key:n,value:n},f(n),9,lt))),128))],40,st)]),t("div",at,[a[13]||(a[13]=t("label",{class:"filter-label"},"Call Type",-1)),t("select",{class:"filter-select",value:s.filters.callType||"",onChange:a[3]||(a[3]=n=>v.$emit("filter-change","callType",n.target.value))},[a[12]||(a[12]=t("option",{value:""}," All ",-1)),(r(!0),i(k,null,$(s.filterOptions.callTypes,n=>(r(),i("option",{key:n,value:n},f(n),9,ot))),128))],40,nt)]),t("div",rt,[a[15]||(a[15]=t("label",{class:"filter-label"},"Status",-1)),t("select",{class:"filter-select",value:s.filters.status||"",onChange:a[4]||(a[4]=n=>v.$emit("filter-change","status",n.target.value))},[a[14]||(a[14]=t("option",{value:""}," All ",-1)),(r(!0),i(k,null,$(s.filterOptions.statuses,n=>(r(),i("option",{key:n,value:n},f(n),9,ut))),128))],40,it)]),t("div",dt,[a[17]||(a[17]=t("label",{class:"filter-label"},"Model",-1)),t("select",{class:"filter-select",value:s.filters.model||"",onChange:a[5]||(a[5]=n=>v.$emit("filter-change","model",n.target.value))},[a[16]||(a[16]=t("option",{value:""}," All ",-1)),(r(!0),i(k,null,$(s.filterOptions.models,n=>(r(),i("option",{key:n,value:n},f(n),9,ft))),128))],40,ct)]),s.hasActiveFilters?(r(),i("button",{key:0,class:"btn-clear",onClick:a[6]||(a[6]=n=>v.$emit("clear-filters"))}," Clear Filters ")):_("",!0),t("button",{class:A(["btn-clear-all",{confirming:s.confirming}]),onClick:a[7]||(a[7]=n=>v.$emit("clear-all"))},f(s.confirming?"Confirm Clear All?":"Clear All Logs"),3)])]))}},vt=O(gt,[["__scopeId","data-v-780329d3"]]),pt={class:"table-wrapper"},ht={key:0,class:"loading-overlay"},yt={class:"log-table"},bt=["onClick"],mt={key:0,class:"sort-indicator"},kt={key:0},$t=["colspan"],Ct={class:"td"},_t={class:"status-text"},Tt={class:"td font-mono text-sm"},At={class:"td font-mono text-sm"},Pt={class:"td model-cell"},Lt={class:"td"},Ot={key:1},St={class:"td"},Dt={key:1},Ft=["title"],wt={class:"td text-right"},Bt=["title"],Mt={__name:"AgentLogTable",props:{logs:{type:Array,required:!0},loading:{type:Boolean,default:!1},sortBy:{type:String,default:"started_at"},sortOrder:{type:String,default:"DESC"}},emits:["sort"],setup(s){const e=[{key:"status",label:"Status",sortable:!0},{key:"agent_type",label:"Agent Type",sortable:!0},{key:"call_type",label:"Call Type",sortable:!0},{key:"model",label:"Model",sortable:!0},{key:"session",label:"Session",sortable:!1},{key:"effort",label:"Effort",sortable:!1},{key:"total_tokens",label:"Tokens",sortable:!0},{key:"duration_ms",label:"Duration",sortable:!0},{key:"started_at",label:"Started",sortable:!0}];function y(l){switch(l){case"completed":return"dot-completed";case"error":return"dot-error";case"streaming":case"pending":return"dot-pending";default:return"dot-default"}}function h(l){const d=[];return l.inputTokens&&d.push(`Input: ${b(l.inputTokens)}`),l.outputTokens&&d.push(`Output: ${b(l.outputTokens)}`),l.thinkingTokens&&d.push(`Thinking: ${b(l.thinkingTokens)}`),l.cacheReadTokens&&d.push(`Cache Read: ${b(l.cacheReadTokens)}`),l.cacheWriteTokens&&d.push(`Cache Write: ${b(l.cacheWriteTokens)}`),d.join(`
|
|
2
2
|
`)||"No token data"}function b(l){return l==null||l===0?"0":l.toLocaleString()}function v(l){if(l==null)return"—";if(l<1e3)return`${l}ms`;if(l<6e4)return`${(l/1e3).toFixed(1)}s`;const d=Math.floor(l/6e4),C=Math.floor(l%6e4/1e3);return`${d}m ${C}s`}function a(l){const d=Date.now()-l;return d<6e4?"just now":d<36e5?`${Math.floor(d/6e4)}m ago`:d<864e5?`${Math.floor(d/36e5)}h ago`:`${Math.floor(d/864e5)}d ago`}function n(l){try{if(l.metadata)return(typeof l.metadata=="string"?JSON.parse(l.metadata):l.metadata).effortLevel||null}catch{}return null}function P(l){return{auto:"Auto",low:"Low",medium:"Med",high:"High",max:"Max"}[l]||l}return(l,d)=>{const C=W("router-link");return r(),i("div",pt,[s.loading?(r(),i("div",ht,[...d[0]||(d[0]=[t("div",{class:"spinner"},null,-1)])])):_("",!0),t("table",yt,[t("thead",null,[t("tr",null,[(r(),i(k,null,$(e,o=>t("th",{key:o.key,class:A(["th",o.sortable?"sortable":""]),onClick:S=>o.sortable?l.$emit("sort",o.key):null},[F(f(o.label)+" ",1),o.sortable&&s.sortBy===o.key?(r(),i("span",mt,f(s.sortOrder==="ASC"?"↑":"↓"),1)):_("",!0)],10,bt)),64))])]),t("tbody",null,[!s.loading&&s.logs.length===0?(r(),i("tr",kt,[t("td",{colspan:e.length,class:"empty-cell"}," No agent call logs found. ",8,$t)])):_("",!0),(r(!0),i(k,null,$(s.logs,o=>(r(),i("tr",{key:o.id,class:"log-row"},[t("td",Ct,[t("span",{class:A(["status-dot",y(o.status)])},null,2),t("span",_t,f(o.status),1)]),t("td",Tt,f(o.agentType||"—"),1),t("td",At,f(o.callType||"—"),1),t("td",Pt,f(o.model||"—"),1),t("td",Lt,[o.sessionId?(r(),z(C,{key:0,to:`/sessions/${o.sessionId}`,class:"session-link"},{default:J(()=>[F(f(o.sessionName||o.sessionId),1)]),_:2},1032,["to"])):(r(),i("span",Ot,"—"))]),t("td",St,[n(o)?(r(),i("span",{key:0,class:A(["effort-badge",`effort-${n(o)}`])},f(P(n(o))),3)):(r(),i("span",Dt,"—"))]),t("td",{class:"td text-right",title:h(o)},f(b(o.totalTokens)),9,Ft),t("td",wt,f(v(o.durationMs)),1),t("td",{class:"td text-right",title:o.startedAt?new Date(o.startedAt).toLocaleString():""},f(o.startedAt?a(o.startedAt):"—"),9,Bt)]))),128))])])])}}},It=O(Mt,[["__scopeId","data-v-20d5856a"]]),Nt={class:"agent-logs"},Et={key:0,class:"error-banner"},Vt={key:1,class:"pagination-bar"},xt={class:"per-page-control"},jt=["value"],Rt=["value"],qt={class:"page-info"},Wt={class:"page-buttons"},zt=["disabled"],Jt=["disabled"],Gt={key:0,class:"page-ellipsis"},Ht=["onClick"],Ut=["disabled"],Zt=["disabled"],Qt={__name:"AgentLogsView",setup(s){const e=U(),y=B(!1),h=B(null),b=p(()=>e.logs),v=p(()=>e.pagination),a=p(()=>e.filters),n=p(()=>e.filterOptions),P=p(()=>e.perPage),l=p(()=>e.currentPage),d=p(()=>e.totalPages),C=p(()=>e.sortBy),o=p(()=>e.sortOrder),S=p(()=>e.loading),D=p(()=>e.error),M=p(()=>Object.values(e.filters).some(g=>g!=null)),I=p(()=>v.value.total===0?0:v.value.offset+1),N=p(()=>Math.min(v.value.offset+P.value,v.value.total)),E=p(()=>{const g=d.value,c=l.value;if(g<=7)return Array.from({length:g},(T,R)=>R+1);const u=[];return c<=4?u.push(1,2,3,4,5,"...",g):c>=g-3?u.push(1,"...",g-4,g-3,g-2,g-1,g):u.push(1,"...",c-1,c,c+1,"...",g),u});function V(g){C.value===g?e.setSort(g,o.value==="ASC"?"DESC":"ASC"):e.setSort(g,"DESC")}function x(g,c){const u=c.target.value;if(!u){e.setFilter(g,null);return}const T=new Date(`${u}T00:00:00Z`).getTime();e.filters[g]=T,e.currentPage=1,e.fetchLogs()}function j(){y.value?(h.value&&(clearTimeout(h.value),h.value=null),y.value=!1,e.clearAllLogs()):(y.value=!0,h.value=setTimeout(()=>{y.value=!1,h.value=null},3e3))}return G(()=>{e.fetchLogs(),e.fetchFilterOptions()}),H(()=>{h.value&&clearTimeout(h.value)}),(g,c)=>(r(),i("div",Nt,[w(vt,{filters:a.value,"filter-options":n.value,"has-active-filters":M.value,confirming:y.value,onFilterChange:c[0]||(c[0]=(u,T)=>m(e).setFilter(u,T)),onDateChange:x,onClearFilters:c[1]||(c[1]=u=>m(e).clearFilters()),onClearAll:j},null,8,["filters","filter-options","has-active-filters","confirming"]),D.value?(r(),i("div",Et,[t("span",null,f(D.value),1),t("button",{class:"btn-retry",onClick:c[2]||(c[2]=u=>m(e).fetchLogs())}," Retry ")])):_("",!0),w(It,{logs:b.value,loading:S.value,"sort-by":C.value,"sort-order":o.value,onSort:V},null,8,["logs","loading","sort-by","sort-order"]),v.value.total>0?(r(),i("div",Vt,[t("div",xt,[c[8]||(c[8]=t("label",{class:"filter-label"},"Per page",-1)),t("select",{class:"filter-select per-page-select",value:P.value,onChange:c[3]||(c[3]=u=>m(e).setPerPage(parseInt(u.target.value)))},[(r(),i(k,null,$([10,25,50,100],u=>t("option",{key:u,value:u},f(u),9,Rt)),64))],40,jt)]),t("div",qt," Showing "+f(I.value)+"–"+f(N.value)+" of "+f(v.value.total)+" logs ",1),t("div",Wt,[t("button",{class:"page-btn",disabled:l.value===1,onClick:c[4]||(c[4]=u=>m(e).setPage(1))}," « ",8,zt),t("button",{class:"page-btn",disabled:l.value===1,onClick:c[5]||(c[5]=u=>m(e).setPage(l.value-1))}," ‹ ",8,Jt),(r(!0),i(k,null,$(E.value,u=>(r(),i(k,{key:u},[u==="..."?(r(),i("span",Gt,"…")):(r(),i("button",{key:1,class:A(["page-btn",{"page-btn-active":u===l.value}]),onClick:T=>m(e).setPage(u)},f(u),11,Ht))],64))),128)),t("button",{class:"page-btn",disabled:l.value===d.value,onClick:c[6]||(c[6]=u=>m(e).setPage(l.value+1))}," › ",8,Ut),t("button",{class:"page-btn",disabled:l.value===d.value,onClick:c[7]||(c[7]=u=>m(e).setPage(d.value))}," » ",8,Zt)])])):_("",!0)]))}},Kt=O(Qt,[["__scopeId","data-v-e1df2011"]]);export{Kt as default};
|
package/packages/web/dist/assets/{ArchiveConfirmModal-DXZYdzHR.js → ArchiveConfirmModal-DJERn5XO.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as B,k as U,l as I,o as O,G as A,a as r,c,b as e,t as p,F as j,r as q,J as z,m as L,y as D,i as h,s as N,j as R,z as k,n as g,x as G,f as E,T as J}from"./index-
|
|
1
|
+
import{_ as B,k as U,l as I,o as O,G as A,a as r,c,b as e,t as p,F as j,r as q,J as z,m as L,y as D,i as h,s as N,j as R,z as k,n as g,x as G,f as E,T as J}from"./index-CvXApbVC.js";import{u as K}from"./SessionLogStream-BvXUNNBZ.js";const P={class:"modal-content",role:"dialog","aria-labelledby":"modal-title"},H={class:"modal-body"},Q={class:"moving-info"},W={class:"moving-session-name"},X={key:0,class:"empty-state"},Y={key:1,class:"lanes-list"},Z={class:"lane-label"},ee=["name","value","disabled","aria-disabled","aria-label"],ae={class:"lane-info"},ne={class:"lane-name"},oe={key:0,class:"lane-current-badge"},te={key:1,class:"lane-automation-icon",title:"Automation enabled"},se={key:2,class:"automation-option"},le={class:"checkbox-label"},ie={class:"modal-footer"},de=["disabled"],re=["disabled","aria-label"],ce=["disabled"],ue={__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(n,{emit:_}){const o=n,u=_,v=K(),f=U(),i=g(null),m=g(!0),b=g(!1),d=g(!1),s=k(()=>{var a;return((a=v.board)==null?void 0:a.lanes)||[]}),C=k(()=>o.sessionName?o.sessionName:o.cardId||"Unnamed session"),x=k(()=>i.value&&s.value.find(a=>a.id===i.value)||null),V=k(()=>x.value?w(x.value):!1),S=k(()=>i.value&&i.value!==o.currentLaneId);function w(a){return a?!!(a.onEnterTemplateId||a.onEnterPrompt):!1}function y(){u("update:isOpen",!1),u("close"),i.value=null,m.value=!0}async function F(){if(!(!S.value||!o.cardId)){b.value=!0;try{await v.moveCard(o.projectId,o.cardId,i.value,{runOnEnterTemplate:m.value}),f.success("Card moved successfully"),u("moved"),y()}catch(a){console.error("Failed to move card:",a),f.error(a.message||"Failed to move card")}finally{b.value=!1}}}async function T(){if(confirm("Remove this session from the board?")){d.value=!0;try{await v.removeCard(o.projectId,o.cardId),f.success("Session removed from board"),u("close")}catch(a){console.error("Failed to remove card:",a),f.error(a.message||"Failed to remove session")}finally{d.value=!1}}}I(i,(a,t)=>{if(a!==t){const l=s.value.find(M=>M.id===a);m.value=w(l)}}),I(()=>o.isOpen,a=>{a&&(i.value=null,m.value=!0)});function $(a){a.key==="Escape"&&o.isOpen&&y()}return O(()=>{document.addEventListener("keydown",$)}),A(()=>{document.removeEventListener("keydown",$)}),(a,t)=>n.isOpen?(r(),c("div",{key:0,class:"modal-backdrop",onClick:R(y,["self"])},[e("div",P,[e("div",{class:"modal-header"},[t[2]||(t[2]=e("h2",{id:"modal-title",class:"modal-title"}," Move to Lane ",-1)),e("button",{class:"close-btn","aria-label":"Close modal",onClick:y}," × ")]),e("div",H,[e("div",Q,[t[3]||(t[3]=e("span",{class:"moving-label"},"Moving:",-1)),e("span",W,p(C.value),1)]),s.value.length===0?(r(),c("div",X,[...t[4]||(t[4]=[e("p",null,"No lanes available",-1)])])):(r(),c("div",Y,[(r(!0),c(j,null,q(s.value,l=>(r(),c("div",{key:l.id,class:z(["lane-row",{"lane-row-current":l.id===n.currentLaneId,"lane-row-disabled":l.id===n.currentLaneId}])},[e("label",Z,[L(e("input",{"onUpdate:modelValue":t[0]||(t[0]=M=>i.value=M),type:"radio",name:`lane-${n.cardId}`,value:l.id,disabled:l.id===n.currentLaneId,"aria-disabled":l.id===n.currentLaneId,"aria-label":`Move to ${l.name}`},null,8,ee),[[D,i.value]]),e("span",ae,[e("span",ne,p(l.name),1),l.id===n.currentLaneId?(r(),c("span",oe,"(current)")):h("",!0),w(l)?(r(),c("span",te,[...t[5]||(t[5]=[e("svg",{xmlns:"http://www.w3.org/2000/svg",width:"14",height:"14",viewBox:"0 0 24 24",fill:"currentColor"},[e("path",{d:"M13 10V3L4 14h7v7l9-11h-7z"})],-1)])])):h("",!0)])])],2))),128))])),V.value?(r(),c("div",se,[e("label",le,[L(e("input",{"onUpdate:modelValue":t[1]||(t[1]=l=>m.value=l),type:"checkbox","aria-label":"Run automation on entry"},null,512),[[N,m.value]]),t[6]||(t[6]=e("span",null,"Run automation on entry",-1))])])):h("",!0)]),e("div",ie,[e("button",{class:"btn btn-secondary",disabled:d.value,onClick:y}," Cancel ",8,de),e("button",{class:"btn btn-danger",disabled:d.value,"aria-label":`Remove ${C.value} from board`,onClick:T},p(d.value?"Removing...":"Remove from Board"),9,re),e("button",{class:"btn btn-primary",disabled:!S.value||b.value||d.value,"aria-label":"Move card to selected lane",onClick:F},p(b.value?"Moving...":"Move"),9,ce)])])])):h("",!0)}},Ie=B(ue,[["__scopeId","data-v-bddc7788"]]),ve={class:"modal-content",role:"dialog","aria-labelledby":"archive-modal-title"},me={class:"modal-header"},be=["disabled"],fe={class:"modal-body"},pe={class:"confirm-message"},he={key:0,class:"cleanup-option"},ye={class:"checkbox-label"},ke={class:"modal-footer"},ge=["disabled"],Ce=["disabled"],_e={__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(n,{emit:_}){const o=n,u=_,v=g(!0);I(()=>o.isOpen,d=>{d&&(v.value=!0)});function f(){u("confirm",v.value)}function i(){o.loading||u("cancel")}function m(){o.loading||u("cancel")}function b(d){d.key==="Escape"&&o.isOpen&&!o.loading&&u("cancel")}return O(()=>{document.addEventListener("keydown",b)}),A(()=>{document.removeEventListener("keydown",b)}),(d,s)=>(r(),G(J,{to:"body"},[n.isOpen?(r(),c("div",{key:0,class:"modal-backdrop",onClick:R(m,["self"])},[e("div",ve,[e("div",me,[s[1]||(s[1]=e("h2",{id:"archive-modal-title",class:"modal-title"}," Archive Session ",-1)),e("button",{class:"close-btn","aria-label":"Close modal",disabled:n.loading,onClick:i}," × ",8,be)]),e("div",fe,[e("p",pe,[s[2]||(s[2]=E(" Are you sure you want to archive ",-1)),e("strong",null,p(n.sessionName),1),s[3]||(s[3]=E("? ",-1))]),n.hasCleanupScript?(r(),c("div",he,[e("label",ye,[L(e("input",{"onUpdate:modelValue":s[0]||(s[0]=C=>v.value=C),type:"checkbox","aria-label":"Run git worktree cleanup"},null,512),[[N,v.value]]),s[4]||(s[4]=e("span",null,"Run git worktree cleanup",-1))])])):h("",!0)]),e("div",ke,[e("button",{class:"btn btn-secondary",disabled:n.loading,onClick:i}," Cancel ",8,ge),e("button",{class:"btn btn-primary",disabled:n.loading,onClick:f},p(n.loading?"Archiving...":"Archive"),9,Ce)])])])):h("",!0)]))}},Le=B(_e,[["__scopeId","data-v-140e797f"]]);export{Le as A,Ie as M};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as N,k as U,o as V,a as r,c as u,b as s,f as _,d as j,w as P,u as I,t as i,m as k,v as B,i as v,s as J,j as h,z as M,B as $,n as m,g as A,h as q}from"./index-
|
|
1
|
+
import{_ as N,k as U,o as V,a as r,c as u,b as s,f as _,d as j,w as P,u as I,t as i,m as k,v as B,i as v,s as J,j as h,z as M,B as $,n as m,g as A,h as q}from"./index-CvXApbVC.js";import{u as F}from"./commandButtons-DejH0rVN.js";import{a as z}from"./ApiClient-DfbJwzpz.js";const p={PROJECT_ID:"projectId",PROJECT_ID_ALT:"id",BUTTON_ID:"buttonId",SESSION_ID:"id",SESSION_TAB:"tab"},W={class:"container command-button-detail"},G={key:0,class:"loading-state"},H={key:1,class:"form-container"},K={class:"form-header"},Q={class:"form-group"},X={key:0,class:"form-error"},Y={class:"form-group"},Z={key:0,class:"form-error"},ee={class:"form-group"},se={key:0,class:"form-error"},te={class:"form-group form-group-checkbox"},oe={for:"showOnList",class:"checkbox-label"},ae={class:"form-actions"},le=["disabled"],ne={key:0,class:"form-error-message"},re={class:"modal-body"},ue={class:"modal-footer"},de=["disabled"],ie={__name:"CommandButtonDetailView",setup(me){const d=$(),w=q(),y=F(),b=U(),D=m(!1),O=m(!1),g=m(!1),f=m(!1),c=m(null),a=m({}),t=m({label:"",command:"",sortOrder:0,showOnList:!1}),C=M(()=>!!d.params.buttonId),S=async o=>{D.value=!0;try{const e=d.params[p.PROJECT_ID];let l=y.getButtonById(o);l||(l=await z.getCommandButton(e,o)),l&&(t.value={label:l.label,command:l.command,sortOrder:l.sortOrder||0,showOnList:l.showOnList||!1})}catch(e){c.value=`Failed to load button: ${e.message}`}finally{D.value=!1}},T=()=>(a.value={},t.value.label.trim()||(a.value.label="Label is required"),t.value.command.trim()||(a.value.command="Command is required"),t.value.sortOrder<0&&(a.value.sortOrder="Sort order must be 0 or greater"),Object.keys(a.value).length===0),L=async()=>{if(c.value=null,!!T()){O.value=!0;try{const o=d.params[p.PROJECT_ID],e={label:t.value.label,command:t.value.command,sortOrder:t.value.sortOrder,showOnList:t.value.showOnList};C.value?(await y.updateButton(o,d.params[p.BUTTON_ID],e),b.success("Circus Command updated")):(await y.createButton(o,e),b.success("Circus Command created")),w.push(`/projects/${o}/sessions`)}catch(o){c.value=o.message,b.error(o.message)}finally{O.value=!1}}},x=()=>{w.back()},E=()=>{f.value=!0},R=async()=>{g.value=!0;try{const o=d.params[p.PROJECT_ID],e=d.params[p.BUTTON_ID];await y.deleteButton(o,e),b.success("Circus Command deleted"),f.value=!1,w.push(`/projects/${o}/sessions`)}catch(o){c.value=o.message,b.error(o.message)}finally{g.value=!1}};return V(async()=>{C.value&&await S(d.params.buttonId)}),(o,e)=>{const l=A("router-link");return r(),u("div",W,[D.value?(r(),u("div",G,[...e[7]||(e[7]=[s("span",{class:"loading-spinner"},null,-1),_(" Loading... ",-1)])])):(r(),u("div",H,[s("div",K,[j(l,{to:`/projects/${I(d).params[I(p).PROJECT_ID]}/sessions`,class:"btn btn-outline-secondary"},{default:P(()=>[...e[8]||(e[8]=[_(" ← Back ",-1)])]),_:1},8,["to"]),s("h2",null,i(C.value?"Edit Circus Command":"New Circus Command"),1)]),s("form",{class:"command-button-form",onSubmit:h(L,["prevent"])},[s("div",Q,[e[9]||(e[9]=s("label",{for:"label"},"Label",-1)),k(s("input",{id:"label","onUpdate:modelValue":e[0]||(e[0]=n=>t.value.label=n),type:"text",class:"form-input",placeholder:"e.g., Run Tests",required:""},null,512),[[B,t.value.label]]),a.value.label?(r(),u("span",X,i(a.value.label),1)):v("",!0)]),s("div",Y,[e[10]||(e[10]=s("label",{for:"command"},"Command",-1)),k(s("textarea",{id:"command","onUpdate:modelValue":e[1]||(e[1]=n=>t.value.command=n),class:"form-input",placeholder:"e.g., npm test",rows:"4",required:""},null,512),[[B,t.value.command]]),a.value.command?(r(),u("span",Z,i(a.value.command),1)):v("",!0)]),s("div",ee,[e[11]||(e[11]=s("label",{for:"sortOrder"},"Sort Order (optional)",-1)),k(s("input",{id:"sortOrder","onUpdate:modelValue":e[2]||(e[2]=n=>t.value.sortOrder=n),type:"number",class:"form-input",placeholder:"0",min:"0"},null,512),[[B,t.value.sortOrder,void 0,{number:!0}]]),a.value.sortOrder?(r(),u("span",se,i(a.value.sortOrder),1)):v("",!0),e[12]||(e[12]=s("span",{class:"form-help"},"Buttons are displayed in ascending order. Leave as 0 for default.",-1))]),s("div",te,[s("label",oe,[k(s("input",{id:"showOnList","onUpdate:modelValue":e[3]||(e[3]=n=>t.value.showOnList=n),type:"checkbox",class:"form-checkbox"},null,512),[[J,t.value.showOnList]]),e[13]||(e[13]=s("span",null,"Show status indicator on session lists",-1))]),e[14]||(e[14]=s("span",{class:"form-help"},"When enabled, the button status will be displayed on session cards",-1))]),s("div",ae,[s("button",{type:"button",class:"btn btn-outline-secondary",onClick:x}," Cancel "),C.value?(r(),u("button",{key:0,type:"button",class:"btn btn-outline-danger",onClick:E}," Delete ")):v("",!0),s("button",{type:"submit",class:"btn btn-primary",disabled:O.value},i(O.value?"Saving...":C.value?"Update":"Create"),9,le)]),c.value?(r(),u("div",ne,i(c.value),1)):v("",!0)],32)])),f.value?(r(),u("div",{key:2,class:"modal-overlay",onClick:e[6]||(e[6]=n=>f.value=!1)},[s("div",{class:"modal-dialog",onClick:e[5]||(e[5]=h(()=>{},["stop"]))},[e[18]||(e[18]=s("div",{class:"modal-header"},[s("h4",null,"Delete Circus Command")],-1)),s("div",re,[s("p",null,[e[15]||(e[15]=_('Are you sure you want to delete "',-1)),s("strong",null,i(t.value.label),1),e[16]||(e[16]=_('"?',-1))]),e[17]||(e[17]=s("p",null,"This action cannot be undone.",-1))]),s("div",ue,[s("button",{class:"btn btn-outline-secondary",onClick:e[4]||(e[4]=n=>f.value=!1)}," Cancel "),s("button",{class:"btn btn-danger",disabled:g.value,onClick:R},i(g.value?"Deleting...":"Delete"),9,de)])])])):v("",!0)])}}},be=N(ie,[["__scopeId","data-v-471675f8"]]);export{be as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{p as g,a7 as f,_ as b,k as I,n as h,l as E,a as p,c as m,b as _,F as j,r as w,t as L,u as x,z as k,U as C}from"./index-CvXApbVC.js";import{a as i}from"./ApiClient-DfbJwzpz.js";import{u as O}from"./sessions-DETEyjPI.js";const P=["low","medium","high","max","auto"],H=[{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)"}],K="claude-opus-4-7",Q=[{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"}],Y=[{id:"gemini-2.5-pro",name:"Gemini 2.5 Pro",description:"Most capable reasoning model",seedId:"google-gemini-2-5-pro"},{id:"gemini-2.5-flash",name:"Gemini 2.5 Flash",description:"Fast & cost-efficient",seedId:"google-gemini-2-5-flash"},{id:"gemini-2.5-flash-lite",name:"Gemini 2.5 Flash Lite",description:"Lightweight & cost-efficient",seedId:"google-gemini-2-5-flash-lite"}],$=g("templates",{state:()=>({projectTemplates:[],globalTemplates:[],currentProjectId:null,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),quickResponseTemplates:t=>{const e=s=>s.filter(o=>o.showInQuickResponses).slice().sort((o,l)=>(o.quickResponseSortOrder??0)-(l.quickResponseSortOrder??0)||(o.createdAt??0)-(l.createdAt??0)||o.name.localeCompare(l.name));return{project:e(t.projectTemplates),global:e(t.globalTemplates)}},hasQuickResponseTemplates(){return this.quickResponseTemplates.project.length>0||this.quickResponseTemplates.global.length>0}},actions:{async fetchProjectTemplates(t){this.loading=!0,this.error=null;try{const e=await i.getProjectTemplates(t);this.projectTemplates=e.project||[],this.globalTemplates=e.global||[],this.currentProjectId=t}catch(e){this.error=e.message}finally{this.loading=!1}},async createProjectTemplate(t,e){this.loading=!0,this.error=null;try{const s=await i.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 i.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 i.updateTemplate(t,e);let o=this.projectTemplates.findIndex(l=>l.id===t);return o!==-1?this.projectTemplates[o]=s:(o=this.globalTemplates.findIndex(l=>l.id===t),o!==-1&&(this.globalTemplates[o]=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 i.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}}}}),F=g("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 i.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}}}),R=Symbol("overlay-sessions-store"),G=Symbol("overlay-todos-store");function D(){return f(R,O())}function J(){return f(G,F())}const V={class:"effort-selector"},M=["value","disabled"],A=["value"],B={__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,o=e,l=D(),T=I(),d=h(!1),S=["auto",...P.filter(a=>a!=="auto")].map(a=>({value:a,label:`${a.charAt(0).toUpperCase()+a.slice(1)} Effort`})),u=k(()=>{var a;return s.sessionId?((a=l.currentSession)==null?void 0:a.effortLevel)||"auto":s.modelValue||"auto"}),r=h(u.value),y=C(s,"modelValue");E([u,y],([a])=>{r.value=a||"auto"},{flush:"sync"});async function v(a){if(!d.value&&r.value!==a)if(r.value=a,s.sessionId){d.value=!0;try{await l.updateSessionFields(s.sessionId,{effortLevel:a==="auto"?null:a})}catch(c){r.value=u.value,T.error(c.message)}finally{d.value=!1}}else o("update:modelValue",a==="auto"?null:a)}return(a,c)=>(p(),m("div",V,[_("select",{id:"effort-select",value:r.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(j,null,w(x(S),n=>(p(),m("option",{key:n.value,value:n.value},L(n.label),9,A))),128))],40,M)]))}},W=b(B,[["__scopeId","data-v-8bc1fe64"]]);export{H as C,K as D,W as E,Y as G,Q as O,R as S,G as T,F as a,D as b,J as c,$ as u};
|
package/packages/web/dist/assets/{GeneralSettingsView-sPXkLlLy.js → GeneralSettingsView-Dw-x83R0.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as m,k as _,o as b,l as y,u as S,a as i,c as r,b as s,f as c,m as h,s as k,t as d,i as p,j as x,n as u}from"./index-
|
|
1
|
+
import{_ as m,k as _,o as b,l as y,u as S,a as i,c as r,b as s,f as c,m as h,s as k,t as d,i as p,j as x,n as u}from"./index-CvXApbVC.js";import{u as w}from"./settings-TWfbahn5.js";import"./ApiClient-DfbJwzpz.js";const V={key:0,class:"loading-state"},G={class:"form-group"},A={class:"checkbox-label"},B={key:0,class:"error-message"},C={class:"form-actions"},D=["disabled"],M={key:0,class:"loading-spinner"},N={__name:"GeneralSettingsView",setup(U){const n=w(),v=_(),l=u(!1),a=u(!1),o=u(null);b(()=>{n.fetchGeneralSettings()}),y(()=>n.generalSettings,t=>{t&&(l.value=t.disableAnalytics)},{immediate:!0});async function f(){a.value=!0,o.value=null;try{await n.updateGeneralSettings({disableAnalytics:l.value}),v.success("General settings saved successfully")}catch(t){o.value=t.message}finally{a.value=!1}}return(t,e)=>S(n).loading?(i(),r("div",V,[...e[1]||(e[1]=[s("span",{class:"loading-spinner"},null,-1),c(" Loading... ",-1)])])):(i(),r("form",{key:1,class:"form card",onSubmit:x(f,["prevent"])},[s("div",G,[s("label",A,[h(s("input",{"onUpdate:modelValue":e[0]||(e[0]=g=>l.value=g),type:"checkbox"},null,512),[[k,l.value]]),e[2]||(e[2]=c(" Disable analytics tracking ",-1))]),e[3]||(e[3]=s("p",{class:"form-help"}," When checked, no usage analytics will be collected. Changes take effect on next page load. ",-1))]),o.value?(i(),r("div",B,d(o.value),1)):p("",!0),s("div",C,[s("button",{type:"submit",class:"btn btn-primary",disabled:a.value},[a.value?(i(),r("span",M)):p("",!0),c(" "+d(a.value?"Saving...":"Save Settings"),1)],8,D)])],32))}},L=m(N,[["__scopeId","data-v-0cd79804"]]);export{L as default};
|
package/packages/web/dist/assets/{InputWithButton-B-o0DgMH.js → InputWithButton-CHHcpF4I.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as N,n as l,l as $,a as s,c as o,b as t,m as D,v as j,j as F,t as h,f as w,i as f,F as k,r as S}from"./index-
|
|
1
|
+
import{_ as N,n as l,l as $,a as s,c as o,b as t,m as D,v as j,j as F,t as h,f as w,i as f,F as k,r as S}from"./index-CvXApbVC.js";import{a as T}from"./ApiClient-DfbJwzpz.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,r=l(y.modelValue);$(()=>y.modelValue,a=>{a!==r.value&&(r.value=a)});function V(){_("update:modelValue",r.value)}const p=l(!1),i=l(""),c=l(null),d=l([]),b=l(!1),u=l(null);async function B(){p.value=!0,await m(r.value||"")}function v(){p.value=!1}async function m(a){b.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{b.value=!1}}function P(){r.value=i.value,_("update:modelValue",i.value),v()}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=>r.value=n),type:"text",class:"form-input",placeholder:"/path/to/project",onInput:V},null,544),[[j,r.value]]),t("button",{type:"button",class:"btn",onClick:B}," Browse ")]),p.value?(s(),o("div",{key:0,class:"path-browser-overlay",onClick:F(v,["self"])},[t("div",L,[t("div",M,[t("span",U,h(i.value),1),t("button",{type:"button",class:"browser-close",onClick:v}," × ")]),t("div",q,[c.value?(s(),o("div",{key:0,class:"browser-item parent",onClick:e[1]||(e[1]=n=>m(c.value))},[...e[2]||(e[2]=[t("span",{class:"browser-item-icon"},"←",-1),w(" Parent Directory ",-1)])])):f("",!0),b.value?(s(),o("div",z,[...e[3]||(e[3]=[t("span",{class:"loading-spinner"},null,-1),w(" Loading... ",-1)])])):u.value?(s(),o("div",A,h(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=>m(x(i.value,n.name))},[e[4]||(e[4]=t("span",{class:"browser-item-icon"},"📁",-1)),w(" "+h(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:v}," Cancel "),t("button",{type:"button",class:"btn btn-primary",onClick:P}," Select ")])])])):f("",!0)]))}},W=N(K,[["__scopeId","data-v-6bb30ba2"]]);export{W as P};
|
package/packages/web/dist/assets/{InterpolationHelp-Dxn1li4l.js → InterpolationHelp-CLNPz8s8.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as t,a,c as n,f as e,b as o}from"./index-
|
|
1
|
+
import{_ as t,a,c as n,f as e,b as o}from"./index-CvXApbVC.js";const r={class:"form-help"},l={__name:"InterpolationHelp",setup(c){return(p,s)=>(a(),n("p",r,[...s[0]||(s[0]=[e(" Available variables: ",-1),o("code",null,"{{rootSession.id}}",-1),e(", ",-1),o("code",null,"{{rootSession.name}}",-1),e(", ",-1),o("code",null,"{{rootSession.summary}}",-1),e(", ",-1),o("code",null,"{{rootSession.status}}",-1)])]))}},i=t(l,[["__scopeId","data-v-26718cef"]]);export{i as I};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-MZf7MlPX.js","assets/index-CvXApbVC.js","assets/index-Bd20AzX1.css","assets/SessionDetailView-DWbXdx7A.js","assets/sessions-DETEyjPI.js","assets/ApiClient-DfbJwzpz.js","assets/projects-BvLADGKx.js","assets/EffortLevelSelector-PaBpUveC.js","assets/EffortLevelSelector-BQaQmU2d.css","assets/SessionLogStream-BvXUNNBZ.js","assets/commandButtons-DejH0rVN.js","assets/SessionLogStream-zPUTiGbe.css","assets/SlashCommandWizard-DleYBxrE.js","assets/providers-DZ-fOa4G.js","assets/SlashCommandWizard-DJzw3LP5.css","assets/useSummaryHelpers-GVg7sMWF.js","assets/ModelSelector-Cko_yTO5.js","assets/ModelSelector-Dtwe5xLH.css","assets/ArchiveConfirmModal-DJERn5XO.js","assets/ArchiveConfirmModal-DeoCVGXt.css","assets/projectDefaults-D9xkp2XR.js","assets/QuickResponsesPanel-Dp39f12o.js","assets/QuickResponsesPanel-dk-Rj8xx.css","assets/ResizableTextarea-BWywIqOv.js","assets/ResizableTextarea-DERSH3Wz.css","assets/SessionDetailView-ULeIkWS0.css","assets/style-BTin-zR_.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{n as x,l as v,G as C,a as _,c as P,x as V,w as g,b as S,f as b,d as A,u as B,ad as M,Q as q,R as E}from"./index-CvXApbVC.js";import{u as D}from"./SessionDetailView-DWbXdx7A.js";import"./sessions-DETEyjPI.js";import"./ApiClient-DfbJwzpz.js";import"./projects-BvLADGKx.js";import"./EffortLevelSelector-PaBpUveC.js";import"./SessionLogStream-BvXUNNBZ.js";import"./commandButtons-DejH0rVN.js";import"./SlashCommandWizard-DleYBxrE.js";import"./providers-DZ-fOa4G.js";import"./useSummaryHelpers-GVg7sMWF.js";import"./ModelSelector-Cko_yTO5.js";import"./ArchiveConfirmModal-DJERn5XO.js";import"./projectDefaults-D9xkp2XR.js";import"./QuickResponsesPanel-Dp39f12o.js";import"./ResizableTextarea-BWywIqOv.js";const L={class:"canvas-md-editor"},z={__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(h,{expose:k,emit:I}){const T=q(()=>E(()=>import("./index-MZf7MlPX.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])).then(async e=>(await E(()=>Promise.resolve({}),__vite__mapDeps([26])),e.MdEditor))),r=h,d=I,y=D(),t=x(r.content||"");let o=null,a=r.content||"",u=r.content||"",m=r.itemId;r.content;let l=!1,s=!1;v(t,e=>{s||e!==a&&(l=!0,o&&clearTimeout(o),o=setTimeout(()=>{a=e,u=e,d("save",e)},1e3))});function c(){o&&(clearTimeout(o),o=null),t.value!==a&&(a=t.value,u=t.value,d("save",t.value))}k({flushPendingSave:c});function p(){o&&(clearTimeout(o),o=null)}function f(e){a=e,u=e}function w(e,n){p(),m=e,f(n),l=!1,n!==t.value&&(s=!0,t.value=n,s=!1)}return v(()=>({itemId:r.itemId,content:r.content}),({itemId:e,content:n})=>{const i=n||"";if(e!==m){w(e,i);return}if(i===t.value){a=i;return}if(l){i===u&&(a=i);return}p(),f(i),s=!0,t.value=i,s=!1}),C(()=>{c(),y.endEditing(r.filename)}),(e,n)=>(_(),P("div",L,[(_(),V(M,null,{default:g(()=>[A(B(T),{modelValue:t.value,"onUpdate:modelValue":n[0]||(n[0]=i=>t.value=i),theme:"dark",preview:!1,language:"en-US","no-upload-img":!0,"show-code-row-number":!0},null,8,["modelValue"])]),fallback:g(()=>[...n[1]||(n[1]=[S("div",{class:"editor-loading"},[S("span",{class:"loading-spinner"}),b(" Loading editor... ")],-1)])]),_:1}))]))}};export{z as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{u as q}from"./providers-DZ-fOa4G.js";import{_ as Q,o as X,n as B,l as M,a as I,c as y,b as Y,t as x,i as Z,F as P,r as E,J as ee,z as s,U as $}from"./index-CvXApbVC.js";const te=["data-model","data-provider-id"],le=["value","disabled"],oe={key:0,value:""},de=["label","data-agent-type"],ne=["value","data-provider-id","data-model-id","data-agent-type"],re={__name:"ModelSelector",props:{modelValue:{type:String,default:null},disabled:{type:Boolean,default:!1},allowEmpty:{type:Boolean,default:!1},emptyLabel:{type:String,default:"Use system default"},selectClass:{type:String,default:""},providerId:{type:String,default:null},hideBuiltInDuplicates:{type:Boolean,default:!0}},emits:["update:modelValue","model-selected","update:providerId"],setup(g,{emit:F}){const n=g,f=F,a=q(),V=s(()=>a.providers.length>0&&a.providers.some(e=>e.models&&e.models.length>0)),L=s(()=>{const e=new Set;for(const t of h.value)if(t.models)for(const l of t.models)e.add(l.modelId);return e});function _(e){return e&&L.value.has(e)}function m(e){return(e==null?void 0:e.kind)==="openai"?"codex":(e==null?void 0:e.kind)==="google"?"gemini":"claude-code"}function R(e){const t=m(e);return t==="codex"?"Codex":t==="gemini"?"Gemini":"Claude Code"}const w={"claude-code":0,gemini:1,codex:2},D=s(()=>{const e=[...a.providers];return e.sort((t,l)=>{const o=m(t),d=m(l),i=w[o]??99,p=w[d]??99;return i!==p?i-p:t.isBuiltIn!==l.isBuiltIn?t.isBuiltIn?-1:1:(t.name||"").localeCompare(l.name||"")}),e}),h=s(()=>{const e=new Set;for(const t of a.providers)if(!(t.isBuiltIn||!t.models))for(const l of t.models)e.add(l.modelId);return D.value.map(t=>!n.hideBuiltInDuplicates||!t.isBuiltIn?t:T(t,e)).filter(t=>{var l;return(l=t.models)==null?void 0:l.length})}),O=s(()=>{const e=new Map;for(const t of h.value)for(const l of t.models||[])e.set(l.modelId,(e.get(l.modelId)||0)+1);return new Set([...e.entries()].filter(([,t])=>t>1).map(([t])=>t))});function T(e,t){return{...e,models:(e.models||[]).filter(l=>!t.has(l.modelId))}}const v=s(()=>{var o;const e=a.providers.filter(d=>m(d)==="claude-code");if(e.length===0)return null;const l=e.find(d=>d.isBuiltIn)||e[0];if((o=l==null?void 0:l.models)!=null&&o.length){const d=l.models.find(i=>i.tier==="sonnet");return(d==null?void 0:d.modelId)||l.models[0].modelId}return null}),K=B(!1);X(async()=>{(a.providers.length===0||!V.value)&&await a.fetchProviders(),K.value=!0});function b(e){var l;if(!e)return null;if(e.includes("claude-"))return e;const t=a.providers.find(o=>o.isBuiltIn&&m(o)==="claude-code");if((l=t==null?void 0:t.models)!=null&&l.length){const o=t.models.find(d=>d.tier===e);if(o)return o.modelId}return e}const r=B(b(n.modelValue)),c=B(n.providerId),u=s(()=>n.allowEmpty&&(!r.value||r.value==="")?"":r.value&&_(r.value)?r.value:v.value?v.value:r.value),C=s(()=>{if(!u.value)return null;const e=S(u.value,n.providerId||c.value);return(e==null?void 0:e.provider.id)||null}),N=s(()=>{if(n.allowEmpty&&(!u.value||u.value==="")||!u.value)return"";const e=S(u.value,n.providerId||c.value);return e?k(e.provider.id,e.model.modelId):u.value}),z=$(n,"modelValue");M(z,e=>{r.value=b(e)},{flush:"sync"}),M($(n,"providerId"),e=>{c.value=e},{flush:"sync"}),M(()=>a.providers,G,{deep:!0,immediate:!0});function G(){if(!V.value)return;if(n.allowEmpty&&(!n.modelValue||n.modelValue==="")){r.value="";return}const e=n.modelValue?b(n.modelValue):null;if(e&&_(e)){H(e);return}U()}function H(e){var l;const t=((l=S(e,n.providerId))==null?void 0:l.provider.id)||null;if(r.value===e){c.value!==t&&(c.value=t,f("update:providerId",t));return}r.value=e,c.value=t,e!==n.modelValue&&f("update:modelValue",e),t!==n.providerId&&f("update:providerId",t)}function U(){var e;!v.value||r.value===v.value||(r.value=v.value,c.value=((e=S(v.value))==null?void 0:e.provider.id)||null,f("update:modelValue",v.value))}function W(e){const t=e.target.value,l=t?J(t):null,o=l?{modelId:l.modelId,providerId:l.providerId,kind:A(l.providerId)}:{modelId:"",providerId:null,kind:null},d=o.modelId;u.value===d&&C.value===o.providerId||(r.value=d,c.value=o.providerId,f("update:modelValue",d),f("update:providerId",o.providerId),f("model-selected",o))}function A(e){if(!e)return null;const t=a.providers.find(l=>l.id===e);return(t==null?void 0:t.kind)||"anthropic"}function k(e,t){return`${e}::${t}`}function J(e){const t=e.indexOf("::");return t===-1?null:{providerId:e.slice(0,t),modelId:e.slice(t+2)}}function S(e,t=null){var l,o;if(!e)return null;for(const d of h.value){if(t&&d.id!==t)continue;const i=(l=d.models)==null?void 0:l.find(p=>p.modelId===e);if(i)return{provider:d,model:i}}for(const d of h.value){const i=(o=d.models)==null?void 0:o.find(p=>p.modelId===e);if(i)return{provider:d,model:i}}return null}function j(e,t){const l=e.isBuiltIn?t.displayName:t.modelId;return O.value.has(t.modelId)?`${l} (${e.name})`:l}return(e,t)=>(I(),y("div",{class:"model-selector","data-model":u.value,"data-provider-id":C.value||""},[Y("select",{id:"model-select",value:N.value,disabled:g.disabled,class:ee(g.selectClass||"model-select"),onChange:t[0]||(t[0]=l=>W(l))},[g.allowEmpty?(I(),y("option",oe,x(g.emptyLabel),1)):Z("",!0),(I(!0),y(P,null,E(h.value,l=>(I(),y("optgroup",{key:l.id,label:`${R(l)} · ${l.name}`,"data-agent-type":m(l)},[(I(!0),y(P,null,E(l.models,o=>(I(),y("option",{key:`${l.id}:${o.id}`,value:k(l.id,o.modelId),"data-provider-id":l.id,"data-model-id":o.modelId,"data-agent-type":m(l)},x(j(l,o)),9,ne))),128))],8,de))),128))],42,le)],8,te))}},ue=Q(re,[["__scopeId","data-v-0753408d"]]);export{ue as M};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.model-selector[data-v-
|
|
1
|
+
.model-selector[data-v-0753408d]{display:flex;align-items:center;gap:.5rem}.model-select[data-v-0753408d]{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:.375rem 2rem .375rem .5rem;font-size:.75rem;font-weight:500;background-color:var(--color-background);border:1px solid var(--color-border);border-radius:.375rem;color:var(--color-text-soft);cursor:pointer;transition:all .15s;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%239ca3af' d='M1.5 4.5l4.5 4 4.5-4'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right .5rem center;background-size:12px}.model-select[data-v-0753408d]:hover:not(:disabled){border-color:var(--color-border-hover);background-color:var(--color-bg-hover)}.model-select[data-v-0753408d]:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 2px #06b6d41a}.model-select[data-v-0753408d]:disabled{opacity:.5;cursor:not-allowed}.model-select option[data-v-0753408d]{background-color:var(--color-background);color:var(--color-text)}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{K as ie,A as ge,n as p,_ as de,a as r,c as d,b as l,J as ae,i as h,t as $,f as re,F as U,C as Ve,l as w,m as E,v as X,s as ue,q as _,k as xe,G as Oe,o as Me,d as O,w as Le,u as v,M as Z,r as K,x as fe,j as Ue,B as Ne,g as Ge,z as R,h as je}from"./index-
|
|
1
|
+
import{K as ie,A as ge,n as p,_ as de,a as r,c as d,b as l,J as ae,i as h,t as $,f as re,F as U,C as Ve,l as w,m as E,v as X,s as ue,q as _,k as xe,G as Oe,o as Me,d as O,w as Le,u as v,M as Z,r as K,x as fe,j as Ue,B as Ne,g as Ge,z as R,h as je}from"./index-CvXApbVC.js";import{g as qe,u as Fe}from"./sessions-DETEyjPI.js";import{u as Pe}from"./EffortLevelSelector-PaBpUveC.js";import{u as We}from"./projectDefaults-D9xkp2XR.js";import{a as ze}from"./ApiClient-DfbJwzpz.js";import{F as He,Q as Ke,u as Qe}from"./QuickResponsesPanel-Dp39f12o.js";import{S as Ye}from"./SessionFormOptions-Dz9ik4Fo.js";import{R as Je}from"./ResizableTextarea-BWywIqOv.js";import{S as Xe,a as Ze}from"./SlashCommandWizard-DleYBxrE.js";import{u as _e}from"./projects-BvLADGKx.js";import"./ModelSelector-Cko_yTO5.js";import"./providers-DZ-fOa4G.js";function et(e){const u=p(""),a=p(!1),f=p("yolo"),o=p(null),b=p(null),D=p(!0),C=p(null),g=p(!0),n=p("worktree"),c=p(""),T=p(!1),k=p(""),M=p(null),V=p(null),Q=p(null),B=p({scheduledAt:null,autoRescheduleEnabled:!1,rescheduleDelayMinutes:ie,rescheduleOnTokenLimit:!0,rescheduleOnServiceError:!0,maxRescheduleCount:null,maxTotalTokens:null,rescheduleAtTokenCount:null}),S=p({mode:!1,model:!1,thinkingEnabled:!1,startImmediately:!1,quickGitMode:!1,quickWorktreeBranch:!1});function N(m){m.mode&&(f.value=m.mode,S.value.mode=!0),m.model?(o.value=m.model,b.value=m.providerId||null,S.value.model=!0):(o.value="sonnet",b.value=null,S.value.model=!0),m.thinkingEnabled!==null&&m.thinkingEnabled!==void 0&&(D.value=m.thinkingEnabled,S.value.thinkingEnabled=!0),m.effortLevel&&(C.value=m.effortLevel),m.startImmediately!==null&&m.startImmediately!==void 0&&(g.value=m.startImmediately,S.value.startImmediately=!0),m.gitMode&&(n.value=m.gitMode,S.value.quickGitMode=!0),m.gitBranch&&(c.value=m.gitBranch,S.value.quickWorktreeBranch=!0)}function ee(m){const y=localStorage.getItem(e.value);y&&(u.value=y,ge(()=>{m.value&&(m.value.value=y,a.value=y.trim().length>0)}))}function Y(){B.value={scheduledAt:null,autoRescheduleEnabled:!1,rescheduleDelayMinutes:ie,rescheduleOnTokenLimit:!0,rescheduleOnServiceError:!0,maxRescheduleCount:null,maxTotalTokens:null,rescheduleAtTokenCount:null}}function G(){T.value=!0}function x(){T.value=!1,c.value=k.value}function L(m){k.value=qe("",m),T.value||(c.value=k.value)}return{prompt:u,promptHasContent:a,mode:f,model:o,providerId:b,thinkingEnabled:D,effortLevel:C,startImmediately:g,quickGitMode:n,quickWorktreeBranch:c,editingBranch:T,autoBranchName:k,selectedTemplateId:M,startFromTemplateId:V,parentSessionId:Q,schedulingData:B,usingDefaults:S,applyProjectDefaults:N,restoreDraftFromStorage:ee,resetSchedulingData:Y,handleBranchEdit:G,resetBranchName:x,updateAutoBranchName:L}}function tt(e,u){if(!e)return;const a=e.selectionStart,f=e.selectionEnd,o=e.value.substring(0,a),b=e.value.substring(f);e.value=o+u+b,e.selectionStart=e.selectionEnd=a+u.length,e.dispatchEvent(new Event("input",{bubbles:!0})),e.focus()}function lt(e,u){if(!e)return;const a=e.value.trim(),f=a?`${a}
|
|
2
2
|
|
|
3
3
|
${u}`:u;e.value=f,e.dispatchEvent(new Event("input",{bubbles:!0}))}function nt(e,u,a){e&&(u.prompt.value=e.prompt,a.value&&(a.value.value=e.prompt,a.value.dispatchEvent(new Event("input",{bubbles:!0}))),e.thinkingEnabled!=null&&(u.thinkingEnabled.value=e.thinkingEnabled),e.model&&(u.model.value=e.model),e.mode&&(u.mode.value=e.mode),e.gitBranch&&(u.quickWorktreeBranch.value=e.gitBranch,u.editingBranch.value=!0),e.gitMode&&(u.quickGitMode.value=e.gitMode),e.effortLevel!=null&&(u.effortLevel.value=e.effortLevel),e.nextTemplateId&&(u.selectedTemplateId.value=e.nextTemplateId))}function ot(e,u){const{currentPrompt:a,gitStatus:f,files:o}=u,b=e.quickGitMode.value&&(f!=null&&f.isGitRepo)?e.quickGitMode.value:void 0,D=b==="current";return{prompt:a,mode:e.mode.value,model:e.model.value,providerId:e.providerId.value,thinkingEnabled:e.thinkingEnabled.value,effortLevel:e.effortLevel.value,startImmediately:e.startImmediately.value,gitMode:b,gitBranch:b&&!D?e.quickWorktreeBranch.value:void 0,files:o,templateId:e.selectedTemplateId.value,parentSessionId:e.parentSessionId.value||null,scheduledAt:e.schedulingData.value.scheduledAt,autoRescheduleEnabled:e.schedulingData.value.autoRescheduleEnabled,rescheduleDelayMinutes:e.schedulingData.value.rescheduleDelayMinutes,rescheduleOnTokenLimit:e.schedulingData.value.rescheduleOnTokenLimit,rescheduleOnServiceError:e.schedulingData.value.rescheduleOnServiceError,maxRescheduleCount:e.schedulingData.value.maxRescheduleCount,maxTotalTokens:e.schedulingData.value.maxTotalTokens,rescheduleAtTokenCount:e.schedulingData.value.rescheduleAtTokenCount}}const st={key:0,class:"form-group"},at={class:"segmented-control"},ut={key:0,class:"branch-input-row"},it={class:"quick-branch-input"},rt=["value","placeholder"],dt={key:1,class:"current-branch-hint"},ct={key:1,class:"git-loading"},mt={__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(e){return(u,a)=>{var f;return r(),d(U,null,[(f=e.gitStatus)!=null&&f.isGitRepo?(r(),d("div",st,[a[9]||(a[9]=l("label",{class:"form-label"},"Git Options",-1)),l("div",at,[l("button",{type:"button",class:ae(["segment-btn",{"segment-btn--active":e.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:ae(["segment-btn",{"segment-btn--active":e.modelValue==="branch"}]),onClick:a[1]||(a[1]=o=>u.$emit("update:modelValue","branch"))}," Branch ",2),l("button",{type:"button",class:ae(["segment-btn",{"segment-btn--active":e.modelValue==="current"}]),onClick:a[2]||(a[2]=o=>u.$emit("update:modelValue","current"))}," Current ",2)]),e.modelValue==="branch"||e.modelValue==="worktree"?(r(),d("div",ut,[a[7]||(a[7]=l("label",{class:"form-label form-label-small"},"Branch Name",-1)),l("div",it,[l("input",{value:e.branchName,type:"text",class:"form-input",placeholder:e.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,rt),e.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),e.modelValue==="current"?(r(),d("p",dt," On: "+$(e.gitStatus.currentBranch),1)):h("",!0)])):h("",!0),e.loadingGit?(r(),d("div",ct,[...a[10]||(a[10]=[l("span",{class:"loading-spinner"},null,-1),re(" Loading git info... ",-1)])])):h("",!0)],64)}}},pt=de(mt,[["__scopeId","data-v-aec388c0"]]),vt={class:"scheduling-options"},ht={key:0,class:"form-group"},ft={class:"form-group"},gt={class:"toggle-switch"},bt={key:1,class:"reschedule-settings"},kt={class:"form-group"},yt={class:"checkbox-option"},Tt={class:"checkbox-option"},St={class:"form-group"},Et={class:"limits-section"},Ct={class:"form-group"},It={class:"form-group"},wt={class:"form-group"},Bt={__name:"SchedulingOptions",props:{modelValue:{type:Object,default:()=>({})},hideScheduledAt:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(e,{emit:u}){const a=e,f=u,o=Ve({scheduledAt:a.modelValue.scheduledAt||null,scheduledAtLocal:"",autoRescheduleEnabled:a.modelValue.autoRescheduleEnabled??!1,rescheduleDelayMinutes:a.modelValue.rescheduleDelayMinutes??ie,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 b(g){var c;const n=((c=g==null?void 0:g.target)==null?void 0:c.value)??o.scheduledAtLocal;if(n){const T=new Date(n);o.scheduledAt=T.toISOString()}else o.scheduledAt=null;C()}function D(g){if(!g)return"";const n=new Date(g),c=n.getFullYear(),T=String(n.getMonth()+1).padStart(2,"0"),k=String(n.getDate()).padStart(2,"0"),M=String(n.getHours()).padStart(2,"0"),V=String(n.getMinutes()).padStart(2,"0");return`${c}-${T}-${k}T${M}:${V}`}w(()=>a.modelValue.scheduledAt,g=>{g&&(o.scheduledAtLocal=D(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 w(()=>({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",vt,[e.hideScheduledAt?h("",!0):(r(),d("div",ht,[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]=c=>o.scheduledAtLocal=c),type:"datetime-local",class:"form-input",onInput:b},null,544),[[X,o.scheduledAtLocal]]),n[9]||(n[9]=l("p",{class:"form-help"}," Leave empty to start immediately ",-1))])),l("div",ft,[l("label",gt,[E(l("input",{"onUpdate:modelValue":n[1]||(n[1]=c=>o.autoRescheduleEnabled=c),type:"checkbox"},null,512),[[ue,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",bt,[l("div",kt,[n[14]||(n[14]=l("p",{class:"settings-label"}," Reschedule Triggers ",-1)),l("label",yt,[E(l("input",{"onUpdate:modelValue":n[2]||(n[2]=c=>o.rescheduleOnTokenLimit=c),type:"checkbox"},null,512),[[ue,o.rescheduleOnTokenLimit]]),n[12]||(n[12]=l("span",{class:"checkbox-label"},"Token limit errors",-1))]),l("label",Tt,[E(l("input",{"onUpdate:modelValue":n[3]||(n[3]=c=>o.rescheduleOnServiceError=c),type:"checkbox"},null,512),[[ue,o.rescheduleOnServiceError]]),n[13]||(n[13]=l("span",{class:"checkbox-label"},"Service unavailability",-1))])]),l("div",St,[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]=c=>o.rescheduleDelayMinutes=c),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",Et,[n[23]||(n[23]=l("p",{class:"settings-label"}," Limits (optional) ",-1)),l("div",Ct,[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]=c=>o.maxRescheduleCount=c),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",It,[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]=c=>o.maxTotalTokens=c),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",wt,[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]=c=>o.rescheduleAtTokenCount=c),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)]))}},Dt=de(Bt,[["__scopeId","data-v-475dcf7c"]]),At={class:"container"},Rt={key:0,class:"form-group"},$t={key:0,label:"Project Templates"},Vt=["value"],xt={key:1,label:"Global Templates"},Ot=["value"],Mt={class:"form-group"},Lt={class:"attachment-row"},Ut={key:1,class:"error-message"},Nt={key:1,class:"form-group"},Gt={key:0,label:"Project Templates"},jt=["value"],qt={key:1,label:"Global Templates"},Ft=["value"],Pt={key:2,class:"form-group"},Wt=["value"],zt={class:"form-actions"},Ht=["disabled"],Kt={key:0,class:"loading-spinner"},Qt={__name:"NewSessionView",setup(e){const u=Ne(),a=je(),f=Fe();xe();const o=Pe(),b=We(),D=_e(),C=R(()=>`new-session-draft-${u.params.id}`),g=et(C),{prompt:n,promptHasContent:c,mode:T,model:k,providerId:M,thinkingEnabled:V,effortLevel:Q,startImmediately:B,quickGitMode:S,quickWorktreeBranch:N,editingBranch:ee,autoBranchName:Y,selectedTemplateId:G,startFromTemplateId:x,parentSessionId:L,schedulingData:m,usingDefaults:y,applyProjectDefaults:be,restoreDraftFromStorage:ke,resetSchedulingData:ye,handleBranchEdit:Te,resetBranchName:Se,updateAutoBranchName:ce}=g,A=p(null);let j=null,q=null,F=null;const P=p(!1),te=p(!1),Ee=R(()=>window.innerWidth<=480?80:120),Ce=Qe(()=>{var t;const i=((t=A.value)==null?void 0:t.value)||n.value;!P.value&&i.trim()&&se()}),W=p(null),me=p([]),pe=p(null),ve=p(null),z=R(()=>o.projectTemplates),H=R(()=>o.globalTemplates),le=R(()=>[...z.value,...H.value]),he=R(()=>{const i=D.getProjectById(u.params.id);return(i==null?void 0:i.workingDirectory)||null}),ne=R(()=>f.sessions.filter(i=>i.status==="completed").sort((i,t)=>new Date(t.createdAt)-new Date(i.createdAt))),Ie=R(()=>!B.value||le.value.length>0||ne.value.length>0),oe=p(!1),J=p(null);function we(i){var s;const t=i.target.value,I=t.trim().length>0;c.value!==I&&(c.value=I),j&&clearTimeout(j),j=setTimeout(()=>{n.value=t},150),(s=W.value)!=null&&s.isGitRepo&&(F&&clearTimeout(F),F=setTimeout(()=>ce(t),300))}w(()=>W.value,i=>{i!=null&&i.isGitRepo&&!Y.value&&ce(n.value)},{immediate:!0}),w(T,()=>{y.value.mode=!1}),w(k,()=>{y.value.model=!1}),w(V,()=>{y.value.thinkingEnabled=!1}),w(B,i=>{y.value.startImmediately=!1,i?ye():ge(()=>{var t;(t=ve.value)==null||t.scrollIntoView({behavior:"smooth",block:"nearest"})})}),w(S,()=>{y.value.quickGitMode=!1}),w(N,()=>{y.value.quickWorktreeBranch=!1}),w(n,i=>{q&&clearTimeout(q),q=setTimeout(()=>{i.trim()?localStorage.setItem(C.value,i):localStorage.removeItem(C.value)},500)}),Oe(()=>{F&&clearTimeout(F),j&&clearTimeout(j),q&&clearTimeout(q)}),Me(async()=>{const i=u.params.id;ke(A);try{await b.fetchDefaults(i);const t=b.getDefaultsForProject(i);t?be(t):(k.value="sonnet",y.value.model=!0)}catch(t){console.warn("Failed to fetch project defaults:",t),k.value||(k.value="sonnet",y.value.model=!0)}oe.value=!0;try{W.value=await ze.getGitStatus(i)}catch{}finally{oe.value=!1}o.fetchProjectTemplates(i),u.query.parentSessionId&&(L.value=u.query.parentSessionId)});function Be(){a.push(`/projects/${u.params.id}/sessions`)}function De({text:i}){tt(A.value,i)}function Ae({content:i,autoSubmit:t}){var I;lt(A.value,i),t?setTimeout(()=>se(),0):(I=A.value)==null||I.blur()}function Re(){const i=x.value&&o.getTemplateById(x.value);nt(i,g,A)}async function se(){var t,I;const i=((t=A.value)==null?void 0:t.value)||n.value;if(i.trim()){P.value=!0,J.value=null;try{const s=ot(g,{currentPrompt:i,gitStatus:W.value,files:me.value}),$e=await f.createSession(u.params.id,s);(I=pe.value)==null||I.clear(),localStorage.removeItem(C.value),a.push(`/sessions/${$e.id}?overlay=open`)}catch(s){J.value=s.message}finally{P.value=!1}}}return(i,t)=>{const I=Ge("router-link");return r(),d("div",At,[O(I,{to:`/projects/${v(u).params.id}/sessions`,class:"back-link"},{default:Le(()=>[...t[15]||(t[15]=[re(" ← Sessions ",-1)])]),_:1},8,["to"]),t[24]||(t[24]=l("h1",null,"New Session",-1)),l("form",{class:"form card",onSubmit:Ue(se,["prevent"])},[le.value.length>0?(r(),d("div",Rt,[t[17]||(t[17]=l("label",{class:"form-label",for:"start-from-template"},"Start From Template",-1)),E(l("select",{id:"start-from-template","onUpdate:modelValue":t[0]||(t[0]=s=>Z(x)?x.value=s:null),class:"form-input",title:"Selecting a template will populate all form fields below. You can still edit before starting.",onChange:Re},[t[16]||(t[16]=l("option",{value:null}," Select a template to pre-fill... ",-1)),z.value.length?(r(),d("optgroup",$t,[(r(!0),d(U,null,K(z.value,s=>(r(),d("option",{key:s.id,value:s.id},$(s.name),9,Vt))),128))])):h("",!0),H.value.length?(r(),d("optgroup",xt,[(r(!0),d(U,null,K(H.value,s=>(r(),d("option",{key:s.id,value:s.id},$(s.name),9,Ot))),128))])):h("",!0)],544),[[_,v(x)]])])):h("",!0),l("div",Mt,[O(Je,{id:"prompt",ref_key:"textareaRef",ref:A,class:"form-input form-textarea",placeholder:"What would you like the agent to help you with?","min-height":Ee.value,required:"",onInput:we,onKeydown:v(Ce)},null,8,["min-height","onKeydown"]),l("div",Lt,[O(He,{ref_key:"fileAttachment",ref:pe,"onUpdate:files":t[1]||(t[1]=s=>me.value=s)},null,512),he.value?(r(),fe(Xe,{key:0,onOpen:t[2]||(t[2]=s=>te.value=!0)})):h("",!0)])]),O(Ke,{"show-empty":!0,"project-id":v(u).params.id,onInsert:Ae},null,8,["project-id"]),O(Ye,{mode:v(T),model:v(k),"provider-id":v(M),"effort-level":v(Q),"thinking-enabled":v(V),"start-immediately":v(B),"onUpdate:mode":t[3]||(t[3]=s=>T.value=s),"onUpdate:model":t[4]||(t[4]=s=>k.value=s),"onUpdate:providerId":t[5]||(t[5]=s=>M.value=s),"onUpdate:effortLevel":t[6]||(t[6]=s=>Q.value=s),"onUpdate:thinkingEnabled":t[7]||(t[7]=s=>V.value=s),"onUpdate:startImmediately":t[8]||(t[8]=s=>B.value=s)},null,8,["mode","model","provider-id","effort-level","thinking-enabled","start-immediately"]),J.value?(r(),d("div",Ut,$(J.value),1)):h("",!0),O(pt,{"git-status":W.value,"model-value":v(S),"branch-name":v(N),"auto-branch-name":v(Y),"editing-branch":v(ee),"loading-git":oe.value,"onUpdate:modelValue":t[9]||(t[9]=s=>S.value=s),"onUpdate:branchName":t[10]||(t[10]=s=>N.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(B)?h("",!0):(r(),fe(Dt,{key:0,modelValue:v(m),"onUpdate:modelValue":t[11]||(t[11]=s=>Z(m)?m.value=s:null)},null,8,["modelValue"])),le.value.length>0?(r(),d("div",Nt,[t[19]||(t[19]=l("label",{class:"form-label",for:"template"},"Next Template (optional)",-1)),E(l("select",{id:"template","onUpdate:modelValue":t[12]||(t[12]=s=>Z(G)?G.value=s:null),class:"form-input"},[t[18]||(t[18]=l("option",{value:null}," None - single session ",-1)),z.value.length?(r(),d("optgroup",Gt,[(r(!0),d(U,null,K(z.value,s=>(r(),d("option",{key:s.id,value:s.id},$(s.name),9,jt))),128))])):h("",!0),H.value.length?(r(),d("optgroup",qt,[(r(!0),d(U,null,K(H.value,s=>(r(),d("option",{key:s.id,value:s.id},$(s.name),9,Ft))),128))])):h("",!0)],512),[[_,v(G)]]),t[20]||(t[20]=l("p",{class:"form-help"}," After this session completes, the selected template will automatically start a new session. ",-1))])):h("",!0),ne.value.length>0?(r(),d("div",Pt,[t[22]||(t[22]=l("label",{class:"form-label",for:"parent-session"},"Parent Session (optional)",-1)),E(l("select",{id:"parent-session","onUpdate:modelValue":t[13]||(t[13]=s=>Z(L)?L.value=s:null),class:"form-input"},[t[21]||(t[21]=l("option",{value:null}," None - create standalone session ",-1)),(r(!0),d(U,null,K(ne.value,s=>(r(),d("option",{key:s.id,value:s.id},$(s.name),9,Wt))),128))],512),[[_,v(L)]]),t[23]||(t[23]=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",zt,[l("button",{type:"button",class:"btn btn-secondary",onClick:Be}," Cancel "),l("button",{type:"submit",class:"btn btn-primary btn-submit",disabled:P.value},[P.value?(r(),d("span",Kt)):h("",!0),re(" "+$(v(B)?"Start Session":"Create Draft"),1)],8,Ht)])],32),O(Ze,{"is-open":te.value,"onUpdate:isOpen":t[14]||(t[14]=s=>te.value=s),"working-directory":he.value||"",mode:"insert","hide-builtin":!0,onInsert:De},null,8,["is-open","working-directory"])])}}},ul=de(Qt,[["__scopeId","data-v-bec7fd9a"]]);export{ul as default};
|