@loicngr/kobo 1.7.23 → 1.7.24

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 (46) hide show
  1. package/CHANGELOG.md +6 -7
  2. package/README.md +3 -3
  3. package/dist/server/db/migrations.js +0 -7
  4. package/dist/server/routes/workspaces.js +4 -16
  5. package/dist/server/services/pr-watcher-service.js +4 -14
  6. package/dist/server/services/settings-service.js +0 -4
  7. package/dist/server/services/workspace-service.js +0 -12
  8. package/dist/server/services/worktree-purge-service.js +5 -40
  9. package/package.json +1 -1
  10. package/src/client/dist/spa/assets/{ActivityFeed-CPvR4uDQ.js → ActivityFeed-Dhj2Y5CQ.js} +1 -1
  11. package/src/client/dist/spa/assets/{ChangelogPage-DVX4nE1a.js → ChangelogPage-BqCf7Tdk.js} +1 -1
  12. package/src/client/dist/spa/assets/{CreatePage-Ch-qSlc0.js → CreatePage-DhhwW2iK.js} +1 -1
  13. package/src/client/dist/spa/assets/{DiffViewer-CgTeedsM.js → DiffViewer-mgpaPemQ.js} +3 -3
  14. package/src/client/dist/spa/assets/{HealthPage-DKU-sJn_.js → HealthPage-Dl-UGLDD.js} +1 -1
  15. package/src/client/dist/spa/assets/{MainLayout-DohajLR7.js → MainLayout-BiDZ_U51.js} +3 -3
  16. package/src/client/dist/spa/assets/{MainLayout-DDTTsEj1.css → MainLayout-D2fdfOct.css} +1 -1
  17. package/src/client/dist/spa/assets/{SearchPage-CdLjyU4e.js → SearchPage-DFyeKlPZ.js} +1 -1
  18. package/src/client/dist/spa/assets/{SettingsPage-CGRHDtMz.js → SettingsPage-CWzjJmRK.js} +1 -1
  19. package/src/client/dist/spa/assets/{WorkspacePage-DNkEYqZA.js → WorkspacePage-Do8yOxLh.js} +3 -3
  20. package/src/client/dist/spa/assets/{cssMode-HGFtnvIZ.js → cssMode-C_8uTD04.js} +1 -1
  21. package/src/client/dist/spa/assets/{editor.api-DEN1LTb2.js → editor.api-BLN2wAE3.js} +1 -1
  22. package/src/client/dist/spa/assets/{editor.main-CYqwDDag.js → editor.main-DJVMM2i4.js} +3 -3
  23. package/src/client/dist/spa/assets/{engineFeatures-MNa_Gl_7.js → engineFeatures-DcjAE8bG.js} +1 -1
  24. package/src/client/dist/spa/assets/{expand-template-BYY8KsHo.js → expand-template-DijLIEI5.js} +1 -1
  25. package/src/client/dist/spa/assets/{freemarker2-DEXbr94k.js → freemarker2-g6EYTs3n.js} +1 -1
  26. package/src/client/dist/spa/assets/{handlebars-CNnnOJax.js → handlebars-Cv6y1teP.js} +1 -1
  27. package/src/client/dist/spa/assets/{html-CXew9GOW.js → html-Bc4U-abP.js} +1 -1
  28. package/src/client/dist/spa/assets/{htmlMode-DXK8cLF-.js → htmlMode-BwFjeo24.js} +1 -1
  29. package/src/client/dist/spa/assets/i18n-PViX03Cu.js +1 -0
  30. package/src/client/dist/spa/assets/{index-Bt877CHx.js → index-DnKXe7D-.js} +2 -2
  31. package/src/client/dist/spa/assets/{javascript-DqQmRIT5.js → javascript-Eczqe8bD.js} +1 -1
  32. package/src/client/dist/spa/assets/{jsonMode-B0EtHwQ3.js → jsonMode-BnyadzU0.js} +1 -1
  33. package/src/client/dist/spa/assets/{liquid-XTxM_f1I.js → liquid-DwRAzAaj.js} +1 -1
  34. package/src/client/dist/spa/assets/{mdx-DSvbDoxm.js → mdx-CFl7wmEL.js} +1 -1
  35. package/src/client/dist/spa/assets/{monaco.contribution-Ba5eWJZT.js → monaco.contribution--Qz8ObQD.js} +2 -2
  36. package/src/client/dist/spa/assets/{permissionModes-Bgj5fd8D.js → permissionModes-BT5h2RfC.js} +1 -1
  37. package/src/client/dist/spa/assets/{python-CI0Uf8Q9.js → python-Ddo5HdBd.js} +1 -1
  38. package/src/client/dist/spa/assets/{razor-BxdANj2h.js → razor-CvJeuccY.js} +1 -1
  39. package/src/client/dist/spa/assets/{render-chat-markdown-947qhJXu.js → render-chat-markdown-CODpqdnw.js} +1 -1
  40. package/src/client/dist/spa/assets/{tsMode-cQhuNyf_.js → tsMode-fdyRUXnV.js} +1 -1
  41. package/src/client/dist/spa/assets/{typescript--Ek3HrQl.js → typescript-BAEZzsZ6.js} +1 -1
  42. package/src/client/dist/spa/assets/{use-onboarding-Bn6RQzdN.js → use-onboarding-CiVkuuHv.js} +1 -1
  43. package/src/client/dist/spa/assets/{xml-DQfJVXiS.js → xml-DCrp93GN.js} +1 -1
  44. package/src/client/dist/spa/assets/{yaml-Dg8Jkbdl.js → yaml-tdhnQ3xr.js} +1 -1
  45. package/src/client/dist/spa/index.html +1 -1
  46. package/src/client/dist/spa/assets/i18n-Imx3zg2i.js +0 -1
package/CHANGELOG.md CHANGED
@@ -4,6 +4,12 @@ All notable changes to Kōbō are documented here. The format is based on
4
4
  [Keep a Changelog](https://keepachangelog.com/). Each release is an `## <version>`
5
5
  section — the in-app "What's new" dialog reads this file.
6
6
 
7
+ ## 1.7.24
8
+
9
+ - refactor: prune redundant comments from worktree-purge work
10
+ - docs: replace stray French UI labels with their English equivalents
11
+ - docs(changelog): drop stale Unreleased section duplicated by v1.7.23
12
+
7
13
  ## 1.7.23
8
14
 
9
15
  - docs: document worktree purge, auto-restore, and permission recovery
@@ -12,13 +18,6 @@ section — the in-app "What's new" dialog reads this file.
12
18
  - feat(workspace): worktree purge with auto-archive and restore metadata
13
19
  - feat(templates): add /kobo-context slash command (you need to re-import default templates)
14
20
 
15
- ## Unreleased
16
-
17
- - feat(workspace): disk-space purge — remove a workspace's worktree from disk while preserving chat history and PR metadata. Manual trigger from the workspace menu ("Libérer l'espace disque") or auto-purge on PR merged via Settings → Worktrees toggle.
18
- - feat(workspace): auto-detect manual worktree restoration — when the user recreates a purged worktree folder (`gh pr checkout` or `git worktree add`), the pr-watcher detects it within 30 s and unarchives the workspace automatically.
19
- - feat(client): dedicated banner for purged workspaces on the workspace page, with the restoration commands and `setfacl` / `chown` recovery guide for Docker-induced permission errors.
20
- - fix(pr-watcher): skip workspaces whose worktree directory no longer exists, stopping the `spawn git ENOENT` log spam.
21
-
22
21
  ## 1.7.22
23
22
 
24
23
  - feat(client): accept the new app.notion.com URL format
package/README.md CHANGED
@@ -82,8 +82,8 @@ Engine selection happens at workspace creation. Both share the same task trackin
82
82
 
83
83
  A merged workspace is automatically archived but its worktree folder usually carries a lot of weight (`node_modules`, `vendor`, build artefacts…). Kōbō can free that space without losing anything queryable:
84
84
 
85
- - **Manual** — workspace context menu → *Libérer l'espace disque*. The worktree is removed, the chat history and PR metadata stay in the database.
86
- - **Automatic** — **Settings → Worktrees → Purger le worktree quand la PR est mergée**. When the pr-watcher sees the OPEN → MERGED transition, it archives **and** purges.
85
+ - **Manual** — workspace context menu → *Free disk space (delete worktree)*. The worktree is removed, the chat history and PR metadata stay in the database.
86
+ - **Automatic** — **Settings → Worktrees → Auto-purge worktree on PR merged**. When the pr-watcher sees the OPEN → MERGED transition, it archives **and** purges.
87
87
  - **Restore** — recreate the folder yourself (`gh pr checkout <pr>` or `git worktree add <path> <branch>`). The pr-watcher detects the directory reappearing within 30 seconds and re-activates the workspace automatically (clears purge flag + unarchives). No UI action needed.
88
88
 
89
89
  ### Avoiding permission errors during purge
@@ -106,7 +106,7 @@ Docker containers usually write as `root`, so files in `node_modules` / `vendor`
106
106
  ```
107
107
  Run from inside the worktree folder, or directly on your worktrees root (e.g. `~/.worktrees/`) to cover all existing and future workspaces at once.
108
108
 
109
- When a purge does fail, Kōbō surfaces a toast with a copy-pasteable recovery command and a `git worktree prune` follow-up. The same guide is wired into **Settings → Worktrees → Comment ça marche** for in-app reference.
109
+ When a purge does fail, Kōbō surfaces a toast with a copy-pasteable recovery command and a `git worktree prune` follow-up. The same guide is wired into **Settings → Worktrees → How purge works** for in-app reference.
110
110
 
111
111
  ## Optional integrations
112
112
 
@@ -343,13 +343,6 @@ export const migrations = [
343
343
  version: 27,
344
344
  name: 'add-workspace-worktree-purge',
345
345
  migrate: (db) => {
346
- // Worktree purge: deletes the worktree from disk to reclaim space while
347
- // keeping the chat/session history queryable. `worktree_purged_at` is the
348
- // ISO timestamp of the purge (null = not purged). `worktree_purge_restore_data`
349
- // is a JSON blob with the metadata needed to restore the worktree later
350
- // (PR number, forge, merge commit sha, original paths). Restoration is
351
- // not implemented yet, but the data is captured at purge time so future
352
- // versions can rebuild the worktree from the merged PR.
353
346
  const table = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='workspaces'").get();
354
347
  if (!table)
355
348
  return;
@@ -1923,11 +1923,7 @@ app.post('/:id/archive', migrationGuard, (c) => {
1923
1923
  return c.json({ error: message }, 500);
1924
1924
  }
1925
1925
  });
1926
- // POST /api/workspaces/:id/purge-worktree — delete the worktree from disk
1927
- // to reclaim space while keeping the chat / session history queryable. Auto-
1928
- // archives the workspace, stops the agent / dev server / terminal, and
1929
- // records restore metadata so a future feature can rebuild the worktree
1930
- // from the merged PR.
1926
+ // POST /api/workspaces/:id/purge-worktree
1931
1927
  app.post('/:id/purge-worktree', migrationGuard, async (c) => {
1932
1928
  try {
1933
1929
  const id = c.req.param('id');
@@ -1959,11 +1955,8 @@ app.post('/:id/unarchive', migrationGuard, (c) => {
1959
1955
  if (!workspace.archivedAt) {
1960
1956
  return c.json({ error: 'Not archived' }, 400);
1961
1957
  }
1962
- // A workspace whose worktree was purged from disk can't be safely
1963
- // unarchived its worktreePath points to nothing, every git/forge call
1964
- // would fail, and the agent has no working tree. Force the user to
1965
- // restore the worktree first (manual `gh pr checkout` / `git worktree
1966
- // add`); the pr-watcher then auto-clears the purge flag + unarchives.
1958
+ // Refuse unarchive while the worktree is missing the pr-watcher
1959
+ // auto-restores once the user recreates the folder.
1967
1960
  if (workspace.worktreePurgedAt) {
1968
1961
  return c.json({ error: 'worktree-purged' }, 409);
1969
1962
  }
@@ -2011,14 +2004,9 @@ function deleteWorkspaceWithSideEffects(workspace, opts) {
2011
2004
  // Docker leaves root-owned files inside the worktree, git worktree
2012
2005
  // remove fails with EACCES.
2013
2006
  const warnings = [];
2014
- // Remove worktree (only if owned for attached external worktrees we
2015
- // never created the dir, so we must not delete it on the user's behalf).
2007
+ // Owned worktrees only — attached external worktrees aren't ours to remove.
2016
2008
  const worktreePath = workspace.worktreePath;
2017
2009
  if (workspace.worktreePurgedAt) {
2018
- // Already purged earlier: the worktree folder is gone AND `git worktree
2019
- // remove` already cleaned the `.git/worktrees/<name>/` entry. Retrying
2020
- // here just fails with "fatal: <path> does not exist" and pushes a noisy
2021
- // warning. Skip cleanly.
2022
2010
  console.log(`[workspaces] skipping worktree removal on delete (already purged): ${worktreePath}`);
2023
2011
  }
2024
2012
  else if (workspace.worktreeOwned) {
@@ -66,12 +66,6 @@ function markUnread(workspaceId) {
66
66
  console.error('[pr-watcher] markUnread failed:', err instanceof Error ? err.message : err);
67
67
  }
68
68
  }
69
- /**
70
- * Detect manually-restored worktrees: if a purged workspace's worktreePath
71
- * has reappeared on disk (user ran `gh pr checkout` or `git worktree add`
72
- * themselves), clear the purge metadata + unarchive it. Best-effort, runs
73
- * once per watcher tick before the PR-status pass.
74
- */
75
69
  function autoRestoreManuallyRecreatedWorktrees() {
76
70
  for (const ws of listArchivedWorkspaces()) {
77
71
  if (!ws.worktreePurgedAt)
@@ -103,9 +97,8 @@ export async function checkPrStatuses() {
103
97
  }
104
98
  }
105
99
  for (const ws of workspaces) {
106
- // Skip workspaces whose worktree directory has disappeared (purged
107
- // externally, manually deleted). Without this guard, every git/forge
108
- // spawn below fails with ENOENT and floods the logs.
100
+ // Without this guard, every git/forge spawn below fails with ENOENT and
101
+ // floods the logs when a worktree was deleted externally.
109
102
  if (!fs.existsSync(ws.worktreePath))
110
103
  continue;
111
104
  try {
@@ -182,11 +175,8 @@ export async function checkPrStatuses() {
182
175
  reason: `PR ${pr.state.toLowerCase()}`,
183
176
  prUrl: pr.url,
184
177
  });
185
- // Auto-purge the worktree on MERGED + opt-in setting. The purge
186
- // service is idempotent + best-effort: any failure surfaces as
187
- // warnings on the next listing instead of crashing the watcher.
188
- // Only acts on MERGED — closed-without-merge keeps the worktree
189
- // around so the user can inspect / push fixes.
178
+ // Only MERGED closed-without-merge keeps the worktree so the user
179
+ // can inspect / push fixes.
190
180
  if (pr.state === 'MERGED') {
191
181
  try {
192
182
  const { autoPurgeOnPrMerged } = getGlobalSettings();
@@ -602,10 +602,6 @@ const settingsMigrations = [
602
602
  version: 36,
603
603
  name: 'add-auto-purge-on-pr-merged',
604
604
  migrate: ({ global }) => {
605
- // Opt-in: when true, the pr-watcher purges the worktree from disk
606
- // immediately after auto-archiving on a PR merge transition. The
607
- // workspace stays consultable (chat history, sessions) but reclaims
608
- // the disk space. Default false — feature is silent until enabled.
609
605
  if (typeof global.autoPurgeOnPrMerged !== 'boolean') {
610
606
  global.autoPurgeOnPrMerged = false;
611
607
  }
@@ -367,12 +367,6 @@ export function dismissPrAttention(id, kind, prUpdatedAt) {
367
367
  throw new Error(`Workspace '${id}' not found`);
368
368
  }
369
369
  }
370
- /**
371
- * Mark a workspace's worktree as purged from disk. Persists the supplied
372
- * restore data as JSON so a future "unpurge" feature can recreate the
373
- * worktree from the merged PR. Idempotent: re-purging a workspace just
374
- * overwrites the timestamp + data.
375
- */
376
370
  export function markWorktreePurged(id, restoreData) {
377
371
  const db = getDb();
378
372
  const now = new Date().toISOString();
@@ -383,12 +377,6 @@ export function markWorktreePurged(id, restoreData) {
383
377
  throw new Error(`Workspace '${id}' not found`);
384
378
  }
385
379
  }
386
- /**
387
- * Reverse of `markWorktreePurged` + `archiveWorkspace`: clears the purge
388
- * metadata and unarchives the workspace in a single transaction. Used by the
389
- * auto-restore watcher when the user manually recreates the worktree folder
390
- * on disk. Idempotent: no-op if already restored.
391
- */
392
380
  export function restoreWorktreeFromDisk(id) {
393
381
  const db = getDb();
394
382
  const workspace = getWorkspace(id);
@@ -7,16 +7,6 @@ import { destroyTerminal } from './terminal-service.js';
7
7
  import { emitEphemeral } from './websocket-service.js';
8
8
  import { archiveWorkspace, getWorkspace, markWorktreePurged, } from './workspace-service.js';
9
9
  import { removeWorktree } from './worktree-service.js';
10
- /**
11
- * Purge the worktree of a workspace: stops the agent, the dev server and the
12
- * terminal (best-effort), removes the worktree dir + git registration, then
13
- * records the purge timestamp + restore metadata so a future version can
14
- * recreate the worktree from the merged PR.
15
- *
16
- * The workspace is auto-archived on purge — disk-purged is a strict superset
17
- * of archived (no agent can run on a missing worktree). Archive emits its
18
- * own event before this function tags the workspace as purged.
19
- */
20
10
  export async function purgeWorktree(workspaceId) {
21
11
  const workspace = getWorkspace(workspaceId);
22
12
  if (!workspace)
@@ -26,9 +16,6 @@ export async function purgeWorktree(workspaceId) {
26
16
  if (!workspace.worktreeOwned)
27
17
  return { outcome: 'worktree-not-owned', warnings: [] };
28
18
  const warnings = [];
29
- // Best-effort cleanup before touching the disk. A failure here is logged
30
- // but does NOT block the purge — leaving a stranded worktree on disk would
31
- // defeat the feature's purpose.
32
19
  try {
33
20
  agentManager.stopAgent(workspaceId);
34
21
  }
@@ -46,15 +33,10 @@ export async function purgeWorktree(workspaceId) {
46
33
  try {
47
34
  destroyTerminal(workspaceId);
48
35
  }
49
- catch {
50
- // terminal may not existsilent
51
- }
52
- // Capture restore metadata BEFORE removing the worktree so we still have a
53
- // chance to query the forge for the latest PR snapshot.
36
+ catch { }
37
+ // Snapshot the forge BEFORE removing the worktree the PR lookup uses
38
+ // `worktreePath` as cwd.
54
39
  const restoreData = await captureRestoreData(workspace);
55
- // Archive first so the workspace:archived event fires while the worktree
56
- // still technically exists — listeners that snapshot disk state get a
57
- // consistent picture. Archive is idempotent.
58
40
  if (!workspace.archivedAt) {
59
41
  try {
60
42
  const archived = archiveWorkspace(workspaceId);
@@ -65,9 +47,6 @@ export async function purgeWorktree(workspaceId) {
65
47
  warnings.push(`Archive failed: ${msg}`);
66
48
  }
67
49
  }
68
- // Remove the worktree. fs.existsSync guard handles the case where the user
69
- // already nuked it externally — the git registration still needs cleaning,
70
- // which removeWorktree does too.
71
50
  if (fs.existsSync(workspace.worktreePath)) {
72
51
  try {
73
52
  removeWorktree(workspace.projectPath, workspace.worktreePath);
@@ -91,12 +70,6 @@ export async function purgeWorktree(workspaceId) {
91
70
  });
92
71
  return { outcome: 'purged', warnings };
93
72
  }
94
- /**
95
- * Pretty failure message for `removeWorktree` errors. Detects permission
96
- * issues (typical when Docker / docker-compose left root-owned files in
97
- * `node_modules`, `vendor`, etc.) and surfaces a one-line `sudo` command
98
- * the user can paste to recover. Other errors get a generic recovery hint.
99
- */
100
73
  function buildRemovalFailureMessage(worktreePath, projectPath, errMsg) {
101
74
  const isPermission = /EACCES|EPERM|permission denied|operation not permitted/i.test(errMsg);
102
75
  const baseLine = `Failed to remove worktree '${worktreePath}'.`;
@@ -112,20 +85,12 @@ function buildRemovalFailureMessage(worktreePath, projectPath, errMsg) {
112
85
  }
113
86
  return [baseLine, recovery, `Reason: ${errMsg}`].join('\n');
114
87
  }
115
- /**
116
- * Build the restore-data snapshot stored alongside the purge. Reads the PR
117
- * snapshot from the watcher cache when available, then tries a fresh forge
118
- * lookup as a fallback. Never throws — best-effort. Reserved for a future
119
- * unpurge feature.
120
- */
121
88
  async function captureRestoreData(workspace) {
122
89
  const forge = resolveForge(workspace.projectPath);
123
90
  let prNumber = null;
124
91
  let prUrl = null;
125
- // Forge lookup is best-effort silent on failure since the field is
126
- // purely advisory for the future unpurge feature. We always go direct to
127
- // the provider (no pr-watcher cache) to avoid an import cycle between
128
- // the watcher and the purge service.
92
+ // Direct provider call (not the pr-watcher cache) avoids an import cycle
93
+ // between the watcher and this service.
129
94
  if (forge !== 'none') {
130
95
  try {
131
96
  const provider = getForgeProvider(forge);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@loicngr/kobo",
3
- "version": "1.7.23",
3
+ "version": "1.7.24",
4
4
  "description": "Kōbō — multi-workspace agent manager for Claude Code. Orchestrates isolated git worktrees with dev servers, Notion integration, and MCP tools.",
5
5
  "type": "module",
6
6
  "license": "GPL-3.0-or-later",
@@ -1,4 +1,4 @@
1
- import{D as e,G as t,I as n,N as r,P as i,R as a,St as o,W as s,_ as c,at as l,d as u,et as d,f,g as p,l as m,p as h,r as g,u as _,xt as v,y,yt as b}from"./runtime-core.esm-bundler-D_RRiKBh.js";import{U as x,l as S,t as C}from"./QIcon-BmEX2rXO.js";import{c as w,s as T}from"./notifications-l1Pxijve.js";import{t as E}from"./QBtn-CoU-UC_j.js";import{n as D}from"./vue-i18n-Cq-KgjJC.js";import{_ as O,c as k,m as A,u as j}from"./index-Bt877CHx.js";import{t as M}from"./QSpinnerDots-DspFKwCZ.js";import{t as N}from"./QTooltip-CwBZU_bs.js";import{t as ee}from"./QExpansionItem-CiBP4NiY.js";import{t as te}from"./QScrollArea-CZVgBUBp.js";import{i as ne,n as re,t as P}from"./render-chat-markdown-947qhJXu.js";import{t as F}from"./documents-CX2-4fhr.js";import{t as I}from"./_plugin-vue_export-helper-r4mAJOHR.js";function ie(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`session:user-input-requested`: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 ae(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}var L=new Set([`setup`,`cleanup`,`archive`]);function R(e){switch(e.type){case`user`:return e.sender===`system-prompt`?`system-prompt`:L.has(e.sender)?`script`:`user`;case`session`:return`session`;default:return`agent`}}function oe(e){let t=[],n=null,r=null;for(let i of e){let e=R(i),a=e===`session`||e===`system-prompt`,o=e===`script`&&i.type===`user`?`script:${i.sender}`:e;!n||r!==o||a?(n={speaker:e,ts:i.ts,items:[i]},r=o,t.push(n),a&&(n=null)):n.items.push(i)}return t}var z={class:`text-caption text-grey-6`},B=y({__name:`SessionEventItem`,props:{item:{}},setup(e){let t=e,r=m(()=>{switch(t.item.kind){case`started`:return`session.started`;case`ended`:return`session.ended`;case`compacted`:return`session.compacted`;default:return`session.started`}});return(e,t)=>(n(),h(`span`,z,o(e.$t(r.value)),1))}});function se(e,t){if(t.length===0||e.length===0)return e;let n=[...t].sort((e,t)=>t.length-e.length),r=new DOMParser().parseFromString(`<div>${e}</div>`,`text/html`),i=r.body.firstChild;if(!i)return e;function a(e){if(e.nodeType===Node.TEXT_NODE){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`],ce=I(y({__name:`TextMessageItem`,props:{item:{}},setup(e){let t=e,r=F(),i=k(),a=m(()=>{let e=i.selectedWorkspaceId;return e?r.documentsFor(e).map(e=>e.path):[]}),o=m(()=>re(se(ne.parse(t.item.text,{async:!1,breaks:!0,gfm:!0}),a.value),{addAttr:[`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(t,r)=>(n(),h(`div`,{class:`markdown-message`,onClick:s},[_(`div`,{innerHTML:o.value},null,8,U),e.item.streaming?(n(),u(S,{key:0,size:`xs`,class:`q-ml-xs`})):f(``,!0)]))}}),[[`__scopeId`,`data-v-1b7bd8ca`]]),W={key:0,class:`text-caption text-grey-5`,style:{"font-style":`italic`}},G=[`innerHTML`],K={key:1,style:{"white-space":`pre-wrap`}},le=I(y({__name:`ThinkingItem`,props:{item:{}},setup(e){let r=e,i=m(()=>r.item.text.trim().slice(0,100)),a=m(()=>r.item.text.trim().length>0),s=m(()=>r.item.text.trim().length>100),c=m(()=>P(r.item.text));return(r,l)=>a.value?(n(),h(`div`,W,[s.value?(n(),u(ee,{key:0,dense:``,"dense-toggle":``,label:i.value,"header-class":`text-grey-5 text-caption`,style:{"font-style":`italic`}},{default:t(()=>[_(`div`,{class:`q-py-xs markdown-thinking`,innerHTML:c.value},null,8,G)]),_:1},8,[`label`])):(n(),h(`span`,K,o(e.item.text),1))])):f(``,!0)}}),[[`__scopeId`,`data-v-7f45ed94`]]);function ue(e,t){let n=e.split(`
1
+ import{D as e,G as t,I as n,N as r,P as i,R as a,St as o,W as s,_ as c,at as l,d as u,et as d,f,g as p,l as m,p as h,r as g,u as _,xt as v,y,yt as b}from"./runtime-core.esm-bundler-D_RRiKBh.js";import{U as x,l as S,t as C}from"./QIcon-BmEX2rXO.js";import{c as w,s as T}from"./notifications-l1Pxijve.js";import{t as E}from"./QBtn-CoU-UC_j.js";import{n as D}from"./vue-i18n-Cq-KgjJC.js";import{_ as O,c as k,m as A,u as j}from"./index-DnKXe7D-.js";import{t as M}from"./QSpinnerDots-DspFKwCZ.js";import{t as N}from"./QTooltip-CwBZU_bs.js";import{t as ee}from"./QExpansionItem-CiBP4NiY.js";import{t as te}from"./QScrollArea-CZVgBUBp.js";import{i as ne,n as re,t as P}from"./render-chat-markdown-CODpqdnw.js";import{t as F}from"./documents-CX2-4fhr.js";import{t as I}from"./_plugin-vue_export-helper-r4mAJOHR.js";function ie(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`session:user-input-requested`: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 ae(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}var L=new Set([`setup`,`cleanup`,`archive`]);function R(e){switch(e.type){case`user`:return e.sender===`system-prompt`?`system-prompt`:L.has(e.sender)?`script`:`user`;case`session`:return`session`;default:return`agent`}}function oe(e){let t=[],n=null,r=null;for(let i of e){let e=R(i),a=e===`session`||e===`system-prompt`,o=e===`script`&&i.type===`user`?`script:${i.sender}`:e;!n||r!==o||a?(n={speaker:e,ts:i.ts,items:[i]},r=o,t.push(n),a&&(n=null)):n.items.push(i)}return t}var z={class:`text-caption text-grey-6`},B=y({__name:`SessionEventItem`,props:{item:{}},setup(e){let t=e,r=m(()=>{switch(t.item.kind){case`started`:return`session.started`;case`ended`:return`session.ended`;case`compacted`:return`session.compacted`;default:return`session.started`}});return(e,t)=>(n(),h(`span`,z,o(e.$t(r.value)),1))}});function se(e,t){if(t.length===0||e.length===0)return e;let n=[...t].sort((e,t)=>t.length-e.length),r=new DOMParser().parseFromString(`<div>${e}</div>`,`text/html`),i=r.body.firstChild;if(!i)return e;function a(e){if(e.nodeType===Node.TEXT_NODE){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`],ce=I(y({__name:`TextMessageItem`,props:{item:{}},setup(e){let t=e,r=F(),i=k(),a=m(()=>{let e=i.selectedWorkspaceId;return e?r.documentsFor(e).map(e=>e.path):[]}),o=m(()=>re(se(ne.parse(t.item.text,{async:!1,breaks:!0,gfm:!0}),a.value),{addAttr:[`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(t,r)=>(n(),h(`div`,{class:`markdown-message`,onClick:s},[_(`div`,{innerHTML:o.value},null,8,U),e.item.streaming?(n(),u(S,{key:0,size:`xs`,class:`q-ml-xs`})):f(``,!0)]))}}),[[`__scopeId`,`data-v-1b7bd8ca`]]),W={key:0,class:`text-caption text-grey-5`,style:{"font-style":`italic`}},G=[`innerHTML`],K={key:1,style:{"white-space":`pre-wrap`}},le=I(y({__name:`ThinkingItem`,props:{item:{}},setup(e){let r=e,i=m(()=>r.item.text.trim().slice(0,100)),a=m(()=>r.item.text.trim().length>0),s=m(()=>r.item.text.trim().length>100),c=m(()=>P(r.item.text));return(r,l)=>a.value?(n(),h(`div`,W,[s.value?(n(),u(ee,{key:0,dense:``,"dense-toggle":``,label:i.value,"header-class":`text-grey-5 text-caption`,style:{"font-style":`italic`}},{default:t(()=>[_(`div`,{class:`q-py-xs markdown-thinking`,innerHTML:c.value},null,8,G)]),_:1},8,[`label`])):(n(),h(`span`,K,o(e.item.text),1))])):f(``,!0)}}),[[`__scopeId`,`data-v-7f45ed94`]]);function ue(e,t){let n=e.split(`
2
2
  `),r=t.split(`
3
3
  `),i=n.length,a=r.length,o=Array.from({length:i+1},()=>Array(a+1).fill(0));for(let e=i-1;e>=0;e--)for(let t=a-1;t>=0;t--)n[e]===r[t]?o[e][t]=o[e+1][t+1]+1:o[e][t]=Math.max(o[e+1][t],o[e][t+1]);let s=[],c=0,l=0;for(;c<i&&l<a;)n[c]===r[l]?(s.push({type:`context`,content:n[c]}),c++,l++):o[c+1][l]>=o[c][l+1]?(s.push({type:`del`,content:n[c]}),c++):(s.push({type:`add`,content:r[l]}),l++);for(;c<i;)s.push({type:`del`,content:n[c++]});for(;l<a;)s.push({type:`add`,content:r[l++]});return s}function de(e){let t=e.split(`
4
4
  `),n=[];for(let e of t)e.startsWith(`@@`)||e.startsWith(`+++`)||e.startsWith(`---`)||(e.startsWith(`+`)?n.push({type:`add`,content:e.slice(1)}):e.startsWith(`-`)?n.push({type:`del`,content:e.slice(1)}):e.startsWith(` `)?n.push({type:`context`,content:e.slice(1)}):e.length>0&&n.push({type:`context`,content:e}));return n}function fe(e,t){if(!t||typeof t!=`object`)return null;let n=t;if(e===`Edit`){let e=n.file_path;if(!e)return null;let t=n.old_string??``,r=n.new_string??``,i=typeof n.diff==`string`?n.diff:``;if(!t&&!r&&i.length>0){let t=de(i);return{toolName:`Edit`,filePath:e,additions:t.filter(e=>e.type===`add`).length,deletions:t.filter(e=>e.type===`del`).length,diffLines:t}}return{toolName:`Edit`,filePath:e,oldString:t,newString:r,replaceAll:n.replace_all??!1,additions:r?r.split(`
@@ -1 +1 @@
1
- import{G as e,I as t,N as n,R as r,St as i,_ as a,at as o,d as s,et as c,f as l,p as u,r as d,u as f,y as p}from"./runtime-core.esm-bundler-D_RRiKBh.js";import{t as m}from"./QBtn-CoU-UC_j.js";import{b as h,i as g,x as _}from"./index-Bt877CHx.js";import{t as v}from"./render-chat-markdown-947qhJXu.js";import{t as y}from"./_plugin-vue_export-helper-r4mAJOHR.js";import{t as b}from"./QSpace-Crcx82On.js";import{t as x}from"./QChip-D2TVel5I.js";import{t as S}from"./QPage-3-ah4oor.js";var C={class:`row items-center q-mb-md`},w={class:`text-h6 q-ml-sm`},T={key:0,class:`text-grey-6 text-center q-pa-lg`},E={key:1,class:`text-negative text-center q-pa-lg`},D={key:2,class:`text-grey-6 text-center q-pa-lg`},O={key:3,class:`column q-gutter-md`},k={key:0,class:`text-caption text-grey-6`},A={class:`row items-center q-mb-sm`},j={class:`text-subtitle1 text-indigo-3`,style:{"font-family":`var(--kobo-font-mono, monospace)`}},M=[`innerHTML`],N=y(p({__name:`ChangelogPage`,setup(p){let y=g(),N=c([]),P=c(``),F=c(!1),I=c(null);function L(e){return v(e)}async function R(){F.value=!0,I.value=null;try{let e=await fetch(`/api/changelog`);if(!e.ok)throw Error(`HTTP ${e.status}`);let t=await e.json();P.value=t.currentVersion??``,N.value=t.versions??[]}catch(e){I.value=e instanceof Error?e.message:String(e)}finally{F.value=!1}}return n(R),(n,c)=>(t(),s(S,{class:`q-pa-md`,style:{"max-width":`900px`,margin:`0 auto`}},{default:e(()=>[f(`div`,C,[a(m,{flat:``,dense:``,round:``,icon:`arrow_back`,onClick:c[0]||=e=>o(y).back()}),f(`div`,w,i(n.$t(`changelog.title`)),1),a(b),a(m,{flat:``,dense:``,icon:`refresh`,loading:F.value,label:n.$t(`common.refresh`),onClick:R},null,8,[`loading`,`label`])]),F.value&&N.value.length===0?(t(),u(`div`,T,i(n.$t(`common.loading`)),1)):I.value?(t(),u(`div`,E,i(I.value),1)):N.value.length===0?(t(),u(`div`,D,i(n.$t(`changelog.empty`)),1)):(t(),u(`div`,O,[P.value?(t(),u(`div`,k,i(n.$t(`changelog.currentVersion`,{version:P.value})),1)):l(``,!0),(t(!0),u(d,null,r(N.value,r=>(t(),s(h,{key:r.version,dark:``,flat:``,bordered:``},{default:e(()=>[a(_,null,{default:e(()=>[f(`div`,A,[f(`div`,j,` v`+i(r.version),1),r.version===P.value?(t(),s(x,{key:0,dense:``,size:`sm`,color:`indigo-7`,"text-color":`grey-2`,label:n.$t(`changelog.current`),class:`q-ml-sm`},null,8,[`label`])):l(``,!0)]),f(`div`,{class:`changelog-notes`,innerHTML:L(r.notes)},null,8,M)]),_:2},1024)]),_:2},1024))),128))]))]),_:1}))}}),[[`__scopeId`,`data-v-ed73d661`]]);export{N as default};
1
+ import{G as e,I as t,N as n,R as r,St as i,_ as a,at as o,d as s,et as c,f as l,p as u,r as d,u as f,y as p}from"./runtime-core.esm-bundler-D_RRiKBh.js";import{t as m}from"./QBtn-CoU-UC_j.js";import{b as h,i as g,x as _}from"./index-DnKXe7D-.js";import{t as v}from"./render-chat-markdown-CODpqdnw.js";import{t as y}from"./_plugin-vue_export-helper-r4mAJOHR.js";import{t as b}from"./QSpace-Crcx82On.js";import{t as x}from"./QChip-D2TVel5I.js";import{t as S}from"./QPage-3-ah4oor.js";var C={class:`row items-center q-mb-md`},w={class:`text-h6 q-ml-sm`},T={key:0,class:`text-grey-6 text-center q-pa-lg`},E={key:1,class:`text-negative text-center q-pa-lg`},D={key:2,class:`text-grey-6 text-center q-pa-lg`},O={key:3,class:`column q-gutter-md`},k={key:0,class:`text-caption text-grey-6`},A={class:`row items-center q-mb-sm`},j={class:`text-subtitle1 text-indigo-3`,style:{"font-family":`var(--kobo-font-mono, monospace)`}},M=[`innerHTML`],N=y(p({__name:`ChangelogPage`,setup(p){let y=g(),N=c([]),P=c(``),F=c(!1),I=c(null);function L(e){return v(e)}async function R(){F.value=!0,I.value=null;try{let e=await fetch(`/api/changelog`);if(!e.ok)throw Error(`HTTP ${e.status}`);let t=await e.json();P.value=t.currentVersion??``,N.value=t.versions??[]}catch(e){I.value=e instanceof Error?e.message:String(e)}finally{F.value=!1}}return n(R),(n,c)=>(t(),s(S,{class:`q-pa-md`,style:{"max-width":`900px`,margin:`0 auto`}},{default:e(()=>[f(`div`,C,[a(m,{flat:``,dense:``,round:``,icon:`arrow_back`,onClick:c[0]||=e=>o(y).back()}),f(`div`,w,i(n.$t(`changelog.title`)),1),a(b),a(m,{flat:``,dense:``,icon:`refresh`,loading:F.value,label:n.$t(`common.refresh`),onClick:R},null,8,[`loading`,`label`])]),F.value&&N.value.length===0?(t(),u(`div`,T,i(n.$t(`common.loading`)),1)):I.value?(t(),u(`div`,E,i(I.value),1)):N.value.length===0?(t(),u(`div`,D,i(n.$t(`changelog.empty`)),1)):(t(),u(`div`,O,[P.value?(t(),u(`div`,k,i(n.$t(`changelog.currentVersion`,{version:P.value})),1)):l(``,!0),(t(!0),u(d,null,r(N.value,r=>(t(),s(h,{key:r.version,dark:``,flat:``,bordered:``},{default:e(()=>[a(_,null,{default:e(()=>[f(`div`,A,[f(`div`,j,` v`+i(r.version),1),r.version===P.value?(t(),s(x,{key:0,dense:``,size:`sm`,color:`indigo-7`,"text-color":`grey-2`,label:n.$t(`changelog.current`),class:`q-ml-sm`},null,8,[`label`])):l(``,!0)]),f(`div`,{class:`changelog-notes`,innerHTML:L(r.notes)},null,8,M)]),_:2},1024)]),_:2},1024))),128))]))]),_:1}))}}),[[`__scopeId`,`data-v-ed73d661`]]);export{N as default};
@@ -1,2 +1,2 @@
1
- import{D as e,E as t,G as n,I as r,N as i,P as ee,R as te,S as ne,St as a,W as o,_ as s,at as c,bt as re,d as l,et as u,f as d,g as f,l as p,p as m,r as ie,u as h,y as ae,yt as oe}from"./runtime-core.esm-bundler-D_RRiKBh.js";import{H as se,R as ce,U as g,t as _}from"./QIcon-BmEX2rXO.js";import{r as v}from"./use-id-BCnfiBjU.js";import{s as le}from"./notifications-l1Pxijve.js";import{t as y}from"./QBtn-CoU-UC_j.js";import{n as ue}from"./vue-i18n-Cq-KgjJC.js";import{t as b}from"./QInput-D0t39uK_.js";import{c as de,g as fe,i as pe,o as me}from"./index-Bt877CHx.js";import{t as he}from"./QSpinnerDots-DspFKwCZ.js";import{n as x,t as ge}from"./QItemSection-DRg-QuAD.js";import{t as S}from"./QItemLabel-Btqw0P7M.js";import{t as C}from"./QTooltip-CwBZU_bs.js";import{t as _e}from"./QExpansionItem-CiBP4NiY.js";import{t as ve}from"./_plugin-vue_export-helper-r4mAJOHR.js";import{t as ye}from"./QSpace-Crcx82On.js";import{t as be}from"./use-quasar-q6dh7QVJ.js";import{t as xe}from"./QPage-3-ah4oor.js";import{a as w,i as Se,r as Ce,t as we}from"./permissionModes-Bgj5fd8D.js";import{a as Te,i as Ee,n as De,r as Oe,t as ke}from"./expand-template-BYY8KsHo.js";var T=`kobo:create-page-prefs`;function Ae(){try{let e=localStorage.getItem(T);return e===null?void 0:JSON.parse(e)}catch{return}}function E(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function je(){let e=Ae();if(!E(e))return{};let t={};return typeof e.projectPath==`string`&&e.projectPath.length>0&&(t.projectPath=e.projectPath),typeof e.autoLoop==`boolean`&&(t.autoLoop=e.autoLoop),t}function Me(e){try{localStorage.setItem(T,JSON.stringify(e))}catch{}}var Ne={class:`create-inner`},Pe={class:`create-title text-center text-weight-bold q-mb-lg text-grey-3`},Fe={class:`create-card rounded-borders`},Ie={class:`card-top-bar row items-center q-px-md q-py-xs`},Le={class:`model-badge cursor-default row items-center q-gutter-xs`},Re={class:`text-indigo-3 text-weight-medium text-caption`},ze={key:0,class:`notion-url-wrap`},Be={key:0,class:`notion-error text-caption q-px-md q-pb-xs text-red-5`},Ve={key:1,class:`notion-valid text-caption q-px-md q-pb-xs text-green-4`},He={key:2,class:`notion-peek-choice q-px-md q-pb-sm`},Ue={class:`text-caption text-grey-4 q-mb-sm`},We={class:`row q-gutter-sm`},Ge={class:`peek-card-text`},Ke={class:`peek-card-title`},qe={class:`peek-card-desc`},Je={class:`peek-card-text`},Ye={class:`peek-card-title`},Xe={class:`peek-card-desc`},Ze={key:0,class:`sentry-url-wrap`},Qe={key:0,class:`sentry-error text-caption q-px-md q-pb-xs text-red-5`},$e={key:1,class:`sentry-valid text-caption q-px-md q-pb-xs text-red-4`},et={class:`card-name-wrap`},tt={class:`card-textarea-wrap`},nt={class:`row items-center justify-end q-px-sm q-pb-xs q-gutter-sm`},rt={key:0,class:`row items-center text-caption text-amber-6`},it={class:`manual-hint q-px-md q-py-sm text-caption text-grey-6`},at={class:`q-pa-sm manual-section-body`},ot={class:`row items-center q-gutter-sm q-mb-sm`},st={class:`col text-caption text-grey-4`},ct={class:`q-pa-sm manual-section-body`},lt={class:`row items-center q-gutter-sm q-mb-sm`},ut={class:`col text-caption text-grey-4`},dt={class:`card-bottom-bar`},ft={class:`row q-col-gutter-xs q-px-xs`},pt={key:0,class:`col-12 col-sm-6 col-md-3`},mt={class:`bottom-select-label row items-center no-wrap`},ht={class:`col-12 col-sm-6 col-md-3`},gt={class:`bottom-select-label row items-center no-wrap`},_t={class:`col-12 col-sm-6 col-md-3`},vt={class:`bottom-select-label row items-center no-wrap`},yt={class:`col-12 col-md-3`},bt={class:`bottom-select-label row items-center no-wrap`},xt={class:`row q-col-gutter-xs q-pa-xs col-12 items-center justify-center`},St={class:`col-12 col-md-auto`},Ct={class:`col-12 col-md-auto`},wt={class:`col-12 col-md-auto`},Tt={class:`row q-col-gutter-xs q-px-xs bottom-row-git`},Et={class:`col-12 col-md-4`},Dt={key:0,class:`col-12 col-md-4`},Ot={class:`bottom-select-label row items-center no-wrap`},kt={key:1,class:`col-12 col-md-4`},At={class:`bottom-select-label row items-center no-wrap`},jt={class:`col-12 col-md-4`},Mt={class:`bottom-select-label row items-center no-wrap`},Nt={class:`row justify-center q-px-sm q-py-sm`},Pt={class:`create-hint text-center text-body2 q-mt-md text-grey-8`},Ft=6e4,D=ve(ae({__name:`CreatePage`,setup(ae){let ve=pe(),T=be(),Ae=de(),E=le(),{t:D}=ue(),It=u([]),Lt=u(``),O=u(``),Rt=u(null),zt=u(``),k=u(!1),A=u(!1),Bt=u(null),Vt=u(null),Ht=u([]),Ut=u(null),j=u(``),M=u(!1),N=u(`claude-opus-4-7`),P=u(`auto`),F=u(``),I=u(null),L=u(`feature`),R=u(!1),Wt=p(()=>E.global.voiceEnabled),Gt=u([]),z=u(`claude-code`),Kt=p(()=>Gt.value.find(e=>e.id===z.value)),qt=p(()=>Gt.value.map(e=>({value:e.id,label:e.displayName}))),Jt=p(()=>E.global.branchPrefixes.map(e=>({label:`${e}/`,value:e}))),Yt=[`plan`,`bypass`,`strict`,`interactive`];function Xt(e,t){let n=e?E.getProjectByPath(e):void 0,r=n?.agentPermissionMode;if(typeof r==`string`&&Yt.includes(r))return r;let i=E.global.defaultPermissionModeByEngine?.[t];return typeof i==`string`&&Yt.includes(i)?i:n?.dangerouslySkipPermissions??E.global.dangerouslySkipPermissions??!0?`bypass`:t===`codex`?`plan`:`interactive`}let B=u(Xt(``,z.value)),Zt=p(()=>{switch(B.value){case`plan`:return`visibility`;case`bypass`:return`flash_on`;case`strict`:return`lock`;case`interactive`:return`security`}}),Qt=p(()=>(we[z.value]??Yt).map(e=>({value:e,label:D(`agentPermissionMode.${e}`),disabled:e===`plan`&&X.value}))),V=u([]),$t=u([]),en=u(!1),tn=u(!1);function nn(e,t){t(()=>{$t.value=e?V.value.filter(t=>t.toLowerCase().includes(e.toLowerCase())):V.value})}let rn=fe();function an(){return Rt.value?.nativeEl??null}let{showSkills:on,selectedSkillIndex:H,groupedDropdown:sn,flatDropdown:U,fetchSkills:cn,detectSlashFragment:ln,replaceFragmentWith:un,closeDropdown:dn}=Ee(O,an,{excludeKoboCommands:!0});cn(),o(O,async()=>{await e(),await ln()});function fn(e){if(e.type===`template`){let t=rn.templates.find(t=>t.slug===e.name);if(!t)return;un(De(t.content,ke({workspace:null,gitStats:null,sessionName:null}))),dn();return}un(`/${e.name} `),dn()}function pn(e){!on.value||U.value.length===0||(e.key===`ArrowDown`?(e.preventDefault(),H.value=(H.value+1)%U.value.length):e.key===`ArrowUp`?(e.preventDefault(),H.value=(H.value-1+U.value.length)%U.value.length):e.key===`Enter`&&!e.shiftKey&&!e.ctrlKey&&!e.metaKey?(e.preventDefault(),fn(U.value[H.value])):e.key===`Escape`&&(e.preventDefault(),dn()))}async function mn(){if(!(!Wt.value||k.value||A.value)){if(!navigator.mediaDevices?.getUserMedia||typeof MediaRecorder>`u`){T.notify({type:`warning`,message:D(`voice.notSupported`),position:`top`,timeout:4e3});return}try{let e=await navigator.mediaDevices.getUserMedia({audio:!0});Vt.value=e,Ht.value=[];let t=MediaRecorder.isTypeSupported(`audio/webm`)?`audio/webm`:``,n=t?new MediaRecorder(e,{mimeType:t}):new MediaRecorder(e);n.ondataavailable=e=>{e.data&&e.data.size>0&&Ht.value.push(e.data)},n.start(),Bt.value=n,k.value=!0,Ut.value=setTimeout(()=>{W(),T.notify({type:`info`,message:D(`voice.maxDurationReached`),position:`top`,timeout:3500})},Ft)}catch{T.notify({type:`negative`,message:D(`voice.errorMicPermission`),position:`top`,timeout:5e3})}}}async function W(){if(!k.value)return;let e=Bt.value;if(!e)return;k.value=!1,A.value=!0,Ut.value&&=(clearTimeout(Ut.value),null);let t=await new Promise(t=>{e.onstop=()=>t(new Blob(Ht.value,{type:`audio/webm`})),e.stop()});try{if(t.size===0)throw Error(`MIC_AUDIO_INVALID`);let e=new FormData;e.append(`audio`,t,`voice.webm`),e.append(`language`,E.global.voiceLanguage||`auto`);let n=await fetch(`/api/voice/transcribe`,{method:`POST`,body:e});if(!n.ok){let e=await n.json().catch(()=>({}));throw Error(String(e.code??e.error??`HTTP_${n.status}`))}let r=await n.json();r.text?.trim()&&(O.value=O.value?`${O.value.trimEnd()} ${r.text.trim()}`:r.text.trim())}catch(e){let t=e instanceof Error?e.message:`TRANSCRIPTION_FAILED`;T.notify({type:`negative`,message:D({VOICE_DISABLED:`voice.errorDisabled`,MODEL_NOT_CONFIGURED:`voice.errorModelMissing`,MODEL_NOT_INSTALLED:`voice.errorModelNotInstalled`,VOICE_RUNTIME_MISSING:`voice.errorRuntimeMissing`,MIC_AUDIO_INVALID:`voice.errorAudioInvalid`,LANGUAGE_INVALID:`voice.errorLanguageInvalid`,TRANSCRIPTION_TIMEOUT:`voice.errorTranscription`}[t]??`voice.errorTranscription`),position:`top`,timeout:5e3})}finally{Bt.value=null,Ht.value=[],Vt.value?.getTracks().forEach(e=>{e.stop()}),Vt.value=null,A.value=!1}}function hn(e){return Wt.value?E.global.voicePttKey===`ctrl+space`?e.ctrlKey&&e.code===`Space`:e.key===`Alt`:!1}function gn(e){!hn(e)||e.repeat||(e.preventDefault(),mn())}function _n(e){hn(e)&&(e.preventDefault(),W())}function vn(){k.value&&W()}function yn(){document.visibilityState!==`visible`&&k.value&&W()}let bn=p(()=>(Se[z.value]??Ce).map(e=>({label:D(e.i18nLabelKey),value:e.value,description:D(e.i18nDescriptionKey)})));o(z,()=>{let e=bn.value.map(e=>e.value);if(e.length>0){let t=E.global.defaultModelByEngine?.[z.value];typeof t==`string`&&e.includes(t)?N.value=t:e.includes(N.value)||(N.value=e.includes(`auto`)?`auto`:e[0]??`auto`)}let t=we[z.value]??[];t.length>0&&!t.includes(B.value)&&(B.value=Xt(F.value,z.value));let n=(Oe[z.value]??[]).map(e=>e.value);n.length>0&&!n.includes(P.value)&&(P.value=n.includes(`auto`)?`auto`:n[0]??`auto`)});function xn(e){let t=e.indexOf(`:`);return t>=0?e.slice(t+1).trim():e}let Sn=p(()=>(Oe[z.value]??Oe[`claude-code`]).map(e=>({value:e.value,label:xn(D(e.i18nLabelKey)),description:D(e.i18nDescriptionKey)}))),G=p(()=>{let e=j.value.trim();return e.startsWith(`https://www.notion.so/`)||e.startsWith(`https://app.notion.com/`)}),Cn=p(()=>/[?&]p=[0-9a-f]{32}(?:[&#]|$)/i.test(j.value)),K=u(`panel`);function wn(){let e=j.value.trim();return K.value===`parent`&&Cn.value?e.replace(/([?&])p=[0-9a-f]{32}(?=[&#]|$)/i,`$1`).replace(/([?&])pm=[a-z]+(?=[&#]|$)/i,`$1`).replace(/[?&]+$/,``).replace(/\?&/,`?`):e}let q=u([]),J=u([]),Tn=u(``),En=u(``),Dn=p(()=>!M.value||!G.value);function On(){let e=Tn.value.trim();e&&(q.value.push(e),Tn.value=``)}function kn(e){q.value.splice(e,1)}function An(){let e=En.value.trim();e&&(J.value.push(e),En.value=``)}function jn(e){J.value.splice(e,1)}function Mn(){M.value=!M.value,M.value||(j.value=``)}let Y=u(!1),X=u(!1);o(()=>X.value,e=>{e&&B.value!==`bypass`&&(B.value=`bypass`,T.notify({type:`info`,message:D(`agentPermissionMode.autoLoopLocked`),timeout:4e3}))});let Z=u(``),Nn=p(()=>/\/issues\/\d+/.test(Z.value.trim()));function Pn(){Y.value=!Y.value,Y.value||(Z.value=``)}let Q=u(!1),$=u(null),Fn=u([]),In=u(!1);async function Ln(){if(!F.value.trim()){Fn.value=[];return}In.value=!0;try{Fn.value=await Ae.fetchOrphanWorktrees(F.value.trim())}catch{Fn.value=[]}finally{In.value=!1}}function Rn(){Q.value=!Q.value,Q.value?(M.value=!1,j.value=``,Y.value=!1,Z.value=``,R.value=!0,Ln()):$.value=null}o(F,()=>{$.value=null,Q.value&&Ln()}),o($,e=>{if(!e)return;let t=Fn.value.find(t=>t.path===e);t&&(I.value=t.suggestedSourceBranch),R.value=!0});async function zn(e){if(!e.trim()){V.value=[],I.value=null;return}en.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{en.value=!1}}function Bn(e){let t=E.getProjectByPath(e);if(t){t.defaultSourceBranch&&(I.value=t.defaultSourceBranch);let e=t.taskPromptTemplate??``;(O.value===``||O.value===zt.value)&&(O.value=e,zt.value=e);let n=bn.value.map(e=>e.value);if(t.defaultModel&&n.includes(t.defaultModel))N.value=t.defaultModel;else{let e=E.global.defaultModelByEngine?.[z.value];typeof e==`string`&&n.includes(e)&&(N.value=e)}}B.value=Xt(e,z.value)}let Vn=null;o(F,e=>{Vn&&clearTimeout(Vn),Vn=setTimeout(()=>{I.value=null,zn(e),Bn(e)},500)});function Hn(e,t){t(()=>{It.value=E.projectPaths.filter(t=>t.toLowerCase().includes(e.toLowerCase()))})}i(async()=>{await E.fetchSettings();let e=E.global.branchPrefixes;e.length>0&&!e.includes(L.value)&&(L.value=e[0]);let t=je();t.autoLoop===!0&&(X.value=!0),t.projectPath&&E.projectPaths.includes(t.projectPath)&&(F.value=t.projectPath),B.value=Xt(F.value,z.value);try{let e=await fetch(`/api/engines`);e.ok&&(Gt.value=await e.json())}catch{}{let e=bn.value.map(e=>e.value),t=E.global.defaultModelByEngine?.[z.value];typeof t==`string`&&e.includes(t)?N.value=t:e.length>0&&!e.includes(N.value)&&(N.value=e.includes(`auto`)?`auto`:e[0]??`auto`)}window.addEventListener(`keydown`,gn),window.addEventListener(`keyup`,_n),window.addEventListener(`blur`,vn),document.addEventListener(`visibilitychange`,yn)}),ee(()=>{Vn&&clearTimeout(Vn),window.removeEventListener(`keydown`,gn),window.removeEventListener(`keyup`,_n),window.removeEventListener(`blur`,vn),document.removeEventListener(`visibilitychange`,yn),Ut.value&&=(clearTimeout(Ut.value),null),k.value&&W()});function Un(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 Wn(){return Lt.value.trim()?Lt.value.trim().substring(0,80):!M.value&&!Y.value&&O.value.trim()&&(O.value.trim().split(`
1
+ import{D as e,E as t,G as n,I as r,N as i,P as ee,R as te,S as ne,St as a,W as o,_ as s,at as c,bt as re,d as l,et as u,f as d,g as f,l as p,p as m,r as ie,u as h,y as ae,yt as oe}from"./runtime-core.esm-bundler-D_RRiKBh.js";import{H as se,R as ce,U as g,t as _}from"./QIcon-BmEX2rXO.js";import{r as v}from"./use-id-BCnfiBjU.js";import{s as le}from"./notifications-l1Pxijve.js";import{t as y}from"./QBtn-CoU-UC_j.js";import{n as ue}from"./vue-i18n-Cq-KgjJC.js";import{t as b}from"./QInput-D0t39uK_.js";import{c as de,g as fe,i as pe,o as me}from"./index-DnKXe7D-.js";import{t as he}from"./QSpinnerDots-DspFKwCZ.js";import{n as x,t as ge}from"./QItemSection-DRg-QuAD.js";import{t as S}from"./QItemLabel-Btqw0P7M.js";import{t as C}from"./QTooltip-CwBZU_bs.js";import{t as _e}from"./QExpansionItem-CiBP4NiY.js";import{t as ve}from"./_plugin-vue_export-helper-r4mAJOHR.js";import{t as ye}from"./QSpace-Crcx82On.js";import{t as be}from"./use-quasar-q6dh7QVJ.js";import{t as xe}from"./QPage-3-ah4oor.js";import{a as w,i as Se,r as Ce,t as we}from"./permissionModes-BT5h2RfC.js";import{a as Te,i as Ee,n as De,r as Oe,t as ke}from"./expand-template-DijLIEI5.js";var T=`kobo:create-page-prefs`;function Ae(){try{let e=localStorage.getItem(T);return e===null?void 0:JSON.parse(e)}catch{return}}function E(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function je(){let e=Ae();if(!E(e))return{};let t={};return typeof e.projectPath==`string`&&e.projectPath.length>0&&(t.projectPath=e.projectPath),typeof e.autoLoop==`boolean`&&(t.autoLoop=e.autoLoop),t}function Me(e){try{localStorage.setItem(T,JSON.stringify(e))}catch{}}var Ne={class:`create-inner`},Pe={class:`create-title text-center text-weight-bold q-mb-lg text-grey-3`},Fe={class:`create-card rounded-borders`},Ie={class:`card-top-bar row items-center q-px-md q-py-xs`},Le={class:`model-badge cursor-default row items-center q-gutter-xs`},Re={class:`text-indigo-3 text-weight-medium text-caption`},ze={key:0,class:`notion-url-wrap`},Be={key:0,class:`notion-error text-caption q-px-md q-pb-xs text-red-5`},Ve={key:1,class:`notion-valid text-caption q-px-md q-pb-xs text-green-4`},He={key:2,class:`notion-peek-choice q-px-md q-pb-sm`},Ue={class:`text-caption text-grey-4 q-mb-sm`},We={class:`row q-gutter-sm`},Ge={class:`peek-card-text`},Ke={class:`peek-card-title`},qe={class:`peek-card-desc`},Je={class:`peek-card-text`},Ye={class:`peek-card-title`},Xe={class:`peek-card-desc`},Ze={key:0,class:`sentry-url-wrap`},Qe={key:0,class:`sentry-error text-caption q-px-md q-pb-xs text-red-5`},$e={key:1,class:`sentry-valid text-caption q-px-md q-pb-xs text-red-4`},et={class:`card-name-wrap`},tt={class:`card-textarea-wrap`},nt={class:`row items-center justify-end q-px-sm q-pb-xs q-gutter-sm`},rt={key:0,class:`row items-center text-caption text-amber-6`},it={class:`manual-hint q-px-md q-py-sm text-caption text-grey-6`},at={class:`q-pa-sm manual-section-body`},ot={class:`row items-center q-gutter-sm q-mb-sm`},st={class:`col text-caption text-grey-4`},ct={class:`q-pa-sm manual-section-body`},lt={class:`row items-center q-gutter-sm q-mb-sm`},ut={class:`col text-caption text-grey-4`},dt={class:`card-bottom-bar`},ft={class:`row q-col-gutter-xs q-px-xs`},pt={key:0,class:`col-12 col-sm-6 col-md-3`},mt={class:`bottom-select-label row items-center no-wrap`},ht={class:`col-12 col-sm-6 col-md-3`},gt={class:`bottom-select-label row items-center no-wrap`},_t={class:`col-12 col-sm-6 col-md-3`},vt={class:`bottom-select-label row items-center no-wrap`},yt={class:`col-12 col-md-3`},bt={class:`bottom-select-label row items-center no-wrap`},xt={class:`row q-col-gutter-xs q-pa-xs col-12 items-center justify-center`},St={class:`col-12 col-md-auto`},Ct={class:`col-12 col-md-auto`},wt={class:`col-12 col-md-auto`},Tt={class:`row q-col-gutter-xs q-px-xs bottom-row-git`},Et={class:`col-12 col-md-4`},Dt={key:0,class:`col-12 col-md-4`},Ot={class:`bottom-select-label row items-center no-wrap`},kt={key:1,class:`col-12 col-md-4`},At={class:`bottom-select-label row items-center no-wrap`},jt={class:`col-12 col-md-4`},Mt={class:`bottom-select-label row items-center no-wrap`},Nt={class:`row justify-center q-px-sm q-py-sm`},Pt={class:`create-hint text-center text-body2 q-mt-md text-grey-8`},Ft=6e4,D=ve(ae({__name:`CreatePage`,setup(ae){let ve=pe(),T=be(),Ae=de(),E=le(),{t:D}=ue(),It=u([]),Lt=u(``),O=u(``),Rt=u(null),zt=u(``),k=u(!1),A=u(!1),Bt=u(null),Vt=u(null),Ht=u([]),Ut=u(null),j=u(``),M=u(!1),N=u(`claude-opus-4-7`),P=u(`auto`),F=u(``),I=u(null),L=u(`feature`),R=u(!1),Wt=p(()=>E.global.voiceEnabled),Gt=u([]),z=u(`claude-code`),Kt=p(()=>Gt.value.find(e=>e.id===z.value)),qt=p(()=>Gt.value.map(e=>({value:e.id,label:e.displayName}))),Jt=p(()=>E.global.branchPrefixes.map(e=>({label:`${e}/`,value:e}))),Yt=[`plan`,`bypass`,`strict`,`interactive`];function Xt(e,t){let n=e?E.getProjectByPath(e):void 0,r=n?.agentPermissionMode;if(typeof r==`string`&&Yt.includes(r))return r;let i=E.global.defaultPermissionModeByEngine?.[t];return typeof i==`string`&&Yt.includes(i)?i:n?.dangerouslySkipPermissions??E.global.dangerouslySkipPermissions??!0?`bypass`:t===`codex`?`plan`:`interactive`}let B=u(Xt(``,z.value)),Zt=p(()=>{switch(B.value){case`plan`:return`visibility`;case`bypass`:return`flash_on`;case`strict`:return`lock`;case`interactive`:return`security`}}),Qt=p(()=>(we[z.value]??Yt).map(e=>({value:e,label:D(`agentPermissionMode.${e}`),disabled:e===`plan`&&X.value}))),V=u([]),$t=u([]),en=u(!1),tn=u(!1);function nn(e,t){t(()=>{$t.value=e?V.value.filter(t=>t.toLowerCase().includes(e.toLowerCase())):V.value})}let rn=fe();function an(){return Rt.value?.nativeEl??null}let{showSkills:on,selectedSkillIndex:H,groupedDropdown:sn,flatDropdown:U,fetchSkills:cn,detectSlashFragment:ln,replaceFragmentWith:un,closeDropdown:dn}=Ee(O,an,{excludeKoboCommands:!0});cn(),o(O,async()=>{await e(),await ln()});function fn(e){if(e.type===`template`){let t=rn.templates.find(t=>t.slug===e.name);if(!t)return;un(De(t.content,ke({workspace:null,gitStats:null,sessionName:null}))),dn();return}un(`/${e.name} `),dn()}function pn(e){!on.value||U.value.length===0||(e.key===`ArrowDown`?(e.preventDefault(),H.value=(H.value+1)%U.value.length):e.key===`ArrowUp`?(e.preventDefault(),H.value=(H.value-1+U.value.length)%U.value.length):e.key===`Enter`&&!e.shiftKey&&!e.ctrlKey&&!e.metaKey?(e.preventDefault(),fn(U.value[H.value])):e.key===`Escape`&&(e.preventDefault(),dn()))}async function mn(){if(!(!Wt.value||k.value||A.value)){if(!navigator.mediaDevices?.getUserMedia||typeof MediaRecorder>`u`){T.notify({type:`warning`,message:D(`voice.notSupported`),position:`top`,timeout:4e3});return}try{let e=await navigator.mediaDevices.getUserMedia({audio:!0});Vt.value=e,Ht.value=[];let t=MediaRecorder.isTypeSupported(`audio/webm`)?`audio/webm`:``,n=t?new MediaRecorder(e,{mimeType:t}):new MediaRecorder(e);n.ondataavailable=e=>{e.data&&e.data.size>0&&Ht.value.push(e.data)},n.start(),Bt.value=n,k.value=!0,Ut.value=setTimeout(()=>{W(),T.notify({type:`info`,message:D(`voice.maxDurationReached`),position:`top`,timeout:3500})},Ft)}catch{T.notify({type:`negative`,message:D(`voice.errorMicPermission`),position:`top`,timeout:5e3})}}}async function W(){if(!k.value)return;let e=Bt.value;if(!e)return;k.value=!1,A.value=!0,Ut.value&&=(clearTimeout(Ut.value),null);let t=await new Promise(t=>{e.onstop=()=>t(new Blob(Ht.value,{type:`audio/webm`})),e.stop()});try{if(t.size===0)throw Error(`MIC_AUDIO_INVALID`);let e=new FormData;e.append(`audio`,t,`voice.webm`),e.append(`language`,E.global.voiceLanguage||`auto`);let n=await fetch(`/api/voice/transcribe`,{method:`POST`,body:e});if(!n.ok){let e=await n.json().catch(()=>({}));throw Error(String(e.code??e.error??`HTTP_${n.status}`))}let r=await n.json();r.text?.trim()&&(O.value=O.value?`${O.value.trimEnd()} ${r.text.trim()}`:r.text.trim())}catch(e){let t=e instanceof Error?e.message:`TRANSCRIPTION_FAILED`;T.notify({type:`negative`,message:D({VOICE_DISABLED:`voice.errorDisabled`,MODEL_NOT_CONFIGURED:`voice.errorModelMissing`,MODEL_NOT_INSTALLED:`voice.errorModelNotInstalled`,VOICE_RUNTIME_MISSING:`voice.errorRuntimeMissing`,MIC_AUDIO_INVALID:`voice.errorAudioInvalid`,LANGUAGE_INVALID:`voice.errorLanguageInvalid`,TRANSCRIPTION_TIMEOUT:`voice.errorTranscription`}[t]??`voice.errorTranscription`),position:`top`,timeout:5e3})}finally{Bt.value=null,Ht.value=[],Vt.value?.getTracks().forEach(e=>{e.stop()}),Vt.value=null,A.value=!1}}function hn(e){return Wt.value?E.global.voicePttKey===`ctrl+space`?e.ctrlKey&&e.code===`Space`:e.key===`Alt`:!1}function gn(e){!hn(e)||e.repeat||(e.preventDefault(),mn())}function _n(e){hn(e)&&(e.preventDefault(),W())}function vn(){k.value&&W()}function yn(){document.visibilityState!==`visible`&&k.value&&W()}let bn=p(()=>(Se[z.value]??Ce).map(e=>({label:D(e.i18nLabelKey),value:e.value,description:D(e.i18nDescriptionKey)})));o(z,()=>{let e=bn.value.map(e=>e.value);if(e.length>0){let t=E.global.defaultModelByEngine?.[z.value];typeof t==`string`&&e.includes(t)?N.value=t:e.includes(N.value)||(N.value=e.includes(`auto`)?`auto`:e[0]??`auto`)}let t=we[z.value]??[];t.length>0&&!t.includes(B.value)&&(B.value=Xt(F.value,z.value));let n=(Oe[z.value]??[]).map(e=>e.value);n.length>0&&!n.includes(P.value)&&(P.value=n.includes(`auto`)?`auto`:n[0]??`auto`)});function xn(e){let t=e.indexOf(`:`);return t>=0?e.slice(t+1).trim():e}let Sn=p(()=>(Oe[z.value]??Oe[`claude-code`]).map(e=>({value:e.value,label:xn(D(e.i18nLabelKey)),description:D(e.i18nDescriptionKey)}))),G=p(()=>{let e=j.value.trim();return e.startsWith(`https://www.notion.so/`)||e.startsWith(`https://app.notion.com/`)}),Cn=p(()=>/[?&]p=[0-9a-f]{32}(?:[&#]|$)/i.test(j.value)),K=u(`panel`);function wn(){let e=j.value.trim();return K.value===`parent`&&Cn.value?e.replace(/([?&])p=[0-9a-f]{32}(?=[&#]|$)/i,`$1`).replace(/([?&])pm=[a-z]+(?=[&#]|$)/i,`$1`).replace(/[?&]+$/,``).replace(/\?&/,`?`):e}let q=u([]),J=u([]),Tn=u(``),En=u(``),Dn=p(()=>!M.value||!G.value);function On(){let e=Tn.value.trim();e&&(q.value.push(e),Tn.value=``)}function kn(e){q.value.splice(e,1)}function An(){let e=En.value.trim();e&&(J.value.push(e),En.value=``)}function jn(e){J.value.splice(e,1)}function Mn(){M.value=!M.value,M.value||(j.value=``)}let Y=u(!1),X=u(!1);o(()=>X.value,e=>{e&&B.value!==`bypass`&&(B.value=`bypass`,T.notify({type:`info`,message:D(`agentPermissionMode.autoLoopLocked`),timeout:4e3}))});let Z=u(``),Nn=p(()=>/\/issues\/\d+/.test(Z.value.trim()));function Pn(){Y.value=!Y.value,Y.value||(Z.value=``)}let Q=u(!1),$=u(null),Fn=u([]),In=u(!1);async function Ln(){if(!F.value.trim()){Fn.value=[];return}In.value=!0;try{Fn.value=await Ae.fetchOrphanWorktrees(F.value.trim())}catch{Fn.value=[]}finally{In.value=!1}}function Rn(){Q.value=!Q.value,Q.value?(M.value=!1,j.value=``,Y.value=!1,Z.value=``,R.value=!0,Ln()):$.value=null}o(F,()=>{$.value=null,Q.value&&Ln()}),o($,e=>{if(!e)return;let t=Fn.value.find(t=>t.path===e);t&&(I.value=t.suggestedSourceBranch),R.value=!0});async function zn(e){if(!e.trim()){V.value=[],I.value=null;return}en.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{en.value=!1}}function Bn(e){let t=E.getProjectByPath(e);if(t){t.defaultSourceBranch&&(I.value=t.defaultSourceBranch);let e=t.taskPromptTemplate??``;(O.value===``||O.value===zt.value)&&(O.value=e,zt.value=e);let n=bn.value.map(e=>e.value);if(t.defaultModel&&n.includes(t.defaultModel))N.value=t.defaultModel;else{let e=E.global.defaultModelByEngine?.[z.value];typeof e==`string`&&n.includes(e)&&(N.value=e)}}B.value=Xt(e,z.value)}let Vn=null;o(F,e=>{Vn&&clearTimeout(Vn),Vn=setTimeout(()=>{I.value=null,zn(e),Bn(e)},500)});function Hn(e,t){t(()=>{It.value=E.projectPaths.filter(t=>t.toLowerCase().includes(e.toLowerCase()))})}i(async()=>{await E.fetchSettings();let e=E.global.branchPrefixes;e.length>0&&!e.includes(L.value)&&(L.value=e[0]);let t=je();t.autoLoop===!0&&(X.value=!0),t.projectPath&&E.projectPaths.includes(t.projectPath)&&(F.value=t.projectPath),B.value=Xt(F.value,z.value);try{let e=await fetch(`/api/engines`);e.ok&&(Gt.value=await e.json())}catch{}{let e=bn.value.map(e=>e.value),t=E.global.defaultModelByEngine?.[z.value];typeof t==`string`&&e.includes(t)?N.value=t:e.length>0&&!e.includes(N.value)&&(N.value=e.includes(`auto`)?`auto`:e[0]??`auto`)}window.addEventListener(`keydown`,gn),window.addEventListener(`keyup`,_n),window.addEventListener(`blur`,vn),document.addEventListener(`visibilitychange`,yn)}),ee(()=>{Vn&&clearTimeout(Vn),window.removeEventListener(`keydown`,gn),window.removeEventListener(`keyup`,_n),window.removeEventListener(`blur`,vn),document.removeEventListener(`visibilitychange`,yn),Ut.value&&=(clearTimeout(Ut.value),null),k.value&&W()});function Un(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 Wn(){return Lt.value.trim()?Lt.value.trim().substring(0,80):!M.value&&!Y.value&&O.value.trim()&&(O.value.trim().split(`
2
2
  `)[0]??``).substring(0,80)||`workspace`}function Gn(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 Kn(){return M.value&&!G.value?D(`createPage.validationNotionUrl`):Y.value&&!Nn.value?D(`createPage.sentryValidation`):!M.value&&!Y.value&&!O.value.trim()?D(`createPage.validationDescription`):!M.value&&!Y.value&&(!Wn()||Wn()===`workspace`)&&!Lt.value.trim()&&!O.value.trim()?D(`createPage.validationName`):F.value.trim()?I.value?null:D(`createPage.validationBranch`):D(`createPage.validationPath`)}async function qn(){let e=Kn();if(e){T.notify({type:`negative`,message:e,position:`top`});return}if(Q.value&&!$.value){T.notify({type:`negative`,message:D(`createPage.pickWorktreeRequired`),position:`top`});return}tn.value=!0;try{let e=Wn(),t;t=M.value&&G.value?Gn(wn()):e===`workspace`?`task-${Date.now()}`:Un(e);let n=`${L.value}/${t}`,r={name:e,projectPath:F.value.trim(),sourceBranch:I.value,...Q.value&&$.value?{worktreePath:$.value,skipSetupScript:!0}:{workingBranch:n},engine:z.value,model:N.value,reasoningEffort:P.value,...M.value&&G.value?{notionUrl:wn()}:{},...Y.value&&Nn.value?{sentryUrl:Z.value.trim()}:{},...Dn.value&&q.value.length>0?{tasks:q.value}:{},...Dn.value&&J.value.length>0?{acceptanceCriteria:J.value}:{},...R.value&&!Q.value?{skipSetupScript:!0}:{},...O.value.trim()?{description:O.value.trim()}:{},...X.value?{autoLoop:!0}:{},agentPermissionMode:X.value&&B.value===`plan`?`bypass`:B.value},i=await Ae.createWorkspace(r);i._branchAdjusted&&T.notify({type:`info`,message:D(`createPage.branchAdjusted`,{branch:i.workingBranch}),position:`top`,timeout:6e3}),Me({projectPath:F.value.trim(),autoLoop:X.value}),me().subscribe(i.id),Ae.selectWorkspace(i.id),ve.push({name:`workspace`,params:{id:i.id}})}catch{T.notify({type:`negative`,message:D(`createPage.errorCreating`),position:`top`})}finally{tn.value=!1}}return(e,i)=>(r(),l(xe,{class:`create-page flex flex-center column`},{default:n(()=>[h(`div`,Ne,[h(`div`,Pe,a(e.$t(`createPage.title`)),1),h(`div`,Fe,[h(`div`,Ie,[h(`span`,Le,[s(_,{name:`auto_awesome`,size:`14px`,color:`indigo-4`}),h(`span`,Re,a(Kt.value?.displayName??e.$t(`createPage.claudeCode`)),1)]),s(ye),s(y,{flat:``,dense:``,"no-caps":``,size:`sm`,color:M.value?`green-4`:`grey-5`,class:`notion-toggle-btn text-caption rounded-borders`,disable:Q.value,onClick:Mn},{default:n(()=>[s(_,{name:`description`,size:`14px`,class:`q-mr-xs`}),f(` `+a(M.value?e.$t(`createPage.notionEnabled`):e.$t(`createPage.importNotion`)),1)]),_:1},8,[`color`,`disable`]),s(y,{flat:``,dense:``,"no-caps":``,size:`sm`,color:Y.value?`red-4`:`grey-5`,class:`sentry-toggle-btn text-caption rounded-borders q-ml-sm`,disable:Q.value,onClick:Pn},{default:n(()=>[s(_,{name:`bug_report`,size:`14px`,class:`q-mr-xs`}),f(` `+a(Y.value?e.$t(`createPage.sentryEnabled`):e.$t(`createPage.importSentry`)),1)]),_:1},8,[`color`,`disable`])]),s(v,{color:`grey-9`}),s(ce,{name:`slide`},{default:n(()=>[M.value?(r(),m(`div`,ze,[s(b,{modelValue:j.value,"onUpdate:modelValue":i[0]||=e=>j.value=e,borderless:``,dense:``,placeholder:e.$t(`createPage.notionPlaceholder`),class:`notion-url-input`,"input-class":`notion-url-input-inner`},{prepend:n(()=>[s(_,{name:`link`,size:`16px`,color:G.value?`green-4`:`grey-6`},null,8,[`color`])]),_:1},8,[`modelValue`,`placeholder`]),j.value.trim()&&!G.value?(r(),m(`div`,Be,a(e.$t(`createPage.notionValidation`)),1)):d(``,!0),G.value?(r(),m(`div`,Ve,a(e.$t(`createPage.notionAutoExtract`)),1)):d(``,!0),G.value&&Cn.value?(r(),m(`div`,He,[h(`div`,Ue,[s(_,{name:`info`,size:`14px`,color:`indigo-4`,class:`q-mr-xs`}),f(` `+a(e.$t(`createPage.notionPanelChoiceLabel`)),1)]),h(`div`,We,[h(`button`,{type:`button`,class:oe([`peek-card col`,{"peek-card--active":K.value===`panel`}]),onClick:i[1]||=e=>K.value=`panel`},[s(_,{name:`article`,size:`22px`,class:`peek-card-icon`}),h(`div`,Ge,[h(`div`,Ke,a(e.$t(`createPage.notionPanelOption`)),1),h(`div`,qe,a(e.$t(`createPage.notionPanelOptionDesc`)),1)]),K.value===`panel`?(r(),l(_,{key:0,name:`check_circle`,size:`18px`,color:`indigo-4`,class:`peek-card-check`})):d(``,!0)],2),h(`button`,{type:`button`,class:oe([`peek-card col`,{"peek-card--active":K.value===`parent`}]),onClick:i[2]||=e=>K.value=`parent`},[s(_,{name:`folder_open`,size:`22px`,class:`peek-card-icon`}),h(`div`,Je,[h(`div`,Ye,a(e.$t(`createPage.notionParentOption`)),1),h(`div`,Xe,a(e.$t(`createPage.notionParentOptionDesc`)),1)]),K.value===`parent`?(r(),l(_,{key:0,name:`check_circle`,size:`18px`,color:`indigo-4`,class:`peek-card-check`})):d(``,!0)],2)])])):d(``,!0)])):d(``,!0)]),_:1}),M.value?(r(),l(v,{key:0,color:`grey-9`})):d(``,!0),s(ce,{name:`slide`},{default:n(()=>[Y.value?(r(),m(`div`,Ze,[s(b,{modelValue:Z.value,"onUpdate:modelValue":i[3]||=e=>Z.value=e,borderless:``,dense:``,placeholder:e.$t(`createPage.sentryPlaceholder`),class:`sentry-url-input`,"input-class":`sentry-url-input-inner`},{prepend:n(()=>[s(_,{name:`link`,size:`16px`,color:Nn.value?`red-4`:`grey-6`},null,8,[`color`])]),_:1},8,[`modelValue`,`placeholder`]),Z.value.trim()&&!Nn.value?(r(),m(`div`,Qe,a(e.$t(`createPage.sentryValidation`)),1)):d(``,!0),Nn.value?(r(),m(`div`,$e,a(e.$t(`createPage.sentryAutoExtract`)),1)):d(``,!0)])):d(``,!0)]),_:1}),Y.value?(r(),l(v,{key:1,color:`grey-9`})):d(``,!0),h(`div`,et,[s(b,{modelValue:Lt.value,"onUpdate:modelValue":i[4]||=e=>Lt.value=e,borderless:``,dense:``,placeholder:M.value&&G.value?e.$t(`createPage.workspaceName`):e.$t(`createPage.workspaceNamePlaceholder`),class:`name-input`,"input-class":`name-input-inner`},null,8,[`modelValue`,`placeholder`])]),s(v,{color:`grey-9`}),h(`div`,tt,[s(b,{ref_key:`descriptionRef`,ref:Rt,modelValue:O.value,"onUpdate:modelValue":i[5]||=e=>O.value=e,type:`textarea`,borderless:``,autogrow:``,rows:3,placeholder:M.value?e.$t(`createPage.instructions`):e.$t(`createPage.instructionsPlaceholder`),class:`create-textarea`,"input-class":`create-textarea-input`,onKeydown:[pn,se(g(qn,[`ctrl`]),[`enter`]),se(g(qn,[`meta`]),[`enter`])]},null,8,[`modelValue`,`placeholder`,`onKeydown`]),h(`div`,nt,[A.value?(r(),m(`div`,rt,[s(he,{size:`14px`,color:`amber-6`,class:`q-mr-xs`}),h(`span`,null,a(e.$t(`voice.transcribing`)),1)])):d(``,!0),s(y,{flat:``,dense:``,size:`sm`,icon:A.value?`hourglass_top`:k.value?`mic`:`mic_none`,color:k.value?`red-5`:A.value?`amber-6`:`grey-6`,disable:!Wt.value||A.value,class:oe({"voice-btn--recording":k.value}),onMousedown:g(mn,[`prevent`]),onMouseup:g(W,[`prevent`]),onMouseleave:g(W,[`prevent`]),onTouchstart:g(mn,[`prevent`]),onTouchend:g(W,[`prevent`])},{default:n(()=>[s(C,null,{default:n(()=>[f(a(A.value?e.$t(`voice.transcribing`):k.value?e.$t(`voice.recording`):e.$t(`voice.holdToTalk`)),1)]),_:1})]),_:1},8,[`icon`,`color`,`disable`,`class`])]),c(on)&&c(U).length>0?(r(),l(Te,{key:0,class:`create-slash-popup`,"grouped-dropdown":c(sn),"flat-dropdown":c(U),"selected-index":c(H),onSelect:fn},null,8,[`grouped-dropdown`,`flat-dropdown`,`selected-index`])):d(``,!0)]),s(v,{color:`grey-9`}),Dn.value?(r(),m(ie,{key:2},[h(`div`,it,a(e.$t(`createPage.manualHint`)),1),s(_e,{dark:``,dense:``,label:e.$t(`createPage.tasks`,{count:q.value.length}),"header-class":`text-grey-4 manual-expansion-header`,class:`manual-expansion q-mx-sm`},{default:n(()=>[h(`div`,at,[h(`div`,ot,[s(b,{modelValue:Tn.value,"onUpdate:modelValue":i[6]||=e=>Tn.value=e,dark:``,dense:``,borderless:``,placeholder:e.$t(`createPage.addTask`),class:`col manual-input`,"input-class":`manual-input-inner`,onKeydown:se(g(On,[`prevent`]),[`enter`])},null,8,[`modelValue`,`placeholder`,`onKeydown`]),s(y,{flat:``,dense:``,round:``,icon:`add`,color:`indigo-4`,disable:!Tn.value.trim(),onClick:On},{default:n(()=>[s(C,null,{default:n(()=>[f(a(e.$t(`tooltip.addTask`)),1)]),_:1})]),_:1},8,[`disable`])]),(r(!0),m(ie,null,te(q.value,(t,i)=>(r(),m(`div`,{key:`task-${i}`,class:`row items-center q-py-xs manual-item`},[h(`span`,st,a(t),1),s(y,{flat:``,dense:``,round:``,icon:`close`,size:`xs`,color:`grey-6`,onClick:e=>kn(i)},{default:n(()=>[s(C,null,{default:n(()=>[f(a(e.$t(`tooltip.removeTask`)),1)]),_:1})]),_:1},8,[`onClick`])]))),128))])]),_:1},8,[`label`]),s(_e,{dark:``,dense:``,label:e.$t(`createPage.acceptanceCriteria`,{count:J.value.length}),"header-class":`text-grey-4 manual-expansion-header`,class:`manual-expansion q-mx-sm q-mb-sm`},{default:n(()=>[h(`div`,ct,[h(`div`,lt,[s(b,{modelValue:En.value,"onUpdate:modelValue":i[7]||=e=>En.value=e,dark:``,dense:``,borderless:``,placeholder:e.$t(`createPage.addCriterion`),class:`col manual-input`,"input-class":`manual-input-inner`,onKeydown:se(g(An,[`prevent`]),[`enter`])},null,8,[`modelValue`,`placeholder`,`onKeydown`]),s(y,{flat:``,dense:``,round:``,icon:`add`,color:`indigo-4`,disable:!En.value.trim(),onClick:An},{default:n(()=>[s(C,null,{default:n(()=>[f(a(e.$t(`tooltip.addCriterion`)),1)]),_:1})]),_:1},8,[`disable`])]),(r(!0),m(ie,null,te(J.value,(t,i)=>(r(),m(`div`,{key:`crit-${i}`,class:`row items-center q-py-xs manual-item`},[h(`span`,ut,a(t),1),s(y,{flat:``,dense:``,round:``,icon:`close`,size:`xs`,color:`grey-6`,onClick:e=>jn(i)},{default:n(()=>[s(C,null,{default:n(()=>[f(a(e.$t(`tooltip.removeCriterion`)),1)]),_:1})]),_:1},8,[`onClick`])]))),128))])]),_:1},8,[`label`]),s(v,{color:`grey-9`})],64)):d(``,!0),h(`div`,dt,[h(`div`,ft,[qt.value.length>0?(r(),m(`div`,pt,[s(w,{modelValue:z.value,"onUpdate:modelValue":i[8]||=e=>z.value=e,options:qt.value,dense:``,borderless:``,class:`bottom-select rounded-borders`,"hide-dropdown-icon":``,"emit-value":``,"map-options":``,"option-value":`value`,"option-label":`label`},{selected:n(()=>[h(`span`,mt,[s(_,{name:`hub`,size:`12px`,color:`grey-5`,class:`q-mr-xs`}),f(` `+a(qt.value.find(e=>e.value===z.value)?.label??z.value)+` `,1),s(_,{name:`expand_more`,size:`12px`,color:`grey-5`})])]),default:n(()=>[s(C,null,{default:n(()=>[f(a(e.$t(`engine.select`)),1)]),_:1})]),_:1},8,[`modelValue`,`options`])])):d(``,!0),h(`div`,ht,[s(w,{modelValue:N.value,"onUpdate:modelValue":i[9]||=e=>N.value=e,options:bn.value,dense:``,borderless:``,class:`bottom-select rounded-borders model-select`,"hide-dropdown-icon":``,"emit-value":``,"map-options":``,"option-value":`value`,"option-label":`label`},{selected:n(()=>[h(`span`,gt,[f(a(bn.value.find(e=>e.value===N.value)?.label??N.value)+` `,1),s(_,{name:`expand_more`,size:`12px`,color:`grey-5`})])]),option:n(({opt:e,itemProps:r})=>[s(x,t(r,{class:`model-option`}),{default:n(()=>[s(ge,null,{default:n(()=>[s(S,{class:`text-white`},{default:n(()=>[f(a(e.label),1)]),_:2},1024),s(S,{caption:``,class:`text-grey-5`},{default:n(()=>[f(a(e.description),1)]),_:2},1024)]),_:2},1024)]),_:2},1040)]),_:1},8,[`modelValue`,`options`])]),h(`div`,_t,[s(w,{modelValue:P.value,"onUpdate:modelValue":i[10]||=e=>P.value=e,options:Sn.value,dense:``,borderless:``,class:`bottom-select rounded-borders`,"hide-dropdown-icon":``,"emit-value":``,"map-options":``,"option-value":`value`,"option-label":`label`},{selected:n(()=>[h(`span`,vt,[s(_,{name:`psychology`,size:`12px`,color:`grey-5`,class:`q-mr-xs`}),f(` `+a(Sn.value.find(e=>e.value===P.value)?.label??P.value)+` `,1),s(_,{name:`expand_more`,size:`12px`,color:`grey-5`})])]),option:n(({opt:e,itemProps:t})=>[s(x,re(ne(t)),{default:n(()=>[s(ge,null,{default:n(()=>[s(S,{class:`text-white`},{default:n(()=>[f(a(e.label),1)]),_:2},1024),s(S,{caption:``,class:`text-grey-5`},{default:n(()=>[f(a(e.description),1)]),_:2},1024)]),_:2},1024)]),_:2},1040)]),_:1},8,[`modelValue`,`options`])]),h(`div`,yt,[s(w,{modelValue:B.value,"onUpdate:modelValue":i[11]||=e=>B.value=e,options:Qt.value,disable:X.value,dense:``,borderless:``,class:`bottom-select rounded-borders`,"hide-dropdown-icon":``,"emit-value":``,"map-options":``,"option-value":`value`,"option-label":`label`,"option-disable":e=>e.disabled===!0},{selected:n(()=>[h(`span`,bt,[s(_,{name:Zt.value,size:`12px`,color:`amber-6`,class:`q-mr-xs`},null,8,[`name`]),f(` `+a(Qt.value.find(e=>e.value===B.value)?.label??B.value)+` `,1),X.value?d(``,!0):(r(),l(_,{key:0,name:`expand_more`,size:`12px`,color:`grey-5`}))])]),default:n(()=>[s(C,null,{default:n(()=>[f(a(X.value?e.$t(`agentPermissionMode.autoLoopLocked`):e.$t(`agentPermissionMode.tooltip`)),1)]),_:1})]),_:1},8,[`modelValue`,`options`,`disable`,`option-disable`])])]),h(`div`,xt,[h(`div`,St,[s(y,{flat:``,dense:``,size:`sm`,"no-caps":``,icon:X.value?`autorenew`:`sync_disabled`,color:X.value?`amber-4`:`grey-5`,label:e.$t(`autoLoop.startInMode`),class:`skip-setup-btn`,onClick:i[12]||=e=>X.value=!X.value},{default:n(()=>[s(C,null,{default:n(()=>[f(a(e.$t(`autoLoop.startInMode`)),1)]),_:1})]),_:1},8,[`icon`,`color`,`label`])]),h(`div`,Ct,[s(y,{flat:``,dense:``,size:`sm`,"no-caps":``,icon:R.value?`play_disabled`:`play_circle`,color:R.value?`orange-4`:`grey-5`,label:e.$t(`createPage.skipSetupScript`),class:`skip-setup-btn`,onClick:i[13]||=e=>R.value=!R.value},{default:n(()=>[s(C,null,{default:n(()=>[f(a(e.$t(`createPage.skipSetupScript`)),1)]),_:1})]),_:1},8,[`icon`,`color`,`label`])]),h(`div`,wt,[s(y,{flat:``,dense:``,size:`sm`,"no-caps":``,icon:`folder_open`,color:Q.value?`cyan-4`:`grey-5`,label:Q.value?e.$t(`createPage.attachWorktreeEnabled`):e.$t(`createPage.attachWorktreeToggle`),class:`skip-setup-btn`,onClick:Rn},null,8,[`color`,`label`])])]),h(`div`,Tt,[h(`div`,Et,[s(w,{modelValue:F.value,"onUpdate:modelValue":i[14]||=e=>F.value=e,options:It.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:e.$t(`createPage.projectPath`),behavior:c(E).projectPaths.length>0?`menu`:`dialog`,onFilter:Hn,onInputValue:i[15]||=e=>{F.value=e}},{prepend:n(()=>[s(_,{name:`folder`,size:`14px`,color:`grey-5`})]),"no-option":n(()=>[s(x,null,{default:n(()=>[s(ge,{class:`text-grey-6 text-caption`},{default:n(()=>[f(a(e.$t(`createPage.enterPath`)),1)]),_:1})]),_:1})]),_:1},8,[`modelValue`,`options`,`input-class`,`placeholder`,`behavior`])]),Q.value?d(``,!0):(r(),m(`div`,Dt,[s(w,{modelValue:L.value,"onUpdate:modelValue":i[16]||=e=>L.value=e,options:Jt.value,"emit-value":``,"map-options":``,dense:``,borderless:``,class:`bottom-select rounded-borders branch-type-select`,"hide-dropdown-icon":``},{selected:n(()=>[h(`span`,Ot,[s(_,{name:`account_tree`,size:`12px`,color:`grey-5`,class:`q-mr-xs`}),f(` `+a(L.value)+`/ `,1),s(_,{name:`expand_more`,size:`12px`,color:`grey-5`})])]),default:n(()=>[s(C,null,{default:n(()=>[f(a(e.$t(`createPage.branchType`)),1)]),_:1})]),_:1},8,[`modelValue`,`options`])])),Q.value?(r(),m(`div`,kt,[s(w,{modelValue:$.value,"onUpdate:modelValue":i[17]||=e=>$.value=e,options:Fn.value,"option-label":`branch`,"option-value":`path`,"emit-value":``,"map-options":``,"use-input":``,dense:``,borderless:``,class:`bottom-select rounded-borders worktree-select`,"hide-dropdown-icon":``,loading:In.value,disable:!F.value.trim()||In.value},{selected:n(()=>[h(`span`,At,[s(_,{name:`folder_open`,size:`12px`,color:`cyan-5`,class:`q-mr-xs`}),f(` `+a($.value?Fn.value.find(e=>e.path===$.value)?.branch??$.value:e.$t(`createPage.worktreePickerLabel`))+` `,1),s(_,{name:`expand_more`,size:`12px`,color:`grey-5`})])]),option:n(e=>[s(x,re(ne(e.itemProps)),{default:n(()=>[s(ge,null,{default:n(()=>[s(S,null,{default:n(()=>[f(a(e.opt.branch),1)]),_:2},1024),s(S,{caption:``},{default:n(()=>[f(a(e.opt.path),1)]),_:2},1024)]),_:2},1024)]),_:2},1040)]),"no-option":n(()=>[s(x,null,{default:n(()=>[s(ge,{class:`text-grey-6 text-caption`},{default:n(()=>[f(a(F.value.trim()?e.$t(`createPage.noOrphanWorktrees`):e.$t(`createPage.enterPath`)),1)]),_:1})]),_:1})]),_:1},8,[`modelValue`,`options`,`loading`,`disable`])])):d(``,!0),h(`div`,jt,[s(w,{modelValue:I.value,"onUpdate:modelValue":i[18]||=e=>I.value=e,options:$t.value,dense:``,borderless:``,class:`bottom-select rounded-borders branch-select`,"hide-dropdown-icon":``,"use-input":``,"input-debounce":`0`,loading:en.value,disable:!F.value.trim()||en.value,onFilter:nn},{selected:n(()=>[h(`span`,Mt,[s(_,{name:`call_split`,size:`12px`,color:`grey-5`,class:`q-mr-xs`}),f(` `+a(I.value??e.$t(`createPage.branch`))+` `,1),s(_,{name:`expand_more`,size:`12px`,color:`grey-5`})])]),"no-option":n(()=>[s(x,null,{default:n(()=>[s(ge,{class:`text-grey-6 text-caption`},{default:n(()=>[f(a(F.value.trim()?e.$t(`createPage.noBranches`):e.$t(`createPage.enterPath`)),1)]),_:1})]),_:1})]),_:1},8,[`modelValue`,`options`,`loading`,`disable`])])])]),h(`div`,Nt,[s(y,{label:e.$t(`createPage.create`),"no-caps":``,unelevated:``,class:`create-btn text-weight-bold rounded-borders`,loading:tn.value,disable:tn.value||Q.value&&!$.value,onClick:qn},null,8,[`label`,`loading`,`disable`])])]),h(`div`,Pt,a(M.value?e.$t(`createPage.notionExtractHint`):e.$t(`createPage.notionImportHint`)),1)])]),_:1}))}}),[[`__scopeId`,`data-v-936cae0f`]]);export{D as default};
@@ -1,8 +1,8 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/editor.main-CYqwDDag.js","assets/index-Bt877CHx.js","assets/vue-i18n-Cq-KgjJC.js","assets/runtime-core.esm-bundler-D_RRiKBh.js","assets/QIcon-BmEX2rXO.js","assets/use-id-BCnfiBjU.js","assets/notifications-l1Pxijve.js","assets/QBtn-CoU-UC_j.js","assets/QRadio-M9mC5jZy.js","assets/use-checkbox-DnSuDqo2.js","assets/QInput-D0t39uK_.js","assets/QCheckbox-Cq2STfHp.js","assets/QToggle-DBzTAIbK.js","assets/index-ClabzOPc.css","assets/editor.api-DEN1LTb2.js","assets/editor-COGk2gAX.css","assets/monaco.contribution-Ba5eWJZT.js","assets/editor-CS3NEPi9.css"])))=>i.map(i=>d[i]);
2
- import{C as e,G as t,I as n,K as r,N as i,P as a,R as o,St as s,W as c,_ as l,at as u,d,et as f,f as p,g as m,l as h,p as g,r as _,u as v,xt as y,y as b,yt as x}from"./runtime-core.esm-bundler-D_RRiKBh.js";import{P as S,a as C,t as w}from"./QIcon-BmEX2rXO.js";import{r as ee}from"./use-id-BCnfiBjU.js";import{n as T,t as E}from"./QBtn-CoU-UC_j.js";import{n as te}from"./vue-i18n-Cq-KgjJC.js";import{i as D,o as O,t as k}from"./QInput-D0t39uK_.js";import{c as ne,n as re,o as ie,u as ae}from"./index-Bt877CHx.js";import{t as oe}from"./QSpinnerDots-DspFKwCZ.js";import{n as se,t as ce}from"./QItemSection-DRg-QuAD.js";import{t as A}from"./QTooltip-CwBZU_bs.js";import{t as le}from"./QScrollArea-CZVgBUBp.js";import{t as j}from"./render-chat-markdown-947qhJXu.js";import{t as M}from"./_plugin-vue_export-helper-r4mAJOHR.js";import{t as N}from"./QBadge-DNQSqPg-.js";import{t as ue}from"./QSpace-Crcx82On.js";import{i as P,n as de,r as fe,t as pe}from"./build-path-tree-BKx2q92A.js";import{t as me}from"./QList-CRYZxnPD.js";import{t as he}from"./QMenu-Yx1QEIHC.js";import{t as ge}from"./ClosePopup-0MWohgml.js";import{t as _e}from"./use-quasar-q6dh7QVJ.js";var ve=S({name:`QBtnToggle`,props:{...O,modelValue:{required:!0},options:{type:Array,required:!0,validator:e=>e.every(e=>(`label`in e||`icon`in e||`slot`in e)&&`value`in e)},color:String,textColor:String,toggleColor:{type:String,default:`primary`},toggleTextColor:String,outline:Boolean,flat:Boolean,unelevated:Boolean,rounded:Boolean,push:Boolean,glossy:Boolean,size:String,padding:String,noCaps:Boolean,noWrap:Boolean,dense:Boolean,readonly:Boolean,disable:Boolean,stack:Boolean,stretch:Boolean,spread:Boolean,clearable:Boolean,ripple:{type:[Boolean,Object],default:!0}},emits:[`update:modelValue`,`clear`,`click`],setup(t,{slots:n,emit:r}){let i=h(()=>t.options.find(e=>e.value===t.modelValue)!==void 0),a=D(h(()=>({type:`hidden`,name:t.name,value:t.modelValue}))),o=h(()=>T(t)),s=h(()=>({rounded:t.rounded,dense:t.dense,...o.value})),c=h(()=>t.options.map((e,n)=>{let{attrs:r,value:i,slot:a,...o}=e;return{slot:a,props:{key:n,"aria-pressed":i===t.modelValue?`true`:`false`,...r,...o,...s.value,disable:t.disable===!0||o.disable===!0,color:i===t.modelValue?u(o,`toggleColor`):u(o,`color`),textColor:i===t.modelValue?u(o,`toggleTextColor`):u(o,`textColor`),noCaps:u(o,`noCaps`)===!0,noWrap:u(o,`noWrap`)===!0,size:u(o,`size`),padding:u(o,`padding`),ripple:u(o,`ripple`),stack:u(o,`stack`)===!0,stretch:u(o,`stretch`)===!0,onClick(t){l(i,e,t)}}}}));function l(e,n,i){t.readonly!==!0&&(t.modelValue===e?t.clearable===!0&&(r(`update:modelValue`,null,null),r(`clear`)):r(`update:modelValue`,e,n),r(`click`,i))}function u(e,n){return e[n]===void 0?t[n]:e[n]}function d(){let r=c.value.map(t=>e(E,t.props,t.slot===void 0?void 0:n[t.slot]));return t.name!==void 0&&t.disable!==!0&&i.value===!0&&a(r,`push`),C(n.default,r)}return()=>e(P,{class:`q-btn-toggle`,...o.value,rounded:t.rounded,stretch:t.stretch,glossy:t.glossy,spread:t.spread},d)}});function F(e){if(!e.filePath||e.filePath.startsWith(`/`))throw Error(`Invalid filePath: must be non-empty POSIX path relative to workspace root`);return{id:crypto.randomUUID(),filePath:e.filePath,line:e.line,content:e.content,createdAt:new Date().toISOString()}}function I(e){let t=e.split(`
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/editor.main-DJVMM2i4.js","assets/index-DnKXe7D-.js","assets/vue-i18n-Cq-KgjJC.js","assets/runtime-core.esm-bundler-D_RRiKBh.js","assets/QIcon-BmEX2rXO.js","assets/use-id-BCnfiBjU.js","assets/notifications-l1Pxijve.js","assets/QBtn-CoU-UC_j.js","assets/QRadio-M9mC5jZy.js","assets/use-checkbox-DnSuDqo2.js","assets/QInput-D0t39uK_.js","assets/QCheckbox-Cq2STfHp.js","assets/QToggle-DBzTAIbK.js","assets/index-ClabzOPc.css","assets/editor.api-BLN2wAE3.js","assets/editor-COGk2gAX.css","assets/monaco.contribution--Qz8ObQD.js","assets/editor-CS3NEPi9.css"])))=>i.map(i=>d[i]);
2
+ import{C as e,G as t,I as n,K as r,N as i,P as a,R as o,St as s,W as c,_ as l,at as u,d,et as f,f as p,g as m,l as h,p as g,r as _,u as v,xt as y,y as b,yt as x}from"./runtime-core.esm-bundler-D_RRiKBh.js";import{P as S,a as C,t as w}from"./QIcon-BmEX2rXO.js";import{r as ee}from"./use-id-BCnfiBjU.js";import{n as T,t as E}from"./QBtn-CoU-UC_j.js";import{n as te}from"./vue-i18n-Cq-KgjJC.js";import{i as D,o as O,t as k}from"./QInput-D0t39uK_.js";import{c as ne,n as re,o as ie,u as ae}from"./index-DnKXe7D-.js";import{t as oe}from"./QSpinnerDots-DspFKwCZ.js";import{n as se,t as ce}from"./QItemSection-DRg-QuAD.js";import{t as A}from"./QTooltip-CwBZU_bs.js";import{t as le}from"./QScrollArea-CZVgBUBp.js";import{t as j}from"./render-chat-markdown-CODpqdnw.js";import{t as M}from"./_plugin-vue_export-helper-r4mAJOHR.js";import{t as N}from"./QBadge-DNQSqPg-.js";import{t as ue}from"./QSpace-Crcx82On.js";import{i as P,n as de,r as fe,t as pe}from"./build-path-tree-BKx2q92A.js";import{t as me}from"./QList-CRYZxnPD.js";import{t as he}from"./QMenu-Yx1QEIHC.js";import{t as ge}from"./ClosePopup-0MWohgml.js";import{t as _e}from"./use-quasar-q6dh7QVJ.js";var ve=S({name:`QBtnToggle`,props:{...O,modelValue:{required:!0},options:{type:Array,required:!0,validator:e=>e.every(e=>(`label`in e||`icon`in e||`slot`in e)&&`value`in e)},color:String,textColor:String,toggleColor:{type:String,default:`primary`},toggleTextColor:String,outline:Boolean,flat:Boolean,unelevated:Boolean,rounded:Boolean,push:Boolean,glossy:Boolean,size:String,padding:String,noCaps:Boolean,noWrap:Boolean,dense:Boolean,readonly:Boolean,disable:Boolean,stack:Boolean,stretch:Boolean,spread:Boolean,clearable:Boolean,ripple:{type:[Boolean,Object],default:!0}},emits:[`update:modelValue`,`clear`,`click`],setup(t,{slots:n,emit:r}){let i=h(()=>t.options.find(e=>e.value===t.modelValue)!==void 0),a=D(h(()=>({type:`hidden`,name:t.name,value:t.modelValue}))),o=h(()=>T(t)),s=h(()=>({rounded:t.rounded,dense:t.dense,...o.value})),c=h(()=>t.options.map((e,n)=>{let{attrs:r,value:i,slot:a,...o}=e;return{slot:a,props:{key:n,"aria-pressed":i===t.modelValue?`true`:`false`,...r,...o,...s.value,disable:t.disable===!0||o.disable===!0,color:i===t.modelValue?u(o,`toggleColor`):u(o,`color`),textColor:i===t.modelValue?u(o,`toggleTextColor`):u(o,`textColor`),noCaps:u(o,`noCaps`)===!0,noWrap:u(o,`noWrap`)===!0,size:u(o,`size`),padding:u(o,`padding`),ripple:u(o,`ripple`),stack:u(o,`stack`)===!0,stretch:u(o,`stretch`)===!0,onClick(t){l(i,e,t)}}}}));function l(e,n,i){t.readonly!==!0&&(t.modelValue===e?t.clearable===!0&&(r(`update:modelValue`,null,null),r(`clear`)):r(`update:modelValue`,e,n),r(`click`,i))}function u(e,n){return e[n]===void 0?t[n]:e[n]}function d(){let r=c.value.map(t=>e(E,t.props,t.slot===void 0?void 0:n[t.slot]));return t.name!==void 0&&t.disable!==!0&&i.value===!0&&a(r,`push`),C(n.default,r)}return()=>e(P,{class:`q-btn-toggle`,...o.value,rounded:t.rounded,stretch:t.stretch,glossy:t.glossy,spread:t.spread},d)}});function F(e){if(!e.filePath||e.filePath.startsWith(`/`))throw Error(`Invalid filePath: must be non-empty POSIX path relative to workspace root`);return{id:crypto.randomUUID(),filePath:e.filePath,line:e.line,content:e.content,createdAt:new Date().toISOString()}}function I(e){let t=e.split(`
3
3
  `);return t.length===1?e:t.map((e,t)=>t===0?e:` ${e}`).join(`
4
4
  `)}function L(e){let{comments:t,globalMessage:n}=e;if(t.length===0)return`## Code review\n\n${n}`;let r=new Map;for(let e of t){let t=r.get(e.filePath)??[];t.push(e),r.set(e.filePath,t)}for(let e of r.values())e.sort((e,t)=>e.line-t.line||e.createdAt.localeCompare(t.createdAt));let i=Array.from(r.keys()).sort(),a=i.map(e=>`### \`${e}\`\n\n${r.get(e).map(e=>`- **L${e.line}** : ${I(e.content)}`).join(`
5
5
  `)}`),o=i.length,s=`_${t.length} comment${t.length===1?``:`s`} across ${o} file${o===1?``:`s`}. Address them and ping me back when done._`;return`## Code review — please address the following${n?`\n\n${n}`:``}\n\n${a.join(`
6
6
 
7
- `)}\n\n---\n${s}`}var R=300;function z(e){return`kobo:review-draft:${e}`}function B(e){let t=localStorage.getItem(z(e));if(!t)return{comments:[],globalMessage:``};try{let e=JSON.parse(t);return{comments:Array.isArray(e.comments)?e.comments:[],globalMessage:typeof e.globalMessage==`string`?e.globalMessage:``}}catch{return{comments:[],globalMessage:``}}}function ye(e,t){let n=f(B(e)),r=null;function i(){r!==null&&clearTimeout(r),r=setTimeout(()=>{r=null;try{localStorage.setItem(z(e),JSON.stringify(n.value))}catch(e){console.warn(`[review-draft] persist failed:`,e)}},R)}function a(){if(r!==null){clearTimeout(r),r=null;try{localStorage.setItem(z(e),JSON.stringify(n.value))}catch(e){console.warn(`[review-draft] flush failed:`,e)}}}function o(e){let t=F(e);return n.value.comments.push(t),i(),t}function s(e,t){let r=n.value.comments.find(t=>t.id===e);r&&(r.content=t,i())}function c(e){n.value.comments=n.value.comments.filter(t=>t.id!==e),i()}function l(e){n.value.globalMessage=e,i()}function u(){n.value={comments:[],globalMessage:``},r!==null&&(clearTimeout(r),r=null),localStorage.removeItem(z(e))}async function d(r){if(n.value.comments.length===0&&n.value.globalMessage.trim()===``)return{ok:!1,error:`Draft is empty`};a();let i=L(n.value);try{await t.sendChatMessage(e,i,r)}catch(e){return{ok:!1,error:e instanceof Error?e.message:String(e)}}return u(),{ok:!0}}return{draft:n,addComment:o,updateComment:s,deleteComment:c,setGlobalMessage:l,clearDraft:u,flush:a,submit:d}}var V={class:`review-comment-block`},be={class:`comment-actions q-mt-xs`},xe=[`innerHTML`],Se={class:`comment-footer`},Ce={class:`comment-time text-caption text-grey-7`},H={class:`comment-actions q-mt-xs`},we=M(b({__name:`ReviewCommentBlock`,props:{comments:{},startInAddMode:{type:Boolean}},emits:[`add`,`update`,`delete`,`dismissEmpty`],setup(e,{emit:r}){let i=e,a=r,{t:c}=te(),u=_e(),h=f(null),y=f(``),b=f(i.startInAddMode===!0),S=f(``);function C(e){return j(e)}function w(e){let t=Date.now()-new Date(e).getTime(),n=Math.floor(t/6e4);if(n<1)return c(`common.justNow`);if(n<60)return c(`common.minutesAgo`,{count:n});let r=Math.floor(n/60);return r<24?c(`common.hoursAgo`,{count:r}):c(`common.daysAgo`,{count:Math.floor(r/24)})}function ee(e){h.value=e.id,y.value=e.content}function T(){h.value=null,y.value=``}function D(e){let t=y.value.trim();t&&(a(`update`,e,t),h.value=null,y.value=``)}function O(e){u.dialog({title:c(`diff.deleteComment`),message:c(`diff.deleteCommentConfirm`),cancel:!0,persistent:!0,ok:{label:c(`diff.deleteComment`),color:`negative`,flat:!1,unelevated:!0}}).onOk(()=>{a(`delete`,e)})}function ne(){b.value=!1,S.value=``,i.comments.length===0&&a(`dismissEmpty`)}function re(){let e=S.value.trim();e&&(a(`add`,e),b.value=!1,S.value=``)}return(r,i)=>(n(),g(`div`,V,[(n(!0),g(_,null,o(e.comments,(e,a)=>(n(),g(`div`,{key:e.id,class:x([`comment-thread-item`,{"with-separator":a>0}])},[h.value===e.id?(n(),g(_,{key:0},[l(k,{modelValue:y.value,"onUpdate:modelValue":i[0]||=e=>y.value=e,type:`textarea`,autogrow:``,dense:``,dark:``,outlined:``,autofocus:``,class:`comment-textarea`,placeholder:r.$t(`diff.commentPlaceholder`)},null,8,[`modelValue`,`placeholder`]),v(`div`,be,[l(E,{flat:``,dense:``,size:`sm`,label:r.$t(`common.cancel`),onClick:T},null,8,[`label`]),l(E,{unelevated:``,dense:``,size:`sm`,color:`primary`,label:r.$t(`common.save`),onClick:t=>D(e.id)},null,8,[`label`,`onClick`])])],64)):(n(),g(_,{key:1},[v(`div`,{class:`comment-content`,innerHTML:C(e.content)},null,8,xe),v(`div`,Se,[v(`span`,Ce,s(w(e.createdAt)),1),l(E,{flat:``,dense:``,round:``,size:`xs`,icon:`edit`,color:`grey-5`,onClick:t=>ee(e)},{default:t(()=>[l(A,null,{default:t(()=>[m(s(r.$t(`diff.editComment`)),1)]),_:1})]),_:1},8,[`onClick`]),l(E,{flat:``,dense:``,round:``,size:`xs`,icon:`delete`,color:`grey-5`,onClick:t=>O(e.id)},{default:t(()=>[l(A,null,{default:t(()=>[m(s(r.$t(`diff.deleteComment`)),1)]),_:1})]),_:1},8,[`onClick`])])],64))],2))),128)),b.value?(n(),g(_,{key:0},[l(k,{modelValue:S.value,"onUpdate:modelValue":i[1]||=e=>S.value=e,type:`textarea`,autogrow:``,dense:``,dark:``,outlined:``,autofocus:``,class:`comment-textarea q-mt-sm`,placeholder:r.$t(`diff.commentPlaceholder`)},null,8,[`modelValue`,`placeholder`]),v(`div`,H,[l(E,{flat:``,dense:``,size:`sm`,label:r.$t(`common.cancel`),onClick:ne},null,8,[`label`]),l(E,{unelevated:``,dense:``,size:`sm`,color:`primary`,disable:!S.value.trim(),label:r.$t(`diff.addComment`),onClick:re},null,8,[`disable`,`label`])])],64)):e.comments.length>0?(n(),d(E,{key:1,flat:``,dense:``,size:`sm`,icon:`reply`,label:r.$t(`diff.replyComment`),class:`reply-btn q-mt-xs`,onClick:i[2]||=e=>b.value=!0},null,8,[`label`])):p(``,!0)]))}}),[[`__scopeId`,`data-v-9abff76f`]]),Te={class:`review-draft-panel q-pa-sm`},Ee={class:`text-caption text-uppercase text-weight-bold text-grey-6 q-mb-sm`,style:{"letter-spacing":`0.05em`}},U={key:0,class:`text-caption text-grey-7 q-pa-sm`},De=[`onClick`],Oe={style:{"font-family":`'Roboto Mono', monospace`,"font-size":`11px`}},ke=[`onClick`],Ae={class:`text-grey-6 q-mr-xs`,style:{"font-family":`monospace`}},je={class:`text-grey-3 ellipsis`},Me={class:`global-message-box q-mt-sm`},Ne=M(b({__name:`ReviewDraftPanel`,props:{comments:{},globalMessage:{},submitting:{type:Boolean}},emits:[`updateGlobal`,`jumpToFile`,`jumpToComment`,`submit`],setup(e,{emit:r}){let i=e,a=r,c=h(()=>i.comments.length),u=h(()=>{let e=new Map;for(let t of i.comments){let n=e.get(t.filePath)??[];n.push(t),e.set(t.filePath,n)}for(let t of e.values())t.sort((e,t)=>e.line-t.line||e.createdAt.localeCompare(t.createdAt));return Array.from(e.entries()).sort(([e],[t])=>e.localeCompare(t)).map(([e,t])=>({filePath:e,comments:t}))});function d(e){let t=e.replace(/\n+/g,` `).trim();return t.length>80?`${t.slice(0,77)}…`:t}return(r,i)=>(n(),g(`div`,Te,[v(`div`,Ee,s(r.$t(`diff.reviewDraft`)),1),l(le,{class:`comments-scroll`},{default:t(()=>[u.value.length===0?(n(),g(`div`,U,s(r.$t(`diff.reviewEmpty`)),1)):p(``,!0),(n(!0),g(_,null,o(u.value,e=>(n(),g(`div`,{key:e.filePath,class:`file-group q-mb-sm`},[v(`div`,{class:`file-group-header text-grey-3 cursor-pointer ellipsis`,onClick:t=>a(`jumpToFile`,e.filePath)},[l(w,{name:`description`,size:`14px`,color:`indigo-4`,class:`q-mr-xs`}),v(`span`,Oe,s(e.filePath),1),l(N,{label:String(e.comments.length),color:`indigo-8`,"text-color":`white`,class:`q-ml-xs`},null,8,[`label`])],8,De),(n(!0),g(_,null,o(e.comments,e=>(n(),g(`div`,{key:e.id,class:`draft-line cursor-pointer`,onClick:t=>a(`jumpToComment`,e.filePath,e.line)},[v(`span`,Ae,`L`+s(e.line),1),v(`span`,je,s(d(e.content)),1)],8,ke))),128))]))),128))]),_:1}),v(`div`,Me,[l(k,{"model-value":e.globalMessage,type:`textarea`,autogrow:``,rows:`3`,dense:``,dark:``,outlined:``,placeholder:r.$t(`diff.reviewGlobalPlaceholder`),class:`global-textarea`,"onUpdate:modelValue":i[0]||=e=>a(`updateGlobal`,String(e))},null,8,[`model-value`,`placeholder`]),l(E,{unelevated:``,"no-caps":``,color:`primary`,class:`full-width q-mt-sm`,disable:c.value===0&&!e.globalMessage.trim(),loading:e.submitting,onClick:i[1]||=e=>a(`submit`)},{default:t(()=>[m(s(r.$t(`diff.submitReview`,{n:c.value})),1)]),_:1},8,[`disable`,`loading`])])]))}}),[[`__scopeId`,`data-v-fd6b00c0`]]),Pe={class:`diff-viewer column full-height`},Fe={class:`diff-header row items-center q-px-md q-py-sm no-wrap`},Ie={class:`text-body1 text-weight-medium text-grey-3`},Le={key:0,class:`text-caption text-grey-6 q-ml-md`,style:{"font-size":`11px`}},Re={class:`text-grey-7`},ze={class:`text-green-4`},Be={class:`text-grey-7`},Ve={key:1,class:`text-caption text-grey-5 q-ml-md ellipsis`,style:{"font-size":`11px`,"font-family":`'Roboto Mono', monospace`,"max-width":`400px`}},He={class:`row col no-wrap`,style:{"min-height":`0`}},Ue={key:0,class:`review-draft-panel-wrapper`,style:{width:`300px`,minWidth:`240px`,flexShrink:0,borderRight:`1px solid #2a2a4a`}},We={key:1,class:`text-caption text-grey-8 q-pa-sm`},Ge={key:2,class:`text-caption text-grey-8 q-pa-sm`},Ke={class:`text-grey-4`,style:{"font-family":`'Roboto Mono', monospace`,"font-size":`11px`}},qe={class:`text-grey-3 ellipsis`,style:{"font-family":`'Roboto Mono', monospace`,"font-size":`11px`}},Je={key:0,class:`dirty-dot`},Ye={class:`col column`,style:{"min-width":`0`,position:`relative`}},Xe={key:0,class:`col column items-center justify-center`},Ze={key:1,class:`col column items-center justify-center text-grey-8 text-caption`},Qe=`kobo:diff:hideUnchanged`,$e=`kobo:diff:includeUntracked`,et=`kobo:diff:mode`,tt=`kobo:diffViewerFileListWidth`,nt=180,rt=600,it=M(b({__name:`DiffViewer`,props:{workspaceId:{},initialReviewMode:{type:Boolean}},emits:[`close`,`sendToChat`],setup(e,{emit:b}){let x=e,S=b,{t:C}=te(),T=_e(),D=f([]),O=f(``),j=f(``),M=f(null),P=f(!1),F=f(!1),I=f(null),L=f(`side`),R=f(localStorage.getItem(Qe)!==`0`),z=f(localStorage.getItem($e)===`1`),B=f(`branch`),V=f(x.initialReviewMode||localStorage.getItem(et)===`review`?`review`:`inspect`);c(V,e=>{localStorage.setItem(et,e),e===`review`?xe():be()});function be(){ut();for(let e of q)e.dispose();q=[],G&&G.getModifiedEditor().getDomNode()?.classList.remove(`review-mode-active`)}function xe(){G&&(vt(),M.value&&mt(M.value))}let Se=ie(),Ce=ne(),H=ye(x.workspaceId,{sendChatMessage:async(e,t,n)=>{if(!Se.isConnected())throw Error(`WebSocket not connected — cannot send the review`);Se.sendChatMessage(e,t,n)}}),Te=h(()=>H.draft.value.comments),Ee=h(()=>H.draft.value.globalMessage),U=f(!1);async function De(){U.value=!0;try{let e=await H.submit(Ce.selectedSessionId??void 0);e.ok?(T.notify({type:`positive`,message:C(`diff.reviewSubmitted`),position:`top`}),S(`close`)):T.notify({type:`negative`,message:C(`diff.reviewSubmitFailed`,{error:e.error??``}),position:`top`})}finally{U.value=!1}}let Oe=h(()=>{let e=new Map;if(V.value!==`review`)return e;for(let t of H.draft.value.comments)e.set(t.filePath,(e.get(t.filePath)??0)+1);return e});function ke(e){if(V.value!==`review`||!e)return 0;let t=0;for(let n of H.draft.value.comments)n.filePath.startsWith(`${e}/`)&&t++;return t}function Ae(e){return e.nodeKey.startsWith(`dir:`)?e.nodeKey.slice(4):``}function je(e){M.value=e}async function Me(e=3e3){let t=Date.now();for(;F.value;){if(Date.now()-t>e)return;await new Promise(e=>setTimeout(e,30))}}async function it(e,t){M.value!==e&&(M.value=e,await Me()),G?.getModifiedEditor().revealLineInCenter(t)}let at=parseInt(localStorage.getItem(tt)??`280`,10),ot=f(Math.min(rt,Math.max(nt,at)));function st(e){e.preventDefault();let t=e.target.closest(`.diff-viewer`);if(!t)return;let n=t.getBoundingClientRect().left,r=e=>{ot.value=Math.min(rt,Math.max(nt,e.clientX-n))},i=()=>{localStorage.setItem(tt,String(ot.value)),document.removeEventListener(`mousemove`,r),document.removeEventListener(`mouseup`,i),document.body.style.cursor=``,document.body.style.userSelect=``};document.body.style.cursor=`col-resize`,document.body.style.userSelect=`none`,document.addEventListener(`mousemove`,r),document.addEventListener(`mouseup`,i)}let W=null,G=null,K=[],q=[],J=f([]),ct=f(null);function lt(){if(!G)return;let e=G.getModifiedEditor();for(let t of J.value)t.topPx=e.getTopForLineNumber(t.line+1)-e.getScrollTop()-t.heightPx}function ut(){if(!G){J.value=[];return}G.getModifiedEditor().changeViewZones(e=>{for(let t of J.value)try{e.removeZone(t.zoneId)}catch{}}),J.value=[]}function dt(e,t,n){if(!G)return;let r=G.getModifiedEditor(),i=r.getModel()?.getLineCount()??0;if(e<1||e>i)return;let a=document.createElement(`div`);a.style.pointerEvents=`none`;let o=t.length>0?t.length*4+1:0,s=Math.max(6,o+(n?6:0)),c=``;r.changeViewZones(t=>{c=t.addZone({afterLineNumber:e,heightInLines:s,domNode:a})});let l=s*18,u=r.getTopForLineNumber(e+1)-r.getScrollTop()-l;J.value.push({zoneId:c,placeholderNode:a,line:e,comments:t,transient:n,topPx:u,heightPx:l})}function ft(e){if(!G)return;let t=G.getModifiedEditor(),n=J.value.filter(t=>t.line===e);n.length!==0&&(t.changeViewZones(e=>{for(let t of n)try{e.removeZone(t.zoneId)}catch{}}),J.value=J.value.filter(t=>t.line!==e))}function pt(e,t){ft(t);let n=H.draft.value.comments.filter(n=>n.filePath===e&&n.line===t);n.length!==0&&(n.sort((e,t)=>e.createdAt.localeCompare(t.createdAt)),dt(t,n,!1))}function mt(e){if(!G||V.value!==`review`)return;let t=H.draft.value.comments.filter(t=>t.filePath===e),n=new Map;for(let e of t){let t=n.get(e.line)??[];t.push(e),n.set(e.line,t)}for(let e of n.values())e.sort((e,t)=>e.createdAt.localeCompare(t.createdAt));for(let[e,t]of n)dt(e,t,!1)}function ht(e,t,n){H.addComment({filePath:e,line:t,content:n}),pt(e,t)}function gt(e,t,n,r){H.updateComment(n,r),pt(e,t)}function _t(e,t,n){H.deleteComment(n),pt(e,t)}function vt(){if(!G||V.value!==`review`||!W)return;let e=G.getModifiedEditor(),t=e.getDomNode();t&&t.classList.add(`review-mode-active`),q.push(e.onMouseDown(e=>{if(e.target.type!==3)return;let t=e.target.position?.lineNumber??0;t<1||!M.value||yt(M.value,t)}),e.onDidScrollChange(()=>lt()),e.onDidLayoutChange(()=>lt()))}function yt(e,t){ft(t),dt(t,H.draft.value.comments.filter(n=>n.filePath===e&&n.line===t).sort((e,t)=>e.createdAt.localeCompare(t.createdAt)),!0)}let bt=f(``),Y=f(``),X=f(!1),Z=f(!1),Q=null,$=h(()=>{if(V.value!==`inspect`)return!1;let e=Ce.workspaces.find(e=>e.id===x.workspaceId);if(!e||e.archivedAt||ae(e.status))return!1;let t=M.value;return(t?D.value.find(e=>e.path===t):null)?.status!==`deleted`});c($,e=>{G?.updateOptions({readOnly:!e})});function xt(){Q?.(),Q=null,ut();for(let e of q)e.dispose();if(q=[],!G)return;G.getModifiedEditor().getDomNode()?.classList.remove(`review-mode-active`);for(let e of K)e.dispose();K=[];let e=G.getModel();G.dispose(),G=null,e?.original?.dispose(),e?.modified?.dispose()}let St=h(()=>pe(D.value)),Ct=h(()=>M.value?`file:${M.value}`:``),wt=f(``);function Tt(e,t){return e.file?e.file.path.toLowerCase().includes(t.toLowerCase()):!1}let Et=h(()=>{let e=wt.value.trim().toLowerCase();return e===``?!1:!D.value.some(t=>t.path.toLowerCase().includes(e))});async function Dt(){P.value=!0;try{let e=new URLSearchParams({mode:B.value});B.value===`branch`&&z.value&&e.set(`includeUntracked`,`1`);let t=await fetch(`/api/workspaces/${x.workspaceId}/diff?${e}`,{cache:`no-store`});if(!t.ok)throw Error(`HTTP ${t.status}`);let n=await t.json();D.value=n.files,O.value=n.sourceBranch??``,j.value=n.workingBranch??``}catch(e){console.error(`Failed to load diff files:`,e)}finally{P.value=!1}}async function Ot(e){if(I.value){F.value=!0;try{W||(self.MonacoEnvironment={getWorker(e,t){return t===`json`?new Worker(new URL(`/assets/json.worker-C9p7xCYk.js`,``+import.meta.url),{type:`module`}):t===`css`||t===`scss`||t===`less`?new Worker(new URL(`/assets/css.worker-D1piIYC4.js`,``+import.meta.url),{type:`module`}):t===`html`||t===`handlebars`||t===`razor`?new Worker(new URL(`/assets/html.worker-C4q4XMPn.js`,``+import.meta.url),{type:`module`}):t===`typescript`||t===`javascript`?new Worker(new URL(`/assets/ts.worker-Cj3zTgVE.js`,``+import.meta.url),{type:`module`}):new Worker(new URL(`/assets/editor.worker-CJ9iTmkr.js`,``+import.meta.url),{type:`module`})}},W=await re(()=>import(`./editor.main-CYqwDDag.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17])),W.editor.defineTheme(`kobo-dark`,{base:`vs-dark`,inherit:!0,rules:[],colors:{"editor.background":`#1a1a2e`,"diffEditor.insertedTextBackground":`#22c55e20`,"diffEditor.removedTextBackground":`#ef444420`}}));let t=await fetch(`/api/workspaces/${x.workspaceId}/diff-file?path=${encodeURIComponent(e)}&mode=${B.value}`,{cache:`no-store`});if(!t.ok)throw Error(`HTTP ${t.status}`);let n=await t.json(),r={ts:`typescript`,tsx:`typescript`,js:`javascript`,jsx:`javascript`,vue:`html`,html:`html`,css:`css`,scss:`scss`,json:`json`,md:`markdown`,yaml:`yaml`,yml:`yaml`,sh:`shell`,sql:`sql`,py:`python`,rs:`rust`,go:`go`}[e.split(`.`).pop()??``]??`plaintext`;xt();let i=W.editor.createModel(n.original??``,r),a=W.editor.createModel(n.modified??``,r);G=W.editor.createDiffEditor(I.value,{theme:`kobo-dark`,readOnly:!$.value,originalEditable:!1,renderSideBySide:L.value===`side`,automaticLayout:!0,minimap:{enabled:!1},scrollBeyondLastLine:!1,fontSize:12,lineHeight:18,hideUnchangedRegions:{enabled:R.value,contextLineCount:3,minimumLineCount:3,revealLineCount:20}}),G.addCommand(W.KeyMod.CtrlCmd|W.KeyCode.KeyS,()=>{$.value&&X.value&&!Z.value&&At()}),G.setModel({original:i,modified:a}),bt.value=n.modifiedSha??``,Y.value=n.modified??``,X.value=!1,W&&(n.modified??``).includes(`\r
7
+ `)}\n\n---\n${s}`}var R=300;function z(e){return`kobo:review-draft:${e}`}function B(e){let t=localStorage.getItem(z(e));if(!t)return{comments:[],globalMessage:``};try{let e=JSON.parse(t);return{comments:Array.isArray(e.comments)?e.comments:[],globalMessage:typeof e.globalMessage==`string`?e.globalMessage:``}}catch{return{comments:[],globalMessage:``}}}function ye(e,t){let n=f(B(e)),r=null;function i(){r!==null&&clearTimeout(r),r=setTimeout(()=>{r=null;try{localStorage.setItem(z(e),JSON.stringify(n.value))}catch(e){console.warn(`[review-draft] persist failed:`,e)}},R)}function a(){if(r!==null){clearTimeout(r),r=null;try{localStorage.setItem(z(e),JSON.stringify(n.value))}catch(e){console.warn(`[review-draft] flush failed:`,e)}}}function o(e){let t=F(e);return n.value.comments.push(t),i(),t}function s(e,t){let r=n.value.comments.find(t=>t.id===e);r&&(r.content=t,i())}function c(e){n.value.comments=n.value.comments.filter(t=>t.id!==e),i()}function l(e){n.value.globalMessage=e,i()}function u(){n.value={comments:[],globalMessage:``},r!==null&&(clearTimeout(r),r=null),localStorage.removeItem(z(e))}async function d(r){if(n.value.comments.length===0&&n.value.globalMessage.trim()===``)return{ok:!1,error:`Draft is empty`};a();let i=L(n.value);try{await t.sendChatMessage(e,i,r)}catch(e){return{ok:!1,error:e instanceof Error?e.message:String(e)}}return u(),{ok:!0}}return{draft:n,addComment:o,updateComment:s,deleteComment:c,setGlobalMessage:l,clearDraft:u,flush:a,submit:d}}var V={class:`review-comment-block`},be={class:`comment-actions q-mt-xs`},xe=[`innerHTML`],Se={class:`comment-footer`},Ce={class:`comment-time text-caption text-grey-7`},H={class:`comment-actions q-mt-xs`},we=M(b({__name:`ReviewCommentBlock`,props:{comments:{},startInAddMode:{type:Boolean}},emits:[`add`,`update`,`delete`,`dismissEmpty`],setup(e,{emit:r}){let i=e,a=r,{t:c}=te(),u=_e(),h=f(null),y=f(``),b=f(i.startInAddMode===!0),S=f(``);function C(e){return j(e)}function w(e){let t=Date.now()-new Date(e).getTime(),n=Math.floor(t/6e4);if(n<1)return c(`common.justNow`);if(n<60)return c(`common.minutesAgo`,{count:n});let r=Math.floor(n/60);return r<24?c(`common.hoursAgo`,{count:r}):c(`common.daysAgo`,{count:Math.floor(r/24)})}function ee(e){h.value=e.id,y.value=e.content}function T(){h.value=null,y.value=``}function D(e){let t=y.value.trim();t&&(a(`update`,e,t),h.value=null,y.value=``)}function O(e){u.dialog({title:c(`diff.deleteComment`),message:c(`diff.deleteCommentConfirm`),cancel:!0,persistent:!0,ok:{label:c(`diff.deleteComment`),color:`negative`,flat:!1,unelevated:!0}}).onOk(()=>{a(`delete`,e)})}function ne(){b.value=!1,S.value=``,i.comments.length===0&&a(`dismissEmpty`)}function re(){let e=S.value.trim();e&&(a(`add`,e),b.value=!1,S.value=``)}return(r,i)=>(n(),g(`div`,V,[(n(!0),g(_,null,o(e.comments,(e,a)=>(n(),g(`div`,{key:e.id,class:x([`comment-thread-item`,{"with-separator":a>0}])},[h.value===e.id?(n(),g(_,{key:0},[l(k,{modelValue:y.value,"onUpdate:modelValue":i[0]||=e=>y.value=e,type:`textarea`,autogrow:``,dense:``,dark:``,outlined:``,autofocus:``,class:`comment-textarea`,placeholder:r.$t(`diff.commentPlaceholder`)},null,8,[`modelValue`,`placeholder`]),v(`div`,be,[l(E,{flat:``,dense:``,size:`sm`,label:r.$t(`common.cancel`),onClick:T},null,8,[`label`]),l(E,{unelevated:``,dense:``,size:`sm`,color:`primary`,label:r.$t(`common.save`),onClick:t=>D(e.id)},null,8,[`label`,`onClick`])])],64)):(n(),g(_,{key:1},[v(`div`,{class:`comment-content`,innerHTML:C(e.content)},null,8,xe),v(`div`,Se,[v(`span`,Ce,s(w(e.createdAt)),1),l(E,{flat:``,dense:``,round:``,size:`xs`,icon:`edit`,color:`grey-5`,onClick:t=>ee(e)},{default:t(()=>[l(A,null,{default:t(()=>[m(s(r.$t(`diff.editComment`)),1)]),_:1})]),_:1},8,[`onClick`]),l(E,{flat:``,dense:``,round:``,size:`xs`,icon:`delete`,color:`grey-5`,onClick:t=>O(e.id)},{default:t(()=>[l(A,null,{default:t(()=>[m(s(r.$t(`diff.deleteComment`)),1)]),_:1})]),_:1},8,[`onClick`])])],64))],2))),128)),b.value?(n(),g(_,{key:0},[l(k,{modelValue:S.value,"onUpdate:modelValue":i[1]||=e=>S.value=e,type:`textarea`,autogrow:``,dense:``,dark:``,outlined:``,autofocus:``,class:`comment-textarea q-mt-sm`,placeholder:r.$t(`diff.commentPlaceholder`)},null,8,[`modelValue`,`placeholder`]),v(`div`,H,[l(E,{flat:``,dense:``,size:`sm`,label:r.$t(`common.cancel`),onClick:ne},null,8,[`label`]),l(E,{unelevated:``,dense:``,size:`sm`,color:`primary`,disable:!S.value.trim(),label:r.$t(`diff.addComment`),onClick:re},null,8,[`disable`,`label`])])],64)):e.comments.length>0?(n(),d(E,{key:1,flat:``,dense:``,size:`sm`,icon:`reply`,label:r.$t(`diff.replyComment`),class:`reply-btn q-mt-xs`,onClick:i[2]||=e=>b.value=!0},null,8,[`label`])):p(``,!0)]))}}),[[`__scopeId`,`data-v-9abff76f`]]),Te={class:`review-draft-panel q-pa-sm`},Ee={class:`text-caption text-uppercase text-weight-bold text-grey-6 q-mb-sm`,style:{"letter-spacing":`0.05em`}},U={key:0,class:`text-caption text-grey-7 q-pa-sm`},De=[`onClick`],Oe={style:{"font-family":`'Roboto Mono', monospace`,"font-size":`11px`}},ke=[`onClick`],Ae={class:`text-grey-6 q-mr-xs`,style:{"font-family":`monospace`}},je={class:`text-grey-3 ellipsis`},Me={class:`global-message-box q-mt-sm`},Ne=M(b({__name:`ReviewDraftPanel`,props:{comments:{},globalMessage:{},submitting:{type:Boolean}},emits:[`updateGlobal`,`jumpToFile`,`jumpToComment`,`submit`],setup(e,{emit:r}){let i=e,a=r,c=h(()=>i.comments.length),u=h(()=>{let e=new Map;for(let t of i.comments){let n=e.get(t.filePath)??[];n.push(t),e.set(t.filePath,n)}for(let t of e.values())t.sort((e,t)=>e.line-t.line||e.createdAt.localeCompare(t.createdAt));return Array.from(e.entries()).sort(([e],[t])=>e.localeCompare(t)).map(([e,t])=>({filePath:e,comments:t}))});function d(e){let t=e.replace(/\n+/g,` `).trim();return t.length>80?`${t.slice(0,77)}…`:t}return(r,i)=>(n(),g(`div`,Te,[v(`div`,Ee,s(r.$t(`diff.reviewDraft`)),1),l(le,{class:`comments-scroll`},{default:t(()=>[u.value.length===0?(n(),g(`div`,U,s(r.$t(`diff.reviewEmpty`)),1)):p(``,!0),(n(!0),g(_,null,o(u.value,e=>(n(),g(`div`,{key:e.filePath,class:`file-group q-mb-sm`},[v(`div`,{class:`file-group-header text-grey-3 cursor-pointer ellipsis`,onClick:t=>a(`jumpToFile`,e.filePath)},[l(w,{name:`description`,size:`14px`,color:`indigo-4`,class:`q-mr-xs`}),v(`span`,Oe,s(e.filePath),1),l(N,{label:String(e.comments.length),color:`indigo-8`,"text-color":`white`,class:`q-ml-xs`},null,8,[`label`])],8,De),(n(!0),g(_,null,o(e.comments,e=>(n(),g(`div`,{key:e.id,class:`draft-line cursor-pointer`,onClick:t=>a(`jumpToComment`,e.filePath,e.line)},[v(`span`,Ae,`L`+s(e.line),1),v(`span`,je,s(d(e.content)),1)],8,ke))),128))]))),128))]),_:1}),v(`div`,Me,[l(k,{"model-value":e.globalMessage,type:`textarea`,autogrow:``,rows:`3`,dense:``,dark:``,outlined:``,placeholder:r.$t(`diff.reviewGlobalPlaceholder`),class:`global-textarea`,"onUpdate:modelValue":i[0]||=e=>a(`updateGlobal`,String(e))},null,8,[`model-value`,`placeholder`]),l(E,{unelevated:``,"no-caps":``,color:`primary`,class:`full-width q-mt-sm`,disable:c.value===0&&!e.globalMessage.trim(),loading:e.submitting,onClick:i[1]||=e=>a(`submit`)},{default:t(()=>[m(s(r.$t(`diff.submitReview`,{n:c.value})),1)]),_:1},8,[`disable`,`loading`])])]))}}),[[`__scopeId`,`data-v-fd6b00c0`]]),Pe={class:`diff-viewer column full-height`},Fe={class:`diff-header row items-center q-px-md q-py-sm no-wrap`},Ie={class:`text-body1 text-weight-medium text-grey-3`},Le={key:0,class:`text-caption text-grey-6 q-ml-md`,style:{"font-size":`11px`}},Re={class:`text-grey-7`},ze={class:`text-green-4`},Be={class:`text-grey-7`},Ve={key:1,class:`text-caption text-grey-5 q-ml-md ellipsis`,style:{"font-size":`11px`,"font-family":`'Roboto Mono', monospace`,"max-width":`400px`}},He={class:`row col no-wrap`,style:{"min-height":`0`}},Ue={key:0,class:`review-draft-panel-wrapper`,style:{width:`300px`,minWidth:`240px`,flexShrink:0,borderRight:`1px solid #2a2a4a`}},We={key:1,class:`text-caption text-grey-8 q-pa-sm`},Ge={key:2,class:`text-caption text-grey-8 q-pa-sm`},Ke={class:`text-grey-4`,style:{"font-family":`'Roboto Mono', monospace`,"font-size":`11px`}},qe={class:`text-grey-3 ellipsis`,style:{"font-family":`'Roboto Mono', monospace`,"font-size":`11px`}},Je={key:0,class:`dirty-dot`},Ye={class:`col column`,style:{"min-width":`0`,position:`relative`}},Xe={key:0,class:`col column items-center justify-center`},Ze={key:1,class:`col column items-center justify-center text-grey-8 text-caption`},Qe=`kobo:diff:hideUnchanged`,$e=`kobo:diff:includeUntracked`,et=`kobo:diff:mode`,tt=`kobo:diffViewerFileListWidth`,nt=180,rt=600,it=M(b({__name:`DiffViewer`,props:{workspaceId:{},initialReviewMode:{type:Boolean}},emits:[`close`,`sendToChat`],setup(e,{emit:b}){let x=e,S=b,{t:C}=te(),T=_e(),D=f([]),O=f(``),j=f(``),M=f(null),P=f(!1),F=f(!1),I=f(null),L=f(`side`),R=f(localStorage.getItem(Qe)!==`0`),z=f(localStorage.getItem($e)===`1`),B=f(`branch`),V=f(x.initialReviewMode||localStorage.getItem(et)===`review`?`review`:`inspect`);c(V,e=>{localStorage.setItem(et,e),e===`review`?xe():be()});function be(){ut();for(let e of q)e.dispose();q=[],G&&G.getModifiedEditor().getDomNode()?.classList.remove(`review-mode-active`)}function xe(){G&&(vt(),M.value&&mt(M.value))}let Se=ie(),Ce=ne(),H=ye(x.workspaceId,{sendChatMessage:async(e,t,n)=>{if(!Se.isConnected())throw Error(`WebSocket not connected — cannot send the review`);Se.sendChatMessage(e,t,n)}}),Te=h(()=>H.draft.value.comments),Ee=h(()=>H.draft.value.globalMessage),U=f(!1);async function De(){U.value=!0;try{let e=await H.submit(Ce.selectedSessionId??void 0);e.ok?(T.notify({type:`positive`,message:C(`diff.reviewSubmitted`),position:`top`}),S(`close`)):T.notify({type:`negative`,message:C(`diff.reviewSubmitFailed`,{error:e.error??``}),position:`top`})}finally{U.value=!1}}let Oe=h(()=>{let e=new Map;if(V.value!==`review`)return e;for(let t of H.draft.value.comments)e.set(t.filePath,(e.get(t.filePath)??0)+1);return e});function ke(e){if(V.value!==`review`||!e)return 0;let t=0;for(let n of H.draft.value.comments)n.filePath.startsWith(`${e}/`)&&t++;return t}function Ae(e){return e.nodeKey.startsWith(`dir:`)?e.nodeKey.slice(4):``}function je(e){M.value=e}async function Me(e=3e3){let t=Date.now();for(;F.value;){if(Date.now()-t>e)return;await new Promise(e=>setTimeout(e,30))}}async function it(e,t){M.value!==e&&(M.value=e,await Me()),G?.getModifiedEditor().revealLineInCenter(t)}let at=parseInt(localStorage.getItem(tt)??`280`,10),ot=f(Math.min(rt,Math.max(nt,at)));function st(e){e.preventDefault();let t=e.target.closest(`.diff-viewer`);if(!t)return;let n=t.getBoundingClientRect().left,r=e=>{ot.value=Math.min(rt,Math.max(nt,e.clientX-n))},i=()=>{localStorage.setItem(tt,String(ot.value)),document.removeEventListener(`mousemove`,r),document.removeEventListener(`mouseup`,i),document.body.style.cursor=``,document.body.style.userSelect=``};document.body.style.cursor=`col-resize`,document.body.style.userSelect=`none`,document.addEventListener(`mousemove`,r),document.addEventListener(`mouseup`,i)}let W=null,G=null,K=[],q=[],J=f([]),ct=f(null);function lt(){if(!G)return;let e=G.getModifiedEditor();for(let t of J.value)t.topPx=e.getTopForLineNumber(t.line+1)-e.getScrollTop()-t.heightPx}function ut(){if(!G){J.value=[];return}G.getModifiedEditor().changeViewZones(e=>{for(let t of J.value)try{e.removeZone(t.zoneId)}catch{}}),J.value=[]}function dt(e,t,n){if(!G)return;let r=G.getModifiedEditor(),i=r.getModel()?.getLineCount()??0;if(e<1||e>i)return;let a=document.createElement(`div`);a.style.pointerEvents=`none`;let o=t.length>0?t.length*4+1:0,s=Math.max(6,o+(n?6:0)),c=``;r.changeViewZones(t=>{c=t.addZone({afterLineNumber:e,heightInLines:s,domNode:a})});let l=s*18,u=r.getTopForLineNumber(e+1)-r.getScrollTop()-l;J.value.push({zoneId:c,placeholderNode:a,line:e,comments:t,transient:n,topPx:u,heightPx:l})}function ft(e){if(!G)return;let t=G.getModifiedEditor(),n=J.value.filter(t=>t.line===e);n.length!==0&&(t.changeViewZones(e=>{for(let t of n)try{e.removeZone(t.zoneId)}catch{}}),J.value=J.value.filter(t=>t.line!==e))}function pt(e,t){ft(t);let n=H.draft.value.comments.filter(n=>n.filePath===e&&n.line===t);n.length!==0&&(n.sort((e,t)=>e.createdAt.localeCompare(t.createdAt)),dt(t,n,!1))}function mt(e){if(!G||V.value!==`review`)return;let t=H.draft.value.comments.filter(t=>t.filePath===e),n=new Map;for(let e of t){let t=n.get(e.line)??[];t.push(e),n.set(e.line,t)}for(let e of n.values())e.sort((e,t)=>e.createdAt.localeCompare(t.createdAt));for(let[e,t]of n)dt(e,t,!1)}function ht(e,t,n){H.addComment({filePath:e,line:t,content:n}),pt(e,t)}function gt(e,t,n,r){H.updateComment(n,r),pt(e,t)}function _t(e,t,n){H.deleteComment(n),pt(e,t)}function vt(){if(!G||V.value!==`review`||!W)return;let e=G.getModifiedEditor(),t=e.getDomNode();t&&t.classList.add(`review-mode-active`),q.push(e.onMouseDown(e=>{if(e.target.type!==3)return;let t=e.target.position?.lineNumber??0;t<1||!M.value||yt(M.value,t)}),e.onDidScrollChange(()=>lt()),e.onDidLayoutChange(()=>lt()))}function yt(e,t){ft(t),dt(t,H.draft.value.comments.filter(n=>n.filePath===e&&n.line===t).sort((e,t)=>e.createdAt.localeCompare(t.createdAt)),!0)}let bt=f(``),Y=f(``),X=f(!1),Z=f(!1),Q=null,$=h(()=>{if(V.value!==`inspect`)return!1;let e=Ce.workspaces.find(e=>e.id===x.workspaceId);if(!e||e.archivedAt||ae(e.status))return!1;let t=M.value;return(t?D.value.find(e=>e.path===t):null)?.status!==`deleted`});c($,e=>{G?.updateOptions({readOnly:!e})});function xt(){Q?.(),Q=null,ut();for(let e of q)e.dispose();if(q=[],!G)return;G.getModifiedEditor().getDomNode()?.classList.remove(`review-mode-active`);for(let e of K)e.dispose();K=[];let e=G.getModel();G.dispose(),G=null,e?.original?.dispose(),e?.modified?.dispose()}let St=h(()=>pe(D.value)),Ct=h(()=>M.value?`file:${M.value}`:``),wt=f(``);function Tt(e,t){return e.file?e.file.path.toLowerCase().includes(t.toLowerCase()):!1}let Et=h(()=>{let e=wt.value.trim().toLowerCase();return e===``?!1:!D.value.some(t=>t.path.toLowerCase().includes(e))});async function Dt(){P.value=!0;try{let e=new URLSearchParams({mode:B.value});B.value===`branch`&&z.value&&e.set(`includeUntracked`,`1`);let t=await fetch(`/api/workspaces/${x.workspaceId}/diff?${e}`,{cache:`no-store`});if(!t.ok)throw Error(`HTTP ${t.status}`);let n=await t.json();D.value=n.files,O.value=n.sourceBranch??``,j.value=n.workingBranch??``}catch(e){console.error(`Failed to load diff files:`,e)}finally{P.value=!1}}async function Ot(e){if(I.value){F.value=!0;try{W||(self.MonacoEnvironment={getWorker(e,t){return t===`json`?new Worker(new URL(`/assets/json.worker-C9p7xCYk.js`,``+import.meta.url),{type:`module`}):t===`css`||t===`scss`||t===`less`?new Worker(new URL(`/assets/css.worker-D1piIYC4.js`,``+import.meta.url),{type:`module`}):t===`html`||t===`handlebars`||t===`razor`?new Worker(new URL(`/assets/html.worker-C4q4XMPn.js`,``+import.meta.url),{type:`module`}):t===`typescript`||t===`javascript`?new Worker(new URL(`/assets/ts.worker-Cj3zTgVE.js`,``+import.meta.url),{type:`module`}):new Worker(new URL(`/assets/editor.worker-CJ9iTmkr.js`,``+import.meta.url),{type:`module`})}},W=await re(()=>import(`./editor.main-DJVMM2i4.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17])),W.editor.defineTheme(`kobo-dark`,{base:`vs-dark`,inherit:!0,rules:[],colors:{"editor.background":`#1a1a2e`,"diffEditor.insertedTextBackground":`#22c55e20`,"diffEditor.removedTextBackground":`#ef444420`}}));let t=await fetch(`/api/workspaces/${x.workspaceId}/diff-file?path=${encodeURIComponent(e)}&mode=${B.value}`,{cache:`no-store`});if(!t.ok)throw Error(`HTTP ${t.status}`);let n=await t.json(),r={ts:`typescript`,tsx:`typescript`,js:`javascript`,jsx:`javascript`,vue:`html`,html:`html`,css:`css`,scss:`scss`,json:`json`,md:`markdown`,yaml:`yaml`,yml:`yaml`,sh:`shell`,sql:`sql`,py:`python`,rs:`rust`,go:`go`}[e.split(`.`).pop()??``]??`plaintext`;xt();let i=W.editor.createModel(n.original??``,r),a=W.editor.createModel(n.modified??``,r);G=W.editor.createDiffEditor(I.value,{theme:`kobo-dark`,readOnly:!$.value,originalEditable:!1,renderSideBySide:L.value===`side`,automaticLayout:!0,minimap:{enabled:!1},scrollBeyondLastLine:!1,fontSize:12,lineHeight:18,hideUnchangedRegions:{enabled:R.value,contextLineCount:3,minimumLineCount:3,revealLineCount:20}}),G.addCommand(W.KeyMod.CtrlCmd|W.KeyCode.KeyS,()=>{$.value&&X.value&&!Z.value&&At()}),G.setModel({original:i,modified:a}),bt.value=n.modifiedSha??``,Y.value=n.modified??``,X.value=!1,W&&(n.modified??``).includes(`\r
8
8
  `)&&a.setEOL(W.editor.EndOfLineSequence.CRLF),Q?.();let o=a.onDidChangeContent(()=>{X.value=a.getValue()!==Y.value});Q=()=>o.dispose(),Ft(),V.value===`review`&&(vt(),mt(e))}catch(e){console.error(`Failed to load file diff:`,e)}finally{F.value=!1}}}async function kt(){if(!G)return{ok:!1,status:0};let e=G.getModel()?.modified;if(!e||!M.value)return{ok:!1,status:0};let t=e.getValue(),n=x.workspaceId,r=M.value,i=bt.value;Z.value=!0;try{let a=await fetch(`/api/workspaces/${n}/save-file`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({path:r,content:t,baseSha:i})});if(a.status===204){let t=await fetch(`/api/workspaces/${n}/diff-file?path=${encodeURIComponent(r)}&mode=${B.value}`,{cache:`no-store`});if(t.ok){let n=await t.json();bt.value=n.modifiedSha??``,Y.value=n.modified??``,X.value=e.getValue()!==Y.value}return T.notify({type:`positive`,message:C(`diffViewer.savedAt`),position:`top`,timeout:1200}),{ok:!0}}return a.status===412?{ok:!1,status:412,currentSha:(await a.json().catch(()=>({}))).currentSha}:{ok:!1,status:a.status}}catch(e){return console.error(`[DiffViewer] save failed:`,e),{ok:!1,status:0}}finally{Z.value=!1}}async function At(){let e=await kt();if(!e.ok){if(e.status===412){jt();return}T.notify({type:`negative`,message:e.status===409?C(`diffViewer.agentRunning`):C(`diffViewer.saveFailed`),position:`top`})}}function jt(){T.dialog({title:C(`diffViewer.conflict.title`),message:C(`diffViewer.conflict.message`),dark:!0,persistent:!0,ok:{flat:!0,label:C(`diffViewer.conflict.reload`),color:`indigo-4`},cancel:{flat:!0,label:C(`diffViewer.conflict.keep`),color:`grey-5`}}).onOk(async()=>{M.value&&await Ot(M.value)})}function Mt(e,t){let n=t===`untracked`;T.dialog({title:C(n?`diff.deleteUntracked`:`diff.rollbackToRemote`),message:C(n?`diff.deleteUntrackedConfirm`:`diff.rollbackConfirm`,{path:e}),cancel:!0,persistent:!0,color:n?`red`:`orange`,ok:{label:C(n?`diff.deleteUntrackedConfirmOk`:`diff.rollbackConfirmOk`),color:n?`red-7`:`orange-7`,flat:!1,unelevated:!0}}).onOk(()=>{Nt(e)})}async function Nt(e){try{let t=await fetch(`/api/workspaces/${x.workspaceId}/rollback-file`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({path:e})});if(!t.ok){let e=await t.json().catch(()=>({}));T.notify({type:`negative`,message:e.error||C(`diff.rollbackFailed`),position:`top`});return}let n=await t.json().catch(()=>({})),r=C(`diff.rollbackDoneRemote`);n.target===`head`?r=C(`diff.rollbackDoneHead`):n.target===`deleted`&&(r=C(`diff.rollbackDoneDeleted`)),T.notify({type:`positive`,message:r,position:`top`}),await Dt(),M.value===e&&(D.value.some(t=>t.path===e)?await Ot(e):M.value=null)}catch(e){console.error(`rollbackFile failed:`,e),T.notify({type:`negative`,message:C(`diff.rollbackFailed`),position:`top`})}}let Pt=f(!1);function Ft(){if(!G)return;for(let e of K)e.dispose();K=[];let e=G.getModifiedEditor(),t=G.getOriginalEditor();for(let n of[e,t]){let e=n.onDidChangeCursorSelection(()=>{let e=n.getSelection();Pt.value=!!(e&&!e.isEmpty())});K.push(e)}}function It(){if(!(!G||!M.value))for(let e of[G.getModifiedEditor(),G.getOriginalEditor()]){let t=e.getSelection();if(t&&!t.isEmpty()){let n=e.getModel();if(!n)continue;let r=n.getValueInRange(t),i=e===G.getModifiedEditor()?`modified`:`original`;S(`sendToChat`,`\`\`\`\n// ${M.value} (${i}) L${t.startLineNumber}-L${t.endLineNumber}\n${r}\n\`\`\``);return}}}c(M,async(e,t)=>{if(X.value&&t){let e=await new Promise(e=>{T.dialog({title:C(`diffViewer.unsavedChanges.title`),message:C(`diffViewer.unsavedChanges.message`),dark:!0,persistent:!0,ok:{flat:!0,label:C(`diffViewer.unsavedChanges.save`),color:`indigo-4`},cancel:{flat:!0,label:C(`diffViewer.unsavedChanges.cancel`),color:`grey-5`}}).onOk(()=>e(`save`)).onCancel(()=>e(`cancel`))});if(e===`save`){let e=await kt();if(!e.ok){M.value=t,e.status===412?jt():T.notify({type:`negative`,message:C(`diffViewer.saveFailed`),position:`top`});return}}else if(e===`cancel`){M.value=t;return}}e?Ot(e):xt()}),c(L,()=>{G&&G.updateOptions({renderSideBySide:L.value===`side`})}),c(R,e=>{localStorage.setItem(Qe,e?`1`:`0`),G&&G.updateOptions({hideUnchangedRegions:{enabled:e,contextLineCount:3,minimumLineCount:3,revealLineCount:20}})}),c(B,async()=>{let e=M.value;await Dt(),e&&D.value.some(t=>t.path===e)?Ot(e):M.value=null}),c(z,async e=>{localStorage.setItem($e,e?`1`:`0`),await Dt(),M.value&&!D.value.some(e=>e.path===M.value)&&(M.value=null)});function Lt(e){switch(e){case`added`:return`#4ade80`;case`untracked`:return`#86efac`;case`deleted`:return`#f87171`;case`renamed`:return`#60a5fa`;default:return`#f59e0b`}}return i(Dt),a(()=>{H.flush(),xt()}),(e,i)=>(n(),g(`div`,Pe,[v(`div`,Fe,[l(w,{name:`difference`,size:`18px`,color:`indigo-4`,class:`q-mr-xs`}),v(`span`,Ie,s(e.$t(`diff.title`)),1),l(N,{label:`${D.value.length}`,color:`grey-8`,"text-color":`grey-4`,class:`q-ml-sm`,style:{"font-size":`10px`}},null,8,[`label`]),O.value?(n(),g(`span`,Le,[B.value===`branch`?(n(),g(_,{key:0},[v(`span`,Re,s(O.value),1),l(w,{name:`arrow_forward`,size:`11px`,color:`grey-8`,class:`q-mx-xs`}),v(`span`,ze,s(j.value),1)],64)):(n(),g(_,{key:1},[v(`span`,Be,`origin/`+s(j.value),1),l(w,{name:`arrow_forward`,size:`11px`,color:`grey-8`,class:`q-mx-xs`}),i[8]||=v(`span`,{class:`text-green-4`},`HEAD`,-1)],64))])):p(``,!0),M.value?(n(),g(`span`,Ve,s(M.value),1)):p(``,!0),$.value&&X.value?(n(),d(E,{key:2,dense:``,flat:``,size:`sm`,"no-caps":``,icon:`save`,label:e.$t(`diffViewer.save`),color:`indigo-4`,loading:Z.value,class:`q-ml-sm`,onClick:At},null,8,[`label`,`loading`])):p(``,!0),l(ue),l(ve,{modelValue:B.value,"onUpdate:modelValue":i[0]||=e=>B.value=e,dense:``,"no-caps":``,size:`sm`,"toggle-color":`indigo-8`,color:`grey-9`,"text-color":`grey-5`,options:[{label:e.$t(`diff.scopeBranch`),value:`branch`},{label:e.$t(`diff.scopeUnpushed`),value:`unpushed`}],class:`q-mr-sm`},null,8,[`modelValue`,`options`]),l(ve,{modelValue:V.value,"onUpdate:modelValue":i[1]||=e=>V.value=e,dense:``,"no-caps":``,size:`sm`,"toggle-color":`indigo-8`,color:`grey-9`,"text-color":`grey-5`,options:[{label:e.$t(`diff.modeInspect`),value:`inspect`},{label:e.$t(`diff.modeReview`),value:`review`}],class:`q-mr-sm`},null,8,[`modelValue`,`options`]),l(ve,{modelValue:L.value,"onUpdate:modelValue":i[2]||=e=>L.value=e,dense:``,"no-caps":``,size:`sm`,"toggle-color":`indigo-8`,color:`grey-9`,"text-color":`grey-5`,options:[{label:e.$t(`diff.side`),value:`side`},{label:e.$t(`diff.inline`),value:`inline`}],class:`q-mr-sm`},null,8,[`modelValue`,`options`]),l(E,{icon:R.value?`unfold_less`:`unfold_more`,dense:``,flat:``,size:`sm`,color:R.value?`indigo-4`:`grey-5`,class:`q-mr-sm`,onClick:i[3]||=e=>R.value=!R.value},{default:t(()=>[l(A,{anchor:`bottom middle`,self:`top middle`,delay:400},{default:t(()=>[m(s(R.value?e.$t(`diff.showUnchanged`):e.$t(`diff.hideUnchanged`)),1)]),_:1})]),_:1},8,[`icon`,`color`]),B.value===`branch`?(n(),d(E,{key:3,icon:`visibility`,dense:``,flat:``,size:`sm`,color:z.value?`indigo-4`:`grey-5`,class:`q-mr-sm`,onClick:i[4]||=e=>z.value=!z.value},{default:t(()=>[l(A,{anchor:`bottom middle`,self:`top middle`,delay:400},{default:t(()=>[m(s(z.value?e.$t(`diff.hideUntracked`):e.$t(`diff.showUntracked`)),1)]),_:1})]),_:1},8,[`color`])):p(``,!0),l(E,{flat:``,round:``,dense:``,icon:`close`,color:`grey-5`,size:`sm`,disable:U.value,onClick:i[5]||=e=>S(`close`)},{default:t(()=>[l(A,null,{default:t(()=>[m(s(e.$t(`tooltip.closeDiffViewer`)),1)]),_:1})]),_:1},8,[`disable`])]),l(ee,{dark:``}),v(`div`,He,[V.value===`review`?(n(),g(`div`,Ue,[l(Ne,{comments:Te.value,"global-message":Ee.value,submitting:U.value,onUpdateGlobal:u(H).setGlobalMessage,onJumpToFile:je,onJumpToComment:it,onSubmit:De},null,8,[`comments`,`global-message`,`submitting`,`onUpdateGlobal`])])):p(``,!0),v(`div`,{class:`diff-file-list-wrapper`,style:y({width:`${ot.value}px`,minWidth:`${nt}px`})},[!P.value&&D.value.length>0?(n(),d(k,{key:0,modelValue:wt.value,"onUpdate:modelValue":i[6]||=e=>wt.value=e,dense:``,dark:``,outlined:``,clearable:``,debounce:150,placeholder:e.$t(`diff.searchFiles`),class:`diff-file-search q-ma-xs`},{prepend:t(()=>[l(w,{name:`search`,size:`16px`})]),_:1},8,[`modelValue`,`placeholder`])):p(``,!0),l(le,{class:`diff-file-list q-pa-xs`,style:{width:`100%`,"border-right":`1px solid #2a2a4a`}},{default:t(()=>[P.value?(n(),d(oe,{key:0,size:`24px`,color:`grey-6`,class:`q-ma-md`})):D.value.length===0?(n(),g(`div`,We,s(e.$t(`diff.noChanges`)),1)):Et.value?(n(),g(`div`,Ge,s(e.$t(`diff.noFileMatch`)),1)):(n(),d(fe,{key:3,nodes:St.value,"node-key":`nodeKey`,"label-key":`label`,"children-key":`children`,dark:``,dense:``,"default-expand-all":``,"no-selection-unset":``,selected:Ct.value,filter:wt.value,"filter-method":Tt,class:`diff-tree`,"onUpdate:selected":i[7]||=e=>{typeof e!=`string`||!e.startsWith(`file:`)||(M.value=e.slice(5))}},{"default-header":t(({node:i})=>[i.isFolder?(n(),g(_,{key:0},[l(w,{name:`folder`,size:`14px`,color:`indigo-4`,class:`q-mr-xs`}),v(`span`,Ke,s(i.label),1),l(N,{label:i.children?u(de)(i.children):0,color:`grey-9`,"text-color":`grey-5`,class:`q-ml-xs`,style:{"font-size":`9px`}},null,8,[`label`]),V.value===`review`&&ke(Ae(i))>0?(n(),d(N,{key:0,label:String(ke(Ae(i))),color:`grey-7`,"text-color":`grey-3`,class:`q-ml-xs`,style:{"font-size":`9px`}},null,8,[`label`])):p(``,!0)],64)):(n(),g(_,{key:1},[l(w,{name:`description`,size:`14px`,style:y({color:Lt(i.file.status)}),class:`q-mr-xs`},{default:t(()=>[l(A,null,{default:t(()=>[m(s(i.file.status),1)]),_:2},1024)]),_:2},1032,[`style`]),v(`span`,qe,s(i.label),1),X.value&&i.file.path===M.value?(n(),g(`span`,Je,`●`)):p(``,!0),V.value===`review`&&(Oe.value.get(i.file.path)??0)>0?(n(),d(N,{key:1,label:String(Oe.value.get(i.file.path)),color:`indigo-8`,"text-color":`white`,class:`q-ml-xs`,style:{"font-size":`9px`}},null,8,[`label`])):p(``,!0),l(he,{"touch-position":``,"context-menu":``},{default:t(()=>[l(me,{dense:``,dark:``,style:{"min-width":`220px`}},{default:t(()=>[r((n(),d(se,{clickable:``,onClick:e=>Mt(i.file.path,i.file.status)},{default:t(()=>[l(ce,{avatar:``},{default:t(()=>[l(w,{name:i.file.status===`untracked`?`delete`:`restore`,size:`16px`,color:i.file.status===`untracked`?`red-5`:`orange-5`},null,8,[`name`,`color`])]),_:2},1024),l(ce,null,{default:t(()=>[m(s(i.file.status===`untracked`?e.$t(`diff.deleteUntracked`):e.$t(`diff.rollbackToRemote`)),1)]),_:2},1024)]),_:2},1032,[`onClick`])),[[ge]])]),_:2},1024)]),_:2},1024)],64))]),_:1},8,[`nodes`,`selected`,`filter`]))]),_:1}),v(`div`,{class:`diff-file-list-resize-handle`,onMousedown:st},null,32)],4),v(`div`,Ye,[F.value?(n(),g(`div`,Xe,[l(oe,{size:`32px`,color:`indigo-4`})])):M.value?p(``,!0):(n(),g(`div`,Ze,s(e.$t(`diff.selectFile`)),1)),v(`div`,{ref_key:`editorWrapperRef`,ref:ct,class:`col`,style:{"min-height":`0`,position:`relative`,overflow:`hidden`}},[v(`div`,{ref_key:`editorContainer`,ref:I,style:{position:`absolute`,inset:`0`}},null,512),(n(!0),g(_,null,o(J.value,e=>(n(),g(`div`,{key:e.zoneId,class:`review-zone-overlay`,style:y({top:`${e.topPx}px`,height:`${e.heightPx}px`})},[l(we,{comments:e.comments,"start-in-add-mode":e.transient,onAdd:t=>ht(M.value??``,e.line,t),onUpdate:(t,n)=>gt(M.value??``,e.line,t,n),onDelete:t=>_t(M.value??``,e.line,t),onDismissEmpty:t=>ft(e.line)},null,8,[`comments`,`start-in-add-mode`,`onAdd`,`onUpdate`,`onDelete`,`onDismissEmpty`])],4))),128))],512),Pt.value?(n(),d(E,{key:2,"no-caps":``,dense:``,size:`sm`,color:`primary`,icon:`chat`,label:e.$t(`diff.addToChat`),class:`send-to-chat-btn`,onClick:It},null,8,[`label`])):p(``,!0)])])]))}}),[[`__scopeId`,`data-v-7264f4e0`]]);export{it as default};