@loicngr/kobo 1.7.23 → 1.7.25
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 +10 -7
- package/README.md +3 -3
- package/dist/server/db/migrations.js +0 -7
- package/dist/server/db/schema.js +1 -1
- package/dist/server/routes/workspaces.js +4 -16
- package/dist/server/services/pr-watcher-service.js +4 -14
- package/dist/server/services/settings-service.js +0 -4
- package/dist/server/services/workspace-service.js +1 -13
- package/dist/server/services/worktree-purge-service.js +5 -40
- package/dist/shared/models.js +6 -0
- package/package.json +1 -1
- package/src/client/dist/spa/assets/{ActivityFeed-CPvR4uDQ.js → ActivityFeed-kV5CrtOV.js} +1 -1
- package/src/client/dist/spa/assets/{ChangelogPage-DVX4nE1a.js → ChangelogPage-xdtvQVeE.js} +1 -1
- package/src/client/dist/spa/assets/CreatePage-DDuStqsB.css +1 -0
- package/src/client/dist/spa/assets/{CreatePage-Ch-qSlc0.js → CreatePage-DFtuX7-R.js} +2 -2
- package/src/client/dist/spa/assets/{DiffViewer-CgTeedsM.js → DiffViewer-DQ5PexFb.js} +3 -3
- package/src/client/dist/spa/assets/{HealthPage-DKU-sJn_.js → HealthPage-Dkrr4w8H.js} +1 -1
- package/src/client/dist/spa/assets/{MainLayout-DohajLR7.js → MainLayout-Bpqn8uw3.js} +3 -3
- package/src/client/dist/spa/assets/{MainLayout-DDTTsEj1.css → MainLayout-D2fdfOct.css} +1 -1
- package/src/client/dist/spa/assets/{SearchPage-CdLjyU4e.js → SearchPage-BI4zhWxn.js} +1 -1
- package/src/client/dist/spa/assets/{SettingsPage-CGRHDtMz.js → SettingsPage-BEMFsN0N.js} +1 -1
- package/src/client/dist/spa/assets/{WorkspacePage-DNkEYqZA.js → WorkspacePage-CRs9kUM0.js} +3 -3
- package/src/client/dist/spa/assets/{cssMode-HGFtnvIZ.js → cssMode-Cj7dq4tA.js} +1 -1
- package/src/client/dist/spa/assets/{editor.api-DEN1LTb2.js → editor.api-DmE4Vf3n.js} +1 -1
- package/src/client/dist/spa/assets/{editor.main-CYqwDDag.js → editor.main-BtZbr82f.js} +3 -3
- package/src/client/dist/spa/assets/{engineFeatures-MNa_Gl_7.js → engineFeatures-3w5M3c1y.js} +1 -1
- package/src/client/dist/spa/assets/{expand-template-BYY8KsHo.js → expand-template-Cvhhn0Oi.js} +1 -1
- package/src/client/dist/spa/assets/{freemarker2-DEXbr94k.js → freemarker2-D9gcKCMr.js} +1 -1
- package/src/client/dist/spa/assets/{handlebars-CNnnOJax.js → handlebars-BrcqC-zE.js} +1 -1
- package/src/client/dist/spa/assets/{html-CXew9GOW.js → html-DpYYEfpW.js} +1 -1
- package/src/client/dist/spa/assets/{htmlMode-DXK8cLF-.js → htmlMode-B8fY-cpH.js} +1 -1
- package/src/client/dist/spa/assets/i18n-D3e67G-j.js +1 -0
- package/src/client/dist/spa/assets/{index-Bt877CHx.js → index-D4b3k9DV.js} +7 -7
- package/src/client/dist/spa/assets/{javascript-DqQmRIT5.js → javascript-Cty6LK6F.js} +1 -1
- package/src/client/dist/spa/assets/{jsonMode-B0EtHwQ3.js → jsonMode-Dp8DQFxa.js} +1 -1
- package/src/client/dist/spa/assets/{liquid-XTxM_f1I.js → liquid-BBh8fxMj.js} +1 -1
- package/src/client/dist/spa/assets/{mdx-DSvbDoxm.js → mdx-4Sg0uY19.js} +1 -1
- package/src/client/dist/spa/assets/{monaco.contribution-Ba5eWJZT.js → monaco.contribution-BqWsUYYb.js} +2 -2
- package/src/client/dist/spa/assets/{permissionModes-Bgj5fd8D.js → permissionModes-cbEFVOC0.js} +1 -1
- package/src/client/dist/spa/assets/{python-CI0Uf8Q9.js → python-CNVrhWpS.js} +1 -1
- package/src/client/dist/spa/assets/{razor-BxdANj2h.js → razor-CF0pOS5A.js} +1 -1
- package/src/client/dist/spa/assets/{render-chat-markdown-947qhJXu.js → render-chat-markdown-C9SvAdWB.js} +1 -1
- package/src/client/dist/spa/assets/{tsMode-cQhuNyf_.js → tsMode-BtgiAz6G.js} +1 -1
- package/src/client/dist/spa/assets/{typescript--Ek3HrQl.js → typescript-C0__juCT.js} +1 -1
- package/src/client/dist/spa/assets/{use-onboarding-Bn6RQzdN.js → use-onboarding-D4TTIa1e.js} +1 -1
- package/src/client/dist/spa/assets/{xml-DQfJVXiS.js → xml-D0l5CGKt.js} +1 -1
- package/src/client/dist/spa/assets/{yaml-Dg8Jkbdl.js → yaml-CroybGxn.js} +1 -1
- package/src/client/dist/spa/index.html +1 -1
- package/src/client/dist/spa/assets/CreatePage-__cu33iz.css +0 -1
- package/src/client/dist/spa/assets/i18n-Imx3zg2i.js +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,16 @@ All notable changes to Kōbō are documented here. The format is based on
|
|
|
4
4
|
[Keep a Changelog](https://keepachangelog.com/). Each release is an `## <version>`
|
|
5
5
|
section — the in-app "What's new" dialog reads this file.
|
|
6
6
|
|
|
7
|
+
## 1.7.25
|
|
8
|
+
|
|
9
|
+
- feat(models): add Claude Opus 4.8 and make it the default
|
|
10
|
+
|
|
11
|
+
## 1.7.24
|
|
12
|
+
|
|
13
|
+
- refactor: prune redundant comments from worktree-purge work
|
|
14
|
+
- docs: replace stray French UI labels with their English equivalents
|
|
15
|
+
- docs(changelog): drop stale Unreleased section duplicated by v1.7.23
|
|
16
|
+
|
|
7
17
|
## 1.7.23
|
|
8
18
|
|
|
9
19
|
- docs: document worktree purge, auto-restore, and permission recovery
|
|
@@ -12,13 +22,6 @@ section — the in-app "What's new" dialog reads this file.
|
|
|
12
22
|
- feat(workspace): worktree purge with auto-archive and restore metadata
|
|
13
23
|
- feat(templates): add /kobo-context slash command (you need to re-import default templates)
|
|
14
24
|
|
|
15
|
-
## Unreleased
|
|
16
|
-
|
|
17
|
-
- feat(workspace): disk-space purge — remove a workspace's worktree from disk while preserving chat history and PR metadata. Manual trigger from the workspace menu ("Libérer l'espace disque") or auto-purge on PR merged via Settings → Worktrees toggle.
|
|
18
|
-
- feat(workspace): auto-detect manual worktree restoration — when the user recreates a purged worktree folder (`gh pr checkout` or `git worktree add`), the pr-watcher detects it within 30 s and unarchives the workspace automatically.
|
|
19
|
-
- feat(client): dedicated banner for purged workspaces on the workspace page, with the restoration commands and `setfacl` / `chown` recovery guide for Docker-induced permission errors.
|
|
20
|
-
- fix(pr-watcher): skip workspaces whose worktree directory no longer exists, stopping the `spawn git ENOENT` log spam.
|
|
21
|
-
|
|
22
25
|
## 1.7.22
|
|
23
26
|
|
|
24
27
|
- feat(client): accept the new app.notion.com URL format
|
package/README.md
CHANGED
|
@@ -82,8 +82,8 @@ Engine selection happens at workspace creation. Both share the same task trackin
|
|
|
82
82
|
|
|
83
83
|
A merged workspace is automatically archived but its worktree folder usually carries a lot of weight (`node_modules`, `vendor`, build artefacts…). Kōbō can free that space without losing anything queryable:
|
|
84
84
|
|
|
85
|
-
- **Manual** — workspace context menu → *
|
|
86
|
-
- **Automatic** — **Settings → Worktrees →
|
|
85
|
+
- **Manual** — workspace context menu → *Free disk space (delete worktree)*. The worktree is removed, the chat history and PR metadata stay in the database.
|
|
86
|
+
- **Automatic** — **Settings → Worktrees → Auto-purge worktree on PR merged**. When the pr-watcher sees the OPEN → MERGED transition, it archives **and** purges.
|
|
87
87
|
- **Restore** — recreate the folder yourself (`gh pr checkout <pr>` or `git worktree add <path> <branch>`). The pr-watcher detects the directory reappearing within 30 seconds and re-activates the workspace automatically (clears purge flag + unarchives). No UI action needed.
|
|
88
88
|
|
|
89
89
|
### Avoiding permission errors during purge
|
|
@@ -106,7 +106,7 @@ Docker containers usually write as `root`, so files in `node_modules` / `vendor`
|
|
|
106
106
|
```
|
|
107
107
|
Run from inside the worktree folder, or directly on your worktrees root (e.g. `~/.worktrees/`) to cover all existing and future workspaces at once.
|
|
108
108
|
|
|
109
|
-
When a purge does fail, Kōbō surfaces a toast with a copy-pasteable recovery command and a `git worktree prune` follow-up. The same guide is wired into **Settings → Worktrees →
|
|
109
|
+
When a purge does fail, Kōbō surfaces a toast with a copy-pasteable recovery command and a `git worktree prune` follow-up. The same guide is wired into **Settings → Worktrees → How purge works** for in-app reference.
|
|
110
110
|
|
|
111
111
|
## Optional integrations
|
|
112
112
|
|
|
@@ -343,13 +343,6 @@ export const migrations = [
|
|
|
343
343
|
version: 27,
|
|
344
344
|
name: 'add-workspace-worktree-purge',
|
|
345
345
|
migrate: (db) => {
|
|
346
|
-
// Worktree purge: deletes the worktree from disk to reclaim space while
|
|
347
|
-
// keeping the chat/session history queryable. `worktree_purged_at` is the
|
|
348
|
-
// ISO timestamp of the purge (null = not purged). `worktree_purge_restore_data`
|
|
349
|
-
// is a JSON blob with the metadata needed to restore the worktree later
|
|
350
|
-
// (PR number, forge, merge commit sha, original paths). Restoration is
|
|
351
|
-
// not implemented yet, but the data is captured at purge time so future
|
|
352
|
-
// versions can rebuild the worktree from the merged PR.
|
|
353
346
|
const table = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='workspaces'").get();
|
|
354
347
|
if (!table)
|
|
355
348
|
return;
|
package/dist/server/db/schema.js
CHANGED
|
@@ -13,7 +13,7 @@ export function initSchema(db) {
|
|
|
13
13
|
sentry_url TEXT,
|
|
14
14
|
worktree_path TEXT,
|
|
15
15
|
worktree_owned INTEGER NOT NULL DEFAULT 1,
|
|
16
|
-
model TEXT NOT NULL DEFAULT 'claude-opus-4-
|
|
16
|
+
model TEXT NOT NULL DEFAULT 'claude-opus-4-8',
|
|
17
17
|
reasoning_effort TEXT NOT NULL DEFAULT 'auto',
|
|
18
18
|
permission_mode TEXT NOT NULL DEFAULT 'auto-accept',
|
|
19
19
|
dev_server_status TEXT NOT NULL DEFAULT 'stopped',
|
|
@@ -1923,11 +1923,7 @@ app.post('/:id/archive', migrationGuard, (c) => {
|
|
|
1923
1923
|
return c.json({ error: message }, 500);
|
|
1924
1924
|
}
|
|
1925
1925
|
});
|
|
1926
|
-
// POST /api/workspaces/:id/purge-worktree
|
|
1927
|
-
// to reclaim space while keeping the chat / session history queryable. Auto-
|
|
1928
|
-
// archives the workspace, stops the agent / dev server / terminal, and
|
|
1929
|
-
// records restore metadata so a future feature can rebuild the worktree
|
|
1930
|
-
// from the merged PR.
|
|
1926
|
+
// POST /api/workspaces/:id/purge-worktree
|
|
1931
1927
|
app.post('/:id/purge-worktree', migrationGuard, async (c) => {
|
|
1932
1928
|
try {
|
|
1933
1929
|
const id = c.req.param('id');
|
|
@@ -1959,11 +1955,8 @@ app.post('/:id/unarchive', migrationGuard, (c) => {
|
|
|
1959
1955
|
if (!workspace.archivedAt) {
|
|
1960
1956
|
return c.json({ error: 'Not archived' }, 400);
|
|
1961
1957
|
}
|
|
1962
|
-
//
|
|
1963
|
-
//
|
|
1964
|
-
// would fail, and the agent has no working tree. Force the user to
|
|
1965
|
-
// restore the worktree first (manual `gh pr checkout` / `git worktree
|
|
1966
|
-
// add`); the pr-watcher then auto-clears the purge flag + unarchives.
|
|
1958
|
+
// Refuse unarchive while the worktree is missing — the pr-watcher
|
|
1959
|
+
// auto-restores once the user recreates the folder.
|
|
1967
1960
|
if (workspace.worktreePurgedAt) {
|
|
1968
1961
|
return c.json({ error: 'worktree-purged' }, 409);
|
|
1969
1962
|
}
|
|
@@ -2011,14 +2004,9 @@ function deleteWorkspaceWithSideEffects(workspace, opts) {
|
|
|
2011
2004
|
// Docker leaves root-owned files inside the worktree, git worktree
|
|
2012
2005
|
// remove fails with EACCES.
|
|
2013
2006
|
const warnings = [];
|
|
2014
|
-
//
|
|
2015
|
-
// never created the dir, so we must not delete it on the user's behalf).
|
|
2007
|
+
// Owned worktrees only — attached external worktrees aren't ours to remove.
|
|
2016
2008
|
const worktreePath = workspace.worktreePath;
|
|
2017
2009
|
if (workspace.worktreePurgedAt) {
|
|
2018
|
-
// Already purged earlier: the worktree folder is gone AND `git worktree
|
|
2019
|
-
// remove` already cleaned the `.git/worktrees/<name>/` entry. Retrying
|
|
2020
|
-
// here just fails with "fatal: <path> does not exist" and pushes a noisy
|
|
2021
|
-
// warning. Skip cleanly.
|
|
2022
2010
|
console.log(`[workspaces] skipping worktree removal on delete (already purged): ${worktreePath}`);
|
|
2023
2011
|
}
|
|
2024
2012
|
else if (workspace.worktreeOwned) {
|
|
@@ -66,12 +66,6 @@ function markUnread(workspaceId) {
|
|
|
66
66
|
console.error('[pr-watcher] markUnread failed:', err instanceof Error ? err.message : err);
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
|
-
/**
|
|
70
|
-
* Detect manually-restored worktrees: if a purged workspace's worktreePath
|
|
71
|
-
* has reappeared on disk (user ran `gh pr checkout` or `git worktree add`
|
|
72
|
-
* themselves), clear the purge metadata + unarchive it. Best-effort, runs
|
|
73
|
-
* once per watcher tick before the PR-status pass.
|
|
74
|
-
*/
|
|
75
69
|
function autoRestoreManuallyRecreatedWorktrees() {
|
|
76
70
|
for (const ws of listArchivedWorkspaces()) {
|
|
77
71
|
if (!ws.worktreePurgedAt)
|
|
@@ -103,9 +97,8 @@ export async function checkPrStatuses() {
|
|
|
103
97
|
}
|
|
104
98
|
}
|
|
105
99
|
for (const ws of workspaces) {
|
|
106
|
-
//
|
|
107
|
-
//
|
|
108
|
-
// spawn below fails with ENOENT and floods the logs.
|
|
100
|
+
// Without this guard, every git/forge spawn below fails with ENOENT and
|
|
101
|
+
// floods the logs when a worktree was deleted externally.
|
|
109
102
|
if (!fs.existsSync(ws.worktreePath))
|
|
110
103
|
continue;
|
|
111
104
|
try {
|
|
@@ -182,11 +175,8 @@ export async function checkPrStatuses() {
|
|
|
182
175
|
reason: `PR ${pr.state.toLowerCase()}`,
|
|
183
176
|
prUrl: pr.url,
|
|
184
177
|
});
|
|
185
|
-
//
|
|
186
|
-
//
|
|
187
|
-
// warnings on the next listing instead of crashing the watcher.
|
|
188
|
-
// Only acts on MERGED — closed-without-merge keeps the worktree
|
|
189
|
-
// around so the user can inspect / push fixes.
|
|
178
|
+
// Only MERGED — closed-without-merge keeps the worktree so the user
|
|
179
|
+
// can inspect / push fixes.
|
|
190
180
|
if (pr.state === 'MERGED') {
|
|
191
181
|
try {
|
|
192
182
|
const { autoPurgeOnPrMerged } = getGlobalSettings();
|
|
@@ -602,10 +602,6 @@ const settingsMigrations = [
|
|
|
602
602
|
version: 36,
|
|
603
603
|
name: 'add-auto-purge-on-pr-merged',
|
|
604
604
|
migrate: ({ global }) => {
|
|
605
|
-
// Opt-in: when true, the pr-watcher purges the worktree from disk
|
|
606
|
-
// immediately after auto-archiving on a PR merge transition. The
|
|
607
|
-
// workspace stays consultable (chat history, sessions) but reclaims
|
|
608
|
-
// the disk space. Default false — feature is silent until enabled.
|
|
609
605
|
if (typeof global.autoPurgeOnPrMerged !== 'boolean') {
|
|
610
606
|
global.autoPurgeOnPrMerged = false;
|
|
611
607
|
}
|
|
@@ -115,7 +115,7 @@ export function createWorkspace(data) {
|
|
|
115
115
|
notion_url, notion_page_id, sentry_url, worktree_path, worktree_owned,
|
|
116
116
|
model, reasoning_effort, permission_mode, permission_profile, agent_permission_mode, engine, created_at, updated_at
|
|
117
117
|
) VALUES (?, ?, ?, ?, ?, 'created', ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
118
|
-
`).run(id, data.name, data.projectPath, data.sourceBranch, data.workingBranch, data.notionUrl ?? null, data.notionPageId ?? null, data.sentryUrl ?? null, computedWorktreePath, owned ? 1 : 0, data.model ?? 'claude-opus-4-
|
|
118
|
+
`).run(id, data.name, data.projectPath, data.sourceBranch, data.workingBranch, data.notionUrl ?? null, data.notionPageId ?? null, data.sentryUrl ?? null, computedWorktreePath, owned ? 1 : 0, data.model ?? 'claude-opus-4-8', data.reasoningEffort ?? 'auto', legacyMode, legacyProfile, unifiedMode, data.engine ?? 'claude-code', now, now);
|
|
119
119
|
return getWorkspace(id);
|
|
120
120
|
}
|
|
121
121
|
/** Fetch a single workspace by ID, or null if not found. */
|
|
@@ -367,12 +367,6 @@ export function dismissPrAttention(id, kind, prUpdatedAt) {
|
|
|
367
367
|
throw new Error(`Workspace '${id}' not found`);
|
|
368
368
|
}
|
|
369
369
|
}
|
|
370
|
-
/**
|
|
371
|
-
* Mark a workspace's worktree as purged from disk. Persists the supplied
|
|
372
|
-
* restore data as JSON so a future "unpurge" feature can recreate the
|
|
373
|
-
* worktree from the merged PR. Idempotent: re-purging a workspace just
|
|
374
|
-
* overwrites the timestamp + data.
|
|
375
|
-
*/
|
|
376
370
|
export function markWorktreePurged(id, restoreData) {
|
|
377
371
|
const db = getDb();
|
|
378
372
|
const now = new Date().toISOString();
|
|
@@ -383,12 +377,6 @@ export function markWorktreePurged(id, restoreData) {
|
|
|
383
377
|
throw new Error(`Workspace '${id}' not found`);
|
|
384
378
|
}
|
|
385
379
|
}
|
|
386
|
-
/**
|
|
387
|
-
* Reverse of `markWorktreePurged` + `archiveWorkspace`: clears the purge
|
|
388
|
-
* metadata and unarchives the workspace in a single transaction. Used by the
|
|
389
|
-
* auto-restore watcher when the user manually recreates the worktree folder
|
|
390
|
-
* on disk. Idempotent: no-op if already restored.
|
|
391
|
-
*/
|
|
392
380
|
export function restoreWorktreeFromDisk(id) {
|
|
393
381
|
const db = getDb();
|
|
394
382
|
const workspace = getWorkspace(id);
|
|
@@ -7,16 +7,6 @@ import { destroyTerminal } from './terminal-service.js';
|
|
|
7
7
|
import { emitEphemeral } from './websocket-service.js';
|
|
8
8
|
import { archiveWorkspace, getWorkspace, markWorktreePurged, } from './workspace-service.js';
|
|
9
9
|
import { removeWorktree } from './worktree-service.js';
|
|
10
|
-
/**
|
|
11
|
-
* Purge the worktree of a workspace: stops the agent, the dev server and the
|
|
12
|
-
* terminal (best-effort), removes the worktree dir + git registration, then
|
|
13
|
-
* records the purge timestamp + restore metadata so a future version can
|
|
14
|
-
* recreate the worktree from the merged PR.
|
|
15
|
-
*
|
|
16
|
-
* The workspace is auto-archived on purge — disk-purged is a strict superset
|
|
17
|
-
* of archived (no agent can run on a missing worktree). Archive emits its
|
|
18
|
-
* own event before this function tags the workspace as purged.
|
|
19
|
-
*/
|
|
20
10
|
export async function purgeWorktree(workspaceId) {
|
|
21
11
|
const workspace = getWorkspace(workspaceId);
|
|
22
12
|
if (!workspace)
|
|
@@ -26,9 +16,6 @@ export async function purgeWorktree(workspaceId) {
|
|
|
26
16
|
if (!workspace.worktreeOwned)
|
|
27
17
|
return { outcome: 'worktree-not-owned', warnings: [] };
|
|
28
18
|
const warnings = [];
|
|
29
|
-
// Best-effort cleanup before touching the disk. A failure here is logged
|
|
30
|
-
// but does NOT block the purge — leaving a stranded worktree on disk would
|
|
31
|
-
// defeat the feature's purpose.
|
|
32
19
|
try {
|
|
33
20
|
agentManager.stopAgent(workspaceId);
|
|
34
21
|
}
|
|
@@ -46,15 +33,10 @@ export async function purgeWorktree(workspaceId) {
|
|
|
46
33
|
try {
|
|
47
34
|
destroyTerminal(workspaceId);
|
|
48
35
|
}
|
|
49
|
-
catch {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
// Capture restore metadata BEFORE removing the worktree so we still have a
|
|
53
|
-
// chance to query the forge for the latest PR snapshot.
|
|
36
|
+
catch { }
|
|
37
|
+
// Snapshot the forge BEFORE removing the worktree — the PR lookup uses
|
|
38
|
+
// `worktreePath` as cwd.
|
|
54
39
|
const restoreData = await captureRestoreData(workspace);
|
|
55
|
-
// Archive first so the workspace:archived event fires while the worktree
|
|
56
|
-
// still technically exists — listeners that snapshot disk state get a
|
|
57
|
-
// consistent picture. Archive is idempotent.
|
|
58
40
|
if (!workspace.archivedAt) {
|
|
59
41
|
try {
|
|
60
42
|
const archived = archiveWorkspace(workspaceId);
|
|
@@ -65,9 +47,6 @@ export async function purgeWorktree(workspaceId) {
|
|
|
65
47
|
warnings.push(`Archive failed: ${msg}`);
|
|
66
48
|
}
|
|
67
49
|
}
|
|
68
|
-
// Remove the worktree. fs.existsSync guard handles the case where the user
|
|
69
|
-
// already nuked it externally — the git registration still needs cleaning,
|
|
70
|
-
// which removeWorktree does too.
|
|
71
50
|
if (fs.existsSync(workspace.worktreePath)) {
|
|
72
51
|
try {
|
|
73
52
|
removeWorktree(workspace.projectPath, workspace.worktreePath);
|
|
@@ -91,12 +70,6 @@ export async function purgeWorktree(workspaceId) {
|
|
|
91
70
|
});
|
|
92
71
|
return { outcome: 'purged', warnings };
|
|
93
72
|
}
|
|
94
|
-
/**
|
|
95
|
-
* Pretty failure message for `removeWorktree` errors. Detects permission
|
|
96
|
-
* issues (typical when Docker / docker-compose left root-owned files in
|
|
97
|
-
* `node_modules`, `vendor`, etc.) and surfaces a one-line `sudo` command
|
|
98
|
-
* the user can paste to recover. Other errors get a generic recovery hint.
|
|
99
|
-
*/
|
|
100
73
|
function buildRemovalFailureMessage(worktreePath, projectPath, errMsg) {
|
|
101
74
|
const isPermission = /EACCES|EPERM|permission denied|operation not permitted/i.test(errMsg);
|
|
102
75
|
const baseLine = `Failed to remove worktree '${worktreePath}'.`;
|
|
@@ -112,20 +85,12 @@ function buildRemovalFailureMessage(worktreePath, projectPath, errMsg) {
|
|
|
112
85
|
}
|
|
113
86
|
return [baseLine, recovery, `Reason: ${errMsg}`].join('\n');
|
|
114
87
|
}
|
|
115
|
-
/**
|
|
116
|
-
* Build the restore-data snapshot stored alongside the purge. Reads the PR
|
|
117
|
-
* snapshot from the watcher cache when available, then tries a fresh forge
|
|
118
|
-
* lookup as a fallback. Never throws — best-effort. Reserved for a future
|
|
119
|
-
* unpurge feature.
|
|
120
|
-
*/
|
|
121
88
|
async function captureRestoreData(workspace) {
|
|
122
89
|
const forge = resolveForge(workspace.projectPath);
|
|
123
90
|
let prNumber = null;
|
|
124
91
|
let prUrl = null;
|
|
125
|
-
//
|
|
126
|
-
//
|
|
127
|
-
// the provider (no pr-watcher cache) to avoid an import cycle between
|
|
128
|
-
// the watcher and the purge service.
|
|
92
|
+
// Direct provider call (not the pr-watcher cache) avoids an import cycle
|
|
93
|
+
// between the watcher and this service.
|
|
129
94
|
if (forge !== 'none') {
|
|
130
95
|
try {
|
|
131
96
|
const provider = getForgeProvider(forge);
|
package/dist/shared/models.js
CHANGED
|
@@ -5,6 +5,12 @@ export const CLAUDE_MODELS = [
|
|
|
5
5
|
i18nLabelKey: 'model.auto',
|
|
6
6
|
i18nDescriptionKey: 'model.autoDescription',
|
|
7
7
|
},
|
|
8
|
+
{
|
|
9
|
+
id: 'claude-opus-4-8',
|
|
10
|
+
label: 'Opus 4.8',
|
|
11
|
+
i18nLabelKey: 'model.opus48',
|
|
12
|
+
i18nDescriptionKey: 'model.opus48Description',
|
|
13
|
+
},
|
|
8
14
|
{
|
|
9
15
|
id: 'claude-opus-4-7',
|
|
10
16
|
label: 'Opus 4.7 (Classic)',
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@loicngr/kobo",
|
|
3
|
-
"version": "1.7.
|
|
3
|
+
"version": "1.7.25",
|
|
4
4
|
"description": "Kōbō — multi-workspace agent manager for Claude Code. Orchestrates isolated git worktrees with dev servers, Notion integration, and MCP tools.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "GPL-3.0-or-later",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{D as e,G as t,I as n,N as r,P as i,R as a,St as o,W as s,_ as c,at as l,d as u,et as d,f,g as p,l as m,p as h,r as g,u as _,xt as v,y,yt as b}from"./runtime-core.esm-bundler-D_RRiKBh.js";import{U as x,l as S,t as C}from"./QIcon-BmEX2rXO.js";import{c as w,s as T}from"./notifications-l1Pxijve.js";import{t as E}from"./QBtn-CoU-UC_j.js";import{n as D}from"./vue-i18n-Cq-KgjJC.js";import{_ as O,c as k,m as A,u as j}from"./index-
|
|
1
|
+
import{D as e,G as t,I as n,N as r,P as i,R as a,St as o,W as s,_ as c,at as l,d as u,et as d,f,g as p,l as m,p as h,r as g,u as _,xt as v,y,yt as b}from"./runtime-core.esm-bundler-D_RRiKBh.js";import{U as x,l as S,t as C}from"./QIcon-BmEX2rXO.js";import{c as w,s as T}from"./notifications-l1Pxijve.js";import{t as E}from"./QBtn-CoU-UC_j.js";import{n as D}from"./vue-i18n-Cq-KgjJC.js";import{_ as O,c as k,m as A,u as j}from"./index-D4b3k9DV.js";import{t as M}from"./QSpinnerDots-DspFKwCZ.js";import{t as N}from"./QTooltip-CwBZU_bs.js";import{t as ee}from"./QExpansionItem-CiBP4NiY.js";import{t as te}from"./QScrollArea-CZVgBUBp.js";import{i as ne,n as re,t as P}from"./render-chat-markdown-C9SvAdWB.js";import{t as F}from"./documents-CX2-4fhr.js";import{t as I}from"./_plugin-vue_export-helper-r4mAJOHR.js";function ie(e,t,n=!0){let r=[],i=new Map,a=new Map;for(let n=0;n<e.length;n++){let o=e[n],s=t?.[n];switch(o.kind){case`message:text`:{let e=i.get(o.messageId);if(e)e.text+=o.text,e.streaming=o.streaming;else{let e={type:`text`,messageId:o.messageId,text:o.text,streaming:o.streaming,ts:s};i.set(o.messageId,e),r.push(e)}break}case`message:end`:{let e=i.get(o.messageId);e&&(e.streaming=!1);break}case`message:thinking`:r.push({type:`thinking`,messageId:o.messageId,text:o.text,ts:s});break;case`tool:call`:{let e={type:`tool`,toolCallId:o.toolCallId,name:o.name,input:o.input,ts:s};a.set(o.toolCallId,e),r.push(e);break}case`tool:result`:{let e=a.get(o.toolCallId);e&&(e.result={output:o.output,isError:o.isError});break}case`session:started`:r.push({type:`session`,kind:`started`,detail:{engineSessionId:o.engineSessionId,model:o.model},ts:s});break;case`session:ended`:r.push({type:`session`,kind:`ended`,detail:{reason:o.reason,exitCode:o.exitCode},ts:s});break;case`session:compacted`:r.push({type:`session`,kind:`compacted`,ts:s});break;case`session:brainstorm-complete`:case`session:user-input-requested`:case`message:raw`:case`skills:discovered`:case`usage`:case`rate_limit`:case`subagent:progress`:case`error`:break;default:}}let o=null;for(let e of r)e.type===`text`&&e.streaming&&(o&&(o.streaming=!1),o=e);return o&&!n&&(o.streaming=!1),r}function ae(e,t){if(t.length===0)return e;let n=t.map(e=>({type:`user`,content:e.content,sender:e.sender,ts:e.ts})),r=[...e,...n];r.sort((e,t)=>{let n=e.ts??``,r=t.ts??``;return n===r?0:n?r?n<r?-1:1:-1:1});let i;for(let e of r)e.type===`user`&&e.sender!==`system-prompt`&&e.ts&&(!i||e.ts>i)&&(i=e.ts);if(i)for(let e of r)e.type===`text`&&e.streaming&&(!e.ts||e.ts<i)&&(e.streaming=!1);return r}var L=new Set([`setup`,`cleanup`,`archive`]);function R(e){switch(e.type){case`user`:return e.sender===`system-prompt`?`system-prompt`:L.has(e.sender)?`script`:`user`;case`session`:return`session`;default:return`agent`}}function oe(e){let t=[],n=null,r=null;for(let i of e){let e=R(i),a=e===`session`||e===`system-prompt`,o=e===`script`&&i.type===`user`?`script:${i.sender}`:e;!n||r!==o||a?(n={speaker:e,ts:i.ts,items:[i]},r=o,t.push(n),a&&(n=null)):n.items.push(i)}return t}var z={class:`text-caption text-grey-6`},B=y({__name:`SessionEventItem`,props:{item:{}},setup(e){let t=e,r=m(()=>{switch(t.item.kind){case`started`:return`session.started`;case`ended`:return`session.ended`;case`compacted`:return`session.compacted`;default:return`session.started`}});return(e,t)=>(n(),h(`span`,z,o(e.$t(r.value)),1))}});function se(e,t){if(t.length===0||e.length===0)return e;let n=[...t].sort((e,t)=>t.length-e.length),r=new DOMParser().parseFromString(`<div>${e}</div>`,`text/html`),i=r.body.firstChild;if(!i)return e;function a(e){if(e.nodeType===Node.TEXT_NODE){V(e,n,r);return}if(e.nodeName===`A`)return;let t=Array.from(e.childNodes);for(let e of t)a(e)}return a(i),i.innerHTML}function V(e,t,n){let r=e.textContent??``;if(!t.some(e=>r.includes(e)))return;let i=n.createDocumentFragment(),a=0;for(;a<r.length;){let e=H(r,a,t);if(!e){i.appendChild(n.createTextNode(r.slice(a)));break}e.index>a&&i.appendChild(n.createTextNode(r.slice(a,e.index)));let o=n.createElement(`a`);o.className=`document-link`,o.setAttribute(`data-document-path`,e.path),o.setAttribute(`href`,`#`),o.textContent=e.path,i.appendChild(o),a=e.index+e.path.length}e.parentNode?.replaceChild(i,e)}function H(e,t,n){let r=null;for(let i of n){let n=e.indexOf(i,t);n<0||(!r||n<r.index||n===r.index&&i.length>r.path.length)&&(r={index:n,path:i})}return r}var U=[`innerHTML`],ce=I(y({__name:`TextMessageItem`,props:{item:{}},setup(e){let t=e,r=F(),i=k(),a=m(()=>{let e=i.selectedWorkspaceId;return e?r.documentsFor(e).map(e=>e.path):[]}),o=m(()=>re(se(ne.parse(t.item.text,{async:!1,breaks:!0,gfm:!0}),a.value),{addAttr:[`data-document-path`]}));function s(e){let t=e.target?.closest(`.document-link`);if(!t)return;e.preventDefault();let n=t.getAttribute(`data-document-path`),a=i.selectedWorkspaceId;!n||!a||r.openDocumentByPath(a,n)}return(t,r)=>(n(),h(`div`,{class:`markdown-message`,onClick:s},[_(`div`,{innerHTML:o.value},null,8,U),e.item.streaming?(n(),u(S,{key:0,size:`xs`,class:`q-ml-xs`})):f(``,!0)]))}}),[[`__scopeId`,`data-v-1b7bd8ca`]]),W={key:0,class:`text-caption text-grey-5`,style:{"font-style":`italic`}},G=[`innerHTML`],K={key:1,style:{"white-space":`pre-wrap`}},le=I(y({__name:`ThinkingItem`,props:{item:{}},setup(e){let r=e,i=m(()=>r.item.text.trim().slice(0,100)),a=m(()=>r.item.text.trim().length>0),s=m(()=>r.item.text.trim().length>100),c=m(()=>P(r.item.text));return(r,l)=>a.value?(n(),h(`div`,W,[s.value?(n(),u(ee,{key:0,dense:``,"dense-toggle":``,label:i.value,"header-class":`text-grey-5 text-caption`,style:{"font-style":`italic`}},{default:t(()=>[_(`div`,{class:`q-py-xs markdown-thinking`,innerHTML:c.value},null,8,G)]),_:1},8,[`label`])):(n(),h(`span`,K,o(e.item.text),1))])):f(``,!0)}}),[[`__scopeId`,`data-v-7f45ed94`]]);function ue(e,t){let n=e.split(`
|
|
2
2
|
`),r=t.split(`
|
|
3
3
|
`),i=n.length,a=r.length,o=Array.from({length:i+1},()=>Array(a+1).fill(0));for(let e=i-1;e>=0;e--)for(let t=a-1;t>=0;t--)n[e]===r[t]?o[e][t]=o[e+1][t+1]+1:o[e][t]=Math.max(o[e+1][t],o[e][t+1]);let s=[],c=0,l=0;for(;c<i&&l<a;)n[c]===r[l]?(s.push({type:`context`,content:n[c]}),c++,l++):o[c+1][l]>=o[c][l+1]?(s.push({type:`del`,content:n[c]}),c++):(s.push({type:`add`,content:r[l]}),l++);for(;c<i;)s.push({type:`del`,content:n[c++]});for(;l<a;)s.push({type:`add`,content:r[l++]});return s}function de(e){let t=e.split(`
|
|
4
4
|
`),n=[];for(let e of t)e.startsWith(`@@`)||e.startsWith(`+++`)||e.startsWith(`---`)||(e.startsWith(`+`)?n.push({type:`add`,content:e.slice(1)}):e.startsWith(`-`)?n.push({type:`del`,content:e.slice(1)}):e.startsWith(` `)?n.push({type:`context`,content:e.slice(1)}):e.length>0&&n.push({type:`context`,content:e}));return n}function fe(e,t){if(!t||typeof t!=`object`)return null;let n=t;if(e===`Edit`){let e=n.file_path;if(!e)return null;let t=n.old_string??``,r=n.new_string??``,i=typeof n.diff==`string`?n.diff:``;if(!t&&!r&&i.length>0){let t=de(i);return{toolName:`Edit`,filePath:e,additions:t.filter(e=>e.type===`add`).length,deletions:t.filter(e=>e.type===`del`).length,diffLines:t}}return{toolName:`Edit`,filePath:e,oldString:t,newString:r,replaceAll:n.replace_all??!1,additions:r?r.split(`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{G as e,I as t,N as n,R as r,St as i,_ as a,at as o,d as s,et as c,f as l,p as u,r as d,u as f,y as p}from"./runtime-core.esm-bundler-D_RRiKBh.js";import{t as m}from"./QBtn-CoU-UC_j.js";import{b as h,i as g,x as _}from"./index-
|
|
1
|
+
import{G as e,I as t,N as n,R as r,St as i,_ as a,at as o,d as s,et as c,f as l,p as u,r as d,u as f,y as p}from"./runtime-core.esm-bundler-D_RRiKBh.js";import{t as m}from"./QBtn-CoU-UC_j.js";import{b as h,i as g,x as _}from"./index-D4b3k9DV.js";import{t as v}from"./render-chat-markdown-C9SvAdWB.js";import{t as y}from"./_plugin-vue_export-helper-r4mAJOHR.js";import{t as b}from"./QSpace-Crcx82On.js";import{t as x}from"./QChip-D2TVel5I.js";import{t as S}from"./QPage-3-ah4oor.js";var C={class:`row items-center q-mb-md`},w={class:`text-h6 q-ml-sm`},T={key:0,class:`text-grey-6 text-center q-pa-lg`},E={key:1,class:`text-negative text-center q-pa-lg`},D={key:2,class:`text-grey-6 text-center q-pa-lg`},O={key:3,class:`column q-gutter-md`},k={key:0,class:`text-caption text-grey-6`},A={class:`row items-center q-mb-sm`},j={class:`text-subtitle1 text-indigo-3`,style:{"font-family":`var(--kobo-font-mono, monospace)`}},M=[`innerHTML`],N=y(p({__name:`ChangelogPage`,setup(p){let y=g(),N=c([]),P=c(``),F=c(!1),I=c(null);function L(e){return v(e)}async function R(){F.value=!0,I.value=null;try{let e=await fetch(`/api/changelog`);if(!e.ok)throw Error(`HTTP ${e.status}`);let t=await e.json();P.value=t.currentVersion??``,N.value=t.versions??[]}catch(e){I.value=e instanceof Error?e.message:String(e)}finally{F.value=!1}}return n(R),(n,c)=>(t(),s(S,{class:`q-pa-md`,style:{"max-width":`900px`,margin:`0 auto`}},{default:e(()=>[f(`div`,C,[a(m,{flat:``,dense:``,round:``,icon:`arrow_back`,onClick:c[0]||=e=>o(y).back()}),f(`div`,w,i(n.$t(`changelog.title`)),1),a(b),a(m,{flat:``,dense:``,icon:`refresh`,loading:F.value,label:n.$t(`common.refresh`),onClick:R},null,8,[`loading`,`label`])]),F.value&&N.value.length===0?(t(),u(`div`,T,i(n.$t(`common.loading`)),1)):I.value?(t(),u(`div`,E,i(I.value),1)):N.value.length===0?(t(),u(`div`,D,i(n.$t(`changelog.empty`)),1)):(t(),u(`div`,O,[P.value?(t(),u(`div`,k,i(n.$t(`changelog.currentVersion`,{version:P.value})),1)):l(``,!0),(t(!0),u(d,null,r(N.value,r=>(t(),s(h,{key:r.version,dark:``,flat:``,bordered:``},{default:e(()=>[a(_,null,{default:e(()=>[f(`div`,A,[f(`div`,j,` v`+i(r.version),1),r.version===P.value?(t(),s(x,{key:0,dense:``,size:`sm`,color:`indigo-7`,"text-color":`grey-2`,label:n.$t(`changelog.current`),class:`q-ml-sm`},null,8,[`label`])):l(``,!0)]),f(`div`,{class:`changelog-notes`,innerHTML:L(r.notes)},null,8,M)]),_:2},1024)]),_:2},1024))),128))]))]),_:1}))}}),[[`__scopeId`,`data-v-ed73d661`]]);export{N as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.create-page[data-v-515045d6]{background-color:#1a1a2e;min-height:100%;padding:48px 24px}.create-inner[data-v-515045d6]{width:100%;max-width:700px}.create-title[data-v-515045d6]{font-size:24px;line-height:1.3}.create-card[data-v-515045d6]{background:#224;border:1px solid #444;overflow:hidden}.card-top-bar[data-v-515045d6]{background:#1e1e3a;min-height:36px}.card-name-wrap[data-v-515045d6]{background:#224;padding:8px 16px 4px}.card-name-wrap[data-v-515045d6] .q-field__control{height:32px;min-height:32px;padding:0}.card-name-wrap[data-v-515045d6] input{color:#e0e0e0;font-size:15px;font-weight:500}.card-name-wrap[data-v-515045d6] input::placeholder{color:#555}.card-textarea-wrap[data-v-515045d6]{background:#224;position:relative}.create-slash-popup[data-v-515045d6]{z-index:9999;position:absolute;top:calc(100% + 4px);left:12px;right:12px}.repo-select[data-v-515045d6]{min-width:160px;max-width:260px}.repo-select[data-v-515045d6] .q-field__prepend{align-items:center;height:auto;padding-top:0}.create-textarea[data-v-515045d6]{color:#d0d0d0;width:100%;padding:12px 16px 4px}.create-textarea[data-v-515045d6] .q-field__control{padding:0}.create-textarea[data-v-515045d6] textarea{color:#d0d0d0;resize:none;min-height:100px;font-size:14px;line-height:1.6}.create-textarea[data-v-515045d6] textarea::placeholder{color:#666}.voice-btn--recording[data-v-515045d6]{animation:1.1s ease-in-out infinite voice-pulse-515045d6}@keyframes voice-pulse-515045d6{0%{opacity:1;transform:scale(1)}50%{opacity:.86;transform:scale(1.06)}to{opacity:1;transform:scale(1)}}.notion-toggle-btn[data-v-515045d6]{background:#333;padding:2px 10px}.notion-url-wrap[data-v-515045d6]{background:#1e1e3a;padding:8px 0 0}.notion-url-input[data-v-515045d6]{padding:0 12px}.notion-url-input[data-v-515045d6] .q-field__control{height:36px;min-height:36px;padding:0}.notion-url-input[data-v-515045d6] input{color:#d0d0d0;font-size:13px}.notion-url-input[data-v-515045d6] input::placeholder{color:#555;font-size:12px}.notion-error[data-v-515045d6],.notion-valid[data-v-515045d6]{padding-bottom:6px}.notion-peek-choice[data-v-515045d6]{padding-top:4px}.peek-card[data-v-515045d6]{cursor:pointer;text-align:left;color:#e0e0e0;font-family:inherit;font-size:inherit;background:#ffffff08;border:1px solid #ffffff14;border-radius:8px;align-items:center;gap:10px;padding:10px 12px;transition:background .15s,border-color .15s,transform .1s;display:flex;position:relative}.peek-card[data-v-515045d6]:hover{background:#ffffff0f;border-color:#6c63ff66}.peek-card[data-v-515045d6]:active{transform:scale(.99)}.peek-card--active[data-v-515045d6]{background:#6c63ff1f;border-color:#6c63ffd9;box-shadow:0 0 0 1px #6c63ff66}.peek-card--active .peek-card-icon[data-v-515045d6]{color:#8a82ff}.peek-card--active .peek-card-title[data-v-515045d6]{color:#fff}.peek-card-icon[data-v-515045d6]{color:#999;flex-shrink:0}.peek-card-text[data-v-515045d6]{flex:1;min-width:0;line-height:1.25}.peek-card-title[data-v-515045d6]{color:#d0d0d0;font-size:12px;font-weight:600}.peek-card-desc[data-v-515045d6]{color:#888;margin-top:2px;font-size:10.5px}.peek-card-check[data-v-515045d6]{flex-shrink:0}.sentry-toggle-btn[data-v-515045d6]{background:#333;padding:2px 10px}.sentry-url-wrap[data-v-515045d6]{background:#1e1e3a;padding:8px 0 0}.sentry-url-input[data-v-515045d6]{padding:0 12px}.sentry-url-input[data-v-515045d6] .q-field__control{height:36px;min-height:36px;padding:0}.sentry-url-input[data-v-515045d6] input{color:#d0d0d0;font-size:13px}.sentry-url-input[data-v-515045d6] input::placeholder{color:#555;font-size:12px}.sentry-error[data-v-515045d6],.sentry-valid[data-v-515045d6]{padding-bottom:6px}.slide-enter-active[data-v-515045d6],.slide-leave-active[data-v-515045d6]{transition:all .2s;overflow:hidden}.slide-enter-from[data-v-515045d6],.slide-leave-to[data-v-515045d6]{opacity:0;max-height:0}.slide-enter-to[data-v-515045d6],.slide-leave-from[data-v-515045d6]{opacity:1;max-height:120px}.card-bottom-bar[data-v-515045d6]{background:#1e1e3a}.skip-setup-btn[data-v-515045d6]{min-height:28px;padding:2px 10px;font-size:11px}.skip-setup-btn[data-v-515045d6] .q-btn__content{gap:4px}.skip-setup-btn[data-v-515045d6] .q-icon{font-size:14px}.bottom-row-git .bottom-select-label[data-v-515045d6]{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.bottom-row-git .bottom-select.repo-select[data-v-515045d6] input{color:#bbb;padding:0 4px;font-size:11px}.bottom-row-git .bottom-select.repo-select[data-v-515045d6] input::placeholder{color:#666;font-style:italic}.bottom-select[data-v-515045d6]{background:#333;height:28px;padding:0 6px}.bottom-select[data-v-515045d6] .q-field__control{height:28px;min-height:28px;padding:0}.bottom-select[data-v-515045d6] .q-field__native{min-height:unset;padding:0}.bottom-select-label[data-v-515045d6]{color:#bbb;gap:2px;font-size:11px}.bottom-sep[data-v-515045d6]{color:#555;padding:0 2px;font-size:12px;line-height:1}.repo-path-wrap[data-v-515045d6]{background:#333;border-radius:6px;height:28px;padding:0 8px}.repo-input[data-v-515045d6]{min-width:140px}.repo-input[data-v-515045d6] .q-field__control{height:28px;min-height:28px;padding:0}.repo-input[data-v-515045d6] input{color:#bbb;font-size:11px}.repo-input[data-v-515045d6] input::placeholder{color:#666;font-size:11px}.branch-select[data-v-515045d6]{min-width:80px}.create-btn[data-v-515045d6]{color:#fff;background:#4f46e5;min-width:220px;height:32px;padding:0 32px;font-size:13px}.create-btn[data-v-515045d6] .q-btn__content{height:32px}.create-hint[data-v-515045d6]{line-height:1.5}.fade-enter-active[data-v-515045d6],.fade-leave-active[data-v-515045d6]{transition:opacity .2s}.fade-enter-from[data-v-515045d6],.fade-leave-to[data-v-515045d6]{opacity:0}.manual-hint[data-v-515045d6]{background:#1e1e3a;line-height:1.4}.manual-expansion[data-v-515045d6]{background:#1e1e3a;border:1px solid #333;border-radius:4px;margin-top:6px;overflow:hidden}.manual-expansion[data-v-515045d6] .manual-expansion-header{min-height:32px;padding:4px 10px;font-size:12px}.manual-expansion[data-v-515045d6] .q-expansion-item__content,.manual-section-body[data-v-515045d6]{background:#1a1a2e}.manual-input[data-v-515045d6] .q-field__control{height:26px;min-height:26px;padding:0}.manual-input[data-v-515045d6] input{color:#e0e0e0;font-size:12px}.manual-input[data-v-515045d6] input::placeholder{color:#555}.manual-item[data-v-515045d6]{border-top:1px solid #ffffff0a}.manual-item[data-v-515045d6]:first-child{border-top:none}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{D as e,E as t,G as n,I as r,N as i,P as ee,R as te,S as ne,St as a,W as o,_ as s,at as c,bt as re,d as l,et as u,f as d,g as f,l as p,p as m,r as ie,u as h,y as ae,yt as oe}from"./runtime-core.esm-bundler-D_RRiKBh.js";import{H as se,R as ce,U as g,t as _}from"./QIcon-BmEX2rXO.js";import{r as v}from"./use-id-BCnfiBjU.js";import{s as le}from"./notifications-l1Pxijve.js";import{t as y}from"./QBtn-CoU-UC_j.js";import{n as ue}from"./vue-i18n-Cq-KgjJC.js";import{t as b}from"./QInput-D0t39uK_.js";import{c as de,g as fe,i as pe,o as me}from"./index-Bt877CHx.js";import{t as he}from"./QSpinnerDots-DspFKwCZ.js";import{n as x,t as ge}from"./QItemSection-DRg-QuAD.js";import{t as S}from"./QItemLabel-Btqw0P7M.js";import{t as C}from"./QTooltip-CwBZU_bs.js";import{t as _e}from"./QExpansionItem-CiBP4NiY.js";import{t as ve}from"./_plugin-vue_export-helper-r4mAJOHR.js";import{t as ye}from"./QSpace-Crcx82On.js";import{t as be}from"./use-quasar-q6dh7QVJ.js";import{t as xe}from"./QPage-3-ah4oor.js";import{a as w,i as Se,r as Ce,t as we}from"./permissionModes-Bgj5fd8D.js";import{a as Te,i as Ee,n as De,r as Oe,t as ke}from"./expand-template-BYY8KsHo.js";var T=`kobo:create-page-prefs`;function Ae(){try{let e=localStorage.getItem(T);return e===null?void 0:JSON.parse(e)}catch{return}}function E(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function je(){let e=Ae();if(!E(e))return{};let t={};return typeof e.projectPath==`string`&&e.projectPath.length>0&&(t.projectPath=e.projectPath),typeof e.autoLoop==`boolean`&&(t.autoLoop=e.autoLoop),t}function Me(e){try{localStorage.setItem(T,JSON.stringify(e))}catch{}}var Ne={class:`create-inner`},Pe={class:`create-title text-center text-weight-bold q-mb-lg text-grey-3`},Fe={class:`create-card rounded-borders`},Ie={class:`card-top-bar row items-center q-px-md q-py-xs`},Le={class:`model-badge cursor-default row items-center q-gutter-xs`},Re={class:`text-indigo-3 text-weight-medium text-caption`},ze={key:0,class:`notion-url-wrap`},Be={key:0,class:`notion-error text-caption q-px-md q-pb-xs text-red-5`},Ve={key:1,class:`notion-valid text-caption q-px-md q-pb-xs text-green-4`},He={key:2,class:`notion-peek-choice q-px-md q-pb-sm`},Ue={class:`text-caption text-grey-4 q-mb-sm`},We={class:`row q-gutter-sm`},Ge={class:`peek-card-text`},Ke={class:`peek-card-title`},qe={class:`peek-card-desc`},Je={class:`peek-card-text`},Ye={class:`peek-card-title`},Xe={class:`peek-card-desc`},Ze={key:0,class:`sentry-url-wrap`},Qe={key:0,class:`sentry-error text-caption q-px-md q-pb-xs text-red-5`},$e={key:1,class:`sentry-valid text-caption q-px-md q-pb-xs text-red-4`},et={class:`card-name-wrap`},tt={class:`card-textarea-wrap`},nt={class:`row items-center justify-end q-px-sm q-pb-xs q-gutter-sm`},rt={key:0,class:`row items-center text-caption text-amber-6`},it={class:`manual-hint q-px-md q-py-sm text-caption text-grey-6`},at={class:`q-pa-sm manual-section-body`},ot={class:`row items-center q-gutter-sm q-mb-sm`},st={class:`col text-caption text-grey-4`},ct={class:`q-pa-sm manual-section-body`},lt={class:`row items-center q-gutter-sm q-mb-sm`},ut={class:`col text-caption text-grey-4`},dt={class:`card-bottom-bar`},ft={class:`row q-col-gutter-xs q-px-xs`},pt={key:0,class:`col-12 col-sm-6 col-md-3`},mt={class:`bottom-select-label row items-center no-wrap`},ht={class:`col-12 col-sm-6 col-md-3`},gt={class:`bottom-select-label row items-center no-wrap`},_t={class:`col-12 col-sm-6 col-md-3`},vt={class:`bottom-select-label row items-center no-wrap`},yt={class:`col-12 col-md-3`},bt={class:`bottom-select-label row items-center no-wrap`},xt={class:`row q-col-gutter-xs q-pa-xs col-12 items-center justify-center`},St={class:`col-12 col-md-auto`},Ct={class:`col-12 col-md-auto`},wt={class:`col-12 col-md-auto`},Tt={class:`row q-col-gutter-xs q-px-xs bottom-row-git`},Et={class:`col-12 col-md-4`},Dt={key:0,class:`col-12 col-md-4`},Ot={class:`bottom-select-label row items-center no-wrap`},kt={key:1,class:`col-12 col-md-4`},At={class:`bottom-select-label row items-center no-wrap`},jt={class:`col-12 col-md-4`},Mt={class:`bottom-select-label row items-center no-wrap`},Nt={class:`row justify-center q-px-sm q-py-sm`},Pt={class:`create-hint text-center text-body2 q-mt-md text-grey-8`},Ft=6e4,D=ve(ae({__name:`CreatePage`,setup(ae){let ve=pe(),T=be(),Ae=de(),E=le(),{t:D}=ue(),It=u([]),Lt=u(``),O=u(``),Rt=u(null),zt=u(``),k=u(!1),A=u(!1),Bt=u(null),Vt=u(null),Ht=u([]),Ut=u(null),j=u(``),M=u(!1),N=u(`claude-opus-4-7`),P=u(`auto`),F=u(``),I=u(null),L=u(`feature`),R=u(!1),Wt=p(()=>E.global.voiceEnabled),Gt=u([]),z=u(`claude-code`),Kt=p(()=>Gt.value.find(e=>e.id===z.value)),qt=p(()=>Gt.value.map(e=>({value:e.id,label:e.displayName}))),Jt=p(()=>E.global.branchPrefixes.map(e=>({label:`${e}/`,value:e}))),Yt=[`plan`,`bypass`,`strict`,`interactive`];function Xt(e,t){let n=e?E.getProjectByPath(e):void 0,r=n?.agentPermissionMode;if(typeof r==`string`&&Yt.includes(r))return r;let i=E.global.defaultPermissionModeByEngine?.[t];return typeof i==`string`&&Yt.includes(i)?i:n?.dangerouslySkipPermissions??E.global.dangerouslySkipPermissions??!0?`bypass`:t===`codex`?`plan`:`interactive`}let B=u(Xt(``,z.value)),Zt=p(()=>{switch(B.value){case`plan`:return`visibility`;case`bypass`:return`flash_on`;case`strict`:return`lock`;case`interactive`:return`security`}}),Qt=p(()=>(we[z.value]??Yt).map(e=>({value:e,label:D(`agentPermissionMode.${e}`),disabled:e===`plan`&&X.value}))),V=u([]),$t=u([]),en=u(!1),tn=u(!1);function nn(e,t){t(()=>{$t.value=e?V.value.filter(t=>t.toLowerCase().includes(e.toLowerCase())):V.value})}let rn=fe();function an(){return Rt.value?.nativeEl??null}let{showSkills:on,selectedSkillIndex:H,groupedDropdown:sn,flatDropdown:U,fetchSkills:cn,detectSlashFragment:ln,replaceFragmentWith:un,closeDropdown:dn}=Ee(O,an,{excludeKoboCommands:!0});cn(),o(O,async()=>{await e(),await ln()});function fn(e){if(e.type===`template`){let t=rn.templates.find(t=>t.slug===e.name);if(!t)return;un(De(t.content,ke({workspace:null,gitStats:null,sessionName:null}))),dn();return}un(`/${e.name} `),dn()}function pn(e){!on.value||U.value.length===0||(e.key===`ArrowDown`?(e.preventDefault(),H.value=(H.value+1)%U.value.length):e.key===`ArrowUp`?(e.preventDefault(),H.value=(H.value-1+U.value.length)%U.value.length):e.key===`Enter`&&!e.shiftKey&&!e.ctrlKey&&!e.metaKey?(e.preventDefault(),fn(U.value[H.value])):e.key===`Escape`&&(e.preventDefault(),dn()))}async function mn(){if(!(!Wt.value||k.value||A.value)){if(!navigator.mediaDevices?.getUserMedia||typeof MediaRecorder>`u`){T.notify({type:`warning`,message:D(`voice.notSupported`),position:`top`,timeout:4e3});return}try{let e=await navigator.mediaDevices.getUserMedia({audio:!0});Vt.value=e,Ht.value=[];let t=MediaRecorder.isTypeSupported(`audio/webm`)?`audio/webm`:``,n=t?new MediaRecorder(e,{mimeType:t}):new MediaRecorder(e);n.ondataavailable=e=>{e.data&&e.data.size>0&&Ht.value.push(e.data)},n.start(),Bt.value=n,k.value=!0,Ut.value=setTimeout(()=>{W(),T.notify({type:`info`,message:D(`voice.maxDurationReached`),position:`top`,timeout:3500})},Ft)}catch{T.notify({type:`negative`,message:D(`voice.errorMicPermission`),position:`top`,timeout:5e3})}}}async function W(){if(!k.value)return;let e=Bt.value;if(!e)return;k.value=!1,A.value=!0,Ut.value&&=(clearTimeout(Ut.value),null);let t=await new Promise(t=>{e.onstop=()=>t(new Blob(Ht.value,{type:`audio/webm`})),e.stop()});try{if(t.size===0)throw Error(`MIC_AUDIO_INVALID`);let e=new FormData;e.append(`audio`,t,`voice.webm`),e.append(`language`,E.global.voiceLanguage||`auto`);let n=await fetch(`/api/voice/transcribe`,{method:`POST`,body:e});if(!n.ok){let e=await n.json().catch(()=>({}));throw Error(String(e.code??e.error??`HTTP_${n.status}`))}let r=await n.json();r.text?.trim()&&(O.value=O.value?`${O.value.trimEnd()} ${r.text.trim()}`:r.text.trim())}catch(e){let t=e instanceof Error?e.message:`TRANSCRIPTION_FAILED`;T.notify({type:`negative`,message:D({VOICE_DISABLED:`voice.errorDisabled`,MODEL_NOT_CONFIGURED:`voice.errorModelMissing`,MODEL_NOT_INSTALLED:`voice.errorModelNotInstalled`,VOICE_RUNTIME_MISSING:`voice.errorRuntimeMissing`,MIC_AUDIO_INVALID:`voice.errorAudioInvalid`,LANGUAGE_INVALID:`voice.errorLanguageInvalid`,TRANSCRIPTION_TIMEOUT:`voice.errorTranscription`}[t]??`voice.errorTranscription`),position:`top`,timeout:5e3})}finally{Bt.value=null,Ht.value=[],Vt.value?.getTracks().forEach(e=>{e.stop()}),Vt.value=null,A.value=!1}}function hn(e){return Wt.value?E.global.voicePttKey===`ctrl+space`?e.ctrlKey&&e.code===`Space`:e.key===`Alt`:!1}function gn(e){!hn(e)||e.repeat||(e.preventDefault(),mn())}function _n(e){hn(e)&&(e.preventDefault(),W())}function vn(){k.value&&W()}function yn(){document.visibilityState!==`visible`&&k.value&&W()}let bn=p(()=>(Se[z.value]??Ce).map(e=>({label:D(e.i18nLabelKey),value:e.value,description:D(e.i18nDescriptionKey)})));o(z,()=>{let e=bn.value.map(e=>e.value);if(e.length>0){let t=E.global.defaultModelByEngine?.[z.value];typeof t==`string`&&e.includes(t)?N.value=t:e.includes(N.value)||(N.value=e.includes(`auto`)?`auto`:e[0]??`auto`)}let t=we[z.value]??[];t.length>0&&!t.includes(B.value)&&(B.value=Xt(F.value,z.value));let n=(Oe[z.value]??[]).map(e=>e.value);n.length>0&&!n.includes(P.value)&&(P.value=n.includes(`auto`)?`auto`:n[0]??`auto`)});function xn(e){let t=e.indexOf(`:`);return t>=0?e.slice(t+1).trim():e}let Sn=p(()=>(Oe[z.value]??Oe[`claude-code`]).map(e=>({value:e.value,label:xn(D(e.i18nLabelKey)),description:D(e.i18nDescriptionKey)}))),G=p(()=>{let e=j.value.trim();return e.startsWith(`https://www.notion.so/`)||e.startsWith(`https://app.notion.com/`)}),Cn=p(()=>/[?&]p=[0-9a-f]{32}(?:[&#]|$)/i.test(j.value)),K=u(`panel`);function wn(){let e=j.value.trim();return K.value===`parent`&&Cn.value?e.replace(/([?&])p=[0-9a-f]{32}(?=[&#]|$)/i,`$1`).replace(/([?&])pm=[a-z]+(?=[&#]|$)/i,`$1`).replace(/[?&]+$/,``).replace(/\?&/,`?`):e}let q=u([]),J=u([]),Tn=u(``),En=u(``),Dn=p(()=>!M.value||!G.value);function On(){let e=Tn.value.trim();e&&(q.value.push(e),Tn.value=``)}function kn(e){q.value.splice(e,1)}function An(){let e=En.value.trim();e&&(J.value.push(e),En.value=``)}function jn(e){J.value.splice(e,1)}function Mn(){M.value=!M.value,M.value||(j.value=``)}let Y=u(!1),X=u(!1);o(()=>X.value,e=>{e&&B.value!==`bypass`&&(B.value=`bypass`,T.notify({type:`info`,message:D(`agentPermissionMode.autoLoopLocked`),timeout:4e3}))});let Z=u(``),Nn=p(()=>/\/issues\/\d+/.test(Z.value.trim()));function Pn(){Y.value=!Y.value,Y.value||(Z.value=``)}let Q=u(!1),$=u(null),Fn=u([]),In=u(!1);async function Ln(){if(!F.value.trim()){Fn.value=[];return}In.value=!0;try{Fn.value=await Ae.fetchOrphanWorktrees(F.value.trim())}catch{Fn.value=[]}finally{In.value=!1}}function Rn(){Q.value=!Q.value,Q.value?(M.value=!1,j.value=``,Y.value=!1,Z.value=``,R.value=!0,Ln()):$.value=null}o(F,()=>{$.value=null,Q.value&&Ln()}),o($,e=>{if(!e)return;let t=Fn.value.find(t=>t.path===e);t&&(I.value=t.suggestedSourceBranch),R.value=!0});async function zn(e){if(!e.trim()){V.value=[],I.value=null;return}en.value=!0;try{let t=await fetch(`/api/git/branches?path=${encodeURIComponent(e.trim())}`);if(!t.ok)throw Error(`HTTP ${t.status}`);let n=await t.json();V.value=n.local??n.branches??[],V.value.length>0&&!I.value&&(I.value=V.value[0]??null)}catch{V.value=[],I.value=null}finally{en.value=!1}}function Bn(e){let t=E.getProjectByPath(e);if(t){t.defaultSourceBranch&&(I.value=t.defaultSourceBranch);let e=t.taskPromptTemplate??``;(O.value===``||O.value===zt.value)&&(O.value=e,zt.value=e);let n=bn.value.map(e=>e.value);if(t.defaultModel&&n.includes(t.defaultModel))N.value=t.defaultModel;else{let e=E.global.defaultModelByEngine?.[z.value];typeof e==`string`&&n.includes(e)&&(N.value=e)}}B.value=Xt(e,z.value)}let Vn=null;o(F,e=>{Vn&&clearTimeout(Vn),Vn=setTimeout(()=>{I.value=null,zn(e),Bn(e)},500)});function Hn(e,t){t(()=>{It.value=E.projectPaths.filter(t=>t.toLowerCase().includes(e.toLowerCase()))})}i(async()=>{await E.fetchSettings();let e=E.global.branchPrefixes;e.length>0&&!e.includes(L.value)&&(L.value=e[0]);let t=je();t.autoLoop===!0&&(X.value=!0),t.projectPath&&E.projectPaths.includes(t.projectPath)&&(F.value=t.projectPath),B.value=Xt(F.value,z.value);try{let e=await fetch(`/api/engines`);e.ok&&(Gt.value=await e.json())}catch{}{let e=bn.value.map(e=>e.value),t=E.global.defaultModelByEngine?.[z.value];typeof t==`string`&&e.includes(t)?N.value=t:e.length>0&&!e.includes(N.value)&&(N.value=e.includes(`auto`)?`auto`:e[0]??`auto`)}window.addEventListener(`keydown`,gn),window.addEventListener(`keyup`,_n),window.addEventListener(`blur`,vn),document.addEventListener(`visibilitychange`,yn)}),ee(()=>{Vn&&clearTimeout(Vn),window.removeEventListener(`keydown`,gn),window.removeEventListener(`keyup`,_n),window.removeEventListener(`blur`,vn),document.removeEventListener(`visibilitychange`,yn),Ut.value&&=(clearTimeout(Ut.value),null),k.value&&W()});function Un(e){return e.normalize(`NFD`).replace(/[\u0300-\u036f]/g,``).toLowerCase().replace(/[^a-z0-9\s-]/g,``).trim().replace(/\s+/g,`-`).replace(/-+/g,`-`).substring(0,50)}function Wn(){return Lt.value.trim()?Lt.value.trim().substring(0,80):!M.value&&!Y.value&&O.value.trim()&&(O.value.trim().split(`
|
|
2
|
-
`)[0]??``).substring(0,80)||`workspace`}function Gn(e){let t=(e.split(`/`).pop()??``).split(`-`);t.length>1&&/^[0-9a-f]{12,}$/i.test(t[t.length-1])&&t.pop();let n=t.join(`-`).toLowerCase(),r=n.match(/tk-(\d+)/);if(r){let e=`TK-${r[1]}`,t=n.replace(/tk-\d+/i,``).replace(/-+/g,`-`).replace(/^-|-$/g,``).substring(0,40);return t?`${e}--${t}`:e}return n.substring(0,50)||`task-${Date.now()}`}function Kn(){return M.value&&!G.value?D(`createPage.validationNotionUrl`):Y.value&&!Nn.value?D(`createPage.sentryValidation`):!M.value&&!Y.value&&!O.value.trim()?D(`createPage.validationDescription`):!M.value&&!Y.value&&(!Wn()||Wn()===`workspace`)&&!Lt.value.trim()&&!O.value.trim()?D(`createPage.validationName`):F.value.trim()?I.value?null:D(`createPage.validationBranch`):D(`createPage.validationPath`)}async function qn(){let e=Kn();if(e){T.notify({type:`negative`,message:e,position:`top`});return}if(Q.value&&!$.value){T.notify({type:`negative`,message:D(`createPage.pickWorktreeRequired`),position:`top`});return}tn.value=!0;try{let e=Wn(),t;t=M.value&&G.value?Gn(wn()):e===`workspace`?`task-${Date.now()}`:Un(e);let n=`${L.value}/${t}`,r={name:e,projectPath:F.value.trim(),sourceBranch:I.value,...Q.value&&$.value?{worktreePath:$.value,skipSetupScript:!0}:{workingBranch:n},engine:z.value,model:N.value,reasoningEffort:P.value,...M.value&&G.value?{notionUrl:wn()}:{},...Y.value&&Nn.value?{sentryUrl:Z.value.trim()}:{},...Dn.value&&q.value.length>0?{tasks:q.value}:{},...Dn.value&&J.value.length>0?{acceptanceCriteria:J.value}:{},...R.value&&!Q.value?{skipSetupScript:!0}:{},...O.value.trim()?{description:O.value.trim()}:{},...X.value?{autoLoop:!0}:{},agentPermissionMode:X.value&&B.value===`plan`?`bypass`:B.value},i=await Ae.createWorkspace(r);i._branchAdjusted&&T.notify({type:`info`,message:D(`createPage.branchAdjusted`,{branch:i.workingBranch}),position:`top`,timeout:6e3}),Me({projectPath:F.value.trim(),autoLoop:X.value}),me().subscribe(i.id),Ae.selectWorkspace(i.id),ve.push({name:`workspace`,params:{id:i.id}})}catch{T.notify({type:`negative`,message:D(`createPage.errorCreating`),position:`top`})}finally{tn.value=!1}}return(e,i)=>(r(),l(xe,{class:`create-page flex flex-center column`},{default:n(()=>[h(`div`,Ne,[h(`div`,Pe,a(e.$t(`createPage.title`)),1),h(`div`,Fe,[h(`div`,Ie,[h(`span`,Le,[s(_,{name:`auto_awesome`,size:`14px`,color:`indigo-4`}),h(`span`,Re,a(Kt.value?.displayName??e.$t(`createPage.claudeCode`)),1)]),s(ye),s(y,{flat:``,dense:``,"no-caps":``,size:`sm`,color:M.value?`green-4`:`grey-5`,class:`notion-toggle-btn text-caption rounded-borders`,disable:Q.value,onClick:Mn},{default:n(()=>[s(_,{name:`description`,size:`14px`,class:`q-mr-xs`}),f(` `+a(M.value?e.$t(`createPage.notionEnabled`):e.$t(`createPage.importNotion`)),1)]),_:1},8,[`color`,`disable`]),s(y,{flat:``,dense:``,"no-caps":``,size:`sm`,color:Y.value?`red-4`:`grey-5`,class:`sentry-toggle-btn text-caption rounded-borders q-ml-sm`,disable:Q.value,onClick:Pn},{default:n(()=>[s(_,{name:`bug_report`,size:`14px`,class:`q-mr-xs`}),f(` `+a(Y.value?e.$t(`createPage.sentryEnabled`):e.$t(`createPage.importSentry`)),1)]),_:1},8,[`color`,`disable`])]),s(v,{color:`grey-9`}),s(ce,{name:`slide`},{default:n(()=>[M.value?(r(),m(`div`,ze,[s(b,{modelValue:j.value,"onUpdate:modelValue":i[0]||=e=>j.value=e,borderless:``,dense:``,placeholder:e.$t(`createPage.notionPlaceholder`),class:`notion-url-input`,"input-class":`notion-url-input-inner`},{prepend:n(()=>[s(_,{name:`link`,size:`16px`,color:G.value?`green-4`:`grey-6`},null,8,[`color`])]),_:1},8,[`modelValue`,`placeholder`]),j.value.trim()&&!G.value?(r(),m(`div`,Be,a(e.$t(`createPage.notionValidation`)),1)):d(``,!0),G.value?(r(),m(`div`,Ve,a(e.$t(`createPage.notionAutoExtract`)),1)):d(``,!0),G.value&&Cn.value?(r(),m(`div`,He,[h(`div`,Ue,[s(_,{name:`info`,size:`14px`,color:`indigo-4`,class:`q-mr-xs`}),f(` `+a(e.$t(`createPage.notionPanelChoiceLabel`)),1)]),h(`div`,We,[h(`button`,{type:`button`,class:oe([`peek-card col`,{"peek-card--active":K.value===`panel`}]),onClick:i[1]||=e=>K.value=`panel`},[s(_,{name:`article`,size:`22px`,class:`peek-card-icon`}),h(`div`,Ge,[h(`div`,Ke,a(e.$t(`createPage.notionPanelOption`)),1),h(`div`,qe,a(e.$t(`createPage.notionPanelOptionDesc`)),1)]),K.value===`panel`?(r(),l(_,{key:0,name:`check_circle`,size:`18px`,color:`indigo-4`,class:`peek-card-check`})):d(``,!0)],2),h(`button`,{type:`button`,class:oe([`peek-card col`,{"peek-card--active":K.value===`parent`}]),onClick:i[2]||=e=>K.value=`parent`},[s(_,{name:`folder_open`,size:`22px`,class:`peek-card-icon`}),h(`div`,Je,[h(`div`,Ye,a(e.$t(`createPage.notionParentOption`)),1),h(`div`,Xe,a(e.$t(`createPage.notionParentOptionDesc`)),1)]),K.value===`parent`?(r(),l(_,{key:0,name:`check_circle`,size:`18px`,color:`indigo-4`,class:`peek-card-check`})):d(``,!0)],2)])])):d(``,!0)])):d(``,!0)]),_:1}),M.value?(r(),l(v,{key:0,color:`grey-9`})):d(``,!0),s(ce,{name:`slide`},{default:n(()=>[Y.value?(r(),m(`div`,Ze,[s(b,{modelValue:Z.value,"onUpdate:modelValue":i[3]||=e=>Z.value=e,borderless:``,dense:``,placeholder:e.$t(`createPage.sentryPlaceholder`),class:`sentry-url-input`,"input-class":`sentry-url-input-inner`},{prepend:n(()=>[s(_,{name:`link`,size:`16px`,color:Nn.value?`red-4`:`grey-6`},null,8,[`color`])]),_:1},8,[`modelValue`,`placeholder`]),Z.value.trim()&&!Nn.value?(r(),m(`div`,Qe,a(e.$t(`createPage.sentryValidation`)),1)):d(``,!0),Nn.value?(r(),m(`div`,$e,a(e.$t(`createPage.sentryAutoExtract`)),1)):d(``,!0)])):d(``,!0)]),_:1}),Y.value?(r(),l(v,{key:1,color:`grey-9`})):d(``,!0),h(`div`,et,[s(b,{modelValue:Lt.value,"onUpdate:modelValue":i[4]||=e=>Lt.value=e,borderless:``,dense:``,placeholder:M.value&&G.value?e.$t(`createPage.workspaceName`):e.$t(`createPage.workspaceNamePlaceholder`),class:`name-input`,"input-class":`name-input-inner`},null,8,[`modelValue`,`placeholder`])]),s(v,{color:`grey-9`}),h(`div`,tt,[s(b,{ref_key:`descriptionRef`,ref:Rt,modelValue:O.value,"onUpdate:modelValue":i[5]||=e=>O.value=e,type:`textarea`,borderless:``,autogrow:``,rows:3,placeholder:M.value?e.$t(`createPage.instructions`):e.$t(`createPage.instructionsPlaceholder`),class:`create-textarea`,"input-class":`create-textarea-input`,onKeydown:[pn,se(g(qn,[`ctrl`]),[`enter`]),se(g(qn,[`meta`]),[`enter`])]},null,8,[`modelValue`,`placeholder`,`onKeydown`]),h(`div`,nt,[A.value?(r(),m(`div`,rt,[s(he,{size:`14px`,color:`amber-6`,class:`q-mr-xs`}),h(`span`,null,a(e.$t(`voice.transcribing`)),1)])):d(``,!0),s(y,{flat:``,dense:``,size:`sm`,icon:A.value?`hourglass_top`:k.value?`mic`:`mic_none`,color:k.value?`red-5`:A.value?`amber-6`:`grey-6`,disable:!Wt.value||A.value,class:oe({"voice-btn--recording":k.value}),onMousedown:g(mn,[`prevent`]),onMouseup:g(W,[`prevent`]),onMouseleave:g(W,[`prevent`]),onTouchstart:g(mn,[`prevent`]),onTouchend:g(W,[`prevent`])},{default:n(()=>[s(C,null,{default:n(()=>[f(a(A.value?e.$t(`voice.transcribing`):k.value?e.$t(`voice.recording`):e.$t(`voice.holdToTalk`)),1)]),_:1})]),_:1},8,[`icon`,`color`,`disable`,`class`])]),c(on)&&c(U).length>0?(r(),l(Te,{key:0,class:`create-slash-popup`,"grouped-dropdown":c(sn),"flat-dropdown":c(U),"selected-index":c(H),onSelect:fn},null,8,[`grouped-dropdown`,`flat-dropdown`,`selected-index`])):d(``,!0)]),s(v,{color:`grey-9`}),Dn.value?(r(),m(ie,{key:2},[h(`div`,it,a(e.$t(`createPage.manualHint`)),1),s(_e,{dark:``,dense:``,label:e.$t(`createPage.tasks`,{count:q.value.length}),"header-class":`text-grey-4 manual-expansion-header`,class:`manual-expansion q-mx-sm`},{default:n(()=>[h(`div`,at,[h(`div`,ot,[s(b,{modelValue:Tn.value,"onUpdate:modelValue":i[6]||=e=>Tn.value=e,dark:``,dense:``,borderless:``,placeholder:e.$t(`createPage.addTask`),class:`col manual-input`,"input-class":`manual-input-inner`,onKeydown:se(g(On,[`prevent`]),[`enter`])},null,8,[`modelValue`,`placeholder`,`onKeydown`]),s(y,{flat:``,dense:``,round:``,icon:`add`,color:`indigo-4`,disable:!Tn.value.trim(),onClick:On},{default:n(()=>[s(C,null,{default:n(()=>[f(a(e.$t(`tooltip.addTask`)),1)]),_:1})]),_:1},8,[`disable`])]),(r(!0),m(ie,null,te(q.value,(t,i)=>(r(),m(`div`,{key:`task-${i}`,class:`row items-center q-py-xs manual-item`},[h(`span`,st,a(t),1),s(y,{flat:``,dense:``,round:``,icon:`close`,size:`xs`,color:`grey-6`,onClick:e=>kn(i)},{default:n(()=>[s(C,null,{default:n(()=>[f(a(e.$t(`tooltip.removeTask`)),1)]),_:1})]),_:1},8,[`onClick`])]))),128))])]),_:1},8,[`label`]),s(_e,{dark:``,dense:``,label:e.$t(`createPage.acceptanceCriteria`,{count:J.value.length}),"header-class":`text-grey-4 manual-expansion-header`,class:`manual-expansion q-mx-sm q-mb-sm`},{default:n(()=>[h(`div`,ct,[h(`div`,lt,[s(b,{modelValue:En.value,"onUpdate:modelValue":i[7]||=e=>En.value=e,dark:``,dense:``,borderless:``,placeholder:e.$t(`createPage.addCriterion`),class:`col manual-input`,"input-class":`manual-input-inner`,onKeydown:se(g(An,[`prevent`]),[`enter`])},null,8,[`modelValue`,`placeholder`,`onKeydown`]),s(y,{flat:``,dense:``,round:``,icon:`add`,color:`indigo-4`,disable:!En.value.trim(),onClick:An},{default:n(()=>[s(C,null,{default:n(()=>[f(a(e.$t(`tooltip.addCriterion`)),1)]),_:1})]),_:1},8,[`disable`])]),(r(!0),m(ie,null,te(J.value,(t,i)=>(r(),m(`div`,{key:`crit-${i}`,class:`row items-center q-py-xs manual-item`},[h(`span`,ut,a(t),1),s(y,{flat:``,dense:``,round:``,icon:`close`,size:`xs`,color:`grey-6`,onClick:e=>jn(i)},{default:n(()=>[s(C,null,{default:n(()=>[f(a(e.$t(`tooltip.removeCriterion`)),1)]),_:1})]),_:1},8,[`onClick`])]))),128))])]),_:1},8,[`label`]),s(v,{color:`grey-9`})],64)):d(``,!0),h(`div`,dt,[h(`div`,ft,[qt.value.length>0?(r(),m(`div`,pt,[s(w,{modelValue:z.value,"onUpdate:modelValue":i[8]||=e=>z.value=e,options:qt.value,dense:``,borderless:``,class:`bottom-select rounded-borders`,"hide-dropdown-icon":``,"emit-value":``,"map-options":``,"option-value":`value`,"option-label":`label`},{selected:n(()=>[h(`span`,mt,[s(_,{name:`hub`,size:`12px`,color:`grey-5`,class:`q-mr-xs`}),f(` `+a(qt.value.find(e=>e.value===z.value)?.label??z.value)+` `,1),s(_,{name:`expand_more`,size:`12px`,color:`grey-5`})])]),default:n(()=>[s(C,null,{default:n(()=>[f(a(e.$t(`engine.select`)),1)]),_:1})]),_:1},8,[`modelValue`,`options`])])):d(``,!0),h(`div`,ht,[s(w,{modelValue:N.value,"onUpdate:modelValue":i[9]||=e=>N.value=e,options:bn.value,dense:``,borderless:``,class:`bottom-select rounded-borders model-select`,"hide-dropdown-icon":``,"emit-value":``,"map-options":``,"option-value":`value`,"option-label":`label`},{selected:n(()=>[h(`span`,gt,[f(a(bn.value.find(e=>e.value===N.value)?.label??N.value)+` `,1),s(_,{name:`expand_more`,size:`12px`,color:`grey-5`})])]),option:n(({opt:e,itemProps:r})=>[s(x,t(r,{class:`model-option`}),{default:n(()=>[s(ge,null,{default:n(()=>[s(S,{class:`text-white`},{default:n(()=>[f(a(e.label),1)]),_:2},1024),s(S,{caption:``,class:`text-grey-5`},{default:n(()=>[f(a(e.description),1)]),_:2},1024)]),_:2},1024)]),_:2},1040)]),_:1},8,[`modelValue`,`options`])]),h(`div`,_t,[s(w,{modelValue:P.value,"onUpdate:modelValue":i[10]||=e=>P.value=e,options:Sn.value,dense:``,borderless:``,class:`bottom-select rounded-borders`,"hide-dropdown-icon":``,"emit-value":``,"map-options":``,"option-value":`value`,"option-label":`label`},{selected:n(()=>[h(`span`,vt,[s(_,{name:`psychology`,size:`12px`,color:`grey-5`,class:`q-mr-xs`}),f(` `+a(Sn.value.find(e=>e.value===P.value)?.label??P.value)+` `,1),s(_,{name:`expand_more`,size:`12px`,color:`grey-5`})])]),option:n(({opt:e,itemProps:t})=>[s(x,re(ne(t)),{default:n(()=>[s(ge,null,{default:n(()=>[s(S,{class:`text-white`},{default:n(()=>[f(a(e.label),1)]),_:2},1024),s(S,{caption:``,class:`text-grey-5`},{default:n(()=>[f(a(e.description),1)]),_:2},1024)]),_:2},1024)]),_:2},1040)]),_:1},8,[`modelValue`,`options`])]),h(`div`,yt,[s(w,{modelValue:B.value,"onUpdate:modelValue":i[11]||=e=>B.value=e,options:Qt.value,disable:X.value,dense:``,borderless:``,class:`bottom-select rounded-borders`,"hide-dropdown-icon":``,"emit-value":``,"map-options":``,"option-value":`value`,"option-label":`label`,"option-disable":e=>e.disabled===!0},{selected:n(()=>[h(`span`,bt,[s(_,{name:Zt.value,size:`12px`,color:`amber-6`,class:`q-mr-xs`},null,8,[`name`]),f(` `+a(Qt.value.find(e=>e.value===B.value)?.label??B.value)+` `,1),X.value?d(``,!0):(r(),l(_,{key:0,name:`expand_more`,size:`12px`,color:`grey-5`}))])]),default:n(()=>[s(C,null,{default:n(()=>[f(a(X.value?e.$t(`agentPermissionMode.autoLoopLocked`):e.$t(`agentPermissionMode.tooltip`)),1)]),_:1})]),_:1},8,[`modelValue`,`options`,`disable`,`option-disable`])])]),h(`div`,xt,[h(`div`,St,[s(y,{flat:``,dense:``,size:`sm`,"no-caps":``,icon:X.value?`autorenew`:`sync_disabled`,color:X.value?`amber-4`:`grey-5`,label:e.$t(`autoLoop.startInMode`),class:`skip-setup-btn`,onClick:i[12]||=e=>X.value=!X.value},{default:n(()=>[s(C,null,{default:n(()=>[f(a(e.$t(`autoLoop.startInMode`)),1)]),_:1})]),_:1},8,[`icon`,`color`,`label`])]),h(`div`,Ct,[s(y,{flat:``,dense:``,size:`sm`,"no-caps":``,icon:R.value?`play_disabled`:`play_circle`,color:R.value?`orange-4`:`grey-5`,label:e.$t(`createPage.skipSetupScript`),class:`skip-setup-btn`,onClick:i[13]||=e=>R.value=!R.value},{default:n(()=>[s(C,null,{default:n(()=>[f(a(e.$t(`createPage.skipSetupScript`)),1)]),_:1})]),_:1},8,[`icon`,`color`,`label`])]),h(`div`,wt,[s(y,{flat:``,dense:``,size:`sm`,"no-caps":``,icon:`folder_open`,color:Q.value?`cyan-4`:`grey-5`,label:Q.value?e.$t(`createPage.attachWorktreeEnabled`):e.$t(`createPage.attachWorktreeToggle`),class:`skip-setup-btn`,onClick:Rn},null,8,[`color`,`label`])])]),h(`div`,Tt,[h(`div`,Et,[s(w,{modelValue:F.value,"onUpdate:modelValue":i[14]||=e=>F.value=e,options:It.value,dense:``,borderless:``,"use-input":``,"fill-input":``,"hide-selected":``,"input-debounce":`0`,"new-value-mode":`add`,class:`bottom-select rounded-borders repo-select`,"hide-dropdown-icon":``,"input-class":F.value?``:`repo-input-empty`,placeholder:e.$t(`createPage.projectPath`),behavior:c(E).projectPaths.length>0?`menu`:`dialog`,onFilter:Hn,onInputValue:i[15]||=e=>{F.value=e}},{prepend:n(()=>[s(_,{name:`folder`,size:`14px`,color:`grey-5`})]),"no-option":n(()=>[s(x,null,{default:n(()=>[s(ge,{class:`text-grey-6 text-caption`},{default:n(()=>[f(a(e.$t(`createPage.enterPath`)),1)]),_:1})]),_:1})]),_:1},8,[`modelValue`,`options`,`input-class`,`placeholder`,`behavior`])]),Q.value?d(``,!0):(r(),m(`div`,Dt,[s(w,{modelValue:L.value,"onUpdate:modelValue":i[16]||=e=>L.value=e,options:Jt.value,"emit-value":``,"map-options":``,dense:``,borderless:``,class:`bottom-select rounded-borders branch-type-select`,"hide-dropdown-icon":``},{selected:n(()=>[h(`span`,Ot,[s(_,{name:`account_tree`,size:`12px`,color:`grey-5`,class:`q-mr-xs`}),f(` `+a(L.value)+`/ `,1),s(_,{name:`expand_more`,size:`12px`,color:`grey-5`})])]),default:n(()=>[s(C,null,{default:n(()=>[f(a(e.$t(`createPage.branchType`)),1)]),_:1})]),_:1},8,[`modelValue`,`options`])])),Q.value?(r(),m(`div`,kt,[s(w,{modelValue:$.value,"onUpdate:modelValue":i[17]||=e=>$.value=e,options:Fn.value,"option-label":`branch`,"option-value":`path`,"emit-value":``,"map-options":``,"use-input":``,dense:``,borderless:``,class:`bottom-select rounded-borders worktree-select`,"hide-dropdown-icon":``,loading:In.value,disable:!F.value.trim()||In.value},{selected:n(()=>[h(`span`,At,[s(_,{name:`folder_open`,size:`12px`,color:`cyan-5`,class:`q-mr-xs`}),f(` `+a($.value?Fn.value.find(e=>e.path===$.value)?.branch??$.value:e.$t(`createPage.worktreePickerLabel`))+` `,1),s(_,{name:`expand_more`,size:`12px`,color:`grey-5`})])]),option:n(e=>[s(x,re(ne(e.itemProps)),{default:n(()=>[s(ge,null,{default:n(()=>[s(S,null,{default:n(()=>[f(a(e.opt.branch),1)]),_:2},1024),s(S,{caption:``},{default:n(()=>[f(a(e.opt.path),1)]),_:2},1024)]),_:2},1024)]),_:2},1040)]),"no-option":n(()=>[s(x,null,{default:n(()=>[s(ge,{class:`text-grey-6 text-caption`},{default:n(()=>[f(a(F.value.trim()?e.$t(`createPage.noOrphanWorktrees`):e.$t(`createPage.enterPath`)),1)]),_:1})]),_:1})]),_:1},8,[`modelValue`,`options`,`loading`,`disable`])])):d(``,!0),h(`div`,jt,[s(w,{modelValue:I.value,"onUpdate:modelValue":i[18]||=e=>I.value=e,options:$t.value,dense:``,borderless:``,class:`bottom-select rounded-borders branch-select`,"hide-dropdown-icon":``,"use-input":``,"input-debounce":`0`,loading:en.value,disable:!F.value.trim()||en.value,onFilter:nn},{selected:n(()=>[h(`span`,Mt,[s(_,{name:`call_split`,size:`12px`,color:`grey-5`,class:`q-mr-xs`}),f(` `+a(I.value??e.$t(`createPage.branch`))+` `,1),s(_,{name:`expand_more`,size:`12px`,color:`grey-5`})])]),"no-option":n(()=>[s(x,null,{default:n(()=>[s(ge,{class:`text-grey-6 text-caption`},{default:n(()=>[f(a(F.value.trim()?e.$t(`createPage.noBranches`):e.$t(`createPage.enterPath`)),1)]),_:1})]),_:1})]),_:1},8,[`modelValue`,`options`,`loading`,`disable`])])])]),h(`div`,Nt,[s(y,{label:e.$t(`createPage.create`),"no-caps":``,unelevated:``,class:`create-btn text-weight-bold rounded-borders`,loading:tn.value,disable:tn.value||Q.value&&!$.value,onClick:qn},null,8,[`label`,`loading`,`disable`])])]),h(`div`,Pt,a(M.value?e.$t(`createPage.notionExtractHint`):e.$t(`createPage.notionImportHint`)),1)])]),_:1}))}}),[[`__scopeId`,`data-v-936cae0f`]]);export{D as default};
|
|
1
|
+
import{D as e,E as t,G as n,I as r,N as i,P as ee,R as te,S as ne,St as a,W as o,_ as s,at as c,bt as re,d as l,et as u,f as d,g as f,l as p,p as m,r as ie,u as h,y as ae,yt as oe}from"./runtime-core.esm-bundler-D_RRiKBh.js";import{H as se,R as ce,U as g,t as _}from"./QIcon-BmEX2rXO.js";import{r as v}from"./use-id-BCnfiBjU.js";import{s as le}from"./notifications-l1Pxijve.js";import{t as y}from"./QBtn-CoU-UC_j.js";import{n as ue}from"./vue-i18n-Cq-KgjJC.js";import{t as b}from"./QInput-D0t39uK_.js";import{c as de,g as fe,i as pe,o as me}from"./index-D4b3k9DV.js";import{t as he}from"./QSpinnerDots-DspFKwCZ.js";import{n as x,t as ge}from"./QItemSection-DRg-QuAD.js";import{t as S}from"./QItemLabel-Btqw0P7M.js";import{t as C}from"./QTooltip-CwBZU_bs.js";import{t as _e}from"./QExpansionItem-CiBP4NiY.js";import{t as ve}from"./_plugin-vue_export-helper-r4mAJOHR.js";import{t as ye}from"./QSpace-Crcx82On.js";import{t as be}from"./use-quasar-q6dh7QVJ.js";import{t as xe}from"./QPage-3-ah4oor.js";import{a as w,i as Se,r as Ce,t as we}from"./permissionModes-cbEFVOC0.js";import{a as Te,i as Ee,n as De,r as Oe,t as ke}from"./expand-template-Cvhhn0Oi.js";var T=`kobo:create-page-prefs`;function Ae(){try{let e=localStorage.getItem(T);return e===null?void 0:JSON.parse(e)}catch{return}}function E(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function je(){let e=Ae();if(!E(e))return{};let t={};return typeof e.projectPath==`string`&&e.projectPath.length>0&&(t.projectPath=e.projectPath),typeof e.autoLoop==`boolean`&&(t.autoLoop=e.autoLoop),t}function Me(e){try{localStorage.setItem(T,JSON.stringify(e))}catch{}}var Ne={class:`create-inner`},Pe={class:`create-title text-center text-weight-bold q-mb-lg text-grey-3`},Fe={class:`create-card rounded-borders`},Ie={class:`card-top-bar row items-center q-px-md q-py-xs`},Le={class:`model-badge cursor-default row items-center q-gutter-xs`},Re={class:`text-indigo-3 text-weight-medium text-caption`},ze={key:0,class:`notion-url-wrap`},Be={key:0,class:`notion-error text-caption q-px-md q-pb-xs text-red-5`},Ve={key:1,class:`notion-valid text-caption q-px-md q-pb-xs text-green-4`},He={key:2,class:`notion-peek-choice q-px-md q-pb-sm`},Ue={class:`text-caption text-grey-4 q-mb-sm`},We={class:`row q-gutter-sm`},Ge={class:`peek-card-text`},Ke={class:`peek-card-title`},qe={class:`peek-card-desc`},Je={class:`peek-card-text`},Ye={class:`peek-card-title`},Xe={class:`peek-card-desc`},Ze={key:0,class:`sentry-url-wrap`},Qe={key:0,class:`sentry-error text-caption q-px-md q-pb-xs text-red-5`},$e={key:1,class:`sentry-valid text-caption q-px-md q-pb-xs text-red-4`},et={class:`card-name-wrap`},tt={class:`card-textarea-wrap`},nt={class:`row items-center justify-end q-px-sm q-pb-xs q-gutter-sm`},rt={key:0,class:`row items-center text-caption text-amber-6`},it={class:`manual-hint q-px-md q-py-sm text-caption text-grey-6`},at={class:`q-pa-sm manual-section-body`},ot={class:`row items-center q-gutter-sm q-mb-sm`},st={class:`col text-caption text-grey-4`},ct={class:`q-pa-sm manual-section-body`},lt={class:`row items-center q-gutter-sm q-mb-sm`},ut={class:`col text-caption text-grey-4`},dt={class:`card-bottom-bar`},ft={class:`row q-col-gutter-xs q-px-xs`},pt={key:0,class:`col-12 col-sm-6 col-md-3`},mt={class:`bottom-select-label row items-center no-wrap`},ht={class:`col-12 col-sm-6 col-md-3`},gt={class:`bottom-select-label row items-center no-wrap`},_t={class:`col-12 col-sm-6 col-md-3`},vt={class:`bottom-select-label row items-center no-wrap`},yt={class:`col-12 col-md-3`},bt={class:`bottom-select-label row items-center no-wrap`},xt={class:`row q-col-gutter-xs q-pa-xs col-12 items-center justify-center`},St={class:`col-12 col-md-auto`},Ct={class:`col-12 col-md-auto`},wt={class:`col-12 col-md-auto`},Tt={class:`row q-col-gutter-xs q-px-xs bottom-row-git`},Et={class:`col-12 col-md-4`},Dt={key:0,class:`col-12 col-md-4`},Ot={class:`bottom-select-label row items-center no-wrap`},kt={key:1,class:`col-12 col-md-4`},At={class:`bottom-select-label row items-center no-wrap`},jt={class:`col-12 col-md-4`},Mt={class:`bottom-select-label row items-center no-wrap`},Nt={class:`row justify-center q-px-sm q-py-sm`},Pt={class:`create-hint text-center text-body2 q-mt-md text-grey-8`},Ft=6e4,D=ve(ae({__name:`CreatePage`,setup(ae){let ve=pe(),T=be(),Ae=de(),E=le(),{t:D}=ue(),It=u([]),Lt=u(``),O=u(``),Rt=u(null),zt=u(``),k=u(!1),A=u(!1),Bt=u(null),Vt=u(null),Ht=u([]),Ut=u(null),j=u(``),M=u(!1),N=u(`claude-opus-4-8`),P=u(`auto`),F=u(``),I=u(null),L=u(`feature`),R=u(!1),Wt=p(()=>E.global.voiceEnabled),Gt=u([]),z=u(`claude-code`),Kt=p(()=>Gt.value.find(e=>e.id===z.value)),qt=p(()=>Gt.value.map(e=>({value:e.id,label:e.displayName}))),Jt=p(()=>E.global.branchPrefixes.map(e=>({label:`${e}/`,value:e}))),Yt=[`plan`,`bypass`,`strict`,`interactive`];function Xt(e,t){let n=e?E.getProjectByPath(e):void 0,r=n?.agentPermissionMode;if(typeof r==`string`&&Yt.includes(r))return r;let i=E.global.defaultPermissionModeByEngine?.[t];return typeof i==`string`&&Yt.includes(i)?i:n?.dangerouslySkipPermissions??E.global.dangerouslySkipPermissions??!0?`bypass`:t===`codex`?`plan`:`interactive`}let B=u(Xt(``,z.value)),Zt=p(()=>{switch(B.value){case`plan`:return`visibility`;case`bypass`:return`flash_on`;case`strict`:return`lock`;case`interactive`:return`security`}}),Qt=p(()=>(we[z.value]??Yt).map(e=>({value:e,label:D(`agentPermissionMode.${e}`),disabled:e===`plan`&&X.value}))),V=u([]),$t=u([]),en=u(!1),tn=u(!1);function nn(e,t){t(()=>{$t.value=e?V.value.filter(t=>t.toLowerCase().includes(e.toLowerCase())):V.value})}let rn=fe();function an(){return Rt.value?.nativeEl??null}let{showSkills:on,selectedSkillIndex:H,groupedDropdown:sn,flatDropdown:U,fetchSkills:cn,detectSlashFragment:ln,replaceFragmentWith:un,closeDropdown:dn}=Ee(O,an,{excludeKoboCommands:!0});cn(),o(O,async()=>{await e(),await ln()});function fn(e){if(e.type===`template`){let t=rn.templates.find(t=>t.slug===e.name);if(!t)return;un(De(t.content,ke({workspace:null,gitStats:null,sessionName:null}))),dn();return}un(`/${e.name} `),dn()}function pn(e){!on.value||U.value.length===0||(e.key===`ArrowDown`?(e.preventDefault(),H.value=(H.value+1)%U.value.length):e.key===`ArrowUp`?(e.preventDefault(),H.value=(H.value-1+U.value.length)%U.value.length):e.key===`Enter`&&!e.shiftKey&&!e.ctrlKey&&!e.metaKey?(e.preventDefault(),fn(U.value[H.value])):e.key===`Escape`&&(e.preventDefault(),dn()))}async function mn(){if(!(!Wt.value||k.value||A.value)){if(!navigator.mediaDevices?.getUserMedia||typeof MediaRecorder>`u`){T.notify({type:`warning`,message:D(`voice.notSupported`),position:`top`,timeout:4e3});return}try{let e=await navigator.mediaDevices.getUserMedia({audio:!0});Vt.value=e,Ht.value=[];let t=MediaRecorder.isTypeSupported(`audio/webm`)?`audio/webm`:``,n=t?new MediaRecorder(e,{mimeType:t}):new MediaRecorder(e);n.ondataavailable=e=>{e.data&&e.data.size>0&&Ht.value.push(e.data)},n.start(),Bt.value=n,k.value=!0,Ut.value=setTimeout(()=>{W(),T.notify({type:`info`,message:D(`voice.maxDurationReached`),position:`top`,timeout:3500})},Ft)}catch{T.notify({type:`negative`,message:D(`voice.errorMicPermission`),position:`top`,timeout:5e3})}}}async function W(){if(!k.value)return;let e=Bt.value;if(!e)return;k.value=!1,A.value=!0,Ut.value&&=(clearTimeout(Ut.value),null);let t=await new Promise(t=>{e.onstop=()=>t(new Blob(Ht.value,{type:`audio/webm`})),e.stop()});try{if(t.size===0)throw Error(`MIC_AUDIO_INVALID`);let e=new FormData;e.append(`audio`,t,`voice.webm`),e.append(`language`,E.global.voiceLanguage||`auto`);let n=await fetch(`/api/voice/transcribe`,{method:`POST`,body:e});if(!n.ok){let e=await n.json().catch(()=>({}));throw Error(String(e.code??e.error??`HTTP_${n.status}`))}let r=await n.json();r.text?.trim()&&(O.value=O.value?`${O.value.trimEnd()} ${r.text.trim()}`:r.text.trim())}catch(e){let t=e instanceof Error?e.message:`TRANSCRIPTION_FAILED`;T.notify({type:`negative`,message:D({VOICE_DISABLED:`voice.errorDisabled`,MODEL_NOT_CONFIGURED:`voice.errorModelMissing`,MODEL_NOT_INSTALLED:`voice.errorModelNotInstalled`,VOICE_RUNTIME_MISSING:`voice.errorRuntimeMissing`,MIC_AUDIO_INVALID:`voice.errorAudioInvalid`,LANGUAGE_INVALID:`voice.errorLanguageInvalid`,TRANSCRIPTION_TIMEOUT:`voice.errorTranscription`}[t]??`voice.errorTranscription`),position:`top`,timeout:5e3})}finally{Bt.value=null,Ht.value=[],Vt.value?.getTracks().forEach(e=>{e.stop()}),Vt.value=null,A.value=!1}}function hn(e){return Wt.value?E.global.voicePttKey===`ctrl+space`?e.ctrlKey&&e.code===`Space`:e.key===`Alt`:!1}function gn(e){!hn(e)||e.repeat||(e.preventDefault(),mn())}function _n(e){hn(e)&&(e.preventDefault(),W())}function vn(){k.value&&W()}function yn(){document.visibilityState!==`visible`&&k.value&&W()}let bn=p(()=>(Se[z.value]??Ce).map(e=>({label:D(e.i18nLabelKey),value:e.value,description:D(e.i18nDescriptionKey)})));o(z,()=>{let e=bn.value.map(e=>e.value);if(e.length>0){let t=E.global.defaultModelByEngine?.[z.value];typeof t==`string`&&e.includes(t)?N.value=t:e.includes(N.value)||(N.value=e.includes(`auto`)?`auto`:e[0]??`auto`)}let t=we[z.value]??[];t.length>0&&!t.includes(B.value)&&(B.value=Xt(F.value,z.value));let n=(Oe[z.value]??[]).map(e=>e.value);n.length>0&&!n.includes(P.value)&&(P.value=n.includes(`auto`)?`auto`:n[0]??`auto`)});function xn(e){let t=e.indexOf(`:`);return t>=0?e.slice(t+1).trim():e}let Sn=p(()=>(Oe[z.value]??Oe[`claude-code`]).map(e=>({value:e.value,label:xn(D(e.i18nLabelKey)),description:D(e.i18nDescriptionKey)}))),G=p(()=>{let e=j.value.trim();return e.startsWith(`https://www.notion.so/`)||e.startsWith(`https://app.notion.com/`)}),Cn=p(()=>/[?&]p=[0-9a-f]{32}(?:[&#]|$)/i.test(j.value)),K=u(`panel`);function wn(){let e=j.value.trim();return K.value===`parent`&&Cn.value?e.replace(/([?&])p=[0-9a-f]{32}(?=[&#]|$)/i,`$1`).replace(/([?&])pm=[a-z]+(?=[&#]|$)/i,`$1`).replace(/[?&]+$/,``).replace(/\?&/,`?`):e}let q=u([]),J=u([]),Tn=u(``),En=u(``),Dn=p(()=>!M.value||!G.value);function On(){let e=Tn.value.trim();e&&(q.value.push(e),Tn.value=``)}function kn(e){q.value.splice(e,1)}function An(){let e=En.value.trim();e&&(J.value.push(e),En.value=``)}function jn(e){J.value.splice(e,1)}function Mn(){M.value=!M.value,M.value||(j.value=``)}let Y=u(!1),X=u(!1);o(()=>X.value,e=>{e&&B.value!==`bypass`&&(B.value=`bypass`,T.notify({type:`info`,message:D(`agentPermissionMode.autoLoopLocked`),timeout:4e3}))});let Z=u(``),Nn=p(()=>/\/issues\/\d+/.test(Z.value.trim()));function Pn(){Y.value=!Y.value,Y.value||(Z.value=``)}let Q=u(!1),$=u(null),Fn=u([]),In=u(!1);async function Ln(){if(!F.value.trim()){Fn.value=[];return}In.value=!0;try{Fn.value=await Ae.fetchOrphanWorktrees(F.value.trim())}catch{Fn.value=[]}finally{In.value=!1}}function Rn(){Q.value=!Q.value,Q.value?(M.value=!1,j.value=``,Y.value=!1,Z.value=``,R.value=!0,Ln()):$.value=null}o(F,()=>{$.value=null,Q.value&&Ln()}),o($,e=>{if(!e)return;let t=Fn.value.find(t=>t.path===e);t&&(I.value=t.suggestedSourceBranch),R.value=!0});async function zn(e){if(!e.trim()){V.value=[],I.value=null;return}en.value=!0;try{let t=await fetch(`/api/git/branches?path=${encodeURIComponent(e.trim())}`);if(!t.ok)throw Error(`HTTP ${t.status}`);let n=await t.json();V.value=n.local??n.branches??[],V.value.length>0&&!I.value&&(I.value=V.value[0]??null)}catch{V.value=[],I.value=null}finally{en.value=!1}}function Bn(e){let t=E.getProjectByPath(e);if(t){t.defaultSourceBranch&&(I.value=t.defaultSourceBranch);let e=t.taskPromptTemplate??``;(O.value===``||O.value===zt.value)&&(O.value=e,zt.value=e);let n=bn.value.map(e=>e.value);if(t.defaultModel&&n.includes(t.defaultModel))N.value=t.defaultModel;else{let e=E.global.defaultModelByEngine?.[z.value];typeof e==`string`&&n.includes(e)&&(N.value=e)}}B.value=Xt(e,z.value)}let Vn=null;o(F,e=>{Vn&&clearTimeout(Vn),Vn=setTimeout(()=>{I.value=null,zn(e),Bn(e)},500)});function Hn(e,t){t(()=>{It.value=E.projectPaths.filter(t=>t.toLowerCase().includes(e.toLowerCase()))})}i(async()=>{await E.fetchSettings();let e=E.global.branchPrefixes;e.length>0&&!e.includes(L.value)&&(L.value=e[0]);let t=je();t.autoLoop===!0&&(X.value=!0),t.projectPath&&E.projectPaths.includes(t.projectPath)&&(F.value=t.projectPath),B.value=Xt(F.value,z.value);try{let e=await fetch(`/api/engines`);e.ok&&(Gt.value=await e.json())}catch{}{let e=bn.value.map(e=>e.value),t=E.global.defaultModelByEngine?.[z.value];typeof t==`string`&&e.includes(t)?N.value=t:e.length>0&&!e.includes(N.value)&&(N.value=e.includes(`auto`)?`auto`:e[0]??`auto`)}window.addEventListener(`keydown`,gn),window.addEventListener(`keyup`,_n),window.addEventListener(`blur`,vn),document.addEventListener(`visibilitychange`,yn)}),ee(()=>{Vn&&clearTimeout(Vn),window.removeEventListener(`keydown`,gn),window.removeEventListener(`keyup`,_n),window.removeEventListener(`blur`,vn),document.removeEventListener(`visibilitychange`,yn),Ut.value&&=(clearTimeout(Ut.value),null),k.value&&W()});function Un(e){return e.normalize(`NFD`).replace(/[\u0300-\u036f]/g,``).toLowerCase().replace(/[^a-z0-9\s-]/g,``).trim().replace(/\s+/g,`-`).replace(/-+/g,`-`).substring(0,50)}function Wn(){return Lt.value.trim()?Lt.value.trim().substring(0,80):!M.value&&!Y.value&&O.value.trim()&&(O.value.trim().split(`
|
|
2
|
+
`)[0]??``).substring(0,80)||`workspace`}function Gn(e){let t=(e.split(`/`).pop()??``).split(`-`);t.length>1&&/^[0-9a-f]{12,}$/i.test(t[t.length-1])&&t.pop();let n=t.join(`-`).toLowerCase(),r=n.match(/tk-(\d+)/);if(r){let e=`TK-${r[1]}`,t=n.replace(/tk-\d+/i,``).replace(/-+/g,`-`).replace(/^-|-$/g,``).substring(0,40);return t?`${e}--${t}`:e}return n.substring(0,50)||`task-${Date.now()}`}function Kn(){return M.value&&!G.value?D(`createPage.validationNotionUrl`):Y.value&&!Nn.value?D(`createPage.sentryValidation`):!M.value&&!Y.value&&!O.value.trim()?D(`createPage.validationDescription`):!M.value&&!Y.value&&(!Wn()||Wn()===`workspace`)&&!Lt.value.trim()&&!O.value.trim()?D(`createPage.validationName`):F.value.trim()?I.value?null:D(`createPage.validationBranch`):D(`createPage.validationPath`)}async function qn(){let e=Kn();if(e){T.notify({type:`negative`,message:e,position:`top`});return}if(Q.value&&!$.value){T.notify({type:`negative`,message:D(`createPage.pickWorktreeRequired`),position:`top`});return}tn.value=!0;try{let e=Wn(),t;t=M.value&&G.value?Gn(wn()):e===`workspace`?`task-${Date.now()}`:Un(e);let n=`${L.value}/${t}`,r={name:e,projectPath:F.value.trim(),sourceBranch:I.value,...Q.value&&$.value?{worktreePath:$.value,skipSetupScript:!0}:{workingBranch:n},engine:z.value,model:N.value,reasoningEffort:P.value,...M.value&&G.value?{notionUrl:wn()}:{},...Y.value&&Nn.value?{sentryUrl:Z.value.trim()}:{},...Dn.value&&q.value.length>0?{tasks:q.value}:{},...Dn.value&&J.value.length>0?{acceptanceCriteria:J.value}:{},...R.value&&!Q.value?{skipSetupScript:!0}:{},...O.value.trim()?{description:O.value.trim()}:{},...X.value?{autoLoop:!0}:{},agentPermissionMode:X.value&&B.value===`plan`?`bypass`:B.value},i=await Ae.createWorkspace(r);i._branchAdjusted&&T.notify({type:`info`,message:D(`createPage.branchAdjusted`,{branch:i.workingBranch}),position:`top`,timeout:6e3}),Me({projectPath:F.value.trim(),autoLoop:X.value}),me().subscribe(i.id),Ae.selectWorkspace(i.id),ve.push({name:`workspace`,params:{id:i.id}})}catch{T.notify({type:`negative`,message:D(`createPage.errorCreating`),position:`top`})}finally{tn.value=!1}}return(e,i)=>(r(),l(xe,{class:`create-page flex flex-center column`},{default:n(()=>[h(`div`,Ne,[h(`div`,Pe,a(e.$t(`createPage.title`)),1),h(`div`,Fe,[h(`div`,Ie,[h(`span`,Le,[s(_,{name:`auto_awesome`,size:`14px`,color:`indigo-4`}),h(`span`,Re,a(Kt.value?.displayName??e.$t(`createPage.claudeCode`)),1)]),s(ye),s(y,{flat:``,dense:``,"no-caps":``,size:`sm`,color:M.value?`green-4`:`grey-5`,class:`notion-toggle-btn text-caption rounded-borders`,disable:Q.value,onClick:Mn},{default:n(()=>[s(_,{name:`description`,size:`14px`,class:`q-mr-xs`}),f(` `+a(M.value?e.$t(`createPage.notionEnabled`):e.$t(`createPage.importNotion`)),1)]),_:1},8,[`color`,`disable`]),s(y,{flat:``,dense:``,"no-caps":``,size:`sm`,color:Y.value?`red-4`:`grey-5`,class:`sentry-toggle-btn text-caption rounded-borders q-ml-sm`,disable:Q.value,onClick:Pn},{default:n(()=>[s(_,{name:`bug_report`,size:`14px`,class:`q-mr-xs`}),f(` `+a(Y.value?e.$t(`createPage.sentryEnabled`):e.$t(`createPage.importSentry`)),1)]),_:1},8,[`color`,`disable`])]),s(v,{color:`grey-9`}),s(ce,{name:`slide`},{default:n(()=>[M.value?(r(),m(`div`,ze,[s(b,{modelValue:j.value,"onUpdate:modelValue":i[0]||=e=>j.value=e,borderless:``,dense:``,placeholder:e.$t(`createPage.notionPlaceholder`),class:`notion-url-input`,"input-class":`notion-url-input-inner`},{prepend:n(()=>[s(_,{name:`link`,size:`16px`,color:G.value?`green-4`:`grey-6`},null,8,[`color`])]),_:1},8,[`modelValue`,`placeholder`]),j.value.trim()&&!G.value?(r(),m(`div`,Be,a(e.$t(`createPage.notionValidation`)),1)):d(``,!0),G.value?(r(),m(`div`,Ve,a(e.$t(`createPage.notionAutoExtract`)),1)):d(``,!0),G.value&&Cn.value?(r(),m(`div`,He,[h(`div`,Ue,[s(_,{name:`info`,size:`14px`,color:`indigo-4`,class:`q-mr-xs`}),f(` `+a(e.$t(`createPage.notionPanelChoiceLabel`)),1)]),h(`div`,We,[h(`button`,{type:`button`,class:oe([`peek-card col`,{"peek-card--active":K.value===`panel`}]),onClick:i[1]||=e=>K.value=`panel`},[s(_,{name:`article`,size:`22px`,class:`peek-card-icon`}),h(`div`,Ge,[h(`div`,Ke,a(e.$t(`createPage.notionPanelOption`)),1),h(`div`,qe,a(e.$t(`createPage.notionPanelOptionDesc`)),1)]),K.value===`panel`?(r(),l(_,{key:0,name:`check_circle`,size:`18px`,color:`indigo-4`,class:`peek-card-check`})):d(``,!0)],2),h(`button`,{type:`button`,class:oe([`peek-card col`,{"peek-card--active":K.value===`parent`}]),onClick:i[2]||=e=>K.value=`parent`},[s(_,{name:`folder_open`,size:`22px`,class:`peek-card-icon`}),h(`div`,Je,[h(`div`,Ye,a(e.$t(`createPage.notionParentOption`)),1),h(`div`,Xe,a(e.$t(`createPage.notionParentOptionDesc`)),1)]),K.value===`parent`?(r(),l(_,{key:0,name:`check_circle`,size:`18px`,color:`indigo-4`,class:`peek-card-check`})):d(``,!0)],2)])])):d(``,!0)])):d(``,!0)]),_:1}),M.value?(r(),l(v,{key:0,color:`grey-9`})):d(``,!0),s(ce,{name:`slide`},{default:n(()=>[Y.value?(r(),m(`div`,Ze,[s(b,{modelValue:Z.value,"onUpdate:modelValue":i[3]||=e=>Z.value=e,borderless:``,dense:``,placeholder:e.$t(`createPage.sentryPlaceholder`),class:`sentry-url-input`,"input-class":`sentry-url-input-inner`},{prepend:n(()=>[s(_,{name:`link`,size:`16px`,color:Nn.value?`red-4`:`grey-6`},null,8,[`color`])]),_:1},8,[`modelValue`,`placeholder`]),Z.value.trim()&&!Nn.value?(r(),m(`div`,Qe,a(e.$t(`createPage.sentryValidation`)),1)):d(``,!0),Nn.value?(r(),m(`div`,$e,a(e.$t(`createPage.sentryAutoExtract`)),1)):d(``,!0)])):d(``,!0)]),_:1}),Y.value?(r(),l(v,{key:1,color:`grey-9`})):d(``,!0),h(`div`,et,[s(b,{modelValue:Lt.value,"onUpdate:modelValue":i[4]||=e=>Lt.value=e,borderless:``,dense:``,placeholder:M.value&&G.value?e.$t(`createPage.workspaceName`):e.$t(`createPage.workspaceNamePlaceholder`),class:`name-input`,"input-class":`name-input-inner`},null,8,[`modelValue`,`placeholder`])]),s(v,{color:`grey-9`}),h(`div`,tt,[s(b,{ref_key:`descriptionRef`,ref:Rt,modelValue:O.value,"onUpdate:modelValue":i[5]||=e=>O.value=e,type:`textarea`,borderless:``,autogrow:``,rows:3,placeholder:M.value?e.$t(`createPage.instructions`):e.$t(`createPage.instructionsPlaceholder`),class:`create-textarea`,"input-class":`create-textarea-input`,onKeydown:[pn,se(g(qn,[`ctrl`]),[`enter`]),se(g(qn,[`meta`]),[`enter`])]},null,8,[`modelValue`,`placeholder`,`onKeydown`]),h(`div`,nt,[A.value?(r(),m(`div`,rt,[s(he,{size:`14px`,color:`amber-6`,class:`q-mr-xs`}),h(`span`,null,a(e.$t(`voice.transcribing`)),1)])):d(``,!0),s(y,{flat:``,dense:``,size:`sm`,icon:A.value?`hourglass_top`:k.value?`mic`:`mic_none`,color:k.value?`red-5`:A.value?`amber-6`:`grey-6`,disable:!Wt.value||A.value,class:oe({"voice-btn--recording":k.value}),onMousedown:g(mn,[`prevent`]),onMouseup:g(W,[`prevent`]),onMouseleave:g(W,[`prevent`]),onTouchstart:g(mn,[`prevent`]),onTouchend:g(W,[`prevent`])},{default:n(()=>[s(C,null,{default:n(()=>[f(a(A.value?e.$t(`voice.transcribing`):k.value?e.$t(`voice.recording`):e.$t(`voice.holdToTalk`)),1)]),_:1})]),_:1},8,[`icon`,`color`,`disable`,`class`])]),c(on)&&c(U).length>0?(r(),l(Te,{key:0,class:`create-slash-popup`,"grouped-dropdown":c(sn),"flat-dropdown":c(U),"selected-index":c(H),onSelect:fn},null,8,[`grouped-dropdown`,`flat-dropdown`,`selected-index`])):d(``,!0)]),s(v,{color:`grey-9`}),Dn.value?(r(),m(ie,{key:2},[h(`div`,it,a(e.$t(`createPage.manualHint`)),1),s(_e,{dark:``,dense:``,label:e.$t(`createPage.tasks`,{count:q.value.length}),"header-class":`text-grey-4 manual-expansion-header`,class:`manual-expansion q-mx-sm`},{default:n(()=>[h(`div`,at,[h(`div`,ot,[s(b,{modelValue:Tn.value,"onUpdate:modelValue":i[6]||=e=>Tn.value=e,dark:``,dense:``,borderless:``,placeholder:e.$t(`createPage.addTask`),class:`col manual-input`,"input-class":`manual-input-inner`,onKeydown:se(g(On,[`prevent`]),[`enter`])},null,8,[`modelValue`,`placeholder`,`onKeydown`]),s(y,{flat:``,dense:``,round:``,icon:`add`,color:`indigo-4`,disable:!Tn.value.trim(),onClick:On},{default:n(()=>[s(C,null,{default:n(()=>[f(a(e.$t(`tooltip.addTask`)),1)]),_:1})]),_:1},8,[`disable`])]),(r(!0),m(ie,null,te(q.value,(t,i)=>(r(),m(`div`,{key:`task-${i}`,class:`row items-center q-py-xs manual-item`},[h(`span`,st,a(t),1),s(y,{flat:``,dense:``,round:``,icon:`close`,size:`xs`,color:`grey-6`,onClick:e=>kn(i)},{default:n(()=>[s(C,null,{default:n(()=>[f(a(e.$t(`tooltip.removeTask`)),1)]),_:1})]),_:1},8,[`onClick`])]))),128))])]),_:1},8,[`label`]),s(_e,{dark:``,dense:``,label:e.$t(`createPage.acceptanceCriteria`,{count:J.value.length}),"header-class":`text-grey-4 manual-expansion-header`,class:`manual-expansion q-mx-sm q-mb-sm`},{default:n(()=>[h(`div`,ct,[h(`div`,lt,[s(b,{modelValue:En.value,"onUpdate:modelValue":i[7]||=e=>En.value=e,dark:``,dense:``,borderless:``,placeholder:e.$t(`createPage.addCriterion`),class:`col manual-input`,"input-class":`manual-input-inner`,onKeydown:se(g(An,[`prevent`]),[`enter`])},null,8,[`modelValue`,`placeholder`,`onKeydown`]),s(y,{flat:``,dense:``,round:``,icon:`add`,color:`indigo-4`,disable:!En.value.trim(),onClick:An},{default:n(()=>[s(C,null,{default:n(()=>[f(a(e.$t(`tooltip.addCriterion`)),1)]),_:1})]),_:1},8,[`disable`])]),(r(!0),m(ie,null,te(J.value,(t,i)=>(r(),m(`div`,{key:`crit-${i}`,class:`row items-center q-py-xs manual-item`},[h(`span`,ut,a(t),1),s(y,{flat:``,dense:``,round:``,icon:`close`,size:`xs`,color:`grey-6`,onClick:e=>jn(i)},{default:n(()=>[s(C,null,{default:n(()=>[f(a(e.$t(`tooltip.removeCriterion`)),1)]),_:1})]),_:1},8,[`onClick`])]))),128))])]),_:1},8,[`label`]),s(v,{color:`grey-9`})],64)):d(``,!0),h(`div`,dt,[h(`div`,ft,[qt.value.length>0?(r(),m(`div`,pt,[s(w,{modelValue:z.value,"onUpdate:modelValue":i[8]||=e=>z.value=e,options:qt.value,dense:``,borderless:``,class:`bottom-select rounded-borders`,"hide-dropdown-icon":``,"emit-value":``,"map-options":``,"option-value":`value`,"option-label":`label`},{selected:n(()=>[h(`span`,mt,[s(_,{name:`hub`,size:`12px`,color:`grey-5`,class:`q-mr-xs`}),f(` `+a(qt.value.find(e=>e.value===z.value)?.label??z.value)+` `,1),s(_,{name:`expand_more`,size:`12px`,color:`grey-5`})])]),default:n(()=>[s(C,null,{default:n(()=>[f(a(e.$t(`engine.select`)),1)]),_:1})]),_:1},8,[`modelValue`,`options`])])):d(``,!0),h(`div`,ht,[s(w,{modelValue:N.value,"onUpdate:modelValue":i[9]||=e=>N.value=e,options:bn.value,dense:``,borderless:``,class:`bottom-select rounded-borders model-select`,"hide-dropdown-icon":``,"emit-value":``,"map-options":``,"option-value":`value`,"option-label":`label`},{selected:n(()=>[h(`span`,gt,[f(a(bn.value.find(e=>e.value===N.value)?.label??N.value)+` `,1),s(_,{name:`expand_more`,size:`12px`,color:`grey-5`})])]),option:n(({opt:e,itemProps:r})=>[s(x,t(r,{class:`model-option`}),{default:n(()=>[s(ge,null,{default:n(()=>[s(S,{class:`text-white`},{default:n(()=>[f(a(e.label),1)]),_:2},1024),s(S,{caption:``,class:`text-grey-5`},{default:n(()=>[f(a(e.description),1)]),_:2},1024)]),_:2},1024)]),_:2},1040)]),_:1},8,[`modelValue`,`options`])]),h(`div`,_t,[s(w,{modelValue:P.value,"onUpdate:modelValue":i[10]||=e=>P.value=e,options:Sn.value,dense:``,borderless:``,class:`bottom-select rounded-borders`,"hide-dropdown-icon":``,"emit-value":``,"map-options":``,"option-value":`value`,"option-label":`label`},{selected:n(()=>[h(`span`,vt,[s(_,{name:`psychology`,size:`12px`,color:`grey-5`,class:`q-mr-xs`}),f(` `+a(Sn.value.find(e=>e.value===P.value)?.label??P.value)+` `,1),s(_,{name:`expand_more`,size:`12px`,color:`grey-5`})])]),option:n(({opt:e,itemProps:t})=>[s(x,re(ne(t)),{default:n(()=>[s(ge,null,{default:n(()=>[s(S,{class:`text-white`},{default:n(()=>[f(a(e.label),1)]),_:2},1024),s(S,{caption:``,class:`text-grey-5`},{default:n(()=>[f(a(e.description),1)]),_:2},1024)]),_:2},1024)]),_:2},1040)]),_:1},8,[`modelValue`,`options`])]),h(`div`,yt,[s(w,{modelValue:B.value,"onUpdate:modelValue":i[11]||=e=>B.value=e,options:Qt.value,disable:X.value,dense:``,borderless:``,class:`bottom-select rounded-borders`,"hide-dropdown-icon":``,"emit-value":``,"map-options":``,"option-value":`value`,"option-label":`label`,"option-disable":e=>e.disabled===!0},{selected:n(()=>[h(`span`,bt,[s(_,{name:Zt.value,size:`12px`,color:`amber-6`,class:`q-mr-xs`},null,8,[`name`]),f(` `+a(Qt.value.find(e=>e.value===B.value)?.label??B.value)+` `,1),X.value?d(``,!0):(r(),l(_,{key:0,name:`expand_more`,size:`12px`,color:`grey-5`}))])]),default:n(()=>[s(C,null,{default:n(()=>[f(a(X.value?e.$t(`agentPermissionMode.autoLoopLocked`):e.$t(`agentPermissionMode.tooltip`)),1)]),_:1})]),_:1},8,[`modelValue`,`options`,`disable`,`option-disable`])])]),h(`div`,xt,[h(`div`,St,[s(y,{flat:``,dense:``,size:`sm`,"no-caps":``,icon:X.value?`autorenew`:`sync_disabled`,color:X.value?`amber-4`:`grey-5`,label:e.$t(`autoLoop.startInMode`),class:`skip-setup-btn`,onClick:i[12]||=e=>X.value=!X.value},{default:n(()=>[s(C,null,{default:n(()=>[f(a(e.$t(`autoLoop.startInMode`)),1)]),_:1})]),_:1},8,[`icon`,`color`,`label`])]),h(`div`,Ct,[s(y,{flat:``,dense:``,size:`sm`,"no-caps":``,icon:R.value?`play_disabled`:`play_circle`,color:R.value?`orange-4`:`grey-5`,label:e.$t(`createPage.skipSetupScript`),class:`skip-setup-btn`,onClick:i[13]||=e=>R.value=!R.value},{default:n(()=>[s(C,null,{default:n(()=>[f(a(e.$t(`createPage.skipSetupScript`)),1)]),_:1})]),_:1},8,[`icon`,`color`,`label`])]),h(`div`,wt,[s(y,{flat:``,dense:``,size:`sm`,"no-caps":``,icon:`folder_open`,color:Q.value?`cyan-4`:`grey-5`,label:Q.value?e.$t(`createPage.attachWorktreeEnabled`):e.$t(`createPage.attachWorktreeToggle`),class:`skip-setup-btn`,onClick:Rn},null,8,[`color`,`label`])])]),h(`div`,Tt,[h(`div`,Et,[s(w,{modelValue:F.value,"onUpdate:modelValue":i[14]||=e=>F.value=e,options:It.value,dense:``,borderless:``,"use-input":``,"fill-input":``,"hide-selected":``,"input-debounce":`0`,"new-value-mode":`add`,class:`bottom-select rounded-borders repo-select`,"hide-dropdown-icon":``,"input-class":F.value?``:`repo-input-empty`,placeholder:e.$t(`createPage.projectPath`),behavior:c(E).projectPaths.length>0?`menu`:`dialog`,onFilter:Hn,onInputValue:i[15]||=e=>{F.value=e}},{prepend:n(()=>[s(_,{name:`folder`,size:`14px`,color:`grey-5`})]),"no-option":n(()=>[s(x,null,{default:n(()=>[s(ge,{class:`text-grey-6 text-caption`},{default:n(()=>[f(a(e.$t(`createPage.enterPath`)),1)]),_:1})]),_:1})]),_:1},8,[`modelValue`,`options`,`input-class`,`placeholder`,`behavior`])]),Q.value?d(``,!0):(r(),m(`div`,Dt,[s(w,{modelValue:L.value,"onUpdate:modelValue":i[16]||=e=>L.value=e,options:Jt.value,"emit-value":``,"map-options":``,dense:``,borderless:``,class:`bottom-select rounded-borders branch-type-select`,"hide-dropdown-icon":``},{selected:n(()=>[h(`span`,Ot,[s(_,{name:`account_tree`,size:`12px`,color:`grey-5`,class:`q-mr-xs`}),f(` `+a(L.value)+`/ `,1),s(_,{name:`expand_more`,size:`12px`,color:`grey-5`})])]),default:n(()=>[s(C,null,{default:n(()=>[f(a(e.$t(`createPage.branchType`)),1)]),_:1})]),_:1},8,[`modelValue`,`options`])])),Q.value?(r(),m(`div`,kt,[s(w,{modelValue:$.value,"onUpdate:modelValue":i[17]||=e=>$.value=e,options:Fn.value,"option-label":`branch`,"option-value":`path`,"emit-value":``,"map-options":``,"use-input":``,dense:``,borderless:``,class:`bottom-select rounded-borders worktree-select`,"hide-dropdown-icon":``,loading:In.value,disable:!F.value.trim()||In.value},{selected:n(()=>[h(`span`,At,[s(_,{name:`folder_open`,size:`12px`,color:`cyan-5`,class:`q-mr-xs`}),f(` `+a($.value?Fn.value.find(e=>e.path===$.value)?.branch??$.value:e.$t(`createPage.worktreePickerLabel`))+` `,1),s(_,{name:`expand_more`,size:`12px`,color:`grey-5`})])]),option:n(e=>[s(x,re(ne(e.itemProps)),{default:n(()=>[s(ge,null,{default:n(()=>[s(S,null,{default:n(()=>[f(a(e.opt.branch),1)]),_:2},1024),s(S,{caption:``},{default:n(()=>[f(a(e.opt.path),1)]),_:2},1024)]),_:2},1024)]),_:2},1040)]),"no-option":n(()=>[s(x,null,{default:n(()=>[s(ge,{class:`text-grey-6 text-caption`},{default:n(()=>[f(a(F.value.trim()?e.$t(`createPage.noOrphanWorktrees`):e.$t(`createPage.enterPath`)),1)]),_:1})]),_:1})]),_:1},8,[`modelValue`,`options`,`loading`,`disable`])])):d(``,!0),h(`div`,jt,[s(w,{modelValue:I.value,"onUpdate:modelValue":i[18]||=e=>I.value=e,options:$t.value,dense:``,borderless:``,class:`bottom-select rounded-borders branch-select`,"hide-dropdown-icon":``,"use-input":``,"input-debounce":`0`,loading:en.value,disable:!F.value.trim()||en.value,onFilter:nn},{selected:n(()=>[h(`span`,Mt,[s(_,{name:`call_split`,size:`12px`,color:`grey-5`,class:`q-mr-xs`}),f(` `+a(I.value??e.$t(`createPage.branch`))+` `,1),s(_,{name:`expand_more`,size:`12px`,color:`grey-5`})])]),"no-option":n(()=>[s(x,null,{default:n(()=>[s(ge,{class:`text-grey-6 text-caption`},{default:n(()=>[f(a(F.value.trim()?e.$t(`createPage.noBranches`):e.$t(`createPage.enterPath`)),1)]),_:1})]),_:1})]),_:1},8,[`modelValue`,`options`,`loading`,`disable`])])])]),h(`div`,Nt,[s(y,{label:e.$t(`createPage.create`),"no-caps":``,unelevated:``,class:`create-btn text-weight-bold rounded-borders`,loading:tn.value,disable:tn.value||Q.value&&!$.value,onClick:qn},null,8,[`label`,`loading`,`disable`])])]),h(`div`,Pt,a(M.value?e.$t(`createPage.notionExtractHint`):e.$t(`createPage.notionImportHint`)),1)])]),_:1}))}}),[[`__scopeId`,`data-v-515045d6`]]);export{D as default};
|