@loicngr/kobo 1.5.7 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/README.md +2 -0
  2. package/dist/server/routes/workspaces.js +104 -0
  3. package/dist/server/utils/git-ops.js +78 -9
  4. package/package.json +1 -1
  5. package/src/client/dist/spa/assets/{ActivityFeed-Dc1oLbwJ.js → ActivityFeed-0GR1zPoc.js} +1 -1
  6. package/src/client/dist/spa/assets/{CreatePage-BDKfkW-N.js → CreatePage-je_7dC5I.js} +2 -2
  7. package/src/client/dist/spa/assets/{DiffViewer-DZ9h2M2n.js → DiffViewer-DREYX-8k.js} +2 -2
  8. package/src/client/dist/spa/assets/HealthPage-Do8QZdxw.js +1 -0
  9. package/src/client/dist/spa/assets/{MainLayout-rVleAIBi.css → MainLayout-B5poKEy_.css} +1 -1
  10. package/src/client/dist/spa/assets/MainLayout-_oPM07ln.js +37 -0
  11. package/src/client/dist/spa/assets/QExpansionItem-UgkE560c.js +1 -0
  12. package/src/client/dist/spa/assets/{QTabPanels-DV1b1MQb.js → QTabPanels-C7lWp1yU.js} +1 -1
  13. package/src/client/dist/spa/assets/{SearchPage-ZDAo7WgD.js → SearchPage-CCfyqBKh.js} +1 -1
  14. package/src/client/dist/spa/assets/SettingsPage-CmyIsV-S.js +1 -0
  15. package/src/client/dist/spa/assets/WorkspacePage-Cl7YrG51.js +4 -0
  16. package/src/client/dist/spa/assets/{cssMode-C9wGTDAD.js → cssMode-DMX8jq8u.js} +1 -1
  17. package/src/client/dist/spa/assets/{editor.api-K7V5sl05.js → editor.api-DirOkGGg.js} +1 -1
  18. package/src/client/dist/spa/assets/{editor.main-vZ6V2hrP.js → editor.main-DC4ezIu0.js} +3 -3
  19. package/src/client/dist/spa/assets/{freemarker2-CRk6pTND.js → freemarker2-DI9xJfj0.js} +1 -1
  20. package/src/client/dist/spa/assets/{handlebars-Cs3bFomb.js → handlebars-B9F-pScn.js} +1 -1
  21. package/src/client/dist/spa/assets/{html-BT4-1gwt.js → html-DTe2v8Q8.js} +1 -1
  22. package/src/client/dist/spa/assets/{htmlMode-DZ9LYDVG.js → htmlMode-F_XLjWfJ.js} +1 -1
  23. package/src/client/dist/spa/assets/i18n-B13zBh1H.js +1 -0
  24. package/src/client/dist/spa/assets/i18n-CCWLBc0p.js +1 -0
  25. package/src/client/dist/spa/assets/{index-Br4eMfSu.js → index-DoNZ_5QK.js} +3 -3
  26. package/src/client/dist/spa/assets/{javascript-C0nTLIDg.js → javascript-B9xJRPC6.js} +1 -1
  27. package/src/client/dist/spa/assets/{jsonMode-LIrD4Pxq.js → jsonMode-DTZ6j6UO.js} +1 -1
  28. package/src/client/dist/spa/assets/{liquid-BbaUnvHA.js → liquid-BjU5MtW6.js} +1 -1
  29. package/src/client/dist/spa/assets/{marked.esm-gIBce057.js → marked.esm-DCmk6NO8.js} +1 -1
  30. package/src/client/dist/spa/assets/{mdx-B6iNIRi2.js → mdx-BMUpG7Be.js} +1 -1
  31. package/src/client/dist/spa/assets/models-B8fzv7K4.js +1 -0
  32. package/src/client/dist/spa/assets/{monaco.contribution-CZ_PxrB6.js → monaco.contribution-D7JUf8DP.js} +2 -2
  33. package/src/client/dist/spa/assets/{python-C0uk6BYc.js → python-Dz0D4uSk.js} +1 -1
  34. package/src/client/dist/spa/assets/{razor-Bj__h6OQ.js → razor-D7CFxuwR.js} +1 -1
  35. package/src/client/dist/spa/assets/{tsMode-ZSZcAFKU.js → tsMode-DjscaxpS.js} +1 -1
  36. package/src/client/dist/spa/assets/{typescript-Bgw42jIH.js → typescript-DozCWZl2.js} +1 -1
  37. package/src/client/dist/spa/assets/use-quasar-DBoizHBW.js +1 -0
  38. package/src/client/dist/spa/assets/{xml-B9gVeW9V.js → xml-DFOJMT39.js} +1 -1
  39. package/src/client/dist/spa/assets/{yaml-DUqEwwz-.js → yaml-yEefnsXm.js} +1 -1
  40. package/src/client/dist/spa/index.html +2 -2
  41. package/src/client/dist/spa/assets/HealthPage-BkqexlJb.js +0 -1
  42. package/src/client/dist/spa/assets/MainLayout-VxUBOt-P.js +0 -37
  43. package/src/client/dist/spa/assets/QExpansionItem-C735ptO9.js +0 -1
  44. package/src/client/dist/spa/assets/QItem-DfoP6eYj.js +0 -1
  45. package/src/client/dist/spa/assets/SettingsPage-D89evCuo.js +0 -1
  46. package/src/client/dist/spa/assets/WorkspacePage-Ds5Dqxas.js +0 -4
  47. package/src/client/dist/spa/assets/i18n-C0RbMxeL.js +0 -1
  48. package/src/client/dist/spa/assets/i18n-CkN9X6lQ.js +0 -1
  49. package/src/client/dist/spa/assets/models-C3h6lSte.js +0 -1
package/README.md CHANGED
@@ -4,6 +4,8 @@
4
4
 
5
5
  > [!WARNING]
6
6
  > 🚧 **Work in progress** — This project is under active development. Breaking changes may occur at any time.
7
+ >
8
+ > **Engine refactor planned.** Kōbō currently drives the `claude` CLI via `spawn(..., ['-p', ...])` and parses stdout, which is brittle on edge cases (interrupts, long-running sessions, MCP lifecycle, tool-use streaming). A rewrite is planned to use the [Claude Agent SDK](https://docs.anthropic.com/en/docs/agents-and-tools/claude-agent-sdk/overview) directly so the agent runs in-process, with proper streaming primitives, structured tool-use events, and cleaner interrupt / resume semantics. Expect churn in `src/server/services/agent-manager.ts` and the WebSocket event shape during that migration.
7
9
 
8
10
  Kōbō lets you delegate multiple coding missions to Claude Code agents in parallel. Each workspace lives in its own isolated git worktree with its own branch, its own Claude session, optionally its own dev server, and a custom MCP tools server the agent uses to track progress. A Vue 3 dashboard shows live agent output, tasks, acceptance criteria, and git state across every workspace.
9
11
 
@@ -1225,6 +1225,110 @@ app.post('/:id/rebase', (c) => {
1225
1225
  gitOps.rebaseBranch(worktreePath, workspace.sourceBranch);
1226
1226
  return c.json({ success: true });
1227
1227
  }
1228
+ catch (err) {
1229
+ if (err instanceof gitOps.GitConflictError) {
1230
+ return c.json({ error: err.message, conflict: true, operation: err.operation, files: err.files }, 409);
1231
+ }
1232
+ const message = err instanceof Error ? err.message : String(err);
1233
+ return c.json({ error: message }, 500);
1234
+ }
1235
+ });
1236
+ /** Merge the source branch into the workspace branch (non-fast-forward). */
1237
+ app.post('/:id/merge', (c) => {
1238
+ try {
1239
+ const id = c.req.param('id');
1240
+ const workspace = workspaceService.getWorkspace(id);
1241
+ if (!workspace)
1242
+ return c.json({ error: `Workspace '${id}' not found` }, 404);
1243
+ const worktreePath = path.join(workspace.projectPath, '.worktrees', workspace.workingBranch);
1244
+ gitOps.mergeBranch(worktreePath, workspace.sourceBranch);
1245
+ return c.json({ success: true });
1246
+ }
1247
+ catch (err) {
1248
+ if (err instanceof gitOps.GitConflictError) {
1249
+ return c.json({ error: err.message, conflict: true, operation: err.operation, files: err.files }, 409);
1250
+ }
1251
+ const message = err instanceof Error ? err.message : String(err);
1252
+ return c.json({ error: message }, 500);
1253
+ }
1254
+ });
1255
+ /** Abort any in-progress merge or rebase in the worktree. */
1256
+ app.post('/:id/git/abort', (c) => {
1257
+ try {
1258
+ const id = c.req.param('id');
1259
+ const workspace = workspaceService.getWorkspace(id);
1260
+ if (!workspace)
1261
+ return c.json({ error: `Workspace '${id}' not found` }, 404);
1262
+ const worktreePath = path.join(workspace.projectPath, '.worktrees', workspace.workingBranch);
1263
+ const aborted = gitOps.abortOngoingGitOperation(worktreePath);
1264
+ return c.json({ success: true, aborted });
1265
+ }
1266
+ catch (err) {
1267
+ const message = err instanceof Error ? err.message : String(err);
1268
+ return c.json({ error: message }, 500);
1269
+ }
1270
+ });
1271
+ /** Hand off merge/rebase conflicts to the workspace agent with an intelligent-resolution prompt. */
1272
+ app.post('/:id/git/resolve-with-agent', async (c) => {
1273
+ try {
1274
+ const id = c.req.param('id');
1275
+ const workspace = workspaceService.getWorkspace(id);
1276
+ if (!workspace)
1277
+ return c.json({ error: `Workspace '${id}' not found` }, 404);
1278
+ const body = (await c.req.json().catch(() => ({})));
1279
+ const worktreePath = path.join(workspace.projectPath, '.worktrees', workspace.workingBranch);
1280
+ const operation = body.operation ?? gitOps.getOngoingGitOperation(worktreePath) ?? 'merge';
1281
+ const files = body.files && body.files.length > 0 ? body.files : gitOps.getConflictedFiles(worktreePath);
1282
+ if (files.length === 0) {
1283
+ return c.json({ error: 'No conflicted files detected — nothing for the agent to resolve' }, 400);
1284
+ }
1285
+ const fileList = files.map((f) => `- ${f}`).join('\n');
1286
+ const continueCmd = operation === 'merge' ? 'git merge --continue' : 'git rebase --continue';
1287
+ const prompt = `I started a \`git ${operation}\` of \`origin/${workspace.sourceBranch}\` into our working branch \`${workspace.workingBranch}\` and it produced conflicts that I need your help to resolve INTELLIGENTLY.
1288
+
1289
+ Conflicted files (${files.length}):
1290
+ ${fileList}
1291
+
1292
+ ## Resolution rules — read carefully
1293
+
1294
+ 1. **Our branch is the source of truth for the feature we are building.** Its behavior must be preserved.
1295
+ 2. **The source branch (\`${workspace.sourceBranch}\`) carries legitimate upstream changes** (bug fixes, refactors, dependency bumps). Integrate these where they don't conflict with our intent.
1296
+ 3. **Do NOT blindly pick a side.** Neither \`--ours\` nor \`--theirs\` wholesale. Read each conflict hunk and reason about what the correct merged state is.
1297
+ 4. **Think semantically, not syntactically.** If our branch renamed \`foo\` to \`bar\` and the source branch added a new call to \`foo\`, the correct resolution is a new call to \`bar\`, not "keep ours and drop the new call".
1298
+ 5. **Preserve tests and contracts.** If both sides touched the same test, keep coverage from both.
1299
+ 6. **Imports, versions, lock files:** prefer the superset (union) unless they genuinely conflict — in which case use the more recent / more restrictive.
1300
+
1301
+ ## Steps
1302
+
1303
+ 1. For each conflicted file, open it and read both conflict markers.
1304
+ 2. Decide the merge intent. If unsure, investigate both sides' commit history (\`git log --oneline ours..HEAD <file>\` vs \`git log --oneline origin/${workspace.sourceBranch} <file>\`).
1305
+ 3. Edit the file to the correct merged state and remove the conflict markers.
1306
+ 4. Run the test suite to verify no regression (\`npm test\` or the project's equivalent).
1307
+ 5. \`git add <resolved-files>\` then \`${continueCmd}\`.
1308
+ 6. Report the summary: which files you touched, the key decisions you made, and the final test result.
1309
+
1310
+ Start now.`;
1311
+ // Persist the prompt in the chat feed so the user sees what was dispatched.
1312
+ const session = workspaceService.getActiveSession(workspace.id);
1313
+ wsService.emit(workspace.id, 'user:message', { content: prompt, sender: 'user' }, session?.id ?? undefined);
1314
+ let messageSent = false;
1315
+ try {
1316
+ agentManager.sendMessage(workspace.id, prompt);
1317
+ messageSent = true;
1318
+ }
1319
+ catch {
1320
+ try {
1321
+ agentManager.startAgent(workspace.id, worktreePath, prompt, workspace.model, true, workspace.permissionMode, undefined, workspace.reasoningEffort);
1322
+ workspaceService.updateWorkspaceStatus(workspace.id, 'executing');
1323
+ messageSent = true;
1324
+ }
1325
+ catch (resumeErr) {
1326
+ const resumeMsg = resumeErr instanceof Error ? resumeErr.message : String(resumeErr);
1327
+ console.warn(`[workspaces] resolve-with-agent: agent resume failed: ${resumeMsg}`);
1328
+ }
1329
+ }
1330
+ return c.json({ ok: true, operation, files, messageSent });
1331
+ }
1228
1332
  catch (err) {
1229
1333
  const message = err instanceof Error ? err.message : String(err);
1230
1334
  return c.json({ error: message }, 500);
@@ -1,5 +1,5 @@
1
1
  import { execFile as execFileCb, execFileSync } from 'node:child_process';
2
- import { readFileSync } from 'node:fs';
2
+ import { existsSync, readFileSync } from 'node:fs';
3
3
  import { join } from 'node:path';
4
4
  import { promisify } from 'node:util';
5
5
  const execFileAsync = promisify(execFileCb);
@@ -133,7 +133,47 @@ export function pullBranch(repoPath, branchName, remote = 'origin') {
133
133
  throw new Error(`Failed to pull branch '${branchName}' from '${remote}': ${message}`);
134
134
  }
135
135
  }
136
- /** Rebase the current branch onto the given base branch. Fetches origin first to get latest changes. */
136
+ /** Thrown when a rebase or merge produces conflicts. Leaves the repo in the mid-operation state
137
+ * so the caller can decide between abort and agent-assisted resolution. */
138
+ export class GitConflictError extends Error {
139
+ operation;
140
+ files;
141
+ constructor(operation, files) {
142
+ super(`${operation} produced ${files.length} conflicted file(s)`);
143
+ this.name = 'GitConflictError';
144
+ this.operation = operation;
145
+ this.files = files;
146
+ }
147
+ }
148
+ /** List files currently in a conflicted state (unmerged paths). */
149
+ export function getConflictedFiles(repoPath) {
150
+ try {
151
+ const output = git(repoPath, ['diff', '--name-only', '--diff-filter=U']);
152
+ return output
153
+ .split('\n')
154
+ .map((f) => f.trim())
155
+ .filter(Boolean);
156
+ }
157
+ catch {
158
+ return [];
159
+ }
160
+ }
161
+ /** Detect whether a merge or rebase is currently in progress in the worktree. */
162
+ export function getOngoingGitOperation(repoPath) {
163
+ try {
164
+ const gitDir = git(repoPath, ['rev-parse', '--git-dir']);
165
+ const dir = gitDir.startsWith('/') ? gitDir : join(repoPath, gitDir);
166
+ if (existsSync(join(dir, 'MERGE_HEAD')))
167
+ return 'merge';
168
+ if (existsSync(join(dir, 'rebase-merge')) || existsSync(join(dir, 'rebase-apply')))
169
+ return 'rebase';
170
+ return null;
171
+ }
172
+ catch {
173
+ return null;
174
+ }
175
+ }
176
+ /** Rebase the current branch onto the given base branch. Fetches origin first. Leaves conflicts in place. */
137
177
  export function rebaseBranch(repoPath, baseBranch) {
138
178
  try {
139
179
  git(repoPath, ['fetch', 'origin', baseBranch]);
@@ -145,17 +185,46 @@ export function rebaseBranch(repoPath, baseBranch) {
145
185
  git(repoPath, ['rebase', `origin/${baseBranch}`]);
146
186
  }
147
187
  catch (err) {
148
- const message = err instanceof Error ? err.message : String(err);
149
- // Abort the rebase if it fails (conflicts etc.)
150
- try {
151
- git(repoPath, ['rebase', '--abort']);
152
- }
153
- catch {
154
- /* best-effort */
188
+ const conflicted = getConflictedFiles(repoPath);
189
+ if (conflicted.length > 0 || getOngoingGitOperation(repoPath) === 'rebase') {
190
+ // Leave the rebase in progress so the caller can abort or request agent-assisted resolution.
191
+ throw new GitConflictError('rebase', conflicted);
155
192
  }
193
+ const message = err instanceof Error ? err.message : String(err);
156
194
  throw new Error(`Rebase onto '${baseBranch}' failed: ${message}`);
157
195
  }
158
196
  }
197
+ /** Merge `origin/<baseBranch>` into the current branch. Fetches first. Leaves conflicts in place. */
198
+ export function mergeBranch(repoPath, baseBranch) {
199
+ try {
200
+ git(repoPath, ['fetch', 'origin', baseBranch]);
201
+ }
202
+ catch {
203
+ // offline — continue with local ref
204
+ }
205
+ try {
206
+ git(repoPath, ['merge', '--no-ff', '--no-edit', `origin/${baseBranch}`]);
207
+ }
208
+ catch (err) {
209
+ const conflicted = getConflictedFiles(repoPath);
210
+ if (conflicted.length > 0 || getOngoingGitOperation(repoPath) === 'merge') {
211
+ throw new GitConflictError('merge', conflicted);
212
+ }
213
+ const message = err instanceof Error ? err.message : String(err);
214
+ throw new Error(`Merge of 'origin/${baseBranch}' failed: ${message}`);
215
+ }
216
+ }
217
+ /** Abort an in-progress merge or rebase. No-op if nothing is in progress. */
218
+ export function abortOngoingGitOperation(repoPath) {
219
+ const op = getOngoingGitOperation(repoPath);
220
+ if (op === 'merge') {
221
+ git(repoPath, ['merge', '--abort']);
222
+ }
223
+ else if (op === 'rebase') {
224
+ git(repoPath, ['rebase', '--abort']);
225
+ }
226
+ return op;
227
+ }
159
228
  /** Try a git command with `base`, falling back to `origin/base` if the local ref is missing. */
160
229
  function resolveBase(repoPath, base) {
161
230
  try {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@loicngr/kobo",
3
- "version": "1.5.7",
3
+ "version": "1.6.0",
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{E as e,F as t,H as n,L as r,M as i,N as a,Q as o,U as s,_t as c,bt as l,d as u,f as d,g as f,h as p,l as m,p as h,r as g,rt as ee,u as _,v as te}from"./runtime-core.esm-bundler-C3IgBgY5.js";import{F as ne,i as v}from"./QSpinner-CliSLjf8.js";import{n as re}from"./vue-i18n-eUDnMrPl.js";import{t as y}from"./QBtn-BsD8vrWq.js";import{x as ie,y as ae}from"./index-Br4eMfSu.js";import{t as b}from"./QSpinnerDots-Dp12eHrB.js";import{t as x}from"./QSpace-C5Ebr0vq.js";import{t as S}from"./QTooltip-kLXuUa_m.js";import{n as oe,t as se}from"./marked.esm-gIBce057.js";import{t as C}from"./_plugin-vue_export-helper-Cxt1D8wE.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(te({__name:`ActivityFeed`,setup(te){function C(e){let t=se.parse(e,{async:!1,breaks:!0,gfm:!0});return oe.sanitize(t)}let{t:T}=re(),E=ie(),et=ae(),D=o(null),O=o(!1),k=o(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=m(()=>{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=o(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{E as e,F as t,H as n,L as r,M as i,N as a,Q as o,U as s,_t as c,bt as l,d as u,f as d,g as f,h as p,l as m,p as h,r as g,rt as ee,u as _,v as te}from"./runtime-core.esm-bundler-C3IgBgY5.js";import{F as ne,i as v}from"./QSpinner-CliSLjf8.js";import{n as re}from"./vue-i18n-eUDnMrPl.js";import{t as y}from"./QBtn-BsD8vrWq.js";import{x as ie,y as ae}from"./index-DoNZ_5QK.js";import{t as b}from"./QSpinnerDots-Dp12eHrB.js";import{t as x}from"./QSpace-C5Ebr0vq.js";import{t as S}from"./QTooltip-kLXuUa_m.js";import{n as oe,t as se}from"./marked.esm-DCmk6NO8.js";import{t as C}from"./_plugin-vue_export-helper-Cxt1D8wE.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(te({__name:`ActivityFeed`,setup(te){function C(e){let t=se.parse(e,{async:!1,breaks:!0,gfm:!0});return oe.sanitize(t)}let{t:T}=re(),E=ie(),et=ae(),D=o(null),O=o(!1),k=o(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=m(()=>{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=o(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=o(-1);function at(){let t=E.activityFeed,n=t.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=t.length-r;a>L.value&&(L.value=Math.min(a+10,t.length)),e(()=>{let e=D.value?.querySelector(`[data-item-id="${i}"]`);e&&e.scrollIntoView({behavior:`smooth`,block:`center`})})}n(()=>E.selectedWorkspaceId,()=>{I.value=-1,A.clear(),P.value.clear(),M.clear(),W.clear(),B=0,O.value=!1});let L=o(w),R=m(()=>{let e=E.activityFeed;return e.length<=L.value?e:e.slice(-L.value)});n(()=>E.selectedWorkspaceId,()=>{L.value=w}),n(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=o(!1),B=0;function V(){let t=D.value;if(t&&(t.scrollHeight-t.scrollTop-t.clientHeight<50?z.value=!1:t.scrollTop<B&&(z.value=!0),B=t.scrollTop,t.scrollTop<200&&!O.value)){let n=E.activityFeed.length;if(L.value<n){O.value=!0;let r=t.scrollHeight;L.value=Math.min(L.value+$e,n),e(()=>{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=t.scrollHeight;E.fetchOlderEvents(E.selectedWorkspaceId).then(t=>{t?(L.value=E.activityFeed.length,e(()=>{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,e(()=>{let e=D.value;e&&(e.scrollTop=e.scrollHeight)})}n(()=>E.activityFeed.length,()=>{e(H)}),i(()=>{D.value?.addEventListener(`scroll`,V),e(H)}),a(()=>{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{F as e,H as t,L as n,M as r,N as i,Q as a,T as ee,U as o,bt as s,d as c,f as l,g as u,h as d,l as f,p,r as m,rt as te,u as h,v as ne,vt as re,x as ie}from"./runtime-core.esm-bundler-C3IgBgY5.js";import{A as ae,F as g,P as _,i as v}from"./QSpinner-CliSLjf8.js";import{i as y}from"./private.use-form-BhKyDtO7.js";import{n as oe}from"./vue-i18n-eUDnMrPl.js";import{t as se}from"./settings-B69lIVX0.js";import{t as b}from"./QBtn-BsD8vrWq.js";import{_ as ce,r as x,x as le,y as ue}from"./index-Br4eMfSu.js";import{t as de}from"./QSpace-C5Ebr0vq.js";import{t as S}from"./QTooltip-kLXuUa_m.js";import{t as fe}from"./_plugin-vue_export-helper-Cxt1D8wE.js";import{r as C}from"./QMenu-DU-wiY_A.js";import{n as w,r as pe,t as T}from"./QItem-DfoP6eYj.js";import{t as me}from"./QExpansionItem-C735ptO9.js";import{n as E,t as he}from"./models-C3h6lSte.js";import{t as ge}from"./QPage-BKY2-sf-.js";var _e={class:`create-inner`},ve={class:`create-title text-center text-weight-bold q-mb-lg text-grey-3`},ye={class:`create-card rounded-borders`},be={class:`card-top-bar row items-center q-px-md q-py-xs`},xe={class:`model-badge cursor-default row items-center q-gutter-xs`},Se={class:`text-indigo-3 text-weight-medium text-caption`},Ce={key:0,class:`notion-url-wrap`},we={key:0,class:`notion-error text-caption q-px-md q-pb-xs text-red-5`},Te={key:1,class:`notion-valid text-caption q-px-md q-pb-xs text-green-4`},Ee={key:0,class:`sentry-url-wrap`},De={key:0,class:`sentry-error text-caption q-px-md q-pb-xs text-red-5`},Oe={key:1,class:`sentry-valid text-caption q-px-md q-pb-xs text-red-4`},ke={class:`card-name-wrap`},Ae={class:`card-textarea-wrap`},je={class:`manual-hint q-px-md q-py-sm text-caption text-grey-6`},Me={class:`q-pa-sm manual-section-body`},Ne={class:`row items-center q-gutter-sm q-mb-sm`},Pe={class:`col text-caption text-grey-4`},Fe={class:`q-pa-sm manual-section-body`},Ie={class:`row items-center q-gutter-sm q-mb-sm`},Le={class:`col text-caption text-grey-4`},Re={class:`card-bottom-bar row items-center wrap q-px-sm q-py-xs q-gutter-xs`},ze={class:`bottom-select-label row items-center no-wrap`},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:`row justify-center q-px-sm q-py-sm`},Ke={class:`create-hint text-center text-body2 q-mt-md text-grey-8`},D=fe(ne({__name:`CreatePage`,setup(ne){let fe=ce(),D=pe(),qe=le(),O=se(),{t:k}=oe(),Je=a([]),A=a(``),j=a(``),M=a(``),N=a(!1),P=a(`claude-opus-4-7`),F=a(`auto`),I=a(``),L=a(null),R=a(`feature`),z=a(!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`}],B=a(O.global.defaultPermissionMode||`plan`),V=a([]),H=a(!1),Xe=a(!1),Ze=f(()=>[...he.map(e=>({label:k(e.i18nLabelKey),value:e.value,description:k(e.i18nDescriptionKey)}))]);function U(e){let t=e.indexOf(`:`);return t>=0?e.slice(t+1).trim():e}let Qe=f(()=>[{label:U(k(`reasoning.auto`)),value:`auto`,description:k(`reasoning.autoDescription`)},{label:U(k(`reasoning.low`)),value:`low`,description:k(`reasoning.lowDescription`)},{label:U(k(`reasoning.medium`)),value:`medium`,description:k(`reasoning.mediumDescription`)},{label:U(k(`reasoning.high`)),value:`high`,description:k(`reasoning.highDescription`)},{label:U(k(`reasoning.xhigh`)),value:`xhigh`,description:k(`reasoning.xhighDescription`)},{label:U(k(`reasoning.max`)),value:`max`,description:k(`reasoning.maxDescription`)}]),W=f(()=>M.value.trim().startsWith(`https://www.notion.so/`)),G=a([]),K=a([]),q=a(``),J=a(``),Y=f(()=>!N.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(){N.value=!N.value,N.value||(M.value=``)}let X=a(!1),Z=a(``),Q=f(()=>/\/issues\/\d+/.test(Z.value.trim()));function it(){X.value=!X.value,X.value||(Z.value=``)}async function at(e){if(!e.trim()){V.value=[],L.value=null;return}H.value=!0;try{let t=await fetch(`/api/git/branches?path=${encodeURIComponent(e.trim())}`);if(!t.ok)throw Error(`HTTP ${t.status}`);let n=await t.json();V.value=n.local??n.branches??[],V.value.length>0&&!L.value&&(L.value=V.value[0]??null)}catch{V.value=[],L.value=null}finally{H.value=!1}}function ot(e){let t=O.getProjectByPath(e);t&&(t.defaultSourceBranch&&(L.value=t.defaultSourceBranch),t.defaultModel?P.value=t.defaultModel:O.global.defaultModel&&(P.value=O.global.defaultModel))}let $=null;t(I,e=>{$&&clearTimeout($),$=setTimeout(()=>{L.value=null,at(e),ot(e)},500)});function st(e,t){t(()=>{Je.value=O.projectPaths.filter(t=>t.toLowerCase().includes(e.toLowerCase()))})}r(()=>{O.fetchSettings()}),i(()=>{$&&clearTimeout($)});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 A.value.trim()?A.value.trim().substring(0,80):!N.value&&j.value.trim()&&(j.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 N.value&&!W.value?k(`createPage.validationNotionUrl`):X.value&&!Q.value?k(`createPage.sentryValidation`):!N.value&&!X.value&&!j.value.trim()?k(`createPage.validationDescription`):!N.value&&!X.value&&(!lt()||lt()===`workspace`)&&!A.value.trim()&&!j.value.trim()?k(`createPage.validationName`):I.value.trim()?L.value?null:k(`createPage.validationBranch`):k(`createPage.validationPath`)}async function ft(){let e=dt();if(e){D.notify({type:`negative`,message:e,position:`top`});return}Xe.value=!0;try{let e=lt(),t;t=N.value&&W.value?ut(M.value.trim()):e===`workspace`?`task-${Date.now()}`:ct(e);let n=`${R.value}/${t}`,r={name:e,projectPath:I.value.trim(),sourceBranch:L.value,workingBranch:n,model:P.value,reasoningEffort:F.value,...N.value&&W.value?{notionUrl:M.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}:{},...z.value?{skipSetupScript:!0}:{},...j.value.trim()?{description:j.value.trim()}:{},permissionMode:B.value},i=await qe.createWorkspace(r);ue().subscribe(i.id),qe.selectWorkspace(i.id),fe.push({name:`workspace`,params:{id:i.id}})}catch{D.notify({type:`negative`,message:k(`createPage.errorCreating`),position:`top`})}finally{Xe.value=!1}}return(t,r)=>(e(),c(ge,{class:`create-page flex flex-center column`},{default:o(()=>[h(`div`,_e,[h(`div`,ve,s(t.$t(`createPage.title`)),1),h(`div`,ye,[h(`div`,be,[h(`span`,xe,[u(v,{name:`auto_awesome`,size:`14px`,color:`indigo-4`}),h(`span`,Se,s(t.$t(`createPage.claudeCode`)),1)]),u(de),u(b,{flat:``,dense:``,"no-caps":``,size:`sm`,color:N.value?`green-4`:`grey-5`,class:`notion-toggle-btn text-caption rounded-borders`,onClick:rt},{default:o(()=>[u(v,{name:`description`,size:`14px`,class:`q-mr-xs`}),d(` `+s(N.value?t.$t(`createPage.notionEnabled`):t.$t(`createPage.importNotion`)),1)]),_:1},8,[`color`]),u(b,{flat:``,dense:``,"no-caps":``,size:`sm`,color:X.value?`red-4`:`grey-5`,class:`sentry-toggle-btn text-caption rounded-borders q-ml-sm`,onClick:it},{default:o(()=>[u(v,{name:`bug_report`,size:`14px`,class:`q-mr-xs`}),d(` `+s(X.value?t.$t(`createPage.sentryEnabled`):t.$t(`createPage.importSentry`)),1)]),_:1},8,[`color`])]),u(y,{color:`grey-9`}),u(ae,{name:`slide`},{default:o(()=>[N.value?(e(),p(`div`,Ce,[u(x,{modelValue:M.value,"onUpdate:modelValue":r[0]||=e=>M.value=e,borderless:``,dense:``,placeholder:t.$t(`createPage.notionPlaceholder`),class:`notion-url-input`,"input-class":`notion-url-input-inner`},{prepend:o(()=>[u(v,{name:`link`,size:`16px`,color:W.value?`green-4`:`grey-6`},null,8,[`color`])]),_:1},8,[`modelValue`,`placeholder`]),M.value.trim()&&!W.value?(e(),p(`div`,we,s(t.$t(`createPage.notionValidation`)),1)):l(``,!0),W.value?(e(),p(`div`,Te,s(t.$t(`createPage.notionAutoExtract`)),1)):l(``,!0)])):l(``,!0)]),_:1}),N.value?(e(),c(y,{key:0,color:`grey-9`})):l(``,!0),u(ae,{name:`slide`},{default:o(()=>[X.value?(e(),p(`div`,Ee,[u(x,{modelValue:Z.value,"onUpdate:modelValue":r[1]||=e=>Z.value=e,borderless:``,dense:``,placeholder:t.$t(`createPage.sentryPlaceholder`),class:`sentry-url-input`,"input-class":`sentry-url-input-inner`},{prepend:o(()=>[u(v,{name:`link`,size:`16px`,color:Q.value?`red-4`:`grey-6`},null,8,[`color`])]),_:1},8,[`modelValue`,`placeholder`]),Z.value.trim()&&!Q.value?(e(),p(`div`,De,s(t.$t(`createPage.sentryValidation`)),1)):l(``,!0),Q.value?(e(),p(`div`,Oe,s(t.$t(`createPage.sentryAutoExtract`)),1)):l(``,!0)])):l(``,!0)]),_:1}),X.value?(e(),c(y,{key:1,color:`grey-9`})):l(``,!0),h(`div`,ke,[u(x,{modelValue:A.value,"onUpdate:modelValue":r[2]||=e=>A.value=e,borderless:``,dense:``,placeholder:N.value&&W.value?t.$t(`createPage.workspaceName`):t.$t(`createPage.workspaceNamePlaceholder`),class:`name-input`,"input-class":`name-input-inner`},null,8,[`modelValue`,`placeholder`])]),u(y,{color:`grey-9`}),h(`div`,Ae,[u(x,{modelValue:j.value,"onUpdate:modelValue":r[3]||=e=>j.value=e,type:`textarea`,borderless:``,autogrow:``,rows:3,placeholder:N.value?t.$t(`createPage.instructions`):t.$t(`createPage.instructionsPlaceholder`),class:`create-textarea`,"input-class":`create-textarea-input`,onKeydown:[_(g(ft,[`ctrl`]),[`enter`]),_(g(ft,[`meta`]),[`enter`])]},null,8,[`modelValue`,`placeholder`,`onKeydown`])]),u(y,{color:`grey-9`}),Y.value?(e(),p(m,{key:2},[h(`div`,je,s(t.$t(`createPage.manualHint`)),1),u(me,{dark:``,dense:``,label:t.$t(`createPage.tasks`,{count:G.value.length}),"header-class":`text-grey-4 manual-expansion-header`,class:`manual-expansion q-mx-sm`},{default:o(()=>[h(`div`,Me,[h(`div`,Ne,[u(x,{modelValue:q.value,"onUpdate:modelValue":r[4]||=e=>q.value=e,dark:``,dense:``,borderless:``,placeholder:t.$t(`createPage.addTask`),class:`col manual-input`,"input-class":`manual-input-inner`,onKeydown:_(g($e,[`prevent`]),[`enter`])},null,8,[`modelValue`,`placeholder`,`onKeydown`]),u(b,{flat:``,dense:``,round:``,icon:`add`,color:`indigo-4`,disable:!q.value.trim(),onClick:$e},{default:o(()=>[u(S,null,{default:o(()=>[d(s(t.$t(`tooltip.addTask`)),1)]),_:1})]),_:1},8,[`disable`])]),(e(!0),p(m,null,n(G.value,(n,r)=>(e(),p(`div`,{key:`task-${r}`,class:`row items-center q-py-xs manual-item`},[h(`span`,Pe,s(n),1),u(b,{flat:``,dense:``,round:``,icon:`close`,size:`xs`,color:`grey-6`,onClick:e=>et(r)},{default:o(()=>[u(S,null,{default:o(()=>[d(s(t.$t(`tooltip.removeTask`)),1)]),_:1})]),_:1},8,[`onClick`])]))),128))])]),_:1},8,[`label`]),u(me,{dark:``,dense:``,label:t.$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:o(()=>[h(`div`,Fe,[h(`div`,Ie,[u(x,{modelValue:J.value,"onUpdate:modelValue":r[5]||=e=>J.value=e,dark:``,dense:``,borderless:``,placeholder:t.$t(`createPage.addCriterion`),class:`col manual-input`,"input-class":`manual-input-inner`,onKeydown:_(g(tt,[`prevent`]),[`enter`])},null,8,[`modelValue`,`placeholder`,`onKeydown`]),u(b,{flat:``,dense:``,round:``,icon:`add`,color:`indigo-4`,disable:!J.value.trim(),onClick:tt},{default:o(()=>[u(S,null,{default:o(()=>[d(s(t.$t(`tooltip.addCriterion`)),1)]),_:1})]),_:1},8,[`disable`])]),(e(!0),p(m,null,n(K.value,(n,r)=>(e(),p(`div`,{key:`crit-${r}`,class:`row items-center q-py-xs manual-item`},[h(`span`,Le,s(n),1),u(b,{flat:``,dense:``,round:``,icon:`close`,size:`xs`,color:`grey-6`,onClick:e=>nt(r)},{default:o(()=>[u(S,null,{default:o(()=>[d(s(t.$t(`tooltip.removeCriterion`)),1)]),_:1})]),_:1},8,[`onClick`])]))),128))])]),_:1},8,[`label`]),u(y,{color:`grey-9`})],64)):l(``,!0),h(`div`,Re,[u(E,{modelValue:P.value,"onUpdate:modelValue":r[6]||=e=>P.value=e,options:Ze.value,dense:``,borderless:``,class:`bottom-select rounded-borders model-select`,"hide-dropdown-icon":``,"emit-value":``,"map-options":``,"option-value":`value`,"option-label":`label`},{selected:o(()=>[h(`span`,ze,[d(s(Ze.value.find(e=>e.value===P.value)?.label??P.value)+` `,1),u(v,{name:`expand_more`,size:`12px`,color:`grey-5`})])]),option:o(({opt:e,itemProps:t})=>[u(T,ee(t,{class:`model-option`}),{default:o(()=>[u(w,null,{default:o(()=>[u(C,{class:`text-white`},{default:o(()=>[d(s(e.label),1)]),_:2},1024),u(C,{caption:``,class:`text-grey-5`},{default:o(()=>[d(s(e.description),1)]),_:2},1024)]),_:2},1024)]),_:2},1040)]),_:1},8,[`modelValue`,`options`]),u(E,{modelValue:F.value,"onUpdate:modelValue":r[7]||=e=>F.value=e,options:Qe.value,dense:``,borderless:``,class:`bottom-select rounded-borders`,"hide-dropdown-icon":``,"emit-value":``,"map-options":``,"option-value":`value`,"option-label":`label`},{selected:o(()=>[h(`span`,Be,[u(v,{name:`psychology`,size:`12px`,color:`grey-5`,class:`q-mr-xs`}),d(` `+s(Qe.value.find(e=>e.value===F.value)?.label??F.value)+` `,1),u(v,{name:`expand_more`,size:`12px`,color:`grey-5`})])]),option:o(({opt:e,itemProps:t})=>[u(T,re(ie(t)),{default:o(()=>[u(w,null,{default:o(()=>[u(C,{class:`text-white`},{default:o(()=>[d(s(e.label),1)]),_:2},1024),u(C,{caption:``,class:`text-grey-5`},{default:o(()=>[d(s(e.description),1)]),_:2},1024)]),_:2},1024)]),_:2},1040)]),_:1},8,[`modelValue`,`options`]),u(E,{modelValue:B.value,"onUpdate:modelValue":r[8]||=e=>B.value=e,options:[{label:t.$t(`permissionMode.plan`),value:`plan`},{label:t.$t(`permissionMode.autoAccept`),value:`auto-accept`}],dense:``,borderless:``,class:`bottom-select rounded-borders`,"hide-dropdown-icon":``,"emit-value":``,"map-options":``},{selected:o(()=>[h(`span`,Ve,[u(v,{name:B.value===`plan`?`visibility`:`flash_on`,size:`12px`,color:`amber-6`,class:`q-mr-xs`},null,8,[`name`]),d(` `+s(B.value===`plan`?t.$t(`permissionMode.plan`):t.$t(`permissionMode.autoAccept`))+` `,1),u(v,{name:`expand_more`,size:`12px`,color:`grey-5`})])]),_:1},8,[`modelValue`,`options`]),u(b,{flat:``,round:``,dense:``,size:`sm`,icon:z.value?`play_disabled`:`play_circle`,color:z.value?`orange-4`:`grey-6`,onClick:r[9]||=e=>z.value=!z.value},{default:o(()=>[u(S,null,{default:o(()=>[d(s(t.$t(`createPage.skipSetupScript`)),1)]),_:1})]),_:1},8,[`icon`,`color`]),u(de),u(E,{modelValue:I.value,"onUpdate:modelValue":r[10]||=e=>I.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:te(O).projectPaths.length>0?`menu`:`dialog`,onFilter:st,onInputValue:r[11]||=e=>{I.value=e}},{prepend:o(()=>[u(v,{name:`attach_file`,size:`12px`,color:`grey-5`})]),selected:o(()=>[h(`span`,He,s(I.value||t.$t(`createPage.projectPath`)),1)]),"no-option":o(()=>[u(T,null,{default:o(()=>[u(w,{class:`text-grey-6 text-caption`},{default:o(()=>[d(s(t.$t(`createPage.enterPath`)),1)]),_:1})]),_:1})]),_:1},8,[`modelValue`,`options`,`behavior`]),u(E,{modelValue:R.value,"onUpdate:modelValue":r[12]||=e=>R.value=e,options:Ye,"emit-value":``,"map-options":``,dense:``,borderless:``,class:`bottom-select rounded-borders branch-type-select`,"hide-dropdown-icon":``},{selected:o(()=>[h(`span`,Ue,[u(v,{name:`account_tree`,size:`12px`,color:`grey-5`,class:`q-mr-xs`}),d(` `+s(R.value)+`/ `,1),u(v,{name:`expand_more`,size:`12px`,color:`grey-5`})])]),default:o(()=>[u(S,null,{default:o(()=>[d(s(t.$t(`createPage.branchType`)),1)]),_:1})]),_:1},8,[`modelValue`]),u(E,{modelValue:L.value,"onUpdate:modelValue":r[13]||=e=>L.value=e,options:V.value,dense:``,borderless:``,class:`bottom-select rounded-borders branch-select`,"hide-dropdown-icon":``,loading:H.value,disable:!I.value.trim()||H.value},{selected:o(()=>[h(`span`,We,[u(v,{name:`call_split`,size:`12px`,color:`grey-5`,class:`q-mr-xs`}),d(` `+s(L.value??t.$t(`createPage.branch`))+` `,1),u(v,{name:`expand_more`,size:`12px`,color:`grey-5`})])]),"no-option":o(()=>[u(T,null,{default:o(()=>[u(w,{class:`text-grey-6 text-caption`},{default:o(()=>[d(s(I.value.trim()?t.$t(`createPage.noBranches`):t.$t(`createPage.enterPath`)),1)]),_:1})]),_:1})]),_:1},8,[`modelValue`,`options`,`loading`,`disable`])]),h(`div`,Ge,[u(b,{label:t.$t(`createPage.create`),"no-caps":``,unelevated:``,class:`create-btn text-weight-bold rounded-borders`,loading:Xe.value,onClick:ft},null,8,[`label`,`loading`])])]),h(`div`,Ke,s(N.value?t.$t(`createPage.notionExtractHint`):t.$t(`createPage.notionImportHint`)),1)])]),_:1}))}}),[[`__scopeId`,`data-v-ab47cf8d`]]);export{D as default};
1
+ import{F as e,H as t,L as n,M as r,N as i,Q as a,T as ee,U as o,bt as s,d as c,f as l,g as u,h as d,l as f,p,r as m,rt as te,u as h,v as ne,vt as re,x as ie}from"./runtime-core.esm-bundler-C3IgBgY5.js";import{A as ae,F as g,P as _,i as v}from"./QSpinner-CliSLjf8.js";import{i as y}from"./private.use-form-BhKyDtO7.js";import{n as oe}from"./vue-i18n-eUDnMrPl.js";import{t as se}from"./settings-B69lIVX0.js";import{t as b}from"./QBtn-BsD8vrWq.js";import{_ as ce,r as x,x as le,y as ue}from"./index-DoNZ_5QK.js";import{t as de}from"./QSpace-C5Ebr0vq.js";import{t as S}from"./QTooltip-kLXuUa_m.js";import{t as fe}from"./_plugin-vue_export-helper-Cxt1D8wE.js";import{r as C}from"./QMenu-DU-wiY_A.js";import{n as w,r as T,t as pe}from"./use-quasar-DBoizHBW.js";import{t as me}from"./QExpansionItem-UgkE560c.js";import{n as E,t as he}from"./models-B8fzv7K4.js";import{t as ge}from"./QPage-BKY2-sf-.js";var _e={class:`create-inner`},ve={class:`create-title text-center text-weight-bold q-mb-lg text-grey-3`},ye={class:`create-card rounded-borders`},be={class:`card-top-bar row items-center q-px-md q-py-xs`},xe={class:`model-badge cursor-default row items-center q-gutter-xs`},Se={class:`text-indigo-3 text-weight-medium text-caption`},Ce={key:0,class:`notion-url-wrap`},we={key:0,class:`notion-error text-caption q-px-md q-pb-xs text-red-5`},Te={key:1,class:`notion-valid text-caption q-px-md q-pb-xs text-green-4`},Ee={key:0,class:`sentry-url-wrap`},De={key:0,class:`sentry-error text-caption q-px-md q-pb-xs text-red-5`},Oe={key:1,class:`sentry-valid text-caption q-px-md q-pb-xs text-red-4`},ke={class:`card-name-wrap`},Ae={class:`card-textarea-wrap`},je={class:`manual-hint q-px-md q-py-sm text-caption text-grey-6`},Me={class:`q-pa-sm manual-section-body`},Ne={class:`row items-center q-gutter-sm q-mb-sm`},Pe={class:`col text-caption text-grey-4`},Fe={class:`q-pa-sm manual-section-body`},Ie={class:`row items-center q-gutter-sm q-mb-sm`},Le={class:`col text-caption text-grey-4`},Re={class:`card-bottom-bar row items-center wrap q-px-sm q-py-xs q-gutter-xs`},ze={class:`bottom-select-label row items-center no-wrap`},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:`row justify-center q-px-sm q-py-sm`},Ke={class:`create-hint text-center text-body2 q-mt-md text-grey-8`},D=fe(ne({__name:`CreatePage`,setup(ne){let fe=ce(),D=pe(),qe=le(),O=se(),{t:k}=oe(),Je=a([]),A=a(``),j=a(``),M=a(``),N=a(!1),P=a(`claude-opus-4-7`),F=a(`auto`),I=a(``),L=a(null),R=a(`feature`),z=a(!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`}],B=a(O.global.defaultPermissionMode||`plan`),V=a([]),H=a(!1),Xe=a(!1),Ze=f(()=>[...he.map(e=>({label:k(e.i18nLabelKey),value:e.value,description:k(e.i18nDescriptionKey)}))]);function U(e){let t=e.indexOf(`:`);return t>=0?e.slice(t+1).trim():e}let Qe=f(()=>[{label:U(k(`reasoning.auto`)),value:`auto`,description:k(`reasoning.autoDescription`)},{label:U(k(`reasoning.low`)),value:`low`,description:k(`reasoning.lowDescription`)},{label:U(k(`reasoning.medium`)),value:`medium`,description:k(`reasoning.mediumDescription`)},{label:U(k(`reasoning.high`)),value:`high`,description:k(`reasoning.highDescription`)},{label:U(k(`reasoning.xhigh`)),value:`xhigh`,description:k(`reasoning.xhighDescription`)},{label:U(k(`reasoning.max`)),value:`max`,description:k(`reasoning.maxDescription`)}]),W=f(()=>M.value.trim().startsWith(`https://www.notion.so/`)),G=a([]),K=a([]),q=a(``),J=a(``),Y=f(()=>!N.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(){N.value=!N.value,N.value||(M.value=``)}let X=a(!1),Z=a(``),Q=f(()=>/\/issues\/\d+/.test(Z.value.trim()));function it(){X.value=!X.value,X.value||(Z.value=``)}async function at(e){if(!e.trim()){V.value=[],L.value=null;return}H.value=!0;try{let t=await fetch(`/api/git/branches?path=${encodeURIComponent(e.trim())}`);if(!t.ok)throw Error(`HTTP ${t.status}`);let n=await t.json();V.value=n.local??n.branches??[],V.value.length>0&&!L.value&&(L.value=V.value[0]??null)}catch{V.value=[],L.value=null}finally{H.value=!1}}function ot(e){let t=O.getProjectByPath(e);t&&(t.defaultSourceBranch&&(L.value=t.defaultSourceBranch),t.defaultModel?P.value=t.defaultModel:O.global.defaultModel&&(P.value=O.global.defaultModel))}let $=null;t(I,e=>{$&&clearTimeout($),$=setTimeout(()=>{L.value=null,at(e),ot(e)},500)});function st(e,t){t(()=>{Je.value=O.projectPaths.filter(t=>t.toLowerCase().includes(e.toLowerCase()))})}r(()=>{O.fetchSettings()}),i(()=>{$&&clearTimeout($)});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 A.value.trim()?A.value.trim().substring(0,80):!N.value&&j.value.trim()&&(j.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 N.value&&!W.value?k(`createPage.validationNotionUrl`):X.value&&!Q.value?k(`createPage.sentryValidation`):!N.value&&!X.value&&!j.value.trim()?k(`createPage.validationDescription`):!N.value&&!X.value&&(!lt()||lt()===`workspace`)&&!A.value.trim()&&!j.value.trim()?k(`createPage.validationName`):I.value.trim()?L.value?null:k(`createPage.validationBranch`):k(`createPage.validationPath`)}async function ft(){let e=dt();if(e){D.notify({type:`negative`,message:e,position:`top`});return}Xe.value=!0;try{let e=lt(),t;t=N.value&&W.value?ut(M.value.trim()):e===`workspace`?`task-${Date.now()}`:ct(e);let n=`${R.value}/${t}`,r={name:e,projectPath:I.value.trim(),sourceBranch:L.value,workingBranch:n,model:P.value,reasoningEffort:F.value,...N.value&&W.value?{notionUrl:M.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}:{},...z.value?{skipSetupScript:!0}:{},...j.value.trim()?{description:j.value.trim()}:{},permissionMode:B.value},i=await qe.createWorkspace(r);ue().subscribe(i.id),qe.selectWorkspace(i.id),fe.push({name:`workspace`,params:{id:i.id}})}catch{D.notify({type:`negative`,message:k(`createPage.errorCreating`),position:`top`})}finally{Xe.value=!1}}return(t,r)=>(e(),c(ge,{class:`create-page flex flex-center column`},{default:o(()=>[h(`div`,_e,[h(`div`,ve,s(t.$t(`createPage.title`)),1),h(`div`,ye,[h(`div`,be,[h(`span`,xe,[u(v,{name:`auto_awesome`,size:`14px`,color:`indigo-4`}),h(`span`,Se,s(t.$t(`createPage.claudeCode`)),1)]),u(de),u(b,{flat:``,dense:``,"no-caps":``,size:`sm`,color:N.value?`green-4`:`grey-5`,class:`notion-toggle-btn text-caption rounded-borders`,onClick:rt},{default:o(()=>[u(v,{name:`description`,size:`14px`,class:`q-mr-xs`}),d(` `+s(N.value?t.$t(`createPage.notionEnabled`):t.$t(`createPage.importNotion`)),1)]),_:1},8,[`color`]),u(b,{flat:``,dense:``,"no-caps":``,size:`sm`,color:X.value?`red-4`:`grey-5`,class:`sentry-toggle-btn text-caption rounded-borders q-ml-sm`,onClick:it},{default:o(()=>[u(v,{name:`bug_report`,size:`14px`,class:`q-mr-xs`}),d(` `+s(X.value?t.$t(`createPage.sentryEnabled`):t.$t(`createPage.importSentry`)),1)]),_:1},8,[`color`])]),u(y,{color:`grey-9`}),u(ae,{name:`slide`},{default:o(()=>[N.value?(e(),p(`div`,Ce,[u(x,{modelValue:M.value,"onUpdate:modelValue":r[0]||=e=>M.value=e,borderless:``,dense:``,placeholder:t.$t(`createPage.notionPlaceholder`),class:`notion-url-input`,"input-class":`notion-url-input-inner`},{prepend:o(()=>[u(v,{name:`link`,size:`16px`,color:W.value?`green-4`:`grey-6`},null,8,[`color`])]),_:1},8,[`modelValue`,`placeholder`]),M.value.trim()&&!W.value?(e(),p(`div`,we,s(t.$t(`createPage.notionValidation`)),1)):l(``,!0),W.value?(e(),p(`div`,Te,s(t.$t(`createPage.notionAutoExtract`)),1)):l(``,!0)])):l(``,!0)]),_:1}),N.value?(e(),c(y,{key:0,color:`grey-9`})):l(``,!0),u(ae,{name:`slide`},{default:o(()=>[X.value?(e(),p(`div`,Ee,[u(x,{modelValue:Z.value,"onUpdate:modelValue":r[1]||=e=>Z.value=e,borderless:``,dense:``,placeholder:t.$t(`createPage.sentryPlaceholder`),class:`sentry-url-input`,"input-class":`sentry-url-input-inner`},{prepend:o(()=>[u(v,{name:`link`,size:`16px`,color:Q.value?`red-4`:`grey-6`},null,8,[`color`])]),_:1},8,[`modelValue`,`placeholder`]),Z.value.trim()&&!Q.value?(e(),p(`div`,De,s(t.$t(`createPage.sentryValidation`)),1)):l(``,!0),Q.value?(e(),p(`div`,Oe,s(t.$t(`createPage.sentryAutoExtract`)),1)):l(``,!0)])):l(``,!0)]),_:1}),X.value?(e(),c(y,{key:1,color:`grey-9`})):l(``,!0),h(`div`,ke,[u(x,{modelValue:A.value,"onUpdate:modelValue":r[2]||=e=>A.value=e,borderless:``,dense:``,placeholder:N.value&&W.value?t.$t(`createPage.workspaceName`):t.$t(`createPage.workspaceNamePlaceholder`),class:`name-input`,"input-class":`name-input-inner`},null,8,[`modelValue`,`placeholder`])]),u(y,{color:`grey-9`}),h(`div`,Ae,[u(x,{modelValue:j.value,"onUpdate:modelValue":r[3]||=e=>j.value=e,type:`textarea`,borderless:``,autogrow:``,rows:3,placeholder:N.value?t.$t(`createPage.instructions`):t.$t(`createPage.instructionsPlaceholder`),class:`create-textarea`,"input-class":`create-textarea-input`,onKeydown:[_(g(ft,[`ctrl`]),[`enter`]),_(g(ft,[`meta`]),[`enter`])]},null,8,[`modelValue`,`placeholder`,`onKeydown`])]),u(y,{color:`grey-9`}),Y.value?(e(),p(m,{key:2},[h(`div`,je,s(t.$t(`createPage.manualHint`)),1),u(me,{dark:``,dense:``,label:t.$t(`createPage.tasks`,{count:G.value.length}),"header-class":`text-grey-4 manual-expansion-header`,class:`manual-expansion q-mx-sm`},{default:o(()=>[h(`div`,Me,[h(`div`,Ne,[u(x,{modelValue:q.value,"onUpdate:modelValue":r[4]||=e=>q.value=e,dark:``,dense:``,borderless:``,placeholder:t.$t(`createPage.addTask`),class:`col manual-input`,"input-class":`manual-input-inner`,onKeydown:_(g($e,[`prevent`]),[`enter`])},null,8,[`modelValue`,`placeholder`,`onKeydown`]),u(b,{flat:``,dense:``,round:``,icon:`add`,color:`indigo-4`,disable:!q.value.trim(),onClick:$e},{default:o(()=>[u(S,null,{default:o(()=>[d(s(t.$t(`tooltip.addTask`)),1)]),_:1})]),_:1},8,[`disable`])]),(e(!0),p(m,null,n(G.value,(n,r)=>(e(),p(`div`,{key:`task-${r}`,class:`row items-center q-py-xs manual-item`},[h(`span`,Pe,s(n),1),u(b,{flat:``,dense:``,round:``,icon:`close`,size:`xs`,color:`grey-6`,onClick:e=>et(r)},{default:o(()=>[u(S,null,{default:o(()=>[d(s(t.$t(`tooltip.removeTask`)),1)]),_:1})]),_:1},8,[`onClick`])]))),128))])]),_:1},8,[`label`]),u(me,{dark:``,dense:``,label:t.$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:o(()=>[h(`div`,Fe,[h(`div`,Ie,[u(x,{modelValue:J.value,"onUpdate:modelValue":r[5]||=e=>J.value=e,dark:``,dense:``,borderless:``,placeholder:t.$t(`createPage.addCriterion`),class:`col manual-input`,"input-class":`manual-input-inner`,onKeydown:_(g(tt,[`prevent`]),[`enter`])},null,8,[`modelValue`,`placeholder`,`onKeydown`]),u(b,{flat:``,dense:``,round:``,icon:`add`,color:`indigo-4`,disable:!J.value.trim(),onClick:tt},{default:o(()=>[u(S,null,{default:o(()=>[d(s(t.$t(`tooltip.addCriterion`)),1)]),_:1})]),_:1},8,[`disable`])]),(e(!0),p(m,null,n(K.value,(n,r)=>(e(),p(`div`,{key:`crit-${r}`,class:`row items-center q-py-xs manual-item`},[h(`span`,Le,s(n),1),u(b,{flat:``,dense:``,round:``,icon:`close`,size:`xs`,color:`grey-6`,onClick:e=>nt(r)},{default:o(()=>[u(S,null,{default:o(()=>[d(s(t.$t(`tooltip.removeCriterion`)),1)]),_:1})]),_:1},8,[`onClick`])]))),128))])]),_:1},8,[`label`]),u(y,{color:`grey-9`})],64)):l(``,!0),h(`div`,Re,[u(E,{modelValue:P.value,"onUpdate:modelValue":r[6]||=e=>P.value=e,options:Ze.value,dense:``,borderless:``,class:`bottom-select rounded-borders model-select`,"hide-dropdown-icon":``,"emit-value":``,"map-options":``,"option-value":`value`,"option-label":`label`},{selected:o(()=>[h(`span`,ze,[d(s(Ze.value.find(e=>e.value===P.value)?.label??P.value)+` `,1),u(v,{name:`expand_more`,size:`12px`,color:`grey-5`})])]),option:o(({opt:e,itemProps:t})=>[u(w,ee(t,{class:`model-option`}),{default:o(()=>[u(T,null,{default:o(()=>[u(C,{class:`text-white`},{default:o(()=>[d(s(e.label),1)]),_:2},1024),u(C,{caption:``,class:`text-grey-5`},{default:o(()=>[d(s(e.description),1)]),_:2},1024)]),_:2},1024)]),_:2},1040)]),_:1},8,[`modelValue`,`options`]),u(E,{modelValue:F.value,"onUpdate:modelValue":r[7]||=e=>F.value=e,options:Qe.value,dense:``,borderless:``,class:`bottom-select rounded-borders`,"hide-dropdown-icon":``,"emit-value":``,"map-options":``,"option-value":`value`,"option-label":`label`},{selected:o(()=>[h(`span`,Be,[u(v,{name:`psychology`,size:`12px`,color:`grey-5`,class:`q-mr-xs`}),d(` `+s(Qe.value.find(e=>e.value===F.value)?.label??F.value)+` `,1),u(v,{name:`expand_more`,size:`12px`,color:`grey-5`})])]),option:o(({opt:e,itemProps:t})=>[u(w,re(ie(t)),{default:o(()=>[u(T,null,{default:o(()=>[u(C,{class:`text-white`},{default:o(()=>[d(s(e.label),1)]),_:2},1024),u(C,{caption:``,class:`text-grey-5`},{default:o(()=>[d(s(e.description),1)]),_:2},1024)]),_:2},1024)]),_:2},1040)]),_:1},8,[`modelValue`,`options`]),u(E,{modelValue:B.value,"onUpdate:modelValue":r[8]||=e=>B.value=e,options:[{label:t.$t(`permissionMode.plan`),value:`plan`},{label:t.$t(`permissionMode.autoAccept`),value:`auto-accept`}],dense:``,borderless:``,class:`bottom-select rounded-borders`,"hide-dropdown-icon":``,"emit-value":``,"map-options":``},{selected:o(()=>[h(`span`,Ve,[u(v,{name:B.value===`plan`?`visibility`:`flash_on`,size:`12px`,color:`amber-6`,class:`q-mr-xs`},null,8,[`name`]),d(` `+s(B.value===`plan`?t.$t(`permissionMode.plan`):t.$t(`permissionMode.autoAccept`))+` `,1),u(v,{name:`expand_more`,size:`12px`,color:`grey-5`})])]),_:1},8,[`modelValue`,`options`]),u(b,{flat:``,round:``,dense:``,size:`sm`,icon:z.value?`play_disabled`:`play_circle`,color:z.value?`orange-4`:`grey-6`,onClick:r[9]||=e=>z.value=!z.value},{default:o(()=>[u(S,null,{default:o(()=>[d(s(t.$t(`createPage.skipSetupScript`)),1)]),_:1})]),_:1},8,[`icon`,`color`]),u(de),u(E,{modelValue:I.value,"onUpdate:modelValue":r[10]||=e=>I.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:te(O).projectPaths.length>0?`menu`:`dialog`,onFilter:st,onInputValue:r[11]||=e=>{I.value=e}},{prepend:o(()=>[u(v,{name:`attach_file`,size:`12px`,color:`grey-5`})]),selected:o(()=>[h(`span`,He,s(I.value||t.$t(`createPage.projectPath`)),1)]),"no-option":o(()=>[u(w,null,{default:o(()=>[u(T,{class:`text-grey-6 text-caption`},{default:o(()=>[d(s(t.$t(`createPage.enterPath`)),1)]),_:1})]),_:1})]),_:1},8,[`modelValue`,`options`,`behavior`]),u(E,{modelValue:R.value,"onUpdate:modelValue":r[12]||=e=>R.value=e,options:Ye,"emit-value":``,"map-options":``,dense:``,borderless:``,class:`bottom-select rounded-borders branch-type-select`,"hide-dropdown-icon":``},{selected:o(()=>[h(`span`,Ue,[u(v,{name:`account_tree`,size:`12px`,color:`grey-5`,class:`q-mr-xs`}),d(` `+s(R.value)+`/ `,1),u(v,{name:`expand_more`,size:`12px`,color:`grey-5`})])]),default:o(()=>[u(S,null,{default:o(()=>[d(s(t.$t(`createPage.branchType`)),1)]),_:1})]),_:1},8,[`modelValue`]),u(E,{modelValue:L.value,"onUpdate:modelValue":r[13]||=e=>L.value=e,options:V.value,dense:``,borderless:``,class:`bottom-select rounded-borders branch-select`,"hide-dropdown-icon":``,loading:H.value,disable:!I.value.trim()||H.value},{selected:o(()=>[h(`span`,We,[u(v,{name:`call_split`,size:`12px`,color:`grey-5`,class:`q-mr-xs`}),d(` `+s(L.value??t.$t(`createPage.branch`))+` `,1),u(v,{name:`expand_more`,size:`12px`,color:`grey-5`})])]),"no-option":o(()=>[u(w,null,{default:o(()=>[u(T,{class:`text-grey-6 text-caption`},{default:o(()=>[d(s(I.value.trim()?t.$t(`createPage.noBranches`):t.$t(`createPage.enterPath`)),1)]),_:1})]),_:1})]),_:1},8,[`modelValue`,`options`,`loading`,`disable`])]),h(`div`,Ge,[u(b,{label:t.$t(`createPage.create`),"no-caps":``,unelevated:``,class:`create-btn text-weight-bold rounded-borders`,loading:Xe.value,onClick:ft},null,8,[`label`,`loading`])])]),h(`div`,Ke,s(N.value?t.$t(`createPage.notionExtractHint`):t.$t(`createPage.notionImportHint`)),1)])]),_:1}))}}),[[`__scopeId`,`data-v-ab47cf8d`]]);export{D as default};
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/editor.main-vZ6V2hrP.js","assets/index-Br4eMfSu.js","assets/runtime-core.esm-bundler-C3IgBgY5.js","assets/QSpinner-CliSLjf8.js","assets/pinia-C3JsrLkB.js","assets/QBtn-BsD8vrWq.js","assets/QToggle-B0HvuNEg.js","assets/private.use-form-BhKyDtO7.js","assets/use-dark-DnuCB6tC.js","assets/QDialog-CkbLS1If.js","assets/scroll-CLibRGI-.js","assets/focus-manager-DYbz9jFW.js","assets/symbols-CAg-nBkV.js","assets/i18n-CkN9X6lQ.js","assets/vue-i18n-eUDnMrPl.js","assets/settings-B69lIVX0.js","assets/index-eX_lKHSg.css","assets/editor.api-K7V5sl05.js","assets/editor-COGk2gAX.css","assets/monaco.contribution-CZ_PxrB6.js","assets/editor-CS3NEPi9.css"])))=>i.map(i=>d[i]);
2
- import{D as e,F as t,H as n,L as r,M as i,N as a,Q as o,S as s,U as c,W as l,_t as u,bt as d,d as f,f as p,g as m,h,j as g,k as ee,l as _,p as v,r as y,u as b,v as x,y as S,yt as C}from"./runtime-core.esm-bundler-C3IgBgY5.js";import{E as w,c as T,i as E,o as D}from"./QSpinner-CliSLjf8.js";import{a as O,i as k,r as A,t as j}from"./private.use-form-BhKyDtO7.js";import{c as M,s as N}from"./scroll-CLibRGI-.js";import{n as P}from"./vue-i18n-eUDnMrPl.js";import{n as F,t as I}from"./QBtn-BsD8vrWq.js";import{n as L,t as R}from"./use-dark-DnuCB6tC.js";import{h as z}from"./index-Br4eMfSu.js";import{t as B}from"./QSpinnerDots-Dp12eHrB.js";import{t as V}from"./QSpace-C5Ebr0vq.js";import{t as te}from"./QTooltip-kLXuUa_m.js";import{t as H}from"./_plugin-vue_export-helper-Cxt1D8wE.js";import{t as U}from"./QBadge-Bvh-hQ8K.js";import{r as W}from"./touch-ChrvzrnI.js";import{n as G,t as K}from"./TouchPan-CVMnGs0y.js";import{t as q}from"./format-Cyg8IgRi.js";var J=w({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 n=_(()=>{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()=>s(`div`,{class:n.value},T(t.default))}}),ne=w({name:`QBtnToggle`,props:{...A,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:n}){let r=_(()=>e.options.find(t=>t.value===e.modelValue)!==void 0),i=j(_(()=>({type:`hidden`,name:e.name,value:e.modelValue}))),a=_(()=>F(e)),o=_(()=>({rounded:e.rounded,dense:e.dense,...a.value})),c=_(()=>e.options.map((t,n)=>{let{attrs:r,value:i,slot:a,...s}=t;return{slot:a,props:{key:n,"aria-pressed":i===e.modelValue?`true`:`false`,...r,...s,...o.value,disable:e.disable===!0||s.disable===!0,color:i===e.modelValue?u(s,`toggleColor`):u(s,`color`),textColor:i===e.modelValue?u(s,`toggleTextColor`):u(s,`textColor`),noCaps:u(s,`noCaps`)===!0,noWrap:u(s,`noWrap`)===!0,size:u(s,`size`),padding:u(s,`padding`),ripple:u(s,`ripple`),stack:u(s,`stack`)===!0,stretch:u(s,`stretch`)===!0,onClick(e){l(i,t,e)}}}}));function l(t,r,i){e.readonly!==!0&&(e.modelValue===t?e.clearable===!0&&(n(`update:modelValue`,null,null),n(`clear`)):n(`update:modelValue`,t,r),n(`click`,i))}function u(t,n){return t[n]===void 0?e[n]:t[n]}function d(){let n=c.value.map(e=>s(I,e.props,e.slot===void 0?void 0:t[e.slot]));return e.name!==void 0&&e.disable!==!0&&r.value===!0&&i(n,`push`),D(t.default,n)}return()=>s(J,{class:`q-btn-toggle`,...a.value,rounded:e.rounded,stretch:e.stretch,glossy:e.glossy,spread:e.spread},d)}}),Y=w({props:[`store`,`barStyle`,`verticalBarStyle`,`horizontalBarStyle`],setup(e){return()=>[s(`div`,{class:e.store.scroll.vertical.barClass.value,style:[e.barStyle,e.verticalBarStyle],"aria-hidden":`true`,onMousedown:e.store.onVerticalMousedown}),s(`div`,{class:e.store.scroll.horizontal.barClass.value,style:[e.barStyle,e.horizontalBarStyle],"aria-hidden":`true`,onMousedown:e.store.onHorizontalMousedown}),l(s(`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),l(s(`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)]}}),X=[`vertical`,`horizontal`],Z={vertical:{offset:`offsetY`,scroll:`scrollTop`,dir:`down`,dist:`y`},horizontal:{offset:`offsetX`,scroll:`scrollLeft`,dir:`right`,dist:`x`}},Q={prevent:!0,mouse:!0,mouseAllDir:!0},$=e=>e>=250?50:Math.ceil(e/5),re=w({name:`QScrollArea`,props:{...L,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(t,{slots:r,emit:i}){let a=o(!1),c=o(!1),l=o(!1),u={vertical:o(0),horizontal:o(0)},d={vertical:{ref:o(null),position:o(0),size:o(0)},horizontal:{ref:o(null),position:o(0),size:o(0)}},{proxy:f}=S(),p=R(t,f.$q),m=null,h,v=o(null),y=_(()=>`q-scrollarea`+(p.value===!0?` q-scrollarea--dark`:``));Object.assign(u,{verticalInner:_(()=>u.vertical.value-t.verticalOffset[0]-t.verticalOffset[1]),horizontalInner:_(()=>u.horizontal.value-t.horizontalOffset[0]-t.horizontalOffset[1])}),d.vertical.percentage=_(()=>{let e=d.vertical.size.value-u.vertical.value;if(e<=0)return 0;let t=q(d.vertical.position.value/e,0,1);return Math.round(t*1e4)/1e4}),d.vertical.thumbHidden=_(()=>(t.visible===null?l.value:t.visible)!==!0&&a.value===!1&&c.value===!1||d.vertical.size.value<=u.vertical.value+1),d.vertical.thumbStart=_(()=>t.verticalOffset[0]+d.vertical.percentage.value*(u.verticalInner.value-d.vertical.thumbSize.value)),d.vertical.thumbSize=_(()=>Math.round(q(u.verticalInner.value*u.verticalInner.value/d.vertical.size.value,$(u.verticalInner.value),u.verticalInner.value))),d.vertical.style=_(()=>({...t.thumbStyle,...t.verticalThumbStyle,top:`${d.vertical.thumbStart.value}px`,height:`${d.vertical.thumbSize.value}px`,right:`${t.horizontalOffset[1]}px`})),d.vertical.thumbClass=_(()=>`q-scrollarea__thumb q-scrollarea__thumb--v absolute-right`+(d.vertical.thumbHidden.value===!0?` q-scrollarea__thumb--invisible`:``)),d.vertical.barClass=_(()=>`q-scrollarea__bar q-scrollarea__bar--v absolute-right`+(d.vertical.thumbHidden.value===!0?` q-scrollarea__bar--invisible`:``)),d.horizontal.percentage=_(()=>{let e=d.horizontal.size.value-u.horizontal.value;if(e<=0)return 0;let t=q(Math.abs(d.horizontal.position.value)/e,0,1);return Math.round(t*1e4)/1e4}),d.horizontal.thumbHidden=_(()=>(t.visible===null?l.value:t.visible)!==!0&&a.value===!1&&c.value===!1||d.horizontal.size.value<=u.horizontal.value+1),d.horizontal.thumbStart=_(()=>t.horizontalOffset[0]+d.horizontal.percentage.value*(u.horizontalInner.value-d.horizontal.thumbSize.value)),d.horizontal.thumbSize=_(()=>Math.round(q(u.horizontalInner.value*u.horizontalInner.value/d.horizontal.size.value,$(u.horizontalInner.value),u.horizontalInner.value))),d.horizontal.style=_(()=>({...t.thumbStyle,...t.horizontalThumbStyle,[f.$q.lang.rtl===!0?`right`:`left`]:`${d.horizontal.thumbStart.value}px`,width:`${d.horizontal.thumbSize.value}px`,bottom:`${t.verticalOffset[1]}px`})),d.horizontal.thumbClass=_(()=>`q-scrollarea__thumb q-scrollarea__thumb--h absolute-bottom`+(d.horizontal.thumbHidden.value===!0?` q-scrollarea__thumb--invisible`:``)),d.horizontal.barClass=_(()=>`q-scrollarea__bar q-scrollarea__bar--h absolute-bottom`+(d.horizontal.thumbHidden.value===!0?` q-scrollarea__bar--invisible`:``));let b=_(()=>d.vertical.thumbHidden.value===!0&&d.horizontal.thumbHidden.value===!0?t.contentStyle:t.contentActiveStyle);function x(){let e={};return X.forEach(t=>{let n=d[t];Object.assign(e,{[t+`Position`]:n.position.value,[t+`Percentage`]:n.percentage.value,[t+`Size`]:n.size.value,[t+`ContainerSize`]:u[t].value,[t+`ContainerInnerSize`]:u[t+`Inner`].value})}),e}let C=O(()=>{let e=x();e.ref=f,i(`scroll`,e)},0);function w(e,t,n){if(X.includes(e)===!1){console.error(`[QScrollArea]: wrong first param of setScrollPosition (vertical/horizontal)`);return}(e===`vertical`?M:N)(v.value,t,n)}function T({height:e,width:t}){let n=!1;u.vertical.value!==e&&(u.vertical.value=e,n=!0),u.horizontal.value!==t&&(u.horizontal.value=t,n=!0),n===!0&&P()}function E({position:e}){let t=!1;d.vertical.position.value!==e.top&&(d.vertical.position.value=e.top,t=!0),d.horizontal.position.value!==e.left&&(d.horizontal.position.value=e.left,t=!0),t===!0&&P()}function k({height:e,width:t}){d.horizontal.size.value!==t&&(d.horizontal.size.value=t,P()),d.vertical.size.value!==e&&(d.vertical.size.value=e,P())}function A(e,t){let n=d[t];if(e.isFirst===!0){if(n.thumbHidden.value===!0)return;h=n.position.value,c.value=!0}else if(c.value!==!0)return;e.isFinal===!0&&(c.value=!1);let r=Z[t],i=(n.size.value-u[t].value)/(u[t+`Inner`].value-n.thumbSize.value),a=e.distance[r.dist];F(h+(e.direction===r.dir?1:-1)*a*i,t)}function j(e,n){let r=d[n];if(r.thumbHidden.value!==!0){let i=n===`vertical`?t.verticalOffset[0]:t.horizontalOffset[0],a=e[Z[n].offset]-i,o=r.thumbStart.value-i;(a<o||a>o+r.thumbSize.value)&&F(q((a-r.thumbSize.value/2)/(u[n+`Inner`].value-r.thumbSize.value),0,1)*Math.max(0,r.size.value-u[n].value),n),r.ref.value!==null&&r.ref.value.dispatchEvent(new MouseEvent(e.type,e))}}function P(){a.value=!0,m!==null&&clearTimeout(m),m=setTimeout(()=>{m=null,a.value=!1},t.delay),t.onScroll!==void 0&&C()}function F(e,t){v.value[Z[t].scroll]=e}let I=null;function L(){I!==null&&clearTimeout(I),I=setTimeout(()=>{I=null,l.value=!0},f.$q.platform.is.ios?50:0)}function z(){I!==null&&(clearTimeout(I),I=null),l.value=!1}let B=null;n(()=>f.$q.lang.rtl,e=>{v.value!==null&&N(v.value,Math.abs(d.horizontal.position.value)*(e===!0?-1:1))}),g(()=>{B={top:d.vertical.position.value,left:d.horizontal.position.value}}),e(()=>{if(B===null)return;let e=v.value;e!==null&&(N(e,B.left),M(e,B.top))}),ee(C.cancel),Object.assign(f,{getScrollTarget:()=>v.value,getScroll:x,getScrollPosition:()=>({top:d.vertical.position.value,left:d.horizontal.position.value}),getScrollPercentage:()=>({top:d.vertical.percentage.value,left:d.horizontal.percentage.value}),setScrollPosition:w,setScrollPercentage(e,t,n){w(e,t*(d[e].size.value-u[e].value)*(e===`horizontal`&&f.$q.lang.rtl===!0?-1:1),n)}});let V={scroll:d,thumbVertDir:[[K,e=>{A(e,`vertical`)},void 0,{vertical:!0,...Q}]],thumbHorizDir:[[K,e=>{A(e,`horizontal`)},void 0,{horizontal:!0,...Q}]],onVerticalMousedown(e){j(e,`vertical`)},onHorizontalMousedown(e){j(e,`horizontal`)}};return()=>s(`div`,{class:y.value,onMouseenter:L,onMouseleave:z},[s(`div`,{ref:v,class:`q-scrollarea__container scroll relative-position fit hide-scrollbar`,tabindex:t.tabindex===void 0?void 0:t.tabindex},[s(`div`,{class:`q-scrollarea__content absolute`,style:b.value},D(r.default,[s(W,{debounce:0,onResize:k})])),s(G,{axis:`both`,onScroll:E})]),s(W,{debounce:0,onResize:T}),s(Y,{store:V,barStyle:t.barStyle,verticalBarStyle:t.verticalBarStyle,horizontalBarStyle:t.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=H(x({__name:`DiffViewer`,props:{workspaceId:{}},emits:[`close`,`sendToChat`],setup(e,{emit:s}){let l=e,g=s,{t:ee}=P(),x=o([]),S=o(``),w=o(``),T=o(null),D=o(!1),O=o(!1),A=o(null),j=o(`side`),M=o(new Set),N=null,F=null,L=[];function R(e){let t=0;for(let n of e)n.isDir?t+=R(n.children):t++;return t}let H=_(()=>{let e=[];for(let t of x.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}),W=_(()=>{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:R(i.children)}),M.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(H.value,0),e});function G(e){M.value.has(e)?M.value.delete(e):M.value.add(e)}async function K(){D.value=!0;try{let e=await fetch(`/api/workspaces/${l.workspaceId}/diff`);if(!e.ok)throw Error(`HTTP ${e.status}`);let t=await e.json();x.value=t.files,S.value=t.sourceBranch??``,w.value=t.workingBranch??``}catch(e){console.error(`Failed to load diff files:`,e)}finally{D.value=!1}}async function q(e){if(A.value){O.value=!0;try{N||(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`})}},N=await z(()=>import(`./editor.main-vZ6V2hrP.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20])),N.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/${l.workspaceId}/diff-file?path=${encodeURIComponent(e)}`);if(!t.ok)throw Error(`HTTP ${t.status}`);let n=await t.json(),r={ts:`typescript`,tsx:`typescript`,js:`javascript`,jsx:`javascript`,vue:`html`,html:`html`,css:`css`,scss:`scss`,json:`json`,md:`markdown`,yaml:`yaml`,yml:`yaml`,sh:`shell`,sql:`sql`,py:`python`,rs:`rust`,go:`go`}[e.split(`.`).pop()??``]??`plaintext`;if(F){for(let e of L)e.dispose();L=[];let e=F.getModel();F.dispose(),F=null,e?.original?.dispose(),e?.modified?.dispose()}let i=N.editor.createModel(n.original??``,r),a=N.editor.createModel(n.modified??``,r);F=N.editor.createDiffEditor(A.value,{theme:`kobo-dark`,readOnly:!0,renderSideBySide:j.value===`side`,automaticLayout:!0,minimap:{enabled:!1},scrollBeyondLastLine:!1,fontSize:12,lineHeight:18}),F.setModel({original:i,modified:a}),Y()}catch(e){console.error(`Failed to load file diff:`,e)}finally{O.value=!1}}}let J=o(!1);function Y(){if(!F)return;for(let e of L)e.dispose();L=[];let e=F.getModifiedEditor(),t=F.getOriginalEditor();for(let n of[e,t]){let e=n.onDidChangeCursorSelection(()=>{let e=n.getSelection();J.value=!!(e&&!e.isEmpty())});L.push(e)}}function X(){if(!(!F||!T.value))for(let e of[F.getModifiedEditor(),F.getOriginalEditor()]){let t=e.getSelection();if(t&&!t.isEmpty()){let n=e.getModel();if(!n)continue;let r=n.getValueInRange(t),i=e===F.getModifiedEditor()?`modified`:`original`;g(`sendToChat`,`\`\`\`\n// ${T.value} (${i}) L${t.startLineNumber}-L${t.endLineNumber}\n${r}\n\`\`\``);return}}}n(T,e=>{e&&q(e)}),n(j,()=>{F&&F.updateOptions({renderSideBySide:j.value===`side`})});function Z(e){switch(e){case`added`:return`add_circle`;case`deleted`:return`remove_circle`;case`renamed`:return`drive_file_rename_outline`;default:return`edit`}}function Q(e){switch(e){case`added`:return`#4ade80`;case`deleted`:return`#f87171`;case`renamed`:return`#60a5fa`;default:return`#f59e0b`}}return i(K),a(()=>{for(let e of L)e.dispose();if(L=[],F){let e=F.getModel();F.dispose(),F=null,e?.original?.dispose(),e?.modified?.dispose()}}),(e,n)=>(t(),v(`div`,ie,[b(`div`,ae,[m(E,{name:`difference`,size:`18px`,color:`indigo-4`,class:`q-mr-xs`}),b(`span`,oe,d(e.$t(`diff.title`)),1),m(U,{label:`${x.value.length}`,color:`grey-8`,"text-color":`grey-4`,class:`q-ml-sm`,style:{"font-size":`10px`}},null,8,[`label`]),S.value?(t(),v(`span`,se,[b(`span`,ce,d(S.value),1),m(E,{name:`arrow_forward`,size:`11px`,color:`grey-8`,class:`q-mx-xs`}),b(`span`,le,d(w.value),1)])):p(``,!0),T.value?(t(),v(`span`,ue,d(T.value),1)):p(``,!0),m(V),m(ne,{modelValue:j.value,"onUpdate:modelValue":n[0]||=e=>j.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`]),m(I,{flat:``,round:``,dense:``,icon:`close`,color:`grey-5`,size:`sm`,onClick:n[1]||=e=>g(`close`)},{default:c(()=>[m(te,null,{default:c(()=>[h(d(e.$t(`tooltip.closeDiffViewer`)),1)]),_:1})]),_:1})]),m(k,{dark:``}),b(`div`,de,[m(re,{class:`diff-file-list q-pa-xs`,style:{width:`280px`,"min-width":`200px`,height:`100%`,"border-right":`1px solid #2a2a4a`}},{default:c(()=>[D.value?(t(),f(B,{key:0,size:`24px`,color:`grey-6`,class:`q-ma-md`})):x.value.length===0?(t(),v(`div`,fe,d(e.$t(`diff.noChanges`)),1)):(t(!0),v(y,{key:2},r(W.value,e=>(t(),v(y,{key:e.path},[e.isDir?(t(),v(`div`,{key:0,class:`diff-dir-item cursor-pointer`,style:C({paddingLeft:`${e.depth*12+4}px`}),onClick:t=>G(e.path)},[m(E,{name:M.value.has(e.path)?`chevron_right`:`expand_more`,size:`14px`,color:`grey-6`},null,8,[`name`]),m(E,{name:`folder`,size:`13px`,color:`amber-7`,class:`q-mx-xs`}),b(`span`,me,d(e.name),1),m(U,{label:e.fileCount,color:`grey-9`,"text-color":`grey-5`,class:`q-ml-xs`,style:{"font-size":`9px`}},null,8,[`label`])],12,pe)):(t(),v(`div`,{key:1,class:u([`diff-file-item cursor-pointer`,{"diff-file-item--active":T.value===e.path}]),style:C({paddingLeft:`${e.depth*12+20}px`}),onClick:t=>T.value=e.path},[m(E,{name:Z(e.status),size:`11px`,style:C({color:Q(e.status)}),class:`q-mr-xs`},null,8,[`name`,`style`]),b(`span`,ge,d(e.name),1)],14,he))],64))),128))]),_:1}),b(`div`,_e,[O.value?(t(),v(`div`,ve,[m(B,{size:`32px`,color:`indigo-4`})])):T.value?p(``,!0):(t(),v(`div`,ye,d(e.$t(`diff.selectFile`)),1)),b(`div`,{ref_key:`editorContainer`,ref:A,class:`col`,style:{"min-height":`0`}},null,512),J.value?(t(),f(I,{key:2,"no-caps":``,dense:``,size:`sm`,color:`primary`,icon:`chat`,label:e.$t(`diff.addToChat`),class:`send-to-chat-btn`,onClick:X},null,8,[`label`])):p(``,!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-DC4ezIu0.js","assets/index-DoNZ_5QK.js","assets/runtime-core.esm-bundler-C3IgBgY5.js","assets/QSpinner-CliSLjf8.js","assets/pinia-C3JsrLkB.js","assets/QBtn-BsD8vrWq.js","assets/QToggle-B0HvuNEg.js","assets/private.use-form-BhKyDtO7.js","assets/use-dark-DnuCB6tC.js","assets/QDialog-CkbLS1If.js","assets/scroll-CLibRGI-.js","assets/focus-manager-DYbz9jFW.js","assets/symbols-CAg-nBkV.js","assets/i18n-B13zBh1H.js","assets/vue-i18n-eUDnMrPl.js","assets/settings-B69lIVX0.js","assets/index-eX_lKHSg.css","assets/editor.api-DirOkGGg.js","assets/editor-COGk2gAX.css","assets/monaco.contribution-D7JUf8DP.js","assets/editor-CS3NEPi9.css"])))=>i.map(i=>d[i]);
2
+ import{D as e,F as t,H as n,L as r,M as i,N as a,Q as o,S as s,U as c,W as l,_t as u,bt as d,d as f,f as p,g as m,h,j as g,k as ee,l as _,p as v,r as y,u as b,v as x,y as S,yt as C}from"./runtime-core.esm-bundler-C3IgBgY5.js";import{E as w,c as T,i as E,o as D}from"./QSpinner-CliSLjf8.js";import{a as O,i as k,r as A,t as j}from"./private.use-form-BhKyDtO7.js";import{c as M,s as N}from"./scroll-CLibRGI-.js";import{n as P}from"./vue-i18n-eUDnMrPl.js";import{n as F,t as I}from"./QBtn-BsD8vrWq.js";import{n as L,t as R}from"./use-dark-DnuCB6tC.js";import{h as z}from"./index-DoNZ_5QK.js";import{t as B}from"./QSpinnerDots-Dp12eHrB.js";import{t as V}from"./QSpace-C5Ebr0vq.js";import{t as te}from"./QTooltip-kLXuUa_m.js";import{t as H}from"./_plugin-vue_export-helper-Cxt1D8wE.js";import{t as U}from"./QBadge-Bvh-hQ8K.js";import{r as W}from"./touch-ChrvzrnI.js";import{n as G,t as K}from"./TouchPan-CVMnGs0y.js";import{t as q}from"./format-Cyg8IgRi.js";var J=w({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 n=_(()=>{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()=>s(`div`,{class:n.value},T(t.default))}}),ne=w({name:`QBtnToggle`,props:{...A,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:n}){let r=_(()=>e.options.find(t=>t.value===e.modelValue)!==void 0),i=j(_(()=>({type:`hidden`,name:e.name,value:e.modelValue}))),a=_(()=>F(e)),o=_(()=>({rounded:e.rounded,dense:e.dense,...a.value})),c=_(()=>e.options.map((t,n)=>{let{attrs:r,value:i,slot:a,...s}=t;return{slot:a,props:{key:n,"aria-pressed":i===e.modelValue?`true`:`false`,...r,...s,...o.value,disable:e.disable===!0||s.disable===!0,color:i===e.modelValue?u(s,`toggleColor`):u(s,`color`),textColor:i===e.modelValue?u(s,`toggleTextColor`):u(s,`textColor`),noCaps:u(s,`noCaps`)===!0,noWrap:u(s,`noWrap`)===!0,size:u(s,`size`),padding:u(s,`padding`),ripple:u(s,`ripple`),stack:u(s,`stack`)===!0,stretch:u(s,`stretch`)===!0,onClick(e){l(i,t,e)}}}}));function l(t,r,i){e.readonly!==!0&&(e.modelValue===t?e.clearable===!0&&(n(`update:modelValue`,null,null),n(`clear`)):n(`update:modelValue`,t,r),n(`click`,i))}function u(t,n){return t[n]===void 0?e[n]:t[n]}function d(){let n=c.value.map(e=>s(I,e.props,e.slot===void 0?void 0:t[e.slot]));return e.name!==void 0&&e.disable!==!0&&r.value===!0&&i(n,`push`),D(t.default,n)}return()=>s(J,{class:`q-btn-toggle`,...a.value,rounded:e.rounded,stretch:e.stretch,glossy:e.glossy,spread:e.spread},d)}}),Y=w({props:[`store`,`barStyle`,`verticalBarStyle`,`horizontalBarStyle`],setup(e){return()=>[s(`div`,{class:e.store.scroll.vertical.barClass.value,style:[e.barStyle,e.verticalBarStyle],"aria-hidden":`true`,onMousedown:e.store.onVerticalMousedown}),s(`div`,{class:e.store.scroll.horizontal.barClass.value,style:[e.barStyle,e.horizontalBarStyle],"aria-hidden":`true`,onMousedown:e.store.onHorizontalMousedown}),l(s(`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),l(s(`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)]}}),X=[`vertical`,`horizontal`],Z={vertical:{offset:`offsetY`,scroll:`scrollTop`,dir:`down`,dist:`y`},horizontal:{offset:`offsetX`,scroll:`scrollLeft`,dir:`right`,dist:`x`}},Q={prevent:!0,mouse:!0,mouseAllDir:!0},$=e=>e>=250?50:Math.ceil(e/5),re=w({name:`QScrollArea`,props:{...L,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(t,{slots:r,emit:i}){let a=o(!1),c=o(!1),l=o(!1),u={vertical:o(0),horizontal:o(0)},d={vertical:{ref:o(null),position:o(0),size:o(0)},horizontal:{ref:o(null),position:o(0),size:o(0)}},{proxy:f}=S(),p=R(t,f.$q),m=null,h,v=o(null),y=_(()=>`q-scrollarea`+(p.value===!0?` q-scrollarea--dark`:``));Object.assign(u,{verticalInner:_(()=>u.vertical.value-t.verticalOffset[0]-t.verticalOffset[1]),horizontalInner:_(()=>u.horizontal.value-t.horizontalOffset[0]-t.horizontalOffset[1])}),d.vertical.percentage=_(()=>{let e=d.vertical.size.value-u.vertical.value;if(e<=0)return 0;let t=q(d.vertical.position.value/e,0,1);return Math.round(t*1e4)/1e4}),d.vertical.thumbHidden=_(()=>(t.visible===null?l.value:t.visible)!==!0&&a.value===!1&&c.value===!1||d.vertical.size.value<=u.vertical.value+1),d.vertical.thumbStart=_(()=>t.verticalOffset[0]+d.vertical.percentage.value*(u.verticalInner.value-d.vertical.thumbSize.value)),d.vertical.thumbSize=_(()=>Math.round(q(u.verticalInner.value*u.verticalInner.value/d.vertical.size.value,$(u.verticalInner.value),u.verticalInner.value))),d.vertical.style=_(()=>({...t.thumbStyle,...t.verticalThumbStyle,top:`${d.vertical.thumbStart.value}px`,height:`${d.vertical.thumbSize.value}px`,right:`${t.horizontalOffset[1]}px`})),d.vertical.thumbClass=_(()=>`q-scrollarea__thumb q-scrollarea__thumb--v absolute-right`+(d.vertical.thumbHidden.value===!0?` q-scrollarea__thumb--invisible`:``)),d.vertical.barClass=_(()=>`q-scrollarea__bar q-scrollarea__bar--v absolute-right`+(d.vertical.thumbHidden.value===!0?` q-scrollarea__bar--invisible`:``)),d.horizontal.percentage=_(()=>{let e=d.horizontal.size.value-u.horizontal.value;if(e<=0)return 0;let t=q(Math.abs(d.horizontal.position.value)/e,0,1);return Math.round(t*1e4)/1e4}),d.horizontal.thumbHidden=_(()=>(t.visible===null?l.value:t.visible)!==!0&&a.value===!1&&c.value===!1||d.horizontal.size.value<=u.horizontal.value+1),d.horizontal.thumbStart=_(()=>t.horizontalOffset[0]+d.horizontal.percentage.value*(u.horizontalInner.value-d.horizontal.thumbSize.value)),d.horizontal.thumbSize=_(()=>Math.round(q(u.horizontalInner.value*u.horizontalInner.value/d.horizontal.size.value,$(u.horizontalInner.value),u.horizontalInner.value))),d.horizontal.style=_(()=>({...t.thumbStyle,...t.horizontalThumbStyle,[f.$q.lang.rtl===!0?`right`:`left`]:`${d.horizontal.thumbStart.value}px`,width:`${d.horizontal.thumbSize.value}px`,bottom:`${t.verticalOffset[1]}px`})),d.horizontal.thumbClass=_(()=>`q-scrollarea__thumb q-scrollarea__thumb--h absolute-bottom`+(d.horizontal.thumbHidden.value===!0?` q-scrollarea__thumb--invisible`:``)),d.horizontal.barClass=_(()=>`q-scrollarea__bar q-scrollarea__bar--h absolute-bottom`+(d.horizontal.thumbHidden.value===!0?` q-scrollarea__bar--invisible`:``));let b=_(()=>d.vertical.thumbHidden.value===!0&&d.horizontal.thumbHidden.value===!0?t.contentStyle:t.contentActiveStyle);function x(){let e={};return X.forEach(t=>{let n=d[t];Object.assign(e,{[t+`Position`]:n.position.value,[t+`Percentage`]:n.percentage.value,[t+`Size`]:n.size.value,[t+`ContainerSize`]:u[t].value,[t+`ContainerInnerSize`]:u[t+`Inner`].value})}),e}let C=O(()=>{let e=x();e.ref=f,i(`scroll`,e)},0);function w(e,t,n){if(X.includes(e)===!1){console.error(`[QScrollArea]: wrong first param of setScrollPosition (vertical/horizontal)`);return}(e===`vertical`?M:N)(v.value,t,n)}function T({height:e,width:t}){let n=!1;u.vertical.value!==e&&(u.vertical.value=e,n=!0),u.horizontal.value!==t&&(u.horizontal.value=t,n=!0),n===!0&&P()}function E({position:e}){let t=!1;d.vertical.position.value!==e.top&&(d.vertical.position.value=e.top,t=!0),d.horizontal.position.value!==e.left&&(d.horizontal.position.value=e.left,t=!0),t===!0&&P()}function k({height:e,width:t}){d.horizontal.size.value!==t&&(d.horizontal.size.value=t,P()),d.vertical.size.value!==e&&(d.vertical.size.value=e,P())}function A(e,t){let n=d[t];if(e.isFirst===!0){if(n.thumbHidden.value===!0)return;h=n.position.value,c.value=!0}else if(c.value!==!0)return;e.isFinal===!0&&(c.value=!1);let r=Z[t],i=(n.size.value-u[t].value)/(u[t+`Inner`].value-n.thumbSize.value),a=e.distance[r.dist];F(h+(e.direction===r.dir?1:-1)*a*i,t)}function j(e,n){let r=d[n];if(r.thumbHidden.value!==!0){let i=n===`vertical`?t.verticalOffset[0]:t.horizontalOffset[0],a=e[Z[n].offset]-i,o=r.thumbStart.value-i;(a<o||a>o+r.thumbSize.value)&&F(q((a-r.thumbSize.value/2)/(u[n+`Inner`].value-r.thumbSize.value),0,1)*Math.max(0,r.size.value-u[n].value),n),r.ref.value!==null&&r.ref.value.dispatchEvent(new MouseEvent(e.type,e))}}function P(){a.value=!0,m!==null&&clearTimeout(m),m=setTimeout(()=>{m=null,a.value=!1},t.delay),t.onScroll!==void 0&&C()}function F(e,t){v.value[Z[t].scroll]=e}let I=null;function L(){I!==null&&clearTimeout(I),I=setTimeout(()=>{I=null,l.value=!0},f.$q.platform.is.ios?50:0)}function z(){I!==null&&(clearTimeout(I),I=null),l.value=!1}let B=null;n(()=>f.$q.lang.rtl,e=>{v.value!==null&&N(v.value,Math.abs(d.horizontal.position.value)*(e===!0?-1:1))}),g(()=>{B={top:d.vertical.position.value,left:d.horizontal.position.value}}),e(()=>{if(B===null)return;let e=v.value;e!==null&&(N(e,B.left),M(e,B.top))}),ee(C.cancel),Object.assign(f,{getScrollTarget:()=>v.value,getScroll:x,getScrollPosition:()=>({top:d.vertical.position.value,left:d.horizontal.position.value}),getScrollPercentage:()=>({top:d.vertical.percentage.value,left:d.horizontal.percentage.value}),setScrollPosition:w,setScrollPercentage(e,t,n){w(e,t*(d[e].size.value-u[e].value)*(e===`horizontal`&&f.$q.lang.rtl===!0?-1:1),n)}});let V={scroll:d,thumbVertDir:[[K,e=>{A(e,`vertical`)},void 0,{vertical:!0,...Q}]],thumbHorizDir:[[K,e=>{A(e,`horizontal`)},void 0,{horizontal:!0,...Q}]],onVerticalMousedown(e){j(e,`vertical`)},onHorizontalMousedown(e){j(e,`horizontal`)}};return()=>s(`div`,{class:y.value,onMouseenter:L,onMouseleave:z},[s(`div`,{ref:v,class:`q-scrollarea__container scroll relative-position fit hide-scrollbar`,tabindex:t.tabindex===void 0?void 0:t.tabindex},[s(`div`,{class:`q-scrollarea__content absolute`,style:b.value},D(r.default,[s(W,{debounce:0,onResize:k})])),s(G,{axis:`both`,onScroll:E})]),s(W,{debounce:0,onResize:T}),s(Y,{store:V,barStyle:t.barStyle,verticalBarStyle:t.verticalBarStyle,horizontalBarStyle:t.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=H(x({__name:`DiffViewer`,props:{workspaceId:{}},emits:[`close`,`sendToChat`],setup(e,{emit:s}){let l=e,g=s,{t:ee}=P(),x=o([]),S=o(``),w=o(``),T=o(null),D=o(!1),O=o(!1),A=o(null),j=o(`side`),M=o(new Set),N=null,F=null,L=[];function R(e){let t=0;for(let n of e)n.isDir?t+=R(n.children):t++;return t}let H=_(()=>{let e=[];for(let t of x.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}),W=_(()=>{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:R(i.children)}),M.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(H.value,0),e});function G(e){M.value.has(e)?M.value.delete(e):M.value.add(e)}async function K(){D.value=!0;try{let e=await fetch(`/api/workspaces/${l.workspaceId}/diff`);if(!e.ok)throw Error(`HTTP ${e.status}`);let t=await e.json();x.value=t.files,S.value=t.sourceBranch??``,w.value=t.workingBranch??``}catch(e){console.error(`Failed to load diff files:`,e)}finally{D.value=!1}}async function q(e){if(A.value){O.value=!0;try{N||(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`})}},N=await z(()=>import(`./editor.main-DC4ezIu0.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20])),N.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/${l.workspaceId}/diff-file?path=${encodeURIComponent(e)}`);if(!t.ok)throw Error(`HTTP ${t.status}`);let n=await t.json(),r={ts:`typescript`,tsx:`typescript`,js:`javascript`,jsx:`javascript`,vue:`html`,html:`html`,css:`css`,scss:`scss`,json:`json`,md:`markdown`,yaml:`yaml`,yml:`yaml`,sh:`shell`,sql:`sql`,py:`python`,rs:`rust`,go:`go`}[e.split(`.`).pop()??``]??`plaintext`;if(F){for(let e of L)e.dispose();L=[];let e=F.getModel();F.dispose(),F=null,e?.original?.dispose(),e?.modified?.dispose()}let i=N.editor.createModel(n.original??``,r),a=N.editor.createModel(n.modified??``,r);F=N.editor.createDiffEditor(A.value,{theme:`kobo-dark`,readOnly:!0,renderSideBySide:j.value===`side`,automaticLayout:!0,minimap:{enabled:!1},scrollBeyondLastLine:!1,fontSize:12,lineHeight:18}),F.setModel({original:i,modified:a}),Y()}catch(e){console.error(`Failed to load file diff:`,e)}finally{O.value=!1}}}let J=o(!1);function Y(){if(!F)return;for(let e of L)e.dispose();L=[];let e=F.getModifiedEditor(),t=F.getOriginalEditor();for(let n of[e,t]){let e=n.onDidChangeCursorSelection(()=>{let e=n.getSelection();J.value=!!(e&&!e.isEmpty())});L.push(e)}}function X(){if(!(!F||!T.value))for(let e of[F.getModifiedEditor(),F.getOriginalEditor()]){let t=e.getSelection();if(t&&!t.isEmpty()){let n=e.getModel();if(!n)continue;let r=n.getValueInRange(t),i=e===F.getModifiedEditor()?`modified`:`original`;g(`sendToChat`,`\`\`\`\n// ${T.value} (${i}) L${t.startLineNumber}-L${t.endLineNumber}\n${r}\n\`\`\``);return}}}n(T,e=>{e&&q(e)}),n(j,()=>{F&&F.updateOptions({renderSideBySide:j.value===`side`})});function Z(e){switch(e){case`added`:return`add_circle`;case`deleted`:return`remove_circle`;case`renamed`:return`drive_file_rename_outline`;default:return`edit`}}function Q(e){switch(e){case`added`:return`#4ade80`;case`deleted`:return`#f87171`;case`renamed`:return`#60a5fa`;default:return`#f59e0b`}}return i(K),a(()=>{for(let e of L)e.dispose();if(L=[],F){let e=F.getModel();F.dispose(),F=null,e?.original?.dispose(),e?.modified?.dispose()}}),(e,n)=>(t(),v(`div`,ie,[b(`div`,ae,[m(E,{name:`difference`,size:`18px`,color:`indigo-4`,class:`q-mr-xs`}),b(`span`,oe,d(e.$t(`diff.title`)),1),m(U,{label:`${x.value.length}`,color:`grey-8`,"text-color":`grey-4`,class:`q-ml-sm`,style:{"font-size":`10px`}},null,8,[`label`]),S.value?(t(),v(`span`,se,[b(`span`,ce,d(S.value),1),m(E,{name:`arrow_forward`,size:`11px`,color:`grey-8`,class:`q-mx-xs`}),b(`span`,le,d(w.value),1)])):p(``,!0),T.value?(t(),v(`span`,ue,d(T.value),1)):p(``,!0),m(V),m(ne,{modelValue:j.value,"onUpdate:modelValue":n[0]||=e=>j.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`]),m(I,{flat:``,round:``,dense:``,icon:`close`,color:`grey-5`,size:`sm`,onClick:n[1]||=e=>g(`close`)},{default:c(()=>[m(te,null,{default:c(()=>[h(d(e.$t(`tooltip.closeDiffViewer`)),1)]),_:1})]),_:1})]),m(k,{dark:``}),b(`div`,de,[m(re,{class:`diff-file-list q-pa-xs`,style:{width:`280px`,"min-width":`200px`,height:`100%`,"border-right":`1px solid #2a2a4a`}},{default:c(()=>[D.value?(t(),f(B,{key:0,size:`24px`,color:`grey-6`,class:`q-ma-md`})):x.value.length===0?(t(),v(`div`,fe,d(e.$t(`diff.noChanges`)),1)):(t(!0),v(y,{key:2},r(W.value,e=>(t(),v(y,{key:e.path},[e.isDir?(t(),v(`div`,{key:0,class:`diff-dir-item cursor-pointer`,style:C({paddingLeft:`${e.depth*12+4}px`}),onClick:t=>G(e.path)},[m(E,{name:M.value.has(e.path)?`chevron_right`:`expand_more`,size:`14px`,color:`grey-6`},null,8,[`name`]),m(E,{name:`folder`,size:`13px`,color:`amber-7`,class:`q-mx-xs`}),b(`span`,me,d(e.name),1),m(U,{label:e.fileCount,color:`grey-9`,"text-color":`grey-5`,class:`q-ml-xs`,style:{"font-size":`9px`}},null,8,[`label`])],12,pe)):(t(),v(`div`,{key:1,class:u([`diff-file-item cursor-pointer`,{"diff-file-item--active":T.value===e.path}]),style:C({paddingLeft:`${e.depth*12+20}px`}),onClick:t=>T.value=e.path},[m(E,{name:Z(e.status),size:`11px`,style:C({color:Q(e.status)}),class:`q-mr-xs`},null,8,[`name`,`style`]),b(`span`,ge,d(e.name),1)],14,he))],64))),128))]),_:1}),b(`div`,_e,[O.value?(t(),v(`div`,ve,[m(B,{size:`32px`,color:`indigo-4`})])):T.value?p(``,!0):(t(),v(`div`,ye,d(e.$t(`diff.selectFile`)),1)),b(`div`,{ref_key:`editorContainer`,ref:A,class:`col`,style:{"min-height":`0`}},null,512),J.value?(t(),f(I,{key:2,"no-caps":``,dense:``,size:`sm`,color:`primary`,icon:`chat`,label:e.$t(`diff.addToChat`),class:`send-to-chat-btn`,onClick:X},null,8,[`label`])):p(``,!0)])])]))}}),[[`__scopeId`,`data-v-4ed3860e`]]);export{be as default};
@@ -0,0 +1 @@
1
+ import{F as e,L as t,M as n,Q as r,U as i,_t as ee,bt as a,d as o,f as s,g as c,l,p as u,r as te,rt as ne,u as d,v as re}from"./runtime-core.esm-bundler-C3IgBgY5.js";import{i as f}from"./QSpinner-CliSLjf8.js";import{t as p}from"./QBtn-BsD8vrWq.js";import{_ as m,m as h,p as g}from"./index-DoNZ_5QK.js";import{t as _}from"./QSpace-C5Ebr0vq.js";import{n as ie,r as ae,t as oe}from"./use-quasar-DBoizHBW.js";import{t as v}from"./QList-D80ms7bw.js";import{t as y}from"./QPage-BKY2-sf-.js";var b={class:`row items-center q-mb-md`},x={class:`text-h6 q-ml-sm`},S={key:0,class:`text-grey-6 text-center q-pa-lg`},C={key:1,class:`column q-gutter-md`},w={class:`text-subtitle2 q-mb-sm`},T={class:`text-caption text-grey-6`},E={class:`text-body2`},D={class:`row items-center`},O={class:`text-subtitle2`},k={class:`row q-col-gutter-md q-mt-xs`},A={class:`col`},j={class:`text-caption text-grey-6`},M={class:`text-body2`},N={class:`col-auto`},P={class:`text-caption text-grey-6`},F={class:`text-body2`},I={class:`col-auto`},L={class:`text-caption text-grey-6`},R={class:`text-body2`},z={class:`row items-center`},B={class:`text-subtitle2`},V={key:0,class:`text-caption text-grey-5 q-mt-xs`},se={key:1,class:`text-caption text-negative q-mt-xs`},H={class:`row items-center`},U={class:`text-subtitle2`},W={class:`text-caption text-grey-6 q-mt-xs`},G={key:0,class:`q-mt-sm`},K={class:`text-caption text-negative q-mb-xs`},ce={class:`text-body2`},le={class:`text-caption text-grey-6`},ue={class:`row items-center`},de={class:`text-subtitle2`},fe={class:`text-subtitle2 q-mb-sm`},pe={class:`column q-gutter-xs`},me={class:`row items-center`},he={class:`q-ml-sm text-caption text-grey-6`},ge={class:`row items-center`},_e={class:`q-ml-sm text-caption text-grey-6`},ve={class:`row items-center`},ye={class:`q-ml-sm text-caption text-grey-6`},q=re({__name:`HealthPage`,setup(re){let q=oe(),be=m(),J=r(null),Y=r(!1);async function X(){Y.value=!0;try{let e=await fetch(`/api/health/report`);if(!e.ok)throw Error(`HTTP ${e.status}`);J.value=await e.json()}catch(e){q.notify({type:`negative`,message:String(e),position:`top`,timeout:4e3})}finally{Y.value=!1}}n(X);let xe=l(()=>{let e=J.value?.db.sizeBytes;return e==null?`—`:e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/1024/1024).toFixed(1)} MB`}),Z=l(()=>{let e=J.value;return e?e.db.schemaVersion===e.db.currentSchemaVersion:!1});function Q(e){return e?`check_circle`:`error`}function $(e){return e?`positive`:`negative`}return(n,r)=>(e(),o(y,{class:`q-pa-md`,style:{"max-width":`900px`,margin:`0 auto`}},{default:i(()=>[d(`div`,b,[c(p,{flat:``,dense:``,round:``,icon:`arrow_back`,onClick:r[0]||=e=>ne(be).back()}),d(`div`,x,a(n.$t(`health.title`)),1),c(_),c(p,{flat:``,dense:``,icon:`refresh`,loading:Y.value,label:n.$t(`common.refresh`),onClick:X},null,8,[`loading`,`label`])]),!J.value&&Y.value?(e(),u(`div`,S,a(n.$t(`common.loading`)),1)):J.value?(e(),u(`div`,C,[c(h,{dark:``,flat:``,bordered:``},{default:i(()=>[c(g,null,{default:i(()=>[d(`div`,w,a(n.$t(`health.envTitle`)),1),d(`div`,T,a(n.$t(`health.koboHome`)),1),d(`div`,E,a(J.value.koboHome),1)]),_:1})]),_:1}),c(h,{dark:``,flat:``,bordered:``},{default:i(()=>[c(g,null,{default:i(()=>[d(`div`,D,[d(`div`,O,a(n.$t(`health.dbTitle`)),1),c(_),c(f,{name:Q(Z.value),color:$(Z.value)},null,8,[`name`,`color`])]),d(`div`,k,[d(`div`,A,[d(`div`,j,a(n.$t(`health.dbPath`)),1),d(`div`,M,a(J.value.db.path),1)]),d(`div`,N,[d(`div`,P,a(n.$t(`health.dbSize`)),1),d(`div`,F,a(xe.value),1)]),d(`div`,I,[d(`div`,L,a(n.$t(`health.schemaVersion`)),1),d(`div`,R,a(J.value.db.schemaVersion)+` / `+a(J.value.db.currentSchemaVersion),1)])])]),_:1})]),_:1}),c(h,{dark:``,flat:``,bordered:``},{default:i(()=>[c(g,null,{default:i(()=>[d(`div`,z,[d(`div`,B,a(n.$t(`health.cliTitle`)),1),c(_),c(f,{name:Q(J.value.claudeCli.available),color:$(J.value.claudeCli.available)},null,8,[`name`,`color`])]),J.value.claudeCli.available?(e(),u(`div`,V,a(J.value.claudeCli.version),1)):(e(),u(`div`,se,a(n.$t(`health.cliMissing`)),1))]),_:1})]),_:1}),c(h,{dark:``,flat:``,bordered:``},{default:i(()=>[c(g,null,{default:i(()=>[d(`div`,H,[d(`div`,U,a(n.$t(`health.workspacesTitle`)),1),c(_),c(f,{name:Q(J.value.workspaces.worktreesMissing.length===0),color:$(J.value.workspaces.worktreesMissing.length===0)},null,8,[`name`,`color`])]),d(`div`,W,a(n.$t(`health.workspacesCount`,{total:J.value.workspaces.total,archived:J.value.workspaces.archived})),1),J.value.workspaces.worktreesMissing.length>0?(e(),u(`div`,G,[d(`div`,K,a(n.$t(`health.worktreesMissing`,{count:J.value.workspaces.worktreesMissing.length})),1),c(v,{dense:``,dark:``},{default:i(()=>[(e(!0),u(te,null,t(J.value.workspaces.worktreesMissing,t=>(e(),o(ie,{key:t.workspaceId},{default:i(()=>[c(ae,null,{default:i(()=>[d(`div`,ce,a(t.name),1),d(`div`,le,a(t.path),1)]),_:2},1024)]),_:2},1024))),128))]),_:1})])):s(``,!0)]),_:1})]),_:1}),c(h,{dark:``,flat:``,bordered:``},{default:i(()=>[c(g,null,{default:i(()=>[d(`div`,ue,[d(`div`,de,a(n.$t(`health.sessionsTitle`)),1),c(_),c(f,{name:Q(J.value.agentSessions.orphaned===0),color:$(J.value.agentSessions.orphaned===0)},null,8,[`name`,`color`])]),d(`div`,{class:ee([`text-caption q-mt-xs`,J.value.agentSessions.orphaned>0?`text-negative`:`text-grey-6`])},a(n.$t(`health.sessionsOrphaned`,{n:J.value.agentSessions.orphaned})),3)]),_:1})]),_:1}),c(h,{dark:``,flat:``,bordered:``},{default:i(()=>[c(g,null,{default:i(()=>[d(`div`,fe,a(n.$t(`health.integrationsTitle`)),1),d(`div`,pe,[d(`div`,me,[c(f,{name:Q(J.value.integrations.notion.configured),color:$(J.value.integrations.notion.configured),size:`sm`},null,8,[`name`,`color`]),r[1]||=d(`span`,{class:`q-ml-sm text-body2`},`Notion`,-1),d(`span`,he,a(J.value.integrations.notion.configured?n.$t(`health.integrationConfigured`):n.$t(`health.integrationMissing`)),1)]),d(`div`,ge,[c(f,{name:Q(J.value.integrations.sentry.configured),color:$(J.value.integrations.sentry.configured),size:`sm`},null,8,[`name`,`color`]),r[2]||=d(`span`,{class:`q-ml-sm text-body2`},`Sentry`,-1),d(`span`,_e,a(J.value.integrations.sentry.configured?n.$t(`health.integrationConfigured`):n.$t(`health.integrationMissing`)),1)]),d(`div`,ve,[c(f,{name:Q(J.value.integrations.editor.configured),color:$(J.value.integrations.editor.configured),size:`sm`},null,8,[`name`,`color`]),r[3]||=d(`span`,{class:`q-ml-sm text-body2`},`Editor`,-1),d(`span`,ye,a(J.value.integrations.editor.configured?n.$t(`health.integrationConfigured`):n.$t(`health.integrationMissing`)),1)])])]),_:1})]),_:1})])):s(``,!0)]),_:1}))}});export{q as default};
@@ -1 +1 @@
1
- .acceptance-item[data-v-63b144ad]{padding:2px 0}.acceptance-item[data-v-63b144ad]:hover{background-color:#ffffff08}.acceptance-item:hover .criterion-delete-btn[data-v-63b144ad]{opacity:1}.criterion-delete-btn[data-v-63b144ad]{opacity:0;transition:opacity .15s}.acceptance-title[data-v-63b144ad]{word-break:break-word;cursor:text;line-height:1.4}.text-strike[data-v-63b144ad]{opacity:.7;text-decoration:line-through}.criterion-input[data-v-63b144ad] .q-field__control{height:22px;min-height:22px;padding:0}.criterion-input[data-v-63b144ad] input{color:#e0e0e0;font-size:12px}.criterion-input[data-v-63b144ad] input::placeholder{color:#555}.criterion-add-row[data-v-63b144ad],.todo-item[data-v-4eddf754]{padding:2px 0}.todo-title[data-v-4eddf754]{word-break:break-word;line-height:1.4}.text-strike[data-v-4eddf754]{opacity:.7;text-decoration:line-through}.git-btn[data-v-54c55a94]{padding:2px 10px;font-size:11px}.notion-link[data-v-99e38dbd]{text-decoration:none;display:inline-flex}.notion-link[data-v-99e38dbd]:hover{text-decoration:underline}.task-item[data-v-99e38dbd]{padding:2px 0}.task-item[data-v-99e38dbd]:hover{background-color:#ffffff08}.task-item:hover .task-delete-btn[data-v-99e38dbd]{opacity:1}.task-delete-btn[data-v-99e38dbd]{opacity:0;transition:opacity .15s}.task-title[data-v-99e38dbd]{word-break:break-word;cursor:text;line-height:1.4}.text-strike[data-v-99e38dbd]{opacity:.7;text-decoration:line-through}.task-input[data-v-99e38dbd] .q-field__control{height:22px;min-height:22px;padding:0}.task-input[data-v-99e38dbd] input{color:#e0e0e0;font-size:12px}.task-input[data-v-99e38dbd] input::placeholder{color:#555}.task-add-row[data-v-99e38dbd]{padding:2px 0}.plan-content[data-v-442c2eef]{color:#d0d0d0;overflow-wrap:break-word;font-size:12px;line-height:1.6}.plan-content[data-v-442c2eef] h1{color:#e0e0e0;margin:16px 0 8px;font-size:16px}.plan-content[data-v-442c2eef] h2{color:#e0e0e0;margin:14px 0 6px;font-size:14px}.plan-content[data-v-442c2eef] h3{color:#e0e0e0;margin:12px 0 4px;font-size:13px}.plan-content[data-v-442c2eef] code{background:#1a1a2e;border-radius:3px;padding:1px 4px;font-family:Roboto Mono,monospace;font-size:11px}.plan-content[data-v-442c2eef] pre{background:#1a1a2e;border-radius:6px;padding:8px 12px;font-size:11px;overflow-x:auto}.plan-content[data-v-442c2eef] pre code{background:0 0;padding:0}.plan-content[data-v-442c2eef] ul,.plan-content[data-v-442c2eef] ol{padding-left:20px}.plan-content[data-v-442c2eef] li{margin-bottom:2px}.plan-content[data-v-442c2eef] input[type=checkbox]{pointer-events:none;margin-right:6px}.plan-content[data-v-442c2eef] table{border-collapse:collapse;width:100%;margin:8px 0;font-size:11px}.plan-content[data-v-442c2eef] th,.plan-content[data-v-442c2eef] td{text-align:left;border:1px solid #2a2a4a;padding:4px 8px}.plan-content[data-v-442c2eef] th{color:#e0e0e0;background:#1a1a2e}.plan-content[data-v-442c2eef] blockquote{color:#a0a0b0;border-left:3px solid #4a4a6a;margin:8px 0;padding:4px 12px}.plan-content[data-v-442c2eef] a{color:#818cf8}.plan-content[data-v-442c2eef] hr{border:none;border-top:1px solid #2a2a4a;margin:12px 0}.stat-group-label[data-v-61fd94e7]{text-transform:uppercase;letter-spacing:.05em;color:#888;font-size:10px;font-weight:600}.stat-row[data-v-61fd94e7]{justify-content:space-between;align-items:center;padding:2px 0;display:flex}.stat-label[data-v-61fd94e7]{color:#999;font-size:12px}.stat-value[data-v-61fd94e7]{color:#ddd;font-family:Roboto Mono,monospace;font-size:12px;font-weight:500}.stat-value-muted[data-v-61fd94e7]{color:#999;margin-left:4px;font-size:11px}.stat-subtext[data-v-61fd94e7]{color:#8a8aa8;font-size:11px}.usage-breakdown[data-v-61fd94e7]{background:#2a2a4f;border:1px solid #3b3b61;border-radius:999px;width:100%;height:8px;display:flex;overflow:hidden}.usage-breakdown-input[data-v-61fd94e7]{background:linear-gradient(90deg,#6d76ff 0%,#8f96ff 100%);height:100%}.usage-breakdown-output[data-v-61fd94e7]{background:linear-gradient(90deg,#7f6bff 0%,#a598ff 100%);height:100%}.stat-value-ellipsis[data-v-61fd94e7]{text-overflow:ellipsis;white-space:nowrap;max-width:140px;overflow:hidden}.stat-section[data-v-61fd94e7]{justify-content:space-between;align-items:center;display:flex}.subagents-panel[data-v-81ad2481]{overflow-y:auto}.subagent-item[data-v-81ad2481]{background:#1e1e3a;border:1px solid #2a2a4a}.xterm{cursor:text;-webkit-user-select:none;user-select:none;position:relative}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{z-index:5;position:absolute;top:0}.xterm .xterm-helper-textarea{opacity:0;z-index:-5;white-space:nowrap;resize:none;border:0;width:0;height:0;margin:0;padding:0;position:absolute;top:0;left:-9999em;overflow:hidden}.xterm .composition-view{color:#fff;white-space:nowrap;z-index:1;background:#000;display:none;position:absolute}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{cursor:default;background-color:#000;position:absolute;top:0;bottom:0;left:0;right:0;overflow-y:scroll}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;top:0;left:0}.xterm-char-measure-element{visibility:hidden;line-height:normal;display:inline-block;position:absolute;top:0;left:-9999em}.xterm.enable-mouse-events{cursor:default}.xterm.xterm-cursor-pointer,.xterm .xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility:not(.debug),.xterm .xterm-message{z-index:10;color:#0000;pointer-events:none;position:absolute;top:0;bottom:0;left:0;right:0}.xterm .xterm-accessibility-tree:not(.debug) ::-moz-selection{color:#0000}.xterm .xterm-accessibility-tree:not(.debug) ::selection{color:#0000}.xterm .xterm-accessibility-tree{-webkit-user-select:text;user-select:text;white-space:pre;font-family:monospace}.xterm .xterm-accessibility-tree>div{transform-origin:0;width:-moz-fit-content;width:fit-content}.xterm .live-region{width:1px;height:1px;position:absolute;left:-9999px;overflow:hidden}.xterm-dim{opacity:1!important}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{-webkit-text-decoration:underline double;text-decoration:underline double}.xterm-underline-3{-webkit-text-decoration:underline wavy;text-decoration:underline wavy}.xterm-underline-4{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.xterm-underline-5{-webkit-text-decoration:underline dashed;text-decoration:underline dashed}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:underline overline}.xterm-overline.xterm-underline-2{-webkit-text-decoration:overline double underline;-webkit-text-decoration:overline double underline;text-decoration:overline double underline}.xterm-overline.xterm-underline-3{-webkit-text-decoration:overline wavy underline;-webkit-text-decoration:overline wavy underline;text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{-webkit-text-decoration:overline dotted underline;-webkit-text-decoration:overline dotted underline;text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{-webkit-text-decoration:overline dashed underline;-webkit-text-decoration:overline dashed underline;text-decoration:overline dashed underline}.xterm-strikethrough{text-decoration:line-through}.xterm-screen .xterm-decoration-container .xterm-decoration{z-index:6;position:absolute}.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer{z-index:7}.xterm-decoration-overview-ruler{z-index:8;pointer-events:none;position:absolute;top:0;right:0}.xterm-decoration-top{z-index:2;position:relative}.xterm .xterm-scrollable-element>.scrollbar{cursor:default}.xterm .xterm-scrollable-element>.scrollbar>.scra{cursor:pointer;font-size:11px!important}.xterm .xterm-scrollable-element>.visible{opacity:1;z-index:11;background:0 0;transition:opacity .1s linear}.xterm .xterm-scrollable-element>.invisible{opacity:0;pointer-events:none}.xterm .xterm-scrollable-element>.invisible.fade{transition:opacity .8s linear}.xterm .xterm-scrollable-element>.shadow{display:none;position:absolute}.xterm .xterm-scrollable-element>.shadow.top{width:100%;height:3px;box-shadow:var(--vscode-scrollbar-shadow,#000) 0 6px 6px -6px inset;display:block;top:0;left:3px}.xterm .xterm-scrollable-element>.shadow.left{width:3px;height:100%;box-shadow:var(--vscode-scrollbar-shadow,#000) 6px 0 6px -6px inset;display:block;top:3px;left:0}.xterm .xterm-scrollable-element>.shadow.top-left-corner{width:3px;height:3px;display:block;top:0;left:0}.xterm .xterm-scrollable-element>.shadow.top.left{box-shadow:var(--vscode-scrollbar-shadow,#000) 6px 0 6px -6px inset}.log-content[data-v-9e03d2b2]{max-height:60vh;overflow-y:auto}.log-text[data-v-9e03d2b2]{color:#ccc;white-space:pre-wrap;word-break:break-all;background:#0d0d1a;margin:0;font-family:JetBrains Mono,Fira Code,monospace;font-size:11px}.dd-panel[data-v-20c5f4bd],.tools-panel[data-v-e0d46842]{min-height:48px}.workspace-list[data-v-d338c975]{background-color:#16162a;overflow-x:hidden}.wl-search[data-v-d338c975]{background-color:#224;padding:0 8px}.wl-search[data-v-d338c975] .q-field__control{height:32px}.wl-search[data-v-d338c975] input{color:#ccc;font-size:12px}.wl-group-header[data-v-d338c975]:hover{background-color:#ffffff08}.wl-project-group+.wl-project-group[data-v-d338c975]{margin-top:6px}.wl-project-label[data-v-d338c975]{align-items:center;padding-bottom:2px;font-size:11px;display:flex}.wl-item[data-v-d338c975]{background-color:#224;margin-bottom:4px;transition:background-color .15s;position:relative}.wl-item[data-v-d338c975]:last-child{margin-bottom:0}.wl-item[data-v-d338c975]:hover{background-color:#2a2a4a}.wl-item--selected[data-v-d338c975]{background-color:#2a2a4a;outline:1px solid #6c63ff66}.wl-item-action[data-v-d338c975]{position:absolute;top:4px;right:4px}.wl-item--archived .wl-item-action[data-v-d338c975]{opacity:0;transition:opacity .15s}.wl-item--archived:hover .wl-item-action[data-v-d338c975]{opacity:1}.wl-item-unarchive[data-v-d338c975]{right:28px}.wl-item-delete[data-v-d338c975]{right:4px}.wl-item--archived[data-v-d338c975]{opacity:.6;background-color:#1a1a30}.wl-item--archived[data-v-d338c975]:hover{opacity:.85}.wl-item--archived.wl-item--selected[data-v-d338c975]{opacity:1}.dd-dot[data-v-d338c975]{border-radius:50%;flex-shrink:0;width:6px;height:6px}.dd-dot--running[data-v-d338c975]{background-color:#22c55e;box-shadow:0 0 4px #22c55e80}.bg-dark[data-v-9626ba95]{background-color:#16162a!important;border-color:#2a2a4a!important}.resize-handle[data-v-9626ba95]{cursor:col-resize;z-index:10;width:4px;height:100%;transition:background-color .15s;position:absolute;top:0;right:-2px}.resize-handle[data-v-9626ba95]:hover,.resize-handle[data-v-9626ba95]:active{background-color:#6c63ff80}.vertical-resize-handle[data-v-9626ba95]{cursor:row-resize;background-color:#2a2a4a;height:4px;transition:background-color .15s}.vertical-resize-handle[data-v-9626ba95]:hover,.vertical-resize-handle[data-v-9626ba95]:active{background-color:#6c63ff80}
1
+ .acceptance-item[data-v-63b144ad]{padding:2px 0}.acceptance-item[data-v-63b144ad]:hover{background-color:#ffffff08}.acceptance-item:hover .criterion-delete-btn[data-v-63b144ad]{opacity:1}.criterion-delete-btn[data-v-63b144ad]{opacity:0;transition:opacity .15s}.acceptance-title[data-v-63b144ad]{word-break:break-word;cursor:text;line-height:1.4}.text-strike[data-v-63b144ad]{opacity:.7;text-decoration:line-through}.criterion-input[data-v-63b144ad] .q-field__control{height:22px;min-height:22px;padding:0}.criterion-input[data-v-63b144ad] input{color:#e0e0e0;font-size:12px}.criterion-input[data-v-63b144ad] input::placeholder{color:#555}.criterion-add-row[data-v-63b144ad],.todo-item[data-v-4eddf754]{padding:2px 0}.todo-title[data-v-4eddf754]{word-break:break-word;line-height:1.4}.text-strike[data-v-4eddf754]{opacity:.7;text-decoration:line-through}.git-btn[data-v-bd0c8440]{padding:2px 10px;font-size:11px}.notion-link[data-v-99e38dbd]{text-decoration:none;display:inline-flex}.notion-link[data-v-99e38dbd]:hover{text-decoration:underline}.task-item[data-v-99e38dbd]{padding:2px 0}.task-item[data-v-99e38dbd]:hover{background-color:#ffffff08}.task-item:hover .task-delete-btn[data-v-99e38dbd]{opacity:1}.task-delete-btn[data-v-99e38dbd]{opacity:0;transition:opacity .15s}.task-title[data-v-99e38dbd]{word-break:break-word;cursor:text;line-height:1.4}.text-strike[data-v-99e38dbd]{opacity:.7;text-decoration:line-through}.task-input[data-v-99e38dbd] .q-field__control{height:22px;min-height:22px;padding:0}.task-input[data-v-99e38dbd] input{color:#e0e0e0;font-size:12px}.task-input[data-v-99e38dbd] input::placeholder{color:#555}.task-add-row[data-v-99e38dbd]{padding:2px 0}.plan-content[data-v-442c2eef]{color:#d0d0d0;overflow-wrap:break-word;font-size:12px;line-height:1.6}.plan-content[data-v-442c2eef] h1{color:#e0e0e0;margin:16px 0 8px;font-size:16px}.plan-content[data-v-442c2eef] h2{color:#e0e0e0;margin:14px 0 6px;font-size:14px}.plan-content[data-v-442c2eef] h3{color:#e0e0e0;margin:12px 0 4px;font-size:13px}.plan-content[data-v-442c2eef] code{background:#1a1a2e;border-radius:3px;padding:1px 4px;font-family:Roboto Mono,monospace;font-size:11px}.plan-content[data-v-442c2eef] pre{background:#1a1a2e;border-radius:6px;padding:8px 12px;font-size:11px;overflow-x:auto}.plan-content[data-v-442c2eef] pre code{background:0 0;padding:0}.plan-content[data-v-442c2eef] ul,.plan-content[data-v-442c2eef] ol{padding-left:20px}.plan-content[data-v-442c2eef] li{margin-bottom:2px}.plan-content[data-v-442c2eef] input[type=checkbox]{pointer-events:none;margin-right:6px}.plan-content[data-v-442c2eef] table{border-collapse:collapse;width:100%;margin:8px 0;font-size:11px}.plan-content[data-v-442c2eef] th,.plan-content[data-v-442c2eef] td{text-align:left;border:1px solid #2a2a4a;padding:4px 8px}.plan-content[data-v-442c2eef] th{color:#e0e0e0;background:#1a1a2e}.plan-content[data-v-442c2eef] blockquote{color:#a0a0b0;border-left:3px solid #4a4a6a;margin:8px 0;padding:4px 12px}.plan-content[data-v-442c2eef] a{color:#818cf8}.plan-content[data-v-442c2eef] hr{border:none;border-top:1px solid #2a2a4a;margin:12px 0}.stat-group-label[data-v-61fd94e7]{text-transform:uppercase;letter-spacing:.05em;color:#888;font-size:10px;font-weight:600}.stat-row[data-v-61fd94e7]{justify-content:space-between;align-items:center;padding:2px 0;display:flex}.stat-label[data-v-61fd94e7]{color:#999;font-size:12px}.stat-value[data-v-61fd94e7]{color:#ddd;font-family:Roboto Mono,monospace;font-size:12px;font-weight:500}.stat-value-muted[data-v-61fd94e7]{color:#999;margin-left:4px;font-size:11px}.stat-subtext[data-v-61fd94e7]{color:#8a8aa8;font-size:11px}.usage-breakdown[data-v-61fd94e7]{background:#2a2a4f;border:1px solid #3b3b61;border-radius:999px;width:100%;height:8px;display:flex;overflow:hidden}.usage-breakdown-input[data-v-61fd94e7]{background:linear-gradient(90deg,#6d76ff 0%,#8f96ff 100%);height:100%}.usage-breakdown-output[data-v-61fd94e7]{background:linear-gradient(90deg,#7f6bff 0%,#a598ff 100%);height:100%}.stat-value-ellipsis[data-v-61fd94e7]{text-overflow:ellipsis;white-space:nowrap;max-width:140px;overflow:hidden}.stat-section[data-v-61fd94e7]{justify-content:space-between;align-items:center;display:flex}.subagents-panel[data-v-81ad2481]{overflow-y:auto}.subagent-item[data-v-81ad2481]{background:#1e1e3a;border:1px solid #2a2a4a}.xterm{cursor:text;-webkit-user-select:none;user-select:none;position:relative}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{z-index:5;position:absolute;top:0}.xterm .xterm-helper-textarea{opacity:0;z-index:-5;white-space:nowrap;resize:none;border:0;width:0;height:0;margin:0;padding:0;position:absolute;top:0;left:-9999em;overflow:hidden}.xterm .composition-view{color:#fff;white-space:nowrap;z-index:1;background:#000;display:none;position:absolute}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{cursor:default;background-color:#000;position:absolute;top:0;bottom:0;left:0;right:0;overflow-y:scroll}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;top:0;left:0}.xterm-char-measure-element{visibility:hidden;line-height:normal;display:inline-block;position:absolute;top:0;left:-9999em}.xterm.enable-mouse-events{cursor:default}.xterm.xterm-cursor-pointer,.xterm .xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility:not(.debug),.xterm .xterm-message{z-index:10;color:#0000;pointer-events:none;position:absolute;top:0;bottom:0;left:0;right:0}.xterm .xterm-accessibility-tree:not(.debug) ::-moz-selection{color:#0000}.xterm .xterm-accessibility-tree:not(.debug) ::selection{color:#0000}.xterm .xterm-accessibility-tree{-webkit-user-select:text;user-select:text;white-space:pre;font-family:monospace}.xterm .xterm-accessibility-tree>div{transform-origin:0;width:-moz-fit-content;width:fit-content}.xterm .live-region{width:1px;height:1px;position:absolute;left:-9999px;overflow:hidden}.xterm-dim{opacity:1!important}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{-webkit-text-decoration:underline double;text-decoration:underline double}.xterm-underline-3{-webkit-text-decoration:underline wavy;text-decoration:underline wavy}.xterm-underline-4{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.xterm-underline-5{-webkit-text-decoration:underline dashed;text-decoration:underline dashed}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:underline overline}.xterm-overline.xterm-underline-2{-webkit-text-decoration:overline double underline;-webkit-text-decoration:overline double underline;text-decoration:overline double underline}.xterm-overline.xterm-underline-3{-webkit-text-decoration:overline wavy underline;-webkit-text-decoration:overline wavy underline;text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{-webkit-text-decoration:overline dotted underline;-webkit-text-decoration:overline dotted underline;text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{-webkit-text-decoration:overline dashed underline;-webkit-text-decoration:overline dashed underline;text-decoration:overline dashed underline}.xterm-strikethrough{text-decoration:line-through}.xterm-screen .xterm-decoration-container .xterm-decoration{z-index:6;position:absolute}.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer{z-index:7}.xterm-decoration-overview-ruler{z-index:8;pointer-events:none;position:absolute;top:0;right:0}.xterm-decoration-top{z-index:2;position:relative}.xterm .xterm-scrollable-element>.scrollbar{cursor:default}.xterm .xterm-scrollable-element>.scrollbar>.scra{cursor:pointer;font-size:11px!important}.xterm .xterm-scrollable-element>.visible{opacity:1;z-index:11;background:0 0;transition:opacity .1s linear}.xterm .xterm-scrollable-element>.invisible{opacity:0;pointer-events:none}.xterm .xterm-scrollable-element>.invisible.fade{transition:opacity .8s linear}.xterm .xterm-scrollable-element>.shadow{display:none;position:absolute}.xterm .xterm-scrollable-element>.shadow.top{width:100%;height:3px;box-shadow:var(--vscode-scrollbar-shadow,#000) 0 6px 6px -6px inset;display:block;top:0;left:3px}.xterm .xterm-scrollable-element>.shadow.left{width:3px;height:100%;box-shadow:var(--vscode-scrollbar-shadow,#000) 6px 0 6px -6px inset;display:block;top:3px;left:0}.xterm .xterm-scrollable-element>.shadow.top-left-corner{width:3px;height:3px;display:block;top:0;left:0}.xterm .xterm-scrollable-element>.shadow.top.left{box-shadow:var(--vscode-scrollbar-shadow,#000) 6px 0 6px -6px inset}.log-content[data-v-9e03d2b2]{max-height:60vh;overflow-y:auto}.log-text[data-v-9e03d2b2]{color:#ccc;white-space:pre-wrap;word-break:break-all;background:#0d0d1a;margin:0;font-family:JetBrains Mono,Fira Code,monospace;font-size:11px}.dd-panel[data-v-20c5f4bd],.tools-panel[data-v-e0d46842]{min-height:48px}.workspace-list[data-v-d338c975]{background-color:#16162a;overflow-x:hidden}.wl-search[data-v-d338c975]{background-color:#224;padding:0 8px}.wl-search[data-v-d338c975] .q-field__control{height:32px}.wl-search[data-v-d338c975] input{color:#ccc;font-size:12px}.wl-group-header[data-v-d338c975]:hover{background-color:#ffffff08}.wl-project-group+.wl-project-group[data-v-d338c975]{margin-top:6px}.wl-project-label[data-v-d338c975]{align-items:center;padding-bottom:2px;font-size:11px;display:flex}.wl-item[data-v-d338c975]{background-color:#224;margin-bottom:4px;transition:background-color .15s;position:relative}.wl-item[data-v-d338c975]:last-child{margin-bottom:0}.wl-item[data-v-d338c975]:hover{background-color:#2a2a4a}.wl-item--selected[data-v-d338c975]{background-color:#2a2a4a;outline:1px solid #6c63ff66}.wl-item-action[data-v-d338c975]{position:absolute;top:4px;right:4px}.wl-item--archived .wl-item-action[data-v-d338c975]{opacity:0;transition:opacity .15s}.wl-item--archived:hover .wl-item-action[data-v-d338c975]{opacity:1}.wl-item-unarchive[data-v-d338c975]{right:28px}.wl-item-delete[data-v-d338c975]{right:4px}.wl-item--archived[data-v-d338c975]{opacity:.6;background-color:#1a1a30}.wl-item--archived[data-v-d338c975]:hover{opacity:.85}.wl-item--archived.wl-item--selected[data-v-d338c975]{opacity:1}.dd-dot[data-v-d338c975]{border-radius:50%;flex-shrink:0;width:6px;height:6px}.dd-dot--running[data-v-d338c975]{background-color:#22c55e;box-shadow:0 0 4px #22c55e80}.bg-dark[data-v-0ee91c5b]{background-color:#16162a!important;border-color:#2a2a4a!important}.resize-handle[data-v-0ee91c5b]{cursor:col-resize;z-index:10;width:4px;height:100%;transition:background-color .15s;position:absolute;top:0;right:-2px}.resize-handle[data-v-0ee91c5b]:hover,.resize-handle[data-v-0ee91c5b]:active{background-color:#6c63ff80}.resize-handle--right[data-v-0ee91c5b]{left:-2px;right:auto}.vertical-resize-handle[data-v-0ee91c5b]{cursor:row-resize;background-color:#2a2a4a;height:4px;transition:background-color .15s}.vertical-resize-handle[data-v-0ee91c5b]:hover,.vertical-resize-handle[data-v-0ee91c5b]:active{background-color:#6c63ff80}