@loicngr/kobo 1.6.5 → 1.6.7

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 (51) hide show
  1. package/dist/server/db/migrations.js +13 -0
  2. package/dist/server/db/schema.js +8 -0
  3. package/dist/server/index.js +3 -1
  4. package/dist/server/routes/workspaces.js +30 -0
  5. package/dist/server/services/agent/orchestrator.js +18 -0
  6. package/dist/server/services/wakeup-service.js +154 -0
  7. package/dist/server/services/workspace-service.js +7 -0
  8. package/dist/server/utils/git-ops.js +10 -4
  9. package/package.json +1 -1
  10. package/src/client/dist/spa/assets/{ActivityFeed-GAoo1WOT.css → ActivityFeed-ZLFD0ABF.css} +1 -1
  11. package/src/client/dist/spa/assets/ActivityFeed-yFyT9xvb.js +7 -0
  12. package/src/client/dist/spa/assets/CreatePage-CYtKx6Ji.css +1 -0
  13. package/src/client/dist/spa/assets/{CreatePage-B7e487jg.js → CreatePage-DRaf5RN1.js} +2 -2
  14. package/src/client/dist/spa/assets/{DiffViewer-4-z5gGzs.js → DiffViewer-DQvXQTEa.js} +2 -2
  15. package/src/client/dist/spa/assets/{HealthPage-Pof_7jsi.js → HealthPage-Bme28RgK.js} +1 -1
  16. package/src/client/dist/spa/assets/{MainLayout-Cb6_QXbV.css → MainLayout-BAimmdFy.css} +1 -1
  17. package/src/client/dist/spa/assets/{MainLayout-CJJ8RX8d.js → MainLayout-DbElmr1D.js} +17 -17
  18. package/src/client/dist/spa/assets/{SearchPage-Do9kkaR_.js → SearchPage-C-WJxRPe.js} +1 -1
  19. package/src/client/dist/spa/assets/{SettingsPage-CpvnCfxM.js → SettingsPage-BfJMIJnY.js} +1 -1
  20. package/src/client/dist/spa/assets/WorkspacePage-CM676R3B.css +1 -0
  21. package/src/client/dist/spa/assets/WorkspacePage-CjPLcpSW.js +4 -0
  22. package/src/client/dist/spa/assets/{build-path-tree-DBKR9p4C.js → build-path-tree-DuCsR4mF.js} +1 -1
  23. package/src/client/dist/spa/assets/{cssMode-D7H4G9u2.js → cssMode-Du10lHBq.js} +1 -1
  24. package/src/client/dist/spa/assets/{documents-CByb0FJM.js → documents-AXuTuYab.js} +1 -1
  25. package/src/client/dist/spa/assets/{editor.api--wqcZBpd.js → editor.api-rtN9xKX_.js} +1 -1
  26. package/src/client/dist/spa/assets/{editor.main-BNIb69JB.js → editor.main-Bjkd_T6v.js} +3 -3
  27. package/src/client/dist/spa/assets/{freemarker2-D-thr4Nz.js → freemarker2-A3kMxtRq.js} +1 -1
  28. package/src/client/dist/spa/assets/{handlebars-uz-Lnmlq.js → handlebars-D_rpe5yL.js} +1 -1
  29. package/src/client/dist/spa/assets/{html-BrD38Itg.js → html-DXwQospq.js} +1 -1
  30. package/src/client/dist/spa/assets/{htmlMode-DhJl0i4i.js → htmlMode-D5FQHZJa.js} +1 -1
  31. package/src/client/dist/spa/assets/i18n-ByXz1S2J.js +1 -0
  32. package/src/client/dist/spa/assets/index-C-IVb0lG.js +2 -0
  33. package/src/client/dist/spa/assets/{javascript-PJBbOo9I.js → javascript-Co6I4XSh.js} +1 -1
  34. package/src/client/dist/spa/assets/{jsonMode-D4akRBRs.js → jsonMode-Bp7yDKPn.js} +1 -1
  35. package/src/client/dist/spa/assets/{liquid-EUlazot7.js → liquid-DNcFzYOe.js} +1 -1
  36. package/src/client/dist/spa/assets/{mdx-BGyD5-MK.js → mdx-DBavZVIR.js} +1 -1
  37. package/src/client/dist/spa/assets/{models-GweeyU2r.js → models-CBrNFRtB.js} +1 -1
  38. package/src/client/dist/spa/assets/{monaco.contribution-Ci35AF1I.js → monaco.contribution-DUmoyOMN.js} +2 -2
  39. package/src/client/dist/spa/assets/{python-BG_aaGdU.js → python-DmL-S2ZK.js} +1 -1
  40. package/src/client/dist/spa/assets/{razor-BWRO_-vh.js → razor-Bpa1oEQM.js} +1 -1
  41. package/src/client/dist/spa/assets/{tsMode-CfJ3FSRi.js → tsMode-LSHCraGE.js} +1 -1
  42. package/src/client/dist/spa/assets/{typescript-BD5IT0Pn.js → typescript-2KSBXoSD.js} +1 -1
  43. package/src/client/dist/spa/assets/{xml-DBx8yQFe.js → xml-CCjUFDf8.js} +1 -1
  44. package/src/client/dist/spa/assets/{yaml-DdHKmdlx.js → yaml-w5memWnS.js} +1 -1
  45. package/src/client/dist/spa/index.html +1 -1
  46. package/src/client/dist/spa/assets/ActivityFeed-DETQbE-a.js +0 -7
  47. package/src/client/dist/spa/assets/CreatePage-yu2IH7GW.css +0 -1
  48. package/src/client/dist/spa/assets/WorkspacePage-DPGiH02q.css +0 -1
  49. package/src/client/dist/spa/assets/WorkspacePage-De-8vIz8.js +0 -4
  50. package/src/client/dist/spa/assets/i18n-DBt4wD57.js +0 -1
  51. package/src/client/dist/spa/assets/index-B0Jj-w-E.js +0 -2
@@ -88,6 +88,19 @@ export const migrations = [
88
88
  })();
89
89
  },
90
90
  },
91
+ {
92
+ version: 11,
93
+ name: 'add-pending-wakeups-table',
94
+ migrate: (db) => {
95
+ db.prepare(`CREATE TABLE IF NOT EXISTS pending_wakeups (
96
+ workspace_id TEXT PRIMARY KEY REFERENCES workspaces(id) ON DELETE CASCADE,
97
+ target_at TEXT NOT NULL,
98
+ prompt TEXT NOT NULL,
99
+ reason TEXT,
100
+ created_at TEXT NOT NULL
101
+ )`).run();
102
+ },
103
+ },
91
104
  ];
92
105
  /** Current schema version — always equals the highest migration version. */
93
106
  export const SCHEMA_VERSION = migrations.length > 0 ? migrations[migrations.length - 1].version : 1;
@@ -54,6 +54,14 @@ export function initSchema(db) {
54
54
  created_at TEXT NOT NULL
55
55
  );
56
56
 
57
+ CREATE TABLE IF NOT EXISTS pending_wakeups (
58
+ workspace_id TEXT PRIMARY KEY REFERENCES workspaces(id) ON DELETE CASCADE,
59
+ target_at TEXT NOT NULL,
60
+ prompt TEXT NOT NULL,
61
+ reason TEXT,
62
+ created_at TEXT NOT NULL
63
+ );
64
+
57
65
  CREATE INDEX IF NOT EXISTS idx_tasks_workspace_id ON tasks(workspace_id);
58
66
  CREATE INDEX IF NOT EXISTS idx_agent_sessions_workspace_id ON agent_sessions(workspace_id);
59
67
  CREATE INDEX IF NOT EXISTS idx_ws_events_workspace_id ON ws_events(workspace_id);
@@ -26,6 +26,7 @@ import { createDailyDbBackupIfNeeded } from './services/db-backup-service.js';
26
26
  import { startDevServer, stopDevServer } from './services/dev-server-service.js';
27
27
  import { startPrWatcher, stopPrWatcher } from './services/pr-watcher-service.js';
28
28
  import { createTerminal, destroyAllTerminals, getTerminal } from './services/terminal-service.js';
29
+ import * as wakeupService from './services/wakeup-service.js';
29
30
  import { emit, handleConnection, setMessageHandler } from './services/websocket-service.js';
30
31
  import { getActiveSession, getWorkspace, updateWorkspaceStatus } from './services/workspace-service.js';
31
32
  import { getClientSpaPath, getDbPath, getKoboHome, getPackageVersion } from './utils/paths.js';
@@ -53,10 +54,11 @@ void createDailyDbBackupIfNeeded(db, getDbPath()).then((r) => {
53
54
  }
54
55
  }
55
56
  });
56
- // Initialize process cleanup, agent watchdog, and PR watcher
57
+ // Initialize process cleanup, agent watchdog, PR watcher, and wakeup rehydration
57
58
  initProcessCleanup();
58
59
  reconcileOrphanSessions();
59
60
  startWatchdog();
61
+ wakeupService.rehydrate();
60
62
  startPrWatcher();
61
63
  // Create Hono app
62
64
  const app = new Hono();
@@ -15,6 +15,7 @@ import * as sentryService from '../services/sentry-service.js';
15
15
  import * as settingsService from '../services/settings-service.js';
16
16
  import { runSetupScript } from '../services/setup-script-service.js';
17
17
  import * as terminalService from '../services/terminal-service.js';
18
+ import * as wakeupService from '../services/wakeup-service.js';
18
19
  import * as wsService from '../services/websocket-service.js';
19
20
  import * as workspaceService from '../services/workspace-service.js';
20
21
  import * as worktreeService from '../services/worktree-service.js';
@@ -515,6 +516,30 @@ app.get('/:id/sessions', (c) => {
515
516
  return c.json({ error: message }, 500);
516
517
  }
517
518
  });
519
+ // GET /api/workspaces/:id/pending-wakeup — returns the pending wakeup or null.
520
+ app.get('/:id/pending-wakeup', (c) => {
521
+ try {
522
+ const id = c.req.param('id');
523
+ const pending = wakeupService.getPending(id);
524
+ return c.json(pending);
525
+ }
526
+ catch (err) {
527
+ const message = err instanceof Error ? err.message : String(err);
528
+ return c.json({ error: message }, 500);
529
+ }
530
+ });
531
+ // DELETE /api/workspaces/:id/pending-wakeup — user-initiated cancel ("×" button).
532
+ app.delete('/:id/pending-wakeup', (c) => {
533
+ try {
534
+ const id = c.req.param('id');
535
+ wakeupService.cancel(id, 'manual');
536
+ return c.json({ ok: true });
537
+ }
538
+ catch (err) {
539
+ const message = err instanceof Error ? err.message : String(err);
540
+ return c.json({ error: message }, 500);
541
+ }
542
+ });
518
543
  // PATCH /api/workspaces/:id/sessions/:sessionId — rename a session
519
544
  app.patch('/:id/sessions/:sessionId', async (c) => {
520
545
  try {
@@ -1481,6 +1506,9 @@ Start now.`;
1481
1506
  // Persist the prompt in the chat feed so the user sees what was dispatched.
1482
1507
  const session = workspaceService.getActiveSession(workspace.id);
1483
1508
  wsService.emit(workspace.id, 'user:message', { content: prompt, sender: 'user' }, session?.id ?? undefined);
1509
+ // Cancel any pending wakeup: the user is driving this turn, the
1510
+ // scheduler should not also wake the agent a few minutes later.
1511
+ wakeupService.cancel(workspace.id, 'user-message');
1484
1512
  let messageSent = false;
1485
1513
  try {
1486
1514
  agentManager.sendMessage(workspace.id, prompt);
@@ -1615,6 +1643,8 @@ app.post('/:id/open-pr', async (c) => {
1615
1643
  // Emit user:message into the chat feed
1616
1644
  const session = workspaceService.getActiveSession(workspace.id);
1617
1645
  wsService.emit(workspace.id, 'user:message', { content: rendered, sender: 'user' }, session?.id ?? undefined);
1646
+ // Cancel any pending wakeup: the user is driving this turn.
1647
+ wakeupService.cancel(workspace.id, 'user-message');
1618
1648
  // Send to the running agent, or resume the agent with the PR prompt
1619
1649
  let messageSent = false;
1620
1650
  try {
@@ -4,6 +4,7 @@ import { getDb } from '../../db/index.js';
4
4
  import { ensureKoboHome, getCompiledMcpServerPath, getDbPath, getKoboHome, getMcpServerSourcePath, getSettingsPath, getSkillsPath, } from '../../utils/paths.js';
5
5
  import { unregisterProcess } from '../../utils/process-tracker.js';
6
6
  import { getEffectiveSettings } from '../settings-service.js';
7
+ import * as wakeupService from '../wakeup-service.js';
7
8
  import { emitEphemeral } from '../websocket-service.js';
8
9
  import { getWorkspace as getWs, markWorkspaceUnread, updateWorkspaceStatus } from '../workspace-service.js';
9
10
  import { resolveEngine } from './engines/registry.js';
@@ -252,6 +253,15 @@ function reuseOrCreateFreshSession(workspaceId, existingSessionId) {
252
253
  // ── Event handler ─────────────────────────────────────────────────────────────
253
254
  function handleEvent(workspaceId, agentSessionId, ev) {
254
255
  routeEvent(workspaceId, agentSessionId, ev);
256
+ if (ev.kind === 'tool:call' && ev.name === 'ScheduleWakeup') {
257
+ const input = ev.input;
258
+ const delay = typeof input?.delaySeconds === 'number' ? input.delaySeconds : 0;
259
+ const prompt = typeof input?.prompt === 'string' ? input.prompt : '';
260
+ const reason = typeof input?.reason === 'string' ? input.reason : undefined;
261
+ if (delay > 0 && prompt) {
262
+ wakeupService.schedule(workspaceId, delay, prompt, reason);
263
+ }
264
+ }
255
265
  if (ev.kind === 'skills:discovered') {
256
266
  availableSkills = ev.skills;
257
267
  try {
@@ -470,6 +480,7 @@ export function stopAgent(workspaceId) {
470
480
  if (!ctrl) {
471
481
  throw new Error(`No agent running for workspace '${workspaceId}'`);
472
482
  }
483
+ wakeupService.cancel(workspaceId, 'stopped');
473
484
  // Remove from the map immediately so startAgent can proceed right away.
474
485
  // The session:ended handler checks identity before removing, so a new
475
486
  // controller started in the meantime is preserved.
@@ -490,12 +501,17 @@ export function sendMessage(workspaceId, content) {
490
501
  if (!ctrl) {
491
502
  throw new Error(`No agent running for workspace '${workspaceId}'`);
492
503
  }
504
+ wakeupService.cancel(workspaceId, 'user-message');
493
505
  ctrl.sendMessage(content);
494
506
  }
495
507
  /** In-memory status of the agent for a workspace, or null if not running. */
496
508
  export function getAgentStatus(workspaceId) {
497
509
  return controllers.get(workspaceId)?.status ?? null;
498
510
  }
511
+ /** True when an agent controller is currently running for the workspace. */
512
+ export function hasController(workspaceId) {
513
+ return controllers.has(workspaceId);
514
+ }
499
515
  /** Number of currently running controllers. */
500
516
  export function getRunningCount() {
501
517
  return controllers.size;
@@ -580,3 +596,5 @@ export function _getSessionIds() {
580
596
  export function _runWatchdogForTest() {
581
597
  runWatchdog();
582
598
  }
599
+ /** Test-only export. Not part of the public module API. */
600
+ export const __test__ = { handleEvent };
@@ -0,0 +1,154 @@
1
+ import path from 'node:path';
2
+ import { getDb } from '../db/index.js';
3
+ import * as orchestrator from './agent/orchestrator.js';
4
+ import { emitEphemeral } from './websocket-service.js';
5
+ const MIN_DELAY_SECONDS = 60;
6
+ const MAX_DELAY_SECONDS = 3600;
7
+ const STALE_WAKEUP_GRACE_MS = 5 * 60 * 1000;
8
+ const AUTONOMOUS_LOOP_SENTINEL = '<<autonomous-loop-dynamic>>';
9
+ const AUTONOMOUS_LOOP_FALLBACK_PROMPT = 'Continue where you left off.';
10
+ /** In-memory timers — cleared on cancel/fire; rebuilt on boot via rehydrate. */
11
+ const timers = new Map();
12
+ function clamp(n, lo, hi) {
13
+ return Math.max(lo, Math.min(hi, n));
14
+ }
15
+ function rowToPending(row) {
16
+ if (!row)
17
+ return null;
18
+ return { targetAt: row.target_at, reason: row.reason ?? undefined };
19
+ }
20
+ /** Schedule a wakeup for the given workspace. Replaces any existing pending wakeup. */
21
+ export function schedule(workspaceId, delaySeconds, prompt, reason) {
22
+ try {
23
+ const clampedSeconds = clamp(Math.floor(delaySeconds), MIN_DELAY_SECONDS, MAX_DELAY_SECONDS);
24
+ const effectivePrompt = prompt === AUTONOMOUS_LOOP_SENTINEL ? AUTONOMOUS_LOOP_FALLBACK_PROMPT : prompt;
25
+ const targetAtIso = new Date(Date.now() + clampedSeconds * 1000).toISOString();
26
+ const existing = timers.get(workspaceId);
27
+ if (existing)
28
+ clearTimeout(existing);
29
+ const db = getDb();
30
+ db.prepare(`INSERT OR REPLACE INTO pending_wakeups
31
+ (workspace_id, target_at, prompt, reason, created_at)
32
+ VALUES (?, ?, ?, ?, ?)`).run(workspaceId, targetAtIso, effectivePrompt, reason ?? null, new Date().toISOString());
33
+ const timeout = setTimeout(() => fire(workspaceId), clampedSeconds * 1000);
34
+ timeout.unref?.();
35
+ timers.set(workspaceId, timeout);
36
+ emitEphemeral(workspaceId, 'wakeup:scheduled', { targetAt: targetAtIso, reason });
37
+ }
38
+ catch (err) {
39
+ console.error('[wakeup-service] schedule failed:', err);
40
+ }
41
+ }
42
+ /** Cancel any pending wakeup for the workspace. Idempotent. */
43
+ export function cancel(workspaceId, reason) {
44
+ try {
45
+ const existing = timers.get(workspaceId);
46
+ if (existing) {
47
+ clearTimeout(existing);
48
+ timers.delete(workspaceId);
49
+ }
50
+ const db = getDb();
51
+ const result = db.prepare('DELETE FROM pending_wakeups WHERE workspace_id = ?').run(workspaceId);
52
+ if (result.changes > 0) {
53
+ emitEphemeral(workspaceId, 'wakeup:cancelled', { reason });
54
+ }
55
+ }
56
+ catch (err) {
57
+ console.error('[wakeup-service] cancel failed:', err);
58
+ }
59
+ }
60
+ /** Return the current pending wakeup for a workspace, or null if none. */
61
+ export function getPending(workspaceId) {
62
+ try {
63
+ const db = getDb();
64
+ const row = db.prepare('SELECT * FROM pending_wakeups WHERE workspace_id = ?').get(workspaceId);
65
+ return rowToPending(row);
66
+ }
67
+ catch (err) {
68
+ console.error('[wakeup-service] getPending failed:', err);
69
+ return null;
70
+ }
71
+ }
72
+ /** Re-register timers for rows persisted across restart. Skips stale entries. */
73
+ export function rehydrate() {
74
+ try {
75
+ const db = getDb();
76
+ const rows = db.prepare('SELECT * FROM pending_wakeups').all();
77
+ const now = Date.now();
78
+ for (const row of rows) {
79
+ try {
80
+ const target = new Date(row.target_at).getTime();
81
+ const delay = target - now;
82
+ if (delay > 0) {
83
+ const timeout = setTimeout(() => fire(row.workspace_id), delay);
84
+ timeout.unref?.();
85
+ timers.set(row.workspace_id, timeout);
86
+ }
87
+ else if (-delay <= STALE_WAKEUP_GRACE_MS) {
88
+ const timeout = setTimeout(() => fire(row.workspace_id), 0);
89
+ timeout.unref?.();
90
+ timers.set(row.workspace_id, timeout);
91
+ }
92
+ else {
93
+ db.prepare('DELETE FROM pending_wakeups WHERE workspace_id = ?').run(row.workspace_id);
94
+ console.log(`[wakeup-service] Skipping stale wakeup for workspace ${row.workspace_id} (late by ${Math.round(-delay / 1000)}s)`);
95
+ }
96
+ }
97
+ catch (err) {
98
+ console.error('[wakeup-service] rehydrate row failed:', row.workspace_id, err);
99
+ }
100
+ }
101
+ }
102
+ catch (err) {
103
+ console.error('[wakeup-service] rehydrate failed:', err);
104
+ }
105
+ }
106
+ /** Internal — invoked by setTimeout. */
107
+ function fire(workspaceId) {
108
+ try {
109
+ const db = getDb();
110
+ // Atomic claim: SELECT + DELETE in a single transaction so a concurrent
111
+ // cancel() can't race us between the read and the act. If we come out
112
+ // with a row, it's ours exclusively; no other caller will ever see it.
113
+ const row = db.transaction(() => {
114
+ const r = db.prepare('SELECT * FROM pending_wakeups WHERE workspace_id = ?').get(workspaceId);
115
+ if (r) {
116
+ db.prepare('DELETE FROM pending_wakeups WHERE workspace_id = ?').run(workspaceId);
117
+ }
118
+ return r;
119
+ })();
120
+ timers.delete(workspaceId);
121
+ if (!row)
122
+ return;
123
+ if (orchestrator.hasController(workspaceId)) {
124
+ emitEphemeral(workspaceId, 'wakeup:skipped', { reason: 'session-active' });
125
+ return;
126
+ }
127
+ const wsRow = db
128
+ .prepare(`SELECT project_path, working_branch, model, permission_mode, reasoning_effort
129
+ FROM workspaces WHERE id = ?`)
130
+ .get(workspaceId);
131
+ if (!wsRow) {
132
+ emitEphemeral(workspaceId, 'wakeup:skipped', { reason: 'fire-failed' });
133
+ return;
134
+ }
135
+ const worktreePath = path.join(wsRow.project_path, '.worktrees', wsRow.working_branch);
136
+ // Defensive: narrow `permission_mode` against the two known values rather
137
+ // than trusting the DB column shape. Any unexpected value falls back to
138
+ // the safer 'auto-accept'.
139
+ const permissionMode = wsRow.permission_mode === 'plan' ? 'plan' : 'auto-accept';
140
+ try {
141
+ orchestrator.startAgent(workspaceId, worktreePath, row.prompt, wsRow.model, true, permissionMode, undefined, wsRow.reasoning_effort);
142
+ emitEphemeral(workspaceId, 'wakeup:fired', {});
143
+ }
144
+ catch (err) {
145
+ const message = err instanceof Error ? err.message : String(err);
146
+ console.error(`[wakeup-service] startAgent at fire time failed for '${workspaceId}':`, message);
147
+ emitEphemeral(workspaceId, 'wakeup:skipped', { reason: 'fire-failed' });
148
+ }
149
+ }
150
+ catch (err) {
151
+ console.error('[wakeup-service] fire failed:', err);
152
+ timers.delete(workspaceId);
153
+ }
154
+ }
@@ -1,5 +1,6 @@
1
1
  import { nanoid } from 'nanoid';
2
2
  import { getDb } from '../db/index.js';
3
+ import * as wakeupService from './wakeup-service.js';
3
4
  /** Allowed status transitions per current status. Enforced by updateWorkspaceStatus. */
4
5
  const VALID_TRANSITIONS = {
5
6
  created: ['extracting', 'brainstorming', 'idle', 'error'],
@@ -208,6 +209,10 @@ export function markWorkspaceUnread(id) {
208
209
  }
209
210
  /** Delete a workspace and cascade-delete its tasks. */
210
211
  export function deleteWorkspace(id) {
212
+ // Cancel any pending wakeup first so the in-memory timer is cleared.
213
+ // The DB row is removed via ON DELETE CASCADE, but the timer would
214
+ // otherwise fire and hit an empty workspace.
215
+ wakeupService.cancel(id, 'deleted');
211
216
  const db = getDb();
212
217
  db.prepare('DELETE FROM workspaces WHERE id = ?').run(id);
213
218
  }
@@ -289,6 +294,8 @@ export function archiveWorkspace(id) {
289
294
  if (workspace.archivedAt) {
290
295
  throw new Error(`Workspace '${id}' is already archived`);
291
296
  }
297
+ // Cancel any pending wakeup — archived workspaces should not wake up.
298
+ wakeupService.cancel(id, 'archived');
292
299
  const now = new Date().toISOString();
293
300
  db.prepare('UPDATE workspaces SET archived_at = ?, updated_at = ? WHERE id = ?').run(now, now, id);
294
301
  return getWorkspace(id);
@@ -227,14 +227,20 @@ export function abortOngoingGitOperation(repoPath) {
227
227
  }
228
228
  /** Try a git command with `base`, falling back to `origin/base` if the local ref is missing. */
229
229
  function resolveBase(repoPath, base) {
230
+ // Prefer `origin/<base>` when it exists: local <base> can lag behind origin
231
+ // (e.g. a squash-merge happened upstream that the user hasn't pulled), and
232
+ // worktrees are created off `origin/<sourceBranch>` anyway — so comparing
233
+ // against stale local <base> would surface upstream commits as "on this
234
+ // branch". Fall back to local only when the remote ref isn't reachable
235
+ // (offline, no remote configured, etc.).
230
236
  try {
231
- git(repoPath, ['rev-parse', '--verify', base]);
232
- return base;
237
+ git(repoPath, ['rev-parse', '--verify', `origin/${base}`]);
238
+ return `origin/${base}`;
233
239
  }
234
240
  catch {
235
241
  try {
236
- git(repoPath, ['rev-parse', '--verify', `origin/${base}`]);
237
- return `origin/${base}`;
242
+ git(repoPath, ['rev-parse', '--verify', base]);
243
+ return base;
238
244
  }
239
245
  catch {
240
246
  return base;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@loicngr/kobo",
3
- "version": "1.6.5",
3
+ "version": "1.6.7",
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 +1 @@
1
- .markdown-message[data-v-0ac5a3e4]{color:#e0e0e0;word-break:break-word;overflow-wrap:anywhere;min-width:0;max-width:100%;font-size:13px;line-height:1.55}.markdown-message[data-v-0ac5a3e4] *{max-width:100%}.markdown-message[data-v-0ac5a3e4] p{margin:0 0 .5em}.markdown-message[data-v-0ac5a3e4] p:last-child{margin-bottom:0}.markdown-message[data-v-0ac5a3e4] pre{background:#00000059;border-radius:4px;margin:.5em 0;padding:.5em .75em;overflow-x:auto}.markdown-message[data-v-0ac5a3e4] code{word-break:break-all;background:#0000004d;border-radius:3px;padding:.1em .3em;font-size:.9em}.markdown-message[data-v-0ac5a3e4] pre code{background:0 0;padding:0}.markdown-message[data-v-0ac5a3e4] ul,.markdown-message[data-v-0ac5a3e4] ol{margin:.25em 0 .5em;padding-left:1.5em}.markdown-message[data-v-0ac5a3e4] li{margin:.15em 0}.markdown-message[data-v-0ac5a3e4] a{color:#7986cb;text-decoration:underline}.markdown-message[data-v-0ac5a3e4] .document-link{color:#9fa8da;cursor:pointer;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.markdown-message[data-v-0ac5a3e4] .document-link:hover{color:#c5cae9;-webkit-text-decoration:underline;text-decoration:underline}.markdown-message[data-v-0ac5a3e4] h1,.markdown-message[data-v-0ac5a3e4] h2,.markdown-message[data-v-0ac5a3e4] h3,.markdown-message[data-v-0ac5a3e4] h4,.markdown-message[data-v-0ac5a3e4] h5,.markdown-message[data-v-0ac5a3e4] h6{margin:.5em 0 .3em;font-weight:600;line-height:1.3}.markdown-message[data-v-0ac5a3e4] h1{font-size:1.25em}.markdown-message[data-v-0ac5a3e4] h2{font-size:1.15em}.markdown-message[data-v-0ac5a3e4] h3{font-size:1.08em}.markdown-message[data-v-0ac5a3e4] h4,.markdown-message[data-v-0ac5a3e4] h5,.markdown-message[data-v-0ac5a3e4] h6{font-size:1em}.markdown-message[data-v-0ac5a3e4] blockquote{color:#ffffffb3;border-left:3px solid #fff3;margin:.5em 0;padding-left:.75em}.markdown-message[data-v-0ac5a3e4] table{border-collapse:collapse;margin:.5em 0}.markdown-message[data-v-0ac5a3e4] th,.markdown-message[data-v-0ac5a3e4] td{border:1px solid #ffffff26;padding:.25em .5em}.markdown-thinking[data-v-e9fb9f90] p{margin:0 0 .4em}.markdown-thinking[data-v-e9fb9f90] p:last-child{margin-bottom:0}.markdown-thinking[data-v-e9fb9f90] code{background:#ffffff14;border-radius:3px;padding:.1em .3em}.tool-row[data-v-b1ed78cb]{border-radius:4px;margin:0;font-size:12px}.tool-header[data-v-b1ed78cb]{color:#bbb;cursor:default;align-items:center;gap:10px;min-width:0;padding:5px 10px;display:flex}.tool-row:not(.tool-row-generic) .tool-header[data-v-b1ed78cb],.tool-row--toggleable .tool-header[data-v-b1ed78cb]{cursor:pointer}.tool-row:has(.tool-diff) .tool-header[data-v-b1ed78cb]{cursor:pointer}.tool-row:not(.tool-row-generic) .tool-header[data-v-b1ed78cb]:hover,.tool-row--toggleable .tool-header[data-v-b1ed78cb]:hover{background:#ffffff08}.tool-icon[data-v-b1ed78cb]{color:#9fbce0;flex-shrink:0}.tool-name[data-v-b1ed78cb]{color:#d0d0d0;flex-shrink:0;font-weight:600}.tool-arg[data-v-b1ed78cb],.tool-path[data-v-b1ed78cb]{color:#999;text-overflow:ellipsis;white-space:nowrap;min-width:0;max-width:100%;font-family:SF Mono,Menlo,Consolas,monospace;font-size:11.5px;overflow:hidden}.tool-path[data-v-b1ed78cb],.tool-arg[data-v-b1ed78cb]{flex:1}.tool-stat-add[data-v-b1ed78cb]{color:#66bb6a;flex-shrink:0;font-size:11px;font-weight:600}.tool-stat-del[data-v-b1ed78cb]{color:#ef5350;flex-shrink:0;font-size:11px;font-weight:600}.tool-diff[data-v-b1ed78cb]{background:#0003;border-radius:4px;max-height:400px;margin-top:4px;padding:8px 0;font-family:SF Mono,Menlo,Consolas,monospace;font-size:11px;line-height:1.5;overflow:auto}.diff-line[data-v-b1ed78cb]{white-space:pre;color:#bbb;padding:0 12px}.diff-sign[data-v-b1ed78cb]{color:#555;-webkit-user-select:none;user-select:none;width:14px;display:inline-block}.diff-add[data-v-b1ed78cb]{color:#c8e6c9;background:#66bb6a1a}.diff-add .diff-sign[data-v-b1ed78cb]{color:#66bb6a}.diff-del[data-v-b1ed78cb]{color:#ffcdd2;background:#ef53501a}.diff-del .diff-sign[data-v-b1ed78cb]{color:#ef5350}.tool-output[data-v-b1ed78cb]{color:#aaa;white-space:pre-wrap;background:#00000026;border-radius:4px;max-height:8em;margin-top:4px;padding:6px 10px;font-family:SF Mono,Menlo,Consolas,monospace;font-size:11px;overflow:auto}.markdown-message[data-v-cb8cec0f]{color:#e0e0e0;word-break:break-word;overflow-wrap:anywhere;min-width:0;max-width:100%;font-size:13px;line-height:1.55}.markdown-message[data-v-cb8cec0f] *{max-width:100%}.markdown-message[data-v-cb8cec0f] code{word-break:break-all}.markdown-message[data-v-cb8cec0f] p{margin:0 0 .4em}.markdown-message[data-v-cb8cec0f] p:last-child{margin-bottom:0}.markdown-message[data-v-cb8cec0f] code{background:#00000040;border-radius:3px;padding:.1em .3em}.markdown-message[data-v-cb8cec0f] h1,.markdown-message[data-v-cb8cec0f] h2,.markdown-message[data-v-cb8cec0f] h3,.markdown-message[data-v-cb8cec0f] h4,.markdown-message[data-v-cb8cec0f] h5,.markdown-message[data-v-cb8cec0f] h6{margin:.4em 0 .25em;font-weight:600;line-height:1.3}.markdown-message[data-v-cb8cec0f] h1{font-size:1.25em}.markdown-message[data-v-cb8cec0f] h2{font-size:1.15em}.markdown-message[data-v-cb8cec0f] h3{font-size:1.08em}.markdown-message[data-v-cb8cec0f] h4,.markdown-message[data-v-cb8cec0f] h5,.markdown-message[data-v-cb8cec0f] h6{font-size:1em}.markdown-user-prompt[data-v-cb8cec0f]{color:#aaa;font-size:12px;font-style:italic}.markdown-user-prompt[data-v-cb8cec0f] p{margin:0 0 .4em}.markdown-user-prompt[data-v-cb8cec0f] code{background:#ffffff14;border-radius:3px;padding:.1em .3em;font-style:normal}.turn-card[data-v-50994916]{border:1px solid #ffffff14;border-left:3px solid var(--turn-accent);background:#ffffff05;border-radius:6px;min-width:0;max-width:100%;margin:14px 0;overflow:hidden}.turn-header[data-v-50994916]{color:#888;background:#ffffff08;border-bottom:1px solid #ffffff0d;align-items:center;gap:8px;padding:8px 14px;font-size:11px;display:flex}.turn-badge[data-v-50994916]{letter-spacing:.3px;border-radius:3px;padding:2px 8px;font-size:11px;font-weight:700}.turn-badge-user[data-v-50994916]{color:#ce93d8;background:#ce93d826}.turn-badge-agent[data-v-50994916]{color:#7986cb;background:#7986cb26}.turn-badge-system[data-v-50994916]{color:#bdbdbd;background:#75757533;font-style:italic}.turn-badge-session[data-v-50994916]{color:#9e9e9e;background:#61616133}.turn-time[data-v-50994916]{color:#666;font-family:SF Mono,Menlo,Consolas,monospace;font-size:11px}.turn-time-arrow[data-v-50994916]{opacity:.7;margin:0 -2px}.turn-time-updated[data-v-50994916]{color:#8891a3}.turn-actions[data-v-50994916]{color:#777;font-size:11px}.turn-body[data-v-50994916]{flex-direction:column;gap:12px;min-width:0;padding:14px 18px;display:flex}.turn-body[data-v-50994916]>*{min-width:0;max-width:100%}.turn-body[data-v-50994916] .tool-row+.tool-row{margin-top:-8px}.turn-scroll-top[data-v-50994916]{justify-content:flex-start;padding:0 8px 6px;display:flex}.turn-scroll-top-btn[data-v-50994916]{opacity:.5;transition:opacity .15s}.turn-scroll-top-btn[data-v-50994916]:hover{opacity:1}.activity-feed-wrap[data-v-3ac19953]{width:100%;height:100%;position:relative}.activity-feed-scroll[data-v-3ac19953]{width:100%;height:100%}.activity-feed-nav-cluster[data-v-3ac19953]{z-index:2;align-items:center;gap:8px;display:flex;position:absolute;bottom:14px;right:14px}.activity-feed-nav-btn[data-v-3ac19953]{opacity:.8;transition:opacity .12s}.activity-feed-nav-btn[data-v-3ac19953]:hover{opacity:1}.content-origin-marker[data-v-3ac19953]{pointer-events:none;width:0;height:0;margin:0;padding:0}.activity-feed-scroll[data-v-3ac19953] .q-scrollarea__content{max-width:100%;overflow-x:hidden}.activity-feed-switching[data-v-3ac19953]{justify-content:center;align-items:center;width:100%;height:100%;display:flex}
1
+ .markdown-message[data-v-0ac5a3e4]{color:#e0e0e0;word-break:break-word;overflow-wrap:anywhere;min-width:0;max-width:100%;font-size:13px;line-height:1.55}.markdown-message[data-v-0ac5a3e4] *{max-width:100%}.markdown-message[data-v-0ac5a3e4] p{margin:0 0 .5em}.markdown-message[data-v-0ac5a3e4] p:last-child{margin-bottom:0}.markdown-message[data-v-0ac5a3e4] pre{background:#00000059;border-radius:4px;margin:.5em 0;padding:.5em .75em;overflow-x:auto}.markdown-message[data-v-0ac5a3e4] code{word-break:break-all;background:#0000004d;border-radius:3px;padding:.1em .3em;font-size:.9em}.markdown-message[data-v-0ac5a3e4] pre code{background:0 0;padding:0}.markdown-message[data-v-0ac5a3e4] ul,.markdown-message[data-v-0ac5a3e4] ol{margin:.25em 0 .5em;padding-left:1.5em}.markdown-message[data-v-0ac5a3e4] li{margin:.15em 0}.markdown-message[data-v-0ac5a3e4] a{color:#7986cb;text-decoration:underline}.markdown-message[data-v-0ac5a3e4] .document-link{color:#9fa8da;cursor:pointer;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.markdown-message[data-v-0ac5a3e4] .document-link:hover{color:#c5cae9;-webkit-text-decoration:underline;text-decoration:underline}.markdown-message[data-v-0ac5a3e4] h1,.markdown-message[data-v-0ac5a3e4] h2,.markdown-message[data-v-0ac5a3e4] h3,.markdown-message[data-v-0ac5a3e4] h4,.markdown-message[data-v-0ac5a3e4] h5,.markdown-message[data-v-0ac5a3e4] h6{margin:.5em 0 .3em;font-weight:600;line-height:1.3}.markdown-message[data-v-0ac5a3e4] h1{font-size:1.25em}.markdown-message[data-v-0ac5a3e4] h2{font-size:1.15em}.markdown-message[data-v-0ac5a3e4] h3{font-size:1.08em}.markdown-message[data-v-0ac5a3e4] h4,.markdown-message[data-v-0ac5a3e4] h5,.markdown-message[data-v-0ac5a3e4] h6{font-size:1em}.markdown-message[data-v-0ac5a3e4] blockquote{color:#ffffffb3;border-left:3px solid #fff3;margin:.5em 0;padding-left:.75em}.markdown-message[data-v-0ac5a3e4] table{border-collapse:collapse;margin:.5em 0}.markdown-message[data-v-0ac5a3e4] th,.markdown-message[data-v-0ac5a3e4] td{border:1px solid #ffffff26;padding:.25em .5em}.markdown-thinking[data-v-e9fb9f90] p{margin:0 0 .4em}.markdown-thinking[data-v-e9fb9f90] p:last-child{margin-bottom:0}.markdown-thinking[data-v-e9fb9f90] code{background:#ffffff14;border-radius:3px;padding:.1em .3em}.tool-row[data-v-b1ed78cb]{border-radius:4px;margin:0;font-size:12px}.tool-header[data-v-b1ed78cb]{color:#bbb;cursor:default;align-items:center;gap:10px;min-width:0;padding:5px 10px;display:flex}.tool-row:not(.tool-row-generic) .tool-header[data-v-b1ed78cb],.tool-row--toggleable .tool-header[data-v-b1ed78cb]{cursor:pointer}.tool-row:has(.tool-diff) .tool-header[data-v-b1ed78cb]{cursor:pointer}.tool-row:not(.tool-row-generic) .tool-header[data-v-b1ed78cb]:hover,.tool-row--toggleable .tool-header[data-v-b1ed78cb]:hover{background:#ffffff08}.tool-icon[data-v-b1ed78cb]{color:#9fbce0;flex-shrink:0}.tool-name[data-v-b1ed78cb]{color:#d0d0d0;flex-shrink:0;font-weight:600}.tool-arg[data-v-b1ed78cb],.tool-path[data-v-b1ed78cb]{color:#999;text-overflow:ellipsis;white-space:nowrap;min-width:0;max-width:100%;font-family:SF Mono,Menlo,Consolas,monospace;font-size:11.5px;overflow:hidden}.tool-path[data-v-b1ed78cb],.tool-arg[data-v-b1ed78cb]{flex:1}.tool-stat-add[data-v-b1ed78cb]{color:#66bb6a;flex-shrink:0;font-size:11px;font-weight:600}.tool-stat-del[data-v-b1ed78cb]{color:#ef5350;flex-shrink:0;font-size:11px;font-weight:600}.tool-diff[data-v-b1ed78cb]{background:#0003;border-radius:4px;max-height:400px;margin-top:4px;padding:8px 0;font-family:SF Mono,Menlo,Consolas,monospace;font-size:11px;line-height:1.5;overflow:auto}.diff-line[data-v-b1ed78cb]{white-space:pre;color:#bbb;padding:0 12px}.diff-sign[data-v-b1ed78cb]{color:#555;-webkit-user-select:none;user-select:none;width:14px;display:inline-block}.diff-add[data-v-b1ed78cb]{color:#c8e6c9;background:#66bb6a1a}.diff-add .diff-sign[data-v-b1ed78cb]{color:#66bb6a}.diff-del[data-v-b1ed78cb]{color:#ffcdd2;background:#ef53501a}.diff-del .diff-sign[data-v-b1ed78cb]{color:#ef5350}.tool-output[data-v-b1ed78cb]{color:#aaa;white-space:pre-wrap;background:#00000026;border-radius:4px;max-height:8em;margin-top:4px;padding:6px 10px;font-family:SF Mono,Menlo,Consolas,monospace;font-size:11px;overflow:auto}.markdown-message[data-v-cb8cec0f]{color:#e0e0e0;word-break:break-word;overflow-wrap:anywhere;min-width:0;max-width:100%;font-size:13px;line-height:1.55}.markdown-message[data-v-cb8cec0f] *{max-width:100%}.markdown-message[data-v-cb8cec0f] code{word-break:break-all}.markdown-message[data-v-cb8cec0f] p{margin:0 0 .4em}.markdown-message[data-v-cb8cec0f] p:last-child{margin-bottom:0}.markdown-message[data-v-cb8cec0f] code{background:#00000040;border-radius:3px;padding:.1em .3em}.markdown-message[data-v-cb8cec0f] h1,.markdown-message[data-v-cb8cec0f] h2,.markdown-message[data-v-cb8cec0f] h3,.markdown-message[data-v-cb8cec0f] h4,.markdown-message[data-v-cb8cec0f] h5,.markdown-message[data-v-cb8cec0f] h6{margin:.4em 0 .25em;font-weight:600;line-height:1.3}.markdown-message[data-v-cb8cec0f] h1{font-size:1.25em}.markdown-message[data-v-cb8cec0f] h2{font-size:1.15em}.markdown-message[data-v-cb8cec0f] h3{font-size:1.08em}.markdown-message[data-v-cb8cec0f] h4,.markdown-message[data-v-cb8cec0f] h5,.markdown-message[data-v-cb8cec0f] h6{font-size:1em}.markdown-user-prompt[data-v-cb8cec0f]{color:#aaa;font-size:12px;font-style:italic}.markdown-user-prompt[data-v-cb8cec0f] p{margin:0 0 .4em}.markdown-user-prompt[data-v-cb8cec0f] code{background:#ffffff14;border-radius:3px;padding:.1em .3em;font-style:normal}.turn-card[data-v-50994916]{border:1px solid #ffffff14;border-left:3px solid var(--turn-accent);background:#ffffff05;border-radius:6px;min-width:0;max-width:100%;margin:14px 0;overflow:hidden}.turn-header[data-v-50994916]{color:#888;background:#ffffff08;border-bottom:1px solid #ffffff0d;align-items:center;gap:8px;padding:8px 14px;font-size:11px;display:flex}.turn-badge[data-v-50994916]{letter-spacing:.3px;border-radius:3px;padding:2px 8px;font-size:11px;font-weight:700}.turn-badge-user[data-v-50994916]{color:#ce93d8;background:#ce93d826}.turn-badge-agent[data-v-50994916]{color:#7986cb;background:#7986cb26}.turn-badge-system[data-v-50994916]{color:#bdbdbd;background:#75757533;font-style:italic}.turn-badge-session[data-v-50994916]{color:#9e9e9e;background:#61616133}.turn-time[data-v-50994916]{color:#666;font-family:SF Mono,Menlo,Consolas,monospace;font-size:11px}.turn-time-arrow[data-v-50994916]{opacity:.7;margin:0 -2px}.turn-time-updated[data-v-50994916]{color:#8891a3}.turn-actions[data-v-50994916]{color:#777;font-size:11px}.turn-body[data-v-50994916]{flex-direction:column;gap:12px;min-width:0;padding:14px 18px;display:flex}.turn-body[data-v-50994916]>*{min-width:0;max-width:100%}.turn-body[data-v-50994916] .tool-row+.tool-row{margin-top:-8px}.turn-scroll-top[data-v-50994916]{justify-content:flex-start;padding:0 8px 6px;display:flex}.turn-scroll-top-btn[data-v-50994916]{opacity:.5;transition:opacity .15s}.turn-scroll-top-btn[data-v-50994916]:hover{opacity:1}.activity-feed-wrap[data-v-24bebc4b]{width:100%;height:100%;position:relative}.activity-feed-scroll[data-v-24bebc4b]{width:100%;height:100%}.activity-feed-nav-cluster[data-v-24bebc4b]{z-index:2;align-items:center;gap:8px;display:flex;position:absolute;bottom:14px;right:14px}.activity-feed-nav-btn[data-v-24bebc4b]{opacity:.8;transition:opacity .12s}.activity-feed-nav-btn[data-v-24bebc4b]:hover{opacity:1}.content-origin-marker[data-v-24bebc4b]{pointer-events:none;width:0;height:0;margin:0;padding:0}.activity-feed-scroll[data-v-24bebc4b] .q-scrollarea__content{max-width:100%;overflow-x:hidden}.activity-feed-switching[data-v-24bebc4b]{justify-content:center;align-items:center;width:100%;height:100%;display:flex}
@@ -0,0 +1,7 @@
1
+ import{E as e,F as t,H as n,L as r,M as i,Q as a,U as o,_t as s,bt as c,d as l,f as u,g as d,h as f,l as p,p as m,r as h,rt as g,u as _,v,yt as y}from"./runtime-core.esm-bundler-C3IgBgY5.js";import{L as b,l as x,t as S}from"./QIcon-B0-pH3Qs.js";import{t as C}from"./QBtn-CyzfM9-_.js";import{n as w}from"./vue-i18n-eUDnMrPl.js";import{C as T,S as E,b as D,v as O}from"./index-C-IVb0lG.js";import{t as k}from"./QSpinnerDots-By20ptst.js";import{t as A}from"./QExpansionItem-HLBjHx-0.js";import{t as j}from"./QScrollArea-CBW6shMb.js";import{t as M}from"./QTooltip-DbEBexRN.js";import{n as N,r as P,t as F}from"./documents-AXuTuYab.js";import{t as I}from"./_plugin-vue_export-helper-Cj6tcsj6.js";function ee(e,t,n=!0){let r=[],i=new Map,a=new Map;for(let n=0;n<e.length;n++){let o=e[n],s=t?.[n];switch(o.kind){case`message:text`:{let e=i.get(o.messageId);if(e)e.text+=o.text,e.streaming=o.streaming;else{let e={type:`text`,messageId:o.messageId,text:o.text,streaming:o.streaming,ts:s};i.set(o.messageId,e),r.push(e)}break}case`message:end`:{let e=i.get(o.messageId);e&&(e.streaming=!1);break}case`message:thinking`:r.push({type:`thinking`,messageId:o.messageId,text:o.text,ts:s});break;case`tool:call`:{let e={type:`tool`,toolCallId:o.toolCallId,name:o.name,input:o.input,ts:s};a.set(o.toolCallId,e),r.push(e);break}case`tool:result`:{let e=a.get(o.toolCallId);e&&(e.result={output:o.output,isError:o.isError});break}case`session:started`:r.push({type:`session`,kind:`started`,detail:{engineSessionId:o.engineSessionId,model:o.model},ts:s});break;case`session:ended`:r.push({type:`session`,kind:`ended`,detail:{reason:o.reason,exitCode:o.exitCode},ts:s});break;case`session:compacted`:r.push({type:`session`,kind:`compacted`,ts:s});break;case`session:brainstorm-complete`:case`message:raw`:case`skills:discovered`:case`usage`:case`rate_limit`:case`subagent:progress`:case`error`:break;default:}}let o=null;for(let e of r)e.type===`text`&&e.streaming&&(o&&(o.streaming=!1),o=e);return o&&!n&&(o.streaming=!1),r}function te(e,t){if(t.length===0)return e;let n=t.map(e=>({type:`user`,content:e.content,sender:e.sender,ts:e.ts})),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}function L(e){switch(e.type){case`user`:return e.sender===`system-prompt`?`system-prompt`:`user`;case`session`:return`session`;default:return`agent`}}function ne(e){let t=[],n=null;for(let r of e){let e=L(r),i=e===`session`||e===`system-prompt`;!n||n.speaker!==e||i?(n={speaker:e,ts:r.ts,items:[r]},t.push(n),i&&(n=null)):n.items.push(r)}return t}var R={class:`text-caption text-grey-6`},z=v({__name:`SessionEventItem`,props:{item:{}},setup(e){let n=e,r=p(()=>{switch(n.item.kind){case`started`:return`session.started`;case`ended`:return`session.ended`;case`compacted`:return`session.compacted`;default:return`session.started`}});return(e,n)=>(t(),m(`span`,R,c(e.$t(r.value)),1))}});function B(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){V(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 V(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=H(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 H(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 U=[`innerHTML`],W=I(v({__name:`TextMessageItem`,props:{item:{}},setup(e){let n=e,r=F(),i=O(),a=p(()=>{let e=i.selectedWorkspaceId;return e?r.documentsFor(e).map(e=>e.path):[]}),o=p(()=>{let e=B(N.parse(n.item.text,{async:!1,breaks:!0,gfm:!0}),a.value);return P.sanitize(e,{ADD_ATTR:[`data-document-path`]})});function s(e){let t=e.target?.closest(`.document-link`);if(!t)return;e.preventDefault();let n=t.getAttribute(`data-document-path`),a=i.selectedWorkspaceId;!n||!a||r.openDocumentByPath(a,n)}return(n,r)=>(t(),m(`div`,{class:`markdown-message`,onClick:s},[_(`div`,{innerHTML:o.value},null,8,U),e.item.streaming?(t(),l(x,{key:0,size:`xs`,class:`q-ml-xs`})):u(``,!0)]))}}),[[`__scopeId`,`data-v-0ac5a3e4`]]),G={key:0,class:`text-caption text-grey-5`,style:{"font-style":`italic`}},K=[`innerHTML`],q={key:1,style:{"white-space":`pre-wrap`}},J=I(v({__name:`ThinkingItem`,props:{item:{}},setup(e){let n=e,r=p(()=>n.item.text.trim().slice(0,100)),i=p(()=>n.item.text.trim().length>0),a=p(()=>n.item.text.trim().length>100),s=p(()=>{let e=N.parse(n.item.text,{async:!1,breaks:!0,gfm:!0});return P.sanitize(e)});return(n,d)=>i.value?(t(),m(`div`,G,[a.value?(t(),l(A,{key:0,dense:``,"dense-toggle":``,label:r.value,"header-class":`text-grey-5 text-caption`,style:{"font-style":`italic`}},{default:o(()=>[_(`div`,{class:`q-py-xs markdown-thinking`,innerHTML:s.value},null,8,K)]),_:1},8,[`label`])):(t(),m(`span`,q,c(e.item.text),1))])):u(``,!0)}}),[[`__scopeId`,`data-v-e9fb9f90`]]);function Y(e,t){let n=e.split(`
2
+ `),r=t.split(`
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 X(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??``;return{toolName:`Edit`,filePath:e,oldString:t,newString:r,replaceAll:n.replace_all??!1,additions:r?r.split(`
4
+ `).length:0,deletions:t?t.split(`
5
+ `).length:0}}if(e===`Write`){let e=n.file_path;if(!e)return null;let t=n.content??``;return{toolName:`Write`,filePath:e,content:t,additions:t?t.split(`
6
+ `).length:0,deletions:0}}if(e===`Bash`){let e=(n.command??``).match(/^\s*rm\s+(?:-[a-zA-Z]*\s+)*(.+)/);if(e)return{toolName:`Bash:rm`,filePath:e[1].trim().replace(/["']/g,``),additions:0,deletions:1}}return null}function Z(e,t){if(!e||!t?.projectPath)return e;let n=Q(e,`${t.projectPath}/.worktrees/${t.workingBranch}`);return n===e&&(n=Q(e,t.projectPath)),n}function Q(e,t){if(!t)return e;let n=t.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);return e.replace(RegExp(`${n}/`,`g`),``).replace(RegExp(`${n}(?=\\s|$|["'\`])`,`g`),`.`)}var re={class:`tool-name`},ie=[`title`],ae={key:0,class:`tool-stat-add`},oe={key:1,class:`tool-stat-del`},se={class:`diff-sign`},ce={class:`tool-name`},le=[`title`],ue=I(v({__name:`ToolCallItem`,props:{item:{}},setup(e){let i=e,o=a(!1),g=O(),v=p(()=>X(i.item.name,i.item.input)),y=p(()=>v.value?Z(v.value.filePath,g.selectedWorkspace):``),x={Bash:`terminal`,Read:`description`,Edit:`edit`,Write:`edit_note`,MultiEdit:`edit`,Glob:`folder_open`,Grep:`manage_search`,LS:`list`,Skill:`auto_awesome`,Task:`hub`,Agent:`hub`,TodoWrite:`checklist`,TodoRead:`checklist`,ToolSearch:`search`,WebFetch:`public`,WebSearch:`travel_explore`,NotebookRead:`book`,NotebookEdit:`edit_note`,SendMessage:`send`,ExitPlanMode:`check_circle_outline`,KillShell:`stop_circle`,BashOutput:`terminal`},C=p(()=>x[i.item.name]??`build`),w=p(()=>{if(v.value)return``;let e=i.item.input,t=T(e);return t?Z(t,g.selectedWorkspace):``});function T(e){if(!e||typeof e!=`object`)return typeof e==`string`?e:``;let t=e;for(let e of[`file_path`,`path`,`command`,`pattern`,`query`,`url`,`skill`,`description`,`subject`,`prompt`]){let n=t[e];if(typeof n==`string`&&n.length>0)return n}for(let e of Object.values(t))if(typeof e==`string`&&e.length>0)return e;return``}let E=p(()=>{let e=v.value;return e?e.toolName===`Edit`&&e.oldString!==void 0&&e.newString!==void 0?Y(e.oldString,e.newString):e.toolName===`Write`&&e.content!==void 0?e.content.split(`
7
+ `).map(e=>({type:`add`,content:e})):e.toolName===`Bash:rm`?[{type:`del`,content:`File deleted`}]:null:null}),D=p(()=>{let e=i.item.result;if(!e)return``;if(typeof e.output==`string`)return e.output;try{return JSON.stringify(e.output)}catch{return String(e.output)}}),k=new Set([`Read`]),A=p(()=>!!(i.item.result&&D.value)&&(!k.has(i.item.name)||i.item.result?.isError===!0));function j(){o.value=!o.value}return n(()=>i.item.result?.isError===!0,e=>{e&&(o.value=!0)},{immediate:!0}),(n,i)=>v.value?(t(),m(`div`,{key:0,class:s([`tool-row`,{"tool-row-expanded":o.value}])},[_(`div`,{class:`tool-header`,onClick:j},[d(S,{name:C.value,size:`14px`,class:`tool-icon`},null,8,[`name`]),_(`span`,re,c(v.value.toolName===`Bash:rm`?`Bash`:v.value.toolName),1),_(`span`,{class:`tool-path`,title:v.value.filePath},c(y.value),9,ie),v.value.additions>0?(t(),m(`span`,ae,`+`+c(v.value.additions),1)):u(``,!0),v.value.deletions>0?(t(),m(`span`,oe,`-`+c(v.value.deletions),1)):u(``,!0),e.item.result?.isError?(t(),l(S,{key:2,name:`error_outline`,color:`negative`,size:`xs`,class:`q-ml-xs`})):e.item.result?(t(),l(S,{key:3,name:`check`,color:`positive`,size:`xs`,class:`q-ml-xs`})):u(``,!0),d(S,{name:o.value?`expand_less`:`expand_more`,size:`xs`,class:`q-ml-auto text-grey-6`},null,8,[`name`])]),o.value&&E.value?(t(),m(`div`,{key:0,class:`tool-diff`,onClick:i[0]||=b(()=>{},[`stop`])},[(t(!0),m(h,null,r(E.value,(e,n)=>(t(),m(`div`,{key:n,class:s([`diff-line`,{"diff-del":e.type===`del`,"diff-add":e.type===`add`,"diff-context":e.type===`context`}])},[_(`span`,se,c(e.type===`del`?`-`:e.type===`add`?`+`:` `),1),f(c(e.content),1)],2))),128))])):u(``,!0)],2)):(t(),m(`div`,{key:1,class:s([`tool-row tool-row-generic`,{"tool-row-expanded":o.value,"tool-row--toggleable":A.value}])},[_(`div`,{class:`tool-header`,onClick:i[1]||=e=>A.value&&j()},[d(S,{name:C.value,size:`14px`,class:`tool-icon`},null,8,[`name`]),_(`span`,ce,c(e.item.name),1),w.value?(t(),m(`span`,{key:0,class:`tool-arg`,title:T(e.item.input)||w.value},c(w.value),9,le)):u(``,!0),e.item.result?.isError?(t(),l(S,{key:1,name:`error_outline`,color:`negative`,size:`xs`,class:`q-ml-auto`})):e.item.result?(t(),l(S,{key:2,name:`check`,color:`positive`,size:`xs`,class:`q-ml-auto`})):u(``,!0),A.value?(t(),l(S,{key:3,name:o.value?`expand_less`:`expand_more`,size:`xs`,class:`q-ml-xs text-grey-6`},null,8,[`name`])):u(``,!0)]),o.value&&A.value?(t(),m(`div`,{key:0,class:`tool-output`,onClick:i[2]||=b(()=>{},[`stop`])},c(D.value),1)):u(``,!0)],2))}}),[[`__scopeId`,`data-v-b1ed78cb`]]),de=[`innerHTML`],fe={key:1,class:`markdown-message`},pe=[`innerHTML`],me=I(v({__name:`UserMessageItem`,props:{item:{}},setup(e){let n=e,r=p(()=>n.item.sender===`system-prompt`),i=p(()=>{let e=N.parse(n.item.content,{async:!1,breaks:!0,gfm:!0});return P.sanitize(e)});return(e,n)=>r.value?(t(),l(A,{key:0,dense:``,"dense-toggle":``,label:e.$t(`chat.systemPrompt`),"header-class":`text-grey-5 text-caption`},{default:o(()=>[_(`div`,{class:`q-py-xs markdown-user-prompt`,innerHTML:i.value},null,8,de)]),_:1},8,[`label`])):(t(),m(`div`,fe,[_(`div`,{innerHTML:i.value},null,8,pe)]))}}),[[`__scopeId`,`data-v-cb8cec0f`]]),he={class:`turn-header`},ge={key:0,class:`turn-time`},_e={class:`turn-time turn-time-updated`},ve={key:2,class:`turn-actions`},ye={class:`turn-body`},be={key:0,class:`turn-scroll-top`},xe=I(v({__name:`TurnCard`,props:{turn:{}},emits:[`scrollTo`],setup(e,{emit:n}){let i=e,v=n,{t:b}=w(),x=a(null);function T(){let e=x.value;if(!e)return;let t=e.closest(`.q-scrollarea`)?.querySelector(`.q-scrollarea__content`);if(!t){e.scrollIntoView({behavior:`smooth`,block:`start`});return}let n=e.getBoundingClientRect().top-t.getBoundingClientRect().top;v(`scrollTo`,Math.max(0,n-8))}let E=p(()=>{switch(i.turn.speaker){case`user`:return{label:b(`chat.you`),accent:`#ce93d8`,badgeClass:`turn-badge-user`};case`agent`:return{label:b(`chat.agent`),accent:`#7986cb`,badgeClass:`turn-badge-agent`};case`system-prompt`:return{label:b(`chat.systemPrompt`),accent:`#757575`,badgeClass:`turn-badge-system`};case`session`:return{label:b(`chat.session`),accent:`#616161`,badgeClass:`turn-badge-session`}}});function D(e,t=!1){if(!e)return``;let n=new Date(e);return Number.isNaN(n.getTime())?``:n.toLocaleTimeString(void 0,t?{hour:`2-digit`,minute:`2-digit`,second:`2-digit`}:{hour:`2-digit`,minute:`2-digit`})}let O=p(()=>D(i.turn.ts)),k=p(()=>{let e=i.turn.items;if(e.length===0)return null;for(let t=e.length-1;t>=0;t--){let n=e[t].ts;if(n)return n}return null}),A=p(()=>{let e=i.turn.ts,t=k.value;if(!t||!e||t===e)return``;let n=new Date(e).getTime(),r=new Date(t).getTime();return Number.isNaN(n)||Number.isNaN(r)||r<=n?``:D(t,r-n<6e4)}),j=p(()=>A.value!==``),N=p(()=>i.turn.items.filter(e=>e.type===`tool`).length);return(n,i)=>(t(),m(`div`,{ref_key:`cardEl`,ref:x,class:s([`turn-card`,{"turn-card--user":e.turn.speaker===`user`}]),style:y({"--turn-accent":E.value.accent})},[_(`div`,he,[_(`span`,{class:s([`turn-badge`,E.value.badgeClass])},c(E.value.label),3),O.value?(t(),m(`span`,ge,c(O.value),1)):u(``,!0),j.value?(t(),m(h,{key:1},[d(S,{name:`arrow_forward`,size:`10px`,color:`grey-7`,class:`turn-time-arrow`}),_(`span`,_e,[f(c(A.value)+` `,1),d(M,null,{default:o(()=>[f(c(g(b)(`chat.lastUpdatedAt`,{time:A.value})),1)]),_:1})])],64)):u(``,!0),N.value>0?(t(),m(`span`,ve,` · `+c(g(b)(`chat.nActions`,{n:N.value})),1)):u(``,!0)]),_(`div`,ye,[(t(!0),m(h,null,r(e.turn.items,(e,n)=>(t(),m(h,{key:n},[e.type===`text`?(t(),l(W,{key:0,item:e},null,8,[`item`])):e.type===`thinking`?(t(),l(J,{key:1,item:e},null,8,[`item`])):e.type===`tool`?(t(),l(ue,{key:2,item:e},null,8,[`item`])):e.type===`user`?(t(),l(me,{key:3,item:e},null,8,[`item`])):e.type===`session`?(t(),l(z,{key:4,item:e},null,8,[`item`])):u(``,!0)],64))),128))]),e.turn.items.length>4?(t(),m(`div`,be,[d(C,{flat:``,round:``,dense:``,size:`xs`,icon:`arrow_upward`,color:`grey-6`,class:`turn-scroll-top-btn`,onClick:T},{default:o(()=>[d(M,null,{default:o(()=>[f(c(g(b)(`chat.scrollToTurnTop`)),1)]),_:1})]),_:1})])):u(``,!0)],6))}}),[[`__scopeId`,`data-v-50994916`]]),Se={key:0,class:`activity-feed-switching`},Ce={key:1,class:`activity-feed-wrap`},we={key:0,class:`text-center q-py-sm text-caption text-grey-6`},Te={class:`q-pa-md`},Ee={key:1,class:`q-px-md q-pb-md`},De={class:`activity-feed-nav-cluster`},Oe=60,ke=200,$=200,Ae=400,je=200,Me=I(v({__name:`ActivityFeed`,props:{workspaceId:{}},setup(s){let g=s,v=T(),y=E(),b=O(),S=p(()=>(b.activityFeeds[g.workspaceId]??[]).filter(e=>e.type===`text`&&typeof e.content==`string`).map(e=>({content:e.content,sender:e.meta?.sender??`user`,ts:e.timestamp,sessionId:e.sessionId}))),w=p(()=>D(b.workspaces.find(e=>e.id===g.workspaceId)?.status)),M=p(()=>{let e=te(ee(v.eventsFor(g.workspaceId),v.timestampsFor(g.workspaceId),w.value),S.value);return ne(y.showVerboseSystemMessages?e:e.filter(e=>e.type!==`session`))}),N=p(()=>y.showVerboseSystemMessages?v.eventsFor(g.workspaceId).filter(e=>e.kind===`message:raw`).map(e=>e.content):[]),P=a(null),F=a(!0),I=a(!1),L=!1,R=a(!0);function z(e){F.value=e.verticalSize-e.verticalPosition-e.verticalContainerSize<=Oe,L&&e.verticalPosition<=ke&&!I.value&&v.hasMoreOlderFor(g.workspaceId)&&B()}async function B(){let t=g.workspaceId,n=v.oldestIdFor(t);if(!n)return;I.value=!0;let r=Date.now();try{let r=P.value,i=r?.getScroll().verticalSize??0,a=r?.getScroll().verticalPosition??0,o=fetch(`/api/workspaces/${t}/events?before=${encodeURIComponent(n)}&limit=200`),s=new Promise(e=>setTimeout(e,$)),[c]=await Promise.all([o,s]);if(!c.ok){v.prepend(t,[],[],{oldestId:n,hasMoreOlder:!1});return}let l=await c.json(),u=l.events??[],d=u.filter(e=>e.type===`agent:event`&&e.workspaceId===t),f=u.filter(e=>e.type===`user:message`&&e.workspaceId===t),p=d.map(e=>e.payload),m=d.map(e=>e.createdAt),h=d.map(e=>e.sessionId??null),g=u.length>0?u[0].id:n;v.prepend(t,p,m,{oldestId:g,hasMoreOlder:l.hasMore,sessionIds:h});for(let e of f){let n=e.payload;typeof n.content==`string`&&b.addActivityItem(t,{id:e.id,type:`text`,content:n.content,timestamp:e.createdAt,sessionId:e.sessionId??void 0,meta:{sender:n.sender??`user`}})}if(await e(),r){let e=r.getScroll().verticalSize-i,t=Math.max(a+e,ke+50);r.setScrollPosition(`vertical`,t,0)}}catch(e){console.error(`[ActivityFeed] failed to load older events:`,e)}finally{let e=Date.now()-r,t=Math.max(0,$-e);await new Promise(e=>setTimeout(e,t+Ae)),I.value=!1}}async function V(t=0){await e();let n=P.value;if(!n)return;let r=n.getScroll();n.setScrollPosition(`vertical`,r.verticalSize,t)}function H(e){let t=P.value;t&&t.setScrollPosition(`vertical`,Math.max(0,e),250)}let U=a([]),W=a(null);function G(){let e=M.value,t=U.value,n=[];if(t.length===e.length){for(let r=0;r<e.length;r++){if(e[r].speaker!==`user`)continue;let i=t[r]?.$el;i&&n.push(i)}if(n.length>0)return n}let r=W.value?.parentElement;if(r){let e=r.querySelectorAll(`.turn-card--user`);for(let t of e)n.push(t)}return n}function K(){let e=P.value;if(!e)return null;let t=W.value;if(!t)return null;let n=e.getScroll().verticalPosition,r=t.getBoundingClientRect().top,i=null;for(let e of G()){let t=e.getBoundingClientRect().top-r;if(t<n-40)i=t;else break}return i}async function q(){let t=P.value;if(!t)return;let n=K();if(n===null)for(let t=0;t<15&&v.hasMoreOlderFor(g.workspaceId);t++){for(;I.value;)await new Promise(e=>setTimeout(e,50));if(await B(),await e(),n=K(),n!==null)break}n!==null&&t.setScrollPosition(`vertical`,Math.max(0,n-12),250)}async function J(){L=!1,await e(),await V(0),requestAnimationFrame(()=>{requestAnimationFrame(()=>{L=!0})})}let Y=p(()=>v.eventsFor(g.workspaceId).length);async function X(){R.value=!0;let e=Date.now();await new Promise(e=>setTimeout(e,je));let t=e+5e3;for(;Y.value===0&&Date.now()<t;)await new Promise(e=>setTimeout(e,50));R.value=!1}n(R,async e=>{!e&&Y.value>0&&await J()}),i(()=>{X(),Y.value>0&&J()});let Z=!1;n(Y,async(e,t)=>{if(!Z&&e>0){Z=!0,await J();return}e>t&&F.value&&!I.value&&await V(180)}),n(()=>g.workspaceId,()=>{F.value=!0,Z=!1,L=!1,X(),Y.value>0&&J()}),n(()=>b.selectedSessionId,async()=>{F.value=!0,L=!1,await J()}),n(p(()=>S.value.filter(e=>e.sender!==`system-prompt`).length),async(e,t)=>{e>t&&(F.value=!0,await V(180))});async function Q(){F.value=!0,await V(250)}return(e,n)=>R.value?(t(),m(`div`,Se,[d(k,{size:`40px`,color:`indigo-4`})])):(t(),m(`div`,Ce,[d(j,{ref_key:`scrollRef`,ref:P,class:`activity-feed-scroll`,onScroll:z},{default:o(()=>[_(`div`,{ref_key:`contentOriginRef`,ref:W,class:`content-origin-marker`},null,512),I.value?(t(),m(`div`,we,[d(x,{size:`sm`}),f(` `+c(e.$t(`activity.loading_older`)),1)])):u(``,!0),_(`div`,Te,[(t(!0),m(h,null,r(M.value,(e,n)=>(t(),l(xe,{key:n,ref_for:!0,ref_key:`turnRefs`,ref:U,turn:e,onScrollTo:H},null,8,[`turn`]))),128))]),N.value.length?(t(),m(`div`,Ee,[d(A,{label:e.$t(`activity.raw_lines`,{n:N.value.length}),dense:``},{default:o(()=>[(t(!0),m(h,null,r(N.value,(e,n)=>(t(),m(`div`,{key:n,class:`text-caption text-grey q-pa-xs`},c(e),1))),128))]),_:1},8,[`label`])])):u(``,!0)]),_:1},512),_(`div`,De,[F.value?u(``,!0):(t(),l(C,{key:0,round:``,dense:``,unelevated:``,color:`grey-9`,"text-color":`grey-3`,icon:`arrow_downward`,size:`sm`,class:`activity-feed-nav-btn`,title:e.$t(`activity.scroll_to_bottom`),onClick:Q},null,8,[`title`])),d(C,{round:``,dense:``,unelevated:``,color:`grey-9`,"text-color":`grey-3`,icon:`arrow_upward`,size:`sm`,class:`activity-feed-nav-btn`,title:e.$t(`activity.prev_user_message`),onClick:q},null,8,[`title`])])]))}}),[[`__scopeId`,`data-v-24bebc4b`]]);export{Me as default};
@@ -0,0 +1 @@
1
+ .create-page[data-v-2d121476]{background-color:#1a1a2e;min-height:100%;padding:48px 24px}.create-inner[data-v-2d121476]{width:100%;max-width:700px}.create-title[data-v-2d121476]{font-size:24px;line-height:1.3}.create-card[data-v-2d121476]{background:#224;border:1px solid #444;overflow:hidden}.card-top-bar[data-v-2d121476]{background:#1e1e3a;min-height:36px}.card-name-wrap[data-v-2d121476]{background:#224;padding:8px 16px 4px}.card-name-wrap[data-v-2d121476] .q-field__control{height:32px;min-height:32px;padding:0}.card-name-wrap[data-v-2d121476] input{color:#e0e0e0;font-size:15px;font-weight:500}.card-name-wrap[data-v-2d121476] input::placeholder{color:#555}.card-textarea-wrap[data-v-2d121476]{background:#224}.repo-select[data-v-2d121476]{min-width:160px;max-width:260px}.repo-select[data-v-2d121476] .q-field__prepend{align-items:center;height:auto;padding-top:0}.create-textarea[data-v-2d121476]{color:#d0d0d0;width:100%;padding:12px 16px 4px}.create-textarea[data-v-2d121476] .q-field__control{padding:0}.create-textarea[data-v-2d121476] textarea{color:#d0d0d0;resize:none;min-height:100px;font-size:14px;line-height:1.6}.create-textarea[data-v-2d121476] textarea::placeholder{color:#666}.notion-toggle-btn[data-v-2d121476]{background:#333;padding:2px 10px}.notion-url-wrap[data-v-2d121476]{background:#1e1e3a;padding:8px 0 0}.notion-url-input[data-v-2d121476]{padding:0 12px}.notion-url-input[data-v-2d121476] .q-field__control{height:36px;min-height:36px;padding:0}.notion-url-input[data-v-2d121476] input{color:#d0d0d0;font-size:13px}.notion-url-input[data-v-2d121476] input::placeholder{color:#555;font-size:12px}.notion-error[data-v-2d121476],.notion-valid[data-v-2d121476]{padding-bottom:6px}.sentry-toggle-btn[data-v-2d121476]{background:#333;padding:2px 10px}.sentry-url-wrap[data-v-2d121476]{background:#1e1e3a;padding:8px 0 0}.sentry-url-input[data-v-2d121476]{padding:0 12px}.sentry-url-input[data-v-2d121476] .q-field__control{height:36px;min-height:36px;padding:0}.sentry-url-input[data-v-2d121476] input{color:#d0d0d0;font-size:13px}.sentry-url-input[data-v-2d121476] input::placeholder{color:#555;font-size:12px}.sentry-error[data-v-2d121476],.sentry-valid[data-v-2d121476]{padding-bottom:6px}.slide-enter-active[data-v-2d121476],.slide-leave-active[data-v-2d121476]{transition:all .2s;overflow:hidden}.slide-enter-from[data-v-2d121476],.slide-leave-to[data-v-2d121476]{opacity:0;max-height:0}.slide-enter-to[data-v-2d121476],.slide-leave-from[data-v-2d121476]{opacity:1;max-height:120px}.card-bottom-bar[data-v-2d121476]{background:#1e1e3a}.bottom-row[data-v-2d121476]{flex-wrap:wrap;min-height:40px}.bottom-row-agent[data-v-2d121476]{border-bottom:1px solid #ffffff0f}.bottom-row-agent+.bottom-row-git[data-v-2d121476]{background:#00000026}.skip-setup-btn[data-v-2d121476]{min-height:28px;padding:2px 10px;font-size:11px}.skip-setup-btn[data-v-2d121476] .q-btn__content{gap:4px}.skip-setup-btn[data-v-2d121476] .q-icon{font-size:14px}.bottom-row-git .bottom-select.repo-select[data-v-2d121476]{flex:280px;min-width:220px}.bottom-row-git .bottom-select.repo-select[data-v-2d121476] input{color:#bbb;padding:0 4px;font-size:11px}.bottom-row-git .bottom-select.repo-select[data-v-2d121476] input::placeholder{color:#666;font-style:italic}.bottom-row-git .bottom-select.branch-type-select[data-v-2d121476],.bottom-row-git .bottom-select.branch-select[data-v-2d121476]{flex:none}.bottom-select[data-v-2d121476]{background:#333;min-width:60px;height:28px;padding:0 6px}.bottom-select[data-v-2d121476] .q-field__control{height:28px;min-height:28px;padding:0}.bottom-select[data-v-2d121476] .q-field__native{min-height:unset;padding:0}.bottom-select-label[data-v-2d121476]{color:#bbb;gap:2px;font-size:11px}.bottom-sep[data-v-2d121476]{color:#555;padding:0 2px;font-size:12px;line-height:1}.repo-path-wrap[data-v-2d121476]{background:#333;border-radius:6px;height:28px;padding:0 8px}.repo-input[data-v-2d121476]{min-width:140px}.repo-input[data-v-2d121476] .q-field__control{height:28px;min-height:28px;padding:0}.repo-input[data-v-2d121476] input{color:#bbb;font-size:11px}.repo-input[data-v-2d121476] input::placeholder{color:#666;font-size:11px}.branch-select[data-v-2d121476]{min-width:80px}.create-btn[data-v-2d121476]{color:#fff;background:#4f46e5;min-width:220px;height:32px;padding:0 32px;font-size:13px}.create-btn[data-v-2d121476] .q-btn__content{height:32px}.create-hint[data-v-2d121476]{line-height:1.5}.fade-enter-active[data-v-2d121476],.fade-leave-active[data-v-2d121476]{transition:opacity .2s}.fade-enter-from[data-v-2d121476],.fade-leave-to[data-v-2d121476]{opacity:0}.manual-hint[data-v-2d121476]{background:#1e1e3a;line-height:1.4}.manual-expansion[data-v-2d121476]{background:#1e1e3a;border:1px solid #333;border-radius:4px;margin-top:6px;overflow:hidden}.manual-expansion[data-v-2d121476] .manual-expansion-header{min-height:32px;padding:4px 10px;font-size:12px}.manual-expansion[data-v-2d121476] .q-expansion-item__content,.manual-section-body[data-v-2d121476]{background:#1a1a2e}.manual-input[data-v-2d121476] .q-field__control{height:26px;min-height:26px;padding:0}.manual-input[data-v-2d121476] input{color:#e0e0e0;font-size:12px}.manual-input[data-v-2d121476] input::placeholder{color:#555}.manual-item[data-v-2d121476]{border-top:1px solid #ffffff0a}.manual-item[data-v-2d121476]:first-child{border-top:none}
@@ -1,2 +1,2 @@
1
- import{F as e,H as t,L as n,M as r,N as i,Q as a,T as ee,U as o,bt as s,d as c,f as l,g as u,h as d,l as f,p,r as m,rt as te,u as h,v as ne,vt as re,x as ie}from"./runtime-core.esm-bundler-C3IgBgY5.js";import{I as g,L as _,M as ae,t as v}from"./QIcon-B0-pH3Qs.js";import{t as y}from"./QSeparator-DNSiXYrN.js";import{t as b}from"./QBtn-CyzfM9-_.js";import{n as oe}from"./vue-i18n-eUDnMrPl.js";import{g as se,i as x,m as ce,v as le,x as ue}from"./index-B0Jj-w-E.js";import{n as S,t as C}from"./QItemSection-BzWLL-V-.js";import{t as w}from"./QItemLabel-Czw5g0px.js";import{t as de}from"./QExpansionItem-HLBjHx-0.js";import{t as T}from"./QTooltip-DbEBexRN.js";import{t as fe}from"./_plugin-vue_export-helper-Cj6tcsj6.js";import{t as pe}from"./QSpace-0zdF1m5x.js";import{t as me}from"./use-quasar-BBrzedjR.js";import{n as E,t as he}from"./models-GweeyU2r.js";import{t as ge}from"./QPage-BTzNQlb1.js";var _e={class:`create-inner`},ve={class:`create-title text-center text-weight-bold q-mb-lg text-grey-3`},ye={class:`create-card rounded-borders`},be={class:`card-top-bar row items-center q-px-md q-py-xs`},xe={class:`model-badge cursor-default row items-center q-gutter-xs`},Se={class:`text-indigo-3 text-weight-medium text-caption`},Ce={key:0,class:`notion-url-wrap`},we={key:0,class:`notion-error text-caption q-px-md q-pb-xs text-red-5`},Te={key:1,class:`notion-valid text-caption q-px-md q-pb-xs text-green-4`},Ee={key:0,class:`sentry-url-wrap`},De={key:0,class:`sentry-error text-caption q-px-md q-pb-xs text-red-5`},Oe={key:1,class:`sentry-valid text-caption q-px-md q-pb-xs text-red-4`},ke={class:`card-name-wrap`},Ae={class:`card-textarea-wrap`},je={class:`manual-hint q-px-md q-py-sm text-caption text-grey-6`},Me={class:`q-pa-sm manual-section-body`},Ne={class:`row items-center q-gutter-sm q-mb-sm`},Pe={class:`col text-caption text-grey-4`},Fe={class:`q-pa-sm manual-section-body`},Ie={class:`row items-center q-gutter-sm q-mb-sm`},Le={class:`col text-caption text-grey-4`},Re={class:`card-bottom-bar`},ze={class:`bottom-row bottom-row-agent row items-center q-gutter-xs q-px-sm q-py-xs`},Be={class:`bottom-select-label row items-center no-wrap`},Ve={class:`bottom-select-label row items-center no-wrap`},He={class:`bottom-select-label row items-center no-wrap`},Ue={class:`bottom-select-label row items-center no-wrap`},We={class:`bottom-row bottom-row-git row items-center q-gutter-xs q-px-sm q-py-xs`},Ge={class:`bottom-select-label row items-center no-wrap`},Ke={class:`bottom-select-label row items-center no-wrap`},qe={class:`row justify-center q-px-sm q-py-sm`},Je={class:`create-hint text-center text-body2 q-mt-md text-grey-8`},Ye=fe(ne({__name:`CreatePage`,setup(ne){let fe=ce(),Ye=me(),Xe=le(),D=ue(),{t:O}=oe(),Ze=a([]),k=a(``),A=a(``),j=a(``),M=a(!1),N=a(`claude-opus-4-7`),P=a(`auto`),F=a(``),I=a(null),L=a(`feature`),R=a(!1),Qe=a([]),z=a(`claude-code`),$e=f(()=>Qe.value.find(e=>e.id===z.value)),et=f(()=>Qe.value.map(e=>({value:e.id,label:e.displayName}))),tt=f(()=>($e.value?.capabilities.permissionModes??[`auto-accept`,`plan`]).map(e=>({value:e,label:O(`engine.permission.${e}`)}))),nt=[{label:`feature/`,value:`feature`},{label:`fix/`,value:`fix`},{label:`hotfix/`,value:`hotfix`},{label:`chore/`,value:`chore`},{label:`refactor/`,value:`refactor`},{label:`docs/`,value:`docs`},{label:`test/`,value:`test`}],B=a(D.global.defaultPermissionMode||`plan`),V=a([]),H=a(!1),U=a(!1),rt=f(()=>he.map(e=>({label:O(e.i18nLabelKey),value:e.value,description:O(e.i18nDescriptionKey)})));function W(e){let t=e.indexOf(`:`);return t>=0?e.slice(t+1).trim():e}let it=f(()=>[{label:W(O(`reasoning.auto`)),value:`auto`,description:O(`reasoning.autoDescription`)},{label:W(O(`reasoning.low`)),value:`low`,description:O(`reasoning.lowDescription`)},{label:W(O(`reasoning.medium`)),value:`medium`,description:O(`reasoning.mediumDescription`)},{label:W(O(`reasoning.high`)),value:`high`,description:O(`reasoning.highDescription`)},{label:W(O(`reasoning.xhigh`)),value:`xhigh`,description:O(`reasoning.xhighDescription`)},{label:W(O(`reasoning.max`)),value:`max`,description:O(`reasoning.maxDescription`)}]),G=f(()=>j.value.trim().startsWith(`https://www.notion.so/`)),K=a([]),q=a([]),J=a(``),Y=a(``),at=f(()=>!M.value||!G.value);function ot(){let e=J.value.trim();e&&(K.value.push(e),J.value=``)}function st(e){K.value.splice(e,1)}function ct(){let e=Y.value.trim();e&&(q.value.push(e),Y.value=``)}function lt(e){q.value.splice(e,1)}function ut(){M.value=!M.value,M.value||(j.value=``)}let X=a(!1),Z=a(``),Q=f(()=>/\/issues\/\d+/.test(Z.value.trim()));function dt(){X.value=!X.value,X.value||(Z.value=``)}async function ft(e){if(!e.trim()){V.value=[],I.value=null;return}H.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&&!I.value&&(I.value=V.value[0]??null)}catch{V.value=[],I.value=null}finally{H.value=!1}}function pt(e){let t=D.getProjectByPath(e);t&&(t.defaultSourceBranch&&(I.value=t.defaultSourceBranch),t.defaultModel?N.value=t.defaultModel:D.global.defaultModel&&(N.value=D.global.defaultModel))}let $=null;t(F,e=>{$&&clearTimeout($),$=setTimeout(()=>{I.value=null,ft(e),pt(e)},500)});function mt(e,t){t(()=>{Ze.value=D.projectPaths.filter(t=>t.toLowerCase().includes(e.toLowerCase()))})}r(async()=>{D.fetchSettings();try{let e=await fetch(`/api/engines`);e.ok&&(Qe.value=await e.json())}catch{}}),i(()=>{$&&clearTimeout($)});function ht(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 gt(){return k.value.trim()?k.value.trim().substring(0,80):!M.value&&A.value.trim()&&(A.value.trim().split(`
2
- `)[0]??``).substring(0,80)||`workspace`}function _t(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()}`}function vt(){return M.value&&!G.value?O(`createPage.validationNotionUrl`):X.value&&!Q.value?O(`createPage.sentryValidation`):!M.value&&!X.value&&!A.value.trim()?O(`createPage.validationDescription`):!M.value&&!X.value&&(!gt()||gt()===`workspace`)&&!k.value.trim()&&!A.value.trim()?O(`createPage.validationName`):F.value.trim()?I.value?null:O(`createPage.validationBranch`):O(`createPage.validationPath`)}async function yt(){let e=vt();if(e){Ye.notify({type:`negative`,message:e,position:`top`});return}U.value=!0;try{let e=gt(),t;t=M.value&&G.value?_t(j.value.trim()):e===`workspace`?`task-${Date.now()}`:ht(e);let n=`${L.value}/${t}`,r={name:e,projectPath:F.value.trim(),sourceBranch:I.value,workingBranch:n,engine:z.value,model:N.value,reasoningEffort:P.value,...M.value&&G.value?{notionUrl:j.value.trim()}:{},...X.value&&Q.value?{sentryUrl:Z.value.trim()}:{},...at.value&&K.value.length>0?{tasks:K.value}:{},...at.value&&q.value.length>0?{acceptanceCriteria:q.value}:{},...R.value?{skipSetupScript:!0}:{},...A.value.trim()?{description:A.value.trim()}:{},permissionMode:B.value},i=await Xe.createWorkspace(r);se().subscribe(i.id),Xe.selectWorkspace(i.id),fe.push({name:`workspace`,params:{id:i.id}})}catch{Ye.notify({type:`negative`,message:O(`createPage.errorCreating`),position:`top`})}finally{U.value=!1}}return(t,r)=>(e(),c(ge,{class:`create-page flex flex-center column`},{default:o(()=>[h(`div`,_e,[h(`div`,ve,s(t.$t(`createPage.title`)),1),h(`div`,ye,[h(`div`,be,[h(`span`,xe,[u(v,{name:`auto_awesome`,size:`14px`,color:`indigo-4`}),h(`span`,Se,s($e.value?.displayName??t.$t(`createPage.claudeCode`)),1)]),u(pe),u(b,{flat:``,dense:``,"no-caps":``,size:`sm`,color:M.value?`green-4`:`grey-5`,class:`notion-toggle-btn text-caption rounded-borders`,onClick:ut},{default:o(()=>[u(v,{name:`description`,size:`14px`,class:`q-mr-xs`}),d(` `+s(M.value?t.$t(`createPage.notionEnabled`):t.$t(`createPage.importNotion`)),1)]),_:1},8,[`color`]),u(b,{flat:``,dense:``,"no-caps":``,size:`sm`,color:X.value?`red-4`:`grey-5`,class:`sentry-toggle-btn text-caption rounded-borders q-ml-sm`,onClick:dt},{default:o(()=>[u(v,{name:`bug_report`,size:`14px`,class:`q-mr-xs`}),d(` `+s(X.value?t.$t(`createPage.sentryEnabled`):t.$t(`createPage.importSentry`)),1)]),_:1},8,[`color`])]),u(y,{color:`grey-9`}),u(ae,{name:`slide`},{default:o(()=>[M.value?(e(),p(`div`,Ce,[u(x,{modelValue:j.value,"onUpdate:modelValue":r[0]||=e=>j.value=e,borderless:``,dense:``,placeholder:t.$t(`createPage.notionPlaceholder`),class:`notion-url-input`,"input-class":`notion-url-input-inner`},{prepend:o(()=>[u(v,{name:`link`,size:`16px`,color:G.value?`green-4`:`grey-6`},null,8,[`color`])]),_:1},8,[`modelValue`,`placeholder`]),j.value.trim()&&!G.value?(e(),p(`div`,we,s(t.$t(`createPage.notionValidation`)),1)):l(``,!0),G.value?(e(),p(`div`,Te,s(t.$t(`createPage.notionAutoExtract`)),1)):l(``,!0)])):l(``,!0)]),_:1}),M.value?(e(),c(y,{key:0,color:`grey-9`})):l(``,!0),u(ae,{name:`slide`},{default:o(()=>[X.value?(e(),p(`div`,Ee,[u(x,{modelValue:Z.value,"onUpdate:modelValue":r[1]||=e=>Z.value=e,borderless:``,dense:``,placeholder:t.$t(`createPage.sentryPlaceholder`),class:`sentry-url-input`,"input-class":`sentry-url-input-inner`},{prepend:o(()=>[u(v,{name:`link`,size:`16px`,color:Q.value?`red-4`:`grey-6`},null,8,[`color`])]),_:1},8,[`modelValue`,`placeholder`]),Z.value.trim()&&!Q.value?(e(),p(`div`,De,s(t.$t(`createPage.sentryValidation`)),1)):l(``,!0),Q.value?(e(),p(`div`,Oe,s(t.$t(`createPage.sentryAutoExtract`)),1)):l(``,!0)])):l(``,!0)]),_:1}),X.value?(e(),c(y,{key:1,color:`grey-9`})):l(``,!0),h(`div`,ke,[u(x,{modelValue:k.value,"onUpdate:modelValue":r[2]||=e=>k.value=e,borderless:``,dense:``,placeholder:M.value&&G.value?t.$t(`createPage.workspaceName`):t.$t(`createPage.workspaceNamePlaceholder`),class:`name-input`,"input-class":`name-input-inner`},null,8,[`modelValue`,`placeholder`])]),u(y,{color:`grey-9`}),h(`div`,Ae,[u(x,{modelValue:A.value,"onUpdate:modelValue":r[3]||=e=>A.value=e,type:`textarea`,borderless:``,autogrow:``,rows:3,placeholder:M.value?t.$t(`createPage.instructions`):t.$t(`createPage.instructionsPlaceholder`),class:`create-textarea`,"input-class":`create-textarea-input`,onKeydown:[g(_(yt,[`ctrl`]),[`enter`]),g(_(yt,[`meta`]),[`enter`])]},null,8,[`modelValue`,`placeholder`,`onKeydown`])]),u(y,{color:`grey-9`}),at.value?(e(),p(m,{key:2},[h(`div`,je,s(t.$t(`createPage.manualHint`)),1),u(de,{dark:``,dense:``,label:t.$t(`createPage.tasks`,{count:K.value.length}),"header-class":`text-grey-4 manual-expansion-header`,class:`manual-expansion q-mx-sm`},{default:o(()=>[h(`div`,Me,[h(`div`,Ne,[u(x,{modelValue:J.value,"onUpdate:modelValue":r[4]||=e=>J.value=e,dark:``,dense:``,borderless:``,placeholder:t.$t(`createPage.addTask`),class:`col manual-input`,"input-class":`manual-input-inner`,onKeydown:g(_(ot,[`prevent`]),[`enter`])},null,8,[`modelValue`,`placeholder`,`onKeydown`]),u(b,{flat:``,dense:``,round:``,icon:`add`,color:`indigo-4`,disable:!J.value.trim(),onClick:ot},{default:o(()=>[u(T,null,{default:o(()=>[d(s(t.$t(`tooltip.addTask`)),1)]),_:1})]),_:1},8,[`disable`])]),(e(!0),p(m,null,n(K.value,(n,r)=>(e(),p(`div`,{key:`task-${r}`,class:`row items-center q-py-xs manual-item`},[h(`span`,Pe,s(n),1),u(b,{flat:``,dense:``,round:``,icon:`close`,size:`xs`,color:`grey-6`,onClick:e=>st(r)},{default:o(()=>[u(T,null,{default:o(()=>[d(s(t.$t(`tooltip.removeTask`)),1)]),_:1})]),_:1},8,[`onClick`])]))),128))])]),_:1},8,[`label`]),u(de,{dark:``,dense:``,label:t.$t(`createPage.acceptanceCriteria`,{count:q.value.length}),"header-class":`text-grey-4 manual-expansion-header`,class:`manual-expansion q-mx-sm q-mb-sm`},{default:o(()=>[h(`div`,Fe,[h(`div`,Ie,[u(x,{modelValue:Y.value,"onUpdate:modelValue":r[5]||=e=>Y.value=e,dark:``,dense:``,borderless:``,placeholder:t.$t(`createPage.addCriterion`),class:`col manual-input`,"input-class":`manual-input-inner`,onKeydown:g(_(ct,[`prevent`]),[`enter`])},null,8,[`modelValue`,`placeholder`,`onKeydown`]),u(b,{flat:``,dense:``,round:``,icon:`add`,color:`indigo-4`,disable:!Y.value.trim(),onClick:ct},{default:o(()=>[u(T,null,{default:o(()=>[d(s(t.$t(`tooltip.addCriterion`)),1)]),_:1})]),_:1},8,[`disable`])]),(e(!0),p(m,null,n(q.value,(n,r)=>(e(),p(`div`,{key:`crit-${r}`,class:`row items-center q-py-xs manual-item`},[h(`span`,Le,s(n),1),u(b,{flat:``,dense:``,round:``,icon:`close`,size:`xs`,color:`grey-6`,onClick:e=>lt(r)},{default:o(()=>[u(T,null,{default:o(()=>[d(s(t.$t(`tooltip.removeCriterion`)),1)]),_:1})]),_:1},8,[`onClick`])]))),128))])]),_:1},8,[`label`]),u(y,{color:`grey-9`})],64)):l(``,!0),h(`div`,Re,[h(`div`,ze,[et.value.length>0?(e(),c(E,{key:0,modelValue:z.value,"onUpdate:modelValue":r[6]||=e=>z.value=e,options:et.value,dense:``,borderless:``,class:`bottom-select rounded-borders`,"hide-dropdown-icon":``,"emit-value":``,"map-options":``,"option-value":`value`,"option-label":`label`},{selected:o(()=>[h(`span`,Be,[u(v,{name:`hub`,size:`12px`,color:`grey-5`,class:`q-mr-xs`}),d(` `+s(et.value.find(e=>e.value===z.value)?.label??z.value)+` `,1),u(v,{name:`expand_more`,size:`12px`,color:`grey-5`})])]),default:o(()=>[u(T,null,{default:o(()=>[d(s(t.$t(`engine.select`)),1)]),_:1})]),_:1},8,[`modelValue`,`options`])):l(``,!0),u(E,{modelValue:N.value,"onUpdate:modelValue":r[7]||=e=>N.value=e,options:rt.value,dense:``,borderless:``,class:`bottom-select rounded-borders model-select`,"hide-dropdown-icon":``,"emit-value":``,"map-options":``,"option-value":`value`,"option-label":`label`},{selected:o(()=>[h(`span`,Ve,[d(s(rt.value.find(e=>e.value===N.value)?.label??N.value)+` `,1),u(v,{name:`expand_more`,size:`12px`,color:`grey-5`})])]),option:o(({opt:e,itemProps:t})=>[u(S,ee(t,{class:`model-option`}),{default:o(()=>[u(C,null,{default:o(()=>[u(w,{class:`text-white`},{default:o(()=>[d(s(e.label),1)]),_:2},1024),u(w,{caption:``,class:`text-grey-5`},{default:o(()=>[d(s(e.description),1)]),_:2},1024)]),_:2},1024)]),_:2},1040)]),_:1},8,[`modelValue`,`options`]),u(E,{modelValue:P.value,"onUpdate:modelValue":r[8]||=e=>P.value=e,options:it.value,dense:``,borderless:``,class:`bottom-select rounded-borders`,"hide-dropdown-icon":``,"emit-value":``,"map-options":``,"option-value":`value`,"option-label":`label`},{selected:o(()=>[h(`span`,He,[u(v,{name:`psychology`,size:`12px`,color:`grey-5`,class:`q-mr-xs`}),d(` `+s(it.value.find(e=>e.value===P.value)?.label??P.value)+` `,1),u(v,{name:`expand_more`,size:`12px`,color:`grey-5`})])]),option:o(({opt:e,itemProps:t})=>[u(S,re(ie(t)),{default:o(()=>[u(C,null,{default:o(()=>[u(w,{class:`text-white`},{default:o(()=>[d(s(e.label),1)]),_:2},1024),u(w,{caption:``,class:`text-grey-5`},{default:o(()=>[d(s(e.description),1)]),_:2},1024)]),_:2},1024)]),_:2},1040)]),_:1},8,[`modelValue`,`options`]),u(E,{modelValue:B.value,"onUpdate:modelValue":r[9]||=e=>B.value=e,options:tt.value,dense:``,borderless:``,class:`bottom-select rounded-borders`,"hide-dropdown-icon":``,"emit-value":``,"map-options":``,"option-value":`value`,"option-label":`label`},{selected:o(()=>[h(`span`,Ue,[u(v,{name:B.value===`plan`?`visibility`:`flash_on`,size:`12px`,color:`amber-6`,class:`q-mr-xs`},null,8,[`name`]),d(` `+s(tt.value.find(e=>e.value===B.value)?.label??B.value)+` `,1),u(v,{name:`expand_more`,size:`12px`,color:`grey-5`})])]),default:o(()=>[u(T,null,{default:o(()=>[d(s(t.$t(`engine.permission`)),1)]),_:1})]),_:1},8,[`modelValue`,`options`]),u(pe),u(b,{flat:``,dense:``,size:`sm`,"no-caps":``,icon:R.value?`play_disabled`:`play_circle`,color:R.value?`orange-4`:`grey-5`,label:t.$t(`createPage.skipSetupScript`),class:`skip-setup-btn`,onClick:r[10]||=e=>R.value=!R.value},{default:o(()=>[u(T,null,{default:o(()=>[d(s(t.$t(`createPage.skipSetupScript`)),1)]),_:1})]),_:1},8,[`icon`,`color`,`label`])]),h(`div`,We,[u(E,{modelValue:F.value,"onUpdate:modelValue":r[11]||=e=>F.value=e,options:Ze.value,dense:``,borderless:``,"use-input":``,"fill-input":``,"hide-selected":``,"input-debounce":`0`,"new-value-mode":`add`,class:`bottom-select rounded-borders repo-select`,"hide-dropdown-icon":``,"input-class":F.value?``:`repo-input-empty`,placeholder:t.$t(`createPage.projectPath`),behavior:te(D).projectPaths.length>0?`menu`:`dialog`,onFilter:mt,onInputValue:r[12]||=e=>{F.value=e}},{prepend:o(()=>[u(v,{name:`folder`,size:`14px`,color:`grey-5`})]),"no-option":o(()=>[u(S,null,{default:o(()=>[u(C,{class:`text-grey-6 text-caption`},{default:o(()=>[d(s(t.$t(`createPage.enterPath`)),1)]),_:1})]),_:1})]),_:1},8,[`modelValue`,`options`,`input-class`,`placeholder`,`behavior`]),u(E,{modelValue:L.value,"onUpdate:modelValue":r[13]||=e=>L.value=e,options:nt,"emit-value":``,"map-options":``,dense:``,borderless:``,class:`bottom-select rounded-borders branch-type-select`,"hide-dropdown-icon":``},{selected:o(()=>[h(`span`,Ge,[u(v,{name:`account_tree`,size:`12px`,color:`grey-5`,class:`q-mr-xs`}),d(` `+s(L.value)+`/ `,1),u(v,{name:`expand_more`,size:`12px`,color:`grey-5`})])]),default:o(()=>[u(T,null,{default:o(()=>[d(s(t.$t(`createPage.branchType`)),1)]),_:1})]),_:1},8,[`modelValue`]),u(E,{modelValue:I.value,"onUpdate:modelValue":r[14]||=e=>I.value=e,options:V.value,dense:``,borderless:``,class:`bottom-select rounded-borders branch-select`,"hide-dropdown-icon":``,loading:H.value,disable:!F.value.trim()||H.value},{selected:o(()=>[h(`span`,Ke,[u(v,{name:`call_split`,size:`12px`,color:`grey-5`,class:`q-mr-xs`}),d(` `+s(I.value??t.$t(`createPage.branch`))+` `,1),u(v,{name:`expand_more`,size:`12px`,color:`grey-5`})])]),"no-option":o(()=>[u(S,null,{default:o(()=>[u(C,{class:`text-grey-6 text-caption`},{default:o(()=>[d(s(F.value.trim()?t.$t(`createPage.noBranches`):t.$t(`createPage.enterPath`)),1)]),_:1})]),_:1})]),_:1},8,[`modelValue`,`options`,`loading`,`disable`])])]),h(`div`,qe,[u(b,{label:t.$t(`createPage.create`),"no-caps":``,unelevated:``,class:`create-btn text-weight-bold rounded-borders`,loading:U.value,onClick:yt},null,8,[`label`,`loading`])])]),h(`div`,Je,s(M.value?t.$t(`createPage.notionExtractHint`):t.$t(`createPage.notionImportHint`)),1)])]),_:1}))}}),[[`__scopeId`,`data-v-4f4da343`]]);export{Ye as default};
1
+ import{F as e,H as t,L as n,M as r,N as i,Q as a,T as ee,U as o,bt as s,d as c,f as l,g as u,h as d,l as f,p,r as m,rt as te,u as h,v as ne,vt as re,x as ie}from"./runtime-core.esm-bundler-C3IgBgY5.js";import{I as g,L as _,M as ae,t as v}from"./QIcon-B0-pH3Qs.js";import{t as y}from"./QSeparator-DNSiXYrN.js";import{t as b}from"./QBtn-CyzfM9-_.js";import{n as oe}from"./vue-i18n-eUDnMrPl.js";import{S as se,g as ce,i as x,m as le,v as ue}from"./index-C-IVb0lG.js";import{n as S,t as C}from"./QItemSection-BzWLL-V-.js";import{t as w}from"./QItemLabel-Czw5g0px.js";import{t as de}from"./QExpansionItem-HLBjHx-0.js";import{t as T}from"./QTooltip-DbEBexRN.js";import{t as fe}from"./_plugin-vue_export-helper-Cj6tcsj6.js";import{t as pe}from"./QSpace-0zdF1m5x.js";import{t as me}from"./use-quasar-BBrzedjR.js";import{n as E,t as he}from"./models-CBrNFRtB.js";import{t as ge}from"./QPage-BTzNQlb1.js";var _e={class:`create-inner`},ve={class:`create-title text-center text-weight-bold q-mb-lg text-grey-3`},ye={class:`create-card rounded-borders`},be={class:`card-top-bar row items-center q-px-md q-py-xs`},xe={class:`model-badge cursor-default row items-center q-gutter-xs`},Se={class:`text-indigo-3 text-weight-medium text-caption`},Ce={key:0,class:`notion-url-wrap`},we={key:0,class:`notion-error text-caption q-px-md q-pb-xs text-red-5`},Te={key:1,class:`notion-valid text-caption q-px-md q-pb-xs text-green-4`},Ee={key:0,class:`sentry-url-wrap`},De={key:0,class:`sentry-error text-caption q-px-md q-pb-xs text-red-5`},Oe={key:1,class:`sentry-valid text-caption q-px-md q-pb-xs text-red-4`},ke={class:`card-name-wrap`},Ae={class:`card-textarea-wrap`},je={class:`manual-hint q-px-md q-py-sm text-caption text-grey-6`},Me={class:`q-pa-sm manual-section-body`},Ne={class:`row items-center q-gutter-sm q-mb-sm`},Pe={class:`col text-caption text-grey-4`},Fe={class:`q-pa-sm manual-section-body`},Ie={class:`row items-center q-gutter-sm q-mb-sm`},Le={class:`col text-caption text-grey-4`},Re={class:`card-bottom-bar`},ze={class:`bottom-row bottom-row-agent row items-center q-gutter-xs q-px-sm q-py-xs`},Be={class:`bottom-select-label row items-center no-wrap`},Ve={class:`bottom-select-label row items-center no-wrap`},He={class:`bottom-select-label row items-center no-wrap`},Ue={class:`bottom-select-label row items-center no-wrap`},We={class:`bottom-row bottom-row-git row items-center q-gutter-xs q-px-sm q-py-xs`},Ge={class:`bottom-select-label row items-center no-wrap`},Ke={class:`bottom-select-label row items-center no-wrap`},qe={class:`row justify-center q-px-sm q-py-sm`},Je={class:`create-hint text-center text-body2 q-mt-md text-grey-8`},Ye=fe(ne({__name:`CreatePage`,setup(ne){let fe=le(),Ye=me(),Xe=ue(),D=se(),{t:O}=oe(),Ze=a([]),k=a(``),A=a(``),j=a(``),M=a(!1),N=a(`claude-opus-4-7`),P=a(`auto`),F=a(``),I=a(null),L=a(`feature`),R=a(!1),Qe=a([]),z=a(`claude-code`),$e=f(()=>Qe.value.find(e=>e.id===z.value)),et=f(()=>Qe.value.map(e=>({value:e.id,label:e.displayName}))),tt=f(()=>($e.value?.capabilities.permissionModes??[`auto-accept`,`plan`]).map(e=>({value:e,label:O(`engine.permission.${e}`)}))),nt=[{label:`feature/`,value:`feature`},{label:`fix/`,value:`fix`},{label:`hotfix/`,value:`hotfix`},{label:`chore/`,value:`chore`},{label:`refactor/`,value:`refactor`},{label:`docs/`,value:`docs`},{label:`test/`,value:`test`}],B=a(D.global.defaultPermissionMode||`plan`),V=a([]),H=a(!1),U=a(!1),rt=f(()=>he.map(e=>({label:O(e.i18nLabelKey),value:e.value,description:O(e.i18nDescriptionKey)})));function W(e){let t=e.indexOf(`:`);return t>=0?e.slice(t+1).trim():e}let it=f(()=>[{label:W(O(`reasoning.auto`)),value:`auto`,description:O(`reasoning.autoDescription`)},{label:W(O(`reasoning.low`)),value:`low`,description:O(`reasoning.lowDescription`)},{label:W(O(`reasoning.medium`)),value:`medium`,description:O(`reasoning.mediumDescription`)},{label:W(O(`reasoning.high`)),value:`high`,description:O(`reasoning.highDescription`)},{label:W(O(`reasoning.xhigh`)),value:`xhigh`,description:O(`reasoning.xhighDescription`)},{label:W(O(`reasoning.max`)),value:`max`,description:O(`reasoning.maxDescription`)}]),G=f(()=>j.value.trim().startsWith(`https://www.notion.so/`)),K=a([]),q=a([]),J=a(``),Y=a(``),at=f(()=>!M.value||!G.value);function ot(){let e=J.value.trim();e&&(K.value.push(e),J.value=``)}function st(e){K.value.splice(e,1)}function ct(){let e=Y.value.trim();e&&(q.value.push(e),Y.value=``)}function lt(e){q.value.splice(e,1)}function ut(){M.value=!M.value,M.value||(j.value=``)}let X=a(!1),Z=a(``),Q=f(()=>/\/issues\/\d+/.test(Z.value.trim()));function dt(){X.value=!X.value,X.value||(Z.value=``)}async function ft(e){if(!e.trim()){V.value=[],I.value=null;return}H.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&&!I.value&&(I.value=V.value[0]??null)}catch{V.value=[],I.value=null}finally{H.value=!1}}function pt(e){let t=D.getProjectByPath(e);t&&(t.defaultSourceBranch&&(I.value=t.defaultSourceBranch),t.defaultModel?N.value=t.defaultModel:D.global.defaultModel&&(N.value=D.global.defaultModel))}let $=null;t(F,e=>{$&&clearTimeout($),$=setTimeout(()=>{I.value=null,ft(e),pt(e)},500)});function mt(e,t){t(()=>{Ze.value=D.projectPaths.filter(t=>t.toLowerCase().includes(e.toLowerCase()))})}r(async()=>{D.fetchSettings();try{let e=await fetch(`/api/engines`);e.ok&&(Qe.value=await e.json())}catch{}}),i(()=>{$&&clearTimeout($)});function ht(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 gt(){return k.value.trim()?k.value.trim().substring(0,80):!M.value&&!X.value&&A.value.trim()&&(A.value.trim().split(`
2
+ `)[0]??``).substring(0,80)||`workspace`}function _t(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()}`}function vt(){return M.value&&!G.value?O(`createPage.validationNotionUrl`):X.value&&!Q.value?O(`createPage.sentryValidation`):!M.value&&!X.value&&!A.value.trim()?O(`createPage.validationDescription`):!M.value&&!X.value&&(!gt()||gt()===`workspace`)&&!k.value.trim()&&!A.value.trim()?O(`createPage.validationName`):F.value.trim()?I.value?null:O(`createPage.validationBranch`):O(`createPage.validationPath`)}async function yt(){let e=vt();if(e){Ye.notify({type:`negative`,message:e,position:`top`});return}U.value=!0;try{let e=gt(),t;t=M.value&&G.value?_t(j.value.trim()):e===`workspace`?`task-${Date.now()}`:ht(e);let n=`${L.value}/${t}`,r={name:e,projectPath:F.value.trim(),sourceBranch:I.value,workingBranch:n,engine:z.value,model:N.value,reasoningEffort:P.value,...M.value&&G.value?{notionUrl:j.value.trim()}:{},...X.value&&Q.value?{sentryUrl:Z.value.trim()}:{},...at.value&&K.value.length>0?{tasks:K.value}:{},...at.value&&q.value.length>0?{acceptanceCriteria:q.value}:{},...R.value?{skipSetupScript:!0}:{},...A.value.trim()?{description:A.value.trim()}:{},permissionMode:B.value},i=await Xe.createWorkspace(r);ce().subscribe(i.id),Xe.selectWorkspace(i.id),fe.push({name:`workspace`,params:{id:i.id}})}catch{Ye.notify({type:`negative`,message:O(`createPage.errorCreating`),position:`top`})}finally{U.value=!1}}return(t,r)=>(e(),c(ge,{class:`create-page flex flex-center column`},{default:o(()=>[h(`div`,_e,[h(`div`,ve,s(t.$t(`createPage.title`)),1),h(`div`,ye,[h(`div`,be,[h(`span`,xe,[u(v,{name:`auto_awesome`,size:`14px`,color:`indigo-4`}),h(`span`,Se,s($e.value?.displayName??t.$t(`createPage.claudeCode`)),1)]),u(pe),u(b,{flat:``,dense:``,"no-caps":``,size:`sm`,color:M.value?`green-4`:`grey-5`,class:`notion-toggle-btn text-caption rounded-borders`,onClick:ut},{default:o(()=>[u(v,{name:`description`,size:`14px`,class:`q-mr-xs`}),d(` `+s(M.value?t.$t(`createPage.notionEnabled`):t.$t(`createPage.importNotion`)),1)]),_:1},8,[`color`]),u(b,{flat:``,dense:``,"no-caps":``,size:`sm`,color:X.value?`red-4`:`grey-5`,class:`sentry-toggle-btn text-caption rounded-borders q-ml-sm`,onClick:dt},{default:o(()=>[u(v,{name:`bug_report`,size:`14px`,class:`q-mr-xs`}),d(` `+s(X.value?t.$t(`createPage.sentryEnabled`):t.$t(`createPage.importSentry`)),1)]),_:1},8,[`color`])]),u(y,{color:`grey-9`}),u(ae,{name:`slide`},{default:o(()=>[M.value?(e(),p(`div`,Ce,[u(x,{modelValue:j.value,"onUpdate:modelValue":r[0]||=e=>j.value=e,borderless:``,dense:``,placeholder:t.$t(`createPage.notionPlaceholder`),class:`notion-url-input`,"input-class":`notion-url-input-inner`},{prepend:o(()=>[u(v,{name:`link`,size:`16px`,color:G.value?`green-4`:`grey-6`},null,8,[`color`])]),_:1},8,[`modelValue`,`placeholder`]),j.value.trim()&&!G.value?(e(),p(`div`,we,s(t.$t(`createPage.notionValidation`)),1)):l(``,!0),G.value?(e(),p(`div`,Te,s(t.$t(`createPage.notionAutoExtract`)),1)):l(``,!0)])):l(``,!0)]),_:1}),M.value?(e(),c(y,{key:0,color:`grey-9`})):l(``,!0),u(ae,{name:`slide`},{default:o(()=>[X.value?(e(),p(`div`,Ee,[u(x,{modelValue:Z.value,"onUpdate:modelValue":r[1]||=e=>Z.value=e,borderless:``,dense:``,placeholder:t.$t(`createPage.sentryPlaceholder`),class:`sentry-url-input`,"input-class":`sentry-url-input-inner`},{prepend:o(()=>[u(v,{name:`link`,size:`16px`,color:Q.value?`red-4`:`grey-6`},null,8,[`color`])]),_:1},8,[`modelValue`,`placeholder`]),Z.value.trim()&&!Q.value?(e(),p(`div`,De,s(t.$t(`createPage.sentryValidation`)),1)):l(``,!0),Q.value?(e(),p(`div`,Oe,s(t.$t(`createPage.sentryAutoExtract`)),1)):l(``,!0)])):l(``,!0)]),_:1}),X.value?(e(),c(y,{key:1,color:`grey-9`})):l(``,!0),h(`div`,ke,[u(x,{modelValue:k.value,"onUpdate:modelValue":r[2]||=e=>k.value=e,borderless:``,dense:``,placeholder:M.value&&G.value?t.$t(`createPage.workspaceName`):t.$t(`createPage.workspaceNamePlaceholder`),class:`name-input`,"input-class":`name-input-inner`},null,8,[`modelValue`,`placeholder`])]),u(y,{color:`grey-9`}),h(`div`,Ae,[u(x,{modelValue:A.value,"onUpdate:modelValue":r[3]||=e=>A.value=e,type:`textarea`,borderless:``,autogrow:``,rows:3,placeholder:M.value?t.$t(`createPage.instructions`):t.$t(`createPage.instructionsPlaceholder`),class:`create-textarea`,"input-class":`create-textarea-input`,onKeydown:[g(_(yt,[`ctrl`]),[`enter`]),g(_(yt,[`meta`]),[`enter`])]},null,8,[`modelValue`,`placeholder`,`onKeydown`])]),u(y,{color:`grey-9`}),at.value?(e(),p(m,{key:2},[h(`div`,je,s(t.$t(`createPage.manualHint`)),1),u(de,{dark:``,dense:``,label:t.$t(`createPage.tasks`,{count:K.value.length}),"header-class":`text-grey-4 manual-expansion-header`,class:`manual-expansion q-mx-sm`},{default:o(()=>[h(`div`,Me,[h(`div`,Ne,[u(x,{modelValue:J.value,"onUpdate:modelValue":r[4]||=e=>J.value=e,dark:``,dense:``,borderless:``,placeholder:t.$t(`createPage.addTask`),class:`col manual-input`,"input-class":`manual-input-inner`,onKeydown:g(_(ot,[`prevent`]),[`enter`])},null,8,[`modelValue`,`placeholder`,`onKeydown`]),u(b,{flat:``,dense:``,round:``,icon:`add`,color:`indigo-4`,disable:!J.value.trim(),onClick:ot},{default:o(()=>[u(T,null,{default:o(()=>[d(s(t.$t(`tooltip.addTask`)),1)]),_:1})]),_:1},8,[`disable`])]),(e(!0),p(m,null,n(K.value,(n,r)=>(e(),p(`div`,{key:`task-${r}`,class:`row items-center q-py-xs manual-item`},[h(`span`,Pe,s(n),1),u(b,{flat:``,dense:``,round:``,icon:`close`,size:`xs`,color:`grey-6`,onClick:e=>st(r)},{default:o(()=>[u(T,null,{default:o(()=>[d(s(t.$t(`tooltip.removeTask`)),1)]),_:1})]),_:1},8,[`onClick`])]))),128))])]),_:1},8,[`label`]),u(de,{dark:``,dense:``,label:t.$t(`createPage.acceptanceCriteria`,{count:q.value.length}),"header-class":`text-grey-4 manual-expansion-header`,class:`manual-expansion q-mx-sm q-mb-sm`},{default:o(()=>[h(`div`,Fe,[h(`div`,Ie,[u(x,{modelValue:Y.value,"onUpdate:modelValue":r[5]||=e=>Y.value=e,dark:``,dense:``,borderless:``,placeholder:t.$t(`createPage.addCriterion`),class:`col manual-input`,"input-class":`manual-input-inner`,onKeydown:g(_(ct,[`prevent`]),[`enter`])},null,8,[`modelValue`,`placeholder`,`onKeydown`]),u(b,{flat:``,dense:``,round:``,icon:`add`,color:`indigo-4`,disable:!Y.value.trim(),onClick:ct},{default:o(()=>[u(T,null,{default:o(()=>[d(s(t.$t(`tooltip.addCriterion`)),1)]),_:1})]),_:1},8,[`disable`])]),(e(!0),p(m,null,n(q.value,(n,r)=>(e(),p(`div`,{key:`crit-${r}`,class:`row items-center q-py-xs manual-item`},[h(`span`,Le,s(n),1),u(b,{flat:``,dense:``,round:``,icon:`close`,size:`xs`,color:`grey-6`,onClick:e=>lt(r)},{default:o(()=>[u(T,null,{default:o(()=>[d(s(t.$t(`tooltip.removeCriterion`)),1)]),_:1})]),_:1},8,[`onClick`])]))),128))])]),_:1},8,[`label`]),u(y,{color:`grey-9`})],64)):l(``,!0),h(`div`,Re,[h(`div`,ze,[et.value.length>0?(e(),c(E,{key:0,modelValue:z.value,"onUpdate:modelValue":r[6]||=e=>z.value=e,options:et.value,dense:``,borderless:``,class:`bottom-select rounded-borders`,"hide-dropdown-icon":``,"emit-value":``,"map-options":``,"option-value":`value`,"option-label":`label`},{selected:o(()=>[h(`span`,Be,[u(v,{name:`hub`,size:`12px`,color:`grey-5`,class:`q-mr-xs`}),d(` `+s(et.value.find(e=>e.value===z.value)?.label??z.value)+` `,1),u(v,{name:`expand_more`,size:`12px`,color:`grey-5`})])]),default:o(()=>[u(T,null,{default:o(()=>[d(s(t.$t(`engine.select`)),1)]),_:1})]),_:1},8,[`modelValue`,`options`])):l(``,!0),u(E,{modelValue:N.value,"onUpdate:modelValue":r[7]||=e=>N.value=e,options:rt.value,dense:``,borderless:``,class:`bottom-select rounded-borders model-select`,"hide-dropdown-icon":``,"emit-value":``,"map-options":``,"option-value":`value`,"option-label":`label`},{selected:o(()=>[h(`span`,Ve,[d(s(rt.value.find(e=>e.value===N.value)?.label??N.value)+` `,1),u(v,{name:`expand_more`,size:`12px`,color:`grey-5`})])]),option:o(({opt:e,itemProps:t})=>[u(S,ee(t,{class:`model-option`}),{default:o(()=>[u(C,null,{default:o(()=>[u(w,{class:`text-white`},{default:o(()=>[d(s(e.label),1)]),_:2},1024),u(w,{caption:``,class:`text-grey-5`},{default:o(()=>[d(s(e.description),1)]),_:2},1024)]),_:2},1024)]),_:2},1040)]),_:1},8,[`modelValue`,`options`]),u(E,{modelValue:P.value,"onUpdate:modelValue":r[8]||=e=>P.value=e,options:it.value,dense:``,borderless:``,class:`bottom-select rounded-borders`,"hide-dropdown-icon":``,"emit-value":``,"map-options":``,"option-value":`value`,"option-label":`label`},{selected:o(()=>[h(`span`,He,[u(v,{name:`psychology`,size:`12px`,color:`grey-5`,class:`q-mr-xs`}),d(` `+s(it.value.find(e=>e.value===P.value)?.label??P.value)+` `,1),u(v,{name:`expand_more`,size:`12px`,color:`grey-5`})])]),option:o(({opt:e,itemProps:t})=>[u(S,re(ie(t)),{default:o(()=>[u(C,null,{default:o(()=>[u(w,{class:`text-white`},{default:o(()=>[d(s(e.label),1)]),_:2},1024),u(w,{caption:``,class:`text-grey-5`},{default:o(()=>[d(s(e.description),1)]),_:2},1024)]),_:2},1024)]),_:2},1040)]),_:1},8,[`modelValue`,`options`]),u(E,{modelValue:B.value,"onUpdate:modelValue":r[9]||=e=>B.value=e,options:tt.value,dense:``,borderless:``,class:`bottom-select rounded-borders`,"hide-dropdown-icon":``,"emit-value":``,"map-options":``,"option-value":`value`,"option-label":`label`},{selected:o(()=>[h(`span`,Ue,[u(v,{name:B.value===`plan`?`visibility`:`flash_on`,size:`12px`,color:`amber-6`,class:`q-mr-xs`},null,8,[`name`]),d(` `+s(tt.value.find(e=>e.value===B.value)?.label??B.value)+` `,1),u(v,{name:`expand_more`,size:`12px`,color:`grey-5`})])]),default:o(()=>[u(T,null,{default:o(()=>[d(s(t.$t(`engine.permission`)),1)]),_:1})]),_:1},8,[`modelValue`,`options`]),u(pe),u(b,{flat:``,dense:``,size:`sm`,"no-caps":``,icon:R.value?`play_disabled`:`play_circle`,color:R.value?`orange-4`:`grey-5`,label:t.$t(`createPage.skipSetupScript`),class:`skip-setup-btn`,onClick:r[10]||=e=>R.value=!R.value},{default:o(()=>[u(T,null,{default:o(()=>[d(s(t.$t(`createPage.skipSetupScript`)),1)]),_:1})]),_:1},8,[`icon`,`color`,`label`])]),h(`div`,We,[u(E,{modelValue:F.value,"onUpdate:modelValue":r[11]||=e=>F.value=e,options:Ze.value,dense:``,borderless:``,"use-input":``,"fill-input":``,"hide-selected":``,"input-debounce":`0`,"new-value-mode":`add`,class:`bottom-select rounded-borders repo-select`,"hide-dropdown-icon":``,"input-class":F.value?``:`repo-input-empty`,placeholder:t.$t(`createPage.projectPath`),behavior:te(D).projectPaths.length>0?`menu`:`dialog`,onFilter:mt,onInputValue:r[12]||=e=>{F.value=e}},{prepend:o(()=>[u(v,{name:`folder`,size:`14px`,color:`grey-5`})]),"no-option":o(()=>[u(S,null,{default:o(()=>[u(C,{class:`text-grey-6 text-caption`},{default:o(()=>[d(s(t.$t(`createPage.enterPath`)),1)]),_:1})]),_:1})]),_:1},8,[`modelValue`,`options`,`input-class`,`placeholder`,`behavior`]),u(E,{modelValue:L.value,"onUpdate:modelValue":r[13]||=e=>L.value=e,options:nt,"emit-value":``,"map-options":``,dense:``,borderless:``,class:`bottom-select rounded-borders branch-type-select`,"hide-dropdown-icon":``},{selected:o(()=>[h(`span`,Ge,[u(v,{name:`account_tree`,size:`12px`,color:`grey-5`,class:`q-mr-xs`}),d(` `+s(L.value)+`/ `,1),u(v,{name:`expand_more`,size:`12px`,color:`grey-5`})])]),default:o(()=>[u(T,null,{default:o(()=>[d(s(t.$t(`createPage.branchType`)),1)]),_:1})]),_:1},8,[`modelValue`]),u(E,{modelValue:I.value,"onUpdate:modelValue":r[14]||=e=>I.value=e,options:V.value,dense:``,borderless:``,class:`bottom-select rounded-borders branch-select`,"hide-dropdown-icon":``,loading:H.value,disable:!F.value.trim()||H.value},{selected:o(()=>[h(`span`,Ke,[u(v,{name:`call_split`,size:`12px`,color:`grey-5`,class:`q-mr-xs`}),d(` `+s(I.value??t.$t(`createPage.branch`))+` `,1),u(v,{name:`expand_more`,size:`12px`,color:`grey-5`})])]),"no-option":o(()=>[u(S,null,{default:o(()=>[u(C,{class:`text-grey-6 text-caption`},{default:o(()=>[d(s(F.value.trim()?t.$t(`createPage.noBranches`):t.$t(`createPage.enterPath`)),1)]),_:1})]),_:1})]),_:1},8,[`modelValue`,`options`,`loading`,`disable`])])]),h(`div`,qe,[u(b,{label:t.$t(`createPage.create`),"no-caps":``,unelevated:``,class:`create-btn text-weight-bold rounded-borders`,loading:U.value,onClick:yt},null,8,[`label`,`loading`])])]),h(`div`,Je,s(M.value?t.$t(`createPage.notionExtractHint`):t.$t(`createPage.notionImportHint`)),1)])]),_:1}))}}),[[`__scopeId`,`data-v-2d121476`]]);export{Ye as default};