@loicngr/kobo 1.5.5 → 1.5.6

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 (49) hide show
  1. package/dist/server/db/schema.js +1 -1
  2. package/dist/server/routes/workspaces.js +9 -0
  3. package/dist/server/services/settings-service.js +25 -4
  4. package/dist/server/services/workspace-service.js +1 -1
  5. package/dist/server/services/worktree-service.js +3 -2
  6. package/dist/server/utils/git-ops.js +14 -0
  7. package/dist/server/utils/paths.js +13 -1
  8. package/package.json +1 -1
  9. package/src/client/dist/spa/assets/{ActivityFeed-CAgtfoqj.js → ActivityFeed-BScp_ie9.js} +1 -1
  10. package/src/client/dist/spa/assets/{CreatePage-CnsmjbZl.js → CreatePage-Cam6EJCg.js} +2 -2
  11. package/src/client/dist/spa/assets/CreatePage-Cy1V2bdx.css +1 -0
  12. package/src/client/dist/spa/assets/{DiffViewer-CwAhR0Bt.js → DiffViewer-DMa0FFUV.js} +2 -2
  13. package/src/client/dist/spa/assets/{MainLayout-D9UzZ0l0.js → MainLayout-DB5sQk0j.js} +2 -2
  14. package/src/client/dist/spa/assets/{QExpansionItem-ZAI_l6AW.js → QExpansionItem-BBe4EJ8c.js} +1 -1
  15. package/src/client/dist/spa/assets/{QList-aKZe9BNZ.js → QList-DJTvuGop.js} +1 -1
  16. package/src/client/dist/spa/assets/{QMenu-DDXq2SFM.js → QMenu-DnNUsPHb.js} +1 -1
  17. package/src/client/dist/spa/assets/{SettingsPage-DCgRTq-c.js → SettingsPage-BedYmy7N.js} +1 -1
  18. package/src/client/dist/spa/assets/WorkspacePage-Ck8G2Lhl.css +1 -0
  19. package/src/client/dist/spa/assets/WorkspacePage-DcVj7f0F.js +4 -0
  20. package/src/client/dist/spa/assets/{cssMode-CzYfUUcg.js → cssMode-TmSd3FtN.js} +1 -1
  21. package/src/client/dist/spa/assets/{editor.api-Do3RvGrr.js → editor.api-BYoDPXci.js} +1 -1
  22. package/src/client/dist/spa/assets/{editor.main-BXGLrNaH.js → editor.main-D2_WTVNi.js} +3 -3
  23. package/src/client/dist/spa/assets/{freemarker2-DD7dLGS5.js → freemarker2-BK0cJTj4.js} +1 -1
  24. package/src/client/dist/spa/assets/{handlebars-C6fNrY_c.js → handlebars-BT6xKkcN.js} +1 -1
  25. package/src/client/dist/spa/assets/{html-CsN_ZrNj.js → html-G6AG34m0.js} +1 -1
  26. package/src/client/dist/spa/assets/{htmlMode-BePbSvxH.js → htmlMode-Cal36mmb.js} +1 -1
  27. package/src/client/dist/spa/assets/i18n-ByuXBoTq.js +1 -0
  28. package/src/client/dist/spa/assets/i18n-DyD-u9TB.js +1 -0
  29. package/src/client/dist/spa/assets/{index-BJT6ZfVp.js → index-C9F8lzbI.js} +3 -3
  30. package/src/client/dist/spa/assets/{javascript-CkZZHPRD.js → javascript-B-6wB4JQ.js} +1 -1
  31. package/src/client/dist/spa/assets/{jsonMode-CsqbZ0c2.js → jsonMode-CT4pwl6t.js} +1 -1
  32. package/src/client/dist/spa/assets/{liquid-CB4bbF-9.js → liquid-BneTrBrq.js} +1 -1
  33. package/src/client/dist/spa/assets/{marked.esm-DIsIySzr.js → marked.esm-C01v3JRg.js} +1 -1
  34. package/src/client/dist/spa/assets/{mdx-goM-jFgd.js → mdx-ByZYBp9K.js} +1 -1
  35. package/src/client/dist/spa/assets/{models-Dwzf2zDK.js → models-C4seT9_L.js} +1 -1
  36. package/src/client/dist/spa/assets/{monaco.contribution-tq8HWx81.js → monaco.contribution-B2_1EuRF.js} +2 -2
  37. package/src/client/dist/spa/assets/{python-BKb3PkXw.js → python-CqrolrIy.js} +1 -1
  38. package/src/client/dist/spa/assets/{razor-rLKJylZh.js → razor-CPg4dghH.js} +1 -1
  39. package/src/client/dist/spa/assets/{settings-BdrDg_dO.js → settings-DNNmyYf-.js} +1 -1
  40. package/src/client/dist/spa/assets/{tsMode-CjX_dUdq.js → tsMode-CRHW8cKK.js} +1 -1
  41. package/src/client/dist/spa/assets/{typescript-Bg5NM6yP.js → typescript-D2lNktM6.js} +1 -1
  42. package/src/client/dist/spa/assets/{xml-BMWcIRqp.js → xml-C-qye9BU.js} +1 -1
  43. package/src/client/dist/spa/assets/{yaml-C2uOvXS0.js → yaml-DujvOKOb.js} +1 -1
  44. package/src/client/dist/spa/index.html +3 -3
  45. package/src/client/dist/spa/assets/CreatePage-CNnVeRGC.css +0 -1
  46. package/src/client/dist/spa/assets/WorkspacePage-BSBiQTKy.js +0 -4
  47. package/src/client/dist/spa/assets/WorkspacePage-DZwv9kFd.css +0 -1
  48. package/src/client/dist/spa/assets/i18n-C_tQYbyT.js +0 -1
  49. package/src/client/dist/spa/assets/i18n-zwZDkEfm.js +0 -1
@@ -10,7 +10,7 @@ export function initSchema(db) {
10
10
  status TEXT NOT NULL DEFAULT 'created',
11
11
  notion_url TEXT,
12
12
  notion_page_id TEXT,
13
- model TEXT NOT NULL DEFAULT 'claude-opus-4-6',
13
+ model TEXT NOT NULL DEFAULT 'claude-opus-4-7',
14
14
  reasoning_effort TEXT NOT NULL DEFAULT 'auto',
15
15
  permission_mode TEXT NOT NULL DEFAULT 'auto-accept',
16
16
  dev_server_status TEXT NOT NULL DEFAULT 'stopped',
@@ -38,6 +38,15 @@ app.post('/', async (c) => {
38
38
  if (!body.name || !body.projectPath || !body.sourceBranch || !body.workingBranch) {
39
39
  return c.json({ error: 'Missing required fields: name, projectPath, sourceBranch, workingBranch' }, 400);
40
40
  }
41
+ // Fetch the source branch from origin first — if this fails, block creation
42
+ // immediately (no DB records created, user stays on the create page).
43
+ try {
44
+ gitOps.fetchSourceBranch(body.projectPath, body.sourceBranch);
45
+ }
46
+ catch (err) {
47
+ const message = err instanceof Error ? err.message : String(err);
48
+ return c.json({ error: message }, 422);
49
+ }
41
50
  // Create workspace record
42
51
  const globalSettings = settingsService.getGlobalSettings();
43
52
  // workingBranch may be updated after Notion extraction to inject the ticket ID
@@ -139,8 +139,22 @@ const settingsMigrations = [
139
139
  ];
140
140
  /** Current settings schema version — always equals the highest migration version. */
141
141
  export const SETTINGS_SCHEMA_VERSION = settingsMigrations.length > 0 ? settingsMigrations[settingsMigrations.length - 1].version : 0;
142
- let settingsFilePath = getSettingsPath();
142
+ // In Vitest runs, default to a sentinel path so any test that reaches a real
143
+ // read/write without explicitly calling `_setSettingsPath()` first fails loud
144
+ // instead of silently clobbering the user's production `~/.config/kobo/settings.json`.
145
+ // A past incident (see investigation 2026-04-17) showed a `vi.spyOn(fs, 'readFileSync')`
146
+ // in another test file indirectly triggered `readSettings()` and overwrote the
147
+ // real settings file. This guard ensures such a regression cannot recur.
148
+ const VITEST_UNINITIALIZED_PATH = '__VITEST_SETTINGS_PATH_NOT_SET__';
149
+ let settingsFilePath = process.env.VITEST ? VITEST_UNINITIALIZED_PATH : getSettingsPath();
143
150
  let settingsBackupSequence = 0;
151
+ function ensureSettingsPathInitialized() {
152
+ if (settingsFilePath === VITEST_UNINITIALIZED_PATH) {
153
+ throw new Error('[settings-service] Attempted to access settings in test mode without calling `_setSettingsPath()` first. ' +
154
+ 'This means a test is exercising settings-service indirectly (e.g. via `extractSentryIssue`, `getEffectiveSettings`) ' +
155
+ 'without proper isolation. Either `vi.mock("../server/services/settings-service.js", ...)` or call `_setSettingsPath(tmpPath)` in `beforeEach`.');
156
+ }
157
+ }
144
158
  /** Override the settings file path (used by tests). */
145
159
  export function _setSettingsPath(p) {
146
160
  settingsFilePath = p;
@@ -149,7 +163,7 @@ function defaultSettings() {
149
163
  return {
150
164
  schemaVersion: SETTINGS_SCHEMA_VERSION,
151
165
  global: {
152
- defaultModel: 'auto',
166
+ defaultModel: 'claude-opus-4-7',
153
167
  dangerouslySkipPermissions: true,
154
168
  prPromptTemplate: DEFAULT_PR_PROMPT_TEMPLATE,
155
169
  gitConventions: DEFAULT_GIT_CONVENTIONS,
@@ -206,6 +220,7 @@ export function runSettingsMigrations(raw) {
206
220
  return current;
207
221
  }
208
222
  function readSettings() {
223
+ ensureSettingsPathInitialized();
209
224
  if (!fs.existsSync(settingsFilePath)) {
210
225
  const defaults = defaultSettings();
211
226
  writeSettings(defaults);
@@ -217,19 +232,24 @@ function readSettings() {
217
232
  parsed = JSON.parse(raw);
218
233
  }
219
234
  catch {
235
+ createSettingsBackupIfPresent();
220
236
  const defaults = defaultSettings();
221
237
  writeSettings(defaults);
222
238
  return defaults;
223
239
  }
224
240
  if (!parsed || typeof parsed !== 'object') {
241
+ createSettingsBackupIfPresent();
225
242
  const defaults = defaultSettings();
226
243
  writeSettings(defaults);
227
244
  return defaults;
228
245
  }
229
246
  const originalVersion = parsed.schemaVersion;
230
247
  const migrated = runSettingsMigrations(parsed);
231
- // If migrations bumped the version, persist the upgraded settings so the
232
- // next process doesn't re-run them on every load.
248
+ // Restore any global fields that may have been removed by external edits.
249
+ // Defaults act as fallback for missing keys; existing values are preserved.
250
+ const globalDefaults = defaultSettings().global;
251
+ migrated.global = { ...globalDefaults, ...migrated.global };
252
+ // Persist if migrations bumped the version, or if global fields were restored.
233
253
  if (migrated.schemaVersion !== originalVersion) {
234
254
  writeSettings(migrated);
235
255
  }
@@ -245,6 +265,7 @@ function createSettingsBackupIfPresent() {
245
265
  fs.copyFileSync(settingsFilePath, backupPath);
246
266
  }
247
267
  function writeSettings(settings, options) {
268
+ ensureSettingsPathInitialized();
248
269
  const tmpPath = `${settingsFilePath}.tmp`;
249
270
  const dir = path.dirname(settingsFilePath);
250
271
  if (!fs.existsSync(dir)) {
@@ -51,7 +51,7 @@ export function createWorkspace(data) {
51
51
  db.prepare(`
52
52
  INSERT INTO workspaces (id, name, project_path, source_branch, working_branch, status, notion_url, notion_page_id, model, reasoning_effort, permission_mode, created_at, updated_at)
53
53
  VALUES (?, ?, ?, ?, ?, 'created', ?, ?, ?, ?, ?, ?, ?)
54
- `).run(id, data.name, data.projectPath, data.sourceBranch, data.workingBranch, data.notionUrl ?? null, data.notionPageId ?? null, data.model ?? 'claude-opus-4-6', data.reasoningEffort ?? 'auto', data.permissionMode ?? 'auto-accept', now, now);
54
+ `).run(id, data.name, data.projectPath, data.sourceBranch, data.workingBranch, data.notionUrl ?? null, data.notionPageId ?? null, data.model ?? 'claude-opus-4-7', data.reasoningEffort ?? 'auto', data.permissionMode ?? 'auto-accept', now, now);
55
55
  return getWorkspace(id);
56
56
  }
57
57
  /** Fetch a single workspace by ID, or null if not found. */
@@ -46,8 +46,9 @@ export function createWorktree(projectPath, branchName, sourceBranch) {
46
46
  }
47
47
  const worktreePath = path.join(worktreesDir, branchName);
48
48
  try {
49
- // Try creating a new branch + worktree
50
- git(projectPath, ['worktree', 'add', '-b', branchName, worktreePath, sourceBranch]);
49
+ // Use origin/<sourceBranch> as the base so the worktree starts from the
50
+ // freshly-fetched remote ref (fetchSourceBranch is always called first).
51
+ git(projectPath, ['worktree', 'add', '-b', branchName, worktreePath, `origin/${sourceBranch}`]);
51
52
  }
52
53
  catch (err) {
53
54
  const message = err instanceof Error ? err.message : String(err);
@@ -109,6 +109,20 @@ export function pushBranch(repoPath, branchName, remote = 'origin') {
109
109
  throw new Error(`Failed to push branch '${branchName}' to '${remote}': ${message}`);
110
110
  }
111
111
  }
112
+ /**
113
+ * Fetch a single branch from the remote. Throws if the fetch fails (no remote,
114
+ * branch absent on remote, network error, etc.). Call this before creating a
115
+ * worktree to ensure `origin/<sourceBranch>` is up to date.
116
+ */
117
+ export function fetchSourceBranch(repoPath, sourceBranch, remote = 'origin') {
118
+ try {
119
+ git(repoPath, ['fetch', remote, sourceBranch]);
120
+ }
121
+ catch (err) {
122
+ const message = err instanceof Error ? err.message : String(err);
123
+ throw new Error(`Failed to fetch '${sourceBranch}' from '${remote}': ${message}`);
124
+ }
125
+ }
112
126
  /** Pull the current branch from the remote using fast-forward only. */
113
127
  export function pullBranch(repoPath, branchName, remote = 'origin') {
114
128
  try {
@@ -20,6 +20,15 @@ const packageRoot = path.resolve(selfDir, '..', '..', '..');
20
20
  export function getPackageAssetPath(...parts) {
21
21
  return path.join(packageRoot, ...parts);
22
22
  }
23
+ // Dev-mode protection: when this module is loaded from its TypeScript source
24
+ // (i.e. via tsx/ts-node during development), automatically enforce the local
25
+ // data directory so production settings in ~/.config/kobo are never touched.
26
+ // Bypassed in Vitest (VITEST env var) so unit tests can exercise all paths.
27
+ let _devModeProtection = fileURLToPath(import.meta.url).endsWith('.ts') && !process.env.VITEST;
28
+ /** Override the dev-mode protection flag. Used by tests only. */
29
+ export function _setDevModeProtection(value) {
30
+ _devModeProtection = value;
31
+ }
23
32
  /**
24
33
  * Resolves the Kōbō home directory for user data (DB, settings). Respects
25
34
  * KOBO_HOME when set, otherwise defaults to an XDG-compliant location under
@@ -30,9 +39,12 @@ export function getPackageAssetPath(...parts) {
30
39
  * the repo-relative data/ directory and never touches the user's real home.
31
40
  * For stricter isolation, set KOBO_ENFORCE_LOCAL_HOME=1 to force local writes
32
41
  * to either KOBO_HOME (if provided) or <packageRoot>/data.
42
+ *
43
+ * Dev-mode auto-detection: when running from TypeScript source (tsx), the module
44
+ * automatically enforces the local data directory even without env vars set.
33
45
  */
34
46
  export function getKoboHome() {
35
- if (process.env.KOBO_ENFORCE_LOCAL_HOME === '1') {
47
+ if (process.env.KOBO_ENFORCE_LOCAL_HOME === '1' || _devModeProtection) {
36
48
  if (process.env.KOBO_HOME) {
37
49
  return path.resolve(process.env.KOBO_HOME);
38
50
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@loicngr/kobo",
3
- "version": "1.5.5",
3
+ "version": "1.5.6",
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{$ as e,D as t,I as n,N as r,P as i,R as a,U as o,W as s,_ as c,a as l,d as u,f as d,g as f,it as ee,m as p,n as te,p as m,u as h,vt as g,xt as _,y as ne}from"./vue-i18n-CFW7O-jl.js";import{L as v,T as y,bt as re}from"./scroll-CHtHNzvE.js";import{E as ie,O as ae}from"./index-BJT6ZfVp.js";import{t as b}from"./QSpinnerDots-DytntAbf.js";import{n as x,p as S,t as C}from"./_plugin-vue_export-helper-DkL3SKZ8.js";import{n as oe,t as se}from"./marked.esm-DIsIySzr.js";var ce={key:0,class:`af-empty column items-center justify-center text-center q-pa-xl`},le={class:`text-grey-6 q-mt-md text-body2`},ue={class:`text-grey-8 text-caption q-mt-xs`},de={key:1,class:`row justify-center q-my-sm`},fe=[`data-item-id`],pe={class:`af-tool row items-center q-gutter-xs`},me={class:`af-tool-label text-indigo-4`},he={class:`af-time`},ge={key:0,class:`text-grey-4 q-mb-xs`},_e={class:`af-ask-options-list q-mb-sm`},ve={class:`text-weight-bold text-grey-3`},ye={key:0},be={key:1,class:`af-ask-buttons q-gutter-xs`},xe={key:0,class:`q-mt-sm row justify-end`},Se=[`onClick`],Ce={class:`af-file-header row items-center no-wrap q-gutter-xs`},we={class:`af-file-path text-grey-4 ellipsis`},Te={class:`af-diff-stats`},Ee={key:0,class:`text-green-5`},De={key:1,class:`text-red-5 q-ml-xs`},Oe={class:`af-time`},ke={class:`af-diff-sign`},Ae={key:1,class:`af-diff-line af-diff-del`},je={key:0,class:`af-diff-line text-grey-7 text-italic`},Me=[`onClick`],Ne={class:`af-tool-label text-grey-7`},Pe={key:0,class:`af-tool-desc text-grey-8`},Fe={class:`af-time`},Ie={key:0,class:`af-tool-args q-mt-xs rounded-borders`},Le={class:`af-args-pre`},Re={class:`af-text-header row items-center q-mb-xs`},ze={class:`af-time`},Be=[`innerHTML`],Ve=[`onClick`],He={class:`af-system-content text-caption text-amber-6`},Ue={class:`af-time`},We={key:0,class:`af-system-details q-mt-xs rounded-borders`},Ge={class:`af-args-pre`},Ke={key:5,class:`row items-center`},qe={class:`af-error-content text-red-5`},Je={class:`af-time`},Ye={key:6,class:`row items-center`},Xe={class:`af-raw-content text-grey-7`},Ze={class:`af-time`},Qe={class:`scroll-buttons`},w=50,$e=50,T=C(ne({__name:`ActivityFeed`,setup(ne){function C(e){let t=se.parse(e,{async:!1,breaks:!0,gfm:!0});return oe.sanitize(t)}let{t:T}=te(),E=ae(),et=ie(),D=e(null),O=e(!1),k=e(new Set),A=new Map;function j(e,t){return A.has(e)||A.set(e,Y(t)),A.get(e)}let M=new Map;function tt(e,t){return M.has(e)||M.set(e,C(t)),M.get(e)}let N=h(()=>{let e=E.activityFeed;for(let t=e.length-1;t>=0;t--){let n=e[t];if(n.meta?.sender===`user`)return null;if(n.type===`tool_use`&&n.content===`AskUserQuestion`)return n.id}return null}),P=e(new Map);function nt(e,t,n){P.value.has(e)||P.value.set(e,new Map);let r=P.value.get(e);r.get(t)===n?r.delete(t):r.set(t,n)}function F(e,t,n){return P.value.get(e)?.get(t)===n}function rt(e){let t=P.value.get(e);return!!t&&t.size>0}function it(e,t){let n=E.selectedWorkspaceId;if(!n)return;let r=P.value.get(e);if(!r||r.size===0)return;let i=[];for(let[e,n]of r.entries()){let r=t[e];if(!r)continue;let a=r.options[n];a&&i.push(`${r.question}: ${a.label}`)}i.length>0&&et.sendChatMessage(n,i.join(`
1
+ import{$ as e,D as t,I as n,N as r,P as i,R as a,U as o,W as s,_ as c,a as l,d as u,f as d,g as f,it as ee,m as p,n as te,p as m,u as h,vt as g,xt as _,y as ne}from"./vue-i18n-CFW7O-jl.js";import{L as v,T as y,bt as re}from"./scroll-CHtHNzvE.js";import{E as ie,O as ae}from"./index-C9F8lzbI.js";import{t as b}from"./QSpinnerDots-DytntAbf.js";import{n as x,p as S,t as C}from"./_plugin-vue_export-helper-DkL3SKZ8.js";import{n as oe,t as se}from"./marked.esm-C01v3JRg.js";var ce={key:0,class:`af-empty column items-center justify-center text-center q-pa-xl`},le={class:`text-grey-6 q-mt-md text-body2`},ue={class:`text-grey-8 text-caption q-mt-xs`},de={key:1,class:`row justify-center q-my-sm`},fe=[`data-item-id`],pe={class:`af-tool row items-center q-gutter-xs`},me={class:`af-tool-label text-indigo-4`},he={class:`af-time`},ge={key:0,class:`text-grey-4 q-mb-xs`},_e={class:`af-ask-options-list q-mb-sm`},ve={class:`text-weight-bold text-grey-3`},ye={key:0},be={key:1,class:`af-ask-buttons q-gutter-xs`},xe={key:0,class:`q-mt-sm row justify-end`},Se=[`onClick`],Ce={class:`af-file-header row items-center no-wrap q-gutter-xs`},we={class:`af-file-path text-grey-4 ellipsis`},Te={class:`af-diff-stats`},Ee={key:0,class:`text-green-5`},De={key:1,class:`text-red-5 q-ml-xs`},Oe={class:`af-time`},ke={class:`af-diff-sign`},Ae={key:1,class:`af-diff-line af-diff-del`},je={key:0,class:`af-diff-line text-grey-7 text-italic`},Me=[`onClick`],Ne={class:`af-tool-label text-grey-7`},Pe={key:0,class:`af-tool-desc text-grey-8`},Fe={class:`af-time`},Ie={key:0,class:`af-tool-args q-mt-xs rounded-borders`},Le={class:`af-args-pre`},Re={class:`af-text-header row items-center q-mb-xs`},ze={class:`af-time`},Be=[`innerHTML`],Ve=[`onClick`],He={class:`af-system-content text-caption text-amber-6`},Ue={class:`af-time`},We={key:0,class:`af-system-details q-mt-xs rounded-borders`},Ge={class:`af-args-pre`},Ke={key:5,class:`row items-center`},qe={class:`af-error-content text-red-5`},Je={class:`af-time`},Ye={key:6,class:`row items-center`},Xe={class:`af-raw-content text-grey-7`},Ze={class:`af-time`},Qe={class:`scroll-buttons`},w=50,$e=50,T=C(ne({__name:`ActivityFeed`,setup(ne){function C(e){let t=se.parse(e,{async:!1,breaks:!0,gfm:!0});return oe.sanitize(t)}let{t:T}=te(),E=ae(),et=ie(),D=e(null),O=e(!1),k=e(new Set),A=new Map;function j(e,t){return A.has(e)||A.set(e,Y(t)),A.get(e)}let M=new Map;function tt(e,t){return M.has(e)||M.set(e,C(t)),M.get(e)}let N=h(()=>{let e=E.activityFeed;for(let t=e.length-1;t>=0;t--){let n=e[t];if(n.meta?.sender===`user`)return null;if(n.type===`tool_use`&&n.content===`AskUserQuestion`)return n.id}return null}),P=e(new Map);function nt(e,t,n){P.value.has(e)||P.value.set(e,new Map);let r=P.value.get(e);r.get(t)===n?r.delete(t):r.set(t,n)}function F(e,t,n){return P.value.get(e)?.get(t)===n}function rt(e){let t=P.value.get(e);return!!t&&t.size>0}function it(e,t){let n=E.selectedWorkspaceId;if(!n)return;let r=P.value.get(e);if(!r||r.size===0)return;let i=[];for(let[e,n]of r.entries()){let r=t[e];if(!r)continue;let a=r.options[n];a&&i.push(`${r.question}: ${a.label}`)}i.length>0&&et.sendChatMessage(n,i.join(`
2
2
  `))}let I=e(-1);function at(){let e=E.activityFeed,n=e.map((e,t)=>({item:e,idx:t})).filter(({item:e})=>e.meta?.sender===`user`);if(n.length===0)return;I.value<=0?I.value=n.length-1:I.value--;let r=n[I.value].idx,i=n[I.value].item.id,a=e.length-r;a>L.value&&(L.value=Math.min(a+10,e.length)),t(()=>{let e=D.value?.querySelector(`[data-item-id="${i}"]`);e&&e.scrollIntoView({behavior:`smooth`,block:`center`})})}o(()=>E.selectedWorkspaceId,()=>{I.value=-1,A.clear(),P.value.clear(),M.clear(),W.clear(),B=0,O.value=!1});let L=e(w),R=h(()=>{let e=E.activityFeed;return e.length<=L.value?e:e.slice(-L.value)});o(()=>E.selectedWorkspaceId,()=>{L.value=w}),o(R,e=>{let t=new Set(e.map(e=>e.id));for(let e of A.keys())t.has(e)||A.delete(e);for(let e of P.value.keys())t.has(e)||P.value.delete(e);for(let e of M.keys())t.has(e)||M.delete(e);for(let e of W.keys())t.has(e)||W.delete(e)},{flush:`post`});let z=e(!1),B=0;function V(){let e=D.value;if(e&&(e.scrollHeight-e.scrollTop-e.clientHeight<50?z.value=!1:e.scrollTop<B&&(z.value=!0),B=e.scrollTop,e.scrollTop<200&&!O.value)){let n=E.activityFeed.length;if(L.value<n){O.value=!0;let r=e.scrollHeight;L.value=Math.min(L.value+$e,n),t(()=>{D.value&&(D.value.scrollTop+=D.value.scrollHeight-r),O.value=!1})}else if(E.selectedWorkspaceId&&E.hasMoreEvents[E.selectedWorkspaceId]!==!1){O.value=!0;let n=e.scrollHeight;E.fetchOlderEvents(E.selectedWorkspaceId).then(e=>{e?(L.value=E.activityFeed.length,t(()=>{D.value&&(D.value.scrollTop+=D.value.scrollHeight-n),O.value=!1})):O.value=!1})}}}function H(){if(z.value)return;let e=D.value;e&&(e.scrollTop=e.scrollHeight)}function ot(){z.value=!1,L.value=w,t(()=>{let e=D.value;e&&(e.scrollTop=e.scrollHeight)})}o(()=>E.activityFeed.length,()=>{t(H)}),r(()=>{D.value?.addEventListener(`scroll`,V),t(H)}),i(()=>{D.value?.removeEventListener(`scroll`,V)});function U(e){return new Date(e).toLocaleTimeString(void 0,{hour:`2-digit`,minute:`2-digit`,second:`2-digit`})}function st(e,t){let n=e.split(`
3
3
  `),r=t.split(`
4
4
  `),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}let W=new Map;function ct(e,t,n){return W.has(e)||W.set(e,st(t,n)),W.get(e)}function G(e){if(e.type!==`tool_use`)return null;let t=e.meta?.input;if(e.content===`Edit`){if(!t?.file_path)return null;let e=t.file_path,n=t.old_string??``,r=t.new_string??``,i=n.split(`
@@ -1,2 +1,2 @@
1
- import{$ as e,E as t,I as n,N as r,P as i,R as ee,S as te,U as ne,W as a,_ as o,a as s,d as c,f as l,g as u,it as re,m as d,n as ie,p as f,u as p,xt as m,y as ae,yt as oe}from"./vue-i18n-CFW7O-jl.js";import{L as h,T as g,bt as _,ht as se,yt as v}from"./scroll-CHtHNzvE.js";import{i as y}from"./private.use-form-BWfHn8G9.js";import{t as ce}from"./settings-BdrDg_dO.js";import{E as le,O as ue,r as b,w as de}from"./index-BJT6ZfVp.js";import{n as x,p as fe,t as pe}from"./_plugin-vue_export-helper-DkL3SKZ8.js";import{a as me,i as S,n as C,r as w}from"./QMenu-DDXq2SFM.js";import{t as he}from"./QExpansionItem-ZAI_l6AW.js";import{n as ge,r as T,t as _e}from"./models-Dwzf2zDK.js";var ve={class:`create-inner`},ye={class:`create-title text-center text-weight-bold q-mb-lg text-grey-3`},be={class:`create-card rounded-borders`},xe={class:`card-top-bar row items-center q-px-md q-py-xs`},Se={class:`model-badge cursor-default row items-center q-gutter-xs`},Ce={class:`text-indigo-3 text-weight-medium text-caption`},we={key:0,class:`notion-url-wrap`},Te={key:0,class:`notion-error text-caption q-px-md q-pb-xs text-red-5`},Ee={key:1,class:`notion-valid text-caption q-px-md q-pb-xs text-green-4`},De={key:0,class:`sentry-url-wrap`},Oe={key:0,class:`sentry-error text-caption q-px-md q-pb-xs text-red-5`},ke={key:1,class:`sentry-valid text-caption q-px-md q-pb-xs text-red-4`},Ae={class:`card-name-wrap`},je={class:`card-textarea-wrap`},Me={class:`manual-hint q-px-md q-py-sm text-caption text-grey-6`},Ne={class:`q-pa-sm manual-section-body`},Pe={class:`row items-center q-gutter-sm q-mb-sm`},Fe={class:`col text-caption text-grey-4`},Ie={class:`q-pa-sm manual-section-body`},Le={class:`row items-center q-gutter-sm q-mb-sm`},Re={class:`col text-caption text-grey-4`},ze={class:`card-bottom-bar row items-center wrap q-px-sm q-py-xs q-gutter-xs`},Be={class:`bottom-select-label row items-center no-wrap`},Ve={class:`bottom-select-label row items-center no-wrap`},He={class:`bottom-select-label row items-center no-wrap`},Ue={class:`bottom-select-label row items-center no-wrap`},We={class:`bottom-select-label row items-center no-wrap`},Ge={class:`bottom-select-label row items-center no-wrap`},Ke={class:`create-hint text-center text-body2 q-mt-md text-grey-8`},E=pe(ae({__name:`CreatePage`,setup(ae){let pe=de(),E=me(),qe=ue(),D=ce(),{t:O}=ie(),Je=e([]),k=e(``),A=e(``),j=e(``),M=e(!1),N=e(`auto`),P=e(`auto`),F=e(``),I=e(null),L=e(`feature`),R=e(!1),Ye=[{label:`feature/`,value:`feature`},{label:`fix/`,value:`fix`},{label:`hotfix/`,value:`hotfix`},{label:`chore/`,value:`chore`},{label:`refactor/`,value:`refactor`},{label:`docs/`,value:`docs`},{label:`test/`,value:`test`}],z=e(D.global.defaultPermissionMode||`plan`),B=e([]),V=e(!1),H=e(!1),Xe=p(()=>[..._e.map(e=>({label:O(e.i18nLabelKey),value:e.value,description:O(e.i18nDescriptionKey)}))]);function U(e){let t=e.indexOf(`:`);return t>=0?e.slice(t+1).trim():e}let Ze=p(()=>[{label:U(O(`reasoning.auto`)),value:`auto`,description:O(`reasoning.autoDescription`)},{label:U(O(`reasoning.low`)),value:`low`,description:O(`reasoning.lowDescription`)},{label:U(O(`reasoning.medium`)),value:`medium`,description:O(`reasoning.mediumDescription`)},{label:U(O(`reasoning.high`)),value:`high`,description:O(`reasoning.highDescription`)},{label:U(O(`reasoning.max`)),value:`max`,description:O(`reasoning.maxDescription`)}]),W=p(()=>j.value.trim().startsWith(`https://www.notion.so/`)),G=e([]),K=e([]),q=e(``),J=e(``),Y=p(()=>!M.value||!W.value);function Qe(){let e=q.value.trim();e&&(G.value.push(e),q.value=``)}function $e(e){G.value.splice(e,1)}function et(){let e=J.value.trim();e&&(K.value.push(e),J.value=``)}function tt(e){K.value.splice(e,1)}function nt(){M.value=!M.value,M.value||(j.value=``)}let X=e(!1),Z=e(``),Q=p(()=>/\/issues\/\d+/.test(Z.value.trim()));function rt(){X.value=!X.value,X.value||(Z.value=``)}async function it(e){if(!e.trim()){B.value=[],I.value=null;return}V.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();B.value=n.local??n.branches??[],B.value.length>0&&!I.value&&(I.value=B.value[0]??null)}catch{B.value=[],I.value=null}finally{V.value=!1}}function at(e){let t=D.getProjectByPath(e);t&&(t.defaultSourceBranch&&(I.value=t.defaultSourceBranch),t.defaultModel?N.value=t.defaultModel:D.global.defaultModel&&(N.value=D.global.defaultModel))}let $=null;ne(F,e=>{$&&clearTimeout($),$=setTimeout(()=>{I.value=null,it(e),at(e)},500)});function ot(e,t){t(()=>{Je.value=D.projectPaths.filter(t=>t.toLowerCase().includes(e.toLowerCase()))})}r(()=>{D.fetchSettings()}),i(()=>{$&&clearTimeout($)});function st(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 ct(){return k.value.trim()?k.value.trim().substring(0,80):!M.value&&A.value.trim()&&(A.value.trim().split(`
2
- `)[0]??``).substring(0,80)||`workspace`}function lt(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 ut(){return M.value&&!W.value?O(`createPage.validationNotionUrl`):X.value&&!Q.value?O(`createPage.sentryValidation`):!M.value&&!X.value&&!A.value.trim()?O(`createPage.validationDescription`):!M.value&&!X.value&&(!ct()||ct()===`workspace`)&&!k.value.trim()&&!A.value.trim()?O(`createPage.validationName`):F.value.trim()?I.value?null:O(`createPage.validationBranch`):O(`createPage.validationPath`)}async function dt(){let e=ut();if(e){E.notify({type:`negative`,message:e,position:`top`});return}H.value=!0;try{let e=ct(),t;t=M.value&&W.value?lt(j.value.trim()):e===`workspace`?`task-${Date.now()}`:st(e);let n=`${L.value}/${t}`,r={name:e,projectPath:F.value.trim(),sourceBranch:I.value,workingBranch:n,model:N.value,reasoningEffort:P.value,...M.value&&W.value?{notionUrl:j.value.trim()}:{},...X.value&&Q.value?{sentryUrl:Z.value.trim()}:{},...Y.value&&G.value.length>0?{tasks:G.value}:{},...Y.value&&K.value.length>0?{acceptanceCriteria:K.value}:{},...R.value?{skipSetupScript:!0}:{},...A.value.trim()?{description:A.value.trim()}:{},permissionMode:z.value},i=await qe.createWorkspace(r);le().subscribe(i.id),qe.selectWorkspace(i.id),pe.push({name:`workspace`,params:{id:i.id}})}catch{E.notify({type:`negative`,message:O(`createPage.errorCreating`),position:`top`})}finally{H.value=!1}}return(e,r)=>(n(),l(ge,{class:`create-page flex flex-center column`},{default:a(()=>[c(`div`,ve,[c(`div`,ye,m(e.$t(`createPage.title`)),1),c(`div`,be,[c(`div`,xe,[c(`span`,Se,[o(h,{name:`auto_awesome`,size:`14px`,color:`indigo-4`}),c(`span`,Ce,m(e.$t(`createPage.claudeCode`)),1)]),o(fe),o(g,{flat:``,dense:``,"no-caps":``,size:`sm`,color:M.value?`green-4`:`grey-5`,class:`notion-toggle-btn text-caption rounded-borders`,onClick:nt},{default:a(()=>[o(h,{name:`description`,size:`14px`,class:`q-mr-xs`}),u(` `+m(M.value?e.$t(`createPage.notionEnabled`):e.$t(`createPage.importNotion`)),1)]),_:1},8,[`color`]),o(g,{flat:``,dense:``,"no-caps":``,size:`sm`,color:X.value?`red-4`:`grey-5`,class:`sentry-toggle-btn text-caption rounded-borders q-ml-sm`,onClick:rt},{default:a(()=>[o(h,{name:`bug_report`,size:`14px`,class:`q-mr-xs`}),u(` `+m(X.value?e.$t(`createPage.sentryEnabled`):e.$t(`createPage.importSentry`)),1)]),_:1},8,[`color`])]),o(y,{color:`grey-9`}),o(se,{name:`slide`},{default:a(()=>[M.value?(n(),d(`div`,we,[o(b,{modelValue:j.value,"onUpdate:modelValue":r[0]||=e=>j.value=e,borderless:``,dense:``,placeholder:e.$t(`createPage.notionPlaceholder`),class:`notion-url-input`,"input-class":`notion-url-input-inner`},{prepend:a(()=>[o(h,{name:`link`,size:`16px`,color:W.value?`green-4`:`grey-6`},null,8,[`color`])]),_:1},8,[`modelValue`,`placeholder`]),j.value.trim()&&!W.value?(n(),d(`div`,Te,m(e.$t(`createPage.notionValidation`)),1)):f(``,!0),W.value?(n(),d(`div`,Ee,m(e.$t(`createPage.notionAutoExtract`)),1)):f(``,!0)])):f(``,!0)]),_:1}),M.value?(n(),l(y,{key:0,color:`grey-9`})):f(``,!0),o(se,{name:`slide`},{default:a(()=>[X.value?(n(),d(`div`,De,[o(b,{modelValue:Z.value,"onUpdate:modelValue":r[1]||=e=>Z.value=e,borderless:``,dense:``,placeholder:e.$t(`createPage.sentryPlaceholder`),class:`sentry-url-input`,"input-class":`sentry-url-input-inner`},{prepend:a(()=>[o(h,{name:`link`,size:`16px`,color:Q.value?`red-4`:`grey-6`},null,8,[`color`])]),_:1},8,[`modelValue`,`placeholder`]),Z.value.trim()&&!Q.value?(n(),d(`div`,Oe,m(e.$t(`createPage.sentryValidation`)),1)):f(``,!0),Q.value?(n(),d(`div`,ke,m(e.$t(`createPage.sentryAutoExtract`)),1)):f(``,!0)])):f(``,!0)]),_:1}),X.value?(n(),l(y,{key:1,color:`grey-9`})):f(``,!0),c(`div`,Ae,[o(b,{modelValue:k.value,"onUpdate:modelValue":r[2]||=e=>k.value=e,borderless:``,dense:``,placeholder:M.value&&W.value?e.$t(`createPage.workspaceName`):e.$t(`createPage.workspaceNamePlaceholder`),class:`name-input`,"input-class":`name-input-inner`},null,8,[`modelValue`,`placeholder`])]),o(y,{color:`grey-9`}),c(`div`,je,[o(b,{modelValue:A.value,"onUpdate:modelValue":r[3]||=e=>A.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:[v(_(dt,[`ctrl`]),[`enter`]),v(_(dt,[`meta`]),[`enter`])]},null,8,[`modelValue`,`placeholder`,`onKeydown`])]),o(y,{color:`grey-9`}),Y.value?(n(),d(s,{key:2},[c(`div`,Me,m(e.$t(`createPage.manualHint`)),1),o(he,{dark:``,dense:``,label:e.$t(`createPage.tasks`,{count:G.value.length}),"header-class":`text-grey-4 manual-expansion-header`,class:`manual-expansion q-mx-sm`},{default:a(()=>[c(`div`,Ne,[c(`div`,Pe,[o(b,{modelValue:q.value,"onUpdate:modelValue":r[4]||=e=>q.value=e,dark:``,dense:``,borderless:``,placeholder:e.$t(`createPage.addTask`),class:`col manual-input`,"input-class":`manual-input-inner`,onKeydown:v(_(Qe,[`prevent`]),[`enter`])},null,8,[`modelValue`,`placeholder`,`onKeydown`]),o(g,{flat:``,dense:``,round:``,icon:`add`,color:`indigo-4`,disable:!q.value.trim(),onClick:Qe},{default:a(()=>[o(x,null,{default:a(()=>[u(m(e.$t(`tooltip.addTask`)),1)]),_:1})]),_:1},8,[`disable`])]),(n(!0),d(s,null,ee(G.value,(t,r)=>(n(),d(`div`,{key:`task-${r}`,class:`row items-center q-py-xs manual-item`},[c(`span`,Fe,m(t),1),o(g,{flat:``,dense:``,round:``,icon:`close`,size:`xs`,color:`grey-6`,onClick:e=>$e(r)},{default:a(()=>[o(x,null,{default:a(()=>[u(m(e.$t(`tooltip.removeTask`)),1)]),_:1})]),_:1},8,[`onClick`])]))),128))])]),_:1},8,[`label`]),o(he,{dark:``,dense:``,label:e.$t(`createPage.acceptanceCriteria`,{count:K.value.length}),"header-class":`text-grey-4 manual-expansion-header`,class:`manual-expansion q-mx-sm q-mb-sm`},{default:a(()=>[c(`div`,Ie,[c(`div`,Le,[o(b,{modelValue:J.value,"onUpdate:modelValue":r[5]||=e=>J.value=e,dark:``,dense:``,borderless:``,placeholder:e.$t(`createPage.addCriterion`),class:`col manual-input`,"input-class":`manual-input-inner`,onKeydown:v(_(et,[`prevent`]),[`enter`])},null,8,[`modelValue`,`placeholder`,`onKeydown`]),o(g,{flat:``,dense:``,round:``,icon:`add`,color:`indigo-4`,disable:!J.value.trim(),onClick:et},{default:a(()=>[o(x,null,{default:a(()=>[u(m(e.$t(`tooltip.addCriterion`)),1)]),_:1})]),_:1},8,[`disable`])]),(n(!0),d(s,null,ee(K.value,(t,r)=>(n(),d(`div`,{key:`crit-${r}`,class:`row items-center q-py-xs manual-item`},[c(`span`,Re,m(t),1),o(g,{flat:``,dense:``,round:``,icon:`close`,size:`xs`,color:`grey-6`,onClick:e=>tt(r)},{default:a(()=>[o(x,null,{default:a(()=>[u(m(e.$t(`tooltip.removeCriterion`)),1)]),_:1})]),_:1},8,[`onClick`])]))),128))])]),_:1},8,[`label`]),o(y,{color:`grey-9`})],64)):f(``,!0),c(`div`,ze,[o(T,{modelValue:N.value,"onUpdate:modelValue":r[6]||=e=>N.value=e,options:Xe.value,dense:``,borderless:``,class:`bottom-select rounded-borders model-select`,"hide-dropdown-icon":``,"emit-value":``,"map-options":``,"option-value":`value`,"option-label":`label`},{selected:a(()=>[c(`span`,Be,[u(m(Xe.value.find(e=>e.value===N.value)?.label??N.value)+` `,1),o(h,{name:`expand_more`,size:`12px`,color:`grey-5`})])]),option:a(({opt:e,itemProps:n})=>[o(C,t(n,{class:`model-option`}),{default:a(()=>[o(S,null,{default:a(()=>[o(w,{class:`text-white`},{default:a(()=>[u(m(e.label),1)]),_:2},1024),o(w,{caption:``,class:`text-grey-5`},{default:a(()=>[u(m(e.description),1)]),_:2},1024)]),_:2},1024)]),_:2},1040)]),_:1},8,[`modelValue`,`options`]),o(T,{modelValue:P.value,"onUpdate:modelValue":r[7]||=e=>P.value=e,options:Ze.value,dense:``,borderless:``,class:`bottom-select rounded-borders`,"hide-dropdown-icon":``,"emit-value":``,"map-options":``,"option-value":`value`,"option-label":`label`},{selected:a(()=>[c(`span`,Ve,[o(h,{name:`psychology`,size:`12px`,color:`grey-5`,class:`q-mr-xs`}),u(` `+m(Ze.value.find(e=>e.value===P.value)?.label??P.value)+` `,1),o(h,{name:`expand_more`,size:`12px`,color:`grey-5`})])]),option:a(({opt:e,itemProps:t})=>[o(C,oe(te(t)),{default:a(()=>[o(S,null,{default:a(()=>[o(w,{class:`text-white`},{default:a(()=>[u(m(e.label),1)]),_:2},1024),o(w,{caption:``,class:`text-grey-5`},{default:a(()=>[u(m(e.description),1)]),_:2},1024)]),_:2},1024)]),_:2},1040)]),_:1},8,[`modelValue`,`options`]),o(T,{modelValue:z.value,"onUpdate:modelValue":r[8]||=e=>z.value=e,options:[{label:e.$t(`permissionMode.plan`),value:`plan`},{label:e.$t(`permissionMode.autoAccept`),value:`auto-accept`}],dense:``,borderless:``,class:`bottom-select rounded-borders`,"hide-dropdown-icon":``,"emit-value":``,"map-options":``},{selected:a(()=>[c(`span`,He,[o(h,{name:z.value===`plan`?`visibility`:`flash_on`,size:`12px`,color:`amber-6`,class:`q-mr-xs`},null,8,[`name`]),u(` `+m(z.value===`plan`?e.$t(`permissionMode.plan`):e.$t(`permissionMode.autoAccept`))+` `,1),o(h,{name:`expand_more`,size:`12px`,color:`grey-5`})])]),_:1},8,[`modelValue`,`options`]),o(g,{flat:``,round:``,dense:``,size:`sm`,icon:R.value?`play_disabled`:`play_circle`,color:R.value?`orange-4`:`grey-6`,onClick:r[9]||=e=>R.value=!R.value},{default:a(()=>[o(x,null,{default:a(()=>[u(m(e.$t(`createPage.skipSetupScript`)),1)]),_:1})]),_:1},8,[`icon`,`color`]),o(fe),o(T,{modelValue:F.value,"onUpdate:modelValue":r[10]||=e=>F.value=e,options:Je.value,dense:``,borderless:``,"use-input":``,"hide-selected":``,"fill-input":``,"input-debounce":`0`,"new-value-mode":`add`,class:`bottom-select rounded-borders repo-select`,"hide-dropdown-icon":``,behavior:re(D).projectPaths.length>0?`menu`:`dialog`,onFilter:ot,onInputValue:r[11]||=e=>{F.value=e}},{prepend:a(()=>[o(h,{name:`attach_file`,size:`12px`,color:`grey-5`})]),selected:a(()=>[c(`span`,Ue,m(F.value||e.$t(`createPage.projectPath`)),1)]),"no-option":a(()=>[o(C,null,{default:a(()=>[o(S,{class:`text-grey-6 text-caption`},{default:a(()=>[u(m(e.$t(`createPage.enterPath`)),1)]),_:1})]),_:1})]),_:1},8,[`modelValue`,`options`,`behavior`]),o(T,{modelValue:L.value,"onUpdate:modelValue":r[12]||=e=>L.value=e,options:Ye,"emit-value":``,"map-options":``,dense:``,borderless:``,class:`bottom-select rounded-borders branch-type-select`,"hide-dropdown-icon":``},{selected:a(()=>[c(`span`,We,[o(h,{name:`account_tree`,size:`12px`,color:`grey-5`,class:`q-mr-xs`}),u(` `+m(L.value)+`/ `,1),o(h,{name:`expand_more`,size:`12px`,color:`grey-5`})])]),default:a(()=>[o(x,null,{default:a(()=>[u(m(e.$t(`createPage.branchType`)),1)]),_:1})]),_:1},8,[`modelValue`]),o(T,{modelValue:I.value,"onUpdate:modelValue":r[13]||=e=>I.value=e,options:B.value,dense:``,borderless:``,class:`bottom-select rounded-borders branch-select`,"hide-dropdown-icon":``,loading:V.value,disable:!F.value.trim()||V.value},{selected:a(()=>[c(`span`,Ge,[o(h,{name:`call_split`,size:`12px`,color:`grey-5`,class:`q-mr-xs`}),u(` `+m(I.value??e.$t(`createPage.branch`))+` `,1),o(h,{name:`expand_more`,size:`12px`,color:`grey-5`})])]),"no-option":a(()=>[o(C,null,{default:a(()=>[o(S,{class:`text-grey-6 text-caption`},{default:a(()=>[u(m(F.value.trim()?e.$t(`createPage.noBranches`):e.$t(`createPage.enterPath`)),1)]),_:1})]),_:1})]),_:1},8,[`modelValue`,`options`,`loading`,`disable`]),o(g,{label:e.$t(`createPage.create`),"no-caps":``,unelevated:``,class:`create-btn text-weight-bold rounded-borders`,loading:H.value,onClick:dt},null,8,[`label`,`loading`])])]),c(`div`,Ke,m(M.value?e.$t(`createPage.notionExtractHint`):e.$t(`createPage.notionImportHint`)),1)])]),_:1}))}}),[[`__scopeId`,`data-v-9808a4a1`]]);export{E as default};
1
+ import{$ as e,E as t,I as n,N as r,P as i,R as ee,S as te,U as ne,W as a,_ as o,a as s,d as c,f as l,g as u,it as re,m as d,n as ie,p as f,u as p,xt as m,y as ae,yt as oe}from"./vue-i18n-CFW7O-jl.js";import{L as h,T as g,bt as _,ht as se,yt as v}from"./scroll-CHtHNzvE.js";import{i as y}from"./private.use-form-BWfHn8G9.js";import{t as ce}from"./settings-DNNmyYf-.js";import{E as le,O as ue,r as b,w as de}from"./index-C9F8lzbI.js";import{n as x,p as fe,t as pe}from"./_plugin-vue_export-helper-DkL3SKZ8.js";import{a as me,i as S,n as C,r as w}from"./QMenu-DnNUsPHb.js";import{t as he}from"./QExpansionItem-BBe4EJ8c.js";import{n as ge,r as T,t as _e}from"./models-C4seT9_L.js";var ve={class:`create-inner`},ye={class:`create-title text-center text-weight-bold q-mb-lg text-grey-3`},be={class:`create-card rounded-borders`},xe={class:`card-top-bar row items-center q-px-md q-py-xs`},Se={class:`model-badge cursor-default row items-center q-gutter-xs`},Ce={class:`text-indigo-3 text-weight-medium text-caption`},we={key:0,class:`notion-url-wrap`},Te={key:0,class:`notion-error text-caption q-px-md q-pb-xs text-red-5`},Ee={key:1,class:`notion-valid text-caption q-px-md q-pb-xs text-green-4`},De={key:0,class:`sentry-url-wrap`},Oe={key:0,class:`sentry-error text-caption q-px-md q-pb-xs text-red-5`},ke={key:1,class:`sentry-valid text-caption q-px-md q-pb-xs text-red-4`},Ae={class:`card-name-wrap`},je={class:`card-textarea-wrap`},Me={class:`manual-hint q-px-md q-py-sm text-caption text-grey-6`},Ne={class:`q-pa-sm manual-section-body`},Pe={class:`row items-center q-gutter-sm q-mb-sm`},Fe={class:`col text-caption text-grey-4`},Ie={class:`q-pa-sm manual-section-body`},Le={class:`row items-center q-gutter-sm q-mb-sm`},Re={class:`col text-caption text-grey-4`},ze={class:`card-bottom-bar row items-center wrap q-px-sm q-py-xs q-gutter-xs`},Be={class:`bottom-select-label row items-center no-wrap`},Ve={class:`bottom-select-label row items-center no-wrap`},He={class:`bottom-select-label row items-center no-wrap`},Ue={class:`bottom-select-label row items-center no-wrap`},We={class:`bottom-select-label row items-center no-wrap`},Ge={class:`bottom-select-label row items-center no-wrap`},Ke={class:`create-hint text-center text-body2 q-mt-md text-grey-8`},E=pe(ae({__name:`CreatePage`,setup(ae){let pe=de(),E=me(),qe=ue(),D=ce(),{t:O}=ie(),Je=e([]),k=e(``),A=e(``),j=e(``),M=e(!1),N=e(`claude-opus-4-7`),P=e(`auto`),F=e(``),I=e(null),L=e(`feature`),R=e(!1),Ye=[{label:`feature/`,value:`feature`},{label:`fix/`,value:`fix`},{label:`hotfix/`,value:`hotfix`},{label:`chore/`,value:`chore`},{label:`refactor/`,value:`refactor`},{label:`docs/`,value:`docs`},{label:`test/`,value:`test`}],z=e(D.global.defaultPermissionMode||`plan`),B=e([]),V=e(!1),H=e(!1),Xe=p(()=>[..._e.map(e=>({label:O(e.i18nLabelKey),value:e.value,description:O(e.i18nDescriptionKey)}))]);function U(e){let t=e.indexOf(`:`);return t>=0?e.slice(t+1).trim():e}let Ze=p(()=>[{label:U(O(`reasoning.auto`)),value:`auto`,description:O(`reasoning.autoDescription`)},{label:U(O(`reasoning.low`)),value:`low`,description:O(`reasoning.lowDescription`)},{label:U(O(`reasoning.medium`)),value:`medium`,description:O(`reasoning.mediumDescription`)},{label:U(O(`reasoning.high`)),value:`high`,description:O(`reasoning.highDescription`)},{label:U(O(`reasoning.xhigh`)),value:`xhigh`,description:O(`reasoning.xhighDescription`)},{label:U(O(`reasoning.max`)),value:`max`,description:O(`reasoning.maxDescription`)}]),W=p(()=>j.value.trim().startsWith(`https://www.notion.so/`)),G=e([]),K=e([]),q=e(``),J=e(``),Qe=p(()=>!M.value||!W.value);function $e(){let e=q.value.trim();e&&(G.value.push(e),q.value=``)}function et(e){G.value.splice(e,1)}function tt(){let e=J.value.trim();e&&(K.value.push(e),J.value=``)}function nt(e){K.value.splice(e,1)}function rt(){M.value=!M.value,M.value||(j.value=``)}let Y=e(!1),X=e(``),Z=p(()=>/\/issues\/\d+/.test(X.value.trim()));function it(){Y.value=!Y.value,Y.value||(X.value=``)}async function at(e){if(!e.trim()){B.value=[],I.value=null;return}V.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();B.value=n.local??n.branches??[],B.value.length>0&&!I.value&&(I.value=B.value[0]??null)}catch{B.value=[],I.value=null}finally{V.value=!1}}function ot(e){let t=D.getProjectByPath(e);t&&(t.defaultSourceBranch&&(I.value=t.defaultSourceBranch),t.defaultModel?N.value=t.defaultModel:D.global.defaultModel&&(N.value=D.global.defaultModel))}let Q=null;ne(F,e=>{Q&&clearTimeout(Q),Q=setTimeout(()=>{I.value=null,at(e),ot(e)},500)});function st(e,t){t(()=>{Je.value=D.projectPaths.filter(t=>t.toLowerCase().includes(e.toLowerCase()))})}r(()=>{D.fetchSettings()}),i(()=>{Q&&clearTimeout(Q)});function ct(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 lt(){return k.value.trim()?k.value.trim().substring(0,80):!M.value&&A.value.trim()&&(A.value.trim().split(`
2
+ `)[0]??``).substring(0,80)||`workspace`}function ut(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 dt(){return M.value&&!W.value?O(`createPage.validationNotionUrl`):Y.value&&!Z.value?O(`createPage.sentryValidation`):!M.value&&!Y.value&&!A.value.trim()?O(`createPage.validationDescription`):!M.value&&!Y.value&&(!lt()||lt()===`workspace`)&&!k.value.trim()&&!A.value.trim()?O(`createPage.validationName`):F.value.trim()?I.value?null:O(`createPage.validationBranch`):O(`createPage.validationPath`)}async function $(){let e=dt();if(e){E.notify({type:`negative`,message:e,position:`top`});return}H.value=!0;try{let e=lt(),t;t=M.value&&W.value?ut(j.value.trim()):e===`workspace`?`task-${Date.now()}`:ct(e);let n=`${L.value}/${t}`,r={name:e,projectPath:F.value.trim(),sourceBranch:I.value,workingBranch:n,model:N.value,reasoningEffort:P.value,...M.value&&W.value?{notionUrl:j.value.trim()}:{},...Y.value&&Z.value?{sentryUrl:X.value.trim()}:{},...Qe.value&&G.value.length>0?{tasks:G.value}:{},...Qe.value&&K.value.length>0?{acceptanceCriteria:K.value}:{},...R.value?{skipSetupScript:!0}:{},...A.value.trim()?{description:A.value.trim()}:{},permissionMode:z.value},i=await qe.createWorkspace(r);le().subscribe(i.id),qe.selectWorkspace(i.id),pe.push({name:`workspace`,params:{id:i.id}})}catch{E.notify({type:`negative`,message:O(`createPage.errorCreating`),position:`top`})}finally{H.value=!1}}return(e,r)=>(n(),l(ge,{class:`create-page flex flex-center column`},{default:a(()=>[c(`div`,ve,[c(`div`,ye,m(e.$t(`createPage.title`)),1),c(`div`,be,[c(`div`,xe,[c(`span`,Se,[o(h,{name:`auto_awesome`,size:`14px`,color:`indigo-4`}),c(`span`,Ce,m(e.$t(`createPage.claudeCode`)),1)]),o(fe),o(g,{flat:``,dense:``,"no-caps":``,size:`sm`,color:M.value?`green-4`:`grey-5`,class:`notion-toggle-btn text-caption rounded-borders`,onClick:rt},{default:a(()=>[o(h,{name:`description`,size:`14px`,class:`q-mr-xs`}),u(` `+m(M.value?e.$t(`createPage.notionEnabled`):e.$t(`createPage.importNotion`)),1)]),_:1},8,[`color`]),o(g,{flat:``,dense:``,"no-caps":``,size:`sm`,color:Y.value?`red-4`:`grey-5`,class:`sentry-toggle-btn text-caption rounded-borders q-ml-sm`,onClick:it},{default:a(()=>[o(h,{name:`bug_report`,size:`14px`,class:`q-mr-xs`}),u(` `+m(Y.value?e.$t(`createPage.sentryEnabled`):e.$t(`createPage.importSentry`)),1)]),_:1},8,[`color`])]),o(y,{color:`grey-9`}),o(se,{name:`slide`},{default:a(()=>[M.value?(n(),d(`div`,we,[o(b,{modelValue:j.value,"onUpdate:modelValue":r[0]||=e=>j.value=e,borderless:``,dense:``,placeholder:e.$t(`createPage.notionPlaceholder`),class:`notion-url-input`,"input-class":`notion-url-input-inner`},{prepend:a(()=>[o(h,{name:`link`,size:`16px`,color:W.value?`green-4`:`grey-6`},null,8,[`color`])]),_:1},8,[`modelValue`,`placeholder`]),j.value.trim()&&!W.value?(n(),d(`div`,Te,m(e.$t(`createPage.notionValidation`)),1)):f(``,!0),W.value?(n(),d(`div`,Ee,m(e.$t(`createPage.notionAutoExtract`)),1)):f(``,!0)])):f(``,!0)]),_:1}),M.value?(n(),l(y,{key:0,color:`grey-9`})):f(``,!0),o(se,{name:`slide`},{default:a(()=>[Y.value?(n(),d(`div`,De,[o(b,{modelValue:X.value,"onUpdate:modelValue":r[1]||=e=>X.value=e,borderless:``,dense:``,placeholder:e.$t(`createPage.sentryPlaceholder`),class:`sentry-url-input`,"input-class":`sentry-url-input-inner`},{prepend:a(()=>[o(h,{name:`link`,size:`16px`,color:Z.value?`red-4`:`grey-6`},null,8,[`color`])]),_:1},8,[`modelValue`,`placeholder`]),X.value.trim()&&!Z.value?(n(),d(`div`,Oe,m(e.$t(`createPage.sentryValidation`)),1)):f(``,!0),Z.value?(n(),d(`div`,ke,m(e.$t(`createPage.sentryAutoExtract`)),1)):f(``,!0)])):f(``,!0)]),_:1}),Y.value?(n(),l(y,{key:1,color:`grey-9`})):f(``,!0),c(`div`,Ae,[o(b,{modelValue:k.value,"onUpdate:modelValue":r[2]||=e=>k.value=e,borderless:``,dense:``,placeholder:M.value&&W.value?e.$t(`createPage.workspaceName`):e.$t(`createPage.workspaceNamePlaceholder`),class:`name-input`,"input-class":`name-input-inner`},null,8,[`modelValue`,`placeholder`])]),o(y,{color:`grey-9`}),c(`div`,je,[o(b,{modelValue:A.value,"onUpdate:modelValue":r[3]||=e=>A.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:[v(_($,[`ctrl`]),[`enter`]),v(_($,[`meta`]),[`enter`])]},null,8,[`modelValue`,`placeholder`,`onKeydown`])]),o(y,{color:`grey-9`}),Qe.value?(n(),d(s,{key:2},[c(`div`,Me,m(e.$t(`createPage.manualHint`)),1),o(he,{dark:``,dense:``,label:e.$t(`createPage.tasks`,{count:G.value.length}),"header-class":`text-grey-4 manual-expansion-header`,class:`manual-expansion q-mx-sm`},{default:a(()=>[c(`div`,Ne,[c(`div`,Pe,[o(b,{modelValue:q.value,"onUpdate:modelValue":r[4]||=e=>q.value=e,dark:``,dense:``,borderless:``,placeholder:e.$t(`createPage.addTask`),class:`col manual-input`,"input-class":`manual-input-inner`,onKeydown:v(_($e,[`prevent`]),[`enter`])},null,8,[`modelValue`,`placeholder`,`onKeydown`]),o(g,{flat:``,dense:``,round:``,icon:`add`,color:`indigo-4`,disable:!q.value.trim(),onClick:$e},{default:a(()=>[o(x,null,{default:a(()=>[u(m(e.$t(`tooltip.addTask`)),1)]),_:1})]),_:1},8,[`disable`])]),(n(!0),d(s,null,ee(G.value,(t,r)=>(n(),d(`div`,{key:`task-${r}`,class:`row items-center q-py-xs manual-item`},[c(`span`,Fe,m(t),1),o(g,{flat:``,dense:``,round:``,icon:`close`,size:`xs`,color:`grey-6`,onClick:e=>et(r)},{default:a(()=>[o(x,null,{default:a(()=>[u(m(e.$t(`tooltip.removeTask`)),1)]),_:1})]),_:1},8,[`onClick`])]))),128))])]),_:1},8,[`label`]),o(he,{dark:``,dense:``,label:e.$t(`createPage.acceptanceCriteria`,{count:K.value.length}),"header-class":`text-grey-4 manual-expansion-header`,class:`manual-expansion q-mx-sm q-mb-sm`},{default:a(()=>[c(`div`,Ie,[c(`div`,Le,[o(b,{modelValue:J.value,"onUpdate:modelValue":r[5]||=e=>J.value=e,dark:``,dense:``,borderless:``,placeholder:e.$t(`createPage.addCriterion`),class:`col manual-input`,"input-class":`manual-input-inner`,onKeydown:v(_(tt,[`prevent`]),[`enter`])},null,8,[`modelValue`,`placeholder`,`onKeydown`]),o(g,{flat:``,dense:``,round:``,icon:`add`,color:`indigo-4`,disable:!J.value.trim(),onClick:tt},{default:a(()=>[o(x,null,{default:a(()=>[u(m(e.$t(`tooltip.addCriterion`)),1)]),_:1})]),_:1},8,[`disable`])]),(n(!0),d(s,null,ee(K.value,(t,r)=>(n(),d(`div`,{key:`crit-${r}`,class:`row items-center q-py-xs manual-item`},[c(`span`,Re,m(t),1),o(g,{flat:``,dense:``,round:``,icon:`close`,size:`xs`,color:`grey-6`,onClick:e=>nt(r)},{default:a(()=>[o(x,null,{default:a(()=>[u(m(e.$t(`tooltip.removeCriterion`)),1)]),_:1})]),_:1},8,[`onClick`])]))),128))])]),_:1},8,[`label`]),o(y,{color:`grey-9`})],64)):f(``,!0),c(`div`,ze,[o(T,{modelValue:N.value,"onUpdate:modelValue":r[6]||=e=>N.value=e,options:Xe.value,dense:``,borderless:``,class:`bottom-select rounded-borders model-select`,"hide-dropdown-icon":``,"emit-value":``,"map-options":``,"option-value":`value`,"option-label":`label`},{selected:a(()=>[c(`span`,Be,[u(m(Xe.value.find(e=>e.value===N.value)?.label??N.value)+` `,1),o(h,{name:`expand_more`,size:`12px`,color:`grey-5`})])]),option:a(({opt:e,itemProps:n})=>[o(C,t(n,{class:`model-option`}),{default:a(()=>[o(S,null,{default:a(()=>[o(w,{class:`text-white`},{default:a(()=>[u(m(e.label),1)]),_:2},1024),o(w,{caption:``,class:`text-grey-5`},{default:a(()=>[u(m(e.description),1)]),_:2},1024)]),_:2},1024)]),_:2},1040)]),_:1},8,[`modelValue`,`options`]),o(T,{modelValue:P.value,"onUpdate:modelValue":r[7]||=e=>P.value=e,options:Ze.value,dense:``,borderless:``,class:`bottom-select rounded-borders`,"hide-dropdown-icon":``,"emit-value":``,"map-options":``,"option-value":`value`,"option-label":`label`},{selected:a(()=>[c(`span`,Ve,[o(h,{name:`psychology`,size:`12px`,color:`grey-5`,class:`q-mr-xs`}),u(` `+m(Ze.value.find(e=>e.value===P.value)?.label??P.value)+` `,1),o(h,{name:`expand_more`,size:`12px`,color:`grey-5`})])]),option:a(({opt:e,itemProps:t})=>[o(C,oe(te(t)),{default:a(()=>[o(S,null,{default:a(()=>[o(w,{class:`text-white`},{default:a(()=>[u(m(e.label),1)]),_:2},1024),o(w,{caption:``,class:`text-grey-5`},{default:a(()=>[u(m(e.description),1)]),_:2},1024)]),_:2},1024)]),_:2},1040)]),_:1},8,[`modelValue`,`options`]),o(T,{modelValue:z.value,"onUpdate:modelValue":r[8]||=e=>z.value=e,options:[{label:e.$t(`permissionMode.plan`),value:`plan`},{label:e.$t(`permissionMode.autoAccept`),value:`auto-accept`}],dense:``,borderless:``,class:`bottom-select rounded-borders`,"hide-dropdown-icon":``,"emit-value":``,"map-options":``},{selected:a(()=>[c(`span`,He,[o(h,{name:z.value===`plan`?`visibility`:`flash_on`,size:`12px`,color:`amber-6`,class:`q-mr-xs`},null,8,[`name`]),u(` `+m(z.value===`plan`?e.$t(`permissionMode.plan`):e.$t(`permissionMode.autoAccept`))+` `,1),o(h,{name:`expand_more`,size:`12px`,color:`grey-5`})])]),_:1},8,[`modelValue`,`options`]),o(g,{flat:``,round:``,dense:``,size:`sm`,icon:R.value?`play_disabled`:`play_circle`,color:R.value?`orange-4`:`grey-6`,onClick:r[9]||=e=>R.value=!R.value},{default:a(()=>[o(x,null,{default:a(()=>[u(m(e.$t(`createPage.skipSetupScript`)),1)]),_:1})]),_:1},8,[`icon`,`color`]),o(fe),o(T,{modelValue:F.value,"onUpdate:modelValue":r[10]||=e=>F.value=e,options:Je.value,dense:``,borderless:``,"use-input":``,"hide-selected":``,"fill-input":``,"input-debounce":`0`,"new-value-mode":`add`,class:`bottom-select rounded-borders repo-select`,"hide-dropdown-icon":``,behavior:re(D).projectPaths.length>0?`menu`:`dialog`,onFilter:st,onInputValue:r[11]||=e=>{F.value=e}},{prepend:a(()=>[o(h,{name:`attach_file`,size:`12px`,color:`grey-5`})]),selected:a(()=>[c(`span`,Ue,m(F.value||e.$t(`createPage.projectPath`)),1)]),"no-option":a(()=>[o(C,null,{default:a(()=>[o(S,{class:`text-grey-6 text-caption`},{default:a(()=>[u(m(e.$t(`createPage.enterPath`)),1)]),_:1})]),_:1})]),_:1},8,[`modelValue`,`options`,`behavior`]),o(T,{modelValue:L.value,"onUpdate:modelValue":r[12]||=e=>L.value=e,options:Ye,"emit-value":``,"map-options":``,dense:``,borderless:``,class:`bottom-select rounded-borders branch-type-select`,"hide-dropdown-icon":``},{selected:a(()=>[c(`span`,We,[o(h,{name:`account_tree`,size:`12px`,color:`grey-5`,class:`q-mr-xs`}),u(` `+m(L.value)+`/ `,1),o(h,{name:`expand_more`,size:`12px`,color:`grey-5`})])]),default:a(()=>[o(x,null,{default:a(()=>[u(m(e.$t(`createPage.branchType`)),1)]),_:1})]),_:1},8,[`modelValue`]),o(T,{modelValue:I.value,"onUpdate:modelValue":r[13]||=e=>I.value=e,options:B.value,dense:``,borderless:``,class:`bottom-select rounded-borders branch-select`,"hide-dropdown-icon":``,loading:V.value,disable:!F.value.trim()||V.value},{selected:a(()=>[c(`span`,Ge,[o(h,{name:`call_split`,size:`12px`,color:`grey-5`,class:`q-mr-xs`}),u(` `+m(I.value??e.$t(`createPage.branch`))+` `,1),o(h,{name:`expand_more`,size:`12px`,color:`grey-5`})])]),"no-option":a(()=>[o(C,null,{default:a(()=>[o(S,{class:`text-grey-6 text-caption`},{default:a(()=>[u(m(F.value.trim()?e.$t(`createPage.noBranches`):e.$t(`createPage.enterPath`)),1)]),_:1})]),_:1})]),_:1},8,[`modelValue`,`options`,`loading`,`disable`]),o(g,{label:e.$t(`createPage.create`),"no-caps":``,unelevated:``,class:`create-btn text-weight-bold rounded-borders`,loading:H.value,onClick:$},null,8,[`label`,`loading`])])]),c(`div`,Ke,m(M.value?e.$t(`createPage.notionExtractHint`):e.$t(`createPage.notionImportHint`)),1)])]),_:1}))}}),[[`__scopeId`,`data-v-05191dfd`]]);export{E as default};
@@ -0,0 +1 @@
1
+ .create-page[data-v-05191dfd]{background-color:#1a1a2e;min-height:100%;padding:48px 24px}.create-inner[data-v-05191dfd]{width:100%;max-width:700px}.create-title[data-v-05191dfd]{font-size:24px;line-height:1.3}.create-card[data-v-05191dfd]{background:#224;border:1px solid #444;overflow:hidden}.card-top-bar[data-v-05191dfd]{background:#1e1e3a;min-height:36px}.card-name-wrap[data-v-05191dfd]{background:#224;padding:8px 16px 4px}.card-name-wrap[data-v-05191dfd] .q-field__control{height:32px;min-height:32px;padding:0}.card-name-wrap[data-v-05191dfd] input{color:#e0e0e0;font-size:15px;font-weight:500}.card-name-wrap[data-v-05191dfd] input::placeholder{color:#555}.card-textarea-wrap[data-v-05191dfd]{background:#224}.repo-select[data-v-05191dfd]{min-width:160px;max-width:260px}.repo-select[data-v-05191dfd] .q-field__prepend{align-items:center;height:auto;padding-top:0}.create-textarea[data-v-05191dfd]{color:#d0d0d0;width:100%;padding:12px 16px 4px}.create-textarea[data-v-05191dfd] .q-field__control{padding:0}.create-textarea[data-v-05191dfd] textarea{color:#d0d0d0;resize:none;min-height:100px;font-size:14px;line-height:1.6}.create-textarea[data-v-05191dfd] textarea::placeholder{color:#666}.notion-toggle-btn[data-v-05191dfd]{background:#333;padding:2px 10px}.notion-url-wrap[data-v-05191dfd]{background:#1e1e3a;padding:8px 0 0}.notion-url-input[data-v-05191dfd]{padding:0 12px}.notion-url-input[data-v-05191dfd] .q-field__control{height:36px;min-height:36px;padding:0}.notion-url-input[data-v-05191dfd] input{color:#d0d0d0;font-size:13px}.notion-url-input[data-v-05191dfd] input::placeholder{color:#555;font-size:12px}.notion-error[data-v-05191dfd],.notion-valid[data-v-05191dfd]{padding-bottom:6px}.sentry-toggle-btn[data-v-05191dfd]{background:#333;padding:2px 10px}.sentry-url-wrap[data-v-05191dfd]{background:#1e1e3a;padding:8px 0 0}.sentry-url-input[data-v-05191dfd]{padding:0 12px}.sentry-url-input[data-v-05191dfd] .q-field__control{height:36px;min-height:36px;padding:0}.sentry-url-input[data-v-05191dfd] input{color:#d0d0d0;font-size:13px}.sentry-url-input[data-v-05191dfd] input::placeholder{color:#555;font-size:12px}.sentry-error[data-v-05191dfd],.sentry-valid[data-v-05191dfd]{padding-bottom:6px}.slide-enter-active[data-v-05191dfd],.slide-leave-active[data-v-05191dfd]{transition:all .2s;overflow:hidden}.slide-enter-from[data-v-05191dfd],.slide-leave-to[data-v-05191dfd]{opacity:0;max-height:0}.slide-enter-to[data-v-05191dfd],.slide-leave-from[data-v-05191dfd]{opacity:1;max-height:120px}.card-bottom-bar[data-v-05191dfd]{background:#1e1e3a;min-height:40px}.bottom-select[data-v-05191dfd]{background:#333;min-width:60px;height:28px;padding:0 6px}.bottom-select[data-v-05191dfd] .q-field__control{height:28px;min-height:28px;padding:0}.bottom-select[data-v-05191dfd] .q-field__native{min-height:unset;padding:0}.bottom-select-label[data-v-05191dfd]{color:#bbb;gap:2px;font-size:11px}.bottom-sep[data-v-05191dfd]{color:#555;padding:0 2px;font-size:12px;line-height:1}.repo-path-wrap[data-v-05191dfd]{background:#333;border-radius:6px;height:28px;padding:0 8px}.repo-input[data-v-05191dfd]{min-width:140px}.repo-input[data-v-05191dfd] .q-field__control{height:28px;min-height:28px;padding:0}.repo-input[data-v-05191dfd] input{color:#bbb;font-size:11px}.repo-input[data-v-05191dfd] input::placeholder{color:#666;font-size:11px}.branch-select[data-v-05191dfd]{min-width:80px}.create-btn[data-v-05191dfd]{color:#fff;background:#4f46e5;height:28px;padding:0 14px;font-size:12px}.create-btn[data-v-05191dfd] .q-btn__content{height:28px}.create-hint[data-v-05191dfd]{line-height:1.5}.fade-enter-active[data-v-05191dfd],.fade-leave-active[data-v-05191dfd]{transition:opacity .2s}.fade-enter-from[data-v-05191dfd],.fade-leave-to[data-v-05191dfd]{opacity:0}.manual-hint[data-v-05191dfd]{background:#1e1e3a;line-height:1.4}.manual-expansion[data-v-05191dfd]{background:#1e1e3a;border:1px solid #333;border-radius:4px;margin-top:6px;overflow:hidden}.manual-expansion[data-v-05191dfd] .manual-expansion-header{min-height:32px;padding:4px 10px;font-size:12px}.manual-expansion[data-v-05191dfd] .q-expansion-item__content,.manual-section-body[data-v-05191dfd]{background:#1a1a2e}.manual-input[data-v-05191dfd] .q-field__control{height:26px;min-height:26px;padding:0}.manual-input[data-v-05191dfd] input{color:#e0e0e0;font-size:12px}.manual-input[data-v-05191dfd] input::placeholder{color:#555}.manual-item[data-v-05191dfd]{border-top:1px solid #ffffff0a}.manual-item[data-v-05191dfd]:first-child{border-top:none}
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/editor.main-BXGLrNaH.js","assets/index-BJT6ZfVp.js","assets/vue-i18n-CFW7O-jl.js","assets/scroll-CHtHNzvE.js","assets/settings-BdrDg_dO.js","assets/use-checkbox-By4PLtaB.js","assets/private.use-form-BWfHn8G9.js","assets/i18n-zwZDkEfm.js","assets/index-eX_lKHSg.css","assets/editor.api-Do3RvGrr.js","assets/editor-COGk2gAX.css","assets/monaco.contribution-tq8HWx81.js","assets/editor-CS3NEPi9.css"])))=>i.map(i=>d[i]);
2
- import{$ as e,A as t,C as n,G as r,I as i,M as a,N as o,O as s,P as c,R as l,U as u,W as d,_ as f,a as p,b as m,bt as h,d as g,f as _,g as v,m as y,n as b,p as x,u as S,vt as C,xt as w,y as T}from"./vue-i18n-CFW7O-jl.js";import{E,L as D,T as O,V as k,c as A,ct as j,s as M,z as N}from"./scroll-CHtHNzvE.js";import{a as P,i as F,o as I,r as L,s as R,t as z}from"./private.use-form-BWfHn8G9.js";import{S as B}from"./index-BJT6ZfVp.js";import{t as V}from"./QSpinnerDots-DytntAbf.js";import{n as H,p as ee,t as U}from"./_plugin-vue_export-helper-DkL3SKZ8.js";import{t as W}from"./QBadge-DENdn6Dv.js";import{r as G}from"./touch-5Jv2Ep3F.js";import{n as K,t as q}from"./TouchPan-D_gmnARo.js";import{t as J}from"./format-Ex4UmWdz.js";var Y=j({name:`QBtnGroup`,props:{unelevated:Boolean,outline:Boolean,flat:Boolean,rounded:Boolean,square:Boolean,push:Boolean,stretch:Boolean,glossy:Boolean,spread:Boolean},setup(e,{slots:t}){let r=S(()=>{let t=[`unelevated`,`outline`,`flat`,`rounded`,`square`,`push`,`stretch`,`glossy`].filter(t=>e[t]===!0).map(e=>`q-btn-group--${e}`).join(` `);return`q-btn-group row no-wrap${t.length===0?``:` `+t}`+(e.spread===!0?` q-btn-group--spread`:` inline`)});return()=>n(`div`,{class:r.value},k(t.default))}}),te=j({name:`QBtnToggle`,props:{...L,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(e,{slots:t,emit:r}){let i=S(()=>e.options.find(t=>t.value===e.modelValue)!==void 0),a=z(S(()=>({type:`hidden`,name:e.name,value:e.modelValue}))),o=S(()=>E(e)),s=S(()=>({rounded:e.rounded,dense:e.dense,...o.value})),c=S(()=>e.options.map((t,n)=>{let{attrs:r,value:i,slot:a,...o}=t;return{slot:a,props:{key:n,"aria-pressed":i===e.modelValue?`true`:`false`,...r,...o,...s.value,disable:e.disable===!0||o.disable===!0,color:i===e.modelValue?u(o,`toggleColor`):u(o,`color`),textColor:i===e.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(e){l(i,t,e)}}}}));function l(t,n,i){e.readonly!==!0&&(e.modelValue===t?e.clearable===!0&&(r(`update:modelValue`,null,null),r(`clear`)):r(`update:modelValue`,t,n),r(`click`,i))}function u(t,n){return t[n]===void 0?e[n]:t[n]}function d(){let r=c.value.map(e=>n(O,e.props,e.slot===void 0?void 0:t[e.slot]));return e.name!==void 0&&e.disable!==!0&&i.value===!0&&a(r,`push`),N(t.default,r)}return()=>n(Y,{class:`q-btn-toggle`,...o.value,rounded:e.rounded,stretch:e.stretch,glossy:e.glossy,spread:e.spread},d)}}),X=j({props:[`store`,`barStyle`,`verticalBarStyle`,`horizontalBarStyle`],setup(e){return()=>[n(`div`,{class:e.store.scroll.vertical.barClass.value,style:[e.barStyle,e.verticalBarStyle],"aria-hidden":`true`,onMousedown:e.store.onVerticalMousedown}),n(`div`,{class:e.store.scroll.horizontal.barClass.value,style:[e.barStyle,e.horizontalBarStyle],"aria-hidden":`true`,onMousedown:e.store.onHorizontalMousedown}),r(n(`div`,{ref:e.store.scroll.vertical.ref,class:e.store.scroll.vertical.thumbClass.value,style:e.store.scroll.vertical.style.value,"aria-hidden":`true`}),e.store.thumbVertDir),r(n(`div`,{ref:e.store.scroll.horizontal.ref,class:e.store.scroll.horizontal.thumbClass.value,style:e.store.scroll.horizontal.style.value,"aria-hidden":`true`}),e.store.thumbHorizDir)]}}),Z=[`vertical`,`horizontal`],Q={vertical:{offset:`offsetY`,scroll:`scrollTop`,dir:`down`,dist:`y`},horizontal:{offset:`offsetX`,scroll:`scrollLeft`,dir:`right`,dist:`x`}},$={prevent:!0,mouse:!0,mouseAllDir:!0},ne=e=>e>=250?50:Math.ceil(e/5),re=j({name:`QScrollArea`,props:{...I,thumbStyle:Object,verticalThumbStyle:Object,horizontalThumbStyle:Object,barStyle:[Array,String,Object],verticalBarStyle:[Array,String,Object],horizontalBarStyle:[Array,String,Object],verticalOffset:{type:Array,default:[0,0]},horizontalOffset:{type:Array,default:[0,0]},contentStyle:[Array,String,Object],contentActiveStyle:[Array,String,Object],delay:{type:[String,Number],default:1e3},visible:{type:Boolean,default:null},tabindex:[String,Number],onScroll:Function},setup(r,{slots:i,emit:o}){let c=e(!1),l=e(!1),d=e(!1),f={vertical:e(0),horizontal:e(0)},p={vertical:{ref:e(null),position:e(0),size:e(0)},horizontal:{ref:e(null),position:e(0),size:e(0)}},{proxy:h}=m(),g=P(r,h.$q),_=null,v,y=e(null),b=S(()=>`q-scrollarea`+(g.value===!0?` q-scrollarea--dark`:``));Object.assign(f,{verticalInner:S(()=>f.vertical.value-r.verticalOffset[0]-r.verticalOffset[1]),horizontalInner:S(()=>f.horizontal.value-r.horizontalOffset[0]-r.horizontalOffset[1])}),p.vertical.percentage=S(()=>{let e=p.vertical.size.value-f.vertical.value;if(e<=0)return 0;let t=J(p.vertical.position.value/e,0,1);return Math.round(t*1e4)/1e4}),p.vertical.thumbHidden=S(()=>(r.visible===null?d.value:r.visible)!==!0&&c.value===!1&&l.value===!1||p.vertical.size.value<=f.vertical.value+1),p.vertical.thumbStart=S(()=>r.verticalOffset[0]+p.vertical.percentage.value*(f.verticalInner.value-p.vertical.thumbSize.value)),p.vertical.thumbSize=S(()=>Math.round(J(f.verticalInner.value*f.verticalInner.value/p.vertical.size.value,ne(f.verticalInner.value),f.verticalInner.value))),p.vertical.style=S(()=>({...r.thumbStyle,...r.verticalThumbStyle,top:`${p.vertical.thumbStart.value}px`,height:`${p.vertical.thumbSize.value}px`,right:`${r.horizontalOffset[1]}px`})),p.vertical.thumbClass=S(()=>`q-scrollarea__thumb q-scrollarea__thumb--v absolute-right`+(p.vertical.thumbHidden.value===!0?` q-scrollarea__thumb--invisible`:``)),p.vertical.barClass=S(()=>`q-scrollarea__bar q-scrollarea__bar--v absolute-right`+(p.vertical.thumbHidden.value===!0?` q-scrollarea__bar--invisible`:``)),p.horizontal.percentage=S(()=>{let e=p.horizontal.size.value-f.horizontal.value;if(e<=0)return 0;let t=J(Math.abs(p.horizontal.position.value)/e,0,1);return Math.round(t*1e4)/1e4}),p.horizontal.thumbHidden=S(()=>(r.visible===null?d.value:r.visible)!==!0&&c.value===!1&&l.value===!1||p.horizontal.size.value<=f.horizontal.value+1),p.horizontal.thumbStart=S(()=>r.horizontalOffset[0]+p.horizontal.percentage.value*(f.horizontalInner.value-p.horizontal.thumbSize.value)),p.horizontal.thumbSize=S(()=>Math.round(J(f.horizontalInner.value*f.horizontalInner.value/p.horizontal.size.value,ne(f.horizontalInner.value),f.horizontalInner.value))),p.horizontal.style=S(()=>({...r.thumbStyle,...r.horizontalThumbStyle,[h.$q.lang.rtl===!0?`right`:`left`]:`${p.horizontal.thumbStart.value}px`,width:`${p.horizontal.thumbSize.value}px`,bottom:`${r.verticalOffset[1]}px`})),p.horizontal.thumbClass=S(()=>`q-scrollarea__thumb q-scrollarea__thumb--h absolute-bottom`+(p.horizontal.thumbHidden.value===!0?` q-scrollarea__thumb--invisible`:``)),p.horizontal.barClass=S(()=>`q-scrollarea__bar q-scrollarea__bar--h absolute-bottom`+(p.horizontal.thumbHidden.value===!0?` q-scrollarea__bar--invisible`:``));let x=S(()=>p.vertical.thumbHidden.value===!0&&p.horizontal.thumbHidden.value===!0?r.contentStyle:r.contentActiveStyle);function C(){let e={};return Z.forEach(t=>{let n=p[t];Object.assign(e,{[t+`Position`]:n.position.value,[t+`Percentage`]:n.percentage.value,[t+`Size`]:n.size.value,[t+`ContainerSize`]:f[t].value,[t+`ContainerInnerSize`]:f[t+`Inner`].value})}),e}let w=R(()=>{let e=C();e.ref=h,o(`scroll`,e)},0);function T(e,t,n){if(Z.includes(e)===!1){console.error(`[QScrollArea]: wrong first param of setScrollPosition (vertical/horizontal)`);return}(e===`vertical`?A:M)(y.value,t,n)}function E({height:e,width:t}){let n=!1;f.vertical.value!==e&&(f.vertical.value=e,n=!0),f.horizontal.value!==t&&(f.horizontal.value=t,n=!0),n===!0&&F()}function D({position:e}){let t=!1;p.vertical.position.value!==e.top&&(p.vertical.position.value=e.top,t=!0),p.horizontal.position.value!==e.left&&(p.horizontal.position.value=e.left,t=!0),t===!0&&F()}function O({height:e,width:t}){p.horizontal.size.value!==t&&(p.horizontal.size.value=t,F()),p.vertical.size.value!==e&&(p.vertical.size.value=e,F())}function k(e,t){let n=p[t];if(e.isFirst===!0){if(n.thumbHidden.value===!0)return;v=n.position.value,l.value=!0}else if(l.value!==!0)return;e.isFinal===!0&&(l.value=!1);let r=Q[t],i=(n.size.value-f[t].value)/(f[t+`Inner`].value-n.thumbSize.value),a=e.distance[r.dist];I(v+(e.direction===r.dir?1:-1)*a*i,t)}function j(e,t){let n=p[t];if(n.thumbHidden.value!==!0){let i=t===`vertical`?r.verticalOffset[0]:r.horizontalOffset[0],a=e[Q[t].offset]-i,o=n.thumbStart.value-i;(a<o||a>o+n.thumbSize.value)&&I(J((a-n.thumbSize.value/2)/(f[t+`Inner`].value-n.thumbSize.value),0,1)*Math.max(0,n.size.value-f[t].value),t),n.ref.value!==null&&n.ref.value.dispatchEvent(new MouseEvent(e.type,e))}}function F(){c.value=!0,_!==null&&clearTimeout(_),_=setTimeout(()=>{_=null,c.value=!1},r.delay),r.onScroll!==void 0&&w()}function I(e,t){y.value[Q[t].scroll]=e}let L=null;function z(){L!==null&&clearTimeout(L),L=setTimeout(()=>{L=null,d.value=!0},h.$q.platform.is.ios?50:0)}function B(){L!==null&&(clearTimeout(L),L=null),d.value=!1}let V=null;u(()=>h.$q.lang.rtl,e=>{y.value!==null&&M(y.value,Math.abs(p.horizontal.position.value)*(e===!0?-1:1))}),a(()=>{V={top:p.vertical.position.value,left:p.horizontal.position.value}}),s(()=>{if(V===null)return;let e=y.value;e!==null&&(M(e,V.left),A(e,V.top))}),t(w.cancel),Object.assign(h,{getScrollTarget:()=>y.value,getScroll:C,getScrollPosition:()=>({top:p.vertical.position.value,left:p.horizontal.position.value}),getScrollPercentage:()=>({top:p.vertical.percentage.value,left:p.horizontal.percentage.value}),setScrollPosition:T,setScrollPercentage(e,t,n){T(e,t*(p[e].size.value-f[e].value)*(e===`horizontal`&&h.$q.lang.rtl===!0?-1:1),n)}});let H={scroll:p,thumbVertDir:[[q,e=>{k(e,`vertical`)},void 0,{vertical:!0,...$}]],thumbHorizDir:[[q,e=>{k(e,`horizontal`)},void 0,{horizontal:!0,...$}]],onVerticalMousedown(e){j(e,`vertical`)},onHorizontalMousedown(e){j(e,`horizontal`)}};return()=>n(`div`,{class:b.value,onMouseenter:z,onMouseleave:B},[n(`div`,{ref:y,class:`q-scrollarea__container scroll relative-position fit hide-scrollbar`,tabindex:r.tabindex===void 0?void 0:r.tabindex},[n(`div`,{class:`q-scrollarea__content absolute`,style:x.value},N(i.default,[n(G,{debounce:0,onResize:O})])),n(K,{axis:`both`,onScroll:D})]),n(G,{debounce:0,onResize:E}),n(X,{store:H,barStyle:r.barStyle,verticalBarStyle:r.verticalBarStyle,horizontalBarStyle:r.horizontalBarStyle})])}}),ie={class:`diff-viewer column full-height`},ae={class:`diff-header row items-center q-px-md q-py-sm no-wrap`},oe={class:`text-body1 text-weight-medium text-grey-3`},se={key:0,class:`text-caption text-grey-6 q-ml-md`,style:{"font-size":`11px`}},ce={class:`text-grey-7`},le={class:`text-green-4`},ue={key:1,class:`text-caption text-grey-5 q-ml-md ellipsis`,style:{"font-size":`11px`,"font-family":`'Roboto Mono', monospace`,"max-width":`400px`}},de={class:`row col no-wrap`,style:{"min-height":`0`}},fe={key:1,class:`text-caption text-grey-8 q-pa-sm`},pe=[`onClick`],me={class:`text-caption text-grey-4`,style:{"font-size":`11px`}},he=[`onClick`],ge={class:`text-caption text-grey-3 ellipsis`,style:{"font-size":`11px`}},_e={class:`col column`,style:{"min-width":`0`,position:`relative`}},ve={key:0,class:`col column items-center justify-center`},ye={key:1,class:`col column items-center justify-center text-grey-8 text-caption`},be=U(T({__name:`DiffViewer`,props:{workspaceId:{}},emits:[`close`,`sendToChat`],setup(t,{emit:n}){let r=t,a=n,{t:s}=b(),m=e([]),T=e(``),E=e(``),k=e(null),A=e(!1),j=e(!1),M=e(null),N=e(`side`),P=e(new Set),I=null,L=null,R=[];function z(e){let t=0;for(let n of e)n.isDir?t+=z(n.children):t++;return t}let U=S(()=>{let e=[];for(let t of m.value){let n=t.path.split(`/`),r=e;for(let e=0;e<n.length;e++){let i=n[e],a=e===n.length-1,o=n.slice(0,e+1).join(`/`),s=r.find(e=>e.name===i&&e.isDir===!a);s||(s={name:i,path:a?t.path:o,isDir:!a,status:a?t.status:void 0,children:[]},r.push(s)),r=s.children}}function t(e){e.sort((e,t)=>e.isDir===t.isDir?e.name.localeCompare(t.name):e.isDir?-1:1);for(let n of e)n.children.length>0&&t(n.children)}return t(e),e}),G=S(()=>{let e=[];function t(n,r){for(let i of n)i.isDir?(e.push({name:i.name,path:i.path,isDir:!0,depth:r,fileCount:z(i.children)}),P.value.has(i.path)||t(i.children,r+1)):e.push({name:i.name,path:i.path,isDir:!1,depth:r,status:i.status})}return t(U.value,0),e});function K(e){P.value.has(e)?P.value.delete(e):P.value.add(e)}async function q(){A.value=!0;try{let e=await fetch(`/api/workspaces/${r.workspaceId}/diff`);if(!e.ok)throw Error(`HTTP ${e.status}`);let t=await e.json();m.value=t.files,T.value=t.sourceBranch??``,E.value=t.workingBranch??``}catch(e){console.error(`Failed to load diff files:`,e)}finally{A.value=!1}}async function J(e){if(M.value){j.value=!0;try{I||(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`})}},I=await B(()=>import(`./editor.main-BXGLrNaH.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12])),I.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/${r.workspaceId}/diff-file?path=${encodeURIComponent(e)}`);if(!t.ok)throw Error(`HTTP ${t.status}`);let n=await t.json(),i={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`;if(L){for(let e of R)e.dispose();R=[];let e=L.getModel();L.dispose(),L=null,e?.original?.dispose(),e?.modified?.dispose()}let a=I.editor.createModel(n.original??``,i),o=I.editor.createModel(n.modified??``,i);L=I.editor.createDiffEditor(M.value,{theme:`kobo-dark`,readOnly:!0,renderSideBySide:N.value===`side`,automaticLayout:!0,minimap:{enabled:!1},scrollBeyondLastLine:!1,fontSize:12,lineHeight:18}),L.setModel({original:a,modified:o}),X()}catch(e){console.error(`Failed to load file diff:`,e)}finally{j.value=!1}}}let Y=e(!1);function X(){if(!L)return;for(let e of R)e.dispose();R=[];let e=L.getModifiedEditor(),t=L.getOriginalEditor();for(let n of[e,t]){let e=n.onDidChangeCursorSelection(()=>{let e=n.getSelection();Y.value=!!(e&&!e.isEmpty())});R.push(e)}}function Z(){if(!(!L||!k.value))for(let e of[L.getModifiedEditor(),L.getOriginalEditor()]){let t=e.getSelection();if(t&&!t.isEmpty()){let n=e.getModel();if(!n)continue;let r=n.getValueInRange(t),i=e===L.getModifiedEditor()?`modified`:`original`;a(`sendToChat`,`\`\`\`\n// ${k.value} (${i}) L${t.startLineNumber}-L${t.endLineNumber}\n${r}\n\`\`\``);return}}}u(k,e=>{e&&J(e)}),u(N,()=>{L&&L.updateOptions({renderSideBySide:N.value===`side`})});function Q(e){switch(e){case`added`:return`add_circle`;case`deleted`:return`remove_circle`;case`renamed`:return`drive_file_rename_outline`;default:return`edit`}}function $(e){switch(e){case`added`:return`#4ade80`;case`deleted`:return`#f87171`;case`renamed`:return`#60a5fa`;default:return`#f59e0b`}}return o(q),c(()=>{for(let e of R)e.dispose();if(R=[],L){let e=L.getModel();L.dispose(),L=null,e?.original?.dispose(),e?.modified?.dispose()}}),(e,t)=>(i(),y(`div`,ie,[g(`div`,ae,[f(D,{name:`difference`,size:`18px`,color:`indigo-4`,class:`q-mr-xs`}),g(`span`,oe,w(e.$t(`diff.title`)),1),f(W,{label:`${m.value.length}`,color:`grey-8`,"text-color":`grey-4`,class:`q-ml-sm`,style:{"font-size":`10px`}},null,8,[`label`]),T.value?(i(),y(`span`,se,[g(`span`,ce,w(T.value),1),f(D,{name:`arrow_forward`,size:`11px`,color:`grey-8`,class:`q-mx-xs`}),g(`span`,le,w(E.value),1)])):x(``,!0),k.value?(i(),y(`span`,ue,w(k.value),1)):x(``,!0),f(ee),f(te,{modelValue:N.value,"onUpdate:modelValue":t[0]||=e=>N.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`]),f(O,{flat:``,round:``,dense:``,icon:`close`,color:`grey-5`,size:`sm`,onClick:t[1]||=e=>a(`close`)},{default:d(()=>[f(H,null,{default:d(()=>[v(w(e.$t(`tooltip.closeDiffViewer`)),1)]),_:1})]),_:1})]),f(F,{dark:``}),g(`div`,de,[f(re,{class:`diff-file-list q-pa-xs`,style:{width:`280px`,"min-width":`200px`,height:`100%`,"border-right":`1px solid #2a2a4a`}},{default:d(()=>[A.value?(i(),_(V,{key:0,size:`24px`,color:`grey-6`,class:`q-ma-md`})):m.value.length===0?(i(),y(`div`,fe,w(e.$t(`diff.noChanges`)),1)):(i(!0),y(p,{key:2},l(G.value,e=>(i(),y(p,{key:e.path},[e.isDir?(i(),y(`div`,{key:0,class:`diff-dir-item cursor-pointer`,style:h({paddingLeft:`${e.depth*12+4}px`}),onClick:t=>K(e.path)},[f(D,{name:P.value.has(e.path)?`chevron_right`:`expand_more`,size:`14px`,color:`grey-6`},null,8,[`name`]),f(D,{name:`folder`,size:`13px`,color:`amber-7`,class:`q-mx-xs`}),g(`span`,me,w(e.name),1),f(W,{label:e.fileCount,color:`grey-9`,"text-color":`grey-5`,class:`q-ml-xs`,style:{"font-size":`9px`}},null,8,[`label`])],12,pe)):(i(),y(`div`,{key:1,class:C([`diff-file-item cursor-pointer`,{"diff-file-item--active":k.value===e.path}]),style:h({paddingLeft:`${e.depth*12+20}px`}),onClick:t=>k.value=e.path},[f(D,{name:Q(e.status),size:`11px`,style:h({color:$(e.status)}),class:`q-mr-xs`},null,8,[`name`,`style`]),g(`span`,ge,w(e.name),1)],14,he))],64))),128))]),_:1}),g(`div`,_e,[j.value?(i(),y(`div`,ve,[f(V,{size:`32px`,color:`indigo-4`})])):k.value?x(``,!0):(i(),y(`div`,ye,w(e.$t(`diff.selectFile`)),1)),g(`div`,{ref_key:`editorContainer`,ref:M,class:`col`,style:{"min-height":`0`}},null,512),Y.value?(i(),_(O,{key:2,"no-caps":``,dense:``,size:`sm`,color:`primary`,icon:`chat`,label:e.$t(`diff.addToChat`),class:`send-to-chat-btn`,onClick:Z},null,8,[`label`])):x(``,!0)])])]))}}),[[`__scopeId`,`data-v-4ed3860e`]]);export{be as default};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/editor.main-D2_WTVNi.js","assets/index-C9F8lzbI.js","assets/vue-i18n-CFW7O-jl.js","assets/scroll-CHtHNzvE.js","assets/settings-DNNmyYf-.js","assets/use-checkbox-By4PLtaB.js","assets/private.use-form-BWfHn8G9.js","assets/i18n-DyD-u9TB.js","assets/index-eX_lKHSg.css","assets/editor.api-BYoDPXci.js","assets/editor-COGk2gAX.css","assets/monaco.contribution-B2_1EuRF.js","assets/editor-CS3NEPi9.css"])))=>i.map(i=>d[i]);
2
+ import{$ as e,A as t,C as n,G as r,I as i,M as a,N as o,O as s,P as c,R as l,U as u,W as d,_ as f,a as p,b as m,bt as h,d as g,f as _,g as v,m as y,n as b,p as x,u as S,vt as C,xt as w,y as T}from"./vue-i18n-CFW7O-jl.js";import{E,L as D,T as O,V as k,c as A,ct as j,s as M,z as N}from"./scroll-CHtHNzvE.js";import{a as P,i as F,o as I,r as L,s as R,t as z}from"./private.use-form-BWfHn8G9.js";import{S as B}from"./index-C9F8lzbI.js";import{t as V}from"./QSpinnerDots-DytntAbf.js";import{n as H,p as ee,t as U}from"./_plugin-vue_export-helper-DkL3SKZ8.js";import{t as W}from"./QBadge-DENdn6Dv.js";import{r as G}from"./touch-5Jv2Ep3F.js";import{n as K,t as q}from"./TouchPan-D_gmnARo.js";import{t as J}from"./format-Ex4UmWdz.js";var Y=j({name:`QBtnGroup`,props:{unelevated:Boolean,outline:Boolean,flat:Boolean,rounded:Boolean,square:Boolean,push:Boolean,stretch:Boolean,glossy:Boolean,spread:Boolean},setup(e,{slots:t}){let r=S(()=>{let t=[`unelevated`,`outline`,`flat`,`rounded`,`square`,`push`,`stretch`,`glossy`].filter(t=>e[t]===!0).map(e=>`q-btn-group--${e}`).join(` `);return`q-btn-group row no-wrap${t.length===0?``:` `+t}`+(e.spread===!0?` q-btn-group--spread`:` inline`)});return()=>n(`div`,{class:r.value},k(t.default))}}),te=j({name:`QBtnToggle`,props:{...L,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(e,{slots:t,emit:r}){let i=S(()=>e.options.find(t=>t.value===e.modelValue)!==void 0),a=z(S(()=>({type:`hidden`,name:e.name,value:e.modelValue}))),o=S(()=>E(e)),s=S(()=>({rounded:e.rounded,dense:e.dense,...o.value})),c=S(()=>e.options.map((t,n)=>{let{attrs:r,value:i,slot:a,...o}=t;return{slot:a,props:{key:n,"aria-pressed":i===e.modelValue?`true`:`false`,...r,...o,...s.value,disable:e.disable===!0||o.disable===!0,color:i===e.modelValue?u(o,`toggleColor`):u(o,`color`),textColor:i===e.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(e){l(i,t,e)}}}}));function l(t,n,i){e.readonly!==!0&&(e.modelValue===t?e.clearable===!0&&(r(`update:modelValue`,null,null),r(`clear`)):r(`update:modelValue`,t,n),r(`click`,i))}function u(t,n){return t[n]===void 0?e[n]:t[n]}function d(){let r=c.value.map(e=>n(O,e.props,e.slot===void 0?void 0:t[e.slot]));return e.name!==void 0&&e.disable!==!0&&i.value===!0&&a(r,`push`),N(t.default,r)}return()=>n(Y,{class:`q-btn-toggle`,...o.value,rounded:e.rounded,stretch:e.stretch,glossy:e.glossy,spread:e.spread},d)}}),X=j({props:[`store`,`barStyle`,`verticalBarStyle`,`horizontalBarStyle`],setup(e){return()=>[n(`div`,{class:e.store.scroll.vertical.barClass.value,style:[e.barStyle,e.verticalBarStyle],"aria-hidden":`true`,onMousedown:e.store.onVerticalMousedown}),n(`div`,{class:e.store.scroll.horizontal.barClass.value,style:[e.barStyle,e.horizontalBarStyle],"aria-hidden":`true`,onMousedown:e.store.onHorizontalMousedown}),r(n(`div`,{ref:e.store.scroll.vertical.ref,class:e.store.scroll.vertical.thumbClass.value,style:e.store.scroll.vertical.style.value,"aria-hidden":`true`}),e.store.thumbVertDir),r(n(`div`,{ref:e.store.scroll.horizontal.ref,class:e.store.scroll.horizontal.thumbClass.value,style:e.store.scroll.horizontal.style.value,"aria-hidden":`true`}),e.store.thumbHorizDir)]}}),Z=[`vertical`,`horizontal`],Q={vertical:{offset:`offsetY`,scroll:`scrollTop`,dir:`down`,dist:`y`},horizontal:{offset:`offsetX`,scroll:`scrollLeft`,dir:`right`,dist:`x`}},$={prevent:!0,mouse:!0,mouseAllDir:!0},ne=e=>e>=250?50:Math.ceil(e/5),re=j({name:`QScrollArea`,props:{...I,thumbStyle:Object,verticalThumbStyle:Object,horizontalThumbStyle:Object,barStyle:[Array,String,Object],verticalBarStyle:[Array,String,Object],horizontalBarStyle:[Array,String,Object],verticalOffset:{type:Array,default:[0,0]},horizontalOffset:{type:Array,default:[0,0]},contentStyle:[Array,String,Object],contentActiveStyle:[Array,String,Object],delay:{type:[String,Number],default:1e3},visible:{type:Boolean,default:null},tabindex:[String,Number],onScroll:Function},setup(r,{slots:i,emit:o}){let c=e(!1),l=e(!1),d=e(!1),f={vertical:e(0),horizontal:e(0)},p={vertical:{ref:e(null),position:e(0),size:e(0)},horizontal:{ref:e(null),position:e(0),size:e(0)}},{proxy:h}=m(),g=P(r,h.$q),_=null,v,y=e(null),b=S(()=>`q-scrollarea`+(g.value===!0?` q-scrollarea--dark`:``));Object.assign(f,{verticalInner:S(()=>f.vertical.value-r.verticalOffset[0]-r.verticalOffset[1]),horizontalInner:S(()=>f.horizontal.value-r.horizontalOffset[0]-r.horizontalOffset[1])}),p.vertical.percentage=S(()=>{let e=p.vertical.size.value-f.vertical.value;if(e<=0)return 0;let t=J(p.vertical.position.value/e,0,1);return Math.round(t*1e4)/1e4}),p.vertical.thumbHidden=S(()=>(r.visible===null?d.value:r.visible)!==!0&&c.value===!1&&l.value===!1||p.vertical.size.value<=f.vertical.value+1),p.vertical.thumbStart=S(()=>r.verticalOffset[0]+p.vertical.percentage.value*(f.verticalInner.value-p.vertical.thumbSize.value)),p.vertical.thumbSize=S(()=>Math.round(J(f.verticalInner.value*f.verticalInner.value/p.vertical.size.value,ne(f.verticalInner.value),f.verticalInner.value))),p.vertical.style=S(()=>({...r.thumbStyle,...r.verticalThumbStyle,top:`${p.vertical.thumbStart.value}px`,height:`${p.vertical.thumbSize.value}px`,right:`${r.horizontalOffset[1]}px`})),p.vertical.thumbClass=S(()=>`q-scrollarea__thumb q-scrollarea__thumb--v absolute-right`+(p.vertical.thumbHidden.value===!0?` q-scrollarea__thumb--invisible`:``)),p.vertical.barClass=S(()=>`q-scrollarea__bar q-scrollarea__bar--v absolute-right`+(p.vertical.thumbHidden.value===!0?` q-scrollarea__bar--invisible`:``)),p.horizontal.percentage=S(()=>{let e=p.horizontal.size.value-f.horizontal.value;if(e<=0)return 0;let t=J(Math.abs(p.horizontal.position.value)/e,0,1);return Math.round(t*1e4)/1e4}),p.horizontal.thumbHidden=S(()=>(r.visible===null?d.value:r.visible)!==!0&&c.value===!1&&l.value===!1||p.horizontal.size.value<=f.horizontal.value+1),p.horizontal.thumbStart=S(()=>r.horizontalOffset[0]+p.horizontal.percentage.value*(f.horizontalInner.value-p.horizontal.thumbSize.value)),p.horizontal.thumbSize=S(()=>Math.round(J(f.horizontalInner.value*f.horizontalInner.value/p.horizontal.size.value,ne(f.horizontalInner.value),f.horizontalInner.value))),p.horizontal.style=S(()=>({...r.thumbStyle,...r.horizontalThumbStyle,[h.$q.lang.rtl===!0?`right`:`left`]:`${p.horizontal.thumbStart.value}px`,width:`${p.horizontal.thumbSize.value}px`,bottom:`${r.verticalOffset[1]}px`})),p.horizontal.thumbClass=S(()=>`q-scrollarea__thumb q-scrollarea__thumb--h absolute-bottom`+(p.horizontal.thumbHidden.value===!0?` q-scrollarea__thumb--invisible`:``)),p.horizontal.barClass=S(()=>`q-scrollarea__bar q-scrollarea__bar--h absolute-bottom`+(p.horizontal.thumbHidden.value===!0?` q-scrollarea__bar--invisible`:``));let x=S(()=>p.vertical.thumbHidden.value===!0&&p.horizontal.thumbHidden.value===!0?r.contentStyle:r.contentActiveStyle);function C(){let e={};return Z.forEach(t=>{let n=p[t];Object.assign(e,{[t+`Position`]:n.position.value,[t+`Percentage`]:n.percentage.value,[t+`Size`]:n.size.value,[t+`ContainerSize`]:f[t].value,[t+`ContainerInnerSize`]:f[t+`Inner`].value})}),e}let w=R(()=>{let e=C();e.ref=h,o(`scroll`,e)},0);function T(e,t,n){if(Z.includes(e)===!1){console.error(`[QScrollArea]: wrong first param of setScrollPosition (vertical/horizontal)`);return}(e===`vertical`?A:M)(y.value,t,n)}function E({height:e,width:t}){let n=!1;f.vertical.value!==e&&(f.vertical.value=e,n=!0),f.horizontal.value!==t&&(f.horizontal.value=t,n=!0),n===!0&&F()}function D({position:e}){let t=!1;p.vertical.position.value!==e.top&&(p.vertical.position.value=e.top,t=!0),p.horizontal.position.value!==e.left&&(p.horizontal.position.value=e.left,t=!0),t===!0&&F()}function O({height:e,width:t}){p.horizontal.size.value!==t&&(p.horizontal.size.value=t,F()),p.vertical.size.value!==e&&(p.vertical.size.value=e,F())}function k(e,t){let n=p[t];if(e.isFirst===!0){if(n.thumbHidden.value===!0)return;v=n.position.value,l.value=!0}else if(l.value!==!0)return;e.isFinal===!0&&(l.value=!1);let r=Q[t],i=(n.size.value-f[t].value)/(f[t+`Inner`].value-n.thumbSize.value),a=e.distance[r.dist];I(v+(e.direction===r.dir?1:-1)*a*i,t)}function j(e,t){let n=p[t];if(n.thumbHidden.value!==!0){let i=t===`vertical`?r.verticalOffset[0]:r.horizontalOffset[0],a=e[Q[t].offset]-i,o=n.thumbStart.value-i;(a<o||a>o+n.thumbSize.value)&&I(J((a-n.thumbSize.value/2)/(f[t+`Inner`].value-n.thumbSize.value),0,1)*Math.max(0,n.size.value-f[t].value),t),n.ref.value!==null&&n.ref.value.dispatchEvent(new MouseEvent(e.type,e))}}function F(){c.value=!0,_!==null&&clearTimeout(_),_=setTimeout(()=>{_=null,c.value=!1},r.delay),r.onScroll!==void 0&&w()}function I(e,t){y.value[Q[t].scroll]=e}let L=null;function z(){L!==null&&clearTimeout(L),L=setTimeout(()=>{L=null,d.value=!0},h.$q.platform.is.ios?50:0)}function B(){L!==null&&(clearTimeout(L),L=null),d.value=!1}let V=null;u(()=>h.$q.lang.rtl,e=>{y.value!==null&&M(y.value,Math.abs(p.horizontal.position.value)*(e===!0?-1:1))}),a(()=>{V={top:p.vertical.position.value,left:p.horizontal.position.value}}),s(()=>{if(V===null)return;let e=y.value;e!==null&&(M(e,V.left),A(e,V.top))}),t(w.cancel),Object.assign(h,{getScrollTarget:()=>y.value,getScroll:C,getScrollPosition:()=>({top:p.vertical.position.value,left:p.horizontal.position.value}),getScrollPercentage:()=>({top:p.vertical.percentage.value,left:p.horizontal.percentage.value}),setScrollPosition:T,setScrollPercentage(e,t,n){T(e,t*(p[e].size.value-f[e].value)*(e===`horizontal`&&h.$q.lang.rtl===!0?-1:1),n)}});let H={scroll:p,thumbVertDir:[[q,e=>{k(e,`vertical`)},void 0,{vertical:!0,...$}]],thumbHorizDir:[[q,e=>{k(e,`horizontal`)},void 0,{horizontal:!0,...$}]],onVerticalMousedown(e){j(e,`vertical`)},onHorizontalMousedown(e){j(e,`horizontal`)}};return()=>n(`div`,{class:b.value,onMouseenter:z,onMouseleave:B},[n(`div`,{ref:y,class:`q-scrollarea__container scroll relative-position fit hide-scrollbar`,tabindex:r.tabindex===void 0?void 0:r.tabindex},[n(`div`,{class:`q-scrollarea__content absolute`,style:x.value},N(i.default,[n(G,{debounce:0,onResize:O})])),n(K,{axis:`both`,onScroll:D})]),n(G,{debounce:0,onResize:E}),n(X,{store:H,barStyle:r.barStyle,verticalBarStyle:r.verticalBarStyle,horizontalBarStyle:r.horizontalBarStyle})])}}),ie={class:`diff-viewer column full-height`},ae={class:`diff-header row items-center q-px-md q-py-sm no-wrap`},oe={class:`text-body1 text-weight-medium text-grey-3`},se={key:0,class:`text-caption text-grey-6 q-ml-md`,style:{"font-size":`11px`}},ce={class:`text-grey-7`},le={class:`text-green-4`},ue={key:1,class:`text-caption text-grey-5 q-ml-md ellipsis`,style:{"font-size":`11px`,"font-family":`'Roboto Mono', monospace`,"max-width":`400px`}},de={class:`row col no-wrap`,style:{"min-height":`0`}},fe={key:1,class:`text-caption text-grey-8 q-pa-sm`},pe=[`onClick`],me={class:`text-caption text-grey-4`,style:{"font-size":`11px`}},he=[`onClick`],ge={class:`text-caption text-grey-3 ellipsis`,style:{"font-size":`11px`}},_e={class:`col column`,style:{"min-width":`0`,position:`relative`}},ve={key:0,class:`col column items-center justify-center`},ye={key:1,class:`col column items-center justify-center text-grey-8 text-caption`},be=U(T({__name:`DiffViewer`,props:{workspaceId:{}},emits:[`close`,`sendToChat`],setup(t,{emit:n}){let r=t,a=n,{t:s}=b(),m=e([]),T=e(``),E=e(``),k=e(null),A=e(!1),j=e(!1),M=e(null),N=e(`side`),P=e(new Set),I=null,L=null,R=[];function z(e){let t=0;for(let n of e)n.isDir?t+=z(n.children):t++;return t}let U=S(()=>{let e=[];for(let t of m.value){let n=t.path.split(`/`),r=e;for(let e=0;e<n.length;e++){let i=n[e],a=e===n.length-1,o=n.slice(0,e+1).join(`/`),s=r.find(e=>e.name===i&&e.isDir===!a);s||(s={name:i,path:a?t.path:o,isDir:!a,status:a?t.status:void 0,children:[]},r.push(s)),r=s.children}}function t(e){e.sort((e,t)=>e.isDir===t.isDir?e.name.localeCompare(t.name):e.isDir?-1:1);for(let n of e)n.children.length>0&&t(n.children)}return t(e),e}),G=S(()=>{let e=[];function t(n,r){for(let i of n)i.isDir?(e.push({name:i.name,path:i.path,isDir:!0,depth:r,fileCount:z(i.children)}),P.value.has(i.path)||t(i.children,r+1)):e.push({name:i.name,path:i.path,isDir:!1,depth:r,status:i.status})}return t(U.value,0),e});function K(e){P.value.has(e)?P.value.delete(e):P.value.add(e)}async function q(){A.value=!0;try{let e=await fetch(`/api/workspaces/${r.workspaceId}/diff`);if(!e.ok)throw Error(`HTTP ${e.status}`);let t=await e.json();m.value=t.files,T.value=t.sourceBranch??``,E.value=t.workingBranch??``}catch(e){console.error(`Failed to load diff files:`,e)}finally{A.value=!1}}async function J(e){if(M.value){j.value=!0;try{I||(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`})}},I=await B(()=>import(`./editor.main-D2_WTVNi.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12])),I.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/${r.workspaceId}/diff-file?path=${encodeURIComponent(e)}`);if(!t.ok)throw Error(`HTTP ${t.status}`);let n=await t.json(),i={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`;if(L){for(let e of R)e.dispose();R=[];let e=L.getModel();L.dispose(),L=null,e?.original?.dispose(),e?.modified?.dispose()}let a=I.editor.createModel(n.original??``,i),o=I.editor.createModel(n.modified??``,i);L=I.editor.createDiffEditor(M.value,{theme:`kobo-dark`,readOnly:!0,renderSideBySide:N.value===`side`,automaticLayout:!0,minimap:{enabled:!1},scrollBeyondLastLine:!1,fontSize:12,lineHeight:18}),L.setModel({original:a,modified:o}),X()}catch(e){console.error(`Failed to load file diff:`,e)}finally{j.value=!1}}}let Y=e(!1);function X(){if(!L)return;for(let e of R)e.dispose();R=[];let e=L.getModifiedEditor(),t=L.getOriginalEditor();for(let n of[e,t]){let e=n.onDidChangeCursorSelection(()=>{let e=n.getSelection();Y.value=!!(e&&!e.isEmpty())});R.push(e)}}function Z(){if(!(!L||!k.value))for(let e of[L.getModifiedEditor(),L.getOriginalEditor()]){let t=e.getSelection();if(t&&!t.isEmpty()){let n=e.getModel();if(!n)continue;let r=n.getValueInRange(t),i=e===L.getModifiedEditor()?`modified`:`original`;a(`sendToChat`,`\`\`\`\n// ${k.value} (${i}) L${t.startLineNumber}-L${t.endLineNumber}\n${r}\n\`\`\``);return}}}u(k,e=>{e&&J(e)}),u(N,()=>{L&&L.updateOptions({renderSideBySide:N.value===`side`})});function Q(e){switch(e){case`added`:return`add_circle`;case`deleted`:return`remove_circle`;case`renamed`:return`drive_file_rename_outline`;default:return`edit`}}function $(e){switch(e){case`added`:return`#4ade80`;case`deleted`:return`#f87171`;case`renamed`:return`#60a5fa`;default:return`#f59e0b`}}return o(q),c(()=>{for(let e of R)e.dispose();if(R=[],L){let e=L.getModel();L.dispose(),L=null,e?.original?.dispose(),e?.modified?.dispose()}}),(e,t)=>(i(),y(`div`,ie,[g(`div`,ae,[f(D,{name:`difference`,size:`18px`,color:`indigo-4`,class:`q-mr-xs`}),g(`span`,oe,w(e.$t(`diff.title`)),1),f(W,{label:`${m.value.length}`,color:`grey-8`,"text-color":`grey-4`,class:`q-ml-sm`,style:{"font-size":`10px`}},null,8,[`label`]),T.value?(i(),y(`span`,se,[g(`span`,ce,w(T.value),1),f(D,{name:`arrow_forward`,size:`11px`,color:`grey-8`,class:`q-mx-xs`}),g(`span`,le,w(E.value),1)])):x(``,!0),k.value?(i(),y(`span`,ue,w(k.value),1)):x(``,!0),f(ee),f(te,{modelValue:N.value,"onUpdate:modelValue":t[0]||=e=>N.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`]),f(O,{flat:``,round:``,dense:``,icon:`close`,color:`grey-5`,size:`sm`,onClick:t[1]||=e=>a(`close`)},{default:d(()=>[f(H,null,{default:d(()=>[v(w(e.$t(`tooltip.closeDiffViewer`)),1)]),_:1})]),_:1})]),f(F,{dark:``}),g(`div`,de,[f(re,{class:`diff-file-list q-pa-xs`,style:{width:`280px`,"min-width":`200px`,height:`100%`,"border-right":`1px solid #2a2a4a`}},{default:d(()=>[A.value?(i(),_(V,{key:0,size:`24px`,color:`grey-6`,class:`q-ma-md`})):m.value.length===0?(i(),y(`div`,fe,w(e.$t(`diff.noChanges`)),1)):(i(!0),y(p,{key:2},l(G.value,e=>(i(),y(p,{key:e.path},[e.isDir?(i(),y(`div`,{key:0,class:`diff-dir-item cursor-pointer`,style:h({paddingLeft:`${e.depth*12+4}px`}),onClick:t=>K(e.path)},[f(D,{name:P.value.has(e.path)?`chevron_right`:`expand_more`,size:`14px`,color:`grey-6`},null,8,[`name`]),f(D,{name:`folder`,size:`13px`,color:`amber-7`,class:`q-mx-xs`}),g(`span`,me,w(e.name),1),f(W,{label:e.fileCount,color:`grey-9`,"text-color":`grey-5`,class:`q-ml-xs`,style:{"font-size":`9px`}},null,8,[`label`])],12,pe)):(i(),y(`div`,{key:1,class:C([`diff-file-item cursor-pointer`,{"diff-file-item--active":k.value===e.path}]),style:h({paddingLeft:`${e.depth*12+20}px`}),onClick:t=>k.value=e.path},[f(D,{name:Q(e.status),size:`11px`,style:h({color:$(e.status)}),class:`q-mr-xs`},null,8,[`name`,`style`]),g(`span`,ge,w(e.name),1)],14,he))],64))),128))]),_:1}),g(`div`,_e,[j.value?(i(),y(`div`,ve,[f(V,{size:`32px`,color:`indigo-4`})])):k.value?x(``,!0):(i(),y(`div`,ye,w(e.$t(`diff.selectFile`)),1)),g(`div`,{ref_key:`editorContainer`,ref:M,class:`col`,style:{"min-height":`0`}},null,512),Y.value?(i(),_(O,{key:2,"no-caps":``,dense:``,size:`sm`,color:`primary`,icon:`chat`,label:e.$t(`diff.addToChat`),class:`send-to-chat-btn`,onClick:Z},null,8,[`label`])):x(``,!0)])])]))}}),[[`__scopeId`,`data-v-4ed3860e`]]);export{be as default};