@loicngr/kobo 1.11.10 → 1.11.12
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 +8 -0
- package/dist/server/routes/workspaces.js +3 -1
- package/dist/server/services/agent/engines/claude-code/engine.js +15 -8
- package/dist/server/services/agent/engines/codex/engine.js +69 -8
- package/dist/server/services/agent/engines/codex/event-mapper.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-Ds8cAMNc.js} +1 -1
- package/src/client/dist/pwa/assets/{ChangelogPage-XSYwu9XA.js → ChangelogPage-DO6DNO4Q.js} +1 -1
- package/src/client/dist/pwa/assets/{ClosePopup-dpcrW9DC.js → ClosePopup-DuAqn8Pb.js} +1 -1
- package/src/client/dist/pwa/assets/CreatePage-BnMSo_79.js +2 -0
- package/src/client/dist/pwa/assets/CreatePage-CV_RpAuV.css +1 -0
- package/src/client/dist/pwa/assets/{DiffViewer-DnFN6Sc_.js → DiffViewer-CMnFGReI.js} +3 -3
- package/src/client/dist/pwa/assets/{HealthPage-DVrZfMI6.js → HealthPage-BRAxQKSP.js} +1 -1
- package/src/client/dist/pwa/assets/{MainLayout-D_3nFaCG.js → MainLayout-BN1ug95K.js} +2 -2
- package/src/client/dist/pwa/assets/{QBtnToggle-BgfN19l8.js → QBtnToggle-DsCDNQzX.js} +1 -1
- package/src/client/dist/pwa/assets/{QChip-EQGYShN0.js → QChip-DWGDTZnX.js} +1 -1
- package/src/client/dist/pwa/assets/QSelect-8Ip46vhk.js +36 -0
- package/src/client/dist/pwa/assets/{QTooltip-HEIFh5w9.js → QTooltip-Bz4g3bmr.js} +1 -1
- package/src/client/dist/pwa/assets/{SearchPage-1B5HOf90.js → SearchPage-BD53VJEr.js} +1 -1
- package/src/client/dist/pwa/assets/{SettingsPage-v8f4rrCt.js → SettingsPage-3rYdJZga.js} +3 -3
- package/src/client/dist/pwa/assets/SettingsPage-BJZWZYPC.css +1 -0
- package/src/client/dist/pwa/assets/{TouchPan-lynWXY69.js → TouchPan-BKu8V4eN.js} +1 -1
- package/src/client/dist/pwa/assets/{WorkspacePage-Vjzi8YnW.js → WorkspacePage-CbC_t5Rx.js} +3 -3
- package/src/client/dist/pwa/assets/{cssMode-cg8iVI-i.js → cssMode-vaMVESGy.js} +1 -1
- package/src/client/dist/pwa/assets/{documents-Dlx8yiSO.js → documents-CyKQ9lT6.js} +1 -1
- package/src/client/dist/pwa/assets/{editor.api-CfaJRkrX.js → editor.api-CH3dhpKq.js} +1 -1
- package/src/client/dist/pwa/assets/{expand-template-D3LZldj1.js → expand-template-DQQQftsk.js} +1 -1
- package/src/client/dist/pwa/assets/{freemarker2-B_8OIClK.js → freemarker2-deLpERsj.js} +1 -1
- package/src/client/dist/pwa/assets/{handlebars-CaYi_uxU.js → handlebars-DdjS05Tc.js} +1 -1
- package/src/client/dist/pwa/assets/{html-BnCUDUl1.js → html-pK1ZEFvP.js} +1 -1
- package/src/client/dist/pwa/assets/{htmlMode-BZjKGnQF.js → htmlMode-DJFDI9Ru.js} +1 -1
- package/src/client/dist/pwa/assets/i18n-CK38o-IF.js +1 -0
- package/src/client/dist/pwa/assets/{index-CoOsPyyG.js → index-B_OmZ65F.js} +7 -7
- package/src/client/dist/pwa/assets/{javascript-DkSfoeHU.js → javascript-DbuFfxco.js} +1 -1
- package/src/client/dist/pwa/assets/{jsonMode-yKXxfx1V.js → jsonMode-B0Fu8Dcc.js} +1 -1
- package/src/client/dist/pwa/assets/{kobo-commands-vn1IQxLn.js → kobo-commands-rb43ZeWG.js} +1 -1
- package/src/client/dist/pwa/assets/{layout-CiQpugQB.js → layout-tAFrvQ5V.js} +1 -1
- package/src/client/dist/pwa/assets/{liquid-Dlhysv3U.js → liquid-DqDIKOCy.js} +1 -1
- package/src/client/dist/pwa/assets/{lspLanguageFeatures-CeYSQFUz.js → lspLanguageFeatures-CVcEibfJ.js} +1 -1
- package/src/client/dist/pwa/assets/{mdx-B8iME5NA.js → mdx-Bs4CovhI.js} +1 -1
- package/src/client/dist/pwa/assets/{network-auth-j2Drut6q.js → network-auth-DYrrh7Zr.js} +1 -1
- package/src/client/dist/pwa/assets/{pending-diff-open-B4RYz7G_.js → pending-diff-open-D1IYH8Pd.js} +1 -1
- package/src/client/dist/pwa/assets/{project-color-e3OdFi9X.js → project-color-DO6uj29M.js} +1 -1
- package/src/client/dist/pwa/assets/{python-CbFbC0ZR.js → python-BJoP0uN-.js} +1 -1
- package/src/client/dist/pwa/assets/{razor-7c2NCdFI.js → razor-cwD-YBcr.js} +1 -1
- package/src/client/dist/pwa/assets/{render-chat-markdown-Fer8kY38.js → render-chat-markdown-DZnIueUV.js} +1 -1
- package/src/client/dist/pwa/assets/{tsMode-BmShKjbx.js → tsMode-of3oS9sU.js} +1 -1
- package/src/client/dist/pwa/assets/{typescript-Dhu7Upbs.js → typescript-BTWMoUxn.js} +1 -1
- package/src/client/dist/pwa/assets/{use-onboarding-fe4sPCNf.js → use-onboarding-BTFkRBjE.js} +1 -1
- package/src/client/dist/pwa/assets/{use-quasar-CeHlTrGg.js → use-quasar-C1RCDSb6.js} +1 -1
- package/src/client/dist/pwa/assets/{vs-B-xsceNQ.js → vs-DDeaNKsH.js} +3 -3
- package/src/client/dist/pwa/assets/{workers-zVMTXVoC.js → workers-DQnKuGcq.js} +1 -1
- package/src/client/dist/pwa/assets/{xml-D64wpCtR.js → xml-RglGWD_3.js} +1 -1
- package/src/client/dist/pwa/assets/{yaml-CLSRKwfx.js → yaml-CSqGQpai.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/CreatePage-BK__rjvR.js +0 -2
- package/src/client/dist/pwa/assets/CreatePage-QwtfYunr.css +0 -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,14 @@ 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.12
|
|
8
|
+
|
|
9
|
+
- ✨ develop - feat(engines): Garder les sessions ouvertes pour les subagents en arrière-plan
|
|
10
|
+
|
|
11
|
+
## 1.11.11
|
|
12
|
+
|
|
13
|
+
- feat(settings): add ECC as a skill suite option (#27)
|
|
14
|
+
|
|
7
15
|
## 1.11.10
|
|
8
16
|
|
|
9
17
|
- 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) {
|
|
@@ -91,6 +91,7 @@ export function createClaudeCodeEngine() {
|
|
|
91
91
|
async start(options, onEvent) {
|
|
92
92
|
const abortController = new AbortController();
|
|
93
93
|
const mapperState = createMapperState();
|
|
94
|
+
const activeSubagentToolCallIds = new Set();
|
|
94
95
|
// Pending canUseTool callbacks, keyed by SDK ctx.toolUseID.
|
|
95
96
|
const pendingResolvers = new Map();
|
|
96
97
|
const isInteractive = options.agentPermissionMode === 'interactive';
|
|
@@ -239,8 +240,11 @@ export function createClaudeCodeEngine() {
|
|
|
239
240
|
// near-instantly. If it stays parked (a hung subagent task or stuck
|
|
240
241
|
// teardown), the `for await` below would wait forever — `session:ended`
|
|
241
242
|
// would never fire, freezing the orchestrator and the auto-loop. Once a
|
|
242
|
-
// `result` is observed
|
|
243
|
-
// with the result's own outcome,
|
|
243
|
+
// `result` is observed with no background subagent still running, we arm
|
|
244
|
+
// a timer that force-emits `session:ended` with the result's own outcome,
|
|
245
|
+
// then aborts the generator best-effort. A result emitted while a
|
|
246
|
+
// background subagent is active is not terminal: the SDK can still emit
|
|
247
|
+
// its task notification and an automatic continuation turn.
|
|
244
248
|
let resultDrainTimer;
|
|
245
249
|
let textIdleTimer;
|
|
246
250
|
const clearTextIdleWatchdog = () => {
|
|
@@ -270,11 +274,6 @@ export function createClaudeCodeEngine() {
|
|
|
270
274
|
console.warn(`[claude-engine] SDK generator still open ${RESULT_DRAIN_TIMEOUT_MS}ms after 'result' — forcing session:ended`);
|
|
271
275
|
const reason = userInterrupted ? 'killed' : mapperState.sawErrorResult ? 'error' : 'completed';
|
|
272
276
|
emitSessionEnded(reason, reason === 'completed' ? 0 : null);
|
|
273
|
-
// A wakeup starts a new turn later; it cannot safely keep this SDK
|
|
274
|
-
// stream alive after Kōbō has emitted session:ended and detached its
|
|
275
|
-
// controller. Leaving it alive lets late hooks issue AskUserQuestion
|
|
276
|
-
// calls against a closed input stream, producing an unanswerable UI
|
|
277
|
-
// card followed by "Stream closed". Abort deterministically instead.
|
|
278
277
|
abortController.abort();
|
|
279
278
|
}, RESULT_DRAIN_TIMEOUT_MS);
|
|
280
279
|
resultDrainTimer.unref?.();
|
|
@@ -284,6 +283,14 @@ export function createClaudeCodeEngine() {
|
|
|
284
283
|
try {
|
|
285
284
|
for await (const msg of q) {
|
|
286
285
|
const events = mapSdkMessage(msg, mapperState);
|
|
286
|
+
for (const ev of events) {
|
|
287
|
+
if (ev.kind !== 'subagent:progress')
|
|
288
|
+
continue;
|
|
289
|
+
if (ev.status === 'running')
|
|
290
|
+
activeSubagentToolCallIds.add(ev.toolCallId);
|
|
291
|
+
else
|
|
292
|
+
activeSubagentToolCallIds.delete(ev.toolCallId);
|
|
293
|
+
}
|
|
287
294
|
for (const ev of events) {
|
|
288
295
|
if (ev.kind === 'session:started')
|
|
289
296
|
discoveredSessionId = ev.engineSessionId;
|
|
@@ -300,7 +307,7 @@ export function createClaudeCodeEngine() {
|
|
|
300
307
|
clearTextIdleWatchdog();
|
|
301
308
|
completedResponses++;
|
|
302
309
|
// A queued forced message starts the next response on this same SDK stream.
|
|
303
|
-
if (!inputStream.hasUnansweredInput(completedResponses)) {
|
|
310
|
+
if (!inputStream.hasUnansweredInput(completedResponses) && activeSubagentToolCallIds.size === 0) {
|
|
304
311
|
inputStream.close();
|
|
305
312
|
armResultDrainWatchdog();
|
|
306
313
|
}
|
|
@@ -102,10 +102,29 @@ export function createCodexEngine() {
|
|
|
102
102
|
}
|
|
103
103
|
let resolveTurnDone;
|
|
104
104
|
let rejectTurnDone;
|
|
105
|
+
const activeSubagentThreads = new Map();
|
|
106
|
+
let waitingForBackgroundSubagents = false;
|
|
105
107
|
const turnDonePromise = new Promise((resolve, reject) => {
|
|
106
108
|
resolveTurnDone = resolve;
|
|
107
109
|
rejectTurnDone = reject;
|
|
108
110
|
});
|
|
111
|
+
const finishBackgroundSubagent = (threadId, alreadyEmittedToolCallId) => {
|
|
112
|
+
const tracked = activeSubagentThreads.get(threadId);
|
|
113
|
+
if (!tracked)
|
|
114
|
+
return;
|
|
115
|
+
activeSubagentThreads.delete(threadId);
|
|
116
|
+
if (tracked.toolCallId !== alreadyEmittedToolCallId) {
|
|
117
|
+
safeEmit({
|
|
118
|
+
kind: 'subagent:progress',
|
|
119
|
+
toolCallId: tracked.toolCallId,
|
|
120
|
+
status: 'done',
|
|
121
|
+
description: tracked.description,
|
|
122
|
+
taskType: tracked.taskType,
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
if (waitingForBackgroundSubagents && activeSubagentThreads.size === 0)
|
|
126
|
+
resolveTurnDone();
|
|
127
|
+
};
|
|
109
128
|
const turnLiveness = createTurnLiveness({
|
|
110
129
|
timeoutMs: CODEX_TURN_IDLE_TIMEOUT_MS,
|
|
111
130
|
onTimeout() {
|
|
@@ -141,22 +160,57 @@ export function createCodexEngine() {
|
|
|
141
160
|
safeEmit({ kind: 'mcp:status', serverName, status: normalized, message });
|
|
142
161
|
return;
|
|
143
162
|
}
|
|
144
|
-
if (method === 'thread/
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
163
|
+
if (method === 'thread/status/changed') {
|
|
164
|
+
const notification = params;
|
|
165
|
+
if (notification.threadId && notification.status?.type !== 'active') {
|
|
166
|
+
finishBackgroundSubagent(notification.threadId);
|
|
167
|
+
}
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
if (method === 'thread/started' || method === 'remoteControl/status/changed' || method === 'turn/started') {
|
|
148
171
|
return;
|
|
149
172
|
}
|
|
150
173
|
if (method === 'item/started') {
|
|
151
174
|
const n = params;
|
|
152
|
-
|
|
175
|
+
const events = handleItemStarted(n.item, mapperState);
|
|
176
|
+
for (const ev of events)
|
|
153
177
|
safeEmit(ev);
|
|
178
|
+
if (n.item.type === 'collabAgentToolCall' && n.item.tool === 'spawnAgent') {
|
|
179
|
+
const progress = events.find((event) => event.kind === 'subagent:progress');
|
|
180
|
+
if (progress) {
|
|
181
|
+
for (const threadId of n.item.receiverThreadIds) {
|
|
182
|
+
activeSubagentThreads.set(threadId, {
|
|
183
|
+
toolCallId: progress.toolCallId,
|
|
184
|
+
description: progress.description,
|
|
185
|
+
taskType: progress.taskType,
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
154
190
|
return;
|
|
155
191
|
}
|
|
156
192
|
if (method === 'item/completed') {
|
|
157
193
|
const n = params;
|
|
158
|
-
|
|
194
|
+
const events = handleItemCompleted(n.item, mapperState);
|
|
195
|
+
for (const ev of events)
|
|
159
196
|
safeEmit(ev);
|
|
197
|
+
if (n.item.type === 'collabAgentToolCall') {
|
|
198
|
+
const progress = events.find((event) => event.kind === 'subagent:progress');
|
|
199
|
+
for (const [threadId, agentState] of Object.entries(n.item.agentsStates)) {
|
|
200
|
+
if (agentState.status === 'pendingInit' || agentState.status === 'running') {
|
|
201
|
+
if (progress) {
|
|
202
|
+
activeSubagentThreads.set(threadId, {
|
|
203
|
+
toolCallId: progress.toolCallId,
|
|
204
|
+
description: progress.description,
|
|
205
|
+
taskType: progress.taskType,
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
finishBackgroundSubagent(threadId, progress?.status === 'done' ? progress.toolCallId : undefined);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
160
214
|
return;
|
|
161
215
|
}
|
|
162
216
|
if (method === 'item/agentMessage/delta') {
|
|
@@ -169,8 +223,15 @@ export function createCodexEngine() {
|
|
|
169
223
|
const n = params;
|
|
170
224
|
for (const ev of handleTurnCompleted(n, mapperState))
|
|
171
225
|
safeEmit(ev);
|
|
172
|
-
if (!activeTurnId || !n.turn?.id || n.turn.id === activeTurnId)
|
|
173
|
-
|
|
226
|
+
if (!activeTurnId || !n.turn?.id || n.turn.id === activeTurnId) {
|
|
227
|
+
if (n.turn?.status === 'completed' && activeSubagentThreads.size > 0) {
|
|
228
|
+
waitingForBackgroundSubagents = true;
|
|
229
|
+
turnLiveness.pause();
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
resolveTurnDone();
|
|
233
|
+
}
|
|
234
|
+
}
|
|
174
235
|
return;
|
|
175
236
|
}
|
|
176
237
|
if (method === 'thread/tokenUsage/updated') {
|
|
@@ -252,6 +252,8 @@ export function handleItemCompleted(item, state) {
|
|
|
252
252
|
}
|
|
253
253
|
if (item.type === 'collabAgentToolCall') {
|
|
254
254
|
const toolCallId = scopedId(state, item.id);
|
|
255
|
+
const hasActiveAgent = item.status === 'completed' &&
|
|
256
|
+
Object.values(item.agentsStates).some((agentState) => agentState.status === 'pendingInit' || agentState.status === 'running');
|
|
255
257
|
events.push({
|
|
256
258
|
kind: 'tool:result',
|
|
257
259
|
toolCallId,
|
|
@@ -265,7 +267,7 @@ export function handleItemCompleted(item, state) {
|
|
|
265
267
|
events.push({
|
|
266
268
|
kind: 'subagent:progress',
|
|
267
269
|
toolCallId,
|
|
268
|
-
status: 'done',
|
|
270
|
+
status: hasActiveAgent ? 'running' : 'done',
|
|
269
271
|
description: item.prompt ?? item.tool,
|
|
270
272
|
taskType: item.tool,
|
|
271
273
|
});
|
|
@@ -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.12",
|
|
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-B_OmZ65F.js";import{t as N}from"./QSpinnerDots-B4RmFJUj.js";import{u as ee}from"./QSelect-8Ip46vhk.js";import{t as P}from"./QTooltip-Bz4g3bmr.js";import{r as F,t as te}from"./pending-diff-open-D1IYH8Pd.js";import{t as I}from"./documents-CyKQ9lT6.js";import{i as L,n as ne,t as R}from"./render-chat-markdown-DZnIueUV.js";import{t as z}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{n as B}from"./WorkspacePage-CbC_t5Rx.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-B_OmZ65F.js";import{t as v}from"./render-chat-markdown-DZnIueUV.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-DWGDTZnX.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-B_OmZ65F.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};
|
|
@@ -0,0 +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-B_OmZ65F.js";import{t as be}from"./QSpinnerDots-B4RmFJUj.js";import{n as b,r as x,t as xe}from"./use-quasar-C1RCDSb6.js";import{d as S,n as Se,t as C,u as Ce}from"./QSelect-8Ip46vhk.js";import{t as we}from"./QTooltip-Bz4g3bmr.js";import{t as Te}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{t as Ee}from"./QChip-DWGDTZnX.js";import{t as De}from"./QBtnToggle-DsCDNQzX.js";import{i as Oe}from"./project-color-DO6uj29M.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-DQQQftsk.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
|
+
`)[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(e){w.notify({type:`negative`,message:e instanceof Error&&e.message?e.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-f498d337`]]);export{T as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.create-page[data-v-f498d337]{background:#1a1a2e;min-height:100%;padding:48px 24px 80px}.create-inner[data-v-f498d337]{width:100%;max-width:960px}.create-title[data-v-f498d337]{letter-spacing:-.02em;font-size:30px;line-height:1.2}.create-sections[data-v-f498d337]{gap:24px}.responsive-fields[data-v-f498d337]{row-gap:16px}.responsive-fields--sm[data-v-f498d337]{row-gap:8px}.create-section-card[data-v-f498d337],.create-actions-card[data-v-f498d337]{background:#22223f;border-color:#ffffff1f}.card-textarea-wrap[data-v-f498d337]{position:relative}.create-textarea[data-v-f498d337] .q-field__control{min-height:220px}.create-textarea[data-v-f498d337] textarea{resize:vertical;line-height:1.6;min-height:180px!important}.create-slash-popup[data-v-f498d337]{z-index:20;position:absolute;top:calc(100% + 4px);left:12px;right:12px}.source-panel[data-v-f498d337]{background:#1e1e38;border:1px solid #ffffff1a}.peek-card[data-v-f498d337]{color:#ddd;background:#ffffff06;border-color:#ffffff1a;transition:background .15s,border-color .15s,transform .1s}.peek-card[data-v-f498d337]:hover{background:#ffffff0f;border-color:#818cf880}.peek-card[data-v-f498d337]:active{transform:scale(.99)}.peek-card--active[data-v-f498d337]{background:#6366f124;border-color:#818cf8;box-shadow:inset 0 0 0 1px #818cf859}.peek-card--active .peek-card-icon[data-v-f498d337]{color:#a5b4fc}.peek-card-icon[data-v-f498d337]{color:#888;flex-shrink:0}.manual-expansion[data-v-f498d337],.advanced-options[data-v-f498d337]{background:#1e1e38;border:1px solid #ffffff1a;overflow:hidden}.manual-expansion[data-v-f498d337] .q-expansion-item__content,.advanced-options[data-v-f498d337] .q-expansion-item__content{background:#19192f}.manual-expansion[data-v-f498d337] .q-chip{max-width:100%;height:auto;min-height:32px}.manual-expansion[data-v-f498d337] .q-chip__content{white-space:normal;overflow-wrap:anywhere}.auto-loop-panel[data-v-f498d337]{background:#f59e0b0f;border-top:1px solid #f59e0b38;gap:16px}.auto-loop-session-toggle[data-v-f498d337] .q-btn{min-height:32px;padding-top:4px;padding-bottom:4px}[data-v-f498d337] .agent-config-header{min-height:56px;padding-top:6px;padding-bottom:8px}.agent-summary[data-v-f498d337]{row-gap:4px}.agent-summary[data-v-f498d337] .q-chip{margin:0}.create-actions-card[data-v-f498d337]{z-index:10;position:sticky;bottom:16px;box-shadow:0 10px 36px #00000061}.voice-btn--recording[data-v-f498d337]{animation:1.1s ease-in-out infinite voice-pulse-f498d337}@keyframes voice-pulse-f498d337{0%,to{opacity:1;transform:scale(1)}50%{opacity:.86;transform:scale(1.06)}}.slide-enter-active[data-v-f498d337],.slide-leave-active[data-v-f498d337]{transition:max-height .2s,opacity .2s;overflow:hidden}.slide-enter-from[data-v-f498d337],.slide-leave-to[data-v-f498d337]{opacity:0;max-height:0}.slide-enter-to[data-v-f498d337],.slide-leave-from[data-v-f498d337]{opacity:1;max-height:900px}@media (max-width:599px){.create-page[data-v-f498d337]{padding:28px 12px 56px}.create-title[data-v-f498d337]{font-size:26px}.create-actions-card[data-v-f498d337]{bottom:8px}.create-actions-card[data-v-f498d337] .q-card__section{align-items:stretch}.create-actions[data-v-f498d337]{width:100%}.create-actions .q-btn[data-v-f498d337]:last-child{flex:1}}
|