@loicngr/kobo 1.4.12 → 1.5.1
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/dist/server/routes/workspaces.js +41 -10
- package/dist/server/services/workspace-service.js +26 -1
- package/package.json +1 -1
- package/src/client/dist/spa/assets/ActivityFeed-CMlUg42q.js +10 -0
- package/src/client/dist/spa/assets/ActivityFeed-CfsKExt9.css +1 -0
- package/src/client/dist/spa/assets/CreatePage-BTFc1WXO.css +1 -0
- package/src/client/dist/spa/assets/CreatePage-CmoZpcGV.js +2 -0
- package/src/client/dist/spa/assets/{DiffViewer-eROI3K7I.js → DiffViewer-BiGsv9dO.js} +2 -2
- package/src/client/dist/spa/assets/{MainLayout-w7f2vykG.js → MainLayout-B9a2mmgw.js} +4 -4
- package/src/client/dist/spa/assets/{MainLayout-BKRJcjMN.css → MainLayout-TNUcP5Yq.css} +1 -1
- package/src/client/dist/spa/assets/{QExpansionItem-KaA2BBuV.js → QExpansionItem-K1q9P_EC.js} +1 -1
- package/src/client/dist/spa/assets/{QList-lLY9TMz0.js → QList-jw9RuMIz.js} +1 -1
- package/src/client/dist/spa/assets/{QMenu-IaCFq9U1.js → QMenu-_Z0TxAxE.js} +1 -1
- package/src/client/dist/spa/assets/{QPage-D5bnOxz0.js → QPage-rbGaJ2cR.js} +1 -1
- package/src/client/dist/spa/assets/{SettingsPage-tK2WhdGt.js → SettingsPage-BJN15q-J.js} +1 -1
- package/src/client/dist/spa/assets/WorkspacePage-BIYgMXby.css +1 -0
- package/src/client/dist/spa/assets/WorkspacePage-fFHT1mz2.js +4 -0
- package/src/client/dist/spa/assets/{cssMode-DxID_rwU.js → cssMode-D7f5NOFi.js} +1 -1
- package/src/client/dist/spa/assets/{editor.api-6HHa4uDw.js → editor.api-BEvyDmPD.js} +1 -1
- package/src/client/dist/spa/assets/{editor.main-BY_NEoTM.js → editor.main-C3fYYKpq.js} +3 -3
- package/src/client/dist/spa/assets/{freemarker2-ChUzpgbV.js → freemarker2-BTPOfUHU.js} +1 -1
- package/src/client/dist/spa/assets/{handlebars-BEqiXFje.js → handlebars-C-E8T8yz.js} +1 -1
- package/src/client/dist/spa/assets/{html-BMS_L0RV.js → html-BQVT0h1N.js} +1 -1
- package/src/client/dist/spa/assets/{htmlMode-C68CMSi2.js → htmlMode-rlGPBuXx.js} +1 -1
- package/src/client/dist/spa/assets/i18n-BMjw8DJ5.js +1 -0
- package/src/client/dist/spa/assets/i18n-D5LoHj4O.js +1 -0
- package/src/client/dist/spa/assets/index-wen3XwaX.js +5 -0
- package/src/client/dist/spa/assets/{javascript-BKkV2qqm.js → javascript-ixmyyZe4.js} +1 -1
- package/src/client/dist/spa/assets/{jsonMode-Bk1XwYG8.js → jsonMode-iSqte9q7.js} +1 -1
- package/src/client/dist/spa/assets/{liquid-QLO1u8by.js → liquid-BtIa2lKm.js} +1 -1
- package/src/client/dist/spa/assets/{marked.esm-CtWESN18.js → marked.esm-Cid1-PgZ.js} +1 -1
- package/src/client/dist/spa/assets/{mdx-Cgznl219.js → mdx-F0U_AQKl.js} +1 -1
- package/src/client/dist/spa/assets/{monaco.contribution-CDhgtrdW.js → monaco.contribution-CffkEucM.js} +2 -2
- package/src/client/dist/spa/assets/{python-DCFlVqvF.js → python-DULmhOm4.js} +1 -1
- package/src/client/dist/spa/assets/{razor-BHddvwQ2.js → razor-B383fmQ6.js} +1 -1
- package/src/client/dist/spa/assets/{tsMode-BZkc6l5_.js → tsMode-CRCGK1Fk.js} +1 -1
- package/src/client/dist/spa/assets/{typescript-B0g45tCE.js → typescript-GvsL7ngZ.js} +1 -1
- package/src/client/dist/spa/assets/{xml-CfmQqdO8.js → xml-Chm6YPh1.js} +1 -1
- package/src/client/dist/spa/assets/{yaml-B1F9_T4A.js → yaml-D_yl_W0w.js} +1 -1
- package/src/client/dist/spa/index.html +2 -2
- package/src/client/dist/spa/assets/ActivityFeed-CgZWB0-0.js +0 -10
- package/src/client/dist/spa/assets/ActivityFeed-ko_rO-2M.css +0 -1
- package/src/client/dist/spa/assets/CreatePage-DByy8YPu.css +0 -1
- package/src/client/dist/spa/assets/CreatePage-PV9pH1-i.js +0 -2
- package/src/client/dist/spa/assets/WorkspacePage-B7LByhzW.js +0 -4
- package/src/client/dist/spa/assets/WorkspacePage-XUHKUmuQ.css +0 -1
- package/src/client/dist/spa/assets/i18n-C9sStiuf.js +0 -1
- package/src/client/dist/spa/assets/i18n-DAQcMG9d.js +0 -1
- package/src/client/dist/spa/assets/index-DSx45TKH.js +0 -5
|
@@ -39,11 +39,13 @@ app.post('/', async (c) => {
|
|
|
39
39
|
}
|
|
40
40
|
// Create workspace record
|
|
41
41
|
const globalSettings = settingsService.getGlobalSettings();
|
|
42
|
+
// workingBranch may be updated after Notion extraction to inject the ticket ID
|
|
43
|
+
let workingBranch = body.workingBranch;
|
|
42
44
|
let workspace = workspaceService.createWorkspace({
|
|
43
45
|
name: body.name,
|
|
44
46
|
projectPath: body.projectPath,
|
|
45
47
|
sourceBranch: body.sourceBranch,
|
|
46
|
-
workingBranch
|
|
48
|
+
workingBranch,
|
|
47
49
|
notionUrl: body.notionUrl,
|
|
48
50
|
notionPageId: body.notionPageId,
|
|
49
51
|
model: body.model,
|
|
@@ -109,10 +111,34 @@ app.post('/', async (c) => {
|
|
|
109
111
|
}
|
|
110
112
|
}
|
|
111
113
|
}
|
|
114
|
+
// Inject ticket ID into the working branch.
|
|
115
|
+
// Works with or without Notion: ticket ID comes from Notion extraction first,
|
|
116
|
+
// then falls back to a TK-XXXX pattern anywhere in the workspace name.
|
|
117
|
+
// The worktree has not been created yet, so a DB update is sufficient.
|
|
118
|
+
{
|
|
119
|
+
const detectedTicketId = notionContent?.ticketId || workspace.name.match(/[A-Z]+-\d+/i)?.[0];
|
|
120
|
+
if (detectedTicketId && !workingBranch.toLowerCase().includes(detectedTicketId.toLowerCase())) {
|
|
121
|
+
const ticketPrefix = detectedTicketId.toUpperCase();
|
|
122
|
+
const slashIdx = workingBranch.indexOf('/');
|
|
123
|
+
const typePrefix = slashIdx >= 0 ? workingBranch.slice(0, slashIdx + 1) : 'feature/';
|
|
124
|
+
// Use Notion title or workspace name for the slug — both have proper accented
|
|
125
|
+
// characters that NFD normalization can transliterate (é→e, ç→c, etc.)
|
|
126
|
+
const titleSource = notionContent?.title || workspace.name;
|
|
127
|
+
const titleSlug = titleSource
|
|
128
|
+
.normalize('NFD')
|
|
129
|
+
.replace(/[\u0300-\u036f]/g, '')
|
|
130
|
+
.toLowerCase()
|
|
131
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
132
|
+
.replace(/^-|-$/g, '')
|
|
133
|
+
.substring(0, 50);
|
|
134
|
+
workingBranch = `${typePrefix}${ticketPrefix}--${titleSlug}`;
|
|
135
|
+
workspace = workspaceService.updateWorkingBranch(workspace.id, workingBranch);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
112
138
|
// Create git worktree for the working branch
|
|
113
139
|
let worktreePath;
|
|
114
140
|
try {
|
|
115
|
-
worktreePath = worktreeService.createWorktree(body.projectPath,
|
|
141
|
+
worktreePath = worktreeService.createWorktree(body.projectPath, workingBranch, body.sourceBranch);
|
|
116
142
|
}
|
|
117
143
|
catch (err) {
|
|
118
144
|
const message = err instanceof Error ? err.message : String(err);
|
|
@@ -172,7 +198,7 @@ app.post('/', async (c) => {
|
|
|
172
198
|
try {
|
|
173
199
|
const result = await runSetupScript(workspace.id, worktreePath, effectiveSettings.setupScript, {
|
|
174
200
|
workspaceName: workspace.name,
|
|
175
|
-
branchName:
|
|
201
|
+
branchName: workingBranch,
|
|
176
202
|
sourceBranch: body.sourceBranch,
|
|
177
203
|
projectPath: body.projectPath,
|
|
178
204
|
});
|
|
@@ -196,7 +222,7 @@ app.post('/', async (c) => {
|
|
|
196
222
|
fs.mkdirSync(thoughtsDir, { recursive: true });
|
|
197
223
|
// Derive filename from Notion ticket ID, or fallback to branch/name pattern
|
|
198
224
|
const notionTicketId = notionContent.ticketId;
|
|
199
|
-
const fallbackMatch = `${workspace.name} ${
|
|
225
|
+
const fallbackMatch = `${workspace.name} ${workingBranch}`.match(/TK-\d+/i);
|
|
200
226
|
const filename = notionTicketId
|
|
201
227
|
? `${notionTicketId.toUpperCase()}.md`
|
|
202
228
|
: fallbackMatch
|
|
@@ -252,7 +278,7 @@ app.post('/', async (c) => {
|
|
|
252
278
|
const criteria = allTasks.filter((t) => t.isAcceptanceCriterion);
|
|
253
279
|
let brainstormPrompt = `You are working on: ${workspace.name}\n`;
|
|
254
280
|
// Include ticket ID if found so the agent uses the correct reference
|
|
255
|
-
const ticketId = notionContent?.ticketId || `${workspace.name} ${
|
|
281
|
+
const ticketId = notionContent?.ticketId || `${workspace.name} ${workingBranch}`.match(/TK-\d+/i)?.[0];
|
|
256
282
|
if (ticketId) {
|
|
257
283
|
brainstormPrompt += `Ticket: ${ticketId.toUpperCase()}\n`;
|
|
258
284
|
}
|
|
@@ -262,7 +288,7 @@ app.post('/', async (c) => {
|
|
|
262
288
|
if (notionContent?.goal) {
|
|
263
289
|
brainstormPrompt += `\nGoal: ${notionContent.goal}\n`;
|
|
264
290
|
}
|
|
265
|
-
brainstormPrompt += `\nBranch: ${
|
|
291
|
+
brainstormPrompt += `\nBranch: ${workingBranch}\nSource branch: ${body.sourceBranch}\nIMPORTANT: When creating a pull request, always use --base ${body.sourceBranch} to target the correct source branch.\n`;
|
|
266
292
|
if (notionFilePath) {
|
|
267
293
|
brainstormPrompt += `\nNotion ticket: ${body.notionUrl}`;
|
|
268
294
|
brainstormPrompt += `\nLocal copy: ${notionFilePath}\n`;
|
|
@@ -624,7 +650,7 @@ app.get('/:id', (c) => {
|
|
|
624
650
|
return c.json({ error: message }, 500);
|
|
625
651
|
}
|
|
626
652
|
});
|
|
627
|
-
// PATCH /api/workspaces/:id — update workspace fields (status, model, permissionMode)
|
|
653
|
+
// PATCH /api/workspaces/:id — update workspace fields (status, model, permissionMode, name)
|
|
628
654
|
app.patch('/:id', async (c) => {
|
|
629
655
|
try {
|
|
630
656
|
const id = c.req.param('id');
|
|
@@ -647,8 +673,11 @@ app.patch('/:id', async (c) => {
|
|
|
647
673
|
if (body.status) {
|
|
648
674
|
updated = workspaceService.updateWorkspaceStatus(id, body.status);
|
|
649
675
|
}
|
|
650
|
-
if (
|
|
651
|
-
|
|
676
|
+
if (body.name !== undefined) {
|
|
677
|
+
updated = workspaceService.updateWorkspaceName(id, body.name);
|
|
678
|
+
}
|
|
679
|
+
if (!body.status && body.model === undefined && body.permissionMode === undefined && body.name === undefined) {
|
|
680
|
+
return c.json({ error: 'Missing field: status, model, permissionMode, or name' }, 400);
|
|
652
681
|
}
|
|
653
682
|
return c.json(updated);
|
|
654
683
|
}
|
|
@@ -657,7 +686,9 @@ app.patch('/:id', async (c) => {
|
|
|
657
686
|
if (message.includes('not found')) {
|
|
658
687
|
return c.json({ error: message }, 404);
|
|
659
688
|
}
|
|
660
|
-
if (message.includes('Invalid status transition')
|
|
689
|
+
if (message.includes('Invalid status transition') ||
|
|
690
|
+
message.includes('name cannot be empty') ||
|
|
691
|
+
message.includes('name cannot exceed')) {
|
|
661
692
|
return c.json({ error: message }, 400);
|
|
662
693
|
}
|
|
663
694
|
return c.json({ error: message }, 500);
|
|
@@ -91,11 +91,24 @@ export function updateWorkspaceStatus(id, status) {
|
|
|
91
91
|
db.prepare('UPDATE workspaces SET status = ?, updated_at = ? WHERE id = ?').run(status, now, id);
|
|
92
92
|
return getWorkspace(id);
|
|
93
93
|
}
|
|
94
|
+
const WORKSPACE_NAME_MAX_LENGTH = 200;
|
|
94
95
|
/** Update a workspace's display name. */
|
|
95
96
|
export function updateWorkspaceName(id, name) {
|
|
97
|
+
// Strip control characters (incl. newlines) and collapse whitespace
|
|
98
|
+
const noControl = Array.from(name, (c) => {
|
|
99
|
+
const code = c.charCodeAt(0);
|
|
100
|
+
return code < 32 || code === 127 ? ' ' : c;
|
|
101
|
+
}).join('');
|
|
102
|
+
const sanitized = noControl.replace(/\s+/g, ' ').trim();
|
|
103
|
+
if (!sanitized) {
|
|
104
|
+
throw new Error('Workspace name cannot be empty');
|
|
105
|
+
}
|
|
106
|
+
if (sanitized.length > WORKSPACE_NAME_MAX_LENGTH) {
|
|
107
|
+
throw new Error(`Workspace name cannot exceed ${WORKSPACE_NAME_MAX_LENGTH} characters`);
|
|
108
|
+
}
|
|
96
109
|
const db = getDb();
|
|
97
110
|
const now = new Date().toISOString();
|
|
98
|
-
const result = db.prepare('UPDATE workspaces SET name = ?, updated_at = ? WHERE id = ?').run(
|
|
111
|
+
const result = db.prepare('UPDATE workspaces SET name = ?, updated_at = ? WHERE id = ?').run(sanitized, now, id);
|
|
99
112
|
if (result.changes === 0) {
|
|
100
113
|
throw new Error(`Workspace '${id}' not found`);
|
|
101
114
|
}
|
|
@@ -111,6 +124,18 @@ export function updateWorkspaceModel(id, model) {
|
|
|
111
124
|
}
|
|
112
125
|
return getWorkspace(id);
|
|
113
126
|
}
|
|
127
|
+
/** Update the working branch for a workspace (e.g. after ticket ID injection). */
|
|
128
|
+
export function updateWorkingBranch(id, workingBranch) {
|
|
129
|
+
const db = getDb();
|
|
130
|
+
const now = new Date().toISOString();
|
|
131
|
+
const result = db
|
|
132
|
+
.prepare('UPDATE workspaces SET working_branch = ?, updated_at = ? WHERE id = ?')
|
|
133
|
+
.run(workingBranch, now, id);
|
|
134
|
+
if (result.changes === 0) {
|
|
135
|
+
throw new Error(`Workspace '${id}' not found`);
|
|
136
|
+
}
|
|
137
|
+
return getWorkspace(id);
|
|
138
|
+
}
|
|
114
139
|
/** Update the agent's permission mode (auto-accept vs plan/read-only). */
|
|
115
140
|
export function updateWorkspacePermissionMode(id, permissionMode) {
|
|
116
141
|
const db = getDb();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@loicngr/kobo",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.5.1",
|
|
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",
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import{E as e,F as t,H as n,L as r,M as i,N as a,Q as o,U as s,_ as c,_t as l,a as u,d,f,g as p,m,n as ee,p as h,rt as te,u as g,y as ne,yt as _}from"./vue-i18n-nv59vAyH.js";import{L as v,T as y,bt as re}from"./scroll-CWjBCoBR.js";import{E as ie,O as ae}from"./index-wen3XwaX.js";import{t as b}from"./QSpinnerDots-FJCnAvfw.js";import{n as x,p as S,t as C}from"./_plugin-vue_export-helper-fkfRoKj2.js";import{n as oe,t as se}from"./marked.esm-Cid1-PgZ.js";var ce={key:0,class:`af-empty column items-center justify-center text-center q-pa-xl`},le={class:`text-grey-6 q-mt-md text-body2`},ue={class:`text-grey-8 text-caption q-mt-xs`},de={key:1,class:`row justify-center q-my-sm`},fe=[`data-item-id`],pe={class:`af-tool row items-center q-gutter-xs`},me={class:`af-tool-label text-indigo-4`},he={class:`af-time`},ge={key:0,class:`text-grey-4 q-mb-xs`},_e={class:`af-ask-options-list q-mb-sm`},ve={class:`text-weight-bold text-grey-3`},ye={key:0},be={key:1,class:`af-ask-buttons q-gutter-xs`},xe={key:0,class:`q-mt-sm row justify-end`},Se=[`onClick`],Ce={class:`af-file-header row items-center no-wrap q-gutter-xs`},we={class:`af-file-path text-grey-4 ellipsis`},Te={class:`af-diff-stats`},Ee={key:0,class:`text-green-5`},De={key:1,class:`text-red-5 q-ml-xs`},Oe={class:`af-time`},ke={class:`af-diff-sign`},Ae={key:1,class:`af-diff-line af-diff-del`},je={key:0,class:`af-diff-line text-grey-7 text-italic`},Me=[`onClick`],Ne={class:`af-tool-label text-grey-7`},Pe={key:0,class:`af-tool-desc text-grey-8`},Fe={class:`af-time`},Ie={key:0,class:`af-tool-args q-mt-xs rounded-borders`},Le={class:`af-args-pre`},Re={class:`af-text-header row items-center q-mb-xs`},ze={class:`af-time`},Be=[`innerHTML`],Ve=[`onClick`],He={class:`af-system-content text-caption text-amber-6`},Ue={class:`af-time`},We={key:0,class:`af-system-details q-mt-xs rounded-borders`},Ge={class:`af-args-pre`},Ke={key:5,class:`row items-center`},qe={class:`af-error-content text-red-5`},Je={class:`af-time`},Ye={key:6,class:`row items-center`},Xe={class:`af-raw-content text-grey-7`},Ze={class:`af-time`},Qe={class:`scroll-buttons`},w=50,$e=50,T=C(ne({__name:`ActivityFeed`,setup(ne){function C(e){let t=se.parse(e,{async:!1,breaks:!0,gfm:!0});return oe.sanitize(t)}let{t:T}=ee(),E=ae(),et=ie(),D=o(null),O=o(!1),k=o(new Set),A=new Map;function j(e,t){return A.has(e)||A.set(e,Y(t)),A.get(e)}let M=new Map;function tt(e,t){return M.has(e)||M.set(e,C(t)),M.get(e)}let N=g(()=>{let e=E.activityFeed;for(let t=e.length-1;t>=0;t--){let n=e[t];if(n.meta?.sender===`user`)return null;if(n.type===`tool_use`&&n.content===`AskUserQuestion`)return n.id}return null}),P=o(new Map);function nt(e,t,n){P.value.has(e)||P.value.set(e,new Map);let r=P.value.get(e);r.get(t)===n?r.delete(t):r.set(t,n)}function F(e,t,n){return P.value.get(e)?.get(t)===n}function rt(e){let t=P.value.get(e);return!!t&&t.size>0}function it(e,t){let n=E.selectedWorkspaceId;if(!n)return;let r=P.value.get(e);if(!r||r.size===0)return;let i=[];for(let[e,n]of r.entries()){let r=t[e];if(!r)continue;let a=r.options[n];a&&i.push(`${r.question}: ${a.label}`)}i.length>0&&et.sendChatMessage(n,i.join(`
|
|
2
|
+
`))}let I=o(-1);function at(){let t=E.activityFeed,n=t.map((e,t)=>({item:e,idx:t})).filter(({item:e})=>e.meta?.sender===`user`);if(n.length===0)return;I.value<=0?I.value=n.length-1:I.value--;let r=n[I.value].idx,i=n[I.value].item.id,a=t.length-r;a>L.value&&(L.value=Math.min(a+10,t.length)),e(()=>{let e=D.value?.querySelector(`[data-item-id="${i}"]`);e&&e.scrollIntoView({behavior:`smooth`,block:`center`})})}n(()=>E.selectedWorkspaceId,()=>{I.value=-1,A.clear(),P.value.clear(),M.clear(),W.clear(),B=0,O.value=!1});let L=o(w),R=g(()=>{let e=E.activityFeed;return e.length<=L.value?e:e.slice(-L.value)});n(()=>E.selectedWorkspaceId,()=>{L.value=w}),n(R,e=>{let t=new Set(e.map(e=>e.id));for(let e of A.keys())t.has(e)||A.delete(e);for(let e of P.value.keys())t.has(e)||P.value.delete(e);for(let e of M.keys())t.has(e)||M.delete(e);for(let e of W.keys())t.has(e)||W.delete(e)},{flush:`post`});let z=o(!1),B=0;function V(){let t=D.value;if(t&&(t.scrollHeight-t.scrollTop-t.clientHeight<50?z.value=!1:t.scrollTop<B&&(z.value=!0),B=t.scrollTop,t.scrollTop<200&&!O.value)){let n=E.activityFeed.length;if(L.value<n){O.value=!0;let r=t.scrollHeight;L.value=Math.min(L.value+$e,n),e(()=>{D.value&&(D.value.scrollTop+=D.value.scrollHeight-r),O.value=!1})}else if(E.selectedWorkspaceId&&E.hasMoreEvents[E.selectedWorkspaceId]!==!1){O.value=!0;let n=t.scrollHeight;E.fetchOlderEvents(E.selectedWorkspaceId).then(t=>{t?(L.value=E.activityFeed.length,e(()=>{D.value&&(D.value.scrollTop+=D.value.scrollHeight-n),O.value=!1})):O.value=!1})}}}function H(){if(z.value)return;let e=D.value;e&&(e.scrollTop=e.scrollHeight)}function ot(){z.value=!1,L.value=w,e(()=>{let e=D.value;e&&(e.scrollTop=e.scrollHeight)})}n(()=>E.activityFeed.length,()=>{e(H)}),i(()=>{D.value?.addEventListener(`scroll`,V),e(H)}),a(()=>{D.value?.removeEventListener(`scroll`,V)});function U(e){return new Date(e).toLocaleTimeString(void 0,{hour:`2-digit`,minute:`2-digit`,second:`2-digit`})}function st(e,t){let n=e.split(`
|
|
3
|
+
`),r=t.split(`
|
|
4
|
+
`),i=n.length,a=r.length,o=Array.from({length:i+1},()=>Array(a+1).fill(0));for(let e=i-1;e>=0;e--)for(let t=a-1;t>=0;t--)n[e]===r[t]?o[e][t]=o[e+1][t+1]+1:o[e][t]=Math.max(o[e+1][t],o[e][t+1]);let s=[],c=0,l=0;for(;c<i&&l<a;)n[c]===r[l]?(s.push({type:`context`,content:n[c]}),c++,l++):o[c+1][l]>=o[c][l+1]?(s.push({type:`del`,content:n[c]}),c++):(s.push({type:`add`,content:r[l]}),l++);for(;c<i;)s.push({type:`del`,content:n[c++]});for(;l<a;)s.push({type:`add`,content:r[l++]});return s}let W=new Map;function ct(e,t,n){return W.has(e)||W.set(e,st(t,n)),W.get(e)}function G(e){if(e.type!==`tool_use`)return null;let t=e.meta?.input;if(e.content===`Edit`){if(!t?.file_path)return null;let e=t.file_path,n=t.old_string??``,r=t.new_string??``,i=n.split(`
|
|
5
|
+
`),a=r.split(`
|
|
6
|
+
`);return{toolName:`Edit`,filePath:e,oldString:n,newString:r,replaceAll:t.replace_all??!1,additions:a.length,deletions:i.length}}if(e.content===`Write`){if(!t?.file_path)return null;let e=t.file_path,n=t.content??``;return{toolName:`Write`,filePath:e,content:n,additions:n.split(`
|
|
7
|
+
`).length,deletions:0}}if(e.content===`Bash`){let e=(t?.command??``).match(/^\s*rm\s+(?:-[a-zA-Z]*\s+)*(.+)/);if(e)return{toolName:`Bash:rm`,filePath:e[1].trim().replace(/["']/g,``),additions:0,deletions:1}}return null}function K(e){let t=E.selectedWorkspace;if(t){let n=`${t.projectPath}/.worktrees/${t.workingBranch}/`;if(e.startsWith(n))return e.slice(n.length);if(e.startsWith(`${t.projectPath}/`))return e.slice(t.projectPath.length+1)}return e.startsWith(`/`)&&e.split(`/`).length>4?`…/${e.split(`/`).slice(-3).join(`/`)}`:e}function lt(e){return e.split(`/`).pop()??e}function q(e){let t=lt(e),n=t.lastIndexOf(`.`);return n>=0?t.substring(n+1):``}function ut(e){return{ts:`JS`,tsx:`TS`,js:`JS`,jsx:`JS`,vue:`VU`,py:`PY`,rs:`RS`,go:`GO`,java:`JA`,php:`PH`,css:`CS`,scss:`SC`,html:`HT`,md:`MD`,json:`JS`,sql:`SQ`,sh:`SH`,yaml:`YA`,yml:`YA`,toml:`TM`}[e.toLowerCase()]??e.substring(0,2).toUpperCase()}function dt(e){return{ts:`blue-5`,tsx:`blue-5`,js:`yellow-8`,jsx:`yellow-8`,vue:`green-5`,py:`blue-4`,rs:`orange-5`,go:`cyan-5`,java:`red-5`,php:`indigo-4`,css:`purple-4`,scss:`pink-4`,html:`orange-4`,md:`grey-5`,json:`yellow-6`}[e.toLowerCase()]??`grey-5`}function ft(e){let t=e.toLowerCase();return t.includes(`read`)||t.includes(`grep`)||t.includes(`glob`)?`search`:t.includes(`write`)||t.includes(`edit`)?`edit`:t.includes(`bash`)||t.includes(`terminal`)?`terminal`:t.includes(`agent`)||t.includes(`task`)?`smart_toy`:`build`}function pt(e){switch(e.type){case`text`:return e.meta?.sender===`system-prompt`?`af-item--prompt`:e.meta?.sender===`user`?`af-item--user`:`af-item--text`;case`system`:return`af-item--system`;case`error`:return`af-item--error`;case`tool_use`:return`af-item--tool`;case`raw`:return`af-item--raw`;default:return``}}function mt(e){switch(e.meta?.sender){case`system-prompt`:return T(`activityFeed.initialPrompt`);case`user`:return T(`activityFeed.you`);default:return T(`activityFeed.agent`)}}function ht(e){switch(e.meta?.sender){case`system-prompt`:return`text-indigo-4`;case`user`:return`text-green-4`;default:return`text-blue-4`}}function gt(e){if(e.content===`Skill`&&e.meta){let t=e.meta.input;if(t&&typeof t.skill==`string`)return`Skill — ${t.skill}`}return e.content}function J(e){if(!e.meta)return``;let t=e.meta.input;if(!t)return``;if(typeof t.description==`string`)return t.description;if(typeof t.file_path==`string`)return K(t.file_path);if(typeof t.pattern==`string`)return`${typeof t.path==`string`?`${K(t.path)}/`:``}${t.pattern}`;if(typeof t.path==`string`)return K(t.path);if(typeof t.command==`string`){let e=t.command;return e.length>80?`${e.slice(0,80)}…`:e}return``}function Y(e){if(e.type!==`tool_use`||e.content!==`AskUserQuestion`)return null;let t=e.meta?.input;return!t?.questions||!Array.isArray(t.questions)?null:t.questions.filter(e=>Array.isArray(e.options)&&e.options.length>0).map(e=>({question:e.question??``,options:e.options.map(e=>({label:e.label??``,description:e.description??``}))}))}function X(e){if(!e.meta)return!1;let t=e.meta;return t.input!==void 0&&t.input!==null}function Z(e){k.value.has(e)?k.value.delete(e):k.value.add(e)}function Q(e){return k.value.has(e)}function _t(e){if(!e.meta)return``;let t=e.meta;if(!t.input)return``;try{return JSON.stringify(t.input,null,2)}catch{return String(t.input)}}let vt=g(()=>E.activityFeed.some(e=>e.meta?.sender===`user`));function $(e){return e.type!==`system`||!e.meta?!1:Object.keys(e.meta).length>0}function yt(e){if(!e.meta)return``;try{return JSON.stringify(e.meta,null,2)}catch{return``}}return(e,n)=>(t(),m(`div`,{ref_key:`feedContainer`,ref:D,class:`activity-feed q-pa-sm`},[te(E).activityFeed.length===0?(t(),m(`div`,ce,[c(v,{name:`forum`,size:`48px`,color:`grey-8`}),d(`div`,le,_(e.$t(`activityFeed.empty`)),1),d(`div`,ue,_(e.$t(`activityFeed.emptyHint`)),1)])):h(``,!0),O.value?(t(),m(`div`,de,[c(b,{size:`24px`,color:`grey-6`})])):h(``,!0),(t(!0),m(u,null,r(R.value,i=>(t(),m(`div`,{key:i.id,"data-item-id":i.id,class:l([`af-item text-caption rounded-borders`,pt(i)])},[i.type===`tool_use`&&j(i.id,i)?(t(),m(u,{key:0},[d(`div`,pe,[c(v,{name:`help_outline`,size:`14px`,color:`indigo-4`}),d(`span`,me,_(e.$t(`activityFeed.question`)),1),c(S),d(`span`,he,_(U(i.timestamp)),1)]),(t(!0),m(u,null,r(j(i.id,i),(e,n)=>(t(),m(`div`,{key:n,class:`q-mt-sm`},[e.question?(t(),m(`div`,ge,_(e.question),1)):h(``,!0),d(`div`,_e,[(t(!0),m(u,null,r(e.options,(e,n)=>(t(),m(`div`,{key:n,class:`af-ask-option-item text-caption text-grey-5`},[d(`span`,ve,_(n+1)+`. `+_(e.label),1),e.description?(t(),m(`span`,ye,` — `+_(e.description),1)):h(``,!0)]))),128))]),i.id===N.value?(t(),m(`div`,be,[(t(!0),m(u,null,r(e.options,(e,r)=>(t(),f(y,{key:e.label,"no-caps":``,dense:``,outline:!F(i.id,n,r),unelevated:F(i.id,n,r),color:F(i.id,n,r)?`indigo-6`:`indigo-4`,"text-color":F(i.id,n,r)?`white`:void 0,class:`af-option-btn`,onClick:e=>nt(i.id,n,r)},{default:s(()=>[p(_(e.label),1)]),_:2},1032,[`outline`,`unelevated`,`color`,`text-color`,`onClick`]))),128))])):h(``,!0)]))),128)),i.id===N.value?(t(),m(`div`,xe,[c(y,{"no-caps":``,unelevated:``,dense:``,color:`indigo-6`,label:e.$t(`activityFeed.sendAnswers`),icon:`send`,disable:!rt(i.id),onClick:e=>it(i.id,j(i.id,i))},null,8,[`label`,`disable`,`onClick`])])):h(``,!0)],64)):i.type===`tool_use`&&G(i)?(t(),m(`div`,{key:1,class:`af-file-change cursor-pointer`,onClick:e=>Z(i.id)},[d(`div`,Ce,[d(`span`,{class:l([`af-lang-badge`,`text-${dt(q(G(i).filePath))}`])},_(ut(q(G(i).filePath))),3),d(`span`,we,_(K(G(i).filePath)),1),d(`span`,Te,[G(i).additions?(t(),m(`span`,Ee,`+`+_(G(i).additions),1)):h(``,!0),G(i).deletions?(t(),m(`span`,De,`-`+_(G(i).deletions),1)):h(``,!0)]),c(v,{name:Q(i.id)?`expand_less`:`expand_more`,size:`14px`,color:`grey-6`},null,8,[`name`]),c(S),d(`span`,Oe,_(U(i.timestamp)),1)]),Q(i.id)?(t(),m(`div`,{key:0,class:`af-diff-body q-mt-xs`,onClick:n[0]||=re(()=>{},[`stop`])},[G(i).toolName===`Edit`?(t(!0),m(u,{key:0},r(ct(i.id,G(i).oldString??``,G(i).newString??``),(e,n)=>(t(),m(`div`,{key:n,class:l([`af-diff-line`,{"af-diff-del":e.type===`del`,"af-diff-add":e.type===`add`,"af-diff-context":e.type===`context`}])},[d(`span`,ke,_(e.type===`del`?`-`:e.type===`add`?`+`:` `),1),p(_(e.content),1)],2))),128)):G(i).toolName===`Bash:rm`?(t(),m(`div`,Ae,[...n[1]||=[d(`span`,{class:`af-diff-sign`},`-`,-1),p(`File deleted`,-1)]])):(t(),m(u,{key:2},[(t(!0),m(u,null,r((G(i).content??``).split(`
|
|
8
|
+
`).slice(0,30),(e,r)=>(t(),m(`div`,{key:`w-${r}`,class:`af-diff-line af-diff-add`},[n[2]||=d(`span`,{class:`af-diff-sign`},`+`,-1),p(_(e),1)]))),128)),(G(i).content??``).split(`
|
|
9
|
+
`).length>30?(t(),m(`div`,je,`… `+_((G(i).content??``).split(`
|
|
10
|
+
`).length-30)+` more lines`,1)):h(``,!0)],64))])):h(``,!0)],8,Se)):i.type===`tool_use`?(t(),m(u,{key:2},[d(`div`,{class:l([`af-tool row items-center q-gutter-xs`,{"cursor-pointer":X(i)}]),onClick:e=>X(i)&&Z(i.id)},[c(v,{name:ft(i.content),size:`14px`,color:`grey-6`},null,8,[`name`]),d(`span`,Ne,_(gt(i)),1),J(i)?(t(),m(`span`,Pe,`— `+_(J(i)),1)):h(``,!0),X(i)?(t(),f(v,{key:1,name:Q(i.id)?`expand_less`:`expand_more`,size:`14px`,color:`grey-7`},null,8,[`name`])):h(``,!0),c(S),d(`span`,Fe,_(U(i.timestamp)),1)],10,Me),Q(i.id)?(t(),m(`div`,Ie,[d(`pre`,Le,_(_t(i)),1)])):h(``,!0)],64)):i.type===`text`?(t(),m(u,{key:3},[d(`div`,Re,[d(`span`,{class:l([`text-caption text-weight-bold`,ht(i)])},_(mt(i)),3),i.meta?.pending?(t(),f(b,{key:0,size:`14px`,color:`grey-5`,class:`q-ml-sm`})):h(``,!0),c(S),d(`span`,ze,_(U(i.timestamp)),1)]),d(`div`,{class:`af-text-content af-markdown`,innerHTML:tt(i.id,i.content)},null,8,Be)],64)):i.type===`system`?(t(),m(u,{key:4},[d(`div`,{class:l([`row items-center`,{"cursor-pointer":$(i)}]),onClick:e=>$(i)&&Z(i.id)},[c(v,{name:`info`,size:`14px`,color:`amber-6`,class:`q-mr-xs`}),d(`span`,He,_(i.content),1),$(i)?(t(),f(v,{key:0,name:Q(i.id)?`expand_less`:`expand_more`,size:`14px`,color:`amber-8`,class:`q-ml-xs`},null,8,[`name`])):h(``,!0),c(S),d(`span`,Ue,_(U(i.timestamp)),1)],10,Ve),Q(i.id)&&$(i)?(t(),m(`div`,We,[d(`pre`,Ge,_(yt(i)),1)])):h(``,!0)],64)):i.type===`error`?(t(),m(`div`,Ke,[c(v,{name:`error`,size:`14px`,color:`red-5`,class:`q-mr-xs`}),d(`span`,qe,_(i.content),1),c(S),d(`span`,Je,_(U(i.timestamp)),1)])):(t(),m(`div`,Ye,[d(`span`,Xe,_(i.content),1),c(S),d(`span`,Ze,_(U(i.timestamp)),1)]))],10,fe))),128)),d(`div`,Qe,[vt.value?(t(),f(y,{key:0,round:``,dense:``,size:`sm`,icon:`person_search`,color:`indigo-8`,class:`scroll-btn`,onClick:at},{default:s(()=>[c(x,null,{default:s(()=>[p(_(e.$t(`activityFeed.goToPrevious`)),1)]),_:1})]),_:1})):h(``,!0),z.value?(t(),f(y,{key:1,round:``,dense:``,size:`sm`,icon:`keyboard_double_arrow_down`,color:`indigo-8`,class:`scroll-btn`,onClick:ot},{default:s(()=>[c(x,null,{default:s(()=>[p(_(e.$t(`activityFeed.scrollToBottom`)),1)]),_:1})]),_:1})):h(``,!0)])],512))}}),[[`__scopeId`,`data-v-c5b7e063`]]);export{T as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.activity-feed[data-v-c5b7e063]{flex-direction:column;gap:4px;display:flex;position:relative;overflow:hidden auto}.af-item[data-v-c5b7e063]{word-break:break-word;overflow-wrap:break-word;flex-shrink:0;padding:6px 10px;overflow-x:hidden}.af-time[data-v-c5b7e063]{color:#555;flex-shrink:0;font-size:10px}.af-tool-label[data-v-c5b7e063]{font-family:Roboto Mono,monospace;font-size:11px}.af-tool-desc[data-v-c5b7e063]{text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}.af-ask-option-item[data-v-c5b7e063]{padding:2px 0}.af-tool-args[data-v-c5b7e063]{background-color:#ffffff0a;padding:6px 8px;overflow-x:auto}.af-args-pre[data-v-c5b7e063]{color:#888;white-space:pre-wrap;word-break:break-word;margin:0;font-family:Roboto Mono,monospace;font-size:10px}.af-file-change[data-v-c5b7e063]{background:#ffffff08;border:1px solid #ffffff0f;border-radius:6px;padding:6px 8px}.af-file-header[data-v-c5b7e063]{font-family:Roboto Mono,monospace;font-size:11px}.af-lang-badge[data-v-c5b7e063]{text-align:center;background:#ffffff0f;border-radius:3px;min-width:20px;padding:1px 4px;font-family:Roboto Mono,monospace;font-size:9px;font-weight:700}.af-file-path[data-v-c5b7e063]{max-width:70%;font-size:11px}.af-diff-stats[data-v-c5b7e063]{white-space:nowrap;font-family:Roboto Mono,monospace;font-size:10px}.af-diff-body[data-v-c5b7e063]{background:#0003;border-radius:4px;max-height:300px;padding:4px 0;overflow:auto}.af-diff-line[data-v-c5b7e063]{white-space:pre;min-width:-moz-fit-content;min-width:fit-content;padding:0 8px;font-family:Roboto Mono,monospace;font-size:10px;line-height:1.5}.af-diff-sign[data-v-c5b7e063]{-webkit-user-select:none;user-select:none;width:12px;display:inline-block}.af-diff-del[data-v-c5b7e063]{color:#f85149;background:#f851491a}.af-diff-add[data-v-c5b7e063]{color:#3fb950;background:#3fb9501a}.af-diff-context[data-v-c5b7e063]{color:#8b949e}.af-item--text[data-v-c5b7e063]{background-color:#1a2a3a;border-left:3px solid #3b82f6}.af-item--user[data-v-c5b7e063]{background-color:#1a2a1a;border-left:3px solid #22c55e}.af-item--prompt[data-v-c5b7e063]{background-color:#1a1a2e;border-left:3px solid #6c63ff}.af-text-content[data-v-c5b7e063]{color:#d0d0d0;word-break:break-word;line-height:1.5}.af-markdown[data-v-c5b7e063] p{margin:0 0 8px}.af-markdown[data-v-c5b7e063] p:last-child{margin-bottom:0}.af-markdown[data-v-c5b7e063] h1,.af-markdown[data-v-c5b7e063] h2,.af-markdown[data-v-c5b7e063] h3{color:#e0e0e0;margin:12px 0 6px}.af-markdown[data-v-c5b7e063] h1{font-size:16px}.af-markdown[data-v-c5b7e063] h2{font-size:14px}.af-markdown[data-v-c5b7e063] h3{font-size:13px}.af-markdown[data-v-c5b7e063] ul,.af-markdown[data-v-c5b7e063] ol{margin:4px 0;padding-left:20px}.af-markdown[data-v-c5b7e063] li{margin:2px 0}.af-markdown[data-v-c5b7e063] code{background-color:#ffffff14;border-radius:3px;padding:1px 4px;font-family:Roboto Mono,monospace;font-size:11px}.af-markdown[data-v-c5b7e063] pre{background-color:#0000004d;border-radius:4px;margin:6px 0;padding:8px;overflow-x:auto}.af-markdown[data-v-c5b7e063] pre code{background:0 0;padding:0}.af-markdown[data-v-c5b7e063] strong{color:#fff}.af-markdown[data-v-c5b7e063] a{color:#6c63ff}.af-markdown[data-v-c5b7e063] blockquote{color:#aaa;border-left:3px solid #6c63ff;margin:6px 0;padding:4px 12px}.af-markdown[data-v-c5b7e063] table{border-collapse:collapse;margin:6px 0;font-size:11px}.af-markdown[data-v-c5b7e063] table th,.af-markdown[data-v-c5b7e063] table td{border:1px solid #2a2a4a;padding:4px 8px}.af-markdown[data-v-c5b7e063] table th{background-color:#ffffff0d}.af-item--system[data-v-c5b7e063]{background-color:#2a2a1a;border-left:3px solid #f59e0b}.af-system-details[data-v-c5b7e063]{background-color:#ffffff0a;padding:6px 8px;overflow-x:auto}.af-system-content[data-v-c5b7e063]{white-space:pre-wrap}.af-item--error[data-v-c5b7e063]{background-color:#2a1a1a;border-left:3px solid #ef4444}.af-item--raw[data-v-c5b7e063]{white-space:pre-wrap;font-family:Roboto Mono,monospace}.scroll-buttons[data-v-c5b7e063]{align-self:flex-end;gap:6px;margin-right:8px;display:flex;position:sticky;bottom:8px}.scroll-btn[data-v-c5b7e063]{opacity:.7;transition:opacity .15s}.scroll-btn[data-v-c5b7e063]:hover{opacity:1}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.create-page[data-v-735ec1ab]{background-color:#1a1a2e;min-height:100%;padding:48px 24px}.create-inner[data-v-735ec1ab]{width:100%;max-width:700px}.create-title[data-v-735ec1ab]{font-size:24px;line-height:1.3}.create-card[data-v-735ec1ab]{background:#224;border:1px solid #444;overflow:hidden}.card-top-bar[data-v-735ec1ab]{background:#1e1e3a;min-height:36px}.card-name-wrap[data-v-735ec1ab]{background:#224;padding:8px 16px 4px}.card-name-wrap[data-v-735ec1ab] .q-field__control{height:32px;min-height:32px;padding:0}.card-name-wrap[data-v-735ec1ab] input{color:#e0e0e0;font-size:15px;font-weight:500}.card-name-wrap[data-v-735ec1ab] input::placeholder{color:#555}.card-textarea-wrap[data-v-735ec1ab]{background:#224}.repo-select[data-v-735ec1ab]{min-width:160px;max-width:260px}.repo-select[data-v-735ec1ab] .q-field__prepend{align-items:center;height:auto;padding-top:0}.create-textarea[data-v-735ec1ab]{color:#d0d0d0;width:100%;padding:12px 16px 4px}.create-textarea[data-v-735ec1ab] .q-field__control{padding:0}.create-textarea[data-v-735ec1ab] textarea{color:#d0d0d0;resize:none;min-height:100px;font-size:14px;line-height:1.6}.create-textarea[data-v-735ec1ab] textarea::placeholder{color:#666}.notion-toggle-btn[data-v-735ec1ab]{background:#333;padding:2px 10px}.notion-url-wrap[data-v-735ec1ab]{background:#1e1e3a;padding:8px 0 0}.notion-url-input[data-v-735ec1ab]{padding:0 12px}.notion-url-input[data-v-735ec1ab] .q-field__control{height:36px;min-height:36px;padding:0}.notion-url-input[data-v-735ec1ab] input{color:#d0d0d0;font-size:13px}.notion-url-input[data-v-735ec1ab] input::placeholder{color:#555;font-size:12px}.notion-error[data-v-735ec1ab],.notion-valid[data-v-735ec1ab]{padding-bottom:6px}.slide-enter-active[data-v-735ec1ab],.slide-leave-active[data-v-735ec1ab]{transition:all .2s;overflow:hidden}.slide-enter-from[data-v-735ec1ab],.slide-leave-to[data-v-735ec1ab]{opacity:0;max-height:0}.slide-enter-to[data-v-735ec1ab],.slide-leave-from[data-v-735ec1ab]{opacity:1;max-height:120px}.card-bottom-bar[data-v-735ec1ab]{background:#1e1e3a;min-height:40px}.bottom-select[data-v-735ec1ab]{background:#333;min-width:60px;height:28px;padding:0 6px}.bottom-select[data-v-735ec1ab] .q-field__control{height:28px;min-height:28px;padding:0}.bottom-select[data-v-735ec1ab] .q-field__native{min-height:unset;padding:0}.bottom-select-label[data-v-735ec1ab]{color:#bbb;gap:2px;font-size:11px}.bottom-sep[data-v-735ec1ab]{color:#555;padding:0 2px;font-size:12px;line-height:1}.repo-path-wrap[data-v-735ec1ab]{background:#333;border-radius:6px;height:28px;padding:0 8px}.repo-input[data-v-735ec1ab]{min-width:140px}.repo-input[data-v-735ec1ab] .q-field__control{height:28px;min-height:28px;padding:0}.repo-input[data-v-735ec1ab] input{color:#bbb;font-size:11px}.repo-input[data-v-735ec1ab] input::placeholder{color:#666;font-size:11px}.branch-select[data-v-735ec1ab]{min-width:80px}.create-btn[data-v-735ec1ab]{color:#fff;background:#4f46e5;height:28px;padding:0 14px;font-size:12px}.create-btn[data-v-735ec1ab] .q-btn__content{height:28px}.create-hint[data-v-735ec1ab]{line-height:1.5}.fade-enter-active[data-v-735ec1ab],.fade-leave-active[data-v-735ec1ab]{transition:opacity .2s}.fade-enter-from[data-v-735ec1ab],.fade-leave-to[data-v-735ec1ab]{opacity:0}.manual-hint[data-v-735ec1ab]{background:#1e1e3a;line-height:1.4}.manual-expansion[data-v-735ec1ab]{background:#1e1e3a;border:1px solid #333;border-radius:4px;margin-top:6px;overflow:hidden}.manual-expansion[data-v-735ec1ab] .manual-expansion-header{min-height:32px;padding:4px 10px;font-size:12px}.manual-expansion[data-v-735ec1ab] .q-expansion-item__content,.manual-section-body[data-v-735ec1ab]{background:#1a1a2e}.manual-input[data-v-735ec1ab] .q-field__control{height:26px;min-height:26px;padding:0}.manual-input[data-v-735ec1ab] input{color:#e0e0e0;font-size:12px}.manual-input[data-v-735ec1ab] input::placeholder{color:#555}.manual-item[data-v-735ec1ab]{border-top:1px solid #ffffff0a}.manual-item[data-v-735ec1ab]:first-child{border-top:none}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{F as e,H as t,L as n,M as r,N as i,Q as a,T as ee,U as o,_ as s,a as c,d as l,f as te,g as u,m as d,n as ne,p as f,rt as re,u as p,y as ie,yt as m}from"./vue-i18n-nv59vAyH.js";import{L as h,T as g,bt as _,ht as ae,yt as v}from"./scroll-CWjBCoBR.js";import{i as y}from"./private.use-form-1cZLVjGN.js";import{t as oe}from"./settings-CuK-S6HH.js";import{E as se,O as ce,r as b,w as le}from"./index-wen3XwaX.js";import{n as x,p as ue,t as S}from"./_plugin-vue_export-helper-fkfRoKj2.js";import{a as de,i as C,n as w,r as T}from"./QMenu-_Z0TxAxE.js";import{t as fe}from"./QExpansionItem-K1q9P_EC.js";import{n as E,t as pe}from"./QPage-rbGaJ2cR.js";var me={class:`create-inner`},he={class:`create-title text-center text-weight-bold q-mb-lg text-grey-3`},ge={class:`create-card rounded-borders`},_e={class:`card-top-bar row items-center q-px-md q-py-xs`},ve={class:`model-badge cursor-default row items-center q-gutter-xs`},ye={class:`text-indigo-3 text-weight-medium text-caption`},be={key:0,class:`notion-url-wrap`},xe={key:0,class:`notion-error text-caption q-px-md q-pb-xs text-red-5`},Se={key:1,class:`notion-valid text-caption q-px-md q-pb-xs text-green-4`},Ce={class:`card-name-wrap`},we={class:`card-textarea-wrap`},Te={class:`manual-hint q-px-md q-py-sm text-caption text-grey-6`},Ee={class:`q-pa-sm manual-section-body`},De={class:`row items-center q-gutter-sm q-mb-sm`},Oe={class:`col text-caption text-grey-4`},ke={class:`q-pa-sm manual-section-body`},Ae={class:`row items-center q-gutter-sm q-mb-sm`},je={class:`col text-caption text-grey-4`},Me={class:`card-bottom-bar row items-center wrap q-px-sm q-py-xs q-gutter-xs`},Ne={class:`bottom-select-label row items-center no-wrap`},Pe={class:`bottom-select-label row items-center no-wrap`},Fe={class:`bottom-select-label row items-center no-wrap`},Ie={class:`bottom-select-label row items-center no-wrap`},Le={class:`bottom-select-label row items-center no-wrap`},Re={class:`create-hint text-center text-body2 q-mt-md text-grey-8`},D=S(ie({__name:`CreatePage`,setup(ie){let S=le(),D=de(),O=ce(),k=oe(),{t:A}=ne(),ze=a([]),j=a(``),M=a(``),N=a(``),P=a(!1),F=a(`auto`),I=a(``),L=a(null),R=a(`feature`),z=a(!1),Be=[{label:`feature/`,value:`feature`},{label:`fix/`,value:`fix`},{label:`hotfix/`,value:`hotfix`},{label:`chore/`,value:`chore`},{label:`refactor/`,value:`refactor`},{label:`docs/`,value:`docs`},{label:`test/`,value:`test`}],B=a(k.global.defaultPermissionMode||`plan`),V=a([]),H=a(!1),U=a(!1),W=p(()=>[{label:A(`model.auto`),value:`auto`,description:`Claude picks the optimal model`},{label:A(`model.opus`),value:`claude-opus-4-6`,description:`Most powerful`},{label:A(`model.sonnet`),value:`claude-sonnet-4-6`,description:`Balanced`},{label:A(`model.haiku`),value:`claude-haiku-4-5-20251001`,description:`Fastest`}]),G=p(()=>N.value.trim().startsWith(`https://www.notion.so/`)),K=a([]),q=a([]),J=a(``),Y=a(``),X=p(()=>!P.value||!G.value);function Ve(){let e=J.value.trim();e&&(K.value.push(e),J.value=``)}function He(e){K.value.splice(e,1)}function Ue(){let e=Y.value.trim();e&&(q.value.push(e),Y.value=``)}function We(e){q.value.splice(e,1)}function Ge(){P.value=!P.value,P.value||(N.value=``)}async function Ke(e){if(!e.trim()){V.value=[],L.value=null;return}H.value=!0;try{let t=await fetch(`/api/git/branches?path=${encodeURIComponent(e.trim())}`);if(!t.ok)throw Error(`HTTP ${t.status}`);let n=await t.json();V.value=n.local??n.branches??[],V.value.length>0&&!L.value&&(L.value=V.value[0]??null)}catch{V.value=[],L.value=null}finally{H.value=!1}}function qe(e){let t=k.getProjectByPath(e);t&&(t.defaultSourceBranch&&(L.value=t.defaultSourceBranch),t.defaultModel?F.value=t.defaultModel:k.global.defaultModel&&(F.value=k.global.defaultModel))}let Z=null;t(I,e=>{Z&&clearTimeout(Z),Z=setTimeout(()=>{L.value=null,Ke(e),qe(e)},500)});function Je(e,t){t(()=>{ze.value=k.projectPaths.filter(t=>t.toLowerCase().includes(e.toLowerCase()))})}r(()=>{k.fetchSettings()}),i(()=>{Z&&clearTimeout(Z)});function Ye(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 Q(){return j.value.trim()?j.value.trim().substring(0,80):!P.value&&M.value.trim()&&(M.value.trim().split(`
|
|
2
|
+
`)[0]??``).substring(0,80)||`workspace`}function Xe(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 Ze(){return P.value&&!G.value?A(`createPage.validationNotionUrl`):!P.value&&!M.value.trim()?A(`createPage.validationDescription`):!P.value&&(!Q()||Q()===`workspace`)&&!j.value.trim()&&!M.value.trim()?A(`createPage.validationName`):I.value.trim()?L.value?null:A(`createPage.validationBranch`):A(`createPage.validationPath`)}async function $(){let e=Ze();if(e){D.notify({type:`negative`,message:e,position:`top`});return}U.value=!0;try{let e=Q(),t;t=P.value&&G.value?Xe(N.value.trim()):e===`workspace`?`task-${Date.now()}`:Ye(e);let n=`${R.value}/${t}`,r={name:e,projectPath:I.value.trim(),sourceBranch:L.value,workingBranch:n,model:F.value,...P.value&&G.value?{notionUrl:N.value.trim()}:{},...X.value&&K.value.length>0?{tasks:K.value}:{},...X.value&&q.value.length>0?{acceptanceCriteria:q.value}:{},...z.value?{skipSetupScript:!0}:{},...M.value.trim()?{description:M.value.trim()}:{},permissionMode:B.value},i=await O.createWorkspace(r);se().subscribe(i.id),O.selectWorkspace(i.id),S.push({name:`workspace`,params:{id:i.id}})}catch{D.notify({type:`negative`,message:A(`createPage.errorCreating`),position:`top`})}finally{U.value=!1}}return(t,r)=>(e(),te(pe,{class:`create-page flex flex-center column`},{default:o(()=>[l(`div`,me,[l(`div`,he,m(t.$t(`createPage.title`)),1),l(`div`,ge,[l(`div`,_e,[l(`span`,ve,[s(h,{name:`auto_awesome`,size:`14px`,color:`indigo-4`}),l(`span`,ye,m(t.$t(`createPage.claudeCode`)),1)]),s(ue),s(g,{flat:``,dense:``,"no-caps":``,size:`sm`,color:P.value?`green-4`:`grey-5`,class:`notion-toggle-btn text-caption rounded-borders`,onClick:Ge},{default:o(()=>[s(h,{name:`description`,size:`14px`,class:`q-mr-xs`}),u(` `+m(P.value?t.$t(`createPage.notionEnabled`):t.$t(`createPage.importNotion`)),1)]),_:1},8,[`color`])]),s(y,{color:`grey-9`}),s(ae,{name:`slide`},{default:o(()=>[P.value?(e(),d(`div`,be,[s(b,{modelValue:N.value,"onUpdate:modelValue":r[0]||=e=>N.value=e,borderless:``,dense:``,placeholder:t.$t(`createPage.notionPlaceholder`),class:`notion-url-input`,"input-class":`notion-url-input-inner`},{prepend:o(()=>[s(h,{name:`link`,size:`16px`,color:G.value?`green-4`:`grey-6`},null,8,[`color`])]),_:1},8,[`modelValue`,`placeholder`]),N.value.trim()&&!G.value?(e(),d(`div`,xe,m(t.$t(`createPage.notionValidation`)),1)):f(``,!0),G.value?(e(),d(`div`,Se,m(t.$t(`createPage.notionAutoExtract`)),1)):f(``,!0)])):f(``,!0)]),_:1}),P.value?(e(),te(y,{key:0,color:`grey-9`})):f(``,!0),l(`div`,Ce,[s(b,{modelValue:j.value,"onUpdate:modelValue":r[1]||=e=>j.value=e,borderless:``,dense:``,placeholder:P.value&&G.value?t.$t(`createPage.workspaceName`):t.$t(`createPage.workspaceNamePlaceholder`),class:`name-input`,"input-class":`name-input-inner`},null,8,[`modelValue`,`placeholder`])]),s(y,{color:`grey-9`}),l(`div`,we,[s(b,{modelValue:M.value,"onUpdate:modelValue":r[2]||=e=>M.value=e,type:`textarea`,borderless:``,autogrow:``,rows:3,placeholder:P.value?t.$t(`createPage.instructions`):t.$t(`createPage.instructionsPlaceholder`),class:`create-textarea`,"input-class":`create-textarea-input`,onKeydown:[v(_($,[`ctrl`]),[`enter`]),v(_($,[`meta`]),[`enter`])]},null,8,[`modelValue`,`placeholder`,`onKeydown`])]),s(y,{color:`grey-9`}),X.value?(e(),d(c,{key:1},[l(`div`,Te,m(t.$t(`createPage.manualHint`)),1),s(fe,{dark:``,dense:``,label:t.$t(`createPage.tasks`,{count:K.value.length}),"header-class":`text-grey-4 manual-expansion-header`,class:`manual-expansion q-mx-sm`},{default:o(()=>[l(`div`,Ee,[l(`div`,De,[s(b,{modelValue:J.value,"onUpdate:modelValue":r[3]||=e=>J.value=e,dark:``,dense:``,borderless:``,placeholder:t.$t(`createPage.addTask`),class:`col manual-input`,"input-class":`manual-input-inner`,onKeydown:v(_(Ve,[`prevent`]),[`enter`])},null,8,[`modelValue`,`placeholder`,`onKeydown`]),s(g,{flat:``,dense:``,round:``,icon:`add`,color:`indigo-4`,disable:!J.value.trim(),onClick:Ve},{default:o(()=>[s(x,null,{default:o(()=>[u(m(t.$t(`tooltip.addTask`)),1)]),_:1})]),_:1},8,[`disable`])]),(e(!0),d(c,null,n(K.value,(n,r)=>(e(),d(`div`,{key:`task-${r}`,class:`row items-center q-py-xs manual-item`},[l(`span`,Oe,m(n),1),s(g,{flat:``,dense:``,round:``,icon:`close`,size:`xs`,color:`grey-6`,onClick:e=>He(r)},{default:o(()=>[s(x,null,{default:o(()=>[u(m(t.$t(`tooltip.removeTask`)),1)]),_:1})]),_:1},8,[`onClick`])]))),128))])]),_:1},8,[`label`]),s(fe,{dark:``,dense:``,label:t.$t(`createPage.acceptanceCriteria`,{count:q.value.length}),"header-class":`text-grey-4 manual-expansion-header`,class:`manual-expansion q-mx-sm q-mb-sm`},{default:o(()=>[l(`div`,ke,[l(`div`,Ae,[s(b,{modelValue:Y.value,"onUpdate:modelValue":r[4]||=e=>Y.value=e,dark:``,dense:``,borderless:``,placeholder:t.$t(`createPage.addCriterion`),class:`col manual-input`,"input-class":`manual-input-inner`,onKeydown:v(_(Ue,[`prevent`]),[`enter`])},null,8,[`modelValue`,`placeholder`,`onKeydown`]),s(g,{flat:``,dense:``,round:``,icon:`add`,color:`indigo-4`,disable:!Y.value.trim(),onClick:Ue},{default:o(()=>[s(x,null,{default:o(()=>[u(m(t.$t(`tooltip.addCriterion`)),1)]),_:1})]),_:1},8,[`disable`])]),(e(!0),d(c,null,n(q.value,(n,r)=>(e(),d(`div`,{key:`crit-${r}`,class:`row items-center q-py-xs manual-item`},[l(`span`,je,m(n),1),s(g,{flat:``,dense:``,round:``,icon:`close`,size:`xs`,color:`grey-6`,onClick:e=>We(r)},{default:o(()=>[s(x,null,{default:o(()=>[u(m(t.$t(`tooltip.removeCriterion`)),1)]),_:1})]),_:1},8,[`onClick`])]))),128))])]),_:1},8,[`label`]),s(y,{color:`grey-9`})],64)):f(``,!0),l(`div`,Me,[s(E,{modelValue:F.value,"onUpdate:modelValue":r[5]||=e=>F.value=e,options:W.value,dense:``,borderless:``,class:`bottom-select rounded-borders model-select`,"hide-dropdown-icon":``,"emit-value":``,"map-options":``,"option-value":`value`,"option-label":`label`},{selected:o(()=>[l(`span`,Ne,[u(m(W.value.find(e=>e.value===F.value)?.label??F.value)+` `,1),s(h,{name:`expand_more`,size:`12px`,color:`grey-5`})])]),option:o(({opt:e,itemProps:t})=>[s(w,ee(t,{class:`model-option`}),{default:o(()=>[s(C,null,{default:o(()=>[s(T,{class:`text-white`},{default:o(()=>[u(m(e.label),1)]),_:2},1024),s(T,{caption:``,class:`text-grey-5`},{default:o(()=>[u(m(e.description),1)]),_:2},1024)]),_:2},1024)]),_:2},1040)]),_:1},8,[`modelValue`,`options`]),s(E,{modelValue:B.value,"onUpdate:modelValue":r[6]||=e=>B.value=e,options:[{label:t.$t(`permissionMode.plan`),value:`plan`},{label:t.$t(`permissionMode.autoAccept`),value:`auto-accept`}],dense:``,borderless:``,class:`bottom-select rounded-borders`,"hide-dropdown-icon":``,"emit-value":``,"map-options":``},{selected:o(()=>[l(`span`,Pe,[s(h,{name:B.value===`plan`?`visibility`:`flash_on`,size:`12px`,color:`amber-6`,class:`q-mr-xs`},null,8,[`name`]),u(` `+m(B.value===`plan`?t.$t(`permissionMode.plan`):t.$t(`permissionMode.autoAccept`))+` `,1),s(h,{name:`expand_more`,size:`12px`,color:`grey-5`})])]),_:1},8,[`modelValue`,`options`]),s(g,{flat:``,round:``,dense:``,size:`sm`,icon:z.value?`play_disabled`:`play_circle`,color:z.value?`orange-4`:`grey-6`,onClick:r[7]||=e=>z.value=!z.value},{default:o(()=>[s(x,null,{default:o(()=>[u(m(t.$t(`createPage.skipSetupScript`)),1)]),_:1})]),_:1},8,[`icon`,`color`]),s(ue),s(E,{modelValue:I.value,"onUpdate:modelValue":r[8]||=e=>I.value=e,options:ze.value,dense:``,borderless:``,"use-input":``,"hide-selected":``,"fill-input":``,"input-debounce":`0`,"new-value-mode":`add`,class:`bottom-select rounded-borders repo-select`,"hide-dropdown-icon":``,behavior:re(k).projectPaths.length>0?`menu`:`dialog`,onFilter:Je,onInputValue:r[9]||=e=>{I.value=e}},{prepend:o(()=>[s(h,{name:`attach_file`,size:`12px`,color:`grey-5`})]),selected:o(()=>[l(`span`,Fe,m(I.value||t.$t(`createPage.projectPath`)),1)]),"no-option":o(()=>[s(w,null,{default:o(()=>[s(C,{class:`text-grey-6 text-caption`},{default:o(()=>[u(m(t.$t(`createPage.enterPath`)),1)]),_:1})]),_:1})]),_:1},8,[`modelValue`,`options`,`behavior`]),s(E,{modelValue:R.value,"onUpdate:modelValue":r[10]||=e=>R.value=e,options:Be,"emit-value":``,"map-options":``,dense:``,borderless:``,class:`bottom-select rounded-borders branch-type-select`,"hide-dropdown-icon":``},{selected:o(()=>[l(`span`,Ie,[s(h,{name:`account_tree`,size:`12px`,color:`grey-5`,class:`q-mr-xs`}),u(` `+m(R.value)+`/ `,1),s(h,{name:`expand_more`,size:`12px`,color:`grey-5`})])]),default:o(()=>[s(x,null,{default:o(()=>[u(m(t.$t(`createPage.branchType`)),1)]),_:1})]),_:1},8,[`modelValue`]),s(E,{modelValue:L.value,"onUpdate:modelValue":r[11]||=e=>L.value=e,options:V.value,dense:``,borderless:``,class:`bottom-select rounded-borders branch-select`,"hide-dropdown-icon":``,loading:H.value,disable:!I.value.trim()||H.value},{selected:o(()=>[l(`span`,Le,[s(h,{name:`call_split`,size:`12px`,color:`grey-5`,class:`q-mr-xs`}),u(` `+m(L.value??t.$t(`createPage.branch`))+` `,1),s(h,{name:`expand_more`,size:`12px`,color:`grey-5`})])]),"no-option":o(()=>[s(w,null,{default:o(()=>[s(C,{class:`text-grey-6 text-caption`},{default:o(()=>[u(m(I.value.trim()?t.$t(`createPage.noBranches`):t.$t(`createPage.enterPath`)),1)]),_:1})]),_:1})]),_:1},8,[`modelValue`,`options`,`loading`,`disable`]),s(g,{label:t.$t(`createPage.create`),"no-caps":``,unelevated:``,class:`create-btn text-weight-bold rounded-borders`,loading:U.value,onClick:$},null,8,[`label`,`loading`])])]),l(`div`,Re,m(P.value?t.$t(`createPage.notionExtractHint`):t.$t(`createPage.notionImportHint`)),1)])]),_:1}))}}),[[`__scopeId`,`data-v-735ec1ab`]]);export{D as default};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/editor.main-
|
|
2
|
-
import{D as e,F as t,H as n,L as r,M as i,N as a,Q as o,S as s,U as c,W as l,_ as u,_t as d,a as f,b as p,d as m,f as h,g,j as ee,k as _,m as v,n as y,p as b,u as x,vt as S,y as C,yt as w}from"./vue-i18n-nv59vAyH.js";import{E as T,L as E,T as D,V as O,c as k,ct as A,s as j,z as M}from"./scroll-CWjBCoBR.js";import{a as N,i as P,o as F,r as I,s as L,t as R}from"./private.use-form-1cZLVjGN.js";import{S as z}from"./index-DSx45TKH.js";import{t as B}from"./QSpinnerDots-FJCnAvfw.js";import{n as V,p as te,t as H}from"./_plugin-vue_export-helper-fkfRoKj2.js";import{t as U}from"./QBadge-xNMZEqT-.js";import{r as W}from"./touch-Bojc73iM.js";import{n as G,t as K}from"./TouchPan-DuISf80E.js";import{t as q}from"./format-Ex4UmWdz.js";var J=A({name:`QBtnGroup`,props:{unelevated:Boolean,outline:Boolean,flat:Boolean,rounded:Boolean,square:Boolean,push:Boolean,stretch:Boolean,glossy:Boolean,spread:Boolean},setup(e,{slots:t}){let n=x(()=>{let t=[`unelevated`,`outline`,`flat`,`rounded`,`square`,`push`,`stretch`,`glossy`].filter(t=>e[t]===!0).map(e=>`q-btn-group--${e}`).join(` `);return`q-btn-group row no-wrap${t.length===0?``:` `+t}`+(e.spread===!0?` q-btn-group--spread`:` inline`)});return()=>s(`div`,{class:n.value},O(t.default))}}),ne=A({name:`QBtnToggle`,props:{...I,modelValue:{required:!0},options:{type:Array,required:!0,validator:e=>e.every(e=>(`label`in e||`icon`in e||`slot`in e)&&`value`in e)},color:String,textColor:String,toggleColor:{type:String,default:`primary`},toggleTextColor:String,outline:Boolean,flat:Boolean,unelevated:Boolean,rounded:Boolean,push:Boolean,glossy:Boolean,size:String,padding:String,noCaps:Boolean,noWrap:Boolean,dense:Boolean,readonly:Boolean,disable:Boolean,stack:Boolean,stretch:Boolean,spread:Boolean,clearable:Boolean,ripple:{type:[Boolean,Object],default:!0}},emits:[`update:modelValue`,`clear`,`click`],setup(e,{slots:t,emit:n}){let r=x(()=>e.options.find(t=>t.value===e.modelValue)!==void 0),i=R(x(()=>({type:`hidden`,name:e.name,value:e.modelValue}))),a=x(()=>T(e)),o=x(()=>({rounded:e.rounded,dense:e.dense,...a.value})),c=x(()=>e.options.map((t,n)=>{let{attrs:r,value:i,slot:a,...s}=t;return{slot:a,props:{key:n,"aria-pressed":i===e.modelValue?`true`:`false`,...r,...s,...o.value,disable:e.disable===!0||s.disable===!0,color:i===e.modelValue?u(s,`toggleColor`):u(s,`color`),textColor:i===e.modelValue?u(s,`toggleTextColor`):u(s,`textColor`),noCaps:u(s,`noCaps`)===!0,noWrap:u(s,`noWrap`)===!0,size:u(s,`size`),padding:u(s,`padding`),ripple:u(s,`ripple`),stack:u(s,`stack`)===!0,stretch:u(s,`stretch`)===!0,onClick(e){l(i,t,e)}}}}));function l(t,r,i){e.readonly!==!0&&(e.modelValue===t?e.clearable===!0&&(n(`update:modelValue`,null,null),n(`clear`)):n(`update:modelValue`,t,r),n(`click`,i))}function u(t,n){return t[n]===void 0?e[n]:t[n]}function d(){let n=c.value.map(e=>s(D,e.props,e.slot===void 0?void 0:t[e.slot]));return e.name!==void 0&&e.disable!==!0&&r.value===!0&&i(n,`push`),M(t.default,n)}return()=>s(J,{class:`q-btn-toggle`,...a.value,rounded:e.rounded,stretch:e.stretch,glossy:e.glossy,spread:e.spread},d)}}),Y=A({props:[`store`,`barStyle`,`verticalBarStyle`,`horizontalBarStyle`],setup(e){return()=>[s(`div`,{class:e.store.scroll.vertical.barClass.value,style:[e.barStyle,e.verticalBarStyle],"aria-hidden":`true`,onMousedown:e.store.onVerticalMousedown}),s(`div`,{class:e.store.scroll.horizontal.barClass.value,style:[e.barStyle,e.horizontalBarStyle],"aria-hidden":`true`,onMousedown:e.store.onHorizontalMousedown}),l(s(`div`,{ref:e.store.scroll.vertical.ref,class:e.store.scroll.vertical.thumbClass.value,style:e.store.scroll.vertical.style.value,"aria-hidden":`true`}),e.store.thumbVertDir),l(s(`div`,{ref:e.store.scroll.horizontal.ref,class:e.store.scroll.horizontal.thumbClass.value,style:e.store.scroll.horizontal.style.value,"aria-hidden":`true`}),e.store.thumbHorizDir)]}}),X=[`vertical`,`horizontal`],Z={vertical:{offset:`offsetY`,scroll:`scrollTop`,dir:`down`,dist:`y`},horizontal:{offset:`offsetX`,scroll:`scrollLeft`,dir:`right`,dist:`x`}},Q={prevent:!0,mouse:!0,mouseAllDir:!0},$=e=>e>=250?50:Math.ceil(e/5),re=A({name:`QScrollArea`,props:{...F,thumbStyle:Object,verticalThumbStyle:Object,horizontalThumbStyle:Object,barStyle:[Array,String,Object],verticalBarStyle:[Array,String,Object],horizontalBarStyle:[Array,String,Object],verticalOffset:{type:Array,default:[0,0]},horizontalOffset:{type:Array,default:[0,0]},contentStyle:[Array,String,Object],contentActiveStyle:[Array,String,Object],delay:{type:[String,Number],default:1e3},visible:{type:Boolean,default:null},tabindex:[String,Number],onScroll:Function},setup(t,{slots:r,emit:i}){let a=o(!1),c=o(!1),l=o(!1),u={vertical:o(0),horizontal:o(0)},d={vertical:{ref:o(null),position:o(0),size:o(0)},horizontal:{ref:o(null),position:o(0),size:o(0)}},{proxy:f}=p(),m=N(t,f.$q),h=null,g,v=o(null),y=x(()=>`q-scrollarea`+(m.value===!0?` q-scrollarea--dark`:``));Object.assign(u,{verticalInner:x(()=>u.vertical.value-t.verticalOffset[0]-t.verticalOffset[1]),horizontalInner:x(()=>u.horizontal.value-t.horizontalOffset[0]-t.horizontalOffset[1])}),d.vertical.percentage=x(()=>{let e=d.vertical.size.value-u.vertical.value;if(e<=0)return 0;let t=q(d.vertical.position.value/e,0,1);return Math.round(t*1e4)/1e4}),d.vertical.thumbHidden=x(()=>(t.visible===null?l.value:t.visible)!==!0&&a.value===!1&&c.value===!1||d.vertical.size.value<=u.vertical.value+1),d.vertical.thumbStart=x(()=>t.verticalOffset[0]+d.vertical.percentage.value*(u.verticalInner.value-d.vertical.thumbSize.value)),d.vertical.thumbSize=x(()=>Math.round(q(u.verticalInner.value*u.verticalInner.value/d.vertical.size.value,$(u.verticalInner.value),u.verticalInner.value))),d.vertical.style=x(()=>({...t.thumbStyle,...t.verticalThumbStyle,top:`${d.vertical.thumbStart.value}px`,height:`${d.vertical.thumbSize.value}px`,right:`${t.horizontalOffset[1]}px`})),d.vertical.thumbClass=x(()=>`q-scrollarea__thumb q-scrollarea__thumb--v absolute-right`+(d.vertical.thumbHidden.value===!0?` q-scrollarea__thumb--invisible`:``)),d.vertical.barClass=x(()=>`q-scrollarea__bar q-scrollarea__bar--v absolute-right`+(d.vertical.thumbHidden.value===!0?` q-scrollarea__bar--invisible`:``)),d.horizontal.percentage=x(()=>{let e=d.horizontal.size.value-u.horizontal.value;if(e<=0)return 0;let t=q(Math.abs(d.horizontal.position.value)/e,0,1);return Math.round(t*1e4)/1e4}),d.horizontal.thumbHidden=x(()=>(t.visible===null?l.value:t.visible)!==!0&&a.value===!1&&c.value===!1||d.horizontal.size.value<=u.horizontal.value+1),d.horizontal.thumbStart=x(()=>t.horizontalOffset[0]+d.horizontal.percentage.value*(u.horizontalInner.value-d.horizontal.thumbSize.value)),d.horizontal.thumbSize=x(()=>Math.round(q(u.horizontalInner.value*u.horizontalInner.value/d.horizontal.size.value,$(u.horizontalInner.value),u.horizontalInner.value))),d.horizontal.style=x(()=>({...t.thumbStyle,...t.horizontalThumbStyle,[f.$q.lang.rtl===!0?`right`:`left`]:`${d.horizontal.thumbStart.value}px`,width:`${d.horizontal.thumbSize.value}px`,bottom:`${t.verticalOffset[1]}px`})),d.horizontal.thumbClass=x(()=>`q-scrollarea__thumb q-scrollarea__thumb--h absolute-bottom`+(d.horizontal.thumbHidden.value===!0?` q-scrollarea__thumb--invisible`:``)),d.horizontal.barClass=x(()=>`q-scrollarea__bar q-scrollarea__bar--h absolute-bottom`+(d.horizontal.thumbHidden.value===!0?` q-scrollarea__bar--invisible`:``));let b=x(()=>d.vertical.thumbHidden.value===!0&&d.horizontal.thumbHidden.value===!0?t.contentStyle:t.contentActiveStyle);function S(){let e={};return X.forEach(t=>{let n=d[t];Object.assign(e,{[t+`Position`]:n.position.value,[t+`Percentage`]:n.percentage.value,[t+`Size`]:n.size.value,[t+`ContainerSize`]:u[t].value,[t+`ContainerInnerSize`]:u[t+`Inner`].value})}),e}let C=L(()=>{let e=S();e.ref=f,i(`scroll`,e)},0);function w(e,t,n){if(X.includes(e)===!1){console.error(`[QScrollArea]: wrong first param of setScrollPosition (vertical/horizontal)`);return}(e===`vertical`?k:j)(v.value,t,n)}function T({height:e,width:t}){let n=!1;u.vertical.value!==e&&(u.vertical.value=e,n=!0),u.horizontal.value!==t&&(u.horizontal.value=t,n=!0),n===!0&&P()}function E({position:e}){let t=!1;d.vertical.position.value!==e.top&&(d.vertical.position.value=e.top,t=!0),d.horizontal.position.value!==e.left&&(d.horizontal.position.value=e.left,t=!0),t===!0&&P()}function D({height:e,width:t}){d.horizontal.size.value!==t&&(d.horizontal.size.value=t,P()),d.vertical.size.value!==e&&(d.vertical.size.value=e,P())}function O(e,t){let n=d[t];if(e.isFirst===!0){if(n.thumbHidden.value===!0)return;g=n.position.value,c.value=!0}else if(c.value!==!0)return;e.isFinal===!0&&(c.value=!1);let r=Z[t],i=(n.size.value-u[t].value)/(u[t+`Inner`].value-n.thumbSize.value),a=e.distance[r.dist];F(g+(e.direction===r.dir?1:-1)*a*i,t)}function A(e,n){let r=d[n];if(r.thumbHidden.value!==!0){let i=n===`vertical`?t.verticalOffset[0]:t.horizontalOffset[0],a=e[Z[n].offset]-i,o=r.thumbStart.value-i;(a<o||a>o+r.thumbSize.value)&&F(q((a-r.thumbSize.value/2)/(u[n+`Inner`].value-r.thumbSize.value),0,1)*Math.max(0,r.size.value-u[n].value),n),r.ref.value!==null&&r.ref.value.dispatchEvent(new MouseEvent(e.type,e))}}function P(){a.value=!0,h!==null&&clearTimeout(h),h=setTimeout(()=>{h=null,a.value=!1},t.delay),t.onScroll!==void 0&&C()}function F(e,t){v.value[Z[t].scroll]=e}let I=null;function R(){I!==null&&clearTimeout(I),I=setTimeout(()=>{I=null,l.value=!0},f.$q.platform.is.ios?50:0)}function z(){I!==null&&(clearTimeout(I),I=null),l.value=!1}let B=null;n(()=>f.$q.lang.rtl,e=>{v.value!==null&&j(v.value,Math.abs(d.horizontal.position.value)*(e===!0?-1:1))}),ee(()=>{B={top:d.vertical.position.value,left:d.horizontal.position.value}}),e(()=>{if(B===null)return;let e=v.value;e!==null&&(j(e,B.left),k(e,B.top))}),_(C.cancel),Object.assign(f,{getScrollTarget:()=>v.value,getScroll:S,getScrollPosition:()=>({top:d.vertical.position.value,left:d.horizontal.position.value}),getScrollPercentage:()=>({top:d.vertical.percentage.value,left:d.horizontal.percentage.value}),setScrollPosition:w,setScrollPercentage(e,t,n){w(e,t*(d[e].size.value-u[e].value)*(e===`horizontal`&&f.$q.lang.rtl===!0?-1:1),n)}});let V={scroll:d,thumbVertDir:[[K,e=>{O(e,`vertical`)},void 0,{vertical:!0,...Q}]],thumbHorizDir:[[K,e=>{O(e,`horizontal`)},void 0,{horizontal:!0,...Q}]],onVerticalMousedown(e){A(e,`vertical`)},onHorizontalMousedown(e){A(e,`horizontal`)}};return()=>s(`div`,{class:y.value,onMouseenter:R,onMouseleave:z},[s(`div`,{ref:v,class:`q-scrollarea__container scroll relative-position fit hide-scrollbar`,tabindex:t.tabindex===void 0?void 0:t.tabindex},[s(`div`,{class:`q-scrollarea__content absolute`,style:b.value},M(r.default,[s(W,{debounce:0,onResize:D})])),s(G,{axis:`both`,onScroll:E})]),s(W,{debounce:0,onResize:T}),s(Y,{store:V,barStyle:t.barStyle,verticalBarStyle:t.verticalBarStyle,horizontalBarStyle:t.horizontalBarStyle})])}}),ie={class:`diff-viewer column full-height`},ae={class:`diff-header row items-center q-px-md q-py-sm no-wrap`},oe={class:`text-body1 text-weight-medium text-grey-3`},se={key:0,class:`text-caption text-grey-6 q-ml-md`,style:{"font-size":`11px`}},ce={class:`text-grey-7`},le={class:`text-green-4`},ue={key:1,class:`text-caption text-grey-5 q-ml-md ellipsis`,style:{"font-size":`11px`,"font-family":`'Roboto Mono', monospace`,"max-width":`400px`}},de={class:`row col no-wrap`,style:{"min-height":`0`}},fe={key:1,class:`text-caption text-grey-8 q-pa-sm`},pe=[`onClick`],me={class:`text-caption text-grey-4`,style:{"font-size":`11px`}},he=[`onClick`],ge={class:`text-caption text-grey-3 ellipsis`,style:{"font-size":`11px`}},_e={class:`col column`,style:{"min-width":`0`,position:`relative`}},ve={key:0,class:`col column items-center justify-center`},ye={key:1,class:`col column items-center justify-center text-grey-8 text-caption`},be=H(C({__name:`DiffViewer`,props:{workspaceId:{}},emits:[`close`,`sendToChat`],setup(e,{emit:s}){let l=e,p=s,{t:ee}=y(),_=o([]),C=o(``),T=o(``),O=o(null),k=o(!1),A=o(!1),j=o(null),M=o(`side`),N=o(new Set),F=null,I=null,L=[];function R(e){let t=0;for(let n of e)n.isDir?t+=R(n.children):t++;return t}let H=x(()=>{let e=[];for(let t of _.value){let n=t.path.split(`/`),r=e;for(let e=0;e<n.length;e++){let i=n[e],a=e===n.length-1,o=n.slice(0,e+1).join(`/`),s=r.find(e=>e.name===i&&e.isDir===!a);s||(s={name:i,path:a?t.path:o,isDir:!a,status:a?t.status:void 0,children:[]},r.push(s)),r=s.children}}function t(e){e.sort((e,t)=>e.isDir===t.isDir?e.name.localeCompare(t.name):e.isDir?-1:1);for(let n of e)n.children.length>0&&t(n.children)}return t(e),e}),W=x(()=>{let e=[];function t(n,r){for(let i of n)i.isDir?(e.push({name:i.name,path:i.path,isDir:!0,depth:r,fileCount:R(i.children)}),N.value.has(i.path)||t(i.children,r+1)):e.push({name:i.name,path:i.path,isDir:!1,depth:r,status:i.status})}return t(H.value,0),e});function G(e){N.value.has(e)?N.value.delete(e):N.value.add(e)}async function K(){k.value=!0;try{let e=await fetch(`/api/workspaces/${l.workspaceId}/diff`);if(!e.ok)throw Error(`HTTP ${e.status}`);let t=await e.json();_.value=t.files,C.value=t.sourceBranch??``,T.value=t.workingBranch??``}catch(e){console.error(`Failed to load diff files:`,e)}finally{k.value=!1}}async function q(e){if(j.value){A.value=!0;try{F||(self.MonacoEnvironment={getWorker(e,t){return t===`json`?new Worker(new URL(`/assets/json.worker-C9p7xCYk.js`,``+import.meta.url),{type:`module`}):t===`css`||t===`scss`||t===`less`?new Worker(new URL(`/assets/css.worker-D1piIYC4.js`,``+import.meta.url),{type:`module`}):t===`html`||t===`handlebars`||t===`razor`?new Worker(new URL(`/assets/html.worker-C4q4XMPn.js`,``+import.meta.url),{type:`module`}):t===`typescript`||t===`javascript`?new Worker(new URL(`/assets/ts.worker-Cj3zTgVE.js`,``+import.meta.url),{type:`module`}):new Worker(new URL(`/assets/editor.worker-CJ9iTmkr.js`,``+import.meta.url),{type:`module`})}},F=await z(()=>import(`./editor.main-BY_NEoTM.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12])),F.editor.defineTheme(`kobo-dark`,{base:`vs-dark`,inherit:!0,rules:[],colors:{"editor.background":`#1a1a2e`,"diffEditor.insertedTextBackground":`#22c55e20`,"diffEditor.removedTextBackground":`#ef444420`}}));let t=await fetch(`/api/workspaces/${l.workspaceId}/diff-file?path=${encodeURIComponent(e)}`);if(!t.ok)throw Error(`HTTP ${t.status}`);let n=await t.json(),r={ts:`typescript`,tsx:`typescript`,js:`javascript`,jsx:`javascript`,vue:`html`,html:`html`,css:`css`,scss:`scss`,json:`json`,md:`markdown`,yaml:`yaml`,yml:`yaml`,sh:`shell`,sql:`sql`,py:`python`,rs:`rust`,go:`go`}[e.split(`.`).pop()??``]??`plaintext`;if(I){for(let e of L)e.dispose();L=[];let e=I.getModel();I.dispose(),I=null,e?.original?.dispose(),e?.modified?.dispose()}let i=F.editor.createModel(n.original??``,r),a=F.editor.createModel(n.modified??``,r);I=F.editor.createDiffEditor(j.value,{theme:`kobo-dark`,readOnly:!0,renderSideBySide:M.value===`side`,automaticLayout:!0,minimap:{enabled:!1},scrollBeyondLastLine:!1,fontSize:12,lineHeight:18}),I.setModel({original:i,modified:a}),Y()}catch(e){console.error(`Failed to load file diff:`,e)}finally{A.value=!1}}}let J=o(!1);function Y(){if(!I)return;for(let e of L)e.dispose();L=[];let e=I.getModifiedEditor(),t=I.getOriginalEditor();for(let n of[e,t]){let e=n.onDidChangeCursorSelection(()=>{let e=n.getSelection();J.value=!!(e&&!e.isEmpty())});L.push(e)}}function X(){if(!(!I||!O.value))for(let e of[I.getModifiedEditor(),I.getOriginalEditor()]){let t=e.getSelection();if(t&&!t.isEmpty()){let n=e.getModel();if(!n)continue;let r=n.getValueInRange(t),i=e===I.getModifiedEditor()?`modified`:`original`;p(`sendToChat`,`\`\`\`\n// ${O.value} (${i}) L${t.startLineNumber}-L${t.endLineNumber}\n${r}\n\`\`\``);return}}}n(O,e=>{e&&q(e)}),n(M,()=>{I&&I.updateOptions({renderSideBySide:M.value===`side`})});function Z(e){switch(e){case`added`:return`add_circle`;case`deleted`:return`remove_circle`;case`renamed`:return`drive_file_rename_outline`;default:return`edit`}}function Q(e){switch(e){case`added`:return`#4ade80`;case`deleted`:return`#f87171`;case`renamed`:return`#60a5fa`;default:return`#f59e0b`}}return i(K),a(()=>{for(let e of L)e.dispose();if(L=[],I){let e=I.getModel();I.dispose(),I=null,e?.original?.dispose(),e?.modified?.dispose()}}),(e,n)=>(t(),v(`div`,ie,[m(`div`,ae,[u(E,{name:`difference`,size:`18px`,color:`indigo-4`,class:`q-mr-xs`}),m(`span`,oe,w(e.$t(`diff.title`)),1),u(U,{label:`${_.value.length}`,color:`grey-8`,"text-color":`grey-4`,class:`q-ml-sm`,style:{"font-size":`10px`}},null,8,[`label`]),C.value?(t(),v(`span`,se,[m(`span`,ce,w(C.value),1),u(E,{name:`arrow_forward`,size:`11px`,color:`grey-8`,class:`q-mx-xs`}),m(`span`,le,w(T.value),1)])):b(``,!0),O.value?(t(),v(`span`,ue,w(O.value),1)):b(``,!0),u(te),u(ne,{modelValue:M.value,"onUpdate:modelValue":n[0]||=e=>M.value=e,dense:``,"no-caps":``,size:`sm`,"toggle-color":`indigo-8`,color:`grey-9`,"text-color":`grey-5`,options:[{label:e.$t(`diff.side`),value:`side`},{label:e.$t(`diff.inline`),value:`inline`}],class:`q-mr-sm`},null,8,[`modelValue`,`options`]),u(D,{flat:``,round:``,dense:``,icon:`close`,color:`grey-5`,size:`sm`,onClick:n[1]||=e=>p(`close`)},{default:c(()=>[u(V,null,{default:c(()=>[g(w(e.$t(`tooltip.closeDiffViewer`)),1)]),_:1})]),_:1})]),u(P,{dark:``}),m(`div`,de,[u(re,{class:`diff-file-list q-pa-xs`,style:{width:`280px`,"min-width":`200px`,height:`100%`,"border-right":`1px solid #2a2a4a`}},{default:c(()=>[k.value?(t(),h(B,{key:0,size:`24px`,color:`grey-6`,class:`q-ma-md`})):_.value.length===0?(t(),v(`div`,fe,w(e.$t(`diff.noChanges`)),1)):(t(!0),v(f,{key:2},r(W.value,e=>(t(),v(f,{key:e.path},[e.isDir?(t(),v(`div`,{key:0,class:`diff-dir-item cursor-pointer`,style:S({paddingLeft:`${e.depth*12+4}px`}),onClick:t=>G(e.path)},[u(E,{name:N.value.has(e.path)?`chevron_right`:`expand_more`,size:`14px`,color:`grey-6`},null,8,[`name`]),u(E,{name:`folder`,size:`13px`,color:`amber-7`,class:`q-mx-xs`}),m(`span`,me,w(e.name),1),u(U,{label:e.fileCount,color:`grey-9`,"text-color":`grey-5`,class:`q-ml-xs`,style:{"font-size":`9px`}},null,8,[`label`])],12,pe)):(t(),v(`div`,{key:1,class:d([`diff-file-item cursor-pointer`,{"diff-file-item--active":O.value===e.path}]),style:S({paddingLeft:`${e.depth*12+20}px`}),onClick:t=>O.value=e.path},[u(E,{name:Z(e.status),size:`11px`,style:S({color:Q(e.status)}),class:`q-mr-xs`},null,8,[`name`,`style`]),m(`span`,ge,w(e.name),1)],14,he))],64))),128))]),_:1}),m(`div`,_e,[A.value?(t(),v(`div`,ve,[u(B,{size:`32px`,color:`indigo-4`})])):O.value?b(``,!0):(t(),v(`div`,ye,w(e.$t(`diff.selectFile`)),1)),m(`div`,{ref_key:`editorContainer`,ref:j,class:`col`,style:{"min-height":`0`}},null,512),J.value?(t(),h(D,{key:2,"no-caps":``,dense:``,size:`sm`,color:`primary`,icon:`chat`,label:e.$t(`diff.addToChat`),class:`send-to-chat-btn`,onClick:X},null,8,[`label`])):b(``,!0)])])]))}}),[[`__scopeId`,`data-v-4ed3860e`]]);export{be as default};
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/editor.main-C3fYYKpq.js","assets/index-wen3XwaX.js","assets/vue-i18n-nv59vAyH.js","assets/scroll-CWjBCoBR.js","assets/settings-CuK-S6HH.js","assets/use-checkbox-DwkIkUAc.js","assets/private.use-form-1cZLVjGN.js","assets/i18n-D5LoHj4O.js","assets/index-eX_lKHSg.css","assets/editor.api-BEvyDmPD.js","assets/editor-COGk2gAX.css","assets/monaco.contribution-CffkEucM.js","assets/editor-CS3NEPi9.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{D as e,F as t,H as n,L as r,M as i,N as a,Q as o,S as s,U as c,W as l,_ as u,_t as d,a as f,b as p,d as m,f as h,g,j as ee,k as _,m as v,n as y,p as b,u as x,vt as S,y as C,yt as w}from"./vue-i18n-nv59vAyH.js";import{E as T,L as E,T as D,V as O,c as k,ct as A,s as j,z as M}from"./scroll-CWjBCoBR.js";import{a as N,i as P,o as F,r as I,s as L,t as R}from"./private.use-form-1cZLVjGN.js";import{S as z}from"./index-wen3XwaX.js";import{t as B}from"./QSpinnerDots-FJCnAvfw.js";import{n as V,p as te,t as H}from"./_plugin-vue_export-helper-fkfRoKj2.js";import{t as U}from"./QBadge-xNMZEqT-.js";import{r as W}from"./touch-Bojc73iM.js";import{n as G,t as K}from"./TouchPan-DuISf80E.js";import{t as q}from"./format-Ex4UmWdz.js";var J=A({name:`QBtnGroup`,props:{unelevated:Boolean,outline:Boolean,flat:Boolean,rounded:Boolean,square:Boolean,push:Boolean,stretch:Boolean,glossy:Boolean,spread:Boolean},setup(e,{slots:t}){let n=x(()=>{let t=[`unelevated`,`outline`,`flat`,`rounded`,`square`,`push`,`stretch`,`glossy`].filter(t=>e[t]===!0).map(e=>`q-btn-group--${e}`).join(` `);return`q-btn-group row no-wrap${t.length===0?``:` `+t}`+(e.spread===!0?` q-btn-group--spread`:` inline`)});return()=>s(`div`,{class:n.value},O(t.default))}}),ne=A({name:`QBtnToggle`,props:{...I,modelValue:{required:!0},options:{type:Array,required:!0,validator:e=>e.every(e=>(`label`in e||`icon`in e||`slot`in e)&&`value`in e)},color:String,textColor:String,toggleColor:{type:String,default:`primary`},toggleTextColor:String,outline:Boolean,flat:Boolean,unelevated:Boolean,rounded:Boolean,push:Boolean,glossy:Boolean,size:String,padding:String,noCaps:Boolean,noWrap:Boolean,dense:Boolean,readonly:Boolean,disable:Boolean,stack:Boolean,stretch:Boolean,spread:Boolean,clearable:Boolean,ripple:{type:[Boolean,Object],default:!0}},emits:[`update:modelValue`,`clear`,`click`],setup(e,{slots:t,emit:n}){let r=x(()=>e.options.find(t=>t.value===e.modelValue)!==void 0),i=R(x(()=>({type:`hidden`,name:e.name,value:e.modelValue}))),a=x(()=>T(e)),o=x(()=>({rounded:e.rounded,dense:e.dense,...a.value})),c=x(()=>e.options.map((t,n)=>{let{attrs:r,value:i,slot:a,...s}=t;return{slot:a,props:{key:n,"aria-pressed":i===e.modelValue?`true`:`false`,...r,...s,...o.value,disable:e.disable===!0||s.disable===!0,color:i===e.modelValue?u(s,`toggleColor`):u(s,`color`),textColor:i===e.modelValue?u(s,`toggleTextColor`):u(s,`textColor`),noCaps:u(s,`noCaps`)===!0,noWrap:u(s,`noWrap`)===!0,size:u(s,`size`),padding:u(s,`padding`),ripple:u(s,`ripple`),stack:u(s,`stack`)===!0,stretch:u(s,`stretch`)===!0,onClick(e){l(i,t,e)}}}}));function l(t,r,i){e.readonly!==!0&&(e.modelValue===t?e.clearable===!0&&(n(`update:modelValue`,null,null),n(`clear`)):n(`update:modelValue`,t,r),n(`click`,i))}function u(t,n){return t[n]===void 0?e[n]:t[n]}function d(){let n=c.value.map(e=>s(D,e.props,e.slot===void 0?void 0:t[e.slot]));return e.name!==void 0&&e.disable!==!0&&r.value===!0&&i(n,`push`),M(t.default,n)}return()=>s(J,{class:`q-btn-toggle`,...a.value,rounded:e.rounded,stretch:e.stretch,glossy:e.glossy,spread:e.spread},d)}}),Y=A({props:[`store`,`barStyle`,`verticalBarStyle`,`horizontalBarStyle`],setup(e){return()=>[s(`div`,{class:e.store.scroll.vertical.barClass.value,style:[e.barStyle,e.verticalBarStyle],"aria-hidden":`true`,onMousedown:e.store.onVerticalMousedown}),s(`div`,{class:e.store.scroll.horizontal.barClass.value,style:[e.barStyle,e.horizontalBarStyle],"aria-hidden":`true`,onMousedown:e.store.onHorizontalMousedown}),l(s(`div`,{ref:e.store.scroll.vertical.ref,class:e.store.scroll.vertical.thumbClass.value,style:e.store.scroll.vertical.style.value,"aria-hidden":`true`}),e.store.thumbVertDir),l(s(`div`,{ref:e.store.scroll.horizontal.ref,class:e.store.scroll.horizontal.thumbClass.value,style:e.store.scroll.horizontal.style.value,"aria-hidden":`true`}),e.store.thumbHorizDir)]}}),X=[`vertical`,`horizontal`],Z={vertical:{offset:`offsetY`,scroll:`scrollTop`,dir:`down`,dist:`y`},horizontal:{offset:`offsetX`,scroll:`scrollLeft`,dir:`right`,dist:`x`}},Q={prevent:!0,mouse:!0,mouseAllDir:!0},$=e=>e>=250?50:Math.ceil(e/5),re=A({name:`QScrollArea`,props:{...F,thumbStyle:Object,verticalThumbStyle:Object,horizontalThumbStyle:Object,barStyle:[Array,String,Object],verticalBarStyle:[Array,String,Object],horizontalBarStyle:[Array,String,Object],verticalOffset:{type:Array,default:[0,0]},horizontalOffset:{type:Array,default:[0,0]},contentStyle:[Array,String,Object],contentActiveStyle:[Array,String,Object],delay:{type:[String,Number],default:1e3},visible:{type:Boolean,default:null},tabindex:[String,Number],onScroll:Function},setup(t,{slots:r,emit:i}){let a=o(!1),c=o(!1),l=o(!1),u={vertical:o(0),horizontal:o(0)},d={vertical:{ref:o(null),position:o(0),size:o(0)},horizontal:{ref:o(null),position:o(0),size:o(0)}},{proxy:f}=p(),m=N(t,f.$q),h=null,g,v=o(null),y=x(()=>`q-scrollarea`+(m.value===!0?` q-scrollarea--dark`:``));Object.assign(u,{verticalInner:x(()=>u.vertical.value-t.verticalOffset[0]-t.verticalOffset[1]),horizontalInner:x(()=>u.horizontal.value-t.horizontalOffset[0]-t.horizontalOffset[1])}),d.vertical.percentage=x(()=>{let e=d.vertical.size.value-u.vertical.value;if(e<=0)return 0;let t=q(d.vertical.position.value/e,0,1);return Math.round(t*1e4)/1e4}),d.vertical.thumbHidden=x(()=>(t.visible===null?l.value:t.visible)!==!0&&a.value===!1&&c.value===!1||d.vertical.size.value<=u.vertical.value+1),d.vertical.thumbStart=x(()=>t.verticalOffset[0]+d.vertical.percentage.value*(u.verticalInner.value-d.vertical.thumbSize.value)),d.vertical.thumbSize=x(()=>Math.round(q(u.verticalInner.value*u.verticalInner.value/d.vertical.size.value,$(u.verticalInner.value),u.verticalInner.value))),d.vertical.style=x(()=>({...t.thumbStyle,...t.verticalThumbStyle,top:`${d.vertical.thumbStart.value}px`,height:`${d.vertical.thumbSize.value}px`,right:`${t.horizontalOffset[1]}px`})),d.vertical.thumbClass=x(()=>`q-scrollarea__thumb q-scrollarea__thumb--v absolute-right`+(d.vertical.thumbHidden.value===!0?` q-scrollarea__thumb--invisible`:``)),d.vertical.barClass=x(()=>`q-scrollarea__bar q-scrollarea__bar--v absolute-right`+(d.vertical.thumbHidden.value===!0?` q-scrollarea__bar--invisible`:``)),d.horizontal.percentage=x(()=>{let e=d.horizontal.size.value-u.horizontal.value;if(e<=0)return 0;let t=q(Math.abs(d.horizontal.position.value)/e,0,1);return Math.round(t*1e4)/1e4}),d.horizontal.thumbHidden=x(()=>(t.visible===null?l.value:t.visible)!==!0&&a.value===!1&&c.value===!1||d.horizontal.size.value<=u.horizontal.value+1),d.horizontal.thumbStart=x(()=>t.horizontalOffset[0]+d.horizontal.percentage.value*(u.horizontalInner.value-d.horizontal.thumbSize.value)),d.horizontal.thumbSize=x(()=>Math.round(q(u.horizontalInner.value*u.horizontalInner.value/d.horizontal.size.value,$(u.horizontalInner.value),u.horizontalInner.value))),d.horizontal.style=x(()=>({...t.thumbStyle,...t.horizontalThumbStyle,[f.$q.lang.rtl===!0?`right`:`left`]:`${d.horizontal.thumbStart.value}px`,width:`${d.horizontal.thumbSize.value}px`,bottom:`${t.verticalOffset[1]}px`})),d.horizontal.thumbClass=x(()=>`q-scrollarea__thumb q-scrollarea__thumb--h absolute-bottom`+(d.horizontal.thumbHidden.value===!0?` q-scrollarea__thumb--invisible`:``)),d.horizontal.barClass=x(()=>`q-scrollarea__bar q-scrollarea__bar--h absolute-bottom`+(d.horizontal.thumbHidden.value===!0?` q-scrollarea__bar--invisible`:``));let b=x(()=>d.vertical.thumbHidden.value===!0&&d.horizontal.thumbHidden.value===!0?t.contentStyle:t.contentActiveStyle);function S(){let e={};return X.forEach(t=>{let n=d[t];Object.assign(e,{[t+`Position`]:n.position.value,[t+`Percentage`]:n.percentage.value,[t+`Size`]:n.size.value,[t+`ContainerSize`]:u[t].value,[t+`ContainerInnerSize`]:u[t+`Inner`].value})}),e}let C=L(()=>{let e=S();e.ref=f,i(`scroll`,e)},0);function w(e,t,n){if(X.includes(e)===!1){console.error(`[QScrollArea]: wrong first param of setScrollPosition (vertical/horizontal)`);return}(e===`vertical`?k:j)(v.value,t,n)}function T({height:e,width:t}){let n=!1;u.vertical.value!==e&&(u.vertical.value=e,n=!0),u.horizontal.value!==t&&(u.horizontal.value=t,n=!0),n===!0&&P()}function E({position:e}){let t=!1;d.vertical.position.value!==e.top&&(d.vertical.position.value=e.top,t=!0),d.horizontal.position.value!==e.left&&(d.horizontal.position.value=e.left,t=!0),t===!0&&P()}function D({height:e,width:t}){d.horizontal.size.value!==t&&(d.horizontal.size.value=t,P()),d.vertical.size.value!==e&&(d.vertical.size.value=e,P())}function O(e,t){let n=d[t];if(e.isFirst===!0){if(n.thumbHidden.value===!0)return;g=n.position.value,c.value=!0}else if(c.value!==!0)return;e.isFinal===!0&&(c.value=!1);let r=Z[t],i=(n.size.value-u[t].value)/(u[t+`Inner`].value-n.thumbSize.value),a=e.distance[r.dist];F(g+(e.direction===r.dir?1:-1)*a*i,t)}function A(e,n){let r=d[n];if(r.thumbHidden.value!==!0){let i=n===`vertical`?t.verticalOffset[0]:t.horizontalOffset[0],a=e[Z[n].offset]-i,o=r.thumbStart.value-i;(a<o||a>o+r.thumbSize.value)&&F(q((a-r.thumbSize.value/2)/(u[n+`Inner`].value-r.thumbSize.value),0,1)*Math.max(0,r.size.value-u[n].value),n),r.ref.value!==null&&r.ref.value.dispatchEvent(new MouseEvent(e.type,e))}}function P(){a.value=!0,h!==null&&clearTimeout(h),h=setTimeout(()=>{h=null,a.value=!1},t.delay),t.onScroll!==void 0&&C()}function F(e,t){v.value[Z[t].scroll]=e}let I=null;function R(){I!==null&&clearTimeout(I),I=setTimeout(()=>{I=null,l.value=!0},f.$q.platform.is.ios?50:0)}function z(){I!==null&&(clearTimeout(I),I=null),l.value=!1}let B=null;n(()=>f.$q.lang.rtl,e=>{v.value!==null&&j(v.value,Math.abs(d.horizontal.position.value)*(e===!0?-1:1))}),ee(()=>{B={top:d.vertical.position.value,left:d.horizontal.position.value}}),e(()=>{if(B===null)return;let e=v.value;e!==null&&(j(e,B.left),k(e,B.top))}),_(C.cancel),Object.assign(f,{getScrollTarget:()=>v.value,getScroll:S,getScrollPosition:()=>({top:d.vertical.position.value,left:d.horizontal.position.value}),getScrollPercentage:()=>({top:d.vertical.percentage.value,left:d.horizontal.percentage.value}),setScrollPosition:w,setScrollPercentage(e,t,n){w(e,t*(d[e].size.value-u[e].value)*(e===`horizontal`&&f.$q.lang.rtl===!0?-1:1),n)}});let V={scroll:d,thumbVertDir:[[K,e=>{O(e,`vertical`)},void 0,{vertical:!0,...Q}]],thumbHorizDir:[[K,e=>{O(e,`horizontal`)},void 0,{horizontal:!0,...Q}]],onVerticalMousedown(e){A(e,`vertical`)},onHorizontalMousedown(e){A(e,`horizontal`)}};return()=>s(`div`,{class:y.value,onMouseenter:R,onMouseleave:z},[s(`div`,{ref:v,class:`q-scrollarea__container scroll relative-position fit hide-scrollbar`,tabindex:t.tabindex===void 0?void 0:t.tabindex},[s(`div`,{class:`q-scrollarea__content absolute`,style:b.value},M(r.default,[s(W,{debounce:0,onResize:D})])),s(G,{axis:`both`,onScroll:E})]),s(W,{debounce:0,onResize:T}),s(Y,{store:V,barStyle:t.barStyle,verticalBarStyle:t.verticalBarStyle,horizontalBarStyle:t.horizontalBarStyle})])}}),ie={class:`diff-viewer column full-height`},ae={class:`diff-header row items-center q-px-md q-py-sm no-wrap`},oe={class:`text-body1 text-weight-medium text-grey-3`},se={key:0,class:`text-caption text-grey-6 q-ml-md`,style:{"font-size":`11px`}},ce={class:`text-grey-7`},le={class:`text-green-4`},ue={key:1,class:`text-caption text-grey-5 q-ml-md ellipsis`,style:{"font-size":`11px`,"font-family":`'Roboto Mono', monospace`,"max-width":`400px`}},de={class:`row col no-wrap`,style:{"min-height":`0`}},fe={key:1,class:`text-caption text-grey-8 q-pa-sm`},pe=[`onClick`],me={class:`text-caption text-grey-4`,style:{"font-size":`11px`}},he=[`onClick`],ge={class:`text-caption text-grey-3 ellipsis`,style:{"font-size":`11px`}},_e={class:`col column`,style:{"min-width":`0`,position:`relative`}},ve={key:0,class:`col column items-center justify-center`},ye={key:1,class:`col column items-center justify-center text-grey-8 text-caption`},be=H(C({__name:`DiffViewer`,props:{workspaceId:{}},emits:[`close`,`sendToChat`],setup(e,{emit:s}){let l=e,p=s,{t:ee}=y(),_=o([]),C=o(``),T=o(``),O=o(null),k=o(!1),A=o(!1),j=o(null),M=o(`side`),N=o(new Set),F=null,I=null,L=[];function R(e){let t=0;for(let n of e)n.isDir?t+=R(n.children):t++;return t}let H=x(()=>{let e=[];for(let t of _.value){let n=t.path.split(`/`),r=e;for(let e=0;e<n.length;e++){let i=n[e],a=e===n.length-1,o=n.slice(0,e+1).join(`/`),s=r.find(e=>e.name===i&&e.isDir===!a);s||(s={name:i,path:a?t.path:o,isDir:!a,status:a?t.status:void 0,children:[]},r.push(s)),r=s.children}}function t(e){e.sort((e,t)=>e.isDir===t.isDir?e.name.localeCompare(t.name):e.isDir?-1:1);for(let n of e)n.children.length>0&&t(n.children)}return t(e),e}),W=x(()=>{let e=[];function t(n,r){for(let i of n)i.isDir?(e.push({name:i.name,path:i.path,isDir:!0,depth:r,fileCount:R(i.children)}),N.value.has(i.path)||t(i.children,r+1)):e.push({name:i.name,path:i.path,isDir:!1,depth:r,status:i.status})}return t(H.value,0),e});function G(e){N.value.has(e)?N.value.delete(e):N.value.add(e)}async function K(){k.value=!0;try{let e=await fetch(`/api/workspaces/${l.workspaceId}/diff`);if(!e.ok)throw Error(`HTTP ${e.status}`);let t=await e.json();_.value=t.files,C.value=t.sourceBranch??``,T.value=t.workingBranch??``}catch(e){console.error(`Failed to load diff files:`,e)}finally{k.value=!1}}async function q(e){if(j.value){A.value=!0;try{F||(self.MonacoEnvironment={getWorker(e,t){return t===`json`?new Worker(new URL(`/assets/json.worker-C9p7xCYk.js`,``+import.meta.url),{type:`module`}):t===`css`||t===`scss`||t===`less`?new Worker(new URL(`/assets/css.worker-D1piIYC4.js`,``+import.meta.url),{type:`module`}):t===`html`||t===`handlebars`||t===`razor`?new Worker(new URL(`/assets/html.worker-C4q4XMPn.js`,``+import.meta.url),{type:`module`}):t===`typescript`||t===`javascript`?new Worker(new URL(`/assets/ts.worker-Cj3zTgVE.js`,``+import.meta.url),{type:`module`}):new Worker(new URL(`/assets/editor.worker-CJ9iTmkr.js`,``+import.meta.url),{type:`module`})}},F=await z(()=>import(`./editor.main-C3fYYKpq.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12])),F.editor.defineTheme(`kobo-dark`,{base:`vs-dark`,inherit:!0,rules:[],colors:{"editor.background":`#1a1a2e`,"diffEditor.insertedTextBackground":`#22c55e20`,"diffEditor.removedTextBackground":`#ef444420`}}));let t=await fetch(`/api/workspaces/${l.workspaceId}/diff-file?path=${encodeURIComponent(e)}`);if(!t.ok)throw Error(`HTTP ${t.status}`);let n=await t.json(),r={ts:`typescript`,tsx:`typescript`,js:`javascript`,jsx:`javascript`,vue:`html`,html:`html`,css:`css`,scss:`scss`,json:`json`,md:`markdown`,yaml:`yaml`,yml:`yaml`,sh:`shell`,sql:`sql`,py:`python`,rs:`rust`,go:`go`}[e.split(`.`).pop()??``]??`plaintext`;if(I){for(let e of L)e.dispose();L=[];let e=I.getModel();I.dispose(),I=null,e?.original?.dispose(),e?.modified?.dispose()}let i=F.editor.createModel(n.original??``,r),a=F.editor.createModel(n.modified??``,r);I=F.editor.createDiffEditor(j.value,{theme:`kobo-dark`,readOnly:!0,renderSideBySide:M.value===`side`,automaticLayout:!0,minimap:{enabled:!1},scrollBeyondLastLine:!1,fontSize:12,lineHeight:18}),I.setModel({original:i,modified:a}),Y()}catch(e){console.error(`Failed to load file diff:`,e)}finally{A.value=!1}}}let J=o(!1);function Y(){if(!I)return;for(let e of L)e.dispose();L=[];let e=I.getModifiedEditor(),t=I.getOriginalEditor();for(let n of[e,t]){let e=n.onDidChangeCursorSelection(()=>{let e=n.getSelection();J.value=!!(e&&!e.isEmpty())});L.push(e)}}function X(){if(!(!I||!O.value))for(let e of[I.getModifiedEditor(),I.getOriginalEditor()]){let t=e.getSelection();if(t&&!t.isEmpty()){let n=e.getModel();if(!n)continue;let r=n.getValueInRange(t),i=e===I.getModifiedEditor()?`modified`:`original`;p(`sendToChat`,`\`\`\`\n// ${O.value} (${i}) L${t.startLineNumber}-L${t.endLineNumber}\n${r}\n\`\`\``);return}}}n(O,e=>{e&&q(e)}),n(M,()=>{I&&I.updateOptions({renderSideBySide:M.value===`side`})});function Z(e){switch(e){case`added`:return`add_circle`;case`deleted`:return`remove_circle`;case`renamed`:return`drive_file_rename_outline`;default:return`edit`}}function Q(e){switch(e){case`added`:return`#4ade80`;case`deleted`:return`#f87171`;case`renamed`:return`#60a5fa`;default:return`#f59e0b`}}return i(K),a(()=>{for(let e of L)e.dispose();if(L=[],I){let e=I.getModel();I.dispose(),I=null,e?.original?.dispose(),e?.modified?.dispose()}}),(e,n)=>(t(),v(`div`,ie,[m(`div`,ae,[u(E,{name:`difference`,size:`18px`,color:`indigo-4`,class:`q-mr-xs`}),m(`span`,oe,w(e.$t(`diff.title`)),1),u(U,{label:`${_.value.length}`,color:`grey-8`,"text-color":`grey-4`,class:`q-ml-sm`,style:{"font-size":`10px`}},null,8,[`label`]),C.value?(t(),v(`span`,se,[m(`span`,ce,w(C.value),1),u(E,{name:`arrow_forward`,size:`11px`,color:`grey-8`,class:`q-mx-xs`}),m(`span`,le,w(T.value),1)])):b(``,!0),O.value?(t(),v(`span`,ue,w(O.value),1)):b(``,!0),u(te),u(ne,{modelValue:M.value,"onUpdate:modelValue":n[0]||=e=>M.value=e,dense:``,"no-caps":``,size:`sm`,"toggle-color":`indigo-8`,color:`grey-9`,"text-color":`grey-5`,options:[{label:e.$t(`diff.side`),value:`side`},{label:e.$t(`diff.inline`),value:`inline`}],class:`q-mr-sm`},null,8,[`modelValue`,`options`]),u(D,{flat:``,round:``,dense:``,icon:`close`,color:`grey-5`,size:`sm`,onClick:n[1]||=e=>p(`close`)},{default:c(()=>[u(V,null,{default:c(()=>[g(w(e.$t(`tooltip.closeDiffViewer`)),1)]),_:1})]),_:1})]),u(P,{dark:``}),m(`div`,de,[u(re,{class:`diff-file-list q-pa-xs`,style:{width:`280px`,"min-width":`200px`,height:`100%`,"border-right":`1px solid #2a2a4a`}},{default:c(()=>[k.value?(t(),h(B,{key:0,size:`24px`,color:`grey-6`,class:`q-ma-md`})):_.value.length===0?(t(),v(`div`,fe,w(e.$t(`diff.noChanges`)),1)):(t(!0),v(f,{key:2},r(W.value,e=>(t(),v(f,{key:e.path},[e.isDir?(t(),v(`div`,{key:0,class:`diff-dir-item cursor-pointer`,style:S({paddingLeft:`${e.depth*12+4}px`}),onClick:t=>G(e.path)},[u(E,{name:N.value.has(e.path)?`chevron_right`:`expand_more`,size:`14px`,color:`grey-6`},null,8,[`name`]),u(E,{name:`folder`,size:`13px`,color:`amber-7`,class:`q-mx-xs`}),m(`span`,me,w(e.name),1),u(U,{label:e.fileCount,color:`grey-9`,"text-color":`grey-5`,class:`q-ml-xs`,style:{"font-size":`9px`}},null,8,[`label`])],12,pe)):(t(),v(`div`,{key:1,class:d([`diff-file-item cursor-pointer`,{"diff-file-item--active":O.value===e.path}]),style:S({paddingLeft:`${e.depth*12+20}px`}),onClick:t=>O.value=e.path},[u(E,{name:Z(e.status),size:`11px`,style:S({color:Q(e.status)}),class:`q-mr-xs`},null,8,[`name`,`style`]),m(`span`,ge,w(e.name),1)],14,he))],64))),128))]),_:1}),m(`div`,_e,[A.value?(t(),v(`div`,ve,[u(B,{size:`32px`,color:`indigo-4`})])):O.value?b(``,!0):(t(),v(`div`,ye,w(e.$t(`diff.selectFile`)),1)),m(`div`,{ref_key:`editorContainer`,ref:j,class:`col`,style:{"min-height":`0`}},null,512),J.value?(t(),h(D,{key:2,"no-caps":``,dense:``,size:`sm`,color:`primary`,icon:`chat`,label:e.$t(`diff.addToChat`),class:`send-to-chat-btn`,onClick:X},null,8,[`label`])):b(``,!0)])])]))}}),[[`__scopeId`,`data-v-4ed3860e`]]);export{be as default};
|