@loicngr/kobo 1.11.11 → 1.11.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/server/services/agent/engines/claude-code/engine.js +89 -9
  3. package/dist/server/services/agent/engines/claude-code/event-mapper.js +6 -4
  4. package/dist/server/services/agent/engines/codex/engine.js +121 -8
  5. package/dist/server/services/agent/engines/codex/event-mapper.js +3 -1
  6. package/package.json +1 -1
  7. package/src/client/dist/pwa/assets/{ActivityFeed-BNDQPIiW.js → ActivityFeed-Ds8cAMNc.js} +1 -1
  8. package/src/client/dist/pwa/assets/{ChangelogPage-DWeiMCL1.js → ChangelogPage-DO6DNO4Q.js} +1 -1
  9. package/src/client/dist/pwa/assets/{ClosePopup-Bl8KdN_j.js → ClosePopup-DuAqn8Pb.js} +1 -1
  10. package/src/client/dist/pwa/assets/CreatePage-BnMSo_79.js +2 -0
  11. package/src/client/dist/pwa/assets/CreatePage-CV_RpAuV.css +1 -0
  12. package/src/client/dist/pwa/assets/{DiffViewer-BwfYKTny.js → DiffViewer-CMnFGReI.js} +3 -3
  13. package/src/client/dist/pwa/assets/{HealthPage-zm1qy4bo.js → HealthPage-BRAxQKSP.js} +1 -1
  14. package/src/client/dist/pwa/assets/{MainLayout-BDVUkruC.js → MainLayout-BN1ug95K.js} +2 -2
  15. package/src/client/dist/pwa/assets/{QBtnToggle-BKZW3k57.js → QBtnToggle-DsCDNQzX.js} +1 -1
  16. package/src/client/dist/pwa/assets/{QChip-CMB-IbQd.js → QChip-DWGDTZnX.js} +1 -1
  17. package/src/client/dist/pwa/assets/{QSelect-DCm1FiOk.js → QSelect-8Ip46vhk.js} +1 -1
  18. package/src/client/dist/pwa/assets/{QTooltip-8fQLc_4N.js → QTooltip-Bz4g3bmr.js} +1 -1
  19. package/src/client/dist/pwa/assets/{SearchPage-B-prQgu3.js → SearchPage-BD53VJEr.js} +1 -1
  20. package/src/client/dist/pwa/assets/{SettingsPage-CbasGyLP.js → SettingsPage-3rYdJZga.js} +1 -1
  21. package/src/client/dist/pwa/assets/{TouchPan-CmmS3gg6.js → TouchPan-BKu8V4eN.js} +1 -1
  22. package/src/client/dist/pwa/assets/{WorkspacePage-B9I2mQJE.js → WorkspacePage-CbC_t5Rx.js} +3 -3
  23. package/src/client/dist/pwa/assets/{cssMode-B4oUyX4f.js → cssMode-vaMVESGy.js} +1 -1
  24. package/src/client/dist/pwa/assets/{documents-UdlveYUp.js → documents-CyKQ9lT6.js} +1 -1
  25. package/src/client/dist/pwa/assets/{editor.api-ByJzr33G.js → editor.api-CH3dhpKq.js} +1 -1
  26. package/src/client/dist/pwa/assets/{expand-template-zfuUsWH3.js → expand-template-DQQQftsk.js} +1 -1
  27. package/src/client/dist/pwa/assets/{freemarker2-DurjKE7N.js → freemarker2-deLpERsj.js} +1 -1
  28. package/src/client/dist/pwa/assets/{handlebars-gwHbbDT2.js → handlebars-DdjS05Tc.js} +1 -1
  29. package/src/client/dist/pwa/assets/{html-DDNV7Gkm.js → html-pK1ZEFvP.js} +1 -1
  30. package/src/client/dist/pwa/assets/{htmlMode-BxdPTVhK.js → htmlMode-DJFDI9Ru.js} +1 -1
  31. package/src/client/dist/pwa/assets/i18n-CK38o-IF.js +1 -0
  32. package/src/client/dist/pwa/assets/{index-M0ntkdkQ.js → index-B_OmZ65F.js} +2 -2
  33. package/src/client/dist/pwa/assets/{javascript-Dp0eAm2m.js → javascript-DbuFfxco.js} +1 -1
  34. package/src/client/dist/pwa/assets/{jsonMode-DLllFEMT.js → jsonMode-B0Fu8Dcc.js} +1 -1
  35. package/src/client/dist/pwa/assets/{kobo-commands-So0Do2g1.js → kobo-commands-rb43ZeWG.js} +1 -1
  36. package/src/client/dist/pwa/assets/{layout-CfEpJmm_.js → layout-tAFrvQ5V.js} +1 -1
  37. package/src/client/dist/pwa/assets/{liquid-BVwIeblL.js → liquid-DqDIKOCy.js} +1 -1
  38. package/src/client/dist/pwa/assets/{lspLanguageFeatures-CExl7Xgb.js → lspLanguageFeatures-CVcEibfJ.js} +1 -1
  39. package/src/client/dist/pwa/assets/{mdx-ydpr14Ec.js → mdx-Bs4CovhI.js} +1 -1
  40. package/src/client/dist/pwa/assets/{network-auth-CxxR2FZL.js → network-auth-DYrrh7Zr.js} +1 -1
  41. package/src/client/dist/pwa/assets/{pending-diff-open-BqHyeaCb.js → pending-diff-open-D1IYH8Pd.js} +1 -1
  42. package/src/client/dist/pwa/assets/{project-color-Dl2gXBlN.js → project-color-DO6uj29M.js} +1 -1
  43. package/src/client/dist/pwa/assets/{python-BParijRW.js → python-BJoP0uN-.js} +1 -1
  44. package/src/client/dist/pwa/assets/{razor-DmywR0-y.js → razor-cwD-YBcr.js} +1 -1
  45. package/src/client/dist/pwa/assets/{render-chat-markdown-BQBEE7Bn.js → render-chat-markdown-DZnIueUV.js} +1 -1
  46. package/src/client/dist/pwa/assets/{tsMode-C51hBxK8.js → tsMode-of3oS9sU.js} +1 -1
  47. package/src/client/dist/pwa/assets/{typescript-C9LzA9s6.js → typescript-BTWMoUxn.js} +1 -1
  48. package/src/client/dist/pwa/assets/{use-onboarding--VIOMbMd.js → use-onboarding-BTFkRBjE.js} +1 -1
  49. package/src/client/dist/pwa/assets/{use-quasar-B6Aitpct.js → use-quasar-C1RCDSb6.js} +1 -1
  50. package/src/client/dist/pwa/assets/{vs-BJBy3q9a.js → vs-DDeaNKsH.js} +3 -3
  51. package/src/client/dist/pwa/assets/{workers-B89GKCYK.js → workers-DQnKuGcq.js} +1 -1
  52. package/src/client/dist/pwa/assets/{xml-C2D1fXDa.js → xml-RglGWD_3.js} +1 -1
  53. package/src/client/dist/pwa/assets/{yaml-8QFrUEL6.js → yaml-CSqGQpai.js} +1 -1
  54. package/src/client/dist/pwa/index.html +1 -1
  55. package/src/client/dist/pwa/sw.js +1 -1
  56. package/src/client/dist/pwa/assets/CreatePage-QwtfYunr.css +0 -1
  57. package/src/client/dist/pwa/assets/CreatePage-qCRXIoz-.js +0 -2
  58. package/src/client/dist/pwa/assets/i18n-Z1bkxUCG.js +0 -1
package/CHANGELOG.md CHANGED
@@ -4,6 +4,14 @@ All notable changes to Kōbō are documented here. The format is based on
4
4
  [Keep a Changelog](https://keepachangelog.com/). Each release is an `## <version>`
5
5
  section — the in-app "What's new" dialog reads this file.
6
6
 
7
+ ## 1.11.13
8
+
9
+ - fix(engines): unstick agent sessions that never emit session:ended
10
+
11
+ ## 1.11.12
12
+
13
+ - ✨ develop - feat(engines): Garder les sessions ouvertes pour les subagents en arrière-plan
14
+
7
15
  ## 1.11.11
8
16
 
9
17
  - feat(settings): add ECC as a skill suite option (#27)
@@ -20,6 +20,12 @@ const RESULT_DRAIN_TIMEOUT_MS = 15_000;
20
20
  // without producing a result message. Keep a separate, conservative guard for
21
21
  // that shape; active tool/message traffic always cancels and re-arms it.
22
22
  const TEXT_IDLE_TIMEOUT_MS = 120_000;
23
+ // Safety net for a subagent whose terminal `task_notification` carries a
24
+ // status outside the mapper's known-terminal set (SDK schema drift) — it
25
+ // never clears `activeSubagentToolCallIds`, which otherwise blocks
26
+ // `inputStream.close()`/the result-drain watchdog forever. Generous window:
27
+ // legitimate subagents can run for several minutes.
28
+ const SUBAGENT_STALL_TIMEOUT_MS = 10 * 60_000;
23
29
  const MAX_PENDING_USER_MESSAGES = 20;
24
30
  function toMcpServersMap(specs) {
25
31
  if (!specs || specs.length === 0)
@@ -91,6 +97,7 @@ export function createClaudeCodeEngine() {
91
97
  async start(options, onEvent) {
92
98
  const abortController = new AbortController();
93
99
  const mapperState = createMapperState();
100
+ const activeSubagentToolCallIds = new Set();
94
101
  // Pending canUseTool callbacks, keyed by SDK ctx.toolUseID.
95
102
  const pendingResolvers = new Map();
96
103
  const isInteractive = options.agentPermissionMode === 'interactive';
@@ -239,8 +246,11 @@ export function createClaudeCodeEngine() {
239
246
  // near-instantly. If it stays parked (a hung subagent task or stuck
240
247
  // teardown), the `for await` below would wait forever — `session:ended`
241
248
  // would never fire, freezing the orchestrator and the auto-loop. Once a
242
- // `result` is observed we arm a timer that force-emits `session:ended`
243
- // with the result's own outcome, then aborts the generator best-effort.
249
+ // `result` is observed with no background subagent still running, we arm
250
+ // a timer that force-emits `session:ended` with the result's own outcome,
251
+ // then aborts the generator best-effort. A result emitted while a
252
+ // background subagent is active is not terminal: the SDK can still emit
253
+ // its task notification and an automatic continuation turn.
244
254
  let resultDrainTimer;
245
255
  let textIdleTimer;
246
256
  const clearTextIdleWatchdog = () => {
@@ -270,20 +280,69 @@ export function createClaudeCodeEngine() {
270
280
  console.warn(`[claude-engine] SDK generator still open ${RESULT_DRAIN_TIMEOUT_MS}ms after 'result' — forcing session:ended`);
271
281
  const reason = userInterrupted ? 'killed' : mapperState.sawErrorResult ? 'error' : 'completed';
272
282
  emitSessionEnded(reason, reason === 'completed' ? 0 : null);
273
- // A wakeup starts a new turn later; it cannot safely keep this SDK
274
- // stream alive after Kōbō has emitted session:ended and detached its
275
- // controller. Leaving it alive lets late hooks issue AskUserQuestion
276
- // calls against a closed input stream, producing an unanswerable UI
277
- // card followed by "Stream closed". Abort deterministically instead.
278
283
  abortController.abort();
279
284
  }, RESULT_DRAIN_TIMEOUT_MS);
280
285
  resultDrainTimer.unref?.();
281
286
  };
287
+ // Safety net for the "waiting on a background subagent" branch below:
288
+ // if `activeSubagentToolCallIds` never empties (a missed/unrecognised
289
+ // terminal notification), the workspace would otherwise stay `executing`
290
+ // forever. Force the drain through once this fires.
291
+ let subagentStallTimer;
292
+ const clearSubagentStallWatchdog = () => {
293
+ if (!subagentStallTimer)
294
+ return;
295
+ clearTimeout(subagentStallTimer);
296
+ subagentStallTimer = undefined;
297
+ };
298
+ // Re-armed (not merely armed-once) on every qualifying `result` so the
299
+ // deadline tracks the last observed activity, matching the warning
300
+ // message below — a long chain of legitimate subagent-backed turns
301
+ // must not be cut off just because 10 minutes have passed in total.
302
+ const armSubagentStallWatchdog = () => {
303
+ clearSubagentStallWatchdog();
304
+ subagentStallTimer = setTimeout(() => {
305
+ subagentStallTimer = undefined;
306
+ // A message queued between arming and firing means a new turn is
307
+ // about to start on this same stream — don't discard the subagent
308
+ // tracking or force-close under it; the next 'result' re-evaluates.
309
+ if (inputStream.hasUnansweredInput(completedResponses))
310
+ return;
311
+ console.warn(`[claude-engine] Subagent(s) still tracked active ${SUBAGENT_STALL_TIMEOUT_MS}ms after the last turn ended — forcing session drain.`);
312
+ activeSubagentToolCallIds.clear();
313
+ // This is a forced, unclean termination (the subagent may still be
314
+ // alive server-side) — never report it as a normal completion, so
315
+ // auto-loop doesn't treat an orphaned run as forward progress.
316
+ mapperState.sawErrorResult = true;
317
+ inputStream.close();
318
+ armResultDrainWatchdog();
319
+ }, SUBAGENT_STALL_TIMEOUT_MS);
320
+ subagentStallTimer.unref?.();
321
+ };
282
322
  const iteratorPromise = (async () => {
283
323
  iteratorRunning = true;
284
324
  try {
285
325
  for await (const msg of q) {
286
326
  const events = mapSdkMessage(msg, mapperState);
327
+ for (const ev of events) {
328
+ if (ev.kind !== 'subagent:progress')
329
+ continue;
330
+ if (ev.status === 'running')
331
+ activeSubagentToolCallIds.add(ev.toolCallId);
332
+ else
333
+ activeSubagentToolCallIds.delete(ev.toolCallId);
334
+ }
335
+ // The stall watchdog is only armed while we're waiting purely on
336
+ // background subagents (no further SDK turn expected unless one
337
+ // reports done). React the moment the last one clears instead of
338
+ // waiting for a 'result' message that may never come.
339
+ if (subagentStallTimer &&
340
+ activeSubagentToolCallIds.size === 0 &&
341
+ !inputStream.hasUnansweredInput(completedResponses)) {
342
+ clearSubagentStallWatchdog();
343
+ inputStream.close();
344
+ armResultDrainWatchdog();
345
+ }
287
346
  for (const ev of events) {
288
347
  if (ev.kind === 'session:started')
289
348
  discoveredSessionId = ev.engineSessionId;
@@ -301,8 +360,14 @@ export function createClaudeCodeEngine() {
301
360
  completedResponses++;
302
361
  // A queued forced message starts the next response on this same SDK stream.
303
362
  if (!inputStream.hasUnansweredInput(completedResponses)) {
304
- inputStream.close();
305
- armResultDrainWatchdog();
363
+ if (activeSubagentToolCallIds.size === 0) {
364
+ clearSubagentStallWatchdog();
365
+ inputStream.close();
366
+ armResultDrainWatchdog();
367
+ }
368
+ else {
369
+ armSubagentStallWatchdog();
370
+ }
306
371
  }
307
372
  }
308
373
  }
@@ -347,6 +412,7 @@ export function createClaudeCodeEngine() {
347
412
  resultDrainTimer = undefined;
348
413
  }
349
414
  clearTextIdleWatchdog();
415
+ clearSubagentStallWatchdog();
350
416
  // Drain any callback still pending (SDK terminated while awaiting an
351
417
  // answer). canUseTool's abort path covers signalled stops; this
352
418
  // covers natural iterator completion.
@@ -384,6 +450,20 @@ export function createClaudeCodeEngine() {
384
450
  // subtype `error_during_execution` through the normal iterator —
385
451
  // the mapper needs this flag to treat it as a clean stop.
386
452
  mapperState.userInterrupted = true;
453
+ // The soft interrupt below only ends the foreground turn — a
454
+ // background subagent task keeps running unless told to stop via
455
+ // its own API, which would otherwise leave the Stop button
456
+ // appearing to do nothing for up to SUBAGENT_STALL_TIMEOUT_MS.
457
+ for (const taskId of activeSubagentToolCallIds) {
458
+ try {
459
+ void q.stopTask(taskId).catch(() => {
460
+ /* best-effort */
461
+ });
462
+ }
463
+ catch {
464
+ /* best-effort */
465
+ }
466
+ }
387
467
  const qq = q;
388
468
  if (typeof qq.interrupt === 'function') {
389
469
  try {
@@ -195,10 +195,12 @@ export function mapSdkMessage(msg, state) {
195
195
  const toolCallId = typeof parsed.tool_use_id === 'string' ? parsed.tool_use_id : undefined;
196
196
  if (toolCallId) {
197
197
  const usage = parsed.usage;
198
- const taskStatus = typeof parsed.status === 'string' ? parsed.status : undefined;
199
- const isDone = subtype === 'task_notification' &&
200
- taskStatus !== undefined &&
201
- ['completed', 'stopped', 'failed', 'cancelled'].includes(taskStatus);
198
+ // Unlike task_started/task_progress (in-flight signals), task_notification
199
+ // is only ever emitted once a task settles — its `status` value is a
200
+ // reason, not a liveness signal. Treat every task_notification as
201
+ // terminal instead of matching against a status whitelist, so an SDK
202
+ // status value added later doesn't leave the subagent stuck 'running'.
203
+ const isDone = subtype === 'task_notification';
202
204
  events.push({
203
205
  kind: 'subagent:progress',
204
206
  toolCallId,
@@ -11,6 +11,13 @@ import { createTurnLiveness } from './turn-liveness.js';
11
11
  /** Long enough for normal tool work, short enough to recover a lost turn event. */
12
12
  export const CODEX_TURN_IDLE_TIMEOUT_MS = 120_000;
13
13
  export const CODEX_GRACEFUL_INTERRUPT_TIMEOUT_MS = 3_000;
14
+ // Safety net while `turnLiveness` is paused for background subagents: that
15
+ // pause is deliberately unbounded (a legitimate subagent can run long), but
16
+ // if a thread never reports a terminal status (dropped notification, or the
17
+ // sub-thread's own process hanging), nothing else would ever resume it or
18
+ // resolve `turnDonePromise` — the session would hang forever. Generous
19
+ // window, refreshed on every observed subagent-thread status change.
20
+ export const CODEX_SUBAGENT_STALL_TIMEOUT_MS = 10 * 60_000;
14
21
  function wait(ms) {
15
22
  return new Promise((resolve) => setTimeout(resolve, ms));
16
23
  }
@@ -102,10 +109,60 @@ export function createCodexEngine() {
102
109
  }
103
110
  let resolveTurnDone;
104
111
  let rejectTurnDone;
112
+ const activeSubagentThreads = new Map();
113
+ let waitingForBackgroundSubagents = false;
105
114
  const turnDonePromise = new Promise((resolve, reject) => {
106
115
  resolveTurnDone = resolve;
107
116
  rejectTurnDone = reject;
108
117
  });
118
+ let subagentStallTimer;
119
+ const clearSubagentStallWatchdog = () => {
120
+ if (!subagentStallTimer)
121
+ return;
122
+ clearTimeout(subagentStallTimer);
123
+ subagentStallTimer = undefined;
124
+ };
125
+ // Re-armed on every observed subagent-thread status change so the
126
+ // deadline tracks the last activity, not the start of the wait.
127
+ const armSubagentStallWatchdog = () => {
128
+ clearSubagentStallWatchdog();
129
+ subagentStallTimer = setTimeout(() => {
130
+ subagentStallTimer = undefined;
131
+ console.warn(`[codex-engine] Background subagent thread(s) still tracked active ${CODEX_SUBAGENT_STALL_TIMEOUT_MS}ms after the turn completed — forcing session drain.`);
132
+ activeSubagentThreads.clear();
133
+ // Forced, unclean termination (a thread may still be alive
134
+ // server-side) — never report it as a normal completion, so
135
+ // auto-loop doesn't treat an orphaned run as forward progress.
136
+ mapperState.sawErrorResult = true;
137
+ if (waitingForBackgroundSubagents)
138
+ resolveTurnDone();
139
+ }, CODEX_SUBAGENT_STALL_TIMEOUT_MS);
140
+ subagentStallTimer.unref?.();
141
+ };
142
+ const finishBackgroundSubagent = (threadId, alreadyEmittedToolCallId) => {
143
+ const tracked = activeSubagentThreads.get(threadId);
144
+ if (!tracked)
145
+ return;
146
+ activeSubagentThreads.delete(threadId);
147
+ if (tracked.toolCallId !== alreadyEmittedToolCallId) {
148
+ safeEmit({
149
+ kind: 'subagent:progress',
150
+ toolCallId: tracked.toolCallId,
151
+ status: 'done',
152
+ description: tracked.description,
153
+ taskType: tracked.taskType,
154
+ });
155
+ }
156
+ if (waitingForBackgroundSubagents) {
157
+ if (activeSubagentThreads.size === 0) {
158
+ clearSubagentStallWatchdog();
159
+ resolveTurnDone();
160
+ }
161
+ else {
162
+ armSubagentStallWatchdog();
163
+ }
164
+ }
165
+ };
109
166
  const turnLiveness = createTurnLiveness({
110
167
  timeoutMs: CODEX_TURN_IDLE_TIMEOUT_MS,
111
168
  onTimeout() {
@@ -141,22 +198,57 @@ export function createCodexEngine() {
141
198
  safeEmit({ kind: 'mcp:status', serverName, status: normalized, message });
142
199
  return;
143
200
  }
144
- if (method === 'thread/started' ||
145
- method === 'thread/status/changed' ||
146
- method === 'remoteControl/status/changed' ||
147
- method === 'turn/started') {
201
+ if (method === 'thread/status/changed') {
202
+ const notification = params;
203
+ if (notification.threadId && notification.status?.type !== 'active') {
204
+ finishBackgroundSubagent(notification.threadId);
205
+ }
206
+ return;
207
+ }
208
+ if (method === 'thread/started' || method === 'remoteControl/status/changed' || method === 'turn/started') {
148
209
  return;
149
210
  }
150
211
  if (method === 'item/started') {
151
212
  const n = params;
152
- for (const ev of handleItemStarted(n.item, mapperState))
213
+ const events = handleItemStarted(n.item, mapperState);
214
+ for (const ev of events)
153
215
  safeEmit(ev);
216
+ if (n.item.type === 'collabAgentToolCall' && n.item.tool === 'spawnAgent') {
217
+ const progress = events.find((event) => event.kind === 'subagent:progress');
218
+ if (progress) {
219
+ for (const threadId of n.item.receiverThreadIds) {
220
+ activeSubagentThreads.set(threadId, {
221
+ toolCallId: progress.toolCallId,
222
+ description: progress.description,
223
+ taskType: progress.taskType,
224
+ });
225
+ }
226
+ }
227
+ }
154
228
  return;
155
229
  }
156
230
  if (method === 'item/completed') {
157
231
  const n = params;
158
- for (const ev of handleItemCompleted(n.item, mapperState))
232
+ const events = handleItemCompleted(n.item, mapperState);
233
+ for (const ev of events)
159
234
  safeEmit(ev);
235
+ if (n.item.type === 'collabAgentToolCall') {
236
+ const progress = events.find((event) => event.kind === 'subagent:progress');
237
+ for (const [threadId, agentState] of Object.entries(n.item.agentsStates)) {
238
+ if (agentState.status === 'pendingInit' || agentState.status === 'running') {
239
+ if (progress) {
240
+ activeSubagentThreads.set(threadId, {
241
+ toolCallId: progress.toolCallId,
242
+ description: progress.description,
243
+ taskType: progress.taskType,
244
+ });
245
+ }
246
+ }
247
+ else {
248
+ finishBackgroundSubagent(threadId, progress?.status === 'done' ? progress.toolCallId : undefined);
249
+ }
250
+ }
251
+ }
160
252
  return;
161
253
  }
162
254
  if (method === 'item/agentMessage/delta') {
@@ -169,8 +261,16 @@ export function createCodexEngine() {
169
261
  const n = params;
170
262
  for (const ev of handleTurnCompleted(n, mapperState))
171
263
  safeEmit(ev);
172
- if (!activeTurnId || !n.turn?.id || n.turn.id === activeTurnId)
173
- resolveTurnDone();
264
+ if (!activeTurnId || !n.turn?.id || n.turn.id === activeTurnId) {
265
+ if (n.turn?.status === 'completed' && activeSubagentThreads.size > 0) {
266
+ waitingForBackgroundSubagents = true;
267
+ turnLiveness.pause();
268
+ armSubagentStallWatchdog();
269
+ }
270
+ else {
271
+ resolveTurnDone();
272
+ }
273
+ }
174
274
  return;
175
275
  }
176
276
  if (method === 'thread/tokenUsage/updated') {
@@ -303,8 +403,21 @@ export function createCodexEngine() {
303
403
  }
304
404
  finally {
305
405
  turnLiveness.stop();
406
+ clearSubagentStallWatchdog();
306
407
  streamingBatcher.close();
307
408
  iteratorRunning = false;
409
+ // Drain any outstanding approval/elicitation request (SDK terminated
410
+ // while awaiting a human decision) — without a response, Codex's own
411
+ // process would otherwise wait forever for a reply that never comes.
412
+ for (const pending of pendingByCallId.values()) {
413
+ try {
414
+ client.peer.respondError(pending.requestId, -32000, 'session ended');
415
+ }
416
+ catch {
417
+ // best-effort
418
+ }
419
+ }
420
+ pendingByCallId.clear();
308
421
  client.close();
309
422
  try {
310
423
  child.kill('SIGTERM');
@@ -252,6 +252,8 @@ export function handleItemCompleted(item, state) {
252
252
  }
253
253
  if (item.type === 'collabAgentToolCall') {
254
254
  const toolCallId = scopedId(state, item.id);
255
+ const hasActiveAgent = item.status === 'completed' &&
256
+ Object.values(item.agentsStates).some((agentState) => agentState.status === 'pendingInit' || agentState.status === 'running');
255
257
  events.push({
256
258
  kind: 'tool:result',
257
259
  toolCallId,
@@ -265,7 +267,7 @@ export function handleItemCompleted(item, state) {
265
267
  events.push({
266
268
  kind: 'subagent:progress',
267
269
  toolCallId,
268
- status: 'done',
270
+ status: hasActiveAgent ? 'running' : 'done',
269
271
  description: item.prompt ?? item.tool,
270
272
  taskType: item.tool,
271
273
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@loicngr/kobo",
3
- "version": "1.11.11",
3
+ "version": "1.11.13",
4
4
  "description": "Kōbō — multi-workspace agent manager for Claude Code. Orchestrates isolated git worktrees with dev servers, Notion integration, and MCP tools.",
5
5
  "type": "module",
6
6
  "license": "GPL-3.0-or-later",
@@ -1,4 +1,4 @@
1
- import{n as e}from"./vue-i18n-C3W5i7h6.js";import{B as t,C as n,St as r,wt as i,yt as a}from"./reactivity.esm-bundler-DtSZKRQB.js";import{$ as o,A as s,B as c,H as l,It as u,Mt as d,Rt as f,Tt as p,U as m,V as h,W as g,Wt as _,X as v,Z as y,_n as b,fn as x,t as S,w as C}from"./runtime-dom.esm-bundler-DgevF6KV.js";import{l as w,t as T}from"./QIcon--SvgE-nS.js";import{G as E,P as D,Q as O,d as k,f as A,v as j,y as M}from"./index-M0ntkdkQ.js";import{t as N}from"./QSpinnerDots-B4RmFJUj.js";import{u as ee}from"./QSelect-DCm1FiOk.js";import{t as P}from"./QTooltip-8fQLc_4N.js";import{r as F,t as te}from"./pending-diff-open-BqHyeaCb.js";import{t as I}from"./documents-UdlveYUp.js";import{i as L,n as ne,t as R}from"./render-chat-markdown-BQBEE7Bn.js";import{t as z}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{n as B}from"./WorkspacePage-B9I2mQJE.js";function re(e,t,n=!0,r){let i=[],a=new Map,o=new Map;for(let n=0;n<e.length;n++){let s=e[n],c=t?.[n],l=r?.[n]??void 0;switch(s.kind){case`message:text`:{let e=a.get(s.messageId);if(e)e.text+=s.text,e.streaming=s.streaming,l&&e.eventIds?.push(l);else{let e={type:`text`,messageId:s.messageId,text:s.text,streaming:s.streaming,ts:c,eventIds:l?[l]:void 0};a.set(s.messageId,e),i.push(e)}break}case`message:end`:{let e=a.get(s.messageId);e&&(e.streaming=!1);break}case`message:thinking`:i.push({type:`thinking`,messageId:s.messageId,text:s.text,ts:c,eventIds:l?[l]:void 0});break;case`tool:call`:{let e={type:`tool`,toolCallId:s.toolCallId,name:s.name,input:s.input,ts:c,eventIds:l?[l]:void 0};o.set(s.toolCallId,e),i.push(e);break}case`tool:result`:{let e=o.get(s.toolCallId);e&&(e.result={output:s.output,isError:s.isError},l&&e.eventIds?.push(l));break}case`session:started`:i.push({type:`session`,kind:`started`,detail:{engineSessionId:s.engineSessionId,model:s.model},ts:c,eventIds:l?[l]:void 0});break;case`session:ended`:i.push({type:`session`,kind:`ended`,detail:{reason:s.reason,exitCode:s.exitCode},ts:c,eventIds:l?[l]:void 0});break;case`session:compacted`:i.push({type:`session`,kind:`compacted`,ts:c,eventIds:l?[l]:void 0})}}let s=null;for(let e of i)e.type===`text`&&e.streaming&&(s&&(s.streaming=!1),s=e);return s&&!n&&(s.streaming=!1),i}function ie(e,t){if(t.length===0)return e;let n=t.map(e=>({type:`user`,content:e.content,sender:e.sender,ts:e.ts,eventIds:e.eventIds})),r=[...e,...n];r.sort((e,t)=>{let n=e.ts??``,r=t.ts??``;return n===r?0:n?r?n<r?-1:1:-1:1});let i;for(let e of r)e.type===`user`&&e.sender!==`system-prompt`&&e.ts&&(!i||e.ts>i)&&(i=e.ts);if(i)for(let e of r)e.type===`text`&&e.streaming&&(!e.ts||e.ts<i)&&(e.streaming=!1);return r}var V=new Set([`setup`,`cleanup`,`archive`]);function H(e){switch(e.type){case`user`:return e.sender===`system-prompt`?`system-prompt`:V.has(e.sender)?`script`:`user`;case`session`:return`session`;default:return`agent`}}function ae(e){let t=[],n=null,r=null;for(let i of e){let e=H(i),a=e===`session`||e===`system-prompt`,o=e===`script`&&i.type===`user`?`script:${i.sender}`:e;!n||r!==o||a?(n={speaker:e,ts:i.ts,items:[i]},r=o,t.push(n),a&&(n=null)):n.items.push(i)}return t}var U={class:`text-caption text-grey-6`},oe=o({__name:`SessionEventItem`,props:{item:{}},setup(e){let t=e,n=c(()=>{switch(t.item.kind){case`started`:return`session.started`;case`ended`:return`session.ended`;case`compacted`:return`session.compacted`;default:return`session.started`}});return(e,t)=>(f(),g(`span`,U,i(e.$t(n.value)),1))}});function se(e,t){if(t.length===0||e.length===0)return e;let n=[...t].sort((e,t)=>t.length-e.length),r=new DOMParser().parseFromString(`<div>${e}</div>`,`text/html`),i=r.body.firstChild;if(!i)return e;function a(e){if(e.nodeType===Node.TEXT_NODE){ce(e,n,r);return}if(e.nodeName===`A`)return;let t=Array.from(e.childNodes);for(let e of t)a(e)}return a(i),i.innerHTML}function ce(e,t,n){let r=e.textContent??``;if(!t.some(e=>r.includes(e)))return;let i=n.createDocumentFragment(),a=0;for(;a<r.length;){let e=le(r,a,t);if(!e){i.appendChild(n.createTextNode(r.slice(a)));break}e.index>a&&i.appendChild(n.createTextNode(r.slice(a,e.index)));let o=n.createElement(`a`);o.className=`document-link`,o.setAttribute(`data-document-path`,e.path),o.setAttribute(`href`,`#`),o.textContent=e.path,i.appendChild(o),a=e.index+e.path.length}e.parentNode?.replaceChild(i,e)}function le(e,t,n){let r=null;for(let i of n){let n=e.indexOf(i,t);n<0||(!r||n<r.index||n===r.index&&i.length>r.path.length)&&(r={index:n,path:i})}return r}var W=[`innerHTML`],ue=z(o({__name:`TextMessageItem`,props:{item:{}},setup(e){let t=e,n=I(),r=k(),i=c(()=>{let e=r.selectedWorkspaceId;return e?n.documentsFor(e).map(e=>e.path):[]}),a=c(()=>{let e=se(L.parse(t.item.text,{async:!1,breaks:!0,gfm:!0}),i.value);return ne(e,{addAttr:[`data-document-path`]})});function o(e){let t=e.target?.closest(`.document-link`);if(!t)return;e.preventDefault();let i=t.getAttribute(`data-document-path`),a=r.selectedWorkspaceId;!i||!a||n.openDocumentByPath(a,i)}return(t,n)=>(f(),g(`div`,{class:`markdown-message`,onClick:o},[h(`div`,{innerHTML:a.value},null,8,W),e.item.streaming?(f(),l(w,{key:0,size:`xs`,class:`q-ml-xs`})):m(``,!0)]))}}),[[`__scopeId`,`data-v-1b7bd8ca`]]);function de(e,t){let n=e.split(`
1
+ import{n as e}from"./vue-i18n-C3W5i7h6.js";import{B as t,C as n,St as r,wt as i,yt as a}from"./reactivity.esm-bundler-DtSZKRQB.js";import{$ as o,A as s,B as c,H as l,It as u,Mt as d,Rt as f,Tt as p,U as m,V as h,W as g,Wt as _,X as v,Z as y,_n as b,fn as x,t as S,w as C}from"./runtime-dom.esm-bundler-DgevF6KV.js";import{l as w,t as T}from"./QIcon--SvgE-nS.js";import{G as E,P as D,Q as O,d as k,f as A,v as j,y as M}from"./index-B_OmZ65F.js";import{t as N}from"./QSpinnerDots-B4RmFJUj.js";import{u as ee}from"./QSelect-8Ip46vhk.js";import{t as P}from"./QTooltip-Bz4g3bmr.js";import{r as F,t as te}from"./pending-diff-open-D1IYH8Pd.js";import{t as I}from"./documents-CyKQ9lT6.js";import{i as L,n as ne,t as R}from"./render-chat-markdown-DZnIueUV.js";import{t as z}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{n as B}from"./WorkspacePage-CbC_t5Rx.js";function re(e,t,n=!0,r){let i=[],a=new Map,o=new Map;for(let n=0;n<e.length;n++){let s=e[n],c=t?.[n],l=r?.[n]??void 0;switch(s.kind){case`message:text`:{let e=a.get(s.messageId);if(e)e.text+=s.text,e.streaming=s.streaming,l&&e.eventIds?.push(l);else{let e={type:`text`,messageId:s.messageId,text:s.text,streaming:s.streaming,ts:c,eventIds:l?[l]:void 0};a.set(s.messageId,e),i.push(e)}break}case`message:end`:{let e=a.get(s.messageId);e&&(e.streaming=!1);break}case`message:thinking`:i.push({type:`thinking`,messageId:s.messageId,text:s.text,ts:c,eventIds:l?[l]:void 0});break;case`tool:call`:{let e={type:`tool`,toolCallId:s.toolCallId,name:s.name,input:s.input,ts:c,eventIds:l?[l]:void 0};o.set(s.toolCallId,e),i.push(e);break}case`tool:result`:{let e=o.get(s.toolCallId);e&&(e.result={output:s.output,isError:s.isError},l&&e.eventIds?.push(l));break}case`session:started`:i.push({type:`session`,kind:`started`,detail:{engineSessionId:s.engineSessionId,model:s.model},ts:c,eventIds:l?[l]:void 0});break;case`session:ended`:i.push({type:`session`,kind:`ended`,detail:{reason:s.reason,exitCode:s.exitCode},ts:c,eventIds:l?[l]:void 0});break;case`session:compacted`:i.push({type:`session`,kind:`compacted`,ts:c,eventIds:l?[l]:void 0})}}let s=null;for(let e of i)e.type===`text`&&e.streaming&&(s&&(s.streaming=!1),s=e);return s&&!n&&(s.streaming=!1),i}function ie(e,t){if(t.length===0)return e;let n=t.map(e=>({type:`user`,content:e.content,sender:e.sender,ts:e.ts,eventIds:e.eventIds})),r=[...e,...n];r.sort((e,t)=>{let n=e.ts??``,r=t.ts??``;return n===r?0:n?r?n<r?-1:1:-1:1});let i;for(let e of r)e.type===`user`&&e.sender!==`system-prompt`&&e.ts&&(!i||e.ts>i)&&(i=e.ts);if(i)for(let e of r)e.type===`text`&&e.streaming&&(!e.ts||e.ts<i)&&(e.streaming=!1);return r}var V=new Set([`setup`,`cleanup`,`archive`]);function H(e){switch(e.type){case`user`:return e.sender===`system-prompt`?`system-prompt`:V.has(e.sender)?`script`:`user`;case`session`:return`session`;default:return`agent`}}function ae(e){let t=[],n=null,r=null;for(let i of e){let e=H(i),a=e===`session`||e===`system-prompt`,o=e===`script`&&i.type===`user`?`script:${i.sender}`:e;!n||r!==o||a?(n={speaker:e,ts:i.ts,items:[i]},r=o,t.push(n),a&&(n=null)):n.items.push(i)}return t}var U={class:`text-caption text-grey-6`},oe=o({__name:`SessionEventItem`,props:{item:{}},setup(e){let t=e,n=c(()=>{switch(t.item.kind){case`started`:return`session.started`;case`ended`:return`session.ended`;case`compacted`:return`session.compacted`;default:return`session.started`}});return(e,t)=>(f(),g(`span`,U,i(e.$t(n.value)),1))}});function se(e,t){if(t.length===0||e.length===0)return e;let n=[...t].sort((e,t)=>t.length-e.length),r=new DOMParser().parseFromString(`<div>${e}</div>`,`text/html`),i=r.body.firstChild;if(!i)return e;function a(e){if(e.nodeType===Node.TEXT_NODE){ce(e,n,r);return}if(e.nodeName===`A`)return;let t=Array.from(e.childNodes);for(let e of t)a(e)}return a(i),i.innerHTML}function ce(e,t,n){let r=e.textContent??``;if(!t.some(e=>r.includes(e)))return;let i=n.createDocumentFragment(),a=0;for(;a<r.length;){let e=le(r,a,t);if(!e){i.appendChild(n.createTextNode(r.slice(a)));break}e.index>a&&i.appendChild(n.createTextNode(r.slice(a,e.index)));let o=n.createElement(`a`);o.className=`document-link`,o.setAttribute(`data-document-path`,e.path),o.setAttribute(`href`,`#`),o.textContent=e.path,i.appendChild(o),a=e.index+e.path.length}e.parentNode?.replaceChild(i,e)}function le(e,t,n){let r=null;for(let i of n){let n=e.indexOf(i,t);n<0||(!r||n<r.index||n===r.index&&i.length>r.path.length)&&(r={index:n,path:i})}return r}var W=[`innerHTML`],ue=z(o({__name:`TextMessageItem`,props:{item:{}},setup(e){let t=e,n=I(),r=k(),i=c(()=>{let e=r.selectedWorkspaceId;return e?n.documentsFor(e).map(e=>e.path):[]}),a=c(()=>{let e=se(L.parse(t.item.text,{async:!1,breaks:!0,gfm:!0}),i.value);return ne(e,{addAttr:[`data-document-path`]})});function o(e){let t=e.target?.closest(`.document-link`);if(!t)return;e.preventDefault();let i=t.getAttribute(`data-document-path`),a=r.selectedWorkspaceId;!i||!a||n.openDocumentByPath(a,i)}return(t,n)=>(f(),g(`div`,{class:`markdown-message`,onClick:o},[h(`div`,{innerHTML:a.value},null,8,W),e.item.streaming?(f(),l(w,{key:0,size:`xs`,class:`q-ml-xs`})):m(``,!0)]))}}),[[`__scopeId`,`data-v-1b7bd8ca`]]);function de(e,t){let n=e.split(`
2
2
  `),r=t.split(`
3
3
  `),i=n.length,a=r.length,o=Array.from({length:i+1},()=>Array(a+1).fill(0));for(let e=i-1;e>=0;e--)for(let t=a-1;t>=0;t--)n[e]===r[t]?o[e][t]=o[e+1][t+1]+1:o[e][t]=Math.max(o[e+1][t],o[e][t+1]);let s=[],c=0,l=0;for(;c<i&&l<a;)n[c]===r[l]?(s.push({type:`context`,content:n[c]}),c++,l++):o[c+1][l]>=o[c][l+1]?(s.push({type:`del`,content:n[c]}),c++):(s.push({type:`add`,content:r[l]}),l++);for(;c<i;)s.push({type:`del`,content:n[c++]});for(;l<a;)s.push({type:`add`,content:r[l++]});return s}function G(e){let t=e.split(`
4
4
  `),n=[];for(let e of t)e.startsWith(`@@`)||e.startsWith(`+++`)||e.startsWith(`---`)||(e.startsWith(`+`)?n.push({type:`add`,content:e.slice(1)}):e.startsWith(`-`)?n.push({type:`del`,content:e.slice(1)}):e.startsWith(` `)?n.push({type:`context`,content:e.slice(1)}):e.length>0&&n.push({type:`context`,content:e}));return n}function K(e,t){if(!t||typeof t!=`object`)return null;let n=t;if(e===`Edit`){let e=n.file_path;if(!e)return null;let t=n.old_string??``,r=n.new_string??``,i=typeof n.diff==`string`?n.diff:``;if(!t&&!r&&i.length>0){let t=G(i);return{toolName:`Edit`,filePath:e,additions:t.filter(e=>e.type===`add`).length,deletions:t.filter(e=>e.type===`del`).length,diffLines:t}}return{toolName:`Edit`,filePath:e,oldString:t,newString:r,replaceAll:n.replace_all??!1,additions:r?r.split(`
@@ -1 +1 @@
1
- import{B as e,C as t,wt as n}from"./reactivity.esm-bundler-DtSZKRQB.js";import{$ as r,A as i,H as a,Mt as o,Rt as s,U as c,V as l,W as u,Wt as d,Z as f,_n as p}from"./runtime-dom.esm-bundler-DgevF6KV.js";import{Dt as m,G as h,kt as g,s as _}from"./index-M0ntkdkQ.js";import{t as v}from"./render-chat-markdown-BQBEE7Bn.js";import{t as y}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{t as b}from"./QSpace-D9UEvM99.js";import{t as x}from"./QChip-CMB-IbQd.js";import{t as S}from"./QPage-DuIsRmYu.js";var C={class:`row items-center q-mb-md`},w={class:`text-h6 q-ml-sm`},T={key:0,class:`text-grey-6 text-center q-pa-lg`},E={key:1,class:`text-negative text-center q-pa-lg`},D={key:2,class:`text-grey-6 text-center q-pa-lg`},O={key:3,class:`column q-gutter-md`},k={key:0,class:`text-caption text-grey-6`},A={class:`row items-center q-mb-sm`},j={class:`text-subtitle1 text-indigo-3`,style:{"font-family":`var(--kobo-font-mono, monospace)`}},M=[`innerHTML`],N=y(r({__name:`ChangelogPage`,setup(r){let y=_(),N=t([]),P=t(``),F=t(!1),I=t(null);function L(e){return v(e)}async function R(){F.value=!0,I.value=null;try{let e=await fetch(`/api/changelog`);if(!e.ok)throw Error(`HTTP ${e.status}`);let t=await e.json();P.value=t.currentVersion??``,N.value=t.versions??[]}catch(e){I.value=e instanceof Error?e.message:String(e)}finally{F.value=!1}}return o(R),(t,r)=>(s(),a(S,{class:`q-pa-md`,style:{"max-width":`900px`,margin:`0 auto`}},{default:p(()=>[l(`div`,C,[f(h,{flat:``,dense:``,round:``,icon:`arrow_back`,onClick:r[0]||=t=>e(y).back()}),l(`div`,w,n(t.$t(`changelog.title`)),1),f(b),f(h,{flat:``,dense:``,icon:`refresh`,loading:F.value,label:t.$t(`common.refresh`),onClick:R},null,8,[`loading`,`label`])]),F.value&&N.value.length===0?(s(),u(`div`,T,n(t.$t(`common.loading`)),1)):I.value?(s(),u(`div`,E,n(I.value),1)):N.value.length===0?(s(),u(`div`,D,n(t.$t(`changelog.empty`)),1)):(s(),u(`div`,O,[P.value?(s(),u(`div`,k,n(t.$t(`changelog.currentVersion`,{version:P.value})),1)):c(``,!0),(s(!0),u(i,null,d(N.value,e=>(s(),a(m,{key:e.version,dark:``,flat:``,bordered:``},{default:p(()=>[f(g,null,{default:p(()=>[l(`div`,A,[l(`div`,j,` v`+n(e.version),1),e.version===P.value?(s(),a(x,{key:0,dense:``,size:`sm`,color:`indigo-7`,"text-color":`grey-2`,label:t.$t(`changelog.current`),class:`q-ml-sm`},null,8,[`label`])):c(``,!0)]),l(`div`,{class:`changelog-notes`,innerHTML:L(e.notes)},null,8,M)]),_:2},1024)]),_:2},1024))),128))]))]),_:1}))}}),[[`__scopeId`,`data-v-ed73d661`]]);export{N as default};
1
+ import{B as e,C as t,wt as n}from"./reactivity.esm-bundler-DtSZKRQB.js";import{$ as r,A as i,H as a,Mt as o,Rt as s,U as c,V as l,W as u,Wt as d,Z as f,_n as p}from"./runtime-dom.esm-bundler-DgevF6KV.js";import{Dt as m,G as h,kt as g,s as _}from"./index-B_OmZ65F.js";import{t as v}from"./render-chat-markdown-DZnIueUV.js";import{t as y}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{t as b}from"./QSpace-D9UEvM99.js";import{t as x}from"./QChip-DWGDTZnX.js";import{t as S}from"./QPage-DuIsRmYu.js";var C={class:`row items-center q-mb-md`},w={class:`text-h6 q-ml-sm`},T={key:0,class:`text-grey-6 text-center q-pa-lg`},E={key:1,class:`text-negative text-center q-pa-lg`},D={key:2,class:`text-grey-6 text-center q-pa-lg`},O={key:3,class:`column q-gutter-md`},k={key:0,class:`text-caption text-grey-6`},A={class:`row items-center q-mb-sm`},j={class:`text-subtitle1 text-indigo-3`,style:{"font-family":`var(--kobo-font-mono, monospace)`}},M=[`innerHTML`],N=y(r({__name:`ChangelogPage`,setup(r){let y=_(),N=t([]),P=t(``),F=t(!1),I=t(null);function L(e){return v(e)}async function R(){F.value=!0,I.value=null;try{let e=await fetch(`/api/changelog`);if(!e.ok)throw Error(`HTTP ${e.status}`);let t=await e.json();P.value=t.currentVersion??``,N.value=t.versions??[]}catch(e){I.value=e instanceof Error?e.message:String(e)}finally{F.value=!1}}return o(R),(t,r)=>(s(),a(S,{class:`q-pa-md`,style:{"max-width":`900px`,margin:`0 auto`}},{default:p(()=>[l(`div`,C,[f(h,{flat:``,dense:``,round:``,icon:`arrow_back`,onClick:r[0]||=t=>e(y).back()}),l(`div`,w,n(t.$t(`changelog.title`)),1),f(b),f(h,{flat:``,dense:``,icon:`refresh`,loading:F.value,label:t.$t(`common.refresh`),onClick:R},null,8,[`loading`,`label`])]),F.value&&N.value.length===0?(s(),u(`div`,T,n(t.$t(`common.loading`)),1)):I.value?(s(),u(`div`,E,n(I.value),1)):N.value.length===0?(s(),u(`div`,D,n(t.$t(`changelog.empty`)),1)):(s(),u(`div`,O,[P.value?(s(),u(`div`,k,n(t.$t(`changelog.currentVersion`,{version:P.value})),1)):c(``,!0),(s(!0),u(i,null,d(N.value,e=>(s(),a(m,{key:e.version,dark:``,flat:``,bordered:``},{default:p(()=>[f(g,null,{default:p(()=>[l(`div`,A,[l(`div`,j,` v`+n(e.version),1),e.version===P.value?(s(),a(x,{key:0,dense:``,size:`sm`,color:`indigo-7`,"text-color":`grey-2`,label:t.$t(`changelog.current`),class:`q-ml-sm`},null,8,[`label`])):c(``,!0)]),l(`div`,{class:`changelog-notes`,innerHTML:L(e.notes)},null,8,M)]),_:2},1024)]),_:2},1024))),128))]))]),_:1}))}}),[[`__scopeId`,`data-v-ed73d661`]]);export{N as default};
@@ -1 +1 @@
1
- import{P as e,b as t}from"./QIcon--SvgE-nS.js";import{gt as n,ht as r}from"./index-M0ntkdkQ.js";var i={left:!0,right:!0,up:!0,down:!0,horizontal:!0,vertical:!0},a=Object.keys(i);i.all=!0;function o(e){let t={};for(let n of a)e[n]&&(t[n]=!0);return Object.keys(t).length===0?i:(t.horizontal?t.left=t.right=!0:t.left&&t.right&&(t.horizontal=!0),t.vertical?t.up=t.down=!0:t.up&&t.down&&(t.vertical=!0),t.horizontal&&t.vertical&&(t.all=!0),t)}var s=[`INPUT`,`TEXTAREA`];function c(e,t){return t.event===void 0&&e.target!==void 0&&!e.target.draggable&&typeof t.handler==`function`&&!s.includes(e.target.nodeName.toUpperCase())&&(e.qClonedBy===void 0||!e.qClonedBy.includes(t.uid))}function l(e){return e===!1?0:e===!0||e===void 0?1:Number.parseInt(e,10)||0}var u=e({name:`close-popup`,beforeMount(e,{value:i}){let a={depth:l(i),handler(t){a.depth!==0&&setTimeout(()=>{let i=n(e);i!==void 0&&r(i,t,a.depth)},0)},handlerKey(e){t(e,13)&&a.handler(e)}};e.__qclosepopup=a,e.addEventListener(`click`,a.handler),e.addEventListener(`keyup`,a.handlerKey)},updated(e,{value:t,oldValue:n}){t!==n&&(e.__qclosepopup.depth=l(t))},beforeUnmount(e){let t=e.__qclosepopup;e.removeEventListener(`click`,t.handler),e.removeEventListener(`keyup`,t.handlerKey),delete e.__qclosepopup}});export{o as n,c as r,u as t};
1
+ import{P as e,b as t}from"./QIcon--SvgE-nS.js";import{gt as n,ht as r}from"./index-B_OmZ65F.js";var i={left:!0,right:!0,up:!0,down:!0,horizontal:!0,vertical:!0},a=Object.keys(i);i.all=!0;function o(e){let t={};for(let n of a)e[n]&&(t[n]=!0);return Object.keys(t).length===0?i:(t.horizontal?t.left=t.right=!0:t.left&&t.right&&(t.horizontal=!0),t.vertical?t.up=t.down=!0:t.up&&t.down&&(t.vertical=!0),t.horizontal&&t.vertical&&(t.all=!0),t)}var s=[`INPUT`,`TEXTAREA`];function c(e,t){return t.event===void 0&&e.target!==void 0&&!e.target.draggable&&typeof t.handler==`function`&&!s.includes(e.target.nodeName.toUpperCase())&&(e.qClonedBy===void 0||!e.qClonedBy.includes(t.uid))}function l(e){return e===!1?0:e===!0||e===void 0?1:Number.parseInt(e,10)||0}var u=e({name:`close-popup`,beforeMount(e,{value:i}){let a={depth:l(i),handler(t){a.depth!==0&&setTimeout(()=>{let i=n(e);i!==void 0&&r(i,t,a.depth)},0)},handlerKey(e){t(e,13)&&a.handler(e)}};e.__qclosepopup=a,e.addEventListener(`click`,a.handler),e.addEventListener(`keyup`,a.handlerKey)},updated(e,{value:t,oldValue:n}){t!==n&&(e.__qclosepopup.depth=l(t))},beforeUnmount(e){let t=e.__qclosepopup;e.removeEventListener(`click`,t.handler),e.removeEventListener(`keyup`,t.handlerKey),delete e.__qclosepopup}});export{o as n,c as r,u as t};
@@ -0,0 +1,2 @@
1
+ import{n as e}from"./vue-i18n-C3W5i7h6.js";import{B as t,C as n,wt as r,xt as i,yt as ee}from"./reactivity.esm-bundler-DtSZKRQB.js";import{$ as te,A as ne,B as a,C as re,H as o,It as ie,Mt as ae,Rt as s,Tt as oe,U as c,V as l,W as u,Wt as se,X as d,Z as f,_n as p,fn as m,lt as ce,t as le,w as h}from"./runtime-dom.esm-bundler-DgevF6KV.js";import{t as g}from"./QIcon--SvgE-nS.js";import{t as ue}from"./QSeparator-BdyRE-AM.js";import{o as de}from"./use-checkbox-SrkgiJho.js";import{Dt as _,G as v,L as fe,R as pe,d as me,g as he,kt as y,l as ge,n as _e,s as ve,v as ye}from"./index-B_OmZ65F.js";import{t as be}from"./QSpinnerDots-B4RmFJUj.js";import{n as b,r as x,t as xe}from"./use-quasar-C1RCDSb6.js";import{d as S,n as Se,t as C,u as Ce}from"./QSelect-8Ip46vhk.js";import{t as we}from"./QTooltip-Bz4g3bmr.js";import{t as Te}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{t as Ee}from"./QChip-DWGDTZnX.js";import{t as De}from"./QBtnToggle-DsCDNQzX.js";import{i as Oe}from"./project-color-DO6uj29M.js";import{t as ke}from"./QPage-DuIsRmYu.js";import{a as Ae,i as je,n as Me,r as Ne,t as Pe}from"./expand-template-DQQQftsk.js";import{i as Fe,r as Ie,t as Le}from"./permissionModes-6jhegAm-.js";var Re=`kobo:create-page-prefs`;function w(){try{let e=localStorage.getItem(Re);return e===null?void 0:JSON.parse(e)}catch{return}}function ze(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Be(){let e=w();if(!ze(e))return{};let t={};if(typeof e.projectPath==`string`&&e.projectPath.length>0&&(t.projectPath=e.projectPath),typeof e.autoLoop==`boolean`&&(t.autoLoop=e.autoLoop),(e.autoLoopSessionMode===`per_task`||e.autoLoopSessionMode===`continuous`)&&(t.autoLoopSessionMode=e.autoLoopSessionMode),typeof e.brainstormModel==`string`&&e.brainstormModel.length>0&&(t.brainstormModel=e.brainstormModel),ze(e.reasoningEffortByModel)){let n=Object.entries(e.reasoningEffortByModel).filter(([e,t])=>e.length>0&&typeof t==`string`&&t.length>0);t.reasoningEffortByModel=Object.fromEntries(n)}return t}function Ve(e){try{localStorage.setItem(Re,JSON.stringify(e))}catch{}}var He={class:`create-inner q-mx-auto`},Ue={class:`q-mb-lg`},We={class:`create-title text-weight-bold text-grey-2`},Ge={class:`text-body1 text-grey-5 q-mt-xs`},Ke={class:`create-sections column`},qe={class:`text-subtitle1 text-weight-medium text-grey-2`},Je={class:`text-body2 text-grey-6`},Ye={class:`card-textarea-wrap`},Xe={class:`column items-center self-end q-pb-xs`},Ze={key:0,class:`column q-gutter-y-sm`},Qe={class:`text-caption text-weight-medium text-grey-5`},$e={class:`row q-gutter-sm`},et={key:0,class:`source-panel column q-gutter-y-sm q-pa-md rounded-borders`},tt={key:0},nt={class:`text-body2 text-grey-4 q-mb-sm`},rt={class:`responsive-fields responsive-fields--sm row q-col-gutter-x-sm`},it={class:`col-12 col-sm-6`},at={class:`col`},ot={class:`text-body2 text-weight-medium`},st={class:`text-caption text-grey-6`},ct={class:`col-12 col-sm-6`},lt={class:`col`},ut={class:`text-body2 text-weight-medium`},dt={class:`text-caption text-grey-6`},ft={key:0,class:`source-panel q-pa-md rounded-borders`},pt={key:1,class:`responsive-fields row q-col-gutter-x-md`},mt={class:`col-12 col-md-6`},ht={class:`q-pa-md column q-gutter-y-sm`},gt={key:0,class:`row q-gutter-xs`},_t={class:`col-12 col-md-6`},vt={class:`q-pa-md column q-gutter-y-sm`},yt={key:0,class:`row q-gutter-xs`},bt={class:`text-subtitle1 text-weight-medium text-grey-2`},xt={class:`text-body2 text-grey-6`},St={class:`text-caption text-weight-medium text-grey-5 q-mb-sm`},Ct={class:`responsive-fields row q-col-gutter-x-md`},wt={class:`col-12 col-md-6`},Tt={class:`col-12 col-md-6`},Et={key:0,class:`responsive-fields row q-col-gutter-x-md`},Dt={class:`col-12 col-md-4`},Ot={class:`col-12 col-md-8`},kt={class:`self-center full-width no-outline text-grey-4 ellipsis`,tabindex:`0`},At={class:`col`},jt={class:`text-subtitle1 text-weight-medium text-grey-2`},Mt={class:`text-body2 text-grey-6`},Nt={key:0,class:`col-12 col-sm-6`},Pt={class:`col-12 col-sm-6`},Ft={class:`col-12 col-sm-6`},It={class:`col-12 col-sm-6`},Lt={class:`text-subtitle2 text-amber-3`},Rt={class:`responsive-fields row q-col-gutter-x-md`},zt={class:`col-12 col-sm-6`},Bt={class:`col-12 col-sm-6`},Vt={class:`text-caption text-grey-6`},Ht={class:`row q-gutter-sm create-actions`},Ut=6e4,T=Te(te({__name:`CreatePage`,setup(te){function Te(e){return e.disabled===!0}let Re=ve(),w=xe(),ze=me(),T=ye(),{t:E}=e(),Wt=n([]),Gt=n(``),D=n(``),Kt=n(null),qt=n(``),O=n(!1),k=n(!1),Jt=n(null),Yt=n(null),Xt=n([]),Zt=n(null),A=n(``),j=n(!1),M=n(`claude-opus-4-8`),N=n(`claude-opus-4-8`),Qt=n(`auto`),P=n(`auto`),F=n({}),I=n(``),L=n(null),R=n(`feature`),$t=n(!1),en=a(()=>T.global.voiceEnabled),tn=n([]),z=n(`claude-code`),nn=a(()=>tn.value.find(e=>e.id===z.value)),rn=a(()=>tn.value.map(e=>({value:e.id,label:e.displayName}))),an=a(()=>T.global.branchPrefixes.map(e=>({label:`${e}/`,value:e}))),on=[`plan`,`bypass`,`strict`,`interactive`];function sn(e,t){let n=e?T.getProjectByPath(e):void 0,r=n?.agentPermissionMode;if(typeof r==`string`&&on.includes(r))return r;let i=T.global.defaultPermissionModeByEngine?.[t];return typeof i==`string`&&on.includes(i)?i:n?.dangerouslySkipPermissions??T.global.dangerouslySkipPermissions??!0?`bypass`:t===`codex`?`plan`:`interactive`}let B=n(sn(``,z.value)),cn=a(()=>{switch(B.value){case`plan`:return`visibility`;case`bypass`:return`flash_on`;case`strict`:return`lock`;case`interactive`:return`security`}}),ln=a(()=>(Le[z.value]??on).map(e=>({value:e,label:E(`agentPermissionMode.${e}`),disabled:e===`plan`&&X.value}))),V=n([]),un=n([]),dn=n(!1),fn=n(!1);function pn(e,t){t(()=>{un.value=e?V.value.filter(t=>t.toLowerCase().includes(e.toLowerCase())):V.value})}let mn=pe();function hn(){return Kt.value?.nativeEl??null}let{showSkills:gn,selectedSkillIndex:_n,groupedDropdown:vn,flatDropdown:H,fetchSkills:yn,detectSlashFragment:bn,replaceFragmentWith:xn,closeDropdown:Sn}=je(D,hn,{excludeKoboCommands:!0});yn(),m(D,async()=>{await oe(),await bn()});function Cn(e){if(e.type===`template`){let t=mn.templates.find(t=>t.slug===e.name);if(!t)return;let n=Me(t.content,Pe({workspace:null,gitStats:null,sessionName:null}));xn(n),Sn();return}xn(`/${e.name} `),Sn()}function wn(e){!gn.value||H.value.length===0||(e.key===`ArrowDown`?(e.preventDefault(),_n.value=(_n.value+1)%H.value.length):e.key===`ArrowUp`?(e.preventDefault(),_n.value=(_n.value-1+H.value.length)%H.value.length):e.key===`Enter`&&!e.shiftKey&&!e.ctrlKey&&!e.metaKey?(e.preventDefault(),Cn(H.value[_n.value])):e.key===`Escape`&&(e.preventDefault(),Sn()))}async function Tn(){if(!(!en.value||O.value||k.value)){if(!navigator.mediaDevices?.getUserMedia||typeof MediaRecorder>`u`){w.notify({type:`warning`,message:E(`voice.notSupported`),position:`top`,timeout:4e3});return}try{let e=await navigator.mediaDevices.getUserMedia({audio:!0});Yt.value=e,Xt.value=[];let t=MediaRecorder.isTypeSupported(`audio/webm`)?`audio/webm`:``,n=t?new MediaRecorder(e,{mimeType:t}):new MediaRecorder(e);n.ondataavailable=e=>{e.data&&e.data.size>0&&Xt.value.push(e.data)},n.start(),Jt.value=n,O.value=!0,Zt.value=setTimeout(()=>{U(),w.notify({type:`info`,message:E(`voice.maxDurationReached`),position:`top`,timeout:3500})},Ut)}catch{w.notify({type:`negative`,message:E(`voice.errorMicPermission`),position:`top`,timeout:5e3})}}}async function U(){if(!O.value)return;let e=Jt.value;if(!e)return;O.value=!1,k.value=!0,Zt.value&&=(clearTimeout(Zt.value),null);let t=await new Promise(t=>{e.onstop=()=>t(new Blob(Xt.value,{type:`audio/webm`})),e.stop()});try{if(t.size===0)throw Error(`MIC_AUDIO_INVALID`);let e=new FormData;e.append(`audio`,t,`voice.webm`),e.append(`language`,T.global.voiceLanguage||`auto`);let n=await fetch(`/api/voice/transcribe`,{method:`POST`,body:e});if(!n.ok){let e=await n.json().catch(()=>({}));throw Error(String(e.code??e.error??`HTTP_${n.status}`))}let r=await n.json();r.text?.trim()&&(D.value=D.value?`${D.value.trimEnd()} ${r.text.trim()}`:r.text.trim())}catch(e){let t=e instanceof Error?e.message:`TRANSCRIPTION_FAILED`;w.notify({type:`negative`,message:E({VOICE_DISABLED:`voice.errorDisabled`,MODEL_NOT_CONFIGURED:`voice.errorModelMissing`,MODEL_NOT_INSTALLED:`voice.errorModelNotInstalled`,VOICE_RUNTIME_MISSING:`voice.errorRuntimeMissing`,MIC_AUDIO_INVALID:`voice.errorAudioInvalid`,LANGUAGE_INVALID:`voice.errorLanguageInvalid`,TRANSCRIPTION_TIMEOUT:`voice.errorTranscription`}[t]??`voice.errorTranscription`),position:`top`,timeout:5e3})}finally{Jt.value=null,Xt.value=[],Yt.value?.getTracks().forEach(e=>{e.stop()}),Yt.value=null,k.value=!1}}function En(e){return en.value?T.global.voicePttKey===`ctrl+space`?e.ctrlKey&&e.code===`Space`:e.key===`Alt`:!1}function Dn(e){!En(e)||e.repeat||(e.preventDefault(),Tn())}function On(e){En(e)&&(e.preventDefault(),U())}function kn(){O.value&&U()}function An(){document.visibilityState!==`visible`&&O.value&&U()}let W=a(()=>(Fe[z.value]??Ie).map(e=>({label:E(e.i18nLabelKey),value:e.value,description:E(e.i18nDescriptionKey)})));m(z,()=>{let e=W.value.map(e=>e.value);if(e.length>0){let t=T.global.defaultModelByEngine?.[z.value];typeof t==`string`&&e.includes(t)?M.value=t:e.includes(M.value)||(M.value=e.includes(`auto`)?`auto`:e[0]??`auto`)}e.length>0&&!e.includes(N.value)&&(N.value=e.includes(`auto`)?`auto`:e[0]??`auto`);let t=Le[z.value]??[];t.length>0&&!t.includes(B.value)&&(B.value=sn(I.value,z.value));let n=(Ne[z.value]??[]).map(e=>e.value);n.length>0&&!n.includes(P.value)&&(P.value=n.includes(`auto`)?`auto`:n[0]??`auto`)});function jn(e){let t=e.indexOf(`:`);return t>=0?e.slice(t+1).trim():e}let Mn=a(()=>(Ne[z.value]??Ne[`claude-code`]).map(e=>({value:e.value,label:jn(E(e.i18nLabelKey)),description:E(e.i18nDescriptionKey)})));m(M,e=>{let t=F.value[e];t&&Mn.value.some(e=>e.value===t)&&(P.value=t)}),m(P,e=>{F.value={...F.value,[M.value]:e},Ve({...Be(),reasoningEffortByModel:F.value})});let G=a(()=>{let e=A.value.trim();return e.startsWith(`https://www.notion.so/`)||e.startsWith(`https://app.notion.com/`)}),Nn=a(()=>/[?&]p=[0-9a-f]{32}(?:[&#]|$)/i.test(A.value)),K=n(`panel`);function Pn(){let e=A.value.trim();return K.value===`parent`&&Nn.value?e.replace(/([?&])p=[0-9a-f]{32}(?=[&#]|$)/i,`$1`).replace(/([?&])pm=[a-z]+(?=[&#]|$)/i,`$1`).replace(/[?&]+$/,``).replace(/\?&/,`?`):e}let q=n([]),J=n([]),Fn=n(``),In=n(``),Ln=a(()=>!j.value||!G.value);function Rn(){let e=Fn.value.trim();e&&(q.value.push(e),Fn.value=``)}function zn(e){q.value.splice(e,1)}function Bn(){let e=In.value.trim();e&&(J.value.push(e),In.value=``)}function Vn(e){J.value.splice(e,1)}function Hn(){j.value=!j.value,j.value||(A.value=``)}let Y=n(!1),X=n(!1),Un=n(`per_task`);m(()=>X.value,e=>{e&&B.value!==`bypass`&&(B.value=`bypass`)});function Wn(){X.value=!X.value,X.value&&(N.value=M.value)}let Z=n(``),Gn=a(()=>/\/issues\/\d+/.test(Z.value.trim()));function Kn(){Y.value=!Y.value,Y.value||(Z.value=``)}let Q=n(!1),$=n(null),qn=n([]),Jn=n(!1);async function Yn(){if(!I.value.trim()){qn.value=[];return}Jn.value=!0;try{qn.value=await ze.fetchOrphanWorktrees(I.value.trim())}catch{qn.value=[]}finally{Jn.value=!1}}function Xn(){Q.value=!Q.value,Q.value?(j.value=!1,A.value=``,Y.value=!1,Z.value=``,$t.value=!0,Yn()):$.value=null}function Zn(e){e===`existing`!==Q.value&&Xn()}m(I,()=>{$.value=null,Q.value&&Yn()}),m($,e=>{if(!e)return;let t=qn.value.find(t=>t.path===e);t&&(L.value=t.suggestedSourceBranch),$t.value=!0});async function Qn(e){if(!e.trim()){V.value=[],L.value=null;return}dn.value=!0;try{let t=await fetch(`/api/git/branches?path=${encodeURIComponent(e.trim())}`);if(!t.ok)throw Error(`HTTP ${t.status}`);let n=await t.json();V.value=n.local??n.branches??[],V.value.length>0&&!L.value&&(L.value=V.value[0]??null)}catch{V.value=[],L.value=null}finally{dn.value=!1}}function $n(e){let t=T.getProjectByPath(e);if(t){t.defaultSourceBranch&&(L.value=t.defaultSourceBranch);let e=t.taskPromptTemplate??``;(D.value===``||D.value===qt.value)&&(D.value=e,qt.value=e);let n=W.value.map(e=>e.value);if(t.defaultModel&&n.includes(t.defaultModel))M.value=t.defaultModel;else{let e=T.global.defaultModelByEngine?.[z.value];typeof e==`string`&&n.includes(e)&&(M.value=e)}}B.value=sn(e,z.value)}let er=null;m(I,e=>{er&&clearTimeout(er),er=setTimeout(()=>{L.value=null,Qn(e),$n(e)},500)});function tr(e,t){let n=e.toLowerCase();t(()=>{Wt.value=T.projectPaths.filter(e=>e.toLowerCase().includes(n)||Oe(e).toLowerCase().includes(n))})}function nr(e){let t=T.projectPaths.find(t=>Oe(t)===e);I.value=t??e}ae(async()=>{await T.fetchSettings();let e=T.global.branchPrefixes;e.length>0&&!e.includes(R.value)&&(R.value=e[0]);let t=Be();F.value=t.reasoningEffortByModel??{},t.autoLoop===!0&&(X.value=!0),t.autoLoopSessionMode===`continuous`&&(Un.value=`continuous`),t.autoLoop===!0&&t.brainstormModel&&(N.value=t.brainstormModel),t.projectPath&&T.projectPaths.includes(t.projectPath)&&(I.value=t.projectPath),B.value=sn(I.value,z.value);try{let e=await fetch(`/api/engines`);e.ok&&(tn.value=await e.json())}catch{}{let e=W.value.map(e=>e.value),t=T.global.defaultModelByEngine?.[z.value];typeof t==`string`&&e.includes(t)?M.value=t:e.length>0&&!e.includes(M.value)&&(M.value=e.includes(`auto`)?`auto`:e[0]??`auto`)}let n=F.value[M.value];n&&Mn.value.some(e=>e.value===n)&&(P.value=n);{let e=W.value.map(e=>e.value);e.length>0&&!e.includes(N.value)&&(N.value=e.includes(`auto`)?`auto`:e[0]??`auto`)}window.addEventListener(`keydown`,Dn),window.addEventListener(`keyup`,On),window.addEventListener(`blur`,kn),document.addEventListener(`visibilitychange`,An)}),ie(()=>{er&&clearTimeout(er),window.removeEventListener(`keydown`,Dn),window.removeEventListener(`keyup`,On),window.removeEventListener(`blur`,kn),document.removeEventListener(`visibilitychange`,An),Zt.value&&=(clearTimeout(Zt.value),null),O.value&&U()});function rr(e){return e.normalize(`NFD`).replace(/[\u0300-\u036f]/g,``).toLowerCase().replace(/[^a-z0-9\s-]/g,``).trim().replace(/\s+/g,`-`).replace(/-+/g,`-`).substring(0,50)}function ir(){return Gt.value.trim()?Gt.value.trim().substring(0,80):!j.value&&!Y.value&&D.value.trim()&&(D.value.trim().split(`
2
+ `)[0]??``).substring(0,80)||`workspace`}function ar(e){let t=(e.split(`/`).pop()??``).split(`-`);t.length>1&&/^[0-9a-f]{12,}$/i.test(t[t.length-1])&&t.pop();let n=t.join(`-`).toLowerCase(),r=n.match(/tk-(\d+)/);if(r){let e=`TK-${r[1]}`,t=n.replace(/tk-\d+/i,``).replace(/-+/g,`-`).replace(/^-|-$/g,``).substring(0,40);return t?`${e}--${t}`:e}return n.substring(0,50)||`task-${Date.now()}`}let or=a(()=>{if(j.value&&G.value)return`${R.value}/${ar(Pn())}`;let e=ir(),t=e===`workspace`?E(`createPage.branchNamePending`):rr(e);return`${R.value}/${t}`});function sr(){return j.value&&!G.value?E(`createPage.validationNotionUrl`):Y.value&&!Gn.value?E(`createPage.sentryValidation`):!j.value&&!Y.value&&!D.value.trim()?E(`createPage.validationDescription`):!j.value&&!Y.value&&(!ir()||ir()===`workspace`)&&!Gt.value.trim()&&!D.value.trim()?E(`createPage.validationName`):I.value.trim()?L.value?null:E(`createPage.validationBranch`):E(`createPage.validationPath`)}async function cr(){if(fn.value)return;let e=sr();if(e){w.notify({type:`negative`,message:e,position:`top`});return}if(Q.value&&!$.value){w.notify({type:`negative`,message:E(`createPage.pickWorktreeRequired`),position:`top`});return}fn.value=!0;try{let e=ir(),t;t=j.value&&G.value?ar(Pn()):e===`workspace`?`task-${Date.now()}`:rr(e);let n=`${R.value}/${t}`,r={name:e,projectPath:I.value.trim(),sourceBranch:L.value,...Q.value&&$.value?{worktreePath:$.value,skipSetupScript:!0,workingBranch:n}:{workingBranch:n},engine:z.value,model:M.value,reasoningEffort:P.value,...j.value&&G.value?{notionUrl:Pn()}:{},...Y.value&&Gn.value?{sentryUrl:Z.value.trim()}:{},...Ln.value&&q.value.length>0?{tasks:q.value}:{},...Ln.value&&J.value.length>0?{acceptanceCriteria:J.value}:{},...$t.value&&!Q.value?{skipSetupScript:!0}:{},...D.value.trim()?{description:D.value.trim()}:{},...X.value?{autoLoop:!0,autoLoopSessionMode:Un.value,brainstormModel:N.value,brainstormReasoningEffort:Qt.value}:{},agentPermissionMode:X.value&&B.value===`plan`?`bypass`:B.value},i=await ze.createWorkspace(r);T.global.audioWorkspaceCreatedNotifications&&he(T.global.audioWorkspaceCreatedSound,T.global.audioWorkspaceCreatedVolume),i._branchAdjusted&&w.notify({type:`info`,message:E(`createPage.branchAdjusted`,{branch:i.workingBranch}),position:`top`,timeout:6e3}),i._sourceFallback&&w.notify({type:`warning`,message:E(`createPage.localSourceFallback`),position:`top`,timeout:6e3}),Ve({projectPath:I.value.trim(),autoLoop:X.value,autoLoopSessionMode:Un.value,...X.value?{brainstormModel:N.value}:{},reasoningEffortByModel:{...F.value,[M.value]:P.value}}),ge().subscribe(i.id),ze.selectWorkspace(i.id),Re.push({name:`workspace`,params:{id:i.id}})}catch(e){w.notify({type:`negative`,message:e instanceof Error&&e.message?e.message:E(`createPage.errorCreating`),position:`top`})}finally{fn.value=!1}}return(e,n)=>(s(),o(ke,{class:`create-page`},{default:p(()=>[l(`div`,He,[l(`header`,Ue,[l(`div`,We,r(e.$t(`createPage.title`)),1),l(`div`,Ge,r(e.$t(`createPage.subtitle`)),1)]),l(`div`,Ke,[f(_,{flat:``,bordered:``,class:`create-section-card`},{default:p(()=>[f(y,{class:`row items-start no-wrap q-gutter-md`},{default:p(()=>[f(fe,{color:`indigo-9`,"text-color":`indigo-2`,icon:`assignment`,size:`42px`}),l(`div`,null,[l(`div`,qe,r(e.$t(`createPage.sectionMission`)),1),l(`div`,Je,r(e.$t(`createPage.sectionMissionHint`)),1)])]),_:1}),f(ue,{dark:``}),f(y,{class:`column q-gutter-y-md`},{default:p(()=>[f(de,{modelValue:Gt.value,"onUpdate:modelValue":n[0]||=e=>Gt.value=e,dark:``,dense:``,outlined:``,"stack-label":``,label:e.$t(`createPage.workspaceNameLabel`),placeholder:j.value&&G.value?e.$t(`createPage.workspaceName`):e.$t(`createPage.workspaceNamePlaceholder`)},null,8,[`modelValue`,`label`,`placeholder`]),l(`div`,Ye,[f(de,{ref_key:`descriptionRef`,ref:Kt,modelValue:D.value,"onUpdate:modelValue":n[1]||=e=>D.value=e,dark:``,dense:``,outlined:``,"stack-label":``,type:`textarea`,autogrow:``,rows:6,label:e.$t(`createPage.descriptionLabel`),placeholder:j.value?e.$t(`createPage.instructions`):e.$t(`createPage.instructionsPlaceholder`),class:`create-textarea`,onKeydown:[wn,re(h(cr,[`ctrl`]),[`enter`]),re(h(cr,[`meta`]),[`enter`])]},{append:p(()=>[l(`div`,Xe,[k.value?(s(),o(be,{key:0,size:`18px`,color:`amber-6`})):c(``,!0),f(v,{flat:``,dense:``,round:``,size:`sm`,icon:k.value?`hourglass_top`:O.value?`mic`:`mic_none`,color:O.value?`red-5`:k.value?`amber-6`:`grey-6`,disable:!en.value||k.value,class:ee({"voice-btn--recording":O.value}),onMousedown:h(Tn,[`prevent`]),onMouseup:h(U,[`prevent`]),onMouseleave:h(U,[`prevent`]),onTouchstart:h(Tn,[`prevent`]),onTouchend:h(U,[`prevent`])},{default:p(()=>[f(we,null,{default:p(()=>[d(r(k.value?e.$t(`voice.transcribing`):O.value?e.$t(`voice.recording`):e.$t(`voice.holdToTalk`)),1)]),_:1})]),_:1},8,[`icon`,`color`,`disable`,`class`])])]),_:1},8,[`modelValue`,`label`,`placeholder`,`onKeydown`]),t(gn)&&t(H).length>0?(s(),o(Ae,{key:0,class:`create-slash-popup`,"grouped-dropdown":t(vn),"flat-dropdown":t(H),"selected-index":t(_n),onSelect:Cn},null,8,[`grouped-dropdown`,`flat-dropdown`,`selected-index`])):c(``,!0)]),t(T).global.notionEnabled||t(T).global.sentryEnabled?(s(),u(`div`,Ze,[l(`div`,Qe,r(e.$t(`createPage.sources`)),1),l(`div`,$e,[t(T).global.notionEnabled?(s(),o(v,{key:0,dense:``,outline:``,"no-caps":``,icon:`description`,color:j.value?`green-4`:`grey-5`,label:j.value?e.$t(`createPage.notionEnabled`):e.$t(`createPage.importNotion`),disable:Q.value,onClick:Hn},null,8,[`color`,`label`,`disable`])):c(``,!0),t(T).global.sentryEnabled?(s(),o(v,{key:1,dense:``,outline:``,"no-caps":``,icon:`bug_report`,color:Y.value?`red-4`:`grey-5`,label:Y.value?e.$t(`createPage.sentryEnabled`):e.$t(`createPage.importSentry`),disable:Q.value,onClick:Kn},null,8,[`color`,`label`,`disable`])):c(``,!0)])])):c(``,!0),f(le,{name:`slide`},{default:p(()=>[j.value?(s(),u(`div`,et,[f(de,{modelValue:A.value,"onUpdate:modelValue":n[2]||=e=>A.value=e,dark:``,outlined:``,dense:``,"stack-label":``,label:e.$t(`createPage.importNotion`),placeholder:e.$t(`createPage.notionPlaceholder`),error:!!A.value.trim()&&!G.value,"error-message":e.$t(`createPage.notionValidation`),hint:G.value?e.$t(`createPage.notionAutoExtract`):void 0},{prepend:p(()=>[f(g,{name:`link`,color:G.value?`green-4`:`grey-6`},null,8,[`color`])]),_:1},8,[`modelValue`,`label`,`placeholder`,`error`,`error-message`,`hint`]),G.value&&Nn.value?(s(),u(`div`,tt,[l(`div`,nt,[f(g,{name:`info`,color:`indigo-4`,class:`q-mr-xs`}),d(` `+r(e.$t(`createPage.notionPanelChoiceLabel`)),1)]),l(`div`,rt,[l(`div`,it,[f(_,{flat:``,bordered:``,class:ee([`peek-card full-height cursor-pointer`,{"peek-card--active":K.value===`panel`}]),onClick:n[3]||=e=>K.value=`panel`},{default:p(()=>[f(y,{class:`row items-center no-wrap q-gutter-sm q-pa-sm`},{default:p(()=>[f(g,{name:`article`,size:`24px`,class:`peek-card-icon`}),l(`div`,at,[l(`div`,ot,r(e.$t(`createPage.notionPanelOption`)),1),l(`div`,st,r(e.$t(`createPage.notionPanelOptionDesc`)),1)]),K.value===`panel`?(s(),o(g,{key:0,name:`check_circle`,color:`indigo-4`})):c(``,!0)]),_:1})]),_:1},8,[`class`])]),l(`div`,ct,[f(_,{flat:``,bordered:``,class:ee([`peek-card full-height cursor-pointer`,{"peek-card--active":K.value===`parent`}]),onClick:n[4]||=e=>K.value=`parent`},{default:p(()=>[f(y,{class:`row items-center no-wrap q-gutter-sm q-pa-sm`},{default:p(()=>[f(g,{name:`folder_open`,size:`24px`,class:`peek-card-icon`}),l(`div`,lt,[l(`div`,ut,r(e.$t(`createPage.notionParentOption`)),1),l(`div`,dt,r(e.$t(`createPage.notionParentOptionDesc`)),1)]),K.value===`parent`?(s(),o(g,{key:0,name:`check_circle`,color:`indigo-4`})):c(``,!0)]),_:1})]),_:1},8,[`class`])])])])):c(``,!0)])):c(``,!0)]),_:1}),f(le,{name:`slide`},{default:p(()=>[Y.value?(s(),u(`div`,ft,[f(de,{modelValue:Z.value,"onUpdate:modelValue":n[5]||=e=>Z.value=e,dark:``,outlined:``,dense:``,"stack-label":``,label:e.$t(`createPage.importSentry`),placeholder:e.$t(`createPage.sentryPlaceholder`),error:!!Z.value.trim()&&!Gn.value,"error-message":e.$t(`createPage.sentryValidation`),hint:Gn.value?e.$t(`createPage.sentryAutoExtract`):void 0},{prepend:p(()=>[f(g,{name:`link`,color:Gn.value?`red-4`:`grey-6`},null,8,[`color`])]),_:1},8,[`modelValue`,`label`,`placeholder`,`error`,`error-message`,`hint`])])):c(``,!0)]),_:1}),Ln.value?(s(),u(`div`,pt,[l(`div`,mt,[f(Ce,{dark:``,dense:``,"expand-separator":``,icon:`checklist`,label:e.$t(`createPage.tasks`,{count:q.value.length}),class:`manual-expansion rounded-borders`},{default:p(()=>[l(`div`,ht,[f(de,{modelValue:Fn.value,"onUpdate:modelValue":n[6]||=e=>Fn.value=e,dark:``,dense:``,outlined:``,placeholder:e.$t(`createPage.addTask`),onKeydown:re(h(Rn,[`prevent`]),[`enter`])},{append:p(()=>[f(v,{flat:``,dense:``,round:``,icon:`add`,color:`indigo-4`,disable:!Fn.value.trim(),onClick:Rn},{default:p(()=>[f(we,null,{default:p(()=>[d(r(e.$t(`tooltip.addTask`)),1)]),_:1})]),_:1},8,[`disable`])]),_:1},8,[`modelValue`,`placeholder`,`onKeydown`]),q.value.length?(s(),u(`div`,gt,[(s(!0),u(ne,null,se(q.value,(e,t)=>(s(),o(Ee,{key:`task-${t}`,dark:``,dense:``,removable:``,color:`grey-9`,"text-color":`grey-3`,onRemove:e=>zn(t)},{default:p(()=>[d(r(e),1)]),_:2},1032,[`onRemove`]))),128))])):c(``,!0)])]),_:1},8,[`label`])]),l(`div`,_t,[f(Ce,{dark:``,dense:``,"expand-separator":``,icon:`fact_check`,label:e.$t(`createPage.acceptanceCriteria`,{count:J.value.length}),class:`manual-expansion rounded-borders`},{default:p(()=>[l(`div`,vt,[f(de,{modelValue:In.value,"onUpdate:modelValue":n[7]||=e=>In.value=e,dark:``,dense:``,outlined:``,placeholder:e.$t(`createPage.addCriterion`),onKeydown:re(h(Bn,[`prevent`]),[`enter`])},{append:p(()=>[f(v,{flat:``,dense:``,round:``,icon:`add`,color:`indigo-4`,disable:!In.value.trim(),onClick:Bn},{default:p(()=>[f(we,null,{default:p(()=>[d(r(e.$t(`tooltip.addCriterion`)),1)]),_:1})]),_:1},8,[`disable`])]),_:1},8,[`modelValue`,`placeholder`,`onKeydown`]),J.value.length?(s(),u(`div`,yt,[(s(!0),u(ne,null,se(J.value,(e,t)=>(s(),o(Ee,{key:`criterion-${t}`,dark:``,dense:``,removable:``,color:`grey-9`,"text-color":`grey-3`,onRemove:e=>Vn(t)},{default:p(()=>[d(r(e),1)]),_:2},1032,[`onRemove`]))),128))])):c(``,!0)])]),_:1},8,[`label`])])])):c(``,!0)]),_:1})]),_:1}),f(_,{flat:``,bordered:``,class:`create-section-card`},{default:p(()=>[f(y,{class:`row items-start no-wrap q-gutter-md`},{default:p(()=>[f(fe,{color:`blue-grey-9`,"text-color":`blue-grey-2`,icon:`account_tree`,size:`42px`}),l(`div`,null,[l(`div`,bt,r(e.$t(`createPage.sectionGit`)),1),l(`div`,xt,r(e.$t(`createPage.sectionGitHint`)),1)])]),_:1}),f(ue,{dark:``}),f(y,{class:`column q-gutter-y-md`},{default:p(()=>[l(`div`,null,[l(`div`,St,r(e.$t(`createPage.worktreeMode`)),1),f(De,{"model-value":Q.value?`existing`:`new`,dense:``,spread:``,"no-caps":``,unelevated:``,"toggle-color":`indigo-7`,color:`grey-9`,"text-color":`grey-4`,options:[{label:e.$t(`createPage.worktreeNew`),value:`new`,icon:`add_box`},{label:e.$t(`createPage.worktreeExisting`),value:`existing`,icon:`folder_open`}],"onUpdate:modelValue":Zn},null,8,[`model-value`,`options`])]),l(`div`,Ct,[l(`div`,wt,[f(C,{modelValue:I.value,"onUpdate:modelValue":n[8]||=e=>I.value=e,options:Wt.value,dark:``,dense:``,outlined:``,"stack-label":``,"use-input":``,"fill-input":``,"hide-selected":``,"input-debounce":`0`,"new-value-mode":`add`,label:e.$t(`createPage.projectLabel`),placeholder:e.$t(`createPage.projectPath`),behavior:t(T).projectPaths.length>0?`menu`:`dialog`,"option-label":e=>e?t(Oe)(e):``,onFilter:tr,onInputValue:nr},{prepend:p(()=>[f(g,{name:`folder`})]),option:p(({opt:e,itemProps:n})=>[f(x,i(ce(n)),{default:p(()=>[f(b,null,{default:p(()=>[f(S,null,{default:p(()=>[d(r(t(Oe)(e)),1)]),_:2},1024),f(S,{caption:``},{default:p(()=>[d(r(e),1)]),_:2},1024)]),_:2},1024)]),_:2},1040)]),"no-option":p(()=>[f(x,null,{default:p(()=>[f(b,{class:`text-grey-6`},{default:p(()=>[d(r(e.$t(`createPage.enterPath`)),1)]),_:1})]),_:1})]),_:1},8,[`modelValue`,`options`,`label`,`placeholder`,`behavior`,`option-label`])]),l(`div`,Tt,[f(C,{modelValue:L.value,"onUpdate:modelValue":n[9]||=e=>L.value=e,options:un.value,dark:``,dense:``,outlined:``,"stack-label":``,"use-input":``,"input-debounce":`0`,label:e.$t(`createPage.sourceBranch`),loading:dn.value,disable:!I.value.trim()||dn.value,onFilter:pn},{prepend:p(()=>[f(g,{name:`call_split`})]),"no-option":p(()=>[f(x,null,{default:p(()=>[f(b,{class:`text-grey-6`},{default:p(()=>[d(r(I.value.trim()?e.$t(`createPage.noBranches`):e.$t(`createPage.enterPath`)),1)]),_:1})]),_:1})]),_:1},8,[`modelValue`,`options`,`label`,`loading`,`disable`])])]),Q.value?c(``,!0):(s(),u(`div`,Et,[l(`div`,Dt,[f(C,{modelValue:R.value,"onUpdate:modelValue":n[10]||=e=>R.value=e,options:an.value,dark:``,dense:``,outlined:``,"stack-label":``,"emit-value":``,"map-options":``,label:e.$t(`createPage.branchType`)},{prepend:p(()=>[f(g,{name:`account_tree`})]),_:1},8,[`modelValue`,`options`,`label`])]),l(`div`,Ot,[f(Se,{dark:``,dense:``,outlined:``,"stack-label":``,readonly:``,label:e.$t(`createPage.workingBranchPreview`)},{control:p(()=>[l(`div`,kt,r(or.value),1)]),prepend:p(()=>[f(g,{name:`fork_right`})]),_:1},8,[`label`])])])),Q.value?(s(),o(C,{key:1,modelValue:$.value,"onUpdate:modelValue":n[11]||=e=>$.value=e,options:qn.value,dark:``,dense:``,outlined:``,"stack-label":``,"option-label":`branch`,"option-value":`path`,"emit-value":``,"map-options":``,"use-input":``,label:e.$t(`createPage.worktreePickerLabel`),loading:Jn.value,disable:!I.value.trim()||Jn.value},{prepend:p(()=>[f(g,{name:`folder_open`,color:`cyan-5`})]),option:p(e=>[f(x,i(ce(e.itemProps)),{default:p(()=>[f(b,null,{default:p(()=>[f(S,null,{default:p(()=>[d(r(e.opt.branch),1)]),_:2},1024),f(S,{caption:``},{default:p(()=>[d(r(e.opt.path),1)]),_:2},1024)]),_:2},1024)]),_:2},1040)]),"no-option":p(()=>[f(x,null,{default:p(()=>[f(b,{class:`text-grey-6`},{default:p(()=>[d(r(I.value.trim()?e.$t(`createPage.noOrphanWorktrees`):e.$t(`createPage.enterPath`)),1)]),_:1})]),_:1})]),_:1},8,[`modelValue`,`options`,`label`,`loading`,`disable`])):c(``,!0)]),_:1})]),_:1}),f(_,{flat:``,bordered:``,class:`create-section-card`},{default:p(()=>[f(y,{class:`row items-start no-wrap q-gutter-md`},{default:p(()=>[f(fe,{color:`deep-purple-9`,"text-color":`deep-purple-2`,icon:`smart_toy`,size:`42px`}),l(`div`,At,[l(`div`,jt,r(e.$t(`createPage.sectionAgent`)),1),l(`div`,Mt,r(e.$t(`createPage.sectionAgentHint`)),1)]),f(_e,{"model-value":X.value,dense:``,color:`amber-6`,icon:`autorenew`,label:e.$t(`autoLoop.toggle`),"left-label":``,"onUpdate:modelValue":Wn},null,8,[`model-value`,`label`])]),_:1}),f(ue,{dark:``}),f(Ce,{dark:``,dense:``,"expand-separator":``,icon:`tune`,label:e.$t(`createPage.configureAgent`),"header-class":`agent-config-header`},{header:p(()=>[f(b,{avatar:``},{default:p(()=>[f(g,{name:`tune`,color:`indigo-3`})]),_:1}),f(b,null,{default:p(()=>[f(S,null,{default:p(()=>[d(r(e.$t(`createPage.configureAgent`)),1)]),_:1}),f(S,{caption:``,class:`agent-summary row q-gutter-x-xs q-mt-xs`},{default:p(()=>[f(Ee,{dense:``,color:`grey-9`,"text-color":`grey-3`,icon:`hub`},{default:p(()=>[d(r(nn.value?.displayName??z.value),1)]),_:1}),f(Ee,{dense:``,color:`grey-9`,"text-color":`grey-3`},{default:p(()=>[d(r(W.value.find(e=>e.value===M.value)?.label??M.value),1)]),_:1}),f(Ee,{dense:``,color:`grey-9`,"text-color":`grey-3`,icon:`psychology`},{default:p(()=>[d(r(Mn.value.find(e=>e.value===P.value)?.label??P.value),1)]),_:1}),f(Ee,{dense:``,color:`grey-9`,"text-color":`grey-3`,icon:cn.value},{default:p(()=>[d(r(ln.value.find(e=>e.value===B.value)?.label??B.value),1)]),_:1},8,[`icon`])]),_:1})]),_:1})]),default:p(()=>[f(y,{class:`responsive-fields row q-col-gutter-x-md q-pt-md`},{default:p(()=>[rn.value.length>0?(s(),u(`div`,Nt,[f(C,{modelValue:z.value,"onUpdate:modelValue":n[12]||=e=>z.value=e,options:rn.value,dark:``,dense:``,outlined:``,"stack-label":``,"emit-value":``,"map-options":``,"option-value":`value`,"option-label":`label`,label:e.$t(`engine.select`)},null,8,[`modelValue`,`options`,`label`])])):c(``,!0),l(`div`,Pt,[f(C,{modelValue:M.value,"onUpdate:modelValue":n[13]||=e=>M.value=e,options:W.value,dark:``,dense:``,outlined:``,"stack-label":``,"emit-value":``,"map-options":``,"option-value":`value`,"option-label":`label`,label:e.$t(`engine.model`)},{option:p(({opt:e,itemProps:t})=>[f(x,i(ce(t)),{default:p(()=>[f(b,null,{default:p(()=>[f(S,null,{default:p(()=>[d(r(e.label),1)]),_:2},1024),f(S,{caption:``},{default:p(()=>[d(r(e.description),1)]),_:2},1024)]),_:2},1024)]),_:2},1040)]),_:1},8,[`modelValue`,`options`,`label`])]),l(`div`,Ft,[f(C,{modelValue:P.value,"onUpdate:modelValue":n[14]||=e=>P.value=e,options:Mn.value,dark:``,dense:``,outlined:``,"stack-label":``,"emit-value":``,"map-options":``,"option-value":`value`,"option-label":`label`,label:e.$t(`engine.effort`)},{option:p(({opt:e,itemProps:t})=>[f(x,i(ce(t)),{default:p(()=>[f(b,null,{default:p(()=>[f(S,null,{default:p(()=>[d(r(e.label),1)]),_:2},1024),f(S,{caption:``},{default:p(()=>[d(r(e.description),1)]),_:2},1024)]),_:2},1024)]),_:2},1040)]),_:1},8,[`modelValue`,`options`,`label`])]),l(`div`,It,[f(C,{modelValue:B.value,"onUpdate:modelValue":n[15]||=e=>B.value=e,options:ln.value,dark:``,dense:``,outlined:``,"stack-label":``,"emit-value":``,"map-options":``,"option-value":`value`,"option-label":`label`,"option-disable":Te,disable:X.value,label:e.$t(`agentPermissionMode.label`),hint:X.value?e.$t(`agentPermissionMode.autoLoopLocked`):void 0},null,8,[`modelValue`,`options`,`disable`,`label`,`hint`])])]),_:1})]),_:1},8,[`label`]),f(le,{name:`slide`},{default:p(()=>[X.value?(s(),o(y,{key:0,class:`auto-loop-panel column`},{default:p(()=>[l(`div`,Lt,r(e.$t(`autoLoop.startInMode`)),1),f(De,{modelValue:Un.value,"onUpdate:modelValue":n[16]||=e=>Un.value=e,dense:``,size:`sm`,spread:``,"no-caps":``,unelevated:``,class:`auto-loop-session-toggle`,"toggle-color":`indigo-7`,color:`grey-9`,"text-color":`grey-4`,options:[{label:e.$t(`autoLoop.sessionMode.perTask`),value:`per_task`,icon:`restart_alt`},{label:e.$t(`autoLoop.sessionMode.continuous`),value:`continuous`,icon:`link`}]},null,8,[`modelValue`,`options`]),l(`div`,Rt,[l(`div`,zt,[f(C,{modelValue:N.value,"onUpdate:modelValue":n[17]||=e=>N.value=e,options:W.value,dark:``,dense:``,outlined:``,"stack-label":``,"emit-value":``,"map-options":``,"option-value":`value`,"option-label":`label`,label:e.$t(`autoLoop.brainstormModelPrefix`)},null,8,[`modelValue`,`options`,`label`])]),l(`div`,Bt,[f(C,{modelValue:Qt.value,"onUpdate:modelValue":n[18]||=e=>Qt.value=e,options:Mn.value,dark:``,dense:``,outlined:``,"stack-label":``,"emit-value":``,"map-options":``,"option-value":`value`,"option-label":`label`,label:e.$t(`autoLoop.brainstormReasoningPrefix`)},null,8,[`modelValue`,`options`,`label`])])])]),_:1})):c(``,!0)]),_:1})]),_:1}),f(Ce,{dark:``,dense:``,"expand-separator":``,icon:`settings`,label:e.$t(`createPage.advancedOptions`),class:`advanced-options rounded-borders`},{default:p(()=>[f(y,null,{default:p(()=>[f(_e,{modelValue:$t.value,"onUpdate:modelValue":n[19]||=e=>$t.value=e,dense:``,color:`orange-5`,icon:`play_disabled`,label:e.$t(`createPage.skipSetupScript`),disable:Q.value},null,8,[`modelValue`,`label`,`disable`])]),_:1})]),_:1},8,[`label`]),f(_,{flat:``,bordered:``,class:`create-actions-card`},{default:p(()=>[f(y,{class:`row items-center justify-between q-gutter-md`},{default:p(()=>[l(`div`,Vt,r(j.value?e.$t(`createPage.notionExtractHint`):e.$t(`createPage.keyboardHint`)),1),l(`div`,Ht,[f(v,{flat:``,dense:``,"no-caps":``,color:`grey-5`,label:e.$t(`common.cancel`),onClick:n[20]||=e=>t(Re).back()},null,8,[`label`]),f(v,{unelevated:``,dense:``,"no-caps":``,color:`indigo-6`,"icon-right":`arrow_forward`,label:e.$t(`createPage.createWorkspace`),loading:fn.value,disable:fn.value||Q.value&&!$.value,onClick:cr},null,8,[`label`,`loading`,`disable`])])]),_:1})]),_:1})])])]),_:1}))}}),[[`__scopeId`,`data-v-f498d337`]]);export{T as default};
@@ -0,0 +1 @@
1
+ .create-page[data-v-f498d337]{background:#1a1a2e;min-height:100%;padding:48px 24px 80px}.create-inner[data-v-f498d337]{width:100%;max-width:960px}.create-title[data-v-f498d337]{letter-spacing:-.02em;font-size:30px;line-height:1.2}.create-sections[data-v-f498d337]{gap:24px}.responsive-fields[data-v-f498d337]{row-gap:16px}.responsive-fields--sm[data-v-f498d337]{row-gap:8px}.create-section-card[data-v-f498d337],.create-actions-card[data-v-f498d337]{background:#22223f;border-color:#ffffff1f}.card-textarea-wrap[data-v-f498d337]{position:relative}.create-textarea[data-v-f498d337] .q-field__control{min-height:220px}.create-textarea[data-v-f498d337] textarea{resize:vertical;line-height:1.6;min-height:180px!important}.create-slash-popup[data-v-f498d337]{z-index:20;position:absolute;top:calc(100% + 4px);left:12px;right:12px}.source-panel[data-v-f498d337]{background:#1e1e38;border:1px solid #ffffff1a}.peek-card[data-v-f498d337]{color:#ddd;background:#ffffff06;border-color:#ffffff1a;transition:background .15s,border-color .15s,transform .1s}.peek-card[data-v-f498d337]:hover{background:#ffffff0f;border-color:#818cf880}.peek-card[data-v-f498d337]:active{transform:scale(.99)}.peek-card--active[data-v-f498d337]{background:#6366f124;border-color:#818cf8;box-shadow:inset 0 0 0 1px #818cf859}.peek-card--active .peek-card-icon[data-v-f498d337]{color:#a5b4fc}.peek-card-icon[data-v-f498d337]{color:#888;flex-shrink:0}.manual-expansion[data-v-f498d337],.advanced-options[data-v-f498d337]{background:#1e1e38;border:1px solid #ffffff1a;overflow:hidden}.manual-expansion[data-v-f498d337] .q-expansion-item__content,.advanced-options[data-v-f498d337] .q-expansion-item__content{background:#19192f}.manual-expansion[data-v-f498d337] .q-chip{max-width:100%;height:auto;min-height:32px}.manual-expansion[data-v-f498d337] .q-chip__content{white-space:normal;overflow-wrap:anywhere}.auto-loop-panel[data-v-f498d337]{background:#f59e0b0f;border-top:1px solid #f59e0b38;gap:16px}.auto-loop-session-toggle[data-v-f498d337] .q-btn{min-height:32px;padding-top:4px;padding-bottom:4px}[data-v-f498d337] .agent-config-header{min-height:56px;padding-top:6px;padding-bottom:8px}.agent-summary[data-v-f498d337]{row-gap:4px}.agent-summary[data-v-f498d337] .q-chip{margin:0}.create-actions-card[data-v-f498d337]{z-index:10;position:sticky;bottom:16px;box-shadow:0 10px 36px #00000061}.voice-btn--recording[data-v-f498d337]{animation:1.1s ease-in-out infinite voice-pulse-f498d337}@keyframes voice-pulse-f498d337{0%,to{opacity:1;transform:scale(1)}50%{opacity:.86;transform:scale(1.06)}}.slide-enter-active[data-v-f498d337],.slide-leave-active[data-v-f498d337]{transition:max-height .2s,opacity .2s;overflow:hidden}.slide-enter-from[data-v-f498d337],.slide-leave-to[data-v-f498d337]{opacity:0;max-height:0}.slide-enter-to[data-v-f498d337],.slide-leave-from[data-v-f498d337]{opacity:1;max-height:900px}@media (max-width:599px){.create-page[data-v-f498d337]{padding:28px 12px 56px}.create-title[data-v-f498d337]{font-size:26px}.create-actions-card[data-v-f498d337]{bottom:8px}.create-actions-card[data-v-f498d337] .q-card__section{align-items:stretch}.create-actions[data-v-f498d337]{width:100%}.create-actions .q-btn[data-v-f498d337]:last-child{flex:1}}