@loicngr/kobo 1.11.10 → 1.11.11
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.
- package/CHANGELOG.md +4 -0
- package/dist/server/routes/workspaces.js +3 -1
- package/dist/server/services/skill-suite-prompts.js +72 -1
- package/dist/shared/skill-suite-prompts.js +12 -1
- package/package.json +1 -1
- package/src/client/dist/pwa/assets/{ActivityFeed-UEAexGjc.js → ActivityFeed-BNDQPIiW.js} +1 -1
- package/src/client/dist/pwa/assets/{ChangelogPage-XSYwu9XA.js → ChangelogPage-DWeiMCL1.js} +1 -1
- package/src/client/dist/pwa/assets/{ClosePopup-dpcrW9DC.js → ClosePopup-Bl8KdN_j.js} +1 -1
- package/src/client/dist/pwa/assets/{CreatePage-BK__rjvR.js → CreatePage-qCRXIoz-.js} +1 -1
- package/src/client/dist/pwa/assets/{DiffViewer-DnFN6Sc_.js → DiffViewer-BwfYKTny.js} +3 -3
- package/src/client/dist/pwa/assets/{HealthPage-DVrZfMI6.js → HealthPage-zm1qy4bo.js} +1 -1
- package/src/client/dist/pwa/assets/{MainLayout-D_3nFaCG.js → MainLayout-BDVUkruC.js} +2 -2
- package/src/client/dist/pwa/assets/{QBtnToggle-BgfN19l8.js → QBtnToggle-BKZW3k57.js} +1 -1
- package/src/client/dist/pwa/assets/{QChip-EQGYShN0.js → QChip-CMB-IbQd.js} +1 -1
- package/src/client/dist/pwa/assets/QSelect-DCm1FiOk.js +36 -0
- package/src/client/dist/pwa/assets/{QTooltip-HEIFh5w9.js → QTooltip-8fQLc_4N.js} +1 -1
- package/src/client/dist/pwa/assets/{SearchPage-1B5HOf90.js → SearchPage-B-prQgu3.js} +1 -1
- package/src/client/dist/pwa/assets/SettingsPage-BJZWZYPC.css +1 -0
- package/src/client/dist/pwa/assets/{SettingsPage-v8f4rrCt.js → SettingsPage-CbasGyLP.js} +3 -3
- package/src/client/dist/pwa/assets/{TouchPan-lynWXY69.js → TouchPan-CmmS3gg6.js} +1 -1
- package/src/client/dist/pwa/assets/{WorkspacePage-Vjzi8YnW.js → WorkspacePage-B9I2mQJE.js} +3 -3
- package/src/client/dist/pwa/assets/{cssMode-cg8iVI-i.js → cssMode-B4oUyX4f.js} +1 -1
- package/src/client/dist/pwa/assets/{documents-Dlx8yiSO.js → documents-UdlveYUp.js} +1 -1
- package/src/client/dist/pwa/assets/{editor.api-CfaJRkrX.js → editor.api-ByJzr33G.js} +1 -1
- package/src/client/dist/pwa/assets/{expand-template-D3LZldj1.js → expand-template-zfuUsWH3.js} +1 -1
- package/src/client/dist/pwa/assets/{freemarker2-B_8OIClK.js → freemarker2-DurjKE7N.js} +1 -1
- package/src/client/dist/pwa/assets/{handlebars-CaYi_uxU.js → handlebars-gwHbbDT2.js} +1 -1
- package/src/client/dist/pwa/assets/{html-BnCUDUl1.js → html-DDNV7Gkm.js} +1 -1
- package/src/client/dist/pwa/assets/{htmlMode-BZjKGnQF.js → htmlMode-BxdPTVhK.js} +1 -1
- package/src/client/dist/pwa/assets/i18n-Z1bkxUCG.js +1 -0
- package/src/client/dist/pwa/assets/{index-CoOsPyyG.js → index-M0ntkdkQ.js} +7 -7
- package/src/client/dist/pwa/assets/{javascript-DkSfoeHU.js → javascript-Dp0eAm2m.js} +1 -1
- package/src/client/dist/pwa/assets/{jsonMode-yKXxfx1V.js → jsonMode-DLllFEMT.js} +1 -1
- package/src/client/dist/pwa/assets/{kobo-commands-vn1IQxLn.js → kobo-commands-So0Do2g1.js} +1 -1
- package/src/client/dist/pwa/assets/{layout-CiQpugQB.js → layout-CfEpJmm_.js} +1 -1
- package/src/client/dist/pwa/assets/{liquid-Dlhysv3U.js → liquid-BVwIeblL.js} +1 -1
- package/src/client/dist/pwa/assets/{lspLanguageFeatures-CeYSQFUz.js → lspLanguageFeatures-CExl7Xgb.js} +1 -1
- package/src/client/dist/pwa/assets/{mdx-B8iME5NA.js → mdx-ydpr14Ec.js} +1 -1
- package/src/client/dist/pwa/assets/{network-auth-j2Drut6q.js → network-auth-CxxR2FZL.js} +1 -1
- package/src/client/dist/pwa/assets/{pending-diff-open-B4RYz7G_.js → pending-diff-open-BqHyeaCb.js} +1 -1
- package/src/client/dist/pwa/assets/{project-color-e3OdFi9X.js → project-color-Dl2gXBlN.js} +1 -1
- package/src/client/dist/pwa/assets/{python-CbFbC0ZR.js → python-BParijRW.js} +1 -1
- package/src/client/dist/pwa/assets/{razor-7c2NCdFI.js → razor-DmywR0-y.js} +1 -1
- package/src/client/dist/pwa/assets/{render-chat-markdown-Fer8kY38.js → render-chat-markdown-BQBEE7Bn.js} +1 -1
- package/src/client/dist/pwa/assets/{tsMode-BmShKjbx.js → tsMode-C51hBxK8.js} +1 -1
- package/src/client/dist/pwa/assets/{typescript-Dhu7Upbs.js → typescript-C9LzA9s6.js} +1 -1
- package/src/client/dist/pwa/assets/{use-onboarding-fe4sPCNf.js → use-onboarding--VIOMbMd.js} +1 -1
- package/src/client/dist/pwa/assets/{use-quasar-CeHlTrGg.js → use-quasar-B6Aitpct.js} +1 -1
- package/src/client/dist/pwa/assets/{vs-B-xsceNQ.js → vs-BJBy3q9a.js} +3 -3
- package/src/client/dist/pwa/assets/{workers-zVMTXVoC.js → workers-B89GKCYK.js} +1 -1
- package/src/client/dist/pwa/assets/{xml-D64wpCtR.js → xml-C2D1fXDa.js} +1 -1
- package/src/client/dist/pwa/assets/{yaml-CLSRKwfx.js → yaml-8QFrUEL6.js} +1 -1
- package/src/client/dist/pwa/index.html +1 -1
- package/src/client/dist/pwa/sw.js +1 -1
- package/src/client/dist/pwa/assets/QSelect-CtxxliRU.js +0 -36
- package/src/client/dist/pwa/assets/SettingsPage-BXiWr2ba.css +0 -1
- package/src/client/dist/pwa/assets/i18n-B6SDs7Lm.js +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,10 @@ All notable changes to Kōbō are documented here. The format is based on
|
|
|
4
4
|
[Keep a Changelog](https://keepachangelog.com/). Each release is an `## <version>`
|
|
5
5
|
section — the in-app "What's new" dialog reads this file.
|
|
6
6
|
|
|
7
|
+
## 1.11.11
|
|
8
|
+
|
|
9
|
+
- feat(settings): add ECC as a skill suite option (#27)
|
|
10
|
+
|
|
7
11
|
## 1.11.10
|
|
8
12
|
|
|
9
13
|
- docs: update setup guide
|
|
@@ -794,7 +794,9 @@ app.post('/', migrationGuard, async (c) => {
|
|
|
794
794
|
// active skill suite includes gstack, and only if the user has actually
|
|
795
795
|
// installed gstack locally (the binary may be absent — skip silently).
|
|
796
796
|
// Fast + idempotent; safe to run on every workspace boot.
|
|
797
|
-
if (globalSettings.skillSuite === 'gstack' ||
|
|
797
|
+
if (globalSettings.skillSuite === 'gstack' ||
|
|
798
|
+
globalSettings.skillSuite === 'superpowers+gstack' ||
|
|
799
|
+
globalSettings.skillSuite === 'superpowers+gstack+ecc') {
|
|
798
800
|
brainstormPrompt += `\n\nIMPORTANT (gstack): Before brainstorming, check whether \`~/.claude/skills/gstack/bin/gstack-brain-sync\` exists. If it does, run it with \`--once\` to load gstack learnings (project-specific patterns, pitfalls, and preferences from prior sessions) into memory. If the binary is missing (gstack not installed in this environment), skip silently and continue — do NOT install anything and do NOT mention the absence. Fast and idempotent when present.`;
|
|
799
801
|
}
|
|
800
802
|
if (body.autoLoop === true) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AGNOSTIC_AUTO_LOOP_GROOMING_INTRO, AGNOSTIC_AUTO_LOOP_REVIEW_GATE, AGNOSTIC_BRAINSTORMING_INSTRUCTION, AGNOSTIC_QA_PROMPT_TEMPLATE, AGNOSTIC_REVIEW_TEMPLATE, GROOMING_INTRO_COMBINED, GROOMING_INTRO_GSTACK, GROOMING_INTRO_SUPERPOWERS, } from '../../shared/skill-suite-prompts.js';
|
|
1
|
+
import { AGNOSTIC_AUTO_LOOP_GROOMING_INTRO, AGNOSTIC_AUTO_LOOP_REVIEW_GATE, AGNOSTIC_BRAINSTORMING_INSTRUCTION, AGNOSTIC_QA_PROMPT_TEMPLATE, AGNOSTIC_REVIEW_TEMPLATE, GROOMING_INTRO_ALL, GROOMING_INTRO_COMBINED, GROOMING_INTRO_ECC, GROOMING_INTRO_GSTACK, GROOMING_INTRO_SUPERPOWERS, } from '../../shared/skill-suite-prompts.js';
|
|
2
2
|
// Headers and body shared with the agnostic baseline. We reconstruct them
|
|
3
3
|
// locally here so the suite-specific text can sit between header and body
|
|
4
4
|
// in the same shape across all 3 suites.
|
|
@@ -73,6 +73,19 @@ For reproducible regression coverage that runs on every PR, prefer **Cypress** s
|
|
|
73
73
|
'3. If you need fine control (e.g. skip a step, run one in isolation), invoke the individual skills instead: `/plan-ceo-review`, `/plan-eng-review`, `/plan-design-review`, `/plan-devex-review`.\n' +
|
|
74
74
|
'4. Wait for explicit user approval on the final plan before announcing brainstorming is done.',
|
|
75
75
|
};
|
|
76
|
+
export const ECC_PROMPTS = {
|
|
77
|
+
reviewTemplate: REVIEW_HEADER +
|
|
78
|
+
'If a code-review skill is available (e.g. `ecc:code-review`, or dispatch a subagent via the Task tool with `subagent_type: "ecc:code-reviewer"`), invoke it to drive this review. Otherwise follow the steps below directly.\n\n' +
|
|
79
|
+
REVIEW_BODY,
|
|
80
|
+
autoLoopReviewGate: 'Code review gate — BEFORE marking the task done, dispatch an independent code-reviewer subagent via the Task tool with `subagent_type: "ecc:code-reviewer"` (or run the `ecc:code-review` / `ecc:quality-gate` skill if you prefer a driven workflow over a bare subagent). Brief the reviewer with: what you just implemented, the task title, and the commit SHA (via `git rev-parse HEAD`). Ask specifically whether the change matches the task scope, whether edge cases are handled, and whether the commit is clean.',
|
|
81
|
+
autoLoopGroomingIntro: GROOMING_INTRO_ECC,
|
|
82
|
+
qaPromptTemplate: 'QA pass for workspace "{{workspace_name}}" in project {{project_name}}.\n\nBranch: {{branch_name}}\nStaging URL: {{staging_url}}\n\nIf a QA-style skill is available in this environment (e.g. `ecc:browser-qa`, or dispatch a subagent via the Task tool with `subagent_type: "ecc:e2e-runner"`), use it to exercise the staging URL. Otherwise, fall back to manually scripting the smoke checks and recording your findings as a bug report.',
|
|
83
|
+
brainstormingInstruction: 'Brainstorm the implementation approach using the ECC pipeline:\n' +
|
|
84
|
+
'1. Run the `ecc:plan` skill (or dispatch a subagent via the Task tool with `subagent_type: "ecc:planner"`) — it expands the request into a full spec with features, sprints, and evaluation criteria before any code. Ask clarifying questions and wait for explicit user approval on the design before moving on.\n' +
|
|
85
|
+
'2. Use `ecc:tdd-workflow` to shape the approved design into a test-first implementation plan.\n' +
|
|
86
|
+
'3. If you encounter a bug or unexpected behaviour during exploration, dispatch a subagent via the Task tool with `subagent_type: "ecc:architect"` (or the relevant language-specific `ecc:*-reviewer` agent) rather than guessing.\n' +
|
|
87
|
+
"Do NOT skip the skills or rationalise around them — that's how the rigour gets lost.",
|
|
88
|
+
};
|
|
76
89
|
export const AGNOSTIC_PROMPTS = {
|
|
77
90
|
reviewTemplate: AGNOSTIC_REVIEW_TEMPLATE,
|
|
78
91
|
autoLoopReviewGate: AGNOSTIC_AUTO_LOOP_REVIEW_GATE,
|
|
@@ -132,6 +145,60 @@ For reproducible regression coverage that runs on every PR, prefer **Cypress** s
|
|
|
132
145
|
' - Apply any changes the reviews recommend before moving on.\n' +
|
|
133
146
|
'5. Wait for explicit user approval on the final reviewed plan before announcing brainstorming is done.',
|
|
134
147
|
};
|
|
148
|
+
// ── Triple combo: superpowers + gstack + ecc ─────────────────────────────────
|
|
149
|
+
// For users who install all three suites. Extends the two-suite COMBINED_PROMPTS
|
|
150
|
+
// "pick by intent" pattern with a third branch per field.
|
|
151
|
+
export const ALL_THREE_PROMPTS = {
|
|
152
|
+
reviewTemplate: REVIEW_HEADER +
|
|
153
|
+
'Three complementary review paths are available — pick by intent:\n' +
|
|
154
|
+
'- `/review` (gstack Staff Engineer) for tactical bug-hunting that finds issues passing CI but blowing up in production. Auto-fixes the obvious ones.\n' +
|
|
155
|
+
'- `superpowers:requesting-code-review` for principles-level critique — silent failures, test-design soundness, surface-area discipline.\n' +
|
|
156
|
+
"- `ecc:code-review` (or a Task-dispatched `ecc:code-reviewer` subagent) for ECC's structured multi-agent review pass.\n" +
|
|
157
|
+
'You can run more than one on the same diff if the change is large. If none is available, fall back to the manual checklist below.\n\n' +
|
|
158
|
+
REVIEW_BODY,
|
|
159
|
+
autoLoopReviewGate: 'Code review gate — BEFORE marking the task done, pick the appropriate review path (three are installed):\n' +
|
|
160
|
+
'- Default to `/review` (gstack Staff Engineer) for tactical code-level bugs and auto-fixes.\n' +
|
|
161
|
+
'- Use `superpowers:requesting-code-review` instead when the task introduces tests, refactors, or design decisions worth a principles-level critique.\n' +
|
|
162
|
+
"- Use a Task-dispatched `ecc:code-reviewer` subagent (or the `ecc:quality-gate` skill) when you want ECC's structured multi-agent pass.\n\n" +
|
|
163
|
+
'Brief the chosen reviewer with: what you just implemented, the task title, and the commit SHA (via `git rev-parse HEAD`). Ask specifically whether the change matches the task scope, whether edge cases are handled, and whether the commit is clean. If the reviewer auto-fixes minor issues, accept the fixes via an amend or fix-up commit, then re-run step 3 checks.',
|
|
164
|
+
autoLoopGroomingIntro: GROOMING_INTRO_ALL,
|
|
165
|
+
qaPromptTemplate: `QA pass for workspace "{{workspace_name}}" in project {{project_name}}.
|
|
166
|
+
|
|
167
|
+
Branch: {{branch_name}}
|
|
168
|
+
Staging URL: {{staging_url}}
|
|
169
|
+
|
|
170
|
+
Pick the right tool for the situation. gstack covers interactive QA, ECC covers structured/automated QA, superpowers covers low-level browser control as a fallback.
|
|
171
|
+
|
|
172
|
+
gstack QA toolkit (preferred for interactive QA):
|
|
173
|
+
- \`/browse\` — Headless navigation: URL → interactions → screenshots. Use for quick dogfooding a flow or sanity-checking a PR.
|
|
174
|
+
- \`/qa {{staging_url}}\` — Systematic QA with automatic bug fixing. Three tiers (invoke as \`/qa Quick\`, \`/qa Standard\`, or \`/qa Exhaustive\`):
|
|
175
|
+
- **Quick** — critical and high-severity bugs only.
|
|
176
|
+
- **Standard** — adds medium-severity bugs.
|
|
177
|
+
- **Exhaustive** — adds cosmetic issues.
|
|
178
|
+
- \`/qa-only {{staging_url}}\` — Same methodology as \`/qa\` but report only, no code changes.
|
|
179
|
+
- \`/design-review\` — Visual audit (consistency, spacing, hierarchy, AI slop). Commits atomic fixes with before/after screenshots.
|
|
180
|
+
|
|
181
|
+
ECC toolkit:
|
|
182
|
+
- \`ecc:browser-qa\` skill — structured browser-driven QA pass.
|
|
183
|
+
- Task-dispatched \`ecc:e2e-runner\` subagent — generates, maintains, and runs E2E tests; manages flaky-test quarantine and artifact capture.
|
|
184
|
+
|
|
185
|
+
Superpowers alternative (low-level browser control):
|
|
186
|
+
- \`superpowers-chrome:browsing\` — Direct Chrome DevTools Protocol control over an existing Chrome session: multi-tab management, form automation, content extraction. Use when you need fine-grained control beyond what \`/browse\` exposes.
|
|
187
|
+
|
|
188
|
+
For reproducible regression coverage that runs on every PR, prefer **Cypress** specs in \`test/cypress/\` instead of any interactive QA skill. Reserve the tools above for exploration, dogfooding, and one-shot visual debugging.`,
|
|
189
|
+
brainstormingInstruction: 'Brainstorm using all three suites — each plays to its strength:\n' +
|
|
190
|
+
'1. Early product framing: prefer gstack `/office-hours` for product-shaped work (six forcing questions + design doc), or `ecc:plan` (or `subagent_type: "ecc:planner"`) for ECC-style spec expansion (features, sprints, evaluation criteria). Fall back to `superpowers:brainstorming` for purely infra/refactor work where neither product lens applies.\n' +
|
|
191
|
+
'2. Plan construction — pick whichever fits the work better:\n' +
|
|
192
|
+
' - gstack `/autoplan` for the chained CEO/design/eng/DX pipeline (auto-detects which apply).\n' +
|
|
193
|
+
' - `superpowers:writing-plans` for a TDD-shaped multi-step plan that maps cleanly onto subagent dispatch.\n' +
|
|
194
|
+
' - `ecc:tdd-workflow` when the project follows ECC conventions and you want its test-first shaping.\n' +
|
|
195
|
+
'3. For debugging during exploration, prefer `/investigate` (gstack — root-cause methodology), `superpowers:systematic-debugging`, or a Task-dispatched `ecc:architect` subagent — whichever you reach for first.\n' +
|
|
196
|
+
'4. Plan review gate (MANDATORY before announcing brainstorming is done): once the plan is ready, it MUST pass the gstack plan-review skills before you proceed.\n' +
|
|
197
|
+
' - If you built the plan via `/autoplan`, you have ALREADY passed the chained reviews — skip this step.\n' +
|
|
198
|
+
' - Otherwise (plan came from `superpowers:writing-plans`, `ecc:tdd-workflow`, or any other path), run `/autoplan` now on the existing plan to chain the reviews, OR invoke the relevant ones individually: `/plan-ceo-review` (scope challenge), `/plan-eng-review` (architecture / edge cases / tests), `/plan-design-review` (UI / AI slop, when there is UI scope), `/plan-devex-review` (when the work has developer-facing surface).\n' +
|
|
199
|
+
' - Apply any changes the reviews recommend before moving on.\n' +
|
|
200
|
+
'5. Wait for explicit user approval on the final reviewed plan before announcing brainstorming is done.',
|
|
201
|
+
};
|
|
135
202
|
/**
|
|
136
203
|
* Resolve the suite prompts to use right now, given the global `skillSuite`
|
|
137
204
|
* and the four user-editable `custom*` fields (only consulted in `custom` mode).
|
|
@@ -142,8 +209,12 @@ export function getSuitePrompts(suite, overrides) {
|
|
|
142
209
|
return SUPERPOWERS_PROMPTS;
|
|
143
210
|
if (suite === 'gstack')
|
|
144
211
|
return GSTACK_PROMPTS;
|
|
212
|
+
if (suite === 'ecc')
|
|
213
|
+
return ECC_PROMPTS;
|
|
145
214
|
if (suite === 'superpowers+gstack')
|
|
146
215
|
return COMBINED_PROMPTS;
|
|
216
|
+
if (suite === 'superpowers+gstack+ecc')
|
|
217
|
+
return ALL_THREE_PROMPTS;
|
|
147
218
|
// custom mode: per-field fallback to AGNOSTIC when the override is missing/blank
|
|
148
219
|
const pick = (k) => {
|
|
149
220
|
const value = overrides[k];
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
// src/shared/skill-suite-prompts.ts
|
|
2
2
|
export function isValidSkillSuite(value) {
|
|
3
|
-
return value === 'superpowers' ||
|
|
3
|
+
return (value === 'superpowers' ||
|
|
4
|
+
value === 'gstack' ||
|
|
5
|
+
value === 'ecc' ||
|
|
6
|
+
value === 'superpowers+gstack' ||
|
|
7
|
+
value === 'superpowers+gstack+ecc' ||
|
|
8
|
+
value === 'custom');
|
|
4
9
|
}
|
|
5
10
|
// ── Agnostic prompt strings ───────────────────────────────────────────────────
|
|
6
11
|
// These are the neutral, suite-free versions used both:
|
|
@@ -53,6 +58,8 @@ export const AGNOSTIC_BRAINSTORMING_INSTRUCTION = 'Brainstorm the implementation
|
|
|
53
58
|
export const GROOMING_INTRO_SUPERPOWERS = 'You are preparing this workspace for Kōbō auto-loop mode. This is a GROOMING session only — DO NOT implement anything, DO NOT write or edit code, DO NOT run tests or builds, DO NOT invoke `superpowers:executing-plans` or any implementation skill. Your ONLY job is to curate the Kōbō task list via MCP tools.';
|
|
54
59
|
export const GROOMING_INTRO_GSTACK = 'You are preparing this workspace for Kōbō auto-loop mode. This is a GROOMING session only — DO NOT implement anything, DO NOT write or edit code, DO NOT run tests or builds, DO NOT invoke `/ship`, `/autoplan`, `/land-and-deploy`, or any implementation skill. Your ONLY job is to curate the Kōbō task list via MCP tools.';
|
|
55
60
|
export const GROOMING_INTRO_COMBINED = 'You are preparing this workspace for Kōbō auto-loop mode. This is a GROOMING session only — DO NOT implement anything, DO NOT write or edit code, DO NOT run tests or builds, DO NOT invoke `superpowers:executing-plans`, `/ship`, `/autoplan`, `/land-and-deploy`, or any other implementation, planning, or release skill. Your ONLY job is to curate the Kōbō task list via MCP tools.';
|
|
61
|
+
export const GROOMING_INTRO_ECC = 'You are preparing this workspace for Kōbō auto-loop mode. This is a GROOMING session only — DO NOT implement anything, DO NOT write or edit code, DO NOT run tests or builds, DO NOT invoke `ecc:feature-dev`, `ecc:tdd-workflow`, `ecc:plan`, or any other implementation, planning, or release skill. Your ONLY job is to curate the Kōbō task list via MCP tools.';
|
|
62
|
+
export const GROOMING_INTRO_ALL = 'You are preparing this workspace for Kōbō auto-loop mode. This is a GROOMING session only — DO NOT implement anything, DO NOT write or edit code, DO NOT run tests or builds, DO NOT invoke `superpowers:executing-plans`, `/ship`, `/autoplan`, `/land-and-deploy`, `ecc:feature-dev`, `ecc:tdd-workflow`, `ecc:plan`, or any other implementation, planning, or release skill. Your ONLY job is to curate the Kōbō task list via MCP tools.';
|
|
56
63
|
/**
|
|
57
64
|
* Resolve the grooming intro for the given suite. In `custom` mode, the
|
|
58
65
|
* user-provided override is used (or AGNOSTIC if the override is empty/blank).
|
|
@@ -62,8 +69,12 @@ export function getGroomingIntro(suite, customOverride) {
|
|
|
62
69
|
const trimmed = (customOverride ?? '').trim();
|
|
63
70
|
return trimmed || AGNOSTIC_AUTO_LOOP_GROOMING_INTRO;
|
|
64
71
|
}
|
|
72
|
+
if (suite === 'superpowers+gstack+ecc')
|
|
73
|
+
return GROOMING_INTRO_ALL;
|
|
65
74
|
if (suite === 'superpowers+gstack')
|
|
66
75
|
return GROOMING_INTRO_COMBINED;
|
|
76
|
+
if (suite === 'ecc')
|
|
77
|
+
return GROOMING_INTRO_ECC;
|
|
67
78
|
if (suite === 'gstack')
|
|
68
79
|
return GROOMING_INTRO_GSTACK;
|
|
69
80
|
return GROOMING_INTRO_SUPERPOWERS;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@loicngr/kobo",
|
|
3
|
-
"version": "1.11.
|
|
3
|
+
"version": "1.11.11",
|
|
4
4
|
"description": "Kōbō — multi-workspace agent manager for Claude Code. Orchestrates isolated git worktrees with dev servers, Notion integration, and MCP tools.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "GPL-3.0-or-later",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n as e}from"./vue-i18n-C3W5i7h6.js";import{B as t,C as n,St as r,wt as i,yt as a}from"./reactivity.esm-bundler-DtSZKRQB.js";import{$ as o,A as s,B as c,H as l,It as u,Mt as d,Rt as f,Tt as p,U as m,V as h,W as g,Wt as _,X as v,Z as y,_n as b,fn as x,t as S,w as C}from"./runtime-dom.esm-bundler-DgevF6KV.js";import{l as w,t as T}from"./QIcon--SvgE-nS.js";import{G as E,P as D,Q as O,d as k,f as A,v as j,y as M}from"./index-
|
|
1
|
+
import{n as e}from"./vue-i18n-C3W5i7h6.js";import{B as t,C as n,St as r,wt as i,yt as a}from"./reactivity.esm-bundler-DtSZKRQB.js";import{$ as o,A as s,B as c,H as l,It as u,Mt as d,Rt as f,Tt as p,U as m,V as h,W as g,Wt as _,X as v,Z as y,_n as b,fn as x,t as S,w as C}from"./runtime-dom.esm-bundler-DgevF6KV.js";import{l as w,t as T}from"./QIcon--SvgE-nS.js";import{G as E,P as D,Q as O,d as k,f as A,v as j,y as M}from"./index-M0ntkdkQ.js";import{t as N}from"./QSpinnerDots-B4RmFJUj.js";import{u as ee}from"./QSelect-DCm1FiOk.js";import{t as P}from"./QTooltip-8fQLc_4N.js";import{r as F,t as te}from"./pending-diff-open-BqHyeaCb.js";import{t as I}from"./documents-UdlveYUp.js";import{i as L,n as ne,t as R}from"./render-chat-markdown-BQBEE7Bn.js";import{t as z}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{n as B}from"./WorkspacePage-B9I2mQJE.js";function re(e,t,n=!0,r){let i=[],a=new Map,o=new Map;for(let n=0;n<e.length;n++){let s=e[n],c=t?.[n],l=r?.[n]??void 0;switch(s.kind){case`message:text`:{let e=a.get(s.messageId);if(e)e.text+=s.text,e.streaming=s.streaming,l&&e.eventIds?.push(l);else{let e={type:`text`,messageId:s.messageId,text:s.text,streaming:s.streaming,ts:c,eventIds:l?[l]:void 0};a.set(s.messageId,e),i.push(e)}break}case`message:end`:{let e=a.get(s.messageId);e&&(e.streaming=!1);break}case`message:thinking`:i.push({type:`thinking`,messageId:s.messageId,text:s.text,ts:c,eventIds:l?[l]:void 0});break;case`tool:call`:{let e={type:`tool`,toolCallId:s.toolCallId,name:s.name,input:s.input,ts:c,eventIds:l?[l]:void 0};o.set(s.toolCallId,e),i.push(e);break}case`tool:result`:{let e=o.get(s.toolCallId);e&&(e.result={output:s.output,isError:s.isError},l&&e.eventIds?.push(l));break}case`session:started`:i.push({type:`session`,kind:`started`,detail:{engineSessionId:s.engineSessionId,model:s.model},ts:c,eventIds:l?[l]:void 0});break;case`session:ended`:i.push({type:`session`,kind:`ended`,detail:{reason:s.reason,exitCode:s.exitCode},ts:c,eventIds:l?[l]:void 0});break;case`session:compacted`:i.push({type:`session`,kind:`compacted`,ts:c,eventIds:l?[l]:void 0})}}let s=null;for(let e of i)e.type===`text`&&e.streaming&&(s&&(s.streaming=!1),s=e);return s&&!n&&(s.streaming=!1),i}function ie(e,t){if(t.length===0)return e;let n=t.map(e=>({type:`user`,content:e.content,sender:e.sender,ts:e.ts,eventIds:e.eventIds})),r=[...e,...n];r.sort((e,t)=>{let n=e.ts??``,r=t.ts??``;return n===r?0:n?r?n<r?-1:1:-1:1});let i;for(let e of r)e.type===`user`&&e.sender!==`system-prompt`&&e.ts&&(!i||e.ts>i)&&(i=e.ts);if(i)for(let e of r)e.type===`text`&&e.streaming&&(!e.ts||e.ts<i)&&(e.streaming=!1);return r}var V=new Set([`setup`,`cleanup`,`archive`]);function H(e){switch(e.type){case`user`:return e.sender===`system-prompt`?`system-prompt`:V.has(e.sender)?`script`:`user`;case`session`:return`session`;default:return`agent`}}function ae(e){let t=[],n=null,r=null;for(let i of e){let e=H(i),a=e===`session`||e===`system-prompt`,o=e===`script`&&i.type===`user`?`script:${i.sender}`:e;!n||r!==o||a?(n={speaker:e,ts:i.ts,items:[i]},r=o,t.push(n),a&&(n=null)):n.items.push(i)}return t}var U={class:`text-caption text-grey-6`},oe=o({__name:`SessionEventItem`,props:{item:{}},setup(e){let t=e,n=c(()=>{switch(t.item.kind){case`started`:return`session.started`;case`ended`:return`session.ended`;case`compacted`:return`session.compacted`;default:return`session.started`}});return(e,t)=>(f(),g(`span`,U,i(e.$t(n.value)),1))}});function se(e,t){if(t.length===0||e.length===0)return e;let n=[...t].sort((e,t)=>t.length-e.length),r=new DOMParser().parseFromString(`<div>${e}</div>`,`text/html`),i=r.body.firstChild;if(!i)return e;function a(e){if(e.nodeType===Node.TEXT_NODE){ce(e,n,r);return}if(e.nodeName===`A`)return;let t=Array.from(e.childNodes);for(let e of t)a(e)}return a(i),i.innerHTML}function ce(e,t,n){let r=e.textContent??``;if(!t.some(e=>r.includes(e)))return;let i=n.createDocumentFragment(),a=0;for(;a<r.length;){let e=le(r,a,t);if(!e){i.appendChild(n.createTextNode(r.slice(a)));break}e.index>a&&i.appendChild(n.createTextNode(r.slice(a,e.index)));let o=n.createElement(`a`);o.className=`document-link`,o.setAttribute(`data-document-path`,e.path),o.setAttribute(`href`,`#`),o.textContent=e.path,i.appendChild(o),a=e.index+e.path.length}e.parentNode?.replaceChild(i,e)}function le(e,t,n){let r=null;for(let i of n){let n=e.indexOf(i,t);n<0||(!r||n<r.index||n===r.index&&i.length>r.path.length)&&(r={index:n,path:i})}return r}var W=[`innerHTML`],ue=z(o({__name:`TextMessageItem`,props:{item:{}},setup(e){let t=e,n=I(),r=k(),i=c(()=>{let e=r.selectedWorkspaceId;return e?n.documentsFor(e).map(e=>e.path):[]}),a=c(()=>{let e=se(L.parse(t.item.text,{async:!1,breaks:!0,gfm:!0}),i.value);return ne(e,{addAttr:[`data-document-path`]})});function o(e){let t=e.target?.closest(`.document-link`);if(!t)return;e.preventDefault();let i=t.getAttribute(`data-document-path`),a=r.selectedWorkspaceId;!i||!a||n.openDocumentByPath(a,i)}return(t,n)=>(f(),g(`div`,{class:`markdown-message`,onClick:o},[h(`div`,{innerHTML:a.value},null,8,W),e.item.streaming?(f(),l(w,{key:0,size:`xs`,class:`q-ml-xs`})):m(``,!0)]))}}),[[`__scopeId`,`data-v-1b7bd8ca`]]);function de(e,t){let n=e.split(`
|
|
2
2
|
`),r=t.split(`
|
|
3
3
|
`),i=n.length,a=r.length,o=Array.from({length:i+1},()=>Array(a+1).fill(0));for(let e=i-1;e>=0;e--)for(let t=a-1;t>=0;t--)n[e]===r[t]?o[e][t]=o[e+1][t+1]+1:o[e][t]=Math.max(o[e+1][t],o[e][t+1]);let s=[],c=0,l=0;for(;c<i&&l<a;)n[c]===r[l]?(s.push({type:`context`,content:n[c]}),c++,l++):o[c+1][l]>=o[c][l+1]?(s.push({type:`del`,content:n[c]}),c++):(s.push({type:`add`,content:r[l]}),l++);for(;c<i;)s.push({type:`del`,content:n[c++]});for(;l<a;)s.push({type:`add`,content:r[l++]});return s}function G(e){let t=e.split(`
|
|
4
4
|
`),n=[];for(let e of t)e.startsWith(`@@`)||e.startsWith(`+++`)||e.startsWith(`---`)||(e.startsWith(`+`)?n.push({type:`add`,content:e.slice(1)}):e.startsWith(`-`)?n.push({type:`del`,content:e.slice(1)}):e.startsWith(` `)?n.push({type:`context`,content:e.slice(1)}):e.length>0&&n.push({type:`context`,content:e}));return n}function K(e,t){if(!t||typeof t!=`object`)return null;let n=t;if(e===`Edit`){let e=n.file_path;if(!e)return null;let t=n.old_string??``,r=n.new_string??``,i=typeof n.diff==`string`?n.diff:``;if(!t&&!r&&i.length>0){let t=G(i);return{toolName:`Edit`,filePath:e,additions:t.filter(e=>e.type===`add`).length,deletions:t.filter(e=>e.type===`del`).length,diffLines:t}}return{toolName:`Edit`,filePath:e,oldString:t,newString:r,replaceAll:n.replace_all??!1,additions:r?r.split(`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{B as e,C as t,wt as n}from"./reactivity.esm-bundler-DtSZKRQB.js";import{$ as r,A as i,H as a,Mt as o,Rt as s,U as c,V as l,W as u,Wt as d,Z as f,_n as p}from"./runtime-dom.esm-bundler-DgevF6KV.js";import{Dt as m,G as h,kt as g,s as _}from"./index-
|
|
1
|
+
import{B as e,C as t,wt as n}from"./reactivity.esm-bundler-DtSZKRQB.js";import{$ as r,A as i,H as a,Mt as o,Rt as s,U as c,V as l,W as u,Wt as d,Z as f,_n as p}from"./runtime-dom.esm-bundler-DgevF6KV.js";import{Dt as m,G as h,kt as g,s as _}from"./index-M0ntkdkQ.js";import{t as v}from"./render-chat-markdown-BQBEE7Bn.js";import{t as y}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{t as b}from"./QSpace-D9UEvM99.js";import{t as x}from"./QChip-CMB-IbQd.js";import{t as S}from"./QPage-DuIsRmYu.js";var C={class:`row items-center q-mb-md`},w={class:`text-h6 q-ml-sm`},T={key:0,class:`text-grey-6 text-center q-pa-lg`},E={key:1,class:`text-negative text-center q-pa-lg`},D={key:2,class:`text-grey-6 text-center q-pa-lg`},O={key:3,class:`column q-gutter-md`},k={key:0,class:`text-caption text-grey-6`},A={class:`row items-center q-mb-sm`},j={class:`text-subtitle1 text-indigo-3`,style:{"font-family":`var(--kobo-font-mono, monospace)`}},M=[`innerHTML`],N=y(r({__name:`ChangelogPage`,setup(r){let y=_(),N=t([]),P=t(``),F=t(!1),I=t(null);function L(e){return v(e)}async function R(){F.value=!0,I.value=null;try{let e=await fetch(`/api/changelog`);if(!e.ok)throw Error(`HTTP ${e.status}`);let t=await e.json();P.value=t.currentVersion??``,N.value=t.versions??[]}catch(e){I.value=e instanceof Error?e.message:String(e)}finally{F.value=!1}}return o(R),(t,r)=>(s(),a(S,{class:`q-pa-md`,style:{"max-width":`900px`,margin:`0 auto`}},{default:p(()=>[l(`div`,C,[f(h,{flat:``,dense:``,round:``,icon:`arrow_back`,onClick:r[0]||=t=>e(y).back()}),l(`div`,w,n(t.$t(`changelog.title`)),1),f(b),f(h,{flat:``,dense:``,icon:`refresh`,loading:F.value,label:t.$t(`common.refresh`),onClick:R},null,8,[`loading`,`label`])]),F.value&&N.value.length===0?(s(),u(`div`,T,n(t.$t(`common.loading`)),1)):I.value?(s(),u(`div`,E,n(I.value),1)):N.value.length===0?(s(),u(`div`,D,n(t.$t(`changelog.empty`)),1)):(s(),u(`div`,O,[P.value?(s(),u(`div`,k,n(t.$t(`changelog.currentVersion`,{version:P.value})),1)):c(``,!0),(s(!0),u(i,null,d(N.value,e=>(s(),a(m,{key:e.version,dark:``,flat:``,bordered:``},{default:p(()=>[f(g,null,{default:p(()=>[l(`div`,A,[l(`div`,j,` v`+n(e.version),1),e.version===P.value?(s(),a(x,{key:0,dense:``,size:`sm`,color:`indigo-7`,"text-color":`grey-2`,label:t.$t(`changelog.current`),class:`q-ml-sm`},null,8,[`label`])):c(``,!0)]),l(`div`,{class:`changelog-notes`,innerHTML:L(e.notes)},null,8,M)]),_:2},1024)]),_:2},1024))),128))]))]),_:1}))}}),[[`__scopeId`,`data-v-ed73d661`]]);export{N as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{P as e,b as t}from"./QIcon--SvgE-nS.js";import{gt as n,ht as r}from"./index-
|
|
1
|
+
import{P as e,b as t}from"./QIcon--SvgE-nS.js";import{gt as n,ht as r}from"./index-M0ntkdkQ.js";var i={left:!0,right:!0,up:!0,down:!0,horizontal:!0,vertical:!0},a=Object.keys(i);i.all=!0;function o(e){let t={};for(let n of a)e[n]&&(t[n]=!0);return Object.keys(t).length===0?i:(t.horizontal?t.left=t.right=!0:t.left&&t.right&&(t.horizontal=!0),t.vertical?t.up=t.down=!0:t.up&&t.down&&(t.vertical=!0),t.horizontal&&t.vertical&&(t.all=!0),t)}var s=[`INPUT`,`TEXTAREA`];function c(e,t){return t.event===void 0&&e.target!==void 0&&!e.target.draggable&&typeof t.handler==`function`&&!s.includes(e.target.nodeName.toUpperCase())&&(e.qClonedBy===void 0||!e.qClonedBy.includes(t.uid))}function l(e){return e===!1?0:e===!0||e===void 0?1:Number.parseInt(e,10)||0}var u=e({name:`close-popup`,beforeMount(e,{value:i}){let a={depth:l(i),handler(t){a.depth!==0&&setTimeout(()=>{let i=n(e);i!==void 0&&r(i,t,a.depth)},0)},handlerKey(e){t(e,13)&&a.handler(e)}};e.__qclosepopup=a,e.addEventListener(`click`,a.handler),e.addEventListener(`keyup`,a.handlerKey)},updated(e,{value:t,oldValue:n}){t!==n&&(e.__qclosepopup.depth=l(t))},beforeUnmount(e){let t=e.__qclosepopup;e.removeEventListener(`click`,t.handler),e.removeEventListener(`keyup`,t.handlerKey),delete e.__qclosepopup}});export{o as n,c as r,u as t};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{n as e}from"./vue-i18n-C3W5i7h6.js";import{B as t,C as n,wt as r,xt as i,yt as ee}from"./reactivity.esm-bundler-DtSZKRQB.js";import{$ as te,A as ne,B as a,C as re,H as o,It as ie,Mt as ae,Rt as s,Tt as oe,U as c,V as l,W as u,Wt as se,X as d,Z as f,_n as p,fn as m,lt as ce,t as le,w as h}from"./runtime-dom.esm-bundler-DgevF6KV.js";import{t as g}from"./QIcon--SvgE-nS.js";import{t as ue}from"./QSeparator-BdyRE-AM.js";import{o as de}from"./use-checkbox-SrkgiJho.js";import{Dt as _,G as v,L as fe,R as pe,d as me,g as he,kt as y,l as ge,n as _e,s as ve,v as ye}from"./index-CoOsPyyG.js";import{t as be}from"./QSpinnerDots-B4RmFJUj.js";import{n as b,r as x,t as xe}from"./use-quasar-CeHlTrGg.js";import{d as S,n as Se,t as C,u as Ce}from"./QSelect-CtxxliRU.js";import{t as we}from"./QTooltip-HEIFh5w9.js";import{t as Te}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{t as Ee}from"./QChip-EQGYShN0.js";import{t as De}from"./QBtnToggle-BgfN19l8.js";import{i as Oe}from"./project-color-e3OdFi9X.js";import{t as ke}from"./QPage-DuIsRmYu.js";import{a as Ae,i as je,n as Me,r as Ne,t as Pe}from"./expand-template-D3LZldj1.js";import{i as Fe,r as Ie,t as Le}from"./permissionModes-6jhegAm-.js";var Re=`kobo:create-page-prefs`;function w(){try{let e=localStorage.getItem(Re);return e===null?void 0:JSON.parse(e)}catch{return}}function ze(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Be(){let e=w();if(!ze(e))return{};let t={};if(typeof e.projectPath==`string`&&e.projectPath.length>0&&(t.projectPath=e.projectPath),typeof e.autoLoop==`boolean`&&(t.autoLoop=e.autoLoop),(e.autoLoopSessionMode===`per_task`||e.autoLoopSessionMode===`continuous`)&&(t.autoLoopSessionMode=e.autoLoopSessionMode),typeof e.brainstormModel==`string`&&e.brainstormModel.length>0&&(t.brainstormModel=e.brainstormModel),ze(e.reasoningEffortByModel)){let n=Object.entries(e.reasoningEffortByModel).filter(([e,t])=>e.length>0&&typeof t==`string`&&t.length>0);t.reasoningEffortByModel=Object.fromEntries(n)}return t}function Ve(e){try{localStorage.setItem(Re,JSON.stringify(e))}catch{}}var He={class:`create-inner q-mx-auto`},Ue={class:`q-mb-lg`},We={class:`create-title text-weight-bold text-grey-2`},Ge={class:`text-body1 text-grey-5 q-mt-xs`},Ke={class:`create-sections column`},qe={class:`text-subtitle1 text-weight-medium text-grey-2`},Je={class:`text-body2 text-grey-6`},Ye={class:`card-textarea-wrap`},Xe={class:`column items-center self-end q-pb-xs`},Ze={key:0,class:`column q-gutter-y-sm`},Qe={class:`text-caption text-weight-medium text-grey-5`},$e={class:`row q-gutter-sm`},et={key:0,class:`source-panel column q-gutter-y-sm q-pa-md rounded-borders`},tt={key:0},nt={class:`text-body2 text-grey-4 q-mb-sm`},rt={class:`responsive-fields responsive-fields--sm row q-col-gutter-x-sm`},it={class:`col-12 col-sm-6`},at={class:`col`},ot={class:`text-body2 text-weight-medium`},st={class:`text-caption text-grey-6`},ct={class:`col-12 col-sm-6`},lt={class:`col`},ut={class:`text-body2 text-weight-medium`},dt={class:`text-caption text-grey-6`},ft={key:0,class:`source-panel q-pa-md rounded-borders`},pt={key:1,class:`responsive-fields row q-col-gutter-x-md`},mt={class:`col-12 col-md-6`},ht={class:`q-pa-md column q-gutter-y-sm`},gt={key:0,class:`row q-gutter-xs`},_t={class:`col-12 col-md-6`},vt={class:`q-pa-md column q-gutter-y-sm`},yt={key:0,class:`row q-gutter-xs`},bt={class:`text-subtitle1 text-weight-medium text-grey-2`},xt={class:`text-body2 text-grey-6`},St={class:`text-caption text-weight-medium text-grey-5 q-mb-sm`},Ct={class:`responsive-fields row q-col-gutter-x-md`},wt={class:`col-12 col-md-6`},Tt={class:`col-12 col-md-6`},Et={key:0,class:`responsive-fields row q-col-gutter-x-md`},Dt={class:`col-12 col-md-4`},Ot={class:`col-12 col-md-8`},kt={class:`self-center full-width no-outline text-grey-4 ellipsis`,tabindex:`0`},At={class:`col`},jt={class:`text-subtitle1 text-weight-medium text-grey-2`},Mt={class:`text-body2 text-grey-6`},Nt={key:0,class:`col-12 col-sm-6`},Pt={class:`col-12 col-sm-6`},Ft={class:`col-12 col-sm-6`},It={class:`col-12 col-sm-6`},Lt={class:`text-subtitle2 text-amber-3`},Rt={class:`responsive-fields row q-col-gutter-x-md`},zt={class:`col-12 col-sm-6`},Bt={class:`col-12 col-sm-6`},Vt={class:`text-caption text-grey-6`},Ht={class:`row q-gutter-sm create-actions`},Ut=6e4,T=Te(te({__name:`CreatePage`,setup(te){function Te(e){return e.disabled===!0}let Re=ve(),w=xe(),ze=me(),T=ye(),{t:E}=e(),Wt=n([]),Gt=n(``),D=n(``),Kt=n(null),qt=n(``),O=n(!1),k=n(!1),Jt=n(null),Yt=n(null),Xt=n([]),Zt=n(null),A=n(``),j=n(!1),M=n(`claude-opus-4-8`),N=n(`claude-opus-4-8`),Qt=n(`auto`),P=n(`auto`),F=n({}),I=n(``),L=n(null),R=n(`feature`),$t=n(!1),en=a(()=>T.global.voiceEnabled),tn=n([]),z=n(`claude-code`),nn=a(()=>tn.value.find(e=>e.id===z.value)),rn=a(()=>tn.value.map(e=>({value:e.id,label:e.displayName}))),an=a(()=>T.global.branchPrefixes.map(e=>({label:`${e}/`,value:e}))),on=[`plan`,`bypass`,`strict`,`interactive`];function sn(e,t){let n=e?T.getProjectByPath(e):void 0,r=n?.agentPermissionMode;if(typeof r==`string`&&on.includes(r))return r;let i=T.global.defaultPermissionModeByEngine?.[t];return typeof i==`string`&&on.includes(i)?i:n?.dangerouslySkipPermissions??T.global.dangerouslySkipPermissions??!0?`bypass`:t===`codex`?`plan`:`interactive`}let B=n(sn(``,z.value)),cn=a(()=>{switch(B.value){case`plan`:return`visibility`;case`bypass`:return`flash_on`;case`strict`:return`lock`;case`interactive`:return`security`}}),ln=a(()=>(Le[z.value]??on).map(e=>({value:e,label:E(`agentPermissionMode.${e}`),disabled:e===`plan`&&X.value}))),V=n([]),un=n([]),dn=n(!1),fn=n(!1);function pn(e,t){t(()=>{un.value=e?V.value.filter(t=>t.toLowerCase().includes(e.toLowerCase())):V.value})}let mn=pe();function hn(){return Kt.value?.nativeEl??null}let{showSkills:gn,selectedSkillIndex:_n,groupedDropdown:vn,flatDropdown:H,fetchSkills:yn,detectSlashFragment:bn,replaceFragmentWith:xn,closeDropdown:Sn}=je(D,hn,{excludeKoboCommands:!0});yn(),m(D,async()=>{await oe(),await bn()});function Cn(e){if(e.type===`template`){let t=mn.templates.find(t=>t.slug===e.name);if(!t)return;let n=Me(t.content,Pe({workspace:null,gitStats:null,sessionName:null}));xn(n),Sn();return}xn(`/${e.name} `),Sn()}function wn(e){!gn.value||H.value.length===0||(e.key===`ArrowDown`?(e.preventDefault(),_n.value=(_n.value+1)%H.value.length):e.key===`ArrowUp`?(e.preventDefault(),_n.value=(_n.value-1+H.value.length)%H.value.length):e.key===`Enter`&&!e.shiftKey&&!e.ctrlKey&&!e.metaKey?(e.preventDefault(),Cn(H.value[_n.value])):e.key===`Escape`&&(e.preventDefault(),Sn()))}async function Tn(){if(!(!en.value||O.value||k.value)){if(!navigator.mediaDevices?.getUserMedia||typeof MediaRecorder>`u`){w.notify({type:`warning`,message:E(`voice.notSupported`),position:`top`,timeout:4e3});return}try{let e=await navigator.mediaDevices.getUserMedia({audio:!0});Yt.value=e,Xt.value=[];let t=MediaRecorder.isTypeSupported(`audio/webm`)?`audio/webm`:``,n=t?new MediaRecorder(e,{mimeType:t}):new MediaRecorder(e);n.ondataavailable=e=>{e.data&&e.data.size>0&&Xt.value.push(e.data)},n.start(),Jt.value=n,O.value=!0,Zt.value=setTimeout(()=>{U(),w.notify({type:`info`,message:E(`voice.maxDurationReached`),position:`top`,timeout:3500})},Ut)}catch{w.notify({type:`negative`,message:E(`voice.errorMicPermission`),position:`top`,timeout:5e3})}}}async function U(){if(!O.value)return;let e=Jt.value;if(!e)return;O.value=!1,k.value=!0,Zt.value&&=(clearTimeout(Zt.value),null);let t=await new Promise(t=>{e.onstop=()=>t(new Blob(Xt.value,{type:`audio/webm`})),e.stop()});try{if(t.size===0)throw Error(`MIC_AUDIO_INVALID`);let e=new FormData;e.append(`audio`,t,`voice.webm`),e.append(`language`,T.global.voiceLanguage||`auto`);let n=await fetch(`/api/voice/transcribe`,{method:`POST`,body:e});if(!n.ok){let e=await n.json().catch(()=>({}));throw Error(String(e.code??e.error??`HTTP_${n.status}`))}let r=await n.json();r.text?.trim()&&(D.value=D.value?`${D.value.trimEnd()} ${r.text.trim()}`:r.text.trim())}catch(e){let t=e instanceof Error?e.message:`TRANSCRIPTION_FAILED`;w.notify({type:`negative`,message:E({VOICE_DISABLED:`voice.errorDisabled`,MODEL_NOT_CONFIGURED:`voice.errorModelMissing`,MODEL_NOT_INSTALLED:`voice.errorModelNotInstalled`,VOICE_RUNTIME_MISSING:`voice.errorRuntimeMissing`,MIC_AUDIO_INVALID:`voice.errorAudioInvalid`,LANGUAGE_INVALID:`voice.errorLanguageInvalid`,TRANSCRIPTION_TIMEOUT:`voice.errorTranscription`}[t]??`voice.errorTranscription`),position:`top`,timeout:5e3})}finally{Jt.value=null,Xt.value=[],Yt.value?.getTracks().forEach(e=>{e.stop()}),Yt.value=null,k.value=!1}}function En(e){return en.value?T.global.voicePttKey===`ctrl+space`?e.ctrlKey&&e.code===`Space`:e.key===`Alt`:!1}function Dn(e){!En(e)||e.repeat||(e.preventDefault(),Tn())}function On(e){En(e)&&(e.preventDefault(),U())}function kn(){O.value&&U()}function An(){document.visibilityState!==`visible`&&O.value&&U()}let W=a(()=>(Fe[z.value]??Ie).map(e=>({label:E(e.i18nLabelKey),value:e.value,description:E(e.i18nDescriptionKey)})));m(z,()=>{let e=W.value.map(e=>e.value);if(e.length>0){let t=T.global.defaultModelByEngine?.[z.value];typeof t==`string`&&e.includes(t)?M.value=t:e.includes(M.value)||(M.value=e.includes(`auto`)?`auto`:e[0]??`auto`)}e.length>0&&!e.includes(N.value)&&(N.value=e.includes(`auto`)?`auto`:e[0]??`auto`);let t=Le[z.value]??[];t.length>0&&!t.includes(B.value)&&(B.value=sn(I.value,z.value));let n=(Ne[z.value]??[]).map(e=>e.value);n.length>0&&!n.includes(P.value)&&(P.value=n.includes(`auto`)?`auto`:n[0]??`auto`)});function jn(e){let t=e.indexOf(`:`);return t>=0?e.slice(t+1).trim():e}let Mn=a(()=>(Ne[z.value]??Ne[`claude-code`]).map(e=>({value:e.value,label:jn(E(e.i18nLabelKey)),description:E(e.i18nDescriptionKey)})));m(M,e=>{let t=F.value[e];t&&Mn.value.some(e=>e.value===t)&&(P.value=t)}),m(P,e=>{F.value={...F.value,[M.value]:e},Ve({...Be(),reasoningEffortByModel:F.value})});let G=a(()=>{let e=A.value.trim();return e.startsWith(`https://www.notion.so/`)||e.startsWith(`https://app.notion.com/`)}),Nn=a(()=>/[?&]p=[0-9a-f]{32}(?:[&#]|$)/i.test(A.value)),K=n(`panel`);function Pn(){let e=A.value.trim();return K.value===`parent`&&Nn.value?e.replace(/([?&])p=[0-9a-f]{32}(?=[&#]|$)/i,`$1`).replace(/([?&])pm=[a-z]+(?=[&#]|$)/i,`$1`).replace(/[?&]+$/,``).replace(/\?&/,`?`):e}let q=n([]),J=n([]),Fn=n(``),In=n(``),Ln=a(()=>!j.value||!G.value);function Rn(){let e=Fn.value.trim();e&&(q.value.push(e),Fn.value=``)}function zn(e){q.value.splice(e,1)}function Bn(){let e=In.value.trim();e&&(J.value.push(e),In.value=``)}function Vn(e){J.value.splice(e,1)}function Hn(){j.value=!j.value,j.value||(A.value=``)}let Y=n(!1),X=n(!1),Un=n(`per_task`);m(()=>X.value,e=>{e&&B.value!==`bypass`&&(B.value=`bypass`)});function Wn(){X.value=!X.value,X.value&&(N.value=M.value)}let Z=n(``),Gn=a(()=>/\/issues\/\d+/.test(Z.value.trim()));function Kn(){Y.value=!Y.value,Y.value||(Z.value=``)}let Q=n(!1),$=n(null),qn=n([]),Jn=n(!1);async function Yn(){if(!I.value.trim()){qn.value=[];return}Jn.value=!0;try{qn.value=await ze.fetchOrphanWorktrees(I.value.trim())}catch{qn.value=[]}finally{Jn.value=!1}}function Xn(){Q.value=!Q.value,Q.value?(j.value=!1,A.value=``,Y.value=!1,Z.value=``,$t.value=!0,Yn()):$.value=null}function Zn(e){e===`existing`!==Q.value&&Xn()}m(I,()=>{$.value=null,Q.value&&Yn()}),m($,e=>{if(!e)return;let t=qn.value.find(t=>t.path===e);t&&(L.value=t.suggestedSourceBranch),$t.value=!0});async function Qn(e){if(!e.trim()){V.value=[],L.value=null;return}dn.value=!0;try{let t=await fetch(`/api/git/branches?path=${encodeURIComponent(e.trim())}`);if(!t.ok)throw Error(`HTTP ${t.status}`);let n=await t.json();V.value=n.local??n.branches??[],V.value.length>0&&!L.value&&(L.value=V.value[0]??null)}catch{V.value=[],L.value=null}finally{dn.value=!1}}function $n(e){let t=T.getProjectByPath(e);if(t){t.defaultSourceBranch&&(L.value=t.defaultSourceBranch);let e=t.taskPromptTemplate??``;(D.value===``||D.value===qt.value)&&(D.value=e,qt.value=e);let n=W.value.map(e=>e.value);if(t.defaultModel&&n.includes(t.defaultModel))M.value=t.defaultModel;else{let e=T.global.defaultModelByEngine?.[z.value];typeof e==`string`&&n.includes(e)&&(M.value=e)}}B.value=sn(e,z.value)}let er=null;m(I,e=>{er&&clearTimeout(er),er=setTimeout(()=>{L.value=null,Qn(e),$n(e)},500)});function tr(e,t){let n=e.toLowerCase();t(()=>{Wt.value=T.projectPaths.filter(e=>e.toLowerCase().includes(n)||Oe(e).toLowerCase().includes(n))})}function nr(e){let t=T.projectPaths.find(t=>Oe(t)===e);I.value=t??e}ae(async()=>{await T.fetchSettings();let e=T.global.branchPrefixes;e.length>0&&!e.includes(R.value)&&(R.value=e[0]);let t=Be();F.value=t.reasoningEffortByModel??{},t.autoLoop===!0&&(X.value=!0),t.autoLoopSessionMode===`continuous`&&(Un.value=`continuous`),t.autoLoop===!0&&t.brainstormModel&&(N.value=t.brainstormModel),t.projectPath&&T.projectPaths.includes(t.projectPath)&&(I.value=t.projectPath),B.value=sn(I.value,z.value);try{let e=await fetch(`/api/engines`);e.ok&&(tn.value=await e.json())}catch{}{let e=W.value.map(e=>e.value),t=T.global.defaultModelByEngine?.[z.value];typeof t==`string`&&e.includes(t)?M.value=t:e.length>0&&!e.includes(M.value)&&(M.value=e.includes(`auto`)?`auto`:e[0]??`auto`)}let n=F.value[M.value];n&&Mn.value.some(e=>e.value===n)&&(P.value=n);{let e=W.value.map(e=>e.value);e.length>0&&!e.includes(N.value)&&(N.value=e.includes(`auto`)?`auto`:e[0]??`auto`)}window.addEventListener(`keydown`,Dn),window.addEventListener(`keyup`,On),window.addEventListener(`blur`,kn),document.addEventListener(`visibilitychange`,An)}),ie(()=>{er&&clearTimeout(er),window.removeEventListener(`keydown`,Dn),window.removeEventListener(`keyup`,On),window.removeEventListener(`blur`,kn),document.removeEventListener(`visibilitychange`,An),Zt.value&&=(clearTimeout(Zt.value),null),O.value&&U()});function rr(e){return e.normalize(`NFD`).replace(/[\u0300-\u036f]/g,``).toLowerCase().replace(/[^a-z0-9\s-]/g,``).trim().replace(/\s+/g,`-`).replace(/-+/g,`-`).substring(0,50)}function ir(){return Gt.value.trim()?Gt.value.trim().substring(0,80):!j.value&&!Y.value&&D.value.trim()&&(D.value.trim().split(`
|
|
1
|
+
import{n as e}from"./vue-i18n-C3W5i7h6.js";import{B as t,C as n,wt as r,xt as i,yt as ee}from"./reactivity.esm-bundler-DtSZKRQB.js";import{$ as te,A as ne,B as a,C as re,H as o,It as ie,Mt as ae,Rt as s,Tt as oe,U as c,V as l,W as u,Wt as se,X as d,Z as f,_n as p,fn as m,lt as ce,t as le,w as h}from"./runtime-dom.esm-bundler-DgevF6KV.js";import{t as g}from"./QIcon--SvgE-nS.js";import{t as ue}from"./QSeparator-BdyRE-AM.js";import{o as de}from"./use-checkbox-SrkgiJho.js";import{Dt as _,G as v,L as fe,R as pe,d as me,g as he,kt as y,l as ge,n as _e,s as ve,v as ye}from"./index-M0ntkdkQ.js";import{t as be}from"./QSpinnerDots-B4RmFJUj.js";import{n as b,r as x,t as xe}from"./use-quasar-B6Aitpct.js";import{d as S,n as Se,t as C,u as Ce}from"./QSelect-DCm1FiOk.js";import{t as we}from"./QTooltip-8fQLc_4N.js";import{t as Te}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{t as Ee}from"./QChip-CMB-IbQd.js";import{t as De}from"./QBtnToggle-BKZW3k57.js";import{i as Oe}from"./project-color-Dl2gXBlN.js";import{t as ke}from"./QPage-DuIsRmYu.js";import{a as Ae,i as je,n as Me,r as Ne,t as Pe}from"./expand-template-zfuUsWH3.js";import{i as Fe,r as Ie,t as Le}from"./permissionModes-6jhegAm-.js";var Re=`kobo:create-page-prefs`;function w(){try{let e=localStorage.getItem(Re);return e===null?void 0:JSON.parse(e)}catch{return}}function ze(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Be(){let e=w();if(!ze(e))return{};let t={};if(typeof e.projectPath==`string`&&e.projectPath.length>0&&(t.projectPath=e.projectPath),typeof e.autoLoop==`boolean`&&(t.autoLoop=e.autoLoop),(e.autoLoopSessionMode===`per_task`||e.autoLoopSessionMode===`continuous`)&&(t.autoLoopSessionMode=e.autoLoopSessionMode),typeof e.brainstormModel==`string`&&e.brainstormModel.length>0&&(t.brainstormModel=e.brainstormModel),ze(e.reasoningEffortByModel)){let n=Object.entries(e.reasoningEffortByModel).filter(([e,t])=>e.length>0&&typeof t==`string`&&t.length>0);t.reasoningEffortByModel=Object.fromEntries(n)}return t}function Ve(e){try{localStorage.setItem(Re,JSON.stringify(e))}catch{}}var He={class:`create-inner q-mx-auto`},Ue={class:`q-mb-lg`},We={class:`create-title text-weight-bold text-grey-2`},Ge={class:`text-body1 text-grey-5 q-mt-xs`},Ke={class:`create-sections column`},qe={class:`text-subtitle1 text-weight-medium text-grey-2`},Je={class:`text-body2 text-grey-6`},Ye={class:`card-textarea-wrap`},Xe={class:`column items-center self-end q-pb-xs`},Ze={key:0,class:`column q-gutter-y-sm`},Qe={class:`text-caption text-weight-medium text-grey-5`},$e={class:`row q-gutter-sm`},et={key:0,class:`source-panel column q-gutter-y-sm q-pa-md rounded-borders`},tt={key:0},nt={class:`text-body2 text-grey-4 q-mb-sm`},rt={class:`responsive-fields responsive-fields--sm row q-col-gutter-x-sm`},it={class:`col-12 col-sm-6`},at={class:`col`},ot={class:`text-body2 text-weight-medium`},st={class:`text-caption text-grey-6`},ct={class:`col-12 col-sm-6`},lt={class:`col`},ut={class:`text-body2 text-weight-medium`},dt={class:`text-caption text-grey-6`},ft={key:0,class:`source-panel q-pa-md rounded-borders`},pt={key:1,class:`responsive-fields row q-col-gutter-x-md`},mt={class:`col-12 col-md-6`},ht={class:`q-pa-md column q-gutter-y-sm`},gt={key:0,class:`row q-gutter-xs`},_t={class:`col-12 col-md-6`},vt={class:`q-pa-md column q-gutter-y-sm`},yt={key:0,class:`row q-gutter-xs`},bt={class:`text-subtitle1 text-weight-medium text-grey-2`},xt={class:`text-body2 text-grey-6`},St={class:`text-caption text-weight-medium text-grey-5 q-mb-sm`},Ct={class:`responsive-fields row q-col-gutter-x-md`},wt={class:`col-12 col-md-6`},Tt={class:`col-12 col-md-6`},Et={key:0,class:`responsive-fields row q-col-gutter-x-md`},Dt={class:`col-12 col-md-4`},Ot={class:`col-12 col-md-8`},kt={class:`self-center full-width no-outline text-grey-4 ellipsis`,tabindex:`0`},At={class:`col`},jt={class:`text-subtitle1 text-weight-medium text-grey-2`},Mt={class:`text-body2 text-grey-6`},Nt={key:0,class:`col-12 col-sm-6`},Pt={class:`col-12 col-sm-6`},Ft={class:`col-12 col-sm-6`},It={class:`col-12 col-sm-6`},Lt={class:`text-subtitle2 text-amber-3`},Rt={class:`responsive-fields row q-col-gutter-x-md`},zt={class:`col-12 col-sm-6`},Bt={class:`col-12 col-sm-6`},Vt={class:`text-caption text-grey-6`},Ht={class:`row q-gutter-sm create-actions`},Ut=6e4,T=Te(te({__name:`CreatePage`,setup(te){function Te(e){return e.disabled===!0}let Re=ve(),w=xe(),ze=me(),T=ye(),{t:E}=e(),Wt=n([]),Gt=n(``),D=n(``),Kt=n(null),qt=n(``),O=n(!1),k=n(!1),Jt=n(null),Yt=n(null),Xt=n([]),Zt=n(null),A=n(``),j=n(!1),M=n(`claude-opus-4-8`),N=n(`claude-opus-4-8`),Qt=n(`auto`),P=n(`auto`),F=n({}),I=n(``),L=n(null),R=n(`feature`),$t=n(!1),en=a(()=>T.global.voiceEnabled),tn=n([]),z=n(`claude-code`),nn=a(()=>tn.value.find(e=>e.id===z.value)),rn=a(()=>tn.value.map(e=>({value:e.id,label:e.displayName}))),an=a(()=>T.global.branchPrefixes.map(e=>({label:`${e}/`,value:e}))),on=[`plan`,`bypass`,`strict`,`interactive`];function sn(e,t){let n=e?T.getProjectByPath(e):void 0,r=n?.agentPermissionMode;if(typeof r==`string`&&on.includes(r))return r;let i=T.global.defaultPermissionModeByEngine?.[t];return typeof i==`string`&&on.includes(i)?i:n?.dangerouslySkipPermissions??T.global.dangerouslySkipPermissions??!0?`bypass`:t===`codex`?`plan`:`interactive`}let B=n(sn(``,z.value)),cn=a(()=>{switch(B.value){case`plan`:return`visibility`;case`bypass`:return`flash_on`;case`strict`:return`lock`;case`interactive`:return`security`}}),ln=a(()=>(Le[z.value]??on).map(e=>({value:e,label:E(`agentPermissionMode.${e}`),disabled:e===`plan`&&X.value}))),V=n([]),un=n([]),dn=n(!1),fn=n(!1);function pn(e,t){t(()=>{un.value=e?V.value.filter(t=>t.toLowerCase().includes(e.toLowerCase())):V.value})}let mn=pe();function hn(){return Kt.value?.nativeEl??null}let{showSkills:gn,selectedSkillIndex:_n,groupedDropdown:vn,flatDropdown:H,fetchSkills:yn,detectSlashFragment:bn,replaceFragmentWith:xn,closeDropdown:Sn}=je(D,hn,{excludeKoboCommands:!0});yn(),m(D,async()=>{await oe(),await bn()});function Cn(e){if(e.type===`template`){let t=mn.templates.find(t=>t.slug===e.name);if(!t)return;let n=Me(t.content,Pe({workspace:null,gitStats:null,sessionName:null}));xn(n),Sn();return}xn(`/${e.name} `),Sn()}function wn(e){!gn.value||H.value.length===0||(e.key===`ArrowDown`?(e.preventDefault(),_n.value=(_n.value+1)%H.value.length):e.key===`ArrowUp`?(e.preventDefault(),_n.value=(_n.value-1+H.value.length)%H.value.length):e.key===`Enter`&&!e.shiftKey&&!e.ctrlKey&&!e.metaKey?(e.preventDefault(),Cn(H.value[_n.value])):e.key===`Escape`&&(e.preventDefault(),Sn()))}async function Tn(){if(!(!en.value||O.value||k.value)){if(!navigator.mediaDevices?.getUserMedia||typeof MediaRecorder>`u`){w.notify({type:`warning`,message:E(`voice.notSupported`),position:`top`,timeout:4e3});return}try{let e=await navigator.mediaDevices.getUserMedia({audio:!0});Yt.value=e,Xt.value=[];let t=MediaRecorder.isTypeSupported(`audio/webm`)?`audio/webm`:``,n=t?new MediaRecorder(e,{mimeType:t}):new MediaRecorder(e);n.ondataavailable=e=>{e.data&&e.data.size>0&&Xt.value.push(e.data)},n.start(),Jt.value=n,O.value=!0,Zt.value=setTimeout(()=>{U(),w.notify({type:`info`,message:E(`voice.maxDurationReached`),position:`top`,timeout:3500})},Ut)}catch{w.notify({type:`negative`,message:E(`voice.errorMicPermission`),position:`top`,timeout:5e3})}}}async function U(){if(!O.value)return;let e=Jt.value;if(!e)return;O.value=!1,k.value=!0,Zt.value&&=(clearTimeout(Zt.value),null);let t=await new Promise(t=>{e.onstop=()=>t(new Blob(Xt.value,{type:`audio/webm`})),e.stop()});try{if(t.size===0)throw Error(`MIC_AUDIO_INVALID`);let e=new FormData;e.append(`audio`,t,`voice.webm`),e.append(`language`,T.global.voiceLanguage||`auto`);let n=await fetch(`/api/voice/transcribe`,{method:`POST`,body:e});if(!n.ok){let e=await n.json().catch(()=>({}));throw Error(String(e.code??e.error??`HTTP_${n.status}`))}let r=await n.json();r.text?.trim()&&(D.value=D.value?`${D.value.trimEnd()} ${r.text.trim()}`:r.text.trim())}catch(e){let t=e instanceof Error?e.message:`TRANSCRIPTION_FAILED`;w.notify({type:`negative`,message:E({VOICE_DISABLED:`voice.errorDisabled`,MODEL_NOT_CONFIGURED:`voice.errorModelMissing`,MODEL_NOT_INSTALLED:`voice.errorModelNotInstalled`,VOICE_RUNTIME_MISSING:`voice.errorRuntimeMissing`,MIC_AUDIO_INVALID:`voice.errorAudioInvalid`,LANGUAGE_INVALID:`voice.errorLanguageInvalid`,TRANSCRIPTION_TIMEOUT:`voice.errorTranscription`}[t]??`voice.errorTranscription`),position:`top`,timeout:5e3})}finally{Jt.value=null,Xt.value=[],Yt.value?.getTracks().forEach(e=>{e.stop()}),Yt.value=null,k.value=!1}}function En(e){return en.value?T.global.voicePttKey===`ctrl+space`?e.ctrlKey&&e.code===`Space`:e.key===`Alt`:!1}function Dn(e){!En(e)||e.repeat||(e.preventDefault(),Tn())}function On(e){En(e)&&(e.preventDefault(),U())}function kn(){O.value&&U()}function An(){document.visibilityState!==`visible`&&O.value&&U()}let W=a(()=>(Fe[z.value]??Ie).map(e=>({label:E(e.i18nLabelKey),value:e.value,description:E(e.i18nDescriptionKey)})));m(z,()=>{let e=W.value.map(e=>e.value);if(e.length>0){let t=T.global.defaultModelByEngine?.[z.value];typeof t==`string`&&e.includes(t)?M.value=t:e.includes(M.value)||(M.value=e.includes(`auto`)?`auto`:e[0]??`auto`)}e.length>0&&!e.includes(N.value)&&(N.value=e.includes(`auto`)?`auto`:e[0]??`auto`);let t=Le[z.value]??[];t.length>0&&!t.includes(B.value)&&(B.value=sn(I.value,z.value));let n=(Ne[z.value]??[]).map(e=>e.value);n.length>0&&!n.includes(P.value)&&(P.value=n.includes(`auto`)?`auto`:n[0]??`auto`)});function jn(e){let t=e.indexOf(`:`);return t>=0?e.slice(t+1).trim():e}let Mn=a(()=>(Ne[z.value]??Ne[`claude-code`]).map(e=>({value:e.value,label:jn(E(e.i18nLabelKey)),description:E(e.i18nDescriptionKey)})));m(M,e=>{let t=F.value[e];t&&Mn.value.some(e=>e.value===t)&&(P.value=t)}),m(P,e=>{F.value={...F.value,[M.value]:e},Ve({...Be(),reasoningEffortByModel:F.value})});let G=a(()=>{let e=A.value.trim();return e.startsWith(`https://www.notion.so/`)||e.startsWith(`https://app.notion.com/`)}),Nn=a(()=>/[?&]p=[0-9a-f]{32}(?:[&#]|$)/i.test(A.value)),K=n(`panel`);function Pn(){let e=A.value.trim();return K.value===`parent`&&Nn.value?e.replace(/([?&])p=[0-9a-f]{32}(?=[&#]|$)/i,`$1`).replace(/([?&])pm=[a-z]+(?=[&#]|$)/i,`$1`).replace(/[?&]+$/,``).replace(/\?&/,`?`):e}let q=n([]),J=n([]),Fn=n(``),In=n(``),Ln=a(()=>!j.value||!G.value);function Rn(){let e=Fn.value.trim();e&&(q.value.push(e),Fn.value=``)}function zn(e){q.value.splice(e,1)}function Bn(){let e=In.value.trim();e&&(J.value.push(e),In.value=``)}function Vn(e){J.value.splice(e,1)}function Hn(){j.value=!j.value,j.value||(A.value=``)}let Y=n(!1),X=n(!1),Un=n(`per_task`);m(()=>X.value,e=>{e&&B.value!==`bypass`&&(B.value=`bypass`)});function Wn(){X.value=!X.value,X.value&&(N.value=M.value)}let Z=n(``),Gn=a(()=>/\/issues\/\d+/.test(Z.value.trim()));function Kn(){Y.value=!Y.value,Y.value||(Z.value=``)}let Q=n(!1),$=n(null),qn=n([]),Jn=n(!1);async function Yn(){if(!I.value.trim()){qn.value=[];return}Jn.value=!0;try{qn.value=await ze.fetchOrphanWorktrees(I.value.trim())}catch{qn.value=[]}finally{Jn.value=!1}}function Xn(){Q.value=!Q.value,Q.value?(j.value=!1,A.value=``,Y.value=!1,Z.value=``,$t.value=!0,Yn()):$.value=null}function Zn(e){e===`existing`!==Q.value&&Xn()}m(I,()=>{$.value=null,Q.value&&Yn()}),m($,e=>{if(!e)return;let t=qn.value.find(t=>t.path===e);t&&(L.value=t.suggestedSourceBranch),$t.value=!0});async function Qn(e){if(!e.trim()){V.value=[],L.value=null;return}dn.value=!0;try{let t=await fetch(`/api/git/branches?path=${encodeURIComponent(e.trim())}`);if(!t.ok)throw Error(`HTTP ${t.status}`);let n=await t.json();V.value=n.local??n.branches??[],V.value.length>0&&!L.value&&(L.value=V.value[0]??null)}catch{V.value=[],L.value=null}finally{dn.value=!1}}function $n(e){let t=T.getProjectByPath(e);if(t){t.defaultSourceBranch&&(L.value=t.defaultSourceBranch);let e=t.taskPromptTemplate??``;(D.value===``||D.value===qt.value)&&(D.value=e,qt.value=e);let n=W.value.map(e=>e.value);if(t.defaultModel&&n.includes(t.defaultModel))M.value=t.defaultModel;else{let e=T.global.defaultModelByEngine?.[z.value];typeof e==`string`&&n.includes(e)&&(M.value=e)}}B.value=sn(e,z.value)}let er=null;m(I,e=>{er&&clearTimeout(er),er=setTimeout(()=>{L.value=null,Qn(e),$n(e)},500)});function tr(e,t){let n=e.toLowerCase();t(()=>{Wt.value=T.projectPaths.filter(e=>e.toLowerCase().includes(n)||Oe(e).toLowerCase().includes(n))})}function nr(e){let t=T.projectPaths.find(t=>Oe(t)===e);I.value=t??e}ae(async()=>{await T.fetchSettings();let e=T.global.branchPrefixes;e.length>0&&!e.includes(R.value)&&(R.value=e[0]);let t=Be();F.value=t.reasoningEffortByModel??{},t.autoLoop===!0&&(X.value=!0),t.autoLoopSessionMode===`continuous`&&(Un.value=`continuous`),t.autoLoop===!0&&t.brainstormModel&&(N.value=t.brainstormModel),t.projectPath&&T.projectPaths.includes(t.projectPath)&&(I.value=t.projectPath),B.value=sn(I.value,z.value);try{let e=await fetch(`/api/engines`);e.ok&&(tn.value=await e.json())}catch{}{let e=W.value.map(e=>e.value),t=T.global.defaultModelByEngine?.[z.value];typeof t==`string`&&e.includes(t)?M.value=t:e.length>0&&!e.includes(M.value)&&(M.value=e.includes(`auto`)?`auto`:e[0]??`auto`)}let n=F.value[M.value];n&&Mn.value.some(e=>e.value===n)&&(P.value=n);{let e=W.value.map(e=>e.value);e.length>0&&!e.includes(N.value)&&(N.value=e.includes(`auto`)?`auto`:e[0]??`auto`)}window.addEventListener(`keydown`,Dn),window.addEventListener(`keyup`,On),window.addEventListener(`blur`,kn),document.addEventListener(`visibilitychange`,An)}),ie(()=>{er&&clearTimeout(er),window.removeEventListener(`keydown`,Dn),window.removeEventListener(`keyup`,On),window.removeEventListener(`blur`,kn),document.removeEventListener(`visibilitychange`,An),Zt.value&&=(clearTimeout(Zt.value),null),O.value&&U()});function rr(e){return e.normalize(`NFD`).replace(/[\u0300-\u036f]/g,``).toLowerCase().replace(/[^a-z0-9\s-]/g,``).trim().replace(/\s+/g,`-`).replace(/-+/g,`-`).substring(0,50)}function ir(){return Gt.value.trim()?Gt.value.trim().substring(0,80):!j.value&&!Y.value&&D.value.trim()&&(D.value.trim().split(`
|
|
2
2
|
`)[0]??``).substring(0,80)||`workspace`}function ar(e){let t=(e.split(`/`).pop()??``).split(`-`);t.length>1&&/^[0-9a-f]{12,}$/i.test(t[t.length-1])&&t.pop();let n=t.join(`-`).toLowerCase(),r=n.match(/tk-(\d+)/);if(r){let e=`TK-${r[1]}`,t=n.replace(/tk-\d+/i,``).replace(/-+/g,`-`).replace(/^-|-$/g,``).substring(0,40);return t?`${e}--${t}`:e}return n.substring(0,50)||`task-${Date.now()}`}let or=a(()=>{if(j.value&&G.value)return`${R.value}/${ar(Pn())}`;let e=ir(),t=e===`workspace`?E(`createPage.branchNamePending`):rr(e);return`${R.value}/${t}`});function sr(){return j.value&&!G.value?E(`createPage.validationNotionUrl`):Y.value&&!Gn.value?E(`createPage.sentryValidation`):!j.value&&!Y.value&&!D.value.trim()?E(`createPage.validationDescription`):!j.value&&!Y.value&&(!ir()||ir()===`workspace`)&&!Gt.value.trim()&&!D.value.trim()?E(`createPage.validationName`):I.value.trim()?L.value?null:E(`createPage.validationBranch`):E(`createPage.validationPath`)}async function cr(){if(fn.value)return;let e=sr();if(e){w.notify({type:`negative`,message:e,position:`top`});return}if(Q.value&&!$.value){w.notify({type:`negative`,message:E(`createPage.pickWorktreeRequired`),position:`top`});return}fn.value=!0;try{let e=ir(),t;t=j.value&&G.value?ar(Pn()):e===`workspace`?`task-${Date.now()}`:rr(e);let n=`${R.value}/${t}`,r={name:e,projectPath:I.value.trim(),sourceBranch:L.value,...Q.value&&$.value?{worktreePath:$.value,skipSetupScript:!0,workingBranch:n}:{workingBranch:n},engine:z.value,model:M.value,reasoningEffort:P.value,...j.value&&G.value?{notionUrl:Pn()}:{},...Y.value&&Gn.value?{sentryUrl:Z.value.trim()}:{},...Ln.value&&q.value.length>0?{tasks:q.value}:{},...Ln.value&&J.value.length>0?{acceptanceCriteria:J.value}:{},...$t.value&&!Q.value?{skipSetupScript:!0}:{},...D.value.trim()?{description:D.value.trim()}:{},...X.value?{autoLoop:!0,autoLoopSessionMode:Un.value,brainstormModel:N.value,brainstormReasoningEffort:Qt.value}:{},agentPermissionMode:X.value&&B.value===`plan`?`bypass`:B.value},i=await ze.createWorkspace(r);T.global.audioWorkspaceCreatedNotifications&&he(T.global.audioWorkspaceCreatedSound,T.global.audioWorkspaceCreatedVolume),i._branchAdjusted&&w.notify({type:`info`,message:E(`createPage.branchAdjusted`,{branch:i.workingBranch}),position:`top`,timeout:6e3}),i._sourceFallback&&w.notify({type:`warning`,message:E(`createPage.localSourceFallback`),position:`top`,timeout:6e3}),Ve({projectPath:I.value.trim(),autoLoop:X.value,autoLoopSessionMode:Un.value,...X.value?{brainstormModel:N.value}:{},reasoningEffortByModel:{...F.value,[M.value]:P.value}}),ge().subscribe(i.id),ze.selectWorkspace(i.id),Re.push({name:`workspace`,params:{id:i.id}})}catch{w.notify({type:`negative`,message:E(`createPage.errorCreating`),position:`top`})}finally{fn.value=!1}}return(e,n)=>(s(),o(ke,{class:`create-page`},{default:p(()=>[l(`div`,He,[l(`header`,Ue,[l(`div`,We,r(e.$t(`createPage.title`)),1),l(`div`,Ge,r(e.$t(`createPage.subtitle`)),1)]),l(`div`,Ke,[f(_,{flat:``,bordered:``,class:`create-section-card`},{default:p(()=>[f(y,{class:`row items-start no-wrap q-gutter-md`},{default:p(()=>[f(fe,{color:`indigo-9`,"text-color":`indigo-2`,icon:`assignment`,size:`42px`}),l(`div`,null,[l(`div`,qe,r(e.$t(`createPage.sectionMission`)),1),l(`div`,Je,r(e.$t(`createPage.sectionMissionHint`)),1)])]),_:1}),f(ue,{dark:``}),f(y,{class:`column q-gutter-y-md`},{default:p(()=>[f(de,{modelValue:Gt.value,"onUpdate:modelValue":n[0]||=e=>Gt.value=e,dark:``,dense:``,outlined:``,"stack-label":``,label:e.$t(`createPage.workspaceNameLabel`),placeholder:j.value&&G.value?e.$t(`createPage.workspaceName`):e.$t(`createPage.workspaceNamePlaceholder`)},null,8,[`modelValue`,`label`,`placeholder`]),l(`div`,Ye,[f(de,{ref_key:`descriptionRef`,ref:Kt,modelValue:D.value,"onUpdate:modelValue":n[1]||=e=>D.value=e,dark:``,dense:``,outlined:``,"stack-label":``,type:`textarea`,autogrow:``,rows:6,label:e.$t(`createPage.descriptionLabel`),placeholder:j.value?e.$t(`createPage.instructions`):e.$t(`createPage.instructionsPlaceholder`),class:`create-textarea`,onKeydown:[wn,re(h(cr,[`ctrl`]),[`enter`]),re(h(cr,[`meta`]),[`enter`])]},{append:p(()=>[l(`div`,Xe,[k.value?(s(),o(be,{key:0,size:`18px`,color:`amber-6`})):c(``,!0),f(v,{flat:``,dense:``,round:``,size:`sm`,icon:k.value?`hourglass_top`:O.value?`mic`:`mic_none`,color:O.value?`red-5`:k.value?`amber-6`:`grey-6`,disable:!en.value||k.value,class:ee({"voice-btn--recording":O.value}),onMousedown:h(Tn,[`prevent`]),onMouseup:h(U,[`prevent`]),onMouseleave:h(U,[`prevent`]),onTouchstart:h(Tn,[`prevent`]),onTouchend:h(U,[`prevent`])},{default:p(()=>[f(we,null,{default:p(()=>[d(r(k.value?e.$t(`voice.transcribing`):O.value?e.$t(`voice.recording`):e.$t(`voice.holdToTalk`)),1)]),_:1})]),_:1},8,[`icon`,`color`,`disable`,`class`])])]),_:1},8,[`modelValue`,`label`,`placeholder`,`onKeydown`]),t(gn)&&t(H).length>0?(s(),o(Ae,{key:0,class:`create-slash-popup`,"grouped-dropdown":t(vn),"flat-dropdown":t(H),"selected-index":t(_n),onSelect:Cn},null,8,[`grouped-dropdown`,`flat-dropdown`,`selected-index`])):c(``,!0)]),t(T).global.notionEnabled||t(T).global.sentryEnabled?(s(),u(`div`,Ze,[l(`div`,Qe,r(e.$t(`createPage.sources`)),1),l(`div`,$e,[t(T).global.notionEnabled?(s(),o(v,{key:0,dense:``,outline:``,"no-caps":``,icon:`description`,color:j.value?`green-4`:`grey-5`,label:j.value?e.$t(`createPage.notionEnabled`):e.$t(`createPage.importNotion`),disable:Q.value,onClick:Hn},null,8,[`color`,`label`,`disable`])):c(``,!0),t(T).global.sentryEnabled?(s(),o(v,{key:1,dense:``,outline:``,"no-caps":``,icon:`bug_report`,color:Y.value?`red-4`:`grey-5`,label:Y.value?e.$t(`createPage.sentryEnabled`):e.$t(`createPage.importSentry`),disable:Q.value,onClick:Kn},null,8,[`color`,`label`,`disable`])):c(``,!0)])])):c(``,!0),f(le,{name:`slide`},{default:p(()=>[j.value?(s(),u(`div`,et,[f(de,{modelValue:A.value,"onUpdate:modelValue":n[2]||=e=>A.value=e,dark:``,outlined:``,dense:``,"stack-label":``,label:e.$t(`createPage.importNotion`),placeholder:e.$t(`createPage.notionPlaceholder`),error:!!A.value.trim()&&!G.value,"error-message":e.$t(`createPage.notionValidation`),hint:G.value?e.$t(`createPage.notionAutoExtract`):void 0},{prepend:p(()=>[f(g,{name:`link`,color:G.value?`green-4`:`grey-6`},null,8,[`color`])]),_:1},8,[`modelValue`,`label`,`placeholder`,`error`,`error-message`,`hint`]),G.value&&Nn.value?(s(),u(`div`,tt,[l(`div`,nt,[f(g,{name:`info`,color:`indigo-4`,class:`q-mr-xs`}),d(` `+r(e.$t(`createPage.notionPanelChoiceLabel`)),1)]),l(`div`,rt,[l(`div`,it,[f(_,{flat:``,bordered:``,class:ee([`peek-card full-height cursor-pointer`,{"peek-card--active":K.value===`panel`}]),onClick:n[3]||=e=>K.value=`panel`},{default:p(()=>[f(y,{class:`row items-center no-wrap q-gutter-sm q-pa-sm`},{default:p(()=>[f(g,{name:`article`,size:`24px`,class:`peek-card-icon`}),l(`div`,at,[l(`div`,ot,r(e.$t(`createPage.notionPanelOption`)),1),l(`div`,st,r(e.$t(`createPage.notionPanelOptionDesc`)),1)]),K.value===`panel`?(s(),o(g,{key:0,name:`check_circle`,color:`indigo-4`})):c(``,!0)]),_:1})]),_:1},8,[`class`])]),l(`div`,ct,[f(_,{flat:``,bordered:``,class:ee([`peek-card full-height cursor-pointer`,{"peek-card--active":K.value===`parent`}]),onClick:n[4]||=e=>K.value=`parent`},{default:p(()=>[f(y,{class:`row items-center no-wrap q-gutter-sm q-pa-sm`},{default:p(()=>[f(g,{name:`folder_open`,size:`24px`,class:`peek-card-icon`}),l(`div`,lt,[l(`div`,ut,r(e.$t(`createPage.notionParentOption`)),1),l(`div`,dt,r(e.$t(`createPage.notionParentOptionDesc`)),1)]),K.value===`parent`?(s(),o(g,{key:0,name:`check_circle`,color:`indigo-4`})):c(``,!0)]),_:1})]),_:1},8,[`class`])])])])):c(``,!0)])):c(``,!0)]),_:1}),f(le,{name:`slide`},{default:p(()=>[Y.value?(s(),u(`div`,ft,[f(de,{modelValue:Z.value,"onUpdate:modelValue":n[5]||=e=>Z.value=e,dark:``,outlined:``,dense:``,"stack-label":``,label:e.$t(`createPage.importSentry`),placeholder:e.$t(`createPage.sentryPlaceholder`),error:!!Z.value.trim()&&!Gn.value,"error-message":e.$t(`createPage.sentryValidation`),hint:Gn.value?e.$t(`createPage.sentryAutoExtract`):void 0},{prepend:p(()=>[f(g,{name:`link`,color:Gn.value?`red-4`:`grey-6`},null,8,[`color`])]),_:1},8,[`modelValue`,`label`,`placeholder`,`error`,`error-message`,`hint`])])):c(``,!0)]),_:1}),Ln.value?(s(),u(`div`,pt,[l(`div`,mt,[f(Ce,{dark:``,dense:``,"expand-separator":``,icon:`checklist`,label:e.$t(`createPage.tasks`,{count:q.value.length}),class:`manual-expansion rounded-borders`},{default:p(()=>[l(`div`,ht,[f(de,{modelValue:Fn.value,"onUpdate:modelValue":n[6]||=e=>Fn.value=e,dark:``,dense:``,outlined:``,placeholder:e.$t(`createPage.addTask`),onKeydown:re(h(Rn,[`prevent`]),[`enter`])},{append:p(()=>[f(v,{flat:``,dense:``,round:``,icon:`add`,color:`indigo-4`,disable:!Fn.value.trim(),onClick:Rn},{default:p(()=>[f(we,null,{default:p(()=>[d(r(e.$t(`tooltip.addTask`)),1)]),_:1})]),_:1},8,[`disable`])]),_:1},8,[`modelValue`,`placeholder`,`onKeydown`]),q.value.length?(s(),u(`div`,gt,[(s(!0),u(ne,null,se(q.value,(e,t)=>(s(),o(Ee,{key:`task-${t}`,dark:``,dense:``,removable:``,color:`grey-9`,"text-color":`grey-3`,onRemove:e=>zn(t)},{default:p(()=>[d(r(e),1)]),_:2},1032,[`onRemove`]))),128))])):c(``,!0)])]),_:1},8,[`label`])]),l(`div`,_t,[f(Ce,{dark:``,dense:``,"expand-separator":``,icon:`fact_check`,label:e.$t(`createPage.acceptanceCriteria`,{count:J.value.length}),class:`manual-expansion rounded-borders`},{default:p(()=>[l(`div`,vt,[f(de,{modelValue:In.value,"onUpdate:modelValue":n[7]||=e=>In.value=e,dark:``,dense:``,outlined:``,placeholder:e.$t(`createPage.addCriterion`),onKeydown:re(h(Bn,[`prevent`]),[`enter`])},{append:p(()=>[f(v,{flat:``,dense:``,round:``,icon:`add`,color:`indigo-4`,disable:!In.value.trim(),onClick:Bn},{default:p(()=>[f(we,null,{default:p(()=>[d(r(e.$t(`tooltip.addCriterion`)),1)]),_:1})]),_:1},8,[`disable`])]),_:1},8,[`modelValue`,`placeholder`,`onKeydown`]),J.value.length?(s(),u(`div`,yt,[(s(!0),u(ne,null,se(J.value,(e,t)=>(s(),o(Ee,{key:`criterion-${t}`,dark:``,dense:``,removable:``,color:`grey-9`,"text-color":`grey-3`,onRemove:e=>Vn(t)},{default:p(()=>[d(r(e),1)]),_:2},1032,[`onRemove`]))),128))])):c(``,!0)])]),_:1},8,[`label`])])])):c(``,!0)]),_:1})]),_:1}),f(_,{flat:``,bordered:``,class:`create-section-card`},{default:p(()=>[f(y,{class:`row items-start no-wrap q-gutter-md`},{default:p(()=>[f(fe,{color:`blue-grey-9`,"text-color":`blue-grey-2`,icon:`account_tree`,size:`42px`}),l(`div`,null,[l(`div`,bt,r(e.$t(`createPage.sectionGit`)),1),l(`div`,xt,r(e.$t(`createPage.sectionGitHint`)),1)])]),_:1}),f(ue,{dark:``}),f(y,{class:`column q-gutter-y-md`},{default:p(()=>[l(`div`,null,[l(`div`,St,r(e.$t(`createPage.worktreeMode`)),1),f(De,{"model-value":Q.value?`existing`:`new`,dense:``,spread:``,"no-caps":``,unelevated:``,"toggle-color":`indigo-7`,color:`grey-9`,"text-color":`grey-4`,options:[{label:e.$t(`createPage.worktreeNew`),value:`new`,icon:`add_box`},{label:e.$t(`createPage.worktreeExisting`),value:`existing`,icon:`folder_open`}],"onUpdate:modelValue":Zn},null,8,[`model-value`,`options`])]),l(`div`,Ct,[l(`div`,wt,[f(C,{modelValue:I.value,"onUpdate:modelValue":n[8]||=e=>I.value=e,options:Wt.value,dark:``,dense:``,outlined:``,"stack-label":``,"use-input":``,"fill-input":``,"hide-selected":``,"input-debounce":`0`,"new-value-mode":`add`,label:e.$t(`createPage.projectLabel`),placeholder:e.$t(`createPage.projectPath`),behavior:t(T).projectPaths.length>0?`menu`:`dialog`,"option-label":e=>e?t(Oe)(e):``,onFilter:tr,onInputValue:nr},{prepend:p(()=>[f(g,{name:`folder`})]),option:p(({opt:e,itemProps:n})=>[f(x,i(ce(n)),{default:p(()=>[f(b,null,{default:p(()=>[f(S,null,{default:p(()=>[d(r(t(Oe)(e)),1)]),_:2},1024),f(S,{caption:``},{default:p(()=>[d(r(e),1)]),_:2},1024)]),_:2},1024)]),_:2},1040)]),"no-option":p(()=>[f(x,null,{default:p(()=>[f(b,{class:`text-grey-6`},{default:p(()=>[d(r(e.$t(`createPage.enterPath`)),1)]),_:1})]),_:1})]),_:1},8,[`modelValue`,`options`,`label`,`placeholder`,`behavior`,`option-label`])]),l(`div`,Tt,[f(C,{modelValue:L.value,"onUpdate:modelValue":n[9]||=e=>L.value=e,options:un.value,dark:``,dense:``,outlined:``,"stack-label":``,"use-input":``,"input-debounce":`0`,label:e.$t(`createPage.sourceBranch`),loading:dn.value,disable:!I.value.trim()||dn.value,onFilter:pn},{prepend:p(()=>[f(g,{name:`call_split`})]),"no-option":p(()=>[f(x,null,{default:p(()=>[f(b,{class:`text-grey-6`},{default:p(()=>[d(r(I.value.trim()?e.$t(`createPage.noBranches`):e.$t(`createPage.enterPath`)),1)]),_:1})]),_:1})]),_:1},8,[`modelValue`,`options`,`label`,`loading`,`disable`])])]),Q.value?c(``,!0):(s(),u(`div`,Et,[l(`div`,Dt,[f(C,{modelValue:R.value,"onUpdate:modelValue":n[10]||=e=>R.value=e,options:an.value,dark:``,dense:``,outlined:``,"stack-label":``,"emit-value":``,"map-options":``,label:e.$t(`createPage.branchType`)},{prepend:p(()=>[f(g,{name:`account_tree`})]),_:1},8,[`modelValue`,`options`,`label`])]),l(`div`,Ot,[f(Se,{dark:``,dense:``,outlined:``,"stack-label":``,readonly:``,label:e.$t(`createPage.workingBranchPreview`)},{control:p(()=>[l(`div`,kt,r(or.value),1)]),prepend:p(()=>[f(g,{name:`fork_right`})]),_:1},8,[`label`])])])),Q.value?(s(),o(C,{key:1,modelValue:$.value,"onUpdate:modelValue":n[11]||=e=>$.value=e,options:qn.value,dark:``,dense:``,outlined:``,"stack-label":``,"option-label":`branch`,"option-value":`path`,"emit-value":``,"map-options":``,"use-input":``,label:e.$t(`createPage.worktreePickerLabel`),loading:Jn.value,disable:!I.value.trim()||Jn.value},{prepend:p(()=>[f(g,{name:`folder_open`,color:`cyan-5`})]),option:p(e=>[f(x,i(ce(e.itemProps)),{default:p(()=>[f(b,null,{default:p(()=>[f(S,null,{default:p(()=>[d(r(e.opt.branch),1)]),_:2},1024),f(S,{caption:``},{default:p(()=>[d(r(e.opt.path),1)]),_:2},1024)]),_:2},1024)]),_:2},1040)]),"no-option":p(()=>[f(x,null,{default:p(()=>[f(b,{class:`text-grey-6`},{default:p(()=>[d(r(I.value.trim()?e.$t(`createPage.noOrphanWorktrees`):e.$t(`createPage.enterPath`)),1)]),_:1})]),_:1})]),_:1},8,[`modelValue`,`options`,`label`,`loading`,`disable`])):c(``,!0)]),_:1})]),_:1}),f(_,{flat:``,bordered:``,class:`create-section-card`},{default:p(()=>[f(y,{class:`row items-start no-wrap q-gutter-md`},{default:p(()=>[f(fe,{color:`deep-purple-9`,"text-color":`deep-purple-2`,icon:`smart_toy`,size:`42px`}),l(`div`,At,[l(`div`,jt,r(e.$t(`createPage.sectionAgent`)),1),l(`div`,Mt,r(e.$t(`createPage.sectionAgentHint`)),1)]),f(_e,{"model-value":X.value,dense:``,color:`amber-6`,icon:`autorenew`,label:e.$t(`autoLoop.toggle`),"left-label":``,"onUpdate:modelValue":Wn},null,8,[`model-value`,`label`])]),_:1}),f(ue,{dark:``}),f(Ce,{dark:``,dense:``,"expand-separator":``,icon:`tune`,label:e.$t(`createPage.configureAgent`),"header-class":`agent-config-header`},{header:p(()=>[f(b,{avatar:``},{default:p(()=>[f(g,{name:`tune`,color:`indigo-3`})]),_:1}),f(b,null,{default:p(()=>[f(S,null,{default:p(()=>[d(r(e.$t(`createPage.configureAgent`)),1)]),_:1}),f(S,{caption:``,class:`agent-summary row q-gutter-x-xs q-mt-xs`},{default:p(()=>[f(Ee,{dense:``,color:`grey-9`,"text-color":`grey-3`,icon:`hub`},{default:p(()=>[d(r(nn.value?.displayName??z.value),1)]),_:1}),f(Ee,{dense:``,color:`grey-9`,"text-color":`grey-3`},{default:p(()=>[d(r(W.value.find(e=>e.value===M.value)?.label??M.value),1)]),_:1}),f(Ee,{dense:``,color:`grey-9`,"text-color":`grey-3`,icon:`psychology`},{default:p(()=>[d(r(Mn.value.find(e=>e.value===P.value)?.label??P.value),1)]),_:1}),f(Ee,{dense:``,color:`grey-9`,"text-color":`grey-3`,icon:cn.value},{default:p(()=>[d(r(ln.value.find(e=>e.value===B.value)?.label??B.value),1)]),_:1},8,[`icon`])]),_:1})]),_:1})]),default:p(()=>[f(y,{class:`responsive-fields row q-col-gutter-x-md q-pt-md`},{default:p(()=>[rn.value.length>0?(s(),u(`div`,Nt,[f(C,{modelValue:z.value,"onUpdate:modelValue":n[12]||=e=>z.value=e,options:rn.value,dark:``,dense:``,outlined:``,"stack-label":``,"emit-value":``,"map-options":``,"option-value":`value`,"option-label":`label`,label:e.$t(`engine.select`)},null,8,[`modelValue`,`options`,`label`])])):c(``,!0),l(`div`,Pt,[f(C,{modelValue:M.value,"onUpdate:modelValue":n[13]||=e=>M.value=e,options:W.value,dark:``,dense:``,outlined:``,"stack-label":``,"emit-value":``,"map-options":``,"option-value":`value`,"option-label":`label`,label:e.$t(`engine.model`)},{option:p(({opt:e,itemProps:t})=>[f(x,i(ce(t)),{default:p(()=>[f(b,null,{default:p(()=>[f(S,null,{default:p(()=>[d(r(e.label),1)]),_:2},1024),f(S,{caption:``},{default:p(()=>[d(r(e.description),1)]),_:2},1024)]),_:2},1024)]),_:2},1040)]),_:1},8,[`modelValue`,`options`,`label`])]),l(`div`,Ft,[f(C,{modelValue:P.value,"onUpdate:modelValue":n[14]||=e=>P.value=e,options:Mn.value,dark:``,dense:``,outlined:``,"stack-label":``,"emit-value":``,"map-options":``,"option-value":`value`,"option-label":`label`,label:e.$t(`engine.effort`)},{option:p(({opt:e,itemProps:t})=>[f(x,i(ce(t)),{default:p(()=>[f(b,null,{default:p(()=>[f(S,null,{default:p(()=>[d(r(e.label),1)]),_:2},1024),f(S,{caption:``},{default:p(()=>[d(r(e.description),1)]),_:2},1024)]),_:2},1024)]),_:2},1040)]),_:1},8,[`modelValue`,`options`,`label`])]),l(`div`,It,[f(C,{modelValue:B.value,"onUpdate:modelValue":n[15]||=e=>B.value=e,options:ln.value,dark:``,dense:``,outlined:``,"stack-label":``,"emit-value":``,"map-options":``,"option-value":`value`,"option-label":`label`,"option-disable":Te,disable:X.value,label:e.$t(`agentPermissionMode.label`),hint:X.value?e.$t(`agentPermissionMode.autoLoopLocked`):void 0},null,8,[`modelValue`,`options`,`disable`,`label`,`hint`])])]),_:1})]),_:1},8,[`label`]),f(le,{name:`slide`},{default:p(()=>[X.value?(s(),o(y,{key:0,class:`auto-loop-panel column`},{default:p(()=>[l(`div`,Lt,r(e.$t(`autoLoop.startInMode`)),1),f(De,{modelValue:Un.value,"onUpdate:modelValue":n[16]||=e=>Un.value=e,dense:``,size:`sm`,spread:``,"no-caps":``,unelevated:``,class:`auto-loop-session-toggle`,"toggle-color":`indigo-7`,color:`grey-9`,"text-color":`grey-4`,options:[{label:e.$t(`autoLoop.sessionMode.perTask`),value:`per_task`,icon:`restart_alt`},{label:e.$t(`autoLoop.sessionMode.continuous`),value:`continuous`,icon:`link`}]},null,8,[`modelValue`,`options`]),l(`div`,Rt,[l(`div`,zt,[f(C,{modelValue:N.value,"onUpdate:modelValue":n[17]||=e=>N.value=e,options:W.value,dark:``,dense:``,outlined:``,"stack-label":``,"emit-value":``,"map-options":``,"option-value":`value`,"option-label":`label`,label:e.$t(`autoLoop.brainstormModelPrefix`)},null,8,[`modelValue`,`options`,`label`])]),l(`div`,Bt,[f(C,{modelValue:Qt.value,"onUpdate:modelValue":n[18]||=e=>Qt.value=e,options:Mn.value,dark:``,dense:``,outlined:``,"stack-label":``,"emit-value":``,"map-options":``,"option-value":`value`,"option-label":`label`,label:e.$t(`autoLoop.brainstormReasoningPrefix`)},null,8,[`modelValue`,`options`,`label`])])])]),_:1})):c(``,!0)]),_:1})]),_:1}),f(Ce,{dark:``,dense:``,"expand-separator":``,icon:`settings`,label:e.$t(`createPage.advancedOptions`),class:`advanced-options rounded-borders`},{default:p(()=>[f(y,null,{default:p(()=>[f(_e,{modelValue:$t.value,"onUpdate:modelValue":n[19]||=e=>$t.value=e,dense:``,color:`orange-5`,icon:`play_disabled`,label:e.$t(`createPage.skipSetupScript`),disable:Q.value},null,8,[`modelValue`,`label`,`disable`])]),_:1})]),_:1},8,[`label`]),f(_,{flat:``,bordered:``,class:`create-actions-card`},{default:p(()=>[f(y,{class:`row items-center justify-between q-gutter-md`},{default:p(()=>[l(`div`,Vt,r(j.value?e.$t(`createPage.notionExtractHint`):e.$t(`createPage.keyboardHint`)),1),l(`div`,Ht,[f(v,{flat:``,dense:``,"no-caps":``,color:`grey-5`,label:e.$t(`common.cancel`),onClick:n[20]||=e=>t(Re).back()},null,8,[`label`]),f(v,{unelevated:``,dense:``,"no-caps":``,color:`indigo-6`,"icon-right":`arrow_forward`,label:e.$t(`createPage.createWorkspace`),loading:fn.value,disable:fn.value||Q.value&&!$.value,onClick:cr},null,8,[`label`,`loading`,`disable`])])]),_:1})]),_:1})])])]),_:1}))}}),[[`__scopeId`,`data-v-9bb1c206`]]);export{T as default};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/vs-
|
|
2
|
-
import{n as e}from"./vue-i18n-C3W5i7h6.js";import{B as t,C as n,St as r,wt as i,yt as a}from"./reactivity.esm-bundler-DtSZKRQB.js";import{$ as o,A as s,B as c,H as l,It as u,Mt as d,Rt as f,Tt as p,U as m,V as h,W as g,Wt as ee,X as _,Z as v,_n as y,fn as b,yn as x}from"./runtime-dom.esm-bundler-DgevF6KV.js";import{t as S}from"./QIcon--SvgE-nS.js";import{t as te}from"./QSeparator-BdyRE-AM.js";import{o as C}from"./use-checkbox-SrkgiJho.js";import{G as w,a as ne,d as re,f as ie,l as ae}from"./index-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/vs-BJBy3q9a.js","assets/vue-i18n-C3W5i7h6.js","assets/reactivity.esm-bundler-DtSZKRQB.js","assets/runtime-dom.esm-bundler-DgevF6KV.js","assets/index-M0ntkdkQ.js","assets/QIcon--SvgE-nS.js","assets/QSeparator-BdyRE-AM.js","assets/use-checkbox-SrkgiJho.js","assets/index-CK1nk7qr.css","assets/editor.api-ByJzr33G.js","assets/editor-vZnmUXVO.css","assets/vs-JJSFJJVJ.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{n as e}from"./vue-i18n-C3W5i7h6.js";import{B as t,C as n,St as r,wt as i,yt as a}from"./reactivity.esm-bundler-DtSZKRQB.js";import{$ as o,A as s,B as c,H as l,It as u,Mt as d,Rt as f,Tt as p,U as m,V as h,W as g,Wt as ee,X as _,Z as v,_n as y,fn as b,yn as x}from"./runtime-dom.esm-bundler-DgevF6KV.js";import{t as S}from"./QIcon--SvgE-nS.js";import{t as te}from"./QSeparator-BdyRE-AM.js";import{o as C}from"./use-checkbox-SrkgiJho.js";import{G as w,a as ne,d as re,f as ie,l as ae}from"./index-M0ntkdkQ.js";import{t as oe}from"./QSpinnerDots-B4RmFJUj.js";import{n as se,r as ce,t as le}from"./use-quasar-B6Aitpct.js";import{l as ue}from"./QSelect-DCm1FiOk.js";import{t as T}from"./QTooltip-8fQLc_4N.js";import{n as de,r as fe}from"./pending-diff-open-BqHyeaCb.js";import{t as pe}from"./ClosePopup-Bl8KdN_j.js";import{t as E}from"./render-chat-markdown-BQBEE7Bn.js";import{t as D}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{t as O}from"./QBadge-sMJZ_eZm.js";import{t as me}from"./QSpace-D9UEvM99.js";import{t as he}from"./QChip-CMB-IbQd.js";import{t as ge}from"./QBtnToggle-BKZW3k57.js";import{t as _e}from"./QList-Be_FbTA3.js";import{i as ve,n as ye,r as be}from"./MainLayout-BDVUkruC.js";function xe(e){return new Worker(`/assets/editor.worker-D-m8IBMa.js`,{name:e?.name})}function Se(e){return new Worker(`/assets/css.worker-JKZQyld4.js`,{name:e?.name})}function Ce(e){return new Worker(`/assets/html.worker-BUr90sI4.js`,{name:e?.name})}function we(e){return new Worker(`/assets/json.worker-BOODjG9U.js`,{name:e?.name})}function Te(e){return new Worker(`/assets/ts.worker-C-oGa8JT.js`,{name:e?.name})}function k(e){if(!e.filePath||e.filePath.startsWith(`/`))throw Error(`Invalid filePath: must be non-empty POSIX path relative to workspace root`);return{id:crypto.randomUUID(),filePath:e.filePath,line:e.line,content:e.content,createdAt:new Date().toISOString()}}function A(e){let t=e.split(`
|
|
3
3
|
`);return t.length===1?e:t.map((e,t)=>t===0?e:` ${e}`).join(`
|
|
4
4
|
`)}function j(e){let{comments:t,globalMessage:n}=e;if(t.length===0)return`## Code review\n\n${n}`;let r=new Map;for(let e of t){let t=r.get(e.filePath)??[];t.push(e),r.set(e.filePath,t)}for(let e of r.values())e.sort((e,t)=>e.line-t.line||e.createdAt.localeCompare(t.createdAt));let i=Array.from(r.keys()).sort(),a=i.map(e=>`### \`${e}\`\n\n${r.get(e).map(e=>`- **L${e.line}** : ${A(e.content)}`).join(`
|
|
5
5
|
`)}`),o=i.length,s=`_${t.length} comment${t.length===1?``:`s`} across ${o} file${o===1?``:`s`}. Address them and ping me back when done._`;return`## Code review — please address the following${n?`\n\n${n}`:``}\n\n${a.join(`
|
|
6
6
|
|
|
7
|
-
`)}\n\n---\n${s}`}var Ee=300;function M(e){return`kobo:review-draft:${e}`}function N(e){let t=localStorage.getItem(M(e));if(!t)return{comments:[],globalMessage:``};try{let e=JSON.parse(t);return{comments:Array.isArray(e.comments)?e.comments:[],globalMessage:typeof e.globalMessage==`string`?e.globalMessage:``}}catch{return{comments:[],globalMessage:``}}}function De(e,t){let r=n(N(e)),i=null;function a(){i!==null&&clearTimeout(i),i=setTimeout(()=>{i=null;try{localStorage.setItem(M(e),JSON.stringify(r.value))}catch(e){console.warn(`[review-draft] persist failed:`,e)}},Ee)}function o(){if(i!==null){clearTimeout(i),i=null;try{localStorage.setItem(M(e),JSON.stringify(r.value))}catch(e){console.warn(`[review-draft] flush failed:`,e)}}}function s(e){let t=k(e);return r.value.comments.push(t),a(),t}function c(e,t){let n=r.value.comments.find(t=>t.id===e);n&&(n.content=t,a())}function l(e){r.value.comments=r.value.comments.filter(t=>t.id!==e),a()}function u(e){r.value.globalMessage=e,a()}function d(){r.value={comments:[],globalMessage:``},i!==null&&(clearTimeout(i),i=null),localStorage.removeItem(M(e))}async function f(n){if(r.value.comments.length===0&&r.value.globalMessage.trim()===``)return{ok:!1,error:`Draft is empty`};o();let i=j(r.value);try{await t.sendChatMessage(e,i,n)}catch(e){return{ok:!1,error:e instanceof Error?e.message:String(e)}}return d(),{ok:!0}}return{draft:r,addComment:s,updateComment:c,deleteComment:l,setGlobalMessage:u,clearDraft:d,flush:o,submit:f}}var P={cjs:`javascript`,css:`css`,cts:`typescript`,go:`go`,html:`html`,js:`javascript`,json:`json`,jsx:`javascript`,md:`markdown`,mjs:`javascript`,mts:`typescript`,php:`php`,phtml:`php`,py:`python`,rs:`rust`,scss:`scss`,sh:`shell`,sql:`sql`,ts:`typescript`,tsx:`typescript`,vue:`html`,yaml:`yaml`,yml:`yaml`};function Oe(e){let t=e.split(`.`).pop()?.toLowerCase();return t&&P[t]||`plaintext`}var F={class:`review-comment-block`},I={class:`comment-actions q-mt-xs`},L=[`innerHTML`],R={class:`comment-footer`},z={class:`comment-time text-caption text-grey-7`},B={class:`comment-actions q-mt-xs`},ke=D(o({__name:`ReviewCommentBlock`,props:{comments:{},startInAddMode:{type:Boolean}},emits:[`add`,`update`,`delete`,`dismissEmpty`],setup(t,{emit:r}){let o=t,c=r,{t:u}=e(),d=le(),p=n(null),b=n(``),x=n(o.startInAddMode===!0),S=n(``);function te(e){return E(e)}function ne(e){let t=Date.now()-new Date(e).getTime(),n=Math.floor(t/6e4);if(n<1)return u(`common.justNow`);if(n<60)return u(`common.minutesAgo`,{count:n});let r=Math.floor(n/60);return r<24?u(`common.hoursAgo`,{count:r}):u(`common.daysAgo`,{count:Math.floor(r/24)})}function re(e){p.value=e.id,b.value=e.content}function ie(){p.value=null,b.value=``}function ae(e){let t=b.value.trim();t&&(c(`update`,e,t),p.value=null,b.value=``)}function oe(e){d.dialog({title:u(`diff.deleteComment`),message:u(`diff.deleteCommentConfirm`),cancel:!0,persistent:!0,ok:{label:u(`diff.deleteComment`),color:`negative`,flat:!1,unelevated:!0}}).onOk(()=>{c(`delete`,e)})}function se(){x.value=!1,S.value=``,o.comments.length===0&&c(`dismissEmpty`)}function ce(){let e=S.value.trim();e&&(c(`add`,e),x.value=!1,S.value=``)}return(e,n)=>(f(),g(`div`,F,[(f(!0),g(s,null,ee(t.comments,(t,r)=>(f(),g(`div`,{key:t.id,class:a([`comment-thread-item`,{"with-separator":r>0}])},[p.value===t.id?(f(),g(s,{key:0},[v(C,{modelValue:b.value,"onUpdate:modelValue":n[0]||=e=>b.value=e,type:`textarea`,autogrow:``,dense:``,dark:``,outlined:``,autofocus:``,class:`comment-textarea`,placeholder:e.$t(`diff.commentPlaceholder`)},null,8,[`modelValue`,`placeholder`]),h(`div`,I,[v(w,{flat:``,dense:``,size:`sm`,label:e.$t(`common.cancel`),onClick:ie},null,8,[`label`]),v(w,{unelevated:``,dense:``,size:`sm`,color:`primary`,label:e.$t(`common.save`),onClick:e=>ae(t.id)},null,8,[`label`,`onClick`])])],64)):(f(),g(s,{key:1},[h(`div`,{class:`comment-content`,innerHTML:te(t.content)},null,8,L),h(`div`,R,[h(`span`,z,i(ne(t.createdAt)),1),v(w,{flat:``,dense:``,round:``,size:`xs`,icon:`edit`,color:`grey-5`,onClick:e=>re(t)},{default:y(()=>[v(T,null,{default:y(()=>[_(i(e.$t(`diff.editComment`)),1)]),_:1})]),_:1},8,[`onClick`]),v(w,{flat:``,dense:``,round:``,size:`xs`,icon:`delete`,color:`grey-5`,onClick:e=>oe(t.id)},{default:y(()=>[v(T,null,{default:y(()=>[_(i(e.$t(`diff.deleteComment`)),1)]),_:1})]),_:1},8,[`onClick`])])],64))],2))),128)),x.value?(f(),g(s,{key:0},[v(C,{modelValue:S.value,"onUpdate:modelValue":n[1]||=e=>S.value=e,type:`textarea`,autogrow:``,dense:``,dark:``,outlined:``,autofocus:``,class:`comment-textarea q-mt-sm`,placeholder:e.$t(`diff.commentPlaceholder`)},null,8,[`modelValue`,`placeholder`]),h(`div`,B,[v(w,{flat:``,dense:``,size:`sm`,label:e.$t(`common.cancel`),onClick:se},null,8,[`label`]),v(w,{unelevated:``,dense:``,size:`sm`,color:`primary`,disable:!S.value.trim(),label:e.$t(`diff.addComment`),onClick:ce},null,8,[`disable`,`label`])])],64)):t.comments.length>0?(f(),l(w,{key:1,flat:``,dense:``,size:`sm`,icon:`reply`,label:e.$t(`diff.replyComment`),class:`reply-btn q-mt-xs`,onClick:n[2]||=e=>x.value=!0},null,8,[`label`])):m(``,!0)]))}}),[[`__scopeId`,`data-v-9abff76f`]]),V={class:`review-draft-panel q-pa-sm`},H={class:`text-caption text-uppercase text-weight-bold text-grey-6 q-mb-sm`,style:{"letter-spacing":`0.05em`}},U={key:0,class:`text-caption text-grey-7 q-pa-sm`},Ae=[`onClick`],je={style:{"font-family":`'Roboto Mono', monospace`,"font-size":`11px`}},Me=[`onClick`],Ne={class:`text-grey-6 q-mr-xs`,style:{"font-family":`monospace`}},W={class:`text-grey-3 ellipsis`},Pe={class:`global-message-box q-mt-sm`},Fe=D(o({__name:`ReviewDraftPanel`,props:{comments:{},globalMessage:{},submitting:{type:Boolean}},emits:[`updateGlobal`,`jumpToFile`,`jumpToComment`,`submit`],setup(e,{emit:t}){let n=e,r=t,a=c(()=>n.comments.length),o=c(()=>{let e=new Map;for(let t of n.comments){let n=e.get(t.filePath)??[];n.push(t),e.set(t.filePath,n)}for(let t of e.values())t.sort((e,t)=>e.line-t.line||e.createdAt.localeCompare(t.createdAt));return Array.from(e.entries()).sort(([e],[t])=>e.localeCompare(t)).map(([e,t])=>({filePath:e,comments:t}))});function l(e){let t=e.replace(/\n+/g,` `).trim();return t.length>80?`${t.slice(0,77)}…`:t}return(t,n)=>(f(),g(`div`,V,[h(`div`,H,i(t.$t(`diff.reviewDraft`)),1),v(fe,{class:`comments-scroll`},{default:y(()=>[o.value.length===0?(f(),g(`div`,U,i(t.$t(`diff.reviewEmpty`)),1)):m(``,!0),(f(!0),g(s,null,ee(o.value,e=>(f(),g(`div`,{key:e.filePath,class:`file-group q-mb-sm`},[h(`div`,{class:`file-group-header text-grey-3 cursor-pointer ellipsis`,onClick:t=>r(`jumpToFile`,e.filePath)},[v(S,{name:`description`,size:`14px`,color:`indigo-4`,class:`q-mr-xs`}),h(`span`,je,i(e.filePath),1),v(O,{label:String(e.comments.length),color:`indigo-8`,"text-color":`white`,class:`q-ml-xs`},null,8,[`label`])],8,Ae),(f(!0),g(s,null,ee(e.comments,e=>(f(),g(`div`,{key:e.id,class:`draft-line cursor-pointer`,onClick:t=>r(`jumpToComment`,e.filePath,e.line)},[h(`span`,Ne,`L`+i(e.line),1),h(`span`,W,i(l(e.content)),1)],8,Me))),128))]))),128))]),_:1}),h(`div`,Pe,[v(C,{"model-value":e.globalMessage,type:`textarea`,autogrow:``,rows:`3`,dense:``,dark:``,outlined:``,placeholder:t.$t(`diff.reviewGlobalPlaceholder`),class:`global-textarea`,"onUpdate:modelValue":n[0]||=e=>r(`updateGlobal`,String(e))},null,8,[`model-value`,`placeholder`]),v(w,{unelevated:``,"no-caps":``,color:`primary`,class:`full-width q-mt-sm`,disable:a.value===0&&!e.globalMessage.trim(),loading:e.submitting,onClick:n[1]||=e=>r(`submit`)},{default:y(()=>[_(i(t.$t(`diff.submitReview`,{n:a.value})),1)]),_:1},8,[`disable`,`loading`])])]))}}),[[`__scopeId`,`data-v-fd6b00c0`]]),Ie={class:`diff-viewer column full-height`},Le={class:`diff-header row items-center q-px-md q-py-sm no-wrap`},Re={class:`text-body1 text-weight-medium text-grey-3`},ze={key:0,class:`text-caption text-grey-6 q-ml-md`,style:{"font-size":`11px`}},Be={class:`text-grey-7`},Ve={class:`text-green-4`},He={class:`text-grey-7`},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`}},We={class:`row col no-wrap`,style:{"min-height":`0`}},Ge={key:0,class:`review-draft-panel-wrapper`,style:{width:`300px`,minWidth:`240px`,flexShrink:0,borderRight:`1px solid #2a2a4a`}},Ke={key:1,class:`text-caption text-grey-8 q-pa-sm`},qe={key:2,class:`text-caption text-grey-8 q-pa-sm`},Je={class:`text-grey-4`,style:{"font-family":`'Roboto Mono', monospace`,"font-size":`11px`}},Ye={class:`text-grey-3 ellipsis`,style:{"font-family":`'Roboto Mono', monospace`,"font-size":`11px`}},Xe={key:0,class:`dirty-dot`},Ze={class:`col column`,style:{"min-width":`0`,position:`relative`}},Qe={key:0,class:`col column items-center justify-center`},$e={key:1,class:`col column items-center justify-center text-grey-8 text-caption`},et=`kobo:diff:hideUnchanged`,tt=`kobo:diff:includeUntracked`,nt=`kobo:diff:mode`,rt=`kobo:diffViewerFileListWidth`,it=180,at=600,ot=D(o({__name:`DiffViewer`,props:{workspaceId:{},initialReviewMode:{type:Boolean},compareFrom:{},compareTo:{}},emits:[`close`,`sendToChat`],setup(a,{emit:o}){let E=a,D=o,{t:k}=e(),A=le(),j=c(()=>!!E.compareFrom&&!!E.compareTo),Ee=c(()=>j.value?`${(E.compareFrom??``).slice(0,7)} ↔ ${(E.compareTo??``).slice(0,7)}`:``),M=n([]),N=n(``),P=n(``),F=n(null),I=n(!1),L=n(!1),R=n(null),z=n(`side`),B=n(localStorage.getItem(et)!==`0`),V=n(localStorage.getItem(tt)===`1`),H=n(`branch`),U=n(E.initialReviewMode||localStorage.getItem(nt)===`review`?`review`:`inspect`);b(U,e=>{localStorage.setItem(nt,e),e===`review`?je():Ae()});function Ae(){yt();for(let e of Y)e.dispose();Y=[],q&&q.getModifiedEditor().getDomNode()?.classList.remove(`review-mode-active`)}function je(){q&&(Dt(),F.value&&Ct(F.value))}let Me=ae(),Ne=re(),W=De(E.workspaceId,{sendChatMessage:async(e,t,n)=>{if(!Me.isConnected())throw Error(`WebSocket not connected — cannot send the review`);Me.sendChatMessage(e,t,n)}}),Pe=c(()=>W.draft.value.comments),ot=c(()=>W.draft.value.globalMessage),G=n(!1);async function st(){G.value=!0;try{let e=await W.submit(Ne.selectedSessionId??void 0);e.ok?(A.notify({type:`positive`,message:k(`diff.reviewSubmitted`),position:`top`}),D(`close`)):A.notify({type:`negative`,message:k(`diff.reviewSubmitFailed`,{error:e.error??``}),position:`top`})}finally{G.value=!1}}let ct=c(()=>{let e=new Map;if(U.value!==`review`)return e;for(let t of W.draft.value.comments)e.set(t.filePath,(e.get(t.filePath)??0)+1);return e});function lt(e){if(U.value!==`review`||!e)return 0;let t=0;for(let n of W.draft.value.comments)n.filePath.startsWith(`${e}/`)&&t++;return t}function ut(e){return e.nodeKey.startsWith(`dir:`)?e.nodeKey.slice(4):``}function dt(e){F.value=e}async function ft(e=3e3){let t=Date.now();for(;L.value;){if(Date.now()-t>e)return;await new Promise(e=>setTimeout(e,30))}}async function pt(e,t){F.value!==e&&(F.value=e,await ft()),q?.getModifiedEditor().revealLineInCenter(t)}let mt=parseInt(localStorage.getItem(rt)??`280`,10),ht=n(Math.min(at,Math.max(it,mt)));function gt(e){e.preventDefault();let t=e.target.closest(`.diff-viewer`);if(!t)return;let n=t.getBoundingClientRect().left,r=e=>{ht.value=Math.min(at,Math.max(it,e.clientX-n))},i=()=>{localStorage.setItem(rt,String(ht.value)),document.removeEventListener(`mousemove`,r),document.removeEventListener(`mouseup`,i),document.body.style.cursor=``,document.body.style.userSelect=``};document.body.style.cursor=`col-resize`,document.body.style.userSelect=`none`,document.addEventListener(`mousemove`,r),document.addEventListener(`mouseup`,i)}let K=null,q=null,J=[],Y=[],X=n([]),_t=n(null);function vt(){if(!q)return;let e=q.getModifiedEditor();for(let t of X.value)t.topPx=e.getTopForLineNumber(t.line+1)-e.getScrollTop()-t.heightPx}function yt(){if(!q){X.value=[];return}q.getModifiedEditor().changeViewZones(e=>{for(let t of X.value)try{e.removeZone(t.zoneId)}catch{}}),X.value=[]}function bt(e,t,n){if(!q)return;let r=q.getModifiedEditor(),i=r.getModel()?.getLineCount()??0;if(e<1||e>i)return;let a=document.createElement(`div`);a.style.pointerEvents=`none`;let o=t.length>0?t.length*4+1:0,s=Math.max(6,o+(n?6:0)),c=``;r.changeViewZones(t=>{c=t.addZone({afterLineNumber:e,heightInLines:s,domNode:a})});let l=s*18,u=r.getTopForLineNumber(e+1)-r.getScrollTop()-l;X.value.push({zoneId:c,placeholderNode:a,line:e,comments:t,transient:n,topPx:u,heightPx:l})}function xt(e){if(!q)return;let t=q.getModifiedEditor(),n=X.value.filter(t=>t.line===e);n.length!==0&&(t.changeViewZones(e=>{for(let t of n)try{e.removeZone(t.zoneId)}catch{}}),X.value=X.value.filter(t=>t.line!==e))}function St(e,t){xt(t);let n=W.draft.value.comments.filter(n=>n.filePath===e&&n.line===t);n.length!==0&&(n.sort((e,t)=>e.createdAt.localeCompare(t.createdAt)),bt(t,n,!1))}function Ct(e){if(!q||U.value!==`review`)return;let t=W.draft.value.comments.filter(t=>t.filePath===e),n=new Map;for(let e of t){let t=n.get(e.line)??[];t.push(e),n.set(e.line,t)}for(let e of n.values())e.sort((e,t)=>e.createdAt.localeCompare(t.createdAt));for(let[e,t]of n)bt(e,t,!1)}function wt(e,t,n){W.addComment({filePath:e,line:t,content:n}),St(e,t)}function Tt(e,t,n,r){W.updateComment(n,r),St(e,t)}function Et(e,t,n){W.deleteComment(n),St(e,t)}function Dt(){if(!q||U.value!==`review`||!K)return;let e=q.getModifiedEditor(),t=e.getDomNode();t&&t.classList.add(`review-mode-active`),Y.push(e.onMouseDown(e=>{if(e.target.type!==3)return;let t=e.target.position?.lineNumber??0;t<1||!F.value||Ot(F.value,t)}),e.onDidScrollChange(()=>vt()),e.onDidLayoutChange(()=>vt()))}function Ot(e,t){xt(t),bt(t,W.draft.value.comments.filter(n=>n.filePath===e&&n.line===t).sort((e,t)=>e.createdAt.localeCompare(t.createdAt)),!0)}let kt=n(``),Z=n(``),Q=n(!1),At=n(!1),jt=null,$=c(()=>{if(j.value||U.value!==`inspect`)return!1;let e=Ne.workspaces.find(e=>e.id===E.workspaceId);if(!e||e.archivedAt||ie(e.status))return!1;let t=F.value;return(t?M.value.find(e=>e.path===t):null)?.status!==`deleted`});b($,e=>{q?.updateOptions({readOnly:!e})});function Mt(){jt?.(),jt=null,yt();for(let e of Y)e.dispose();if(Y=[],!q)return;q.getModifiedEditor().getDomNode()?.classList.remove(`review-mode-active`);for(let e of J)e.dispose();J=[];let e=q.getModel();q.dispose(),q=null,e?.original?.dispose(),e?.modified?.dispose()}let Nt=c(()=>ye(M.value)),Pt=c(()=>F.value?`file:${F.value}`:``),Ft=n(``);function It(e,t){return e.file?e.file.path.toLowerCase().includes(t.toLowerCase()):!1}let Lt=c(()=>{let e=Ft.value.trim().toLowerCase();return e!==``&&!M.value.some(t=>t.path.toLowerCase().includes(e))});async function Rt(){I.value=!0;try{let e=j.value?new URLSearchParams({mode:`commits`,from:E.compareFrom,to:E.compareTo}):new URLSearchParams({mode:H.value});!j.value&&H.value===`branch`&&V.value&&e.set(`includeUntracked`,`1`);let t=await fetch(`/api/workspaces/${E.workspaceId}/diff?${e}`,{cache:`no-store`});if(!t.ok)throw Error(`HTTP ${t.status}`);let n=await t.json();M.value=n.files,N.value=n.sourceBranch??``,P.value=n.workingBranch??``}catch(e){console.error(`Failed to load diff files:`,e)}finally{I.value=!1}}async function zt(e){if(R.value){L.value=!0;try{K||(self.MonacoEnvironment={getWorker(e,t){return t===`json`?new we:t===`css`||t===`scss`||t===`less`?new Se:t===`html`||t===`handlebars`||t===`razor`?new Ce:t===`typescript`||t===`javascript`?new Te:new xe}},K=await ne(()=>import(`./vs-B-xsceNQ.js`).then(e=>e.t),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11])),K.editor.defineTheme(`kobo-dark`,{base:`vs-dark`,inherit:!0,rules:[],colors:{"editor.background":`#1a1a2e`,"diffEditor.insertedTextBackground":`#22c55e20`,"diffEditor.removedTextBackground":`#ef444420`}}));let t=j.value?`path=${encodeURIComponent(e)}&mode=commits&from=${encodeURIComponent(E.compareFrom)}&to=${encodeURIComponent(E.compareTo)}`:`path=${encodeURIComponent(e)}&mode=${H.value}`,n=await fetch(`/api/workspaces/${E.workspaceId}/diff-file?${t}`,{cache:`no-store`});if(!n.ok)throw Error(`HTTP ${n.status}`);let r=await n.json(),i=Oe(e);Mt();let a=K.editor.createModel(r.original??``,i),o=K.editor.createModel(r.modified??``,i);q=K.editor.createDiffEditor(R.value,{theme:`kobo-dark`,readOnly:!$.value,originalEditable:!1,renderSideBySide:z.value===`side`,automaticLayout:!0,minimap:{enabled:!1},scrollBeyondLastLine:!1,fontSize:12,lineHeight:18,hideUnchangedRegions:{enabled:B.value,contextLineCount:3,minimumLineCount:3,revealLineCount:20}}),q.addCommand(K.KeyMod.CtrlCmd|K.KeyCode.KeyS,()=>{$.value&&Q.value&&!At.value&&Vt()}),q.setModel({original:a,modified:o}),kt.value=r.modifiedSha??``,Z.value=r.modified??``,Q.value=!1,K&&(r.modified??``).includes(`\r
|
|
7
|
+
`)}\n\n---\n${s}`}var Ee=300;function M(e){return`kobo:review-draft:${e}`}function N(e){let t=localStorage.getItem(M(e));if(!t)return{comments:[],globalMessage:``};try{let e=JSON.parse(t);return{comments:Array.isArray(e.comments)?e.comments:[],globalMessage:typeof e.globalMessage==`string`?e.globalMessage:``}}catch{return{comments:[],globalMessage:``}}}function De(e,t){let r=n(N(e)),i=null;function a(){i!==null&&clearTimeout(i),i=setTimeout(()=>{i=null;try{localStorage.setItem(M(e),JSON.stringify(r.value))}catch(e){console.warn(`[review-draft] persist failed:`,e)}},Ee)}function o(){if(i!==null){clearTimeout(i),i=null;try{localStorage.setItem(M(e),JSON.stringify(r.value))}catch(e){console.warn(`[review-draft] flush failed:`,e)}}}function s(e){let t=k(e);return r.value.comments.push(t),a(),t}function c(e,t){let n=r.value.comments.find(t=>t.id===e);n&&(n.content=t,a())}function l(e){r.value.comments=r.value.comments.filter(t=>t.id!==e),a()}function u(e){r.value.globalMessage=e,a()}function d(){r.value={comments:[],globalMessage:``},i!==null&&(clearTimeout(i),i=null),localStorage.removeItem(M(e))}async function f(n){if(r.value.comments.length===0&&r.value.globalMessage.trim()===``)return{ok:!1,error:`Draft is empty`};o();let i=j(r.value);try{await t.sendChatMessage(e,i,n)}catch(e){return{ok:!1,error:e instanceof Error?e.message:String(e)}}return d(),{ok:!0}}return{draft:r,addComment:s,updateComment:c,deleteComment:l,setGlobalMessage:u,clearDraft:d,flush:o,submit:f}}var P={cjs:`javascript`,css:`css`,cts:`typescript`,go:`go`,html:`html`,js:`javascript`,json:`json`,jsx:`javascript`,md:`markdown`,mjs:`javascript`,mts:`typescript`,php:`php`,phtml:`php`,py:`python`,rs:`rust`,scss:`scss`,sh:`shell`,sql:`sql`,ts:`typescript`,tsx:`typescript`,vue:`html`,yaml:`yaml`,yml:`yaml`};function Oe(e){let t=e.split(`.`).pop()?.toLowerCase();return t&&P[t]||`plaintext`}var F={class:`review-comment-block`},I={class:`comment-actions q-mt-xs`},L=[`innerHTML`],R={class:`comment-footer`},z={class:`comment-time text-caption text-grey-7`},B={class:`comment-actions q-mt-xs`},ke=D(o({__name:`ReviewCommentBlock`,props:{comments:{},startInAddMode:{type:Boolean}},emits:[`add`,`update`,`delete`,`dismissEmpty`],setup(t,{emit:r}){let o=t,c=r,{t:u}=e(),d=le(),p=n(null),b=n(``),x=n(o.startInAddMode===!0),S=n(``);function te(e){return E(e)}function ne(e){let t=Date.now()-new Date(e).getTime(),n=Math.floor(t/6e4);if(n<1)return u(`common.justNow`);if(n<60)return u(`common.minutesAgo`,{count:n});let r=Math.floor(n/60);return r<24?u(`common.hoursAgo`,{count:r}):u(`common.daysAgo`,{count:Math.floor(r/24)})}function re(e){p.value=e.id,b.value=e.content}function ie(){p.value=null,b.value=``}function ae(e){let t=b.value.trim();t&&(c(`update`,e,t),p.value=null,b.value=``)}function oe(e){d.dialog({title:u(`diff.deleteComment`),message:u(`diff.deleteCommentConfirm`),cancel:!0,persistent:!0,ok:{label:u(`diff.deleteComment`),color:`negative`,flat:!1,unelevated:!0}}).onOk(()=>{c(`delete`,e)})}function se(){x.value=!1,S.value=``,o.comments.length===0&&c(`dismissEmpty`)}function ce(){let e=S.value.trim();e&&(c(`add`,e),x.value=!1,S.value=``)}return(e,n)=>(f(),g(`div`,F,[(f(!0),g(s,null,ee(t.comments,(t,r)=>(f(),g(`div`,{key:t.id,class:a([`comment-thread-item`,{"with-separator":r>0}])},[p.value===t.id?(f(),g(s,{key:0},[v(C,{modelValue:b.value,"onUpdate:modelValue":n[0]||=e=>b.value=e,type:`textarea`,autogrow:``,dense:``,dark:``,outlined:``,autofocus:``,class:`comment-textarea`,placeholder:e.$t(`diff.commentPlaceholder`)},null,8,[`modelValue`,`placeholder`]),h(`div`,I,[v(w,{flat:``,dense:``,size:`sm`,label:e.$t(`common.cancel`),onClick:ie},null,8,[`label`]),v(w,{unelevated:``,dense:``,size:`sm`,color:`primary`,label:e.$t(`common.save`),onClick:e=>ae(t.id)},null,8,[`label`,`onClick`])])],64)):(f(),g(s,{key:1},[h(`div`,{class:`comment-content`,innerHTML:te(t.content)},null,8,L),h(`div`,R,[h(`span`,z,i(ne(t.createdAt)),1),v(w,{flat:``,dense:``,round:``,size:`xs`,icon:`edit`,color:`grey-5`,onClick:e=>re(t)},{default:y(()=>[v(T,null,{default:y(()=>[_(i(e.$t(`diff.editComment`)),1)]),_:1})]),_:1},8,[`onClick`]),v(w,{flat:``,dense:``,round:``,size:`xs`,icon:`delete`,color:`grey-5`,onClick:e=>oe(t.id)},{default:y(()=>[v(T,null,{default:y(()=>[_(i(e.$t(`diff.deleteComment`)),1)]),_:1})]),_:1},8,[`onClick`])])],64))],2))),128)),x.value?(f(),g(s,{key:0},[v(C,{modelValue:S.value,"onUpdate:modelValue":n[1]||=e=>S.value=e,type:`textarea`,autogrow:``,dense:``,dark:``,outlined:``,autofocus:``,class:`comment-textarea q-mt-sm`,placeholder:e.$t(`diff.commentPlaceholder`)},null,8,[`modelValue`,`placeholder`]),h(`div`,B,[v(w,{flat:``,dense:``,size:`sm`,label:e.$t(`common.cancel`),onClick:se},null,8,[`label`]),v(w,{unelevated:``,dense:``,size:`sm`,color:`primary`,disable:!S.value.trim(),label:e.$t(`diff.addComment`),onClick:ce},null,8,[`disable`,`label`])])],64)):t.comments.length>0?(f(),l(w,{key:1,flat:``,dense:``,size:`sm`,icon:`reply`,label:e.$t(`diff.replyComment`),class:`reply-btn q-mt-xs`,onClick:n[2]||=e=>x.value=!0},null,8,[`label`])):m(``,!0)]))}}),[[`__scopeId`,`data-v-9abff76f`]]),V={class:`review-draft-panel q-pa-sm`},H={class:`text-caption text-uppercase text-weight-bold text-grey-6 q-mb-sm`,style:{"letter-spacing":`0.05em`}},U={key:0,class:`text-caption text-grey-7 q-pa-sm`},Ae=[`onClick`],je={style:{"font-family":`'Roboto Mono', monospace`,"font-size":`11px`}},Me=[`onClick`],Ne={class:`text-grey-6 q-mr-xs`,style:{"font-family":`monospace`}},W={class:`text-grey-3 ellipsis`},Pe={class:`global-message-box q-mt-sm`},Fe=D(o({__name:`ReviewDraftPanel`,props:{comments:{},globalMessage:{},submitting:{type:Boolean}},emits:[`updateGlobal`,`jumpToFile`,`jumpToComment`,`submit`],setup(e,{emit:t}){let n=e,r=t,a=c(()=>n.comments.length),o=c(()=>{let e=new Map;for(let t of n.comments){let n=e.get(t.filePath)??[];n.push(t),e.set(t.filePath,n)}for(let t of e.values())t.sort((e,t)=>e.line-t.line||e.createdAt.localeCompare(t.createdAt));return Array.from(e.entries()).sort(([e],[t])=>e.localeCompare(t)).map(([e,t])=>({filePath:e,comments:t}))});function l(e){let t=e.replace(/\n+/g,` `).trim();return t.length>80?`${t.slice(0,77)}…`:t}return(t,n)=>(f(),g(`div`,V,[h(`div`,H,i(t.$t(`diff.reviewDraft`)),1),v(fe,{class:`comments-scroll`},{default:y(()=>[o.value.length===0?(f(),g(`div`,U,i(t.$t(`diff.reviewEmpty`)),1)):m(``,!0),(f(!0),g(s,null,ee(o.value,e=>(f(),g(`div`,{key:e.filePath,class:`file-group q-mb-sm`},[h(`div`,{class:`file-group-header text-grey-3 cursor-pointer ellipsis`,onClick:t=>r(`jumpToFile`,e.filePath)},[v(S,{name:`description`,size:`14px`,color:`indigo-4`,class:`q-mr-xs`}),h(`span`,je,i(e.filePath),1),v(O,{label:String(e.comments.length),color:`indigo-8`,"text-color":`white`,class:`q-ml-xs`},null,8,[`label`])],8,Ae),(f(!0),g(s,null,ee(e.comments,e=>(f(),g(`div`,{key:e.id,class:`draft-line cursor-pointer`,onClick:t=>r(`jumpToComment`,e.filePath,e.line)},[h(`span`,Ne,`L`+i(e.line),1),h(`span`,W,i(l(e.content)),1)],8,Me))),128))]))),128))]),_:1}),h(`div`,Pe,[v(C,{"model-value":e.globalMessage,type:`textarea`,autogrow:``,rows:`3`,dense:``,dark:``,outlined:``,placeholder:t.$t(`diff.reviewGlobalPlaceholder`),class:`global-textarea`,"onUpdate:modelValue":n[0]||=e=>r(`updateGlobal`,String(e))},null,8,[`model-value`,`placeholder`]),v(w,{unelevated:``,"no-caps":``,color:`primary`,class:`full-width q-mt-sm`,disable:a.value===0&&!e.globalMessage.trim(),loading:e.submitting,onClick:n[1]||=e=>r(`submit`)},{default:y(()=>[_(i(t.$t(`diff.submitReview`,{n:a.value})),1)]),_:1},8,[`disable`,`loading`])])]))}}),[[`__scopeId`,`data-v-fd6b00c0`]]),Ie={class:`diff-viewer column full-height`},Le={class:`diff-header row items-center q-px-md q-py-sm no-wrap`},Re={class:`text-body1 text-weight-medium text-grey-3`},ze={key:0,class:`text-caption text-grey-6 q-ml-md`,style:{"font-size":`11px`}},Be={class:`text-grey-7`},Ve={class:`text-green-4`},He={class:`text-grey-7`},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`}},We={class:`row col no-wrap`,style:{"min-height":`0`}},Ge={key:0,class:`review-draft-panel-wrapper`,style:{width:`300px`,minWidth:`240px`,flexShrink:0,borderRight:`1px solid #2a2a4a`}},Ke={key:1,class:`text-caption text-grey-8 q-pa-sm`},qe={key:2,class:`text-caption text-grey-8 q-pa-sm`},Je={class:`text-grey-4`,style:{"font-family":`'Roboto Mono', monospace`,"font-size":`11px`}},Ye={class:`text-grey-3 ellipsis`,style:{"font-family":`'Roboto Mono', monospace`,"font-size":`11px`}},Xe={key:0,class:`dirty-dot`},Ze={class:`col column`,style:{"min-width":`0`,position:`relative`}},Qe={key:0,class:`col column items-center justify-center`},$e={key:1,class:`col column items-center justify-center text-grey-8 text-caption`},et=`kobo:diff:hideUnchanged`,tt=`kobo:diff:includeUntracked`,nt=`kobo:diff:mode`,rt=`kobo:diffViewerFileListWidth`,it=180,at=600,ot=D(o({__name:`DiffViewer`,props:{workspaceId:{},initialReviewMode:{type:Boolean},compareFrom:{},compareTo:{}},emits:[`close`,`sendToChat`],setup(a,{emit:o}){let E=a,D=o,{t:k}=e(),A=le(),j=c(()=>!!E.compareFrom&&!!E.compareTo),Ee=c(()=>j.value?`${(E.compareFrom??``).slice(0,7)} ↔ ${(E.compareTo??``).slice(0,7)}`:``),M=n([]),N=n(``),P=n(``),F=n(null),I=n(!1),L=n(!1),R=n(null),z=n(`side`),B=n(localStorage.getItem(et)!==`0`),V=n(localStorage.getItem(tt)===`1`),H=n(`branch`),U=n(E.initialReviewMode||localStorage.getItem(nt)===`review`?`review`:`inspect`);b(U,e=>{localStorage.setItem(nt,e),e===`review`?je():Ae()});function Ae(){yt();for(let e of Y)e.dispose();Y=[],q&&q.getModifiedEditor().getDomNode()?.classList.remove(`review-mode-active`)}function je(){q&&(Dt(),F.value&&Ct(F.value))}let Me=ae(),Ne=re(),W=De(E.workspaceId,{sendChatMessage:async(e,t,n)=>{if(!Me.isConnected())throw Error(`WebSocket not connected — cannot send the review`);Me.sendChatMessage(e,t,n)}}),Pe=c(()=>W.draft.value.comments),ot=c(()=>W.draft.value.globalMessage),G=n(!1);async function st(){G.value=!0;try{let e=await W.submit(Ne.selectedSessionId??void 0);e.ok?(A.notify({type:`positive`,message:k(`diff.reviewSubmitted`),position:`top`}),D(`close`)):A.notify({type:`negative`,message:k(`diff.reviewSubmitFailed`,{error:e.error??``}),position:`top`})}finally{G.value=!1}}let ct=c(()=>{let e=new Map;if(U.value!==`review`)return e;for(let t of W.draft.value.comments)e.set(t.filePath,(e.get(t.filePath)??0)+1);return e});function lt(e){if(U.value!==`review`||!e)return 0;let t=0;for(let n of W.draft.value.comments)n.filePath.startsWith(`${e}/`)&&t++;return t}function ut(e){return e.nodeKey.startsWith(`dir:`)?e.nodeKey.slice(4):``}function dt(e){F.value=e}async function ft(e=3e3){let t=Date.now();for(;L.value;){if(Date.now()-t>e)return;await new Promise(e=>setTimeout(e,30))}}async function pt(e,t){F.value!==e&&(F.value=e,await ft()),q?.getModifiedEditor().revealLineInCenter(t)}let mt=parseInt(localStorage.getItem(rt)??`280`,10),ht=n(Math.min(at,Math.max(it,mt)));function gt(e){e.preventDefault();let t=e.target.closest(`.diff-viewer`);if(!t)return;let n=t.getBoundingClientRect().left,r=e=>{ht.value=Math.min(at,Math.max(it,e.clientX-n))},i=()=>{localStorage.setItem(rt,String(ht.value)),document.removeEventListener(`mousemove`,r),document.removeEventListener(`mouseup`,i),document.body.style.cursor=``,document.body.style.userSelect=``};document.body.style.cursor=`col-resize`,document.body.style.userSelect=`none`,document.addEventListener(`mousemove`,r),document.addEventListener(`mouseup`,i)}let K=null,q=null,J=[],Y=[],X=n([]),_t=n(null);function vt(){if(!q)return;let e=q.getModifiedEditor();for(let t of X.value)t.topPx=e.getTopForLineNumber(t.line+1)-e.getScrollTop()-t.heightPx}function yt(){if(!q){X.value=[];return}q.getModifiedEditor().changeViewZones(e=>{for(let t of X.value)try{e.removeZone(t.zoneId)}catch{}}),X.value=[]}function bt(e,t,n){if(!q)return;let r=q.getModifiedEditor(),i=r.getModel()?.getLineCount()??0;if(e<1||e>i)return;let a=document.createElement(`div`);a.style.pointerEvents=`none`;let o=t.length>0?t.length*4+1:0,s=Math.max(6,o+(n?6:0)),c=``;r.changeViewZones(t=>{c=t.addZone({afterLineNumber:e,heightInLines:s,domNode:a})});let l=s*18,u=r.getTopForLineNumber(e+1)-r.getScrollTop()-l;X.value.push({zoneId:c,placeholderNode:a,line:e,comments:t,transient:n,topPx:u,heightPx:l})}function xt(e){if(!q)return;let t=q.getModifiedEditor(),n=X.value.filter(t=>t.line===e);n.length!==0&&(t.changeViewZones(e=>{for(let t of n)try{e.removeZone(t.zoneId)}catch{}}),X.value=X.value.filter(t=>t.line!==e))}function St(e,t){xt(t);let n=W.draft.value.comments.filter(n=>n.filePath===e&&n.line===t);n.length!==0&&(n.sort((e,t)=>e.createdAt.localeCompare(t.createdAt)),bt(t,n,!1))}function Ct(e){if(!q||U.value!==`review`)return;let t=W.draft.value.comments.filter(t=>t.filePath===e),n=new Map;for(let e of t){let t=n.get(e.line)??[];t.push(e),n.set(e.line,t)}for(let e of n.values())e.sort((e,t)=>e.createdAt.localeCompare(t.createdAt));for(let[e,t]of n)bt(e,t,!1)}function wt(e,t,n){W.addComment({filePath:e,line:t,content:n}),St(e,t)}function Tt(e,t,n,r){W.updateComment(n,r),St(e,t)}function Et(e,t,n){W.deleteComment(n),St(e,t)}function Dt(){if(!q||U.value!==`review`||!K)return;let e=q.getModifiedEditor(),t=e.getDomNode();t&&t.classList.add(`review-mode-active`),Y.push(e.onMouseDown(e=>{if(e.target.type!==3)return;let t=e.target.position?.lineNumber??0;t<1||!F.value||Ot(F.value,t)}),e.onDidScrollChange(()=>vt()),e.onDidLayoutChange(()=>vt()))}function Ot(e,t){xt(t),bt(t,W.draft.value.comments.filter(n=>n.filePath===e&&n.line===t).sort((e,t)=>e.createdAt.localeCompare(t.createdAt)),!0)}let kt=n(``),Z=n(``),Q=n(!1),At=n(!1),jt=null,$=c(()=>{if(j.value||U.value!==`inspect`)return!1;let e=Ne.workspaces.find(e=>e.id===E.workspaceId);if(!e||e.archivedAt||ie(e.status))return!1;let t=F.value;return(t?M.value.find(e=>e.path===t):null)?.status!==`deleted`});b($,e=>{q?.updateOptions({readOnly:!e})});function Mt(){jt?.(),jt=null,yt();for(let e of Y)e.dispose();if(Y=[],!q)return;q.getModifiedEditor().getDomNode()?.classList.remove(`review-mode-active`);for(let e of J)e.dispose();J=[];let e=q.getModel();q.dispose(),q=null,e?.original?.dispose(),e?.modified?.dispose()}let Nt=c(()=>ye(M.value)),Pt=c(()=>F.value?`file:${F.value}`:``),Ft=n(``);function It(e,t){return e.file?e.file.path.toLowerCase().includes(t.toLowerCase()):!1}let Lt=c(()=>{let e=Ft.value.trim().toLowerCase();return e!==``&&!M.value.some(t=>t.path.toLowerCase().includes(e))});async function Rt(){I.value=!0;try{let e=j.value?new URLSearchParams({mode:`commits`,from:E.compareFrom,to:E.compareTo}):new URLSearchParams({mode:H.value});!j.value&&H.value===`branch`&&V.value&&e.set(`includeUntracked`,`1`);let t=await fetch(`/api/workspaces/${E.workspaceId}/diff?${e}`,{cache:`no-store`});if(!t.ok)throw Error(`HTTP ${t.status}`);let n=await t.json();M.value=n.files,N.value=n.sourceBranch??``,P.value=n.workingBranch??``}catch(e){console.error(`Failed to load diff files:`,e)}finally{I.value=!1}}async function zt(e){if(R.value){L.value=!0;try{K||(self.MonacoEnvironment={getWorker(e,t){return t===`json`?new we:t===`css`||t===`scss`||t===`less`?new Se:t===`html`||t===`handlebars`||t===`razor`?new Ce:t===`typescript`||t===`javascript`?new Te:new xe}},K=await ne(()=>import(`./vs-BJBy3q9a.js`).then(e=>e.t),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11])),K.editor.defineTheme(`kobo-dark`,{base:`vs-dark`,inherit:!0,rules:[],colors:{"editor.background":`#1a1a2e`,"diffEditor.insertedTextBackground":`#22c55e20`,"diffEditor.removedTextBackground":`#ef444420`}}));let t=j.value?`path=${encodeURIComponent(e)}&mode=commits&from=${encodeURIComponent(E.compareFrom)}&to=${encodeURIComponent(E.compareTo)}`:`path=${encodeURIComponent(e)}&mode=${H.value}`,n=await fetch(`/api/workspaces/${E.workspaceId}/diff-file?${t}`,{cache:`no-store`});if(!n.ok)throw Error(`HTTP ${n.status}`);let r=await n.json(),i=Oe(e);Mt();let a=K.editor.createModel(r.original??``,i),o=K.editor.createModel(r.modified??``,i);q=K.editor.createDiffEditor(R.value,{theme:`kobo-dark`,readOnly:!$.value,originalEditable:!1,renderSideBySide:z.value===`side`,automaticLayout:!0,minimap:{enabled:!1},scrollBeyondLastLine:!1,fontSize:12,lineHeight:18,hideUnchangedRegions:{enabled:B.value,contextLineCount:3,minimumLineCount:3,revealLineCount:20}}),q.addCommand(K.KeyMod.CtrlCmd|K.KeyCode.KeyS,()=>{$.value&&Q.value&&!At.value&&Vt()}),q.setModel({original:a,modified:o}),kt.value=r.modifiedSha??``,Z.value=r.modified??``,Q.value=!1,K&&(r.modified??``).includes(`\r
|
|
8
8
|
`)&&o.setEOL(K.editor.EndOfLineSequence.CRLF),jt?.();let s=o.onDidChangeContent(()=>{Q.value=o.getValue()!==Z.value});jt=()=>s.dispose(),Kt(),U.value===`review`&&(Dt(),Ct(e))}catch(e){console.error(`Failed to load file diff:`,e)}finally{L.value=!1}}}async function Bt(){if(j.value||!q)return{ok:!1,status:0};let e=q.getModel()?.modified;if(!e||!F.value)return{ok:!1,status:0};let t=e.getValue(),n=E.workspaceId,r=F.value,i=kt.value;At.value=!0;try{let a=await fetch(`/api/workspaces/${n}/save-file`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({path:r,content:t,baseSha:i})});if(a.status===204){let t=await fetch(`/api/workspaces/${n}/diff-file?path=${encodeURIComponent(r)}&mode=${H.value}`,{cache:`no-store`});if(t.ok){let n=await t.json();kt.value=n.modifiedSha??``,Z.value=n.modified??``,Q.value=e.getValue()!==Z.value}return A.notify({type:`positive`,message:k(`diffViewer.savedAt`),position:`top`,timeout:1200}),{ok:!0}}return a.status===412?{ok:!1,status:412,currentSha:(await a.json().catch(()=>({}))).currentSha}:{ok:!1,status:a.status}}catch(e){return console.error(`[DiffViewer] save failed:`,e),{ok:!1,status:0}}finally{At.value=!1}}async function Vt(){let e=await Bt();if(!e.ok){if(e.status===412){Ht();return}A.notify({type:`negative`,message:e.status===409?k(`diffViewer.agentRunning`):k(`diffViewer.saveFailed`),position:`top`})}}function Ht(){A.dialog({title:k(`diffViewer.conflict.title`),message:k(`diffViewer.conflict.message`),dark:!0,persistent:!0,ok:{flat:!0,label:k(`diffViewer.conflict.reload`),color:`indigo-4`},cancel:{flat:!0,label:k(`diffViewer.conflict.keep`),color:`grey-5`}}).onOk(async()=>{F.value&&await zt(F.value)})}function Ut(e,t){let n=t===`untracked`;A.dialog({title:k(n?`diff.deleteUntracked`:`diff.rollbackToRemote`),message:k(n?`diff.deleteUntrackedConfirm`:`diff.rollbackConfirm`,{path:e}),cancel:!0,persistent:!0,color:n?`red`:`orange`,ok:{label:k(n?`diff.deleteUntrackedConfirmOk`:`diff.rollbackConfirmOk`),color:n?`red-7`:`orange-7`,flat:!1,unelevated:!0}}).onOk(()=>{Wt(e)})}async function Wt(e){try{let t=await fetch(`/api/workspaces/${E.workspaceId}/rollback-file`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({path:e})});if(!t.ok){let e=await t.json().catch(()=>({}));A.notify({type:`negative`,message:e.error||k(`diff.rollbackFailed`),position:`top`});return}let n=await t.json().catch(()=>({})),r=k(`diff.rollbackDoneRemote`);n.target===`head`?r=k(`diff.rollbackDoneHead`):n.target===`deleted`&&(r=k(`diff.rollbackDoneDeleted`)),A.notify({type:`positive`,message:r,position:`top`}),await Rt(),F.value===e&&(M.value.some(t=>t.path===e)?await zt(e):F.value=null)}catch(e){console.error(`rollbackFile failed:`,e),A.notify({type:`negative`,message:k(`diff.rollbackFailed`),position:`top`})}}let Gt=n(!1);function Kt(){if(!q)return;for(let e of J)e.dispose();J=[];let e=q.getModifiedEditor(),t=q.getOriginalEditor();for(let n of[e,t]){let e=n.onDidChangeCursorSelection(()=>{let e=n.getSelection();Gt.value=!!(e&&!e.isEmpty())});J.push(e)}}function qt(){if(!(!q||!F.value))for(let e of[q.getModifiedEditor(),q.getOriginalEditor()]){let t=e.getSelection();if(t&&!t.isEmpty()){let n=e.getModel();if(!n)continue;let r=n.getValueInRange(t),i=e===q.getModifiedEditor()?`modified`:`original`,a=`\`\`\`\n// ${F.value} (${i}) L${t.startLineNumber}-L${t.endLineNumber}\n${r}\n\`\`\``;D(`sendToChat`,a);return}}}let Jt=!1;b(F,async(e,t)=>{if(Jt){Jt=!1;return}if(Q.value&&t){let e=await new Promise(e=>{A.dialog({title:k(`diffViewer.unsavedChanges.title`),message:k(`diffViewer.unsavedChanges.message`),dark:!0,persistent:!0,ok:{flat:!0,label:k(`diffViewer.unsavedChanges.save`),color:`indigo-4`},cancel:{flat:!0,label:k(`diffViewer.unsavedChanges.cancel`),color:`grey-5`}}).onOk(()=>e(`save`)).onCancel(()=>e(`cancel`))});if(e===`save`){let e=await Bt();if(!e.ok){Jt=!0,F.value=t,e.status===412?Ht():A.notify({type:`negative`,message:k(`diffViewer.saveFailed`),position:`top`});return}}else if(e===`cancel`){Jt=!0,F.value=t;return}}e?(await p(),F.value===e&&await zt(e)):Mt()}),b(z,()=>{q&&q.updateOptions({renderSideBySide:z.value===`side`})}),b(B,e=>{localStorage.setItem(et,e?`1`:`0`),q&&q.updateOptions({hideUnchangedRegions:{enabled:e,contextLineCount:3,minimumLineCount:3,revealLineCount:20}})}),b(H,async()=>{let e=F.value;await Rt(),e&&M.value.some(t=>t.path===e)?zt(e):F.value=null}),b(V,async e=>{localStorage.setItem(tt,e?`1`:`0`),await Rt(),F.value&&!M.value.some(e=>e.path===F.value)&&(F.value=null)});function Yt(e){switch(e){case`added`:return`#4ade80`;case`untracked`:return`#86efac`;case`deleted`:return`#f87171`;case`renamed`:return`#60a5fa`;default:return`#f59e0b`}}function Xt(e){M.value.some(t=>t.path===e)&&(F.value=e)}function Zt(e){let t=e.detail;t?.workspaceId!==E.workspaceId||!t.path||Xt(t.path)}return d(()=>{window.addEventListener(`kobo:select-diff`,Zt),Rt().then(()=>{let e=de(E.workspaceId);e&&Xt(e)})}),u(()=>{window.removeEventListener(`kobo:select-diff`,Zt),W.flush(),Mt()}),(e,n)=>(f(),g(`div`,Ie,[h(`div`,Le,[v(S,{name:`difference`,size:`18px`,color:`indigo-4`,class:`q-mr-xs`}),h(`span`,Re,i(e.$t(`diff.title`)),1),v(O,{label:`${M.value.length}`,color:`grey-8`,"text-color":`grey-4`,class:`q-ml-sm`,style:{"font-size":`10px`}},null,8,[`label`]),N.value?(f(),g(`span`,ze,[H.value===`branch`?(f(),g(s,{key:0},[h(`span`,Be,i(N.value),1),v(S,{name:`arrow_forward`,size:`11px`,color:`grey-8`,class:`q-mx-xs`}),h(`span`,Ve,i(P.value),1)],64)):(f(),g(s,{key:1},[h(`span`,He,`origin/`+i(P.value),1),v(S,{name:`arrow_forward`,size:`11px`,color:`grey-8`,class:`q-mx-xs`}),n[8]||=h(`span`,{class:`text-green-4`},`HEAD`,-1)],64))])):m(``,!0),F.value?(f(),g(`span`,Ue,i(F.value),1)):m(``,!0),$.value&&Q.value?(f(),l(w,{key:2,dense:``,flat:``,size:`sm`,"no-caps":``,icon:`save`,label:e.$t(`diffViewer.save`),color:`indigo-4`,loading:At.value,class:`q-ml-sm`,onClick:Vt},null,8,[`label`,`loading`])):m(``,!0),v(me),j.value?(f(),l(he,{key:3,dense:``,square:``,color:`grey-9`,"text-color":`grey-4`,icon:`difference`,class:`q-mr-sm`},{default:y(()=>[_(i(Ee.value)+` · `+i(e.$t(`diff.commitsReadOnly`)),1)]),_:1})):(f(),l(ge,{key:4,modelValue:H.value,"onUpdate:modelValue":n[0]||=e=>H.value=e,dense:``,"no-caps":``,size:`sm`,"toggle-color":`indigo-8`,color:`grey-9`,"text-color":`grey-5`,options:[{label:e.$t(`diff.scopeBranch`),value:`branch`},{label:e.$t(`diff.scopeUnpushed`),value:`unpushed`}],class:`q-mr-sm`},null,8,[`modelValue`,`options`])),v(ge,{modelValue:U.value,"onUpdate:modelValue":n[1]||=e=>U.value=e,dense:``,"no-caps":``,size:`sm`,"toggle-color":`indigo-8`,color:`grey-9`,"text-color":`grey-5`,options:[{label:e.$t(`diff.modeInspect`),value:`inspect`},{label:e.$t(`diff.modeReview`),value:`review`}],class:`q-mr-sm`},null,8,[`modelValue`,`options`]),v(ge,{modelValue:z.value,"onUpdate:modelValue":n[2]||=e=>z.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`]),v(w,{icon:B.value?`unfold_less`:`unfold_more`,dense:``,flat:``,size:`sm`,color:B.value?`indigo-4`:`grey-5`,class:`q-mr-sm`,onClick:n[3]||=e=>B.value=!B.value},{default:y(()=>[v(T,{anchor:`bottom middle`,self:`top middle`,delay:400},{default:y(()=>[_(i(B.value?e.$t(`diff.showUnchanged`):e.$t(`diff.hideUnchanged`)),1)]),_:1})]),_:1},8,[`icon`,`color`]),H.value===`branch`?(f(),l(w,{key:5,icon:`visibility`,dense:``,flat:``,size:`sm`,color:V.value?`indigo-4`:`grey-5`,class:`q-mr-sm`,onClick:n[4]||=e=>V.value=!V.value},{default:y(()=>[v(T,{anchor:`bottom middle`,self:`top middle`,delay:400},{default:y(()=>[_(i(V.value?e.$t(`diff.hideUntracked`):e.$t(`diff.showUntracked`)),1)]),_:1})]),_:1},8,[`color`])):m(``,!0),v(w,{flat:``,round:``,dense:``,icon:`close`,color:`grey-5`,size:`sm`,disable:G.value,onClick:n[5]||=e=>D(`close`)},{default:y(()=>[v(T,null,{default:y(()=>[_(i(e.$t(`tooltip.closeDiffViewer`)),1)]),_:1})]),_:1},8,[`disable`])]),v(te,{dark:``}),h(`div`,We,[U.value===`review`?(f(),g(`div`,Ge,[v(Fe,{comments:Pe.value,"global-message":ot.value,submitting:G.value,onUpdateGlobal:t(W).setGlobalMessage,onJumpToFile:dt,onJumpToComment:pt,onSubmit:st},null,8,[`comments`,`global-message`,`submitting`,`onUpdateGlobal`])])):m(``,!0),h(`div`,{class:`diff-file-list-wrapper`,style:r({width:`${ht.value}px`,minWidth:`${it}px`})},[!I.value&&M.value.length>0?(f(),l(C,{key:0,modelValue:Ft.value,"onUpdate:modelValue":n[6]||=e=>Ft.value=e,dense:``,dark:``,outlined:``,clearable:``,debounce:150,placeholder:e.$t(`diff.searchFiles`),class:`diff-file-search q-ma-xs`},{prepend:y(()=>[v(S,{name:`search`,size:`16px`})]),_:1},8,[`modelValue`,`placeholder`])):m(``,!0),v(fe,{class:`diff-file-list q-pa-xs`,style:{width:`100%`,"border-right":`1px solid #2a2a4a`}},{default:y(()=>[I.value?(f(),l(oe,{key:0,size:`24px`,color:`grey-6`,class:`q-ma-md`})):M.value.length===0?(f(),g(`div`,Ke,i(e.$t(`diff.noChanges`)),1)):Lt.value?(f(),g(`div`,qe,i(e.$t(`diff.noFileMatch`)),1)):(f(),l(ve,{key:3,nodes:Nt.value,"node-key":`nodeKey`,"label-key":`label`,"children-key":`children`,dark:``,dense:``,"default-expand-all":``,"no-selection-unset":``,selected:Pt.value,filter:Ft.value,"filter-method":It,class:`diff-tree`,"onUpdate:selected":n[7]||=e=>{typeof e!=`string`||!e.startsWith(`file:`)||(F.value=e.slice(5))}},{"default-header":y(({node:n})=>[n.isFolder?(f(),g(s,{key:0},[v(S,{name:`folder`,size:`14px`,color:`indigo-4`,class:`q-mr-xs`}),h(`span`,Je,i(n.label),1),v(O,{label:n.children?t(be)(n.children):0,color:`grey-9`,"text-color":`grey-5`,class:`q-ml-xs`,style:{"font-size":`9px`}},null,8,[`label`]),U.value===`review`&<(ut(n))>0?(f(),l(O,{key:0,label:String(lt(ut(n))),color:`grey-7`,"text-color":`grey-3`,class:`q-ml-xs`,style:{"font-size":`9px`}},null,8,[`label`])):m(``,!0)],64)):(f(),g(s,{key:1},[v(S,{name:`description`,size:`14px`,style:r({color:Yt(n.file.status)}),class:`q-mr-xs`},{default:y(()=>[v(T,null,{default:y(()=>[_(i(n.file.status),1)]),_:2},1024)]),_:2},1032,[`style`]),h(`span`,Ye,i(n.label),1),Q.value&&n.file.path===F.value?(f(),g(`span`,Xe,`●`)):m(``,!0),U.value===`review`&&(ct.value.get(n.file.path)??0)>0?(f(),l(O,{key:1,label:String(ct.value.get(n.file.path)),color:`indigo-8`,"text-color":`white`,class:`q-ml-xs`,style:{"font-size":`9px`}},null,8,[`label`])):m(``,!0),$.value?(f(),l(ue,{key:2,"touch-position":``,"context-menu":``},{default:y(()=>[v(_e,{dense:``,dark:``,style:{"min-width":`220px`}},{default:y(()=>[x((f(),l(ce,{clickable:``,onClick:e=>Ut(n.file.path,n.file.status)},{default:y(()=>[v(se,{avatar:``},{default:y(()=>[v(S,{name:n.file.status===`untracked`?`delete`:`restore`,size:`16px`,color:n.file.status===`untracked`?`red-5`:`orange-5`},null,8,[`name`,`color`])]),_:2},1024),v(se,null,{default:y(()=>[_(i(n.file.status===`untracked`?e.$t(`diff.deleteUntracked`):e.$t(`diff.rollbackToRemote`)),1)]),_:2},1024)]),_:2},1032,[`onClick`])),[[pe]])]),_:2},1024)]),_:2},1024)):m(``,!0)],64))]),_:1},8,[`nodes`,`selected`,`filter`]))]),_:1}),h(`div`,{class:`diff-file-list-resize-handle`,onMousedown:gt},null,32)],4),h(`div`,Ze,[L.value?(f(),g(`div`,Qe,[v(oe,{size:`32px`,color:`indigo-4`})])):F.value?m(``,!0):(f(),g(`div`,$e,i(e.$t(`diff.selectFile`)),1)),h(`div`,{ref_key:`editorWrapperRef`,ref:_t,class:`col`,style:{"min-height":`0`,position:`relative`,overflow:`hidden`}},[h(`div`,{ref_key:`editorContainer`,ref:R,style:{position:`absolute`,inset:`0`}},null,512),(f(!0),g(s,null,ee(X.value,e=>(f(),g(`div`,{key:e.zoneId,class:`review-zone-overlay`,style:r({top:`${e.topPx}px`,height:`${e.heightPx}px`})},[v(ke,{comments:e.comments,"start-in-add-mode":e.transient,onAdd:t=>wt(F.value??``,e.line,t),onUpdate:(t,n)=>Tt(F.value??``,e.line,t,n),onDelete:t=>Et(F.value??``,e.line,t),onDismissEmpty:t=>xt(e.line)},null,8,[`comments`,`start-in-add-mode`,`onAdd`,`onUpdate`,`onDelete`,`onDismissEmpty`])],4))),128))],512),Gt.value?(f(),l(w,{key:2,"no-caps":``,dense:``,size:`sm`,color:`primary`,icon:`chat`,label:e.$t(`diff.addToChat`),class:`send-to-chat-btn`,onClick:qt},null,8,[`label`])):m(``,!0)])])]))}}),[[`__scopeId`,`data-v-0325cb9b`]]);export{ot as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{B as e,C as t,wt as n,yt as r}from"./reactivity.esm-bundler-DtSZKRQB.js";import{$ as i,A as a,B as o,H as s,Mt as ee,Rt as c,U as l,V as u,W as d,Wt as f,X as te,Z as p,_n as m}from"./runtime-dom.esm-bundler-DgevF6KV.js";import{t as h}from"./QIcon--SvgE-nS.js";import{Dt as g,G as _,kt as v,s as ne}from"./index-CoOsPyyG.js";import{n as y,r as b,t as re}from"./use-quasar-CeHlTrGg.js";import{t as x}from"./QBadge-sMJZ_eZm.js";import{t as S}from"./QSpace-D9UEvM99.js";import{t as C}from"./QList-Be_FbTA3.js";import{t as ie}from"./QPage-DuIsRmYu.js";var ae={class:`row items-center q-mb-md`},oe={class:`text-h6 q-ml-sm`},se={key:0,class:`text-grey-6 text-center q-pa-lg`},ce={key:1,class:`column q-gutter-md`},le={class:`text-subtitle2 q-mb-sm`},ue={class:`row q-col-gutter-md`},de={class:`col-auto`},w={class:`text-caption text-grey-6`},T={class:`text-body2`,style:{"font-family":`var(--kobo-font-mono, monospace)`}},E={class:`col-auto`},D={class:`text-caption text-grey-6`},O={class:`text-body2`,style:{"font-family":`var(--kobo-font-mono, monospace)`}},k={class:`col`},A={class:`text-caption text-grey-6`},j={class:`text-body2`},M={class:`row items-center`},N={class:`text-subtitle2`},P={class:`row q-col-gutter-md q-mt-xs`},F={class:`col`},I={class:`text-caption text-grey-6`},L={class:`text-body2`},R={class:`col-auto`},z={class:`text-caption text-grey-6`},B={class:`text-body2`},V={class:`col-auto`},H={class:`text-caption text-grey-6`},fe={class:`text-body2`},pe={class:`text-subtitle2 q-mb-sm`},me={class:`column q-gutter-sm`},he={class:`row items-center`},ge={class:`q-ml-sm text-body2`},_e={key:0,class:`text-caption text-grey-5`},ve={key:1,class:`text-caption text-negative`},ye={class:`row items-center`},be={class:`q-ml-sm text-body2`},xe={key:0,class:`text-caption text-grey-5`},Se={key:1,class:`text-caption text-negative`},Ce={class:`row items-center`},we={class:`text-subtitle2`},Te={class:`text-caption text-grey-6 q-mt-xs`},Ee={key:0,class:`q-mt-sm`},De={class:`text-caption text-negative q-mb-xs`},Oe={class:`text-body2`},ke={class:`text-caption text-grey-6`},Ae={class:`row items-center`},je={class:`text-subtitle2`},Me={class:`text-subtitle1 q-mt-md q-mb-xs text-grey-5`},U={class:`row items-center`},Ne={class:`text-subtitle2`},Pe={key:0,class:`text-caption text-grey-7 q-mt-xs`},Fe={class:`text-body2`},Ie={class:`text-caption text-grey-6`},Le={class:`row items-center`},Re={class:`text-subtitle2`},ze={key:0,class:`text-caption text-grey-7 q-mt-xs`},Be={class:`text-body2`},Ve={class:`text-caption text-grey-6`},He={key:0},Ue={class:`row items-center`},We={class:`text-subtitle2`},Ge={key:0,class:`text-caption text-grey-7 q-mt-xs`},Ke={class:`text-body2`},qe={class:`text-caption text-grey-6`},Je={class:`row items-center`},Ye={class:`text-subtitle2`},Xe={key:0,class:`text-caption text-grey-7 q-mt-xs`},Ze={class:`text-body2`},Qe={class:`text-caption text-grey-6`},$e={class:`row items-center`},et={class:`text-subtitle2`},tt={key:0,class:`text-caption text-grey-7 q-mt-xs`},nt={class:`text-body2`},rt={class:`text-subtitle2 q-mb-sm`},it={class:`column q-gutter-xs`},at={class:`row items-center`},ot={class:`q-ml-sm text-caption text-grey-6`},st={class:`row items-center`},ct={class:`q-ml-sm text-caption text-grey-6`},lt={class:`row items-center`},ut={class:`q-ml-sm text-caption text-grey-6`},W=i({__name:`HealthPage`,setup(i){let W=re(),G=ne(),K=t(null),q=t(!1);async function J(){q.value=!0;try{let e=await fetch(`/api/health/report`);if(!e.ok)throw Error(`HTTP ${e.status}`);K.value=await e.json()}catch(e){W.notify({type:`negative`,message:String(e),position:`top`,timeout:4e3})}finally{q.value=!1}}ee(J);let dt=o(()=>{let e=K.value?.db.sizeBytes;return e==null?`—`:e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(1)} KB`:`${(e/1024/1024).toFixed(1)} MB`}),Y=o(()=>{let e=K.value;return e?e.db.schemaVersion===e.db.currentSchemaVersion:!1});function X(e){return e?`check_circle`:`error`}function Z(e){return e?`positive`:`negative`}function Q(e){return new Date(e).toLocaleTimeString(void 0,{hour:`2-digit`,minute:`2-digit`})}function ft(e){let t=Date.now()-new Date(e).getTime();if(Number.isNaN(t)||t<0)return`—`;let n=Math.floor(t/1e3);if(n<60)return`${n}s`;let r=Math.floor(n/60);if(r<60)return`${r}m`;let i=Math.floor(r/60);return i<24?`${i}h${r%60?` ${r%60}m`:``}`:`${Math.floor(i/24)}d`}function $(e){G.push({name:`workspace`,params:{id:e}}).catch(()=>{})}return(t,i)=>(c(),s(ie,{class:`q-pa-md`,style:{"max-width":`900px`,margin:`0 auto`}},{default:m(()=>[u(`div`,ae,[p(_,{flat:``,dense:``,round:``,icon:`arrow_back`,onClick:i[0]||=t=>e(G).back()}),u(`div`,oe,n(t.$t(`health.title`)),1),p(S),p(_,{flat:``,dense:``,icon:`refresh`,loading:q.value,label:t.$t(`common.refresh`),onClick:J},null,8,[`loading`,`label`])]),!K.value&&q.value?(c(),d(`div`,se,n(t.$t(`common.loading`)),1)):K.value?(c(),d(`div`,ce,[p(g,{dark:``,flat:``,bordered:``},{default:m(()=>[p(v,null,{default:m(()=>[u(`div`,le,n(t.$t(`health.envTitle`)),1),u(`div`,ue,[u(`div`,de,[u(`div`,w,n(t.$t(`health.version`)),1),u(`div`,T,n(K.value.version),1)]),u(`div`,E,[u(`div`,D,n(t.$t(`health.settingsSchemaVersion`)),1),u(`div`,O,n(K.value.settings.schemaVersion),1)]),u(`div`,k,[u(`div`,A,n(t.$t(`health.koboHome`)),1),u(`div`,j,n(K.value.koboHome),1)])])]),_:1})]),_:1}),p(g,{dark:``,flat:``,bordered:``},{default:m(()=>[p(v,null,{default:m(()=>[u(`div`,M,[u(`div`,N,n(t.$t(`health.dbTitle`)),1),p(S),p(h,{name:X(Y.value),color:Z(Y.value)},null,8,[`name`,`color`])]),u(`div`,P,[u(`div`,F,[u(`div`,I,n(t.$t(`health.dbPath`)),1),u(`div`,L,n(K.value.db.path),1)]),u(`div`,R,[u(`div`,z,n(t.$t(`health.dbSize`)),1),u(`div`,B,n(dt.value),1)]),u(`div`,V,[u(`div`,H,n(t.$t(`health.schemaVersion`)),1),u(`div`,fe,n(K.value.db.schemaVersion)+` / `+n(K.value.db.currentSchemaVersion),1)])])]),_:1})]),_:1}),p(g,{dark:``,flat:``,bordered:``},{default:m(()=>[p(v,null,{default:m(()=>[u(`div`,pe,n(t.$t(`health.runtimesTitle`)),1),u(`div`,me,[u(`div`,he,[p(h,{name:X(K.value.claudeCli.available),color:Z(K.value.claudeCli.available),size:`sm`},null,8,[`name`,`color`]),u(`span`,ge,n(t.$t(`health.claudeCliTitle`)),1),p(S),K.value.claudeCli.available?(c(),d(`span`,_e,n(K.value.claudeCli.version),1)):(c(),d(`span`,ve,n(t.$t(`health.claudeCliMissing`)),1))]),u(`div`,ye,[p(h,{name:X(K.value.codexCli.available),color:Z(K.value.codexCli.available),size:`sm`},null,8,[`name`,`color`]),u(`span`,be,n(t.$t(`health.codexCliTitle`)),1),p(S),K.value.codexCli.available?(c(),d(`span`,xe,n(K.value.codexCli.version),1)):(c(),d(`span`,Se,n(t.$t(`health.codexCliMissing`)),1))])])]),_:1})]),_:1}),p(g,{dark:``,flat:``,bordered:``},{default:m(()=>[p(v,null,{default:m(()=>[u(`div`,Ce,[u(`div`,we,n(t.$t(`health.workspacesTitle`)),1),p(S),p(h,{name:X(K.value.workspaces.worktreesMissing.length===0),color:Z(K.value.workspaces.worktreesMissing.length===0)},null,8,[`name`,`color`])]),u(`div`,Te,n(t.$t(`health.workspacesCount`,{total:K.value.workspaces.total,archived:K.value.workspaces.archived})),1),K.value.workspaces.worktreesMissing.length>0?(c(),d(`div`,Ee,[u(`div`,De,n(t.$t(`health.worktreesMissing`,{count:K.value.workspaces.worktreesMissing.length})),1),p(C,{dense:``,dark:``},{default:m(()=>[(c(!0),d(a,null,f(K.value.workspaces.worktreesMissing,e=>(c(),s(b,{key:e.workspaceId},{default:m(()=>[p(y,null,{default:m(()=>[u(`div`,Oe,n(e.name),1),u(`div`,ke,n(e.path),1)]),_:2},1024)]),_:2},1024))),128))]),_:1})])):l(``,!0)]),_:1})]),_:1}),p(g,{dark:``,flat:``,bordered:``},{default:m(()=>[p(v,null,{default:m(()=>[u(`div`,Ae,[u(`div`,je,n(t.$t(`health.sessionsTitle`)),1),p(S),p(h,{name:X(K.value.agentSessions.orphaned===0),color:Z(K.value.agentSessions.orphaned===0)},null,8,[`name`,`color`])]),u(`div`,{class:r([`text-caption q-mt-xs`,K.value.agentSessions.orphaned>0?`text-negative`:`text-grey-6`])},n(t.$t(`health.sessionsOrphaned`,{n:K.value.agentSessions.orphaned})),3)]),_:1})]),_:1}),u(`div`,Me,n(t.$t(`health.activeTitle`)),1),p(g,{dark:``,flat:``,bordered:``},{default:m(()=>[p(v,null,{default:m(()=>[u(`div`,U,[p(h,{name:`hourglass_top`,size:`sm`,color:`amber-6`,class:`q-mr-sm`}),u(`div`,Ne,n(t.$t(`health.activeQuotaBackoffs`)),1),p(S),p(x,{label:K.value.active.quotaBackoffs.length,color:`grey-8`,"text-color":`grey-3`},null,8,[`label`])]),K.value.active.quotaBackoffs.length===0?(c(),d(`div`,Pe,n(t.$t(`health.noneActive`)),1)):(c(),s(C,{key:1,dense:``,dark:``,class:`q-mt-xs`},{default:m(()=>[(c(!0),d(a,null,f(K.value.active.quotaBackoffs,e=>(c(),s(b,{key:e.workspaceId,clickable:``,onClick:t=>$(e.workspaceId)},{default:m(()=>[p(y,null,{default:m(()=>[u(`div`,Fe,n(e.name),1),u(`div`,Ie,n(t.$t(`health.quotaResumeAt`,{time:Q(e.targetAt)}))+` · `+n(e.source)+` · retry #`+n(e.retryCount),1)]),_:2},1024)]),_:2},1032,[`onClick`]))),128))]),_:1}))]),_:1})]),_:1}),p(g,{dark:``,flat:``,bordered:``},{default:m(()=>[p(v,null,{default:m(()=>[u(`div`,Le,[p(h,{name:`schedule`,size:`sm`,color:`indigo-4`,class:`q-mr-sm`}),u(`div`,Re,n(t.$t(`health.activeWakeups`)),1),p(S),p(x,{label:K.value.active.pendingWakeups.length,color:`grey-8`,"text-color":`grey-3`},null,8,[`label`])]),K.value.active.pendingWakeups.length===0?(c(),d(`div`,ze,n(t.$t(`health.noneActive`)),1)):(c(),s(C,{key:1,dense:``,dark:``,class:`q-mt-xs`},{default:m(()=>[(c(!0),d(a,null,f(K.value.active.pendingWakeups,e=>(c(),s(b,{key:e.workspaceId,clickable:``,onClick:t=>$(e.workspaceId)},{default:m(()=>[p(y,null,{default:m(()=>[u(`div`,Be,n(e.name),1),u(`div`,Ve,[te(n(t.$t(`health.wakeupAt`,{time:Q(e.targetAt)}))+` `,1),e.reason?(c(),d(`span`,He,` · `+n(e.reason),1)):l(``,!0)])]),_:2},1024)]),_:2},1032,[`onClick`]))),128))]),_:1}))]),_:1})]),_:1}),p(g,{dark:``,flat:``,bordered:``},{default:m(()=>[p(v,null,{default:m(()=>[u(`div`,Ue,[p(h,{name:`autorenew`,size:`sm`,color:`amber-7`,class:`q-mr-sm`}),u(`div`,We,n(t.$t(`health.activeAutoLoop`)),1),p(S),p(x,{label:K.value.active.autoLoopActive.length,color:`grey-8`,"text-color":`grey-3`},null,8,[`label`])]),K.value.active.autoLoopActive.length===0?(c(),d(`div`,Ge,n(t.$t(`health.noneActive`)),1)):(c(),s(C,{key:1,dense:``,dark:``,class:`q-mt-xs`},{default:m(()=>[(c(!0),d(a,null,f(K.value.active.autoLoopActive,e=>(c(),s(b,{key:e.workspaceId,clickable:``,onClick:t=>$(e.workspaceId)},{default:m(()=>[p(y,null,{default:m(()=>[u(`div`,Ke,n(e.name),1),u(`div`,qe,n(e.ready?t.$t(`health.autoLoopReady`):t.$t(`health.autoLoopGrooming`)),1)]),_:2},1024)]),_:2},1032,[`onClick`]))),128))]),_:1}))]),_:1})]),_:1}),p(g,{dark:``,flat:``,bordered:``},{default:m(()=>[p(v,null,{default:m(()=>[u(`div`,Je,[p(h,{name:`play_arrow`,size:`sm`,color:`green-5`,class:`q-mr-sm`}),u(`div`,Ye,n(t.$t(`health.activeAgentSessions`)),1),p(S),p(x,{label:K.value.active.agentSessionsAlive.length,color:`grey-8`,"text-color":`grey-3`},null,8,[`label`])]),K.value.active.agentSessionsAlive.length===0?(c(),d(`div`,Xe,n(t.$t(`health.noneActive`)),1)):(c(),s(C,{key:1,dense:``,dark:``,class:`q-mt-xs`},{default:m(()=>[(c(!0),d(a,null,f(K.value.active.agentSessionsAlive,e=>(c(),s(b,{key:`${e.workspaceId}-${e.pid}`,clickable:``,onClick:t=>$(e.workspaceId)},{default:m(()=>[p(y,null,{default:m(()=>[u(`div`,Ze,n(e.workspaceName),1),u(`div`,Qe,` pid `+n(e.pid)+` · `+n(t.$t(`health.startedAgo`,{time:ft(e.startedAt)})),1)]),_:2},1024)]),_:2},1032,[`onClick`]))),128))]),_:1}))]),_:1})]),_:1}),p(g,{dark:``,flat:``,bordered:``},{default:m(()=>[p(v,null,{default:m(()=>[u(`div`,$e,[p(h,{name:`dns`,size:`sm`,color:`cyan-5`,class:`q-mr-sm`}),u(`div`,et,n(t.$t(`health.activeDevServers`)),1),p(S),p(x,{label:K.value.active.devServersRunning.length,color:`grey-8`,"text-color":`grey-3`},null,8,[`label`])]),K.value.active.devServersRunning.length===0?(c(),d(`div`,tt,n(t.$t(`health.noneActive`)),1)):(c(),s(C,{key:1,dense:``,dark:``,class:`q-mt-xs`},{default:m(()=>[(c(!0),d(a,null,f(K.value.active.devServersRunning,e=>(c(),s(b,{key:e.workspaceId,clickable:``,onClick:t=>$(e.workspaceId)},{default:m(()=>[p(y,null,{default:m(()=>[u(`div`,nt,n(e.name),1)]),_:2},1024)]),_:2},1032,[`onClick`]))),128))]),_:1}))]),_:1})]),_:1}),p(g,{dark:``,flat:``,bordered:``},{default:m(()=>[p(v,null,{default:m(()=>[u(`div`,rt,n(t.$t(`health.integrationsTitle`)),1),u(`div`,it,[u(`div`,at,[p(h,{name:X(K.value.integrations.notion.enabled&&K.value.integrations.notion.configured),color:Z(K.value.integrations.notion.enabled&&K.value.integrations.notion.configured),size:`sm`},null,8,[`name`,`color`]),i[1]||=u(`span`,{class:`q-ml-sm text-body2`},`Notion`,-1),u(`span`,ot,n(K.value.integrations.notion.enabled?K.value.integrations.notion.configured?t.$t(`health.integrationConfigured`):t.$t(`health.integrationMissing`):t.$t(`health.integrationDisabled`)),1)]),u(`div`,st,[p(h,{name:X(K.value.integrations.sentry.enabled&&K.value.integrations.sentry.configured),color:Z(K.value.integrations.sentry.enabled&&K.value.integrations.sentry.configured),size:`sm`},null,8,[`name`,`color`]),i[2]||=u(`span`,{class:`q-ml-sm text-body2`},`Sentry`,-1),u(`span`,ct,n(K.value.integrations.sentry.enabled?K.value.integrations.sentry.configured?t.$t(`health.integrationConfigured`):t.$t(`health.integrationMissing`):t.$t(`health.integrationDisabled`)),1)]),u(`div`,lt,[p(h,{name:X(K.value.integrations.editor.configured),color:Z(K.value.integrations.editor.configured),size:`sm`},null,8,[`name`,`color`]),i[3]||=u(`span`,{class:`q-ml-sm text-body2`},`Editor`,-1),u(`span`,ut,n(K.value.integrations.editor.configured?t.$t(`health.integrationConfigured`):t.$t(`health.integrationMissing`)),1)])])]),_:1})]),_:1})])):l(``,!0)]),_:1}))}});export{W as default};
|
|
1
|
+
import{B as e,C as t,wt as n,yt as r}from"./reactivity.esm-bundler-DtSZKRQB.js";import{$ as i,A as a,B as o,H as s,Mt as ee,Rt as c,U as l,V as u,W as d,Wt as f,X as te,Z as p,_n as m}from"./runtime-dom.esm-bundler-DgevF6KV.js";import{t as h}from"./QIcon--SvgE-nS.js";import{Dt as g,G as _,kt as v,s as ne}from"./index-M0ntkdkQ.js";import{n as y,r as b,t as re}from"./use-quasar-B6Aitpct.js";import{t as x}from"./QBadge-sMJZ_eZm.js";import{t as S}from"./QSpace-D9UEvM99.js";import{t as C}from"./QList-Be_FbTA3.js";import{t as ie}from"./QPage-DuIsRmYu.js";var ae={class:`row items-center q-mb-md`},oe={class:`text-h6 q-ml-sm`},se={key:0,class:`text-grey-6 text-center q-pa-lg`},ce={key:1,class:`column q-gutter-md`},le={class:`text-subtitle2 q-mb-sm`},ue={class:`row q-col-gutter-md`},de={class:`col-auto`},w={class:`text-caption text-grey-6`},T={class:`text-body2`,style:{"font-family":`var(--kobo-font-mono, monospace)`}},E={class:`col-auto`},D={class:`text-caption text-grey-6`},O={class:`text-body2`,style:{"font-family":`var(--kobo-font-mono, monospace)`}},k={class:`col`},A={class:`text-caption text-grey-6`},j={class:`text-body2`},M={class:`row items-center`},N={class:`text-subtitle2`},P={class:`row q-col-gutter-md q-mt-xs`},F={class:`col`},I={class:`text-caption text-grey-6`},L={class:`text-body2`},R={class:`col-auto`},z={class:`text-caption text-grey-6`},B={class:`text-body2`},V={class:`col-auto`},H={class:`text-caption text-grey-6`},fe={class:`text-body2`},pe={class:`text-subtitle2 q-mb-sm`},me={class:`column q-gutter-sm`},he={class:`row items-center`},ge={class:`q-ml-sm text-body2`},_e={key:0,class:`text-caption text-grey-5`},ve={key:1,class:`text-caption text-negative`},ye={class:`row items-center`},be={class:`q-ml-sm text-body2`},xe={key:0,class:`text-caption text-grey-5`},Se={key:1,class:`text-caption text-negative`},Ce={class:`row items-center`},we={class:`text-subtitle2`},Te={class:`text-caption text-grey-6 q-mt-xs`},Ee={key:0,class:`q-mt-sm`},De={class:`text-caption text-negative q-mb-xs`},Oe={class:`text-body2`},ke={class:`text-caption text-grey-6`},Ae={class:`row items-center`},je={class:`text-subtitle2`},Me={class:`text-subtitle1 q-mt-md q-mb-xs text-grey-5`},U={class:`row items-center`},Ne={class:`text-subtitle2`},Pe={key:0,class:`text-caption text-grey-7 q-mt-xs`},Fe={class:`text-body2`},Ie={class:`text-caption text-grey-6`},Le={class:`row items-center`},Re={class:`text-subtitle2`},ze={key:0,class:`text-caption text-grey-7 q-mt-xs`},Be={class:`text-body2`},Ve={class:`text-caption text-grey-6`},He={key:0},Ue={class:`row items-center`},We={class:`text-subtitle2`},Ge={key:0,class:`text-caption text-grey-7 q-mt-xs`},Ke={class:`text-body2`},qe={class:`text-caption text-grey-6`},Je={class:`row items-center`},Ye={class:`text-subtitle2`},Xe={key:0,class:`text-caption text-grey-7 q-mt-xs`},Ze={class:`text-body2`},Qe={class:`text-caption text-grey-6`},$e={class:`row items-center`},et={class:`text-subtitle2`},tt={key:0,class:`text-caption text-grey-7 q-mt-xs`},nt={class:`text-body2`},rt={class:`text-subtitle2 q-mb-sm`},it={class:`column q-gutter-xs`},at={class:`row items-center`},ot={class:`q-ml-sm text-caption text-grey-6`},st={class:`row items-center`},ct={class:`q-ml-sm text-caption text-grey-6`},lt={class:`row items-center`},ut={class:`q-ml-sm text-caption text-grey-6`},W=i({__name:`HealthPage`,setup(i){let W=re(),G=ne(),K=t(null),q=t(!1);async function J(){q.value=!0;try{let e=await fetch(`/api/health/report`);if(!e.ok)throw Error(`HTTP ${e.status}`);K.value=await e.json()}catch(e){W.notify({type:`negative`,message:String(e),position:`top`,timeout:4e3})}finally{q.value=!1}}ee(J);let dt=o(()=>{let e=K.value?.db.sizeBytes;return e==null?`—`:e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(1)} KB`:`${(e/1024/1024).toFixed(1)} MB`}),Y=o(()=>{let e=K.value;return e?e.db.schemaVersion===e.db.currentSchemaVersion:!1});function X(e){return e?`check_circle`:`error`}function Z(e){return e?`positive`:`negative`}function Q(e){return new Date(e).toLocaleTimeString(void 0,{hour:`2-digit`,minute:`2-digit`})}function ft(e){let t=Date.now()-new Date(e).getTime();if(Number.isNaN(t)||t<0)return`—`;let n=Math.floor(t/1e3);if(n<60)return`${n}s`;let r=Math.floor(n/60);if(r<60)return`${r}m`;let i=Math.floor(r/60);return i<24?`${i}h${r%60?` ${r%60}m`:``}`:`${Math.floor(i/24)}d`}function $(e){G.push({name:`workspace`,params:{id:e}}).catch(()=>{})}return(t,i)=>(c(),s(ie,{class:`q-pa-md`,style:{"max-width":`900px`,margin:`0 auto`}},{default:m(()=>[u(`div`,ae,[p(_,{flat:``,dense:``,round:``,icon:`arrow_back`,onClick:i[0]||=t=>e(G).back()}),u(`div`,oe,n(t.$t(`health.title`)),1),p(S),p(_,{flat:``,dense:``,icon:`refresh`,loading:q.value,label:t.$t(`common.refresh`),onClick:J},null,8,[`loading`,`label`])]),!K.value&&q.value?(c(),d(`div`,se,n(t.$t(`common.loading`)),1)):K.value?(c(),d(`div`,ce,[p(g,{dark:``,flat:``,bordered:``},{default:m(()=>[p(v,null,{default:m(()=>[u(`div`,le,n(t.$t(`health.envTitle`)),1),u(`div`,ue,[u(`div`,de,[u(`div`,w,n(t.$t(`health.version`)),1),u(`div`,T,n(K.value.version),1)]),u(`div`,E,[u(`div`,D,n(t.$t(`health.settingsSchemaVersion`)),1),u(`div`,O,n(K.value.settings.schemaVersion),1)]),u(`div`,k,[u(`div`,A,n(t.$t(`health.koboHome`)),1),u(`div`,j,n(K.value.koboHome),1)])])]),_:1})]),_:1}),p(g,{dark:``,flat:``,bordered:``},{default:m(()=>[p(v,null,{default:m(()=>[u(`div`,M,[u(`div`,N,n(t.$t(`health.dbTitle`)),1),p(S),p(h,{name:X(Y.value),color:Z(Y.value)},null,8,[`name`,`color`])]),u(`div`,P,[u(`div`,F,[u(`div`,I,n(t.$t(`health.dbPath`)),1),u(`div`,L,n(K.value.db.path),1)]),u(`div`,R,[u(`div`,z,n(t.$t(`health.dbSize`)),1),u(`div`,B,n(dt.value),1)]),u(`div`,V,[u(`div`,H,n(t.$t(`health.schemaVersion`)),1),u(`div`,fe,n(K.value.db.schemaVersion)+` / `+n(K.value.db.currentSchemaVersion),1)])])]),_:1})]),_:1}),p(g,{dark:``,flat:``,bordered:``},{default:m(()=>[p(v,null,{default:m(()=>[u(`div`,pe,n(t.$t(`health.runtimesTitle`)),1),u(`div`,me,[u(`div`,he,[p(h,{name:X(K.value.claudeCli.available),color:Z(K.value.claudeCli.available),size:`sm`},null,8,[`name`,`color`]),u(`span`,ge,n(t.$t(`health.claudeCliTitle`)),1),p(S),K.value.claudeCli.available?(c(),d(`span`,_e,n(K.value.claudeCli.version),1)):(c(),d(`span`,ve,n(t.$t(`health.claudeCliMissing`)),1))]),u(`div`,ye,[p(h,{name:X(K.value.codexCli.available),color:Z(K.value.codexCli.available),size:`sm`},null,8,[`name`,`color`]),u(`span`,be,n(t.$t(`health.codexCliTitle`)),1),p(S),K.value.codexCli.available?(c(),d(`span`,xe,n(K.value.codexCli.version),1)):(c(),d(`span`,Se,n(t.$t(`health.codexCliMissing`)),1))])])]),_:1})]),_:1}),p(g,{dark:``,flat:``,bordered:``},{default:m(()=>[p(v,null,{default:m(()=>[u(`div`,Ce,[u(`div`,we,n(t.$t(`health.workspacesTitle`)),1),p(S),p(h,{name:X(K.value.workspaces.worktreesMissing.length===0),color:Z(K.value.workspaces.worktreesMissing.length===0)},null,8,[`name`,`color`])]),u(`div`,Te,n(t.$t(`health.workspacesCount`,{total:K.value.workspaces.total,archived:K.value.workspaces.archived})),1),K.value.workspaces.worktreesMissing.length>0?(c(),d(`div`,Ee,[u(`div`,De,n(t.$t(`health.worktreesMissing`,{count:K.value.workspaces.worktreesMissing.length})),1),p(C,{dense:``,dark:``},{default:m(()=>[(c(!0),d(a,null,f(K.value.workspaces.worktreesMissing,e=>(c(),s(b,{key:e.workspaceId},{default:m(()=>[p(y,null,{default:m(()=>[u(`div`,Oe,n(e.name),1),u(`div`,ke,n(e.path),1)]),_:2},1024)]),_:2},1024))),128))]),_:1})])):l(``,!0)]),_:1})]),_:1}),p(g,{dark:``,flat:``,bordered:``},{default:m(()=>[p(v,null,{default:m(()=>[u(`div`,Ae,[u(`div`,je,n(t.$t(`health.sessionsTitle`)),1),p(S),p(h,{name:X(K.value.agentSessions.orphaned===0),color:Z(K.value.agentSessions.orphaned===0)},null,8,[`name`,`color`])]),u(`div`,{class:r([`text-caption q-mt-xs`,K.value.agentSessions.orphaned>0?`text-negative`:`text-grey-6`])},n(t.$t(`health.sessionsOrphaned`,{n:K.value.agentSessions.orphaned})),3)]),_:1})]),_:1}),u(`div`,Me,n(t.$t(`health.activeTitle`)),1),p(g,{dark:``,flat:``,bordered:``},{default:m(()=>[p(v,null,{default:m(()=>[u(`div`,U,[p(h,{name:`hourglass_top`,size:`sm`,color:`amber-6`,class:`q-mr-sm`}),u(`div`,Ne,n(t.$t(`health.activeQuotaBackoffs`)),1),p(S),p(x,{label:K.value.active.quotaBackoffs.length,color:`grey-8`,"text-color":`grey-3`},null,8,[`label`])]),K.value.active.quotaBackoffs.length===0?(c(),d(`div`,Pe,n(t.$t(`health.noneActive`)),1)):(c(),s(C,{key:1,dense:``,dark:``,class:`q-mt-xs`},{default:m(()=>[(c(!0),d(a,null,f(K.value.active.quotaBackoffs,e=>(c(),s(b,{key:e.workspaceId,clickable:``,onClick:t=>$(e.workspaceId)},{default:m(()=>[p(y,null,{default:m(()=>[u(`div`,Fe,n(e.name),1),u(`div`,Ie,n(t.$t(`health.quotaResumeAt`,{time:Q(e.targetAt)}))+` · `+n(e.source)+` · retry #`+n(e.retryCount),1)]),_:2},1024)]),_:2},1032,[`onClick`]))),128))]),_:1}))]),_:1})]),_:1}),p(g,{dark:``,flat:``,bordered:``},{default:m(()=>[p(v,null,{default:m(()=>[u(`div`,Le,[p(h,{name:`schedule`,size:`sm`,color:`indigo-4`,class:`q-mr-sm`}),u(`div`,Re,n(t.$t(`health.activeWakeups`)),1),p(S),p(x,{label:K.value.active.pendingWakeups.length,color:`grey-8`,"text-color":`grey-3`},null,8,[`label`])]),K.value.active.pendingWakeups.length===0?(c(),d(`div`,ze,n(t.$t(`health.noneActive`)),1)):(c(),s(C,{key:1,dense:``,dark:``,class:`q-mt-xs`},{default:m(()=>[(c(!0),d(a,null,f(K.value.active.pendingWakeups,e=>(c(),s(b,{key:e.workspaceId,clickable:``,onClick:t=>$(e.workspaceId)},{default:m(()=>[p(y,null,{default:m(()=>[u(`div`,Be,n(e.name),1),u(`div`,Ve,[te(n(t.$t(`health.wakeupAt`,{time:Q(e.targetAt)}))+` `,1),e.reason?(c(),d(`span`,He,` · `+n(e.reason),1)):l(``,!0)])]),_:2},1024)]),_:2},1032,[`onClick`]))),128))]),_:1}))]),_:1})]),_:1}),p(g,{dark:``,flat:``,bordered:``},{default:m(()=>[p(v,null,{default:m(()=>[u(`div`,Ue,[p(h,{name:`autorenew`,size:`sm`,color:`amber-7`,class:`q-mr-sm`}),u(`div`,We,n(t.$t(`health.activeAutoLoop`)),1),p(S),p(x,{label:K.value.active.autoLoopActive.length,color:`grey-8`,"text-color":`grey-3`},null,8,[`label`])]),K.value.active.autoLoopActive.length===0?(c(),d(`div`,Ge,n(t.$t(`health.noneActive`)),1)):(c(),s(C,{key:1,dense:``,dark:``,class:`q-mt-xs`},{default:m(()=>[(c(!0),d(a,null,f(K.value.active.autoLoopActive,e=>(c(),s(b,{key:e.workspaceId,clickable:``,onClick:t=>$(e.workspaceId)},{default:m(()=>[p(y,null,{default:m(()=>[u(`div`,Ke,n(e.name),1),u(`div`,qe,n(e.ready?t.$t(`health.autoLoopReady`):t.$t(`health.autoLoopGrooming`)),1)]),_:2},1024)]),_:2},1032,[`onClick`]))),128))]),_:1}))]),_:1})]),_:1}),p(g,{dark:``,flat:``,bordered:``},{default:m(()=>[p(v,null,{default:m(()=>[u(`div`,Je,[p(h,{name:`play_arrow`,size:`sm`,color:`green-5`,class:`q-mr-sm`}),u(`div`,Ye,n(t.$t(`health.activeAgentSessions`)),1),p(S),p(x,{label:K.value.active.agentSessionsAlive.length,color:`grey-8`,"text-color":`grey-3`},null,8,[`label`])]),K.value.active.agentSessionsAlive.length===0?(c(),d(`div`,Xe,n(t.$t(`health.noneActive`)),1)):(c(),s(C,{key:1,dense:``,dark:``,class:`q-mt-xs`},{default:m(()=>[(c(!0),d(a,null,f(K.value.active.agentSessionsAlive,e=>(c(),s(b,{key:`${e.workspaceId}-${e.pid}`,clickable:``,onClick:t=>$(e.workspaceId)},{default:m(()=>[p(y,null,{default:m(()=>[u(`div`,Ze,n(e.workspaceName),1),u(`div`,Qe,` pid `+n(e.pid)+` · `+n(t.$t(`health.startedAgo`,{time:ft(e.startedAt)})),1)]),_:2},1024)]),_:2},1032,[`onClick`]))),128))]),_:1}))]),_:1})]),_:1}),p(g,{dark:``,flat:``,bordered:``},{default:m(()=>[p(v,null,{default:m(()=>[u(`div`,$e,[p(h,{name:`dns`,size:`sm`,color:`cyan-5`,class:`q-mr-sm`}),u(`div`,et,n(t.$t(`health.activeDevServers`)),1),p(S),p(x,{label:K.value.active.devServersRunning.length,color:`grey-8`,"text-color":`grey-3`},null,8,[`label`])]),K.value.active.devServersRunning.length===0?(c(),d(`div`,tt,n(t.$t(`health.noneActive`)),1)):(c(),s(C,{key:1,dense:``,dark:``,class:`q-mt-xs`},{default:m(()=>[(c(!0),d(a,null,f(K.value.active.devServersRunning,e=>(c(),s(b,{key:e.workspaceId,clickable:``,onClick:t=>$(e.workspaceId)},{default:m(()=>[p(y,null,{default:m(()=>[u(`div`,nt,n(e.name),1)]),_:2},1024)]),_:2},1032,[`onClick`]))),128))]),_:1}))]),_:1})]),_:1}),p(g,{dark:``,flat:``,bordered:``},{default:m(()=>[p(v,null,{default:m(()=>[u(`div`,rt,n(t.$t(`health.integrationsTitle`)),1),u(`div`,it,[u(`div`,at,[p(h,{name:X(K.value.integrations.notion.enabled&&K.value.integrations.notion.configured),color:Z(K.value.integrations.notion.enabled&&K.value.integrations.notion.configured),size:`sm`},null,8,[`name`,`color`]),i[1]||=u(`span`,{class:`q-ml-sm text-body2`},`Notion`,-1),u(`span`,ot,n(K.value.integrations.notion.enabled?K.value.integrations.notion.configured?t.$t(`health.integrationConfigured`):t.$t(`health.integrationMissing`):t.$t(`health.integrationDisabled`)),1)]),u(`div`,st,[p(h,{name:X(K.value.integrations.sentry.enabled&&K.value.integrations.sentry.configured),color:Z(K.value.integrations.sentry.enabled&&K.value.integrations.sentry.configured),size:`sm`},null,8,[`name`,`color`]),i[2]||=u(`span`,{class:`q-ml-sm text-body2`},`Sentry`,-1),u(`span`,ct,n(K.value.integrations.sentry.enabled?K.value.integrations.sentry.configured?t.$t(`health.integrationConfigured`):t.$t(`health.integrationMissing`):t.$t(`health.integrationDisabled`)),1)]),u(`div`,lt,[p(h,{name:X(K.value.integrations.editor.configured),color:Z(K.value.integrations.editor.configured),size:`sm`},null,8,[`name`,`color`]),i[3]||=u(`span`,{class:`q-ml-sm text-body2`},`Editor`,-1),u(`span`,ut,n(K.value.integrations.editor.configured?t.$t(`health.integrationConfigured`):t.$t(`health.integrationMissing`)),1)])])]),_:1})]),_:1})])):l(``,!0)]),_:1}))}});export{W as default};
|