tarsk 0.5.40 → 0.5.42

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/dist/index.js +1898 -485
  2. package/dist/public/assets/{account-view-BT90zNSx.js → account-view-BAm4Az95.js} +1 -1
  3. package/dist/public/assets/api-C44iPrsZ.js +1 -0
  4. package/dist/public/assets/browser-tab-DV6mFCbu.js +1 -0
  5. package/dist/public/assets/commit-dialog-DYdmiA4p.js +1 -0
  6. package/dist/public/assets/context-menu-BVP2PUoS.js +1 -0
  7. package/dist/public/assets/create-repo-dialog-DrGJUrGO.js +1 -0
  8. package/dist/public/assets/{dialogs-config-DZKtVbNK.js → dialogs-config-BPzX42HH.js} +14 -14
  9. package/dist/public/assets/diff-view-BnNtDcmG.js +3 -0
  10. package/dist/public/assets/explorer-tab-view-OGWG1dH9.js +2 -0
  11. package/dist/public/assets/explorer-tree--Ho2K8-i.js +1 -0
  12. package/dist/public/assets/explorer-view-Dw0Kyxb8.js +1 -0
  13. package/dist/public/assets/git-history-dialog-BpOpNbze.js +1 -0
  14. package/dist/public/assets/git-ops-button-DKOfNm4s.js +2 -0
  15. package/dist/public/assets/history-view-DwSqsTGI.js +9 -0
  16. package/dist/public/assets/index-BdLH7zyV.css +1 -0
  17. package/dist/public/assets/index-BqaiWs7x.js +88 -0
  18. package/dist/public/assets/mcp-server-card-BbAUiI-X.js +1 -0
  19. package/dist/public/assets/merged-pr-dialog-Cvo93bRH.js +1 -0
  20. package/dist/public/assets/onboarding-BmBbv0At.js +1 -0
  21. package/dist/public/assets/project-settings-view-D-8Ua1Tu.js +1 -0
  22. package/dist/public/assets/providers-list-view-Gm13Fagd.js +1 -0
  23. package/dist/public/assets/pull-request-dialog-BkzdP5F2.js +1 -0
  24. package/dist/public/assets/pull-with-changes-dialog-DQU7jHYL.js +1 -0
  25. package/dist/public/assets/push-before-pr-dialog-DII3gUVw.js +1 -0
  26. package/dist/public/assets/radio-group-DkDRaQdF.js +1 -0
  27. package/dist/public/assets/react-vendor-BmFalJ0W.js +16 -0
  28. package/dist/public/assets/settings-general-view-Br89Vrbv.js +1 -0
  29. package/dist/public/assets/{settings-instructions-view-CV7lRPuw.js → settings-instructions-view-ByxlAb9U.js} +1 -1
  30. package/dist/public/assets/settings-list-DSrSoTv7.js +1 -0
  31. package/dist/public/assets/settings-mcp-servers-view-U_la7C8z.js +5 -0
  32. package/dist/public/assets/{settings-models-skeleton-l966LEN8.js → settings-models-skeleton-C5XrzM39.js} +1 -1
  33. package/dist/public/assets/settings-models-view-obQa4doG.js +1 -0
  34. package/dist/public/assets/settings-rules-view-Cd9WHEAE.js +8 -0
  35. package/dist/public/assets/settings-skills-view-B81njz98.js +2 -0
  36. package/dist/public/assets/settings-slash-commands-view-Ct8WC1Z0.js +1 -0
  37. package/dist/public/assets/settings-subagents-view-BwNTnGkz.js +2 -0
  38. package/dist/public/assets/{settings-system-prompt-view-DQmSdSnp.js → settings-system-prompt-view-C4uLn68y.js} +1 -1
  39. package/dist/public/assets/settings-view-DQW_9pnm.js +2 -0
  40. package/dist/public/assets/skeleton-HsHVnOKO.js +1 -0
  41. package/dist/public/assets/{terminal-panel-BzCO142Q.js → terminal-panel-wOltBu70.js} +2 -2
  42. package/dist/public/assets/{ui-components-f8jJJzEo.js → ui-components-CaeQlGTd.js} +1 -1
  43. package/dist/public/assets/{utils-BlXPFbY9.js → utils-5mrXWXCs.js} +1 -1
  44. package/dist/public/assets/web-Gjw6klhQ.js +1 -0
  45. package/dist/public/assets/web-NsuCXAqU.js +1 -0
  46. package/dist/public/browser-preview-rpc.js +484 -0
  47. package/dist/public/index.html +7 -7
  48. package/dist/recommended-models.txt +1 -1
  49. package/package.json +1 -1
  50. package/dist/public/assets/api-DWU0D34A.js +0 -1
  51. package/dist/public/assets/browser-tab-Bp486a9f.js +0 -1
  52. package/dist/public/assets/commit-dialog-90PGbqs8.js +0 -1
  53. package/dist/public/assets/context-menu-C7FTMa2c.js +0 -1
  54. package/dist/public/assets/create-repo-dialog-BkUdww3q.js +0 -1
  55. package/dist/public/assets/diff-view-B4G8vqZa.js +0 -3
  56. package/dist/public/assets/explorer-tab-view-DEQFid8r.js +0 -2
  57. package/dist/public/assets/explorer-tree-CPHGgahA.js +0 -1
  58. package/dist/public/assets/explorer-view-BTvhSMDQ.js +0 -1
  59. package/dist/public/assets/git-history-dialog-Bqv0bD41.js +0 -1
  60. package/dist/public/assets/git-ops-button-BnVMlOO3.js +0 -2
  61. package/dist/public/assets/history-view-jX3PPID6.js +0 -9
  62. package/dist/public/assets/index-DjD2SPNZ.js +0 -65
  63. package/dist/public/assets/index-jIBJk8xl.css +0 -1
  64. package/dist/public/assets/mcp-server-card-CTCrhFIS.js +0 -1
  65. package/dist/public/assets/merged-pr-dialog-B2qqrQ1g.js +0 -1
  66. package/dist/public/assets/onboarding-CxtzQldG.js +0 -1
  67. package/dist/public/assets/project-settings-view-ZJjQbFbQ.js +0 -1
  68. package/dist/public/assets/providers-list-view-BH13AB_H.js +0 -1
  69. package/dist/public/assets/pull-request-dialog-ZzVXh6M9.js +0 -1
  70. package/dist/public/assets/pull-with-changes-dialog-LUgd2a4S.js +0 -1
  71. package/dist/public/assets/push-before-pr-dialog-CFmgu9H_.js +0 -1
  72. package/dist/public/assets/radio-group-Bd8YbtFD.js +0 -1
  73. package/dist/public/assets/react-vendor-Ba8DSNiO.js +0 -16
  74. package/dist/public/assets/settings-general-view-C8muiP_K.js +0 -1
  75. package/dist/public/assets/settings-list-CKPEGohm.js +0 -1
  76. package/dist/public/assets/settings-mcp-servers-view-3gN9ly3z.js +0 -5
  77. package/dist/public/assets/settings-models-view-CAMouMhE.js +0 -1
  78. package/dist/public/assets/settings-rules-view-BnazfbJb.js +0 -8
  79. package/dist/public/assets/settings-skills-view-DpzKFcpf.js +0 -2
  80. package/dist/public/assets/settings-slash-commands-view-Drje2Dl4.js +0 -1
  81. package/dist/public/assets/settings-subagents-view-D05kHO1W.js +0 -2
  82. package/dist/public/assets/settings-view-B6e0GfSv.js +0 -2
  83. package/dist/public/assets/skeleton-qzmFgKhS.js +0 -1
@@ -0,0 +1,484 @@
1
+ /**
2
+ * Minimal RPC bootstrap for the Browser tab preview webview.
3
+ * Enables evaluateJavascriptWithResponse and structured preview APIs from the Bun process.
4
+ */
5
+ (function bootstrapBrowserPreviewRpc() {
6
+ function whenReady(callback) {
7
+ if (
8
+ window.__electrobun_encrypt &&
9
+ window.__electrobunRpcSocketPort &&
10
+ window.__electrobunWebviewId
11
+ ) {
12
+ callback();
13
+ return;
14
+ }
15
+ setTimeout(function () {
16
+ whenReady(callback);
17
+ }, 10);
18
+ }
19
+
20
+ function installConsoleCapture(api) {
21
+ if (api._consoleInstalled) return;
22
+ api._consoleInstalled = true;
23
+ api._consoleLogs = [];
24
+
25
+ function record(level, args) {
26
+ const message = args
27
+ .map(function (value) {
28
+ if (typeof value === "string") return value;
29
+ try {
30
+ return JSON.stringify(value);
31
+ } catch {
32
+ return String(value);
33
+ }
34
+ })
35
+ .join(" ");
36
+ api._consoleLogs.push({
37
+ level: level,
38
+ message: message,
39
+ timestamp: Date.now(),
40
+ });
41
+ if (api._consoleLogs.length > 500) {
42
+ api._consoleLogs.splice(0, api._consoleLogs.length - 500);
43
+ }
44
+ }
45
+
46
+ ["log", "info", "warn", "error", "debug"].forEach(function (level) {
47
+ const original = console[level];
48
+ console[level] = function () {
49
+ record(level === "log" ? "log" : level, Array.from(arguments));
50
+ return original.apply(console, arguments);
51
+ };
52
+ });
53
+
54
+ window.addEventListener("error", function (event) {
55
+ record("error", [event.message || "Uncaught error"]);
56
+ });
57
+
58
+ window.addEventListener("unhandledrejection", function (event) {
59
+ const reason = event.reason;
60
+ const message =
61
+ reason instanceof Error
62
+ ? reason.message
63
+ : typeof reason === "string"
64
+ ? reason
65
+ : "Unhandled promise rejection";
66
+ record("error", [message]);
67
+ });
68
+ }
69
+
70
+ function createPreviewApi() {
71
+ const api = {
72
+ _consoleInstalled: false,
73
+ _consoleLogs: [],
74
+ _refElements: {},
75
+
76
+ snapshot: function snapshot(options) {
77
+ const interactiveOnly = options?.interactive_only ?? false;
78
+ const maxDepth = options?.max_depth ?? 15;
79
+ const elements = [];
80
+ const refElements = {};
81
+ let refCounter = 0;
82
+
83
+ function isInteractive(element) {
84
+ const tag = element.tagName ? element.tagName.toLowerCase() : "";
85
+ if (
86
+ tag === "a" ||
87
+ tag === "button" ||
88
+ tag === "input" ||
89
+ tag === "select" ||
90
+ tag === "textarea" ||
91
+ tag === "summary" ||
92
+ tag === "label"
93
+ ) {
94
+ return true;
95
+ }
96
+ if (element.getAttribute("role")) return true;
97
+ if (element.hasAttribute("tabindex")) return true;
98
+ if (element.onclick) return true;
99
+ return false;
100
+ }
101
+
102
+ function getName(element) {
103
+ return (
104
+ element.getAttribute("aria-label") ||
105
+ element.getAttribute("placeholder") ||
106
+ element.getAttribute("title") ||
107
+ element.getAttribute("name") ||
108
+ (element.textContent ? element.textContent.trim().slice(0, 120) : "") ||
109
+ null
110
+ );
111
+ }
112
+
113
+ function assignRef(element) {
114
+ refCounter += 1;
115
+ const ref = "@e" + refCounter;
116
+ element.setAttribute("data-tarsk-ref", ref);
117
+ refElements[ref] = element;
118
+ return ref;
119
+ }
120
+
121
+ function walk(element, depth) {
122
+ if (!element || depth > maxDepth) return;
123
+ if (element.nodeType !== 1) return;
124
+
125
+ const style = window.getComputedStyle(element);
126
+ if (style.display === "none" || style.visibility === "hidden") return;
127
+
128
+ const rect = element.getBoundingClientRect();
129
+ const visible = rect.width > 0 && rect.height > 0;
130
+
131
+ if (visible && (!interactiveOnly || isInteractive(element))) {
132
+ const entry = {
133
+ ref: assignRef(element),
134
+ tag: element.tagName.toLowerCase(),
135
+ role: element.getAttribute("role"),
136
+ name: getName(element),
137
+ bbox: [
138
+ Math.round(rect.x),
139
+ Math.round(rect.y),
140
+ Math.round(rect.width),
141
+ Math.round(rect.height),
142
+ ],
143
+ };
144
+ if ("value" in element && typeof element.value === "string") {
145
+ entry.value = element.value;
146
+ }
147
+ elements.push(entry);
148
+ }
149
+
150
+ for (let i = 0; i < element.children.length; i += 1) {
151
+ walk(element.children[i], depth + 1);
152
+ }
153
+ }
154
+
155
+ if (document.body) {
156
+ walk(document.body, 0);
157
+ }
158
+
159
+ api._refElements = refElements;
160
+ return {
161
+ url: location.href,
162
+ elements: elements,
163
+ };
164
+ },
165
+
166
+ resolveRef: function resolveRef(ref) {
167
+ if (!ref) return null;
168
+ if (api._refElements[ref]) return api._refElements[ref];
169
+ return document.querySelector('[data-tarsk-ref="' + ref + '"]');
170
+ },
171
+
172
+ click: function click(params) {
173
+ const element = api.resolveRef(params?.ref);
174
+ if (!element) {
175
+ throw new Error("Element not found for ref: " + params?.ref);
176
+ }
177
+ element.scrollIntoView({ block: "center", inline: "center" });
178
+ element.dispatchEvent(
179
+ new MouseEvent("click", { bubbles: true, cancelable: true, view: window }),
180
+ );
181
+ if (typeof element.click === "function") {
182
+ element.click();
183
+ }
184
+ return { clicked: params.ref };
185
+ },
186
+
187
+ fill: function fill(params) {
188
+ const element = api.resolveRef(params?.ref);
189
+ if (!element) {
190
+ throw new Error("Element not found for ref: " + params?.ref);
191
+ }
192
+ const value = params?.value ?? "";
193
+ element.focus();
194
+ if ("value" in element) {
195
+ element.value = value;
196
+ } else {
197
+ element.textContent = value;
198
+ }
199
+ element.dispatchEvent(new Event("input", { bubbles: true }));
200
+ element.dispatchEvent(new Event("change", { bubbles: true }));
201
+ return { filled: params.ref, value: value };
202
+ },
203
+
204
+ press: function press(params) {
205
+ const key = params?.key;
206
+ if (!key) {
207
+ throw new Error("key is required for press");
208
+ }
209
+ const target = document.activeElement || document.body;
210
+ target.dispatchEvent(
211
+ new KeyboardEvent("keydown", { key: key, bubbles: true, cancelable: true }),
212
+ );
213
+ target.dispatchEvent(
214
+ new KeyboardEvent("keyup", { key: key, bubbles: true, cancelable: true }),
215
+ );
216
+ return { pressed: key };
217
+ },
218
+
219
+ hover: function hover(params) {
220
+ const element = api.resolveRef(params?.ref);
221
+ if (!element) {
222
+ throw new Error("Element not found for ref: " + params?.ref);
223
+ }
224
+ element.scrollIntoView({ block: "center", inline: "center" });
225
+ element.dispatchEvent(
226
+ new MouseEvent("mouseover", { bubbles: true, cancelable: true, view: window }),
227
+ );
228
+ element.dispatchEvent(
229
+ new MouseEvent("mouseenter", { bubbles: true, cancelable: true, view: window }),
230
+ );
231
+ return { hovered: params.ref };
232
+ },
233
+
234
+ waitFor: function waitFor(params) {
235
+ const timeoutMs = params?.timeout_ms ?? 10000;
236
+ const selector = params?.selector;
237
+ const text = params?.text;
238
+ const startedAt = Date.now();
239
+
240
+ return new Promise(function (resolve, reject) {
241
+ function check() {
242
+ if (selector) {
243
+ const match = document.querySelector(selector);
244
+ if (match) {
245
+ resolve({ matched: selector, kind: "selector" });
246
+ return;
247
+ }
248
+ }
249
+
250
+ if (text) {
251
+ const bodyText = document.body ? document.body.innerText || "" : "";
252
+ if (bodyText.includes(text)) {
253
+ resolve({ matched: text, kind: "text" });
254
+ return;
255
+ }
256
+ }
257
+
258
+ if (Date.now() - startedAt >= timeoutMs) {
259
+ reject(new Error("Timed out waiting for condition"));
260
+ return;
261
+ }
262
+
263
+ setTimeout(check, 100);
264
+ }
265
+
266
+ check();
267
+ });
268
+ },
269
+
270
+ getConsoleLogs: function getConsoleLogs(params) {
271
+ const sinceMs = params?.since_ms ?? 0;
272
+ const levels = params?.levels;
273
+ const clear = params?.clear ?? false;
274
+ const cutoff = Date.now() - sinceMs;
275
+ let logs = api._consoleLogs.filter(function (entry) {
276
+ return entry.timestamp >= cutoff;
277
+ });
278
+ if (levels && levels.length > 0) {
279
+ logs = logs.filter(function (entry) {
280
+ return levels.includes(entry.level);
281
+ });
282
+ }
283
+ if (clear) {
284
+ api._consoleLogs = [];
285
+ }
286
+ return { logs: logs };
287
+ },
288
+
289
+ takeScreenshot: function takeScreenshot(params) {
290
+ const format = params?.format === "jpeg" ? "jpeg" : "png";
291
+ const width = window.innerWidth;
292
+ const height = window.innerHeight;
293
+
294
+ function screenshotDiagnostics(stage, extra) {
295
+ const html = document.documentElement ? document.documentElement.outerHTML : "";
296
+ return {
297
+ stage: stage,
298
+ url: location.href,
299
+ format: format,
300
+ viewport: { width: width, height: height },
301
+ document: {
302
+ readyState: document.readyState,
303
+ scrollWidth: document.documentElement ? document.documentElement.scrollWidth : null,
304
+ scrollHeight: document.documentElement ? document.documentElement.scrollHeight : null,
305
+ htmlLength: html.length,
306
+ },
307
+ captureMethod: "svg-foreign-object",
308
+ extra: extra || null,
309
+ };
310
+ }
311
+
312
+ function failScreenshot(stage, message, extra) {
313
+ const diagnostics = screenshotDiagnostics(stage, extra);
314
+ const detail = JSON.stringify(diagnostics);
315
+ const error = new Error(message + " Diagnostics: " + detail);
316
+ console.error("[browser-preview] takeScreenshot failed", diagnostics);
317
+ return error;
318
+ }
319
+
320
+ if (width <= 0 || height <= 0) {
321
+ throw failScreenshot(
322
+ "viewport-check",
323
+ "Failed to render screenshot: browser preview viewport has zero dimensions.",
324
+ { width: width, height: height },
325
+ );
326
+ }
327
+
328
+ const xmlns = "http://www.w3.org/1999/xhtml";
329
+ const html = document.documentElement ? document.documentElement.outerHTML : "";
330
+ const svg =
331
+ '<svg xmlns="http://www.w3.org/2000/svg" width="' +
332
+ width +
333
+ '" height="' +
334
+ height +
335
+ '"><foreignObject width="100%" height="100%"><div xmlns="' +
336
+ xmlns +
337
+ '">' +
338
+ html +
339
+ "</div></foreignObject></svg>";
340
+ const encodedSvg = encodeURIComponent(svg);
341
+ const canvas = document.createElement("canvas");
342
+ canvas.width = width;
343
+ canvas.height = height;
344
+ const context = canvas.getContext("2d");
345
+ if (!context) {
346
+ throw failScreenshot(
347
+ "canvas-context",
348
+ "Failed to render screenshot: Canvas 2D context is not available.",
349
+ );
350
+ }
351
+
352
+ return new Promise(function (resolve, reject) {
353
+ const image = new Image();
354
+
355
+ image.onload = function () {
356
+ try {
357
+ context.drawImage(image, 0, 0);
358
+ const mimeType = format === "jpeg" ? "image/jpeg" : "image/png";
359
+ const dataUrl = canvas.toDataURL(mimeType);
360
+ const base64 = dataUrl.split(",")[1] || "";
361
+ if (!base64) {
362
+ reject(
363
+ failScreenshot(
364
+ "encode",
365
+ "Failed to render screenshot: canvas.toDataURL returned empty output.",
366
+ { mimeType: mimeType },
367
+ ),
368
+ );
369
+ return;
370
+ }
371
+ resolve({
372
+ format: format,
373
+ width: width,
374
+ height: height,
375
+ image_data: base64,
376
+ });
377
+ } catch (error) {
378
+ const message = error instanceof Error ? error.message : String(error);
379
+ reject(
380
+ failScreenshot(
381
+ "canvas-draw",
382
+ "Failed to render screenshot while drawing to canvas: " + message,
383
+ {
384
+ likelyCause:
385
+ message.toLowerCase().includes("tainted") ||
386
+ message.toLowerCase().includes("security")
387
+ ? "Cross-origin content tainted the canvas."
388
+ : "drawImage or toDataURL failed after SVG load.",
389
+ },
390
+ ),
391
+ );
392
+ }
393
+ };
394
+
395
+ image.onerror = function () {
396
+ reject(
397
+ failScreenshot(
398
+ "svg-image-load",
399
+ "Failed to render screenshot: browser could not decode the SVG snapshot image.",
400
+ {
401
+ svgLength: svg.length,
402
+ encodedSvgLength: encodedSvg.length,
403
+ imageSrcLength: image.src.length,
404
+ likelyCauses: [
405
+ "Cross-origin images, fonts, or styles in the page",
406
+ "Invalid or oversized HTML when serialized to SVG",
407
+ "Data URL length limits in the embedded webview",
408
+ ],
409
+ },
410
+ ),
411
+ );
412
+ };
413
+
414
+ image.src = "data:image/svg+xml;charset=utf-8," + encodedSvg;
415
+ });
416
+ },
417
+ };
418
+
419
+ installConsoleCapture(api);
420
+ return api;
421
+ }
422
+
423
+ whenReady(function () {
424
+ const webviewId = window.__electrobunWebviewId;
425
+ const port = window.__electrobunRpcSocketPort;
426
+ let rpcHandler = null;
427
+ const socket = new WebSocket("ws://localhost:" + port + "/socket?webviewId=" + webviewId);
428
+
429
+ window.__tarskBrowserPreview = createPreviewApi();
430
+
431
+ socket.addEventListener("message", function (event) {
432
+ if (typeof event.data !== "string") return;
433
+ void (async function () {
434
+ try {
435
+ const encryptedPacket = JSON.parse(event.data);
436
+ const decrypted = await window.__electrobun_decrypt(
437
+ encryptedPacket.encryptedData,
438
+ encryptedPacket.iv,
439
+ encryptedPacket.tag,
440
+ );
441
+ rpcHandler?.(JSON.parse(decrypted));
442
+ } catch (error) {
443
+ console.error("[browser-preview-rpc] failed to handle socket message", error);
444
+ }
445
+ })();
446
+ });
447
+
448
+ async function sendToBun(message) {
449
+ const json = JSON.stringify(message);
450
+ if (socket.readyState === WebSocket.OPEN) {
451
+ const encrypted = await window.__electrobun_encrypt(json);
452
+ socket.send(JSON.stringify(encrypted));
453
+ return;
454
+ }
455
+ window.__electrobunBunBridge?.postMessage(json);
456
+ }
457
+
458
+ rpcHandler = async function handleRpcMessage(message) {
459
+ if (!message || message.type !== "request") return;
460
+ if (message.method !== "evaluateJavascriptWithResponse") return;
461
+
462
+ const script = message.params?.script ?? "";
463
+ try {
464
+ const resultFunction = new Function(script);
465
+ const result = resultFunction();
466
+ const payload = result instanceof Promise ? await result : result;
467
+ await sendToBun({ type: "response", id: message.id, success: true, payload });
468
+ } catch (error) {
469
+ await sendToBun({
470
+ type: "response",
471
+ id: message.id,
472
+ success: false,
473
+ error: error instanceof Error ? error.message : String(error),
474
+ });
475
+ }
476
+ };
477
+
478
+ const previousReceive = window.__electrobun?.receiveMessageFromBun;
479
+ window.__electrobun.receiveMessageFromBun = function (message) {
480
+ void rpcHandler?.(message);
481
+ previousReceive?.(message);
482
+ };
483
+ });
484
+ })();
@@ -22,17 +22,17 @@
22
22
  <meta name="apple-mobile-web-app-title" content="Tarsk" />
23
23
 
24
24
  <title>Tarsk</title>
25
- <script type="module" crossorigin src="/assets/index-DjD2SPNZ.js"></script>
25
+ <script type="module" crossorigin src="/assets/index-BqaiWs7x.js"></script>
26
26
  <link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-aKtaBQYM.js">
27
27
  <link rel="modulepreload" crossorigin href="/assets/monaco-CZnIWXyV.js">
28
- <link rel="modulepreload" crossorigin href="/assets/dialogs-config-DZKtVbNK.js">
29
- <link rel="modulepreload" crossorigin href="/assets/history-view-jX3PPID6.js">
30
- <link rel="modulepreload" crossorigin href="/assets/onboarding-CxtzQldG.js">
28
+ <link rel="modulepreload" crossorigin href="/assets/dialogs-config-BPzX42HH.js">
29
+ <link rel="modulepreload" crossorigin href="/assets/history-view-DwSqsTGI.js">
30
+ <link rel="modulepreload" crossorigin href="/assets/onboarding-BmBbv0At.js">
31
31
  <link rel="modulepreload" crossorigin href="/assets/whisper-wasm-EGutPGND.js">
32
- <link rel="modulepreload" crossorigin href="/assets/react-vendor-Ba8DSNiO.js">
33
- <link rel="modulepreload" crossorigin href="/assets/utils-BlXPFbY9.js">
32
+ <link rel="modulepreload" crossorigin href="/assets/react-vendor-BmFalJ0W.js">
33
+ <link rel="modulepreload" crossorigin href="/assets/utils-5mrXWXCs.js">
34
34
  <link rel="stylesheet" crossorigin href="/assets/monaco-Br_kD0ds.css">
35
- <link rel="stylesheet" crossorigin href="/assets/index-jIBJk8xl.css">
35
+ <link rel="stylesheet" crossorigin href="/assets/index-BdLH7zyV.css">
36
36
  </head>
37
37
  <body class="font-sans antialiased">
38
38
  <div id="root"></div>
@@ -9,5 +9,5 @@
9
9
  "Gemini 3.5 Flash",
10
10
  "Kimi K2.6",
11
11
  "Deepseek V4 Pro",
12
- "GLM-5.1"
12
+ "GLM-5.2"
13
13
  ]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tarsk",
3
- "version": "0.5.40",
3
+ "version": "0.5.42",
4
4
  "description": "CLI for Tarsk - Project Threads Manager",
5
5
  "keywords": [
6
6
  "cli",
@@ -1 +0,0 @@
1
- import{In as e,Ln as t,Mn as n,Nn as r,Pn as i,Rn as a,zn as o}from"./dialogs-config-DZKtVbNK.js";async function s(e,t,n=!1){return i(`api/threads/${r(e)}/explorer?path=${encodeURIComponent(t)}&recursive=${n}`)}async function c(e,t){return i(`api/threads/${r(e)}/ai-file?path=${encodeURIComponent(t)}`)}async function l(e,t,n){return o(`api/threads/${r(e)}/ai-file`,{path:t,content:n})}async function u(e,t){return n(`api/threads/${r(e)}/explorer?path=${encodeURIComponent(t)}`)}async function d(e,n,i){return t(`api/threads/${r(e)}/explorer`,{path:n,newName:i})}async function f(e,t,n){return a(`api/threads/${r(e)}/explorer/file`,{dirPath:t,name:n})}async function p(t,n){return e(`api/threads/${r(t)}/explorer/media?path=${encodeURIComponent(n)}`)}async function m(e,t,n){return a(`api/threads/${r(e)}/explorer/folder`,{dirPath:t,name:n})}export{c as a,l as c,p as i,m as n,s as o,u as r,d as s,f as t};
@@ -1 +0,0 @@
1
- import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{An as t,Er as n,Ja as r,Jt as i,Ki as a,Zi as o,fr as s,hr as c,ji as l,mr as u,oa as d,pr as f,ui as p,wi as m,xo as h,ya as g,yo as _}from"./dialogs-config-DZKtVbNK.js";import{C as v,d as y,j as b}from"./index-DjD2SPNZ.js";var x=_(),S=e(h(),1),C=l();function w(e){let t=e.trim();return t?(!t.startsWith(`http://`)&&!t.startsWith(`https://`)&&(t=`http://${t}`),t):``}function T(e,t){let n=!1,r=0;function i(){if(!n){if(e.webviewId==null){r=requestAnimationFrame(i);return}t&&e.getAttribute(`src`)!==t&&e.loadURL(t),e.toggleHidden(!1),e.syncDimensions(!0)}}return r=requestAnimationFrame(i),function(){n=!0,cancelAnimationFrame(r)}}function E(e){let t=(0,x.c)(9),{onClick:n,label:r,children:i,isActive:a}=e,o=`p-1.5 rounded transition-colors ${a!==void 0&&a?`bg-background text-foreground shadow-sm`:`text-muted-foreground hover:text-foreground hover:bg-background/50`}`,l;t[0]!==i||t[1]!==n||t[2]!==o?(l=(0,C.jsx)(c,{asChild:!0,children:(0,C.jsx)(`button`,{type:`button`,onClick:n,className:o,children:i})}),t[0]=i,t[1]=n,t[2]=o,t[3]=l):l=t[3];let u;t[4]===r?u=t[5]:(u=(0,C.jsx)(f,{children:r}),t[4]=r,t[5]=u);let d;return t[6]!==l||t[7]!==u?(d=(0,C.jsxs)(s,{children:[l,u]}),t[6]=l,t[7]=u,t[8]=d):d=t[8],d}function D(){let{activeMainTab:e,devServerUrl:s,browserResetTrigger:c}=v(),l=b(e=>e.selectedProjectId),f=b(e=>e.projects).find(e=>e.projectId===l),[h,_]=(0,S.useState)(``),[x,D]=(0,S.useState)(``),[O,k]=(0,S.useState)(``),[A,j]=(0,S.useState)(`desktop`),M=(0,S.useRef)(null),N=(0,S.useRef)(O),P=(0,S.useRef)(null),F=(0,S.useRef)(null),I=t(),L=e===`browser`;N.current=O,(0,S.useEffect)(()=>{D(``),k(``),_(``);let e=M.current;e&&(e.src=``),P.current&&(P.current.src=``)},[c]),(0,S.useEffect)(()=>{if(!s)return;let e=w(s);_(e),D(e),k(e)},[s]);let R=(0,S.useCallback)(e=>{M.current=e,e&&T(e,N.current)},[]);(0,S.useEffect)(()=>{let e=M.current;if(!(!I||!e||!O))return T(e,O)},[O,I,x]),(0,S.useEffect)(()=>{let e=M.current;!I||!e||(e.toggleHidden(!L),L&&requestAnimationFrame(()=>{e.syncDimensions(!0)}))},[L,I,x]),(0,S.useEffect)(()=>{let e=F.current,t=M.current;if(!I||!e||!t)return;let n=new IntersectionObserver(e=>{let n=e.some(e=>e.isIntersecting);t.toggleHidden(!n),n&&t.syncDimensions(!0)},{threshold:0});return n.observe(e),function(){n.disconnect()}},[I,x]),(0,S.useEffect)(()=>{let e=M.current;if(!I||!e)return;function t(e){let t=typeof e.detail==`string`?e.detail:x;t&&(D(t),k(``),_(t))}function n(e){let t=typeof e.detail==`string`?e.detail:x;t&&(D(t),_(t))}function r(e){let t=e.detail,n=typeof t==`string`?t:typeof t==`object`&&t&&`url`in t?String(t.url):``;n&&i(n)}return e.on(`did-navigate`,t),e.on(`did-navigate-in-page`,n),e.on(`new-window-open`,r),function(){e.off(`did-navigate`,t),e.off(`did-navigate-in-page`,n),e.off(`new-window-open`,r)}},[x,I]);function z(e){let t=w(e);t&&(_(t),D(t),k(t))}function B(e){e.key===`Enter`&&z(h)}function V(){if(I){let e=M.current;e&&e.reload();return}let e=P.current;if(!e)return;let t=e.src;e.src=``,requestAnimationFrame(()=>{e.src=t})}let H={desktop:{width:`100%`,height:`100%`},tablet:{width:`768px`,height:`1024px`},mobile:{width:`375px`,height:`667px`}}[A];function U(){return I?(0,S.createElement)(`electrobun-webview`,{ref:R,src:x,renderer:`native`,className:`block h-full w-full bg-background`}):(0,C.jsx)(`iframe`,{ref:P,src:x,className:`h-full w-full border-none`,title:`Browser`})}return(0,C.jsx)(u,{children:(0,C.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col overflow-hidden`,children:[(0,C.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2 border-b border-border px-3 py-2`,children:[(0,C.jsx)(n,{type:`text`,value:h,onChange:e=>_(e.target.value),onKeyDown:B,placeholder:`Enter URL...`,className:p(`flex-1 rounded-full bg-muted font-mono`),spellCheck:!1}),x&&(0,C.jsx)(E,{onClick:V,label:`Refresh page`,children:(0,C.jsx)(d,{size:15})}),x&&(0,C.jsxs)(`div`,{className:`flex items-center rounded-md bg-muted p-0.5`,children:[(0,C.jsx)(E,{onClick:()=>j(`desktop`),label:`Desktop view`,isActive:A===`desktop`,children:(0,C.jsx)(g,{size:15})}),(0,C.jsx)(E,{onClick:()=>j(`tablet`),label:`Tablet view`,isActive:A===`tablet`,children:(0,C.jsx)(a,{size:15})}),(0,C.jsx)(E,{onClick:()=>j(`mobile`),label:`Mobile view`,isActive:A===`mobile`,children:(0,C.jsx)(o,{size:15})})]}),x&&(0,C.jsx)(E,{onClick:()=>void i(x),label:`Open in external browser`,children:(0,C.jsx)(r,{size:15})})]}),x?(0,C.jsx)(`div`,{ref:F,className:`flex min-h-0 flex-1 items-center justify-center bg-background`,children:(0,C.jsx)(`div`,{className:`overflow-hidden border border-border bg-background shadow-sm ${A===`desktop`?`h-full w-full rounded-none border-0 shadow-none`:`rounded-lg`}`,style:{width:H.width,height:H.height,maxWidth:`100%`,maxHeight:`100%`},children:U()})}):(0,C.jsx)(`div`,{className:`flex flex-1 flex-col items-center justify-center gap-6 text-muted-foreground`,children:l&&f?.runCommand?(0,C.jsx)(y,{projectId:l,runCommand:f.runCommand,large:!0}):(0,C.jsx)(`p`,{className:m.body,children:`Enter a URL to browse`})})]})})}export{D as BrowserTab};
@@ -1 +0,0 @@
1
- import{Ar as e,Dr as ee,Ea as te,Mr as t,Or as n,Xi as r,ci as i,fr as a,hr as o,ji as s,jr as c,kr as l,mr as u,pr as d,wi as f,wr as p,yo as m}from"./dialogs-config-DZKtVbNK.js";import{n as ne}from"./onboarding-CxtzQldG.js";import{O as h}from"./index-DjD2SPNZ.js";var g=m(),_=s();function v(s){let m=(0,g.c)(57),{open:v,onOpenChange:y,commitMessage:b,onCommitMessageChange:x,autoGenerateCommitMessage:S,onAutoGenerateChange:C,isGeneratingMessage:w,isLoading:T,onGenerateMessage:E,onCommit:D,currentBranch:O}=s,k;m[0]===Symbol.for(`react.memo_cache_sentinel`)?(k=(0,_.jsx)(t,{children:`Commit Changes`}),m[0]=k):k=m[0];let A;m[1]===O?A=m[2]:(A=(0,_.jsxs)(c,{children:[k,(0,_.jsxs)(l,{children:[`Enter a commit message for your changes on branch `,O]})]}),m[1]=O,m[2]=A);let j;m[3]===Symbol.for(`react.memo_cache_sentinel`)?(j=(0,_.jsx)(p,{htmlFor:`commit-message`,children:`Commit Message`}),m[3]=j):j=m[3];let M;m[4]===x?M=m[5]:(M=e=>x(e.target.value),m[4]=x,m[5]=M);let N;m[6]!==b||m[7]!==M?(N=(0,_.jsx)(h,{id:`commit-message`,placeholder:`Enter commit message...`,value:b,onChange:M,rows:4,className:`pr-10`}),m[6]=b,m[7]=M,m[8]=N):N=m[8];let P=w||T,F;m[9]===w?F=m[10]:(F=w?(0,_.jsx)(te,{className:`h-3.5 w-3.5 animate-spin`}):(0,_.jsx)(r,{className:`h-3.5 w-3.5`}),m[9]=w,m[10]=F);let I;m[11]!==E||m[12]!==P||m[13]!==F?(I=(0,_.jsx)(o,{asChild:!0,children:(0,_.jsx)(i,{type:`button`,variant:`ghost`,size:`icon`,className:`absolute top-2 right-2 h-6 w-6`,onClick:E,disabled:P,children:F})}),m[11]=E,m[12]=P,m[13]=F,m[14]=I):I=m[14];let L=w?`Generating commit message...`:`Generate commit message with AI`,R;m[15]===L?R=m[16]:(R=(0,_.jsx)(d,{children:L}),m[15]=L,m[16]=R);let z;m[17]!==R||m[18]!==I?(z=(0,_.jsx)(u,{children:(0,_.jsxs)(a,{children:[I,R]})}),m[17]=R,m[18]=I,m[19]=z):z=m[19];let B;m[20]!==z||m[21]!==N?(B=(0,_.jsxs)(`div`,{className:`grid gap-2`,children:[j,(0,_.jsxs)(`div`,{className:`relative`,children:[N,z]})]}),m[20]=z,m[21]=N,m[22]=B):B=m[22];let V;m[23]===C?V=m[24]:(V=e=>C(e===!0),m[23]=C,m[24]=V);let H;m[25]!==S||m[26]!==V?(H=(0,_.jsx)(ne,{id:`auto-generate`,checked:S,onCheckedChange:V}),m[25]=S,m[26]=V,m[27]=H):H=m[27];let U;m[28]===Symbol.for(`react.memo_cache_sentinel`)?(U=(0,_.jsx)(p,{htmlFor:`auto-generate`,className:f.labelNormal,children:`Auto generate commit messages`}),m[28]=U):U=m[28];let W;m[29]===H?W=m[30]:(W=(0,_.jsxs)(`div`,{className:`flex items-center gap-2`,children:[H,U]}),m[29]=H,m[30]=W);let G;m[31]!==B||m[32]!==W?(G=(0,_.jsxs)(`div`,{className:`grid gap-4 py-4`,children:[B,W]}),m[31]=B,m[32]=W,m[33]=G):G=m[33];let K;m[34]===y?K=m[35]:(K=()=>y(!1),m[34]=y,m[35]=K);let q;m[36]!==T||m[37]!==K?(q=(0,_.jsx)(i,{variant:`outline`,onClick:K,disabled:T,children:`Cancel`}),m[36]=T,m[37]=K,m[38]=q):q=m[38];let J;m[39]!==b||m[40]!==T?(J=T||!b.trim(),m[39]=b,m[40]=T,m[41]=J):J=m[41];let Y=T?`Committing...`:`Commit`,X;m[42]!==D||m[43]!==J||m[44]!==Y?(X=(0,_.jsx)(i,{onClick:D,disabled:J,children:Y}),m[42]=D,m[43]=J,m[44]=Y,m[45]=X):X=m[45];let Z;m[46]!==q||m[47]!==X?(Z=(0,_.jsxs)(e,{children:[q,X]}),m[46]=q,m[47]=X,m[48]=Z):Z=m[48];let Q;m[49]!==G||m[50]!==A||m[51]!==Z?(Q=(0,_.jsxs)(n,{children:[A,G,Z]}),m[49]=G,m[50]=A,m[51]=Z,m[52]=Q):Q=m[52];let $;return m[53]!==y||m[54]!==v||m[55]!==Q?($=(0,_.jsx)(ee,{open:v,onOpenChange:y,children:Q}),m[53]=y,m[54]=v,m[55]=Q,m[56]=$):$=m[56],$}export{v as CommitDialog};
@@ -1 +0,0 @@
1
- import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{ji as t,no as n,so as r,ui as i,uo as a,wi as o,xo as s,yo as c}from"./dialogs-config-DZKtVbNK.js";import{_ as l,b as u,d,f,g as p,h as m,m as h,p as g,u as _,v,x as y,y as b}from"./react-vendor-Ba8DSNiO.js";var x=c(),S=e(s(),1),C=t(),w=l,T=y,E=S.forwardRef((e,t)=>{let n=(0,x.c)(14),a,s,c,l;n[0]===e?(a=n[1],s=n[2],c=n[3],l=n[4]):({className:s,inset:c,children:a,...l}=e,n[0]=e,n[1]=a,n[2]=s,n[3]=c,n[4]=l);let d;n[5]!==s||n[6]!==c?(d=i(i(o.body,`flex cursor-default select-none items-center rounded-sm px-2 py-1.5 outline-none focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground`),c&&`pl-8`,s),n[5]=s,n[6]=c,n[7]=d):d=n[7];let f;n[8]===Symbol.for(`react.memo_cache_sentinel`)?(f=(0,C.jsx)(r,{className:`ml-auto h-4 w-4`}),n[8]=f):f=n[8];let p;return n[9]!==a||n[10]!==l||n[11]!==t||n[12]!==d?(p=(0,C.jsxs)(u,{ref:t,className:d,...l,children:[a,f]}),n[9]=a,n[10]=l,n[11]=t,n[12]=d,n[13]=p):p=n[13],p});E.displayName=u.displayName;var D=S.forwardRef((e,t)=>{let n=(0,x.c)(9),r,a;n[0]===e?(r=n[1],a=n[2]):({className:r,...a}=e,n[0]=e,n[1]=r,n[2]=a);let o;n[3]===r?o=n[4]:(o=i(`z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2`,r),n[3]=r,n[4]=o);let s;return n[5]!==a||n[6]!==t||n[7]!==o?(s=(0,C.jsx)(b,{ref:t,className:o,...a}),n[5]=a,n[6]=t,n[7]=o,n[8]=s):s=n[8],s});D.displayName=b.displayName;var O=S.forwardRef((e,t)=>{let n=(0,x.c)(9),r,a;n[0]===e?(r=n[1],a=n[2]):({className:r,...a}=e,n[0]=e,n[1]=r,n[2]=a);let o;n[3]===r?o=n[4]:(o=i(`z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md animate-in fade-in-80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2`,r),n[3]=r,n[4]=o);let s;return n[5]!==a||n[6]!==t||n[7]!==o?(s=(0,C.jsx)(m,{children:(0,C.jsx)(d,{ref:t,className:o,...a})}),n[5]=a,n[6]=t,n[7]=o,n[8]=s):s=n[8],s});O.displayName=d.displayName;var k=S.forwardRef((e,t)=>{let n=(0,x.c)(11),r,a,s;n[0]===e?(r=n[1],a=n[2],s=n[3]):({className:r,inset:a,...s}=e,n[0]=e,n[1]=r,n[2]=a,n[3]=s);let c;n[4]!==r||n[5]!==a?(c=i(i(o.body,`relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50`),a&&`pl-8`,r),n[4]=r,n[5]=a,n[6]=c):c=n[6];let l;return n[7]!==s||n[8]!==t||n[9]!==c?(l=(0,C.jsx)(f,{ref:t,className:c,...s}),n[7]=s,n[8]=t,n[9]=c,n[10]=l):l=n[10],l});k.displayName=f.displayName;var A=S.forwardRef((e,t)=>{let n=(0,x.c)(14),r,s,c,l;n[0]===e?(r=n[1],s=n[2],c=n[3],l=n[4]):({className:c,children:s,checked:r,...l}=e,n[0]=e,n[1]=r,n[2]=s,n[3]=c,n[4]=l);let u;n[5]===c?u=n[6]:(u=i(i(o.body,`relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50`),c),n[5]=c,n[6]=u);let d;n[7]===Symbol.for(`react.memo_cache_sentinel`)?(d=(0,C.jsx)(`span`,{className:`absolute left-2 flex h-3.5 w-3.5 items-center justify-center`,children:(0,C.jsx)(g,{children:(0,C.jsx)(a,{className:`h-4 w-4`})})}),n[7]=d):d=n[7];let f;return n[8]!==r||n[9]!==s||n[10]!==l||n[11]!==t||n[12]!==u?(f=(0,C.jsxs)(_,{ref:t,className:u,checked:r,...l,children:[d,s]}),n[8]=r,n[9]=s,n[10]=l,n[11]=t,n[12]=u,n[13]=f):f=n[13],f});A.displayName=_.displayName;var j=S.forwardRef((e,t)=>{let r=(0,x.c)(12),a,s,c;r[0]===e?(a=r[1],s=r[2],c=r[3]):({className:s,children:a,...c}=e,r[0]=e,r[1]=a,r[2]=s,r[3]=c);let l;r[4]===s?l=r[5]:(l=i(i(o.body,`relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50`),s),r[4]=s,r[5]=l);let u;r[6]===Symbol.for(`react.memo_cache_sentinel`)?(u=(0,C.jsx)(`span`,{className:`absolute left-2 flex h-3.5 w-3.5 items-center justify-center`,children:(0,C.jsx)(g,{children:(0,C.jsx)(n,{className:`h-2 w-2 fill-current`})})}),r[6]=u):u=r[6];let d;return r[7]!==a||r[8]!==c||r[9]!==t||r[10]!==l?(d=(0,C.jsxs)(p,{ref:t,className:l,...c,children:[u,a]}),r[7]=a,r[8]=c,r[9]=t,r[10]=l,r[11]=d):d=r[11],d});j.displayName=p.displayName;var M=S.forwardRef((e,t)=>{let n=(0,x.c)(11),r,a,s;n[0]===e?(r=n[1],a=n[2],s=n[3]):({className:r,inset:a,...s}=e,n[0]=e,n[1]=r,n[2]=a,n[3]=s);let c;n[4]!==r||n[5]!==a?(c=i(i(o.body,`px-2 py-1.5 font-semibold text-foreground`),a&&`pl-8`,r),n[4]=r,n[5]=a,n[6]=c):c=n[6];let l;return n[7]!==s||n[8]!==t||n[9]!==c?(l=(0,C.jsx)(h,{ref:t,className:c,...s}),n[7]=s,n[8]=t,n[9]=c,n[10]=l):l=n[10],l});M.displayName=h.displayName;var N=S.forwardRef((e,t)=>{let n=(0,x.c)(9),r,a;n[0]===e?(r=n[1],a=n[2]):({className:r,...a}=e,n[0]=e,n[1]=r,n[2]=a);let o;n[3]===r?o=n[4]:(o=i(`-mx-1 my-1 h-px bg-border`,r),n[3]=r,n[4]=o);let s;return n[5]!==a||n[6]!==t||n[7]!==o?(s=(0,C.jsx)(v,{ref:t,className:o,...a}),n[5]=a,n[6]=t,n[7]=o,n[8]=s):s=n[8],s});N.displayName=v.displayName;var P=e=>{let t=(0,x.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let a;t[3]===n?a=t[4]:(a=i(o.compact,`ml-auto tracking-widest text-muted-foreground`,n),t[3]=n,t[4]=a);let s;return t[5]!==r||t[6]!==a?(s=(0,C.jsx)(`span`,{className:a,...r}),t[5]=r,t[6]=a,t[7]=s):s=t[7],s};P.displayName=`ContextMenuShortcut`;export{T as a,N as i,O as n,k as r,w as t};
@@ -1 +0,0 @@
1
- import{Ar as e,Dr as t,Er as n,Mr as r,Or as i,ci as a,ji as o,jr as s,kr as c,wi as l,wr as u,yo as d}from"./dialogs-config-DZKtVbNK.js";import{n as f}from"./onboarding-CxtzQldG.js";import{O as p}from"./index-DjD2SPNZ.js";var m=d(),h=o();function g(o){let d=(0,m.c)(48),{open:g,onOpenChange:_,repoName:v,onRepoNameChange:y,repoDescription:b,onRepoDescriptionChange:x,isPrivateRepo:S,onPrivateRepoChange:C,isLoading:w,onCreateRepo:T}=o,E;d[0]!==_||d[1]!==x||d[2]!==y?(E=e=>{e||(y(``),x(``)),_(e)},d[0]=_,d[1]=x,d[2]=y,d[3]=E):E=d[3];let D;d[4]===Symbol.for(`react.memo_cache_sentinel`)?(D=(0,h.jsxs)(s,{children:[(0,h.jsx)(r,{children:`Create GitHub Repository`}),(0,h.jsx)(c,{children:`Create a new GitHub repository and push your local repository`})]}),d[4]=D):D=d[4];let O;d[5]===Symbol.for(`react.memo_cache_sentinel`)?(O=(0,h.jsx)(u,{htmlFor:`repo-name`,children:`Repository Name (optional)`}),d[5]=O):O=d[5];let k;d[6]===y?k=d[7]:(k=e=>y(e.target.value),d[6]=y,d[7]=k);let A;d[8]!==v||d[9]!==k?(A=(0,h.jsxs)(`div`,{className:`grid gap-2`,children:[O,(0,h.jsx)(n,{id:`repo-name`,placeholder:`Leave empty to use current folder name`,value:v,onChange:k})]}),d[8]=v,d[9]=k,d[10]=A):A=d[10];let j;d[11]===Symbol.for(`react.memo_cache_sentinel`)?(j=(0,h.jsx)(u,{htmlFor:`repo-description`,children:`Description (optional)`}),d[11]=j):j=d[11];let M;d[12]===x?M=d[13]:(M=e=>x(e.target.value),d[12]=x,d[13]=M);let N;d[14]!==b||d[15]!==M?(N=(0,h.jsxs)(`div`,{className:`grid gap-2`,children:[j,(0,h.jsx)(p,{id:`repo-description`,placeholder:`Enter repository description...`,value:b,onChange:M,rows:3})]}),d[14]=b,d[15]=M,d[16]=N):N=d[16];let P;d[17]===C?P=d[18]:(P=e=>C(e===!0),d[17]=C,d[18]=P);let F;d[19]!==S||d[20]!==P?(F=(0,h.jsx)(f,{id:`repo-private`,checked:S,onCheckedChange:P}),d[19]=S,d[20]=P,d[21]=F):F=d[21];let I;d[22]===Symbol.for(`react.memo_cache_sentinel`)?(I=(0,h.jsx)(u,{htmlFor:`repo-private`,className:l.labelNormal,children:`Private repository`}),d[22]=I):I=d[22];let L;d[23]===F?L=d[24]:(L=(0,h.jsxs)(`div`,{className:`flex items-center gap-2`,children:[F,I]}),d[23]=F,d[24]=L);let R;d[25]!==L||d[26]!==A||d[27]!==N?(R=(0,h.jsxs)(`div`,{className:`grid gap-4 py-4`,children:[A,N,L]}),d[25]=L,d[26]=A,d[27]=N,d[28]=R):R=d[28];let z;d[29]===_?z=d[30]:(z=()=>_(!1),d[29]=_,d[30]=z);let B;d[31]!==w||d[32]!==z?(B=(0,h.jsx)(a,{variant:`outline`,onClick:z,disabled:w,children:`Cancel`}),d[31]=w,d[32]=z,d[33]=B):B=d[33];let V=w?`Creating...`:`Create & Push`,H;d[34]!==w||d[35]!==T||d[36]!==V?(H=(0,h.jsx)(a,{onClick:T,disabled:w,children:V}),d[34]=w,d[35]=T,d[36]=V,d[37]=H):H=d[37];let U;d[38]!==B||d[39]!==H?(U=(0,h.jsxs)(e,{children:[B,H]}),d[38]=B,d[39]=H,d[40]=U):U=d[40];let W;d[41]!==R||d[42]!==U?(W=(0,h.jsxs)(i,{children:[D,R,U]}),d[41]=R,d[42]=U,d[43]=W):W=d[43];let G;return d[44]!==g||d[45]!==E||d[46]!==W?(G=(0,h.jsx)(t,{open:g,onOpenChange:E,children:W}),d[44]=g,d[45]=E,d[46]=W,d[47]=G):G=d[47],G}export{g as CreateRepoDialog};
@@ -1,3 +0,0 @@
1
- import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{Ar as t,Ba as n,Ca as r,Dr as i,G as a,Ii as o,Mr as s,Or as c,Q as l,Ta as u,Ua as d,Ut as f,Va as p,c as m,ci as h,co as ee,fr as g,ga as _,ha as v,hr as y,it as b,ji as x,jr as S,kn as C,kt as w,pr as T,sa as E,so as D,ui as O,wi as k,xa as A,xo as j,yo as M}from"./dialogs-config-DZKtVbNK.js";import{C as N}from"./react-vendor-Ba8DSNiO.js";import{t as P}from"./monaco-CZnIWXyV.js";import{c as F}from"./onboarding-CxtzQldG.js";import{O as I,a as te,l as ne,n as L,o as re}from"./history-view-jX3PPID6.js";import{n as ie}from"./utils-BlXPFbY9.js";import{A as ae,D as oe,O as se,a as ce,i as le,j as ue,k as de,n as fe,p as pe,r as me,u as he}from"./index-DjD2SPNZ.js";import{a as R,n as z,r as ge,t as _e}from"./context-menu-C7FTMa2c.js";var B=e(j(),1),V=M(),H=x();function ve(e){let t=(0,V.c)(17),{children:n,title:r,headerAction:i,footer:a}=e,o;t[0]===r?o=t[1]:(o=r&&(0,H.jsx)(`span`,{className:k.sectionTitle,children:r}),t[0]=r,t[1]=o);let s;t[2]===o?s=t[3]:(s=(0,H.jsx)(`div`,{className:`flex items-center gap-2`,children:o}),t[2]=o,t[3]=s);let c;t[4]===i?c=t[5]:(c=i&&(0,H.jsx)(`div`,{className:`flex items-center gap-2 ml-auto`,children:i}),t[4]=i,t[5]=c);let l;t[6]!==s||t[7]!==c?(l=(0,H.jsxs)(`div`,{className:`flex items-center justify-between border-b border-sidebar-border px-4 py-6`,children:[s,c]}),t[6]=s,t[7]=c,t[8]=l):l=t[8];let u;t[9]===n?u=t[10]:(u=(0,H.jsx)(m,{className:`flex-1`,children:n}),t[9]=n,t[10]=u);let d;t[11]===a?d=t[12]:(d=a&&(0,H.jsx)(`div`,{className:`border-t border-sidebar-border`,children:a}),t[11]=a,t[12]=d);let f;return t[13]!==l||t[14]!==u||t[15]!==d?(f=(0,H.jsxs)(`div`,{className:`flex flex-col h-full`,children:[l,u,d]}),t[13]=l,t[14]=u,t[15]=d,t[16]=f):f=t[16],f}function ye(e){let t=[],n={};return e.forEach((e,r)=>{let i=e.path.split(`/`),a=t,o=``;for(let e=0;e<i.length-1;e++){if(o=o?`${o}/${i[e]}`:i[e],!n[o]){let t={id:`dir:${o}`,name:i[e],children:[]};n[o]=t,a.push(t)}a=n[o].children}a.push({id:`file:${e.path}`,name:i[i.length-1],fileIndex:r,status:e.status})}),t}var be={added:`text-green-500`,deleted:`text-red-500`,untracked:`text-green-500`,renamed:`text-blue-500`,modified:`text-orange-500`},U={added:`A`,deleted:`D`,untracked:`U`,renamed:`R`,modified:`M`};function W(e){return O(O(k.compact,`status-badge font-mono font-semibold`),be[e]??`text-orange-500`)}function G(e){return U[e]??`M`}var xe=I(e=>(0,H.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,H.jsxs)(`span`,{className:e.v0,children:[e.v1,` file`,e.v2]}),(0,H.jsxs)(`span`,{className:e.v3,children:[`+`,e.v4]}),(0,H.jsxs)(`span`,{className:e.v5,children:[`-`,e.v6]})]}),{name:`JSX_stats_1`,portals:[`v1`,`v2`,`v4`,`v6`]}),K=I(e=>e.v0,{name:`DiffTree_1`,portals:[`v0`]}),Se=I(e=>e.v0,{name:`DiffTree_2`,portals:[`v0`]}),q=I(e=>e.v0,{name:`DiffTree_3`,portals:[`v0`]}),Ce=function(e){let t=(0,V.c)(32),{treeData:r,files:i,error:a,selectedFileIndex:o,onFileSelect:s,onRevertFile:c}=e,l;t[0]===i?l=t[1]:(l=i.reduce(we,0),t[0]=i,t[1]=l);let u=l,f;t[2]===i?f=t[3]:(f=i.reduce(X,0),t[2]=i,t[3]=f);let m=f,h;t[4]===Symbol.for(`react.memo_cache_sentinel`)?(h=O(k.compact,`text-muted-foreground`),t[4]=h):h=t[4];let ee=i.length,g=i.length===1?``:`s`,_;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(_=O(k.compact,`text-green-500`),t[5]=_):_=t[5];let v;t[6]===Symbol.for(`react.memo_cache_sentinel`)?(v=O(k.compact,`text-red-500`),t[6]=v):v=t[6];let y;t[7]!==i.length||t[8]!==g||t[9]!==u||t[10]!==m?(y=(0,H.jsx)(xe,{v0:h,v1:ee,v2:g,v3:_,v4:u,v5:v,v6:m}),t[7]=i.length,t[8]=g,t[9]=u,t[10]=m,t[11]=y):y=t[11];let b=y;if(a){let e;t[12]===Symbol.for(`react.memo_cache_sentinel`)?(e=O(k.compact,`text-destructive text-center`),t[12]=e):e=t[12];let n;t[13]===a?n=t[14]:(n=(0,H.jsx)(`div`,{className:`flex-1 flex items-center justify-center p-4 pt-7 pb-2`,children:(0,H.jsx)(`p`,{className:e,children:a})}),t[13]=a,t[14]=n);let r;return t[15]!==b||t[16]!==n?(r=(0,H.jsx)(K,{v0:(0,H.jsx)(ve,{title:`Review Changes`,headerAction:b,children:n})}),t[15]=b,t[16]=n,t[17]=r):r=t[17],r}if(i.length===0){let e;t[18]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,H.jsx)(`div`,{className:`flex-1 flex items-center justify-center p-4 pt-7 pb-2`,children:(0,H.jsx)(`p`,{className:O(k.compact,k.bodyMuted,`text-center`),children:`No changes to review`})}),t[18]=e):e=t[18];let n;return t[19]===b?n=t[20]:(n=(0,H.jsx)(Se,{v0:(0,H.jsx)(ve,{title:`Review Changes`,headerAction:b,children:e})}),t[19]=b,t[20]=n),n}let x;t[21]!==i||t[22]!==s||t[23]!==c||t[24]!==o?(x=(e,t)=>{let{isOpen:r,toggle:a}=t,l=!!e.children,u=(0,H.jsxs)(F,{onClick:()=>{l?a():e.fileIndex!==void 0&&s(e.fileIndex)},selected:!l&&e.fileIndex===o,className:`gap-1.5`,children:[l?(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(D,{className:O(`h-3.5 w-3.5 shrink-0 text-muted-foreground transition-transform`,r&&`rotate-90`)}),r?(0,H.jsx)(p,{className:`h-3.5 w-3.5 shrink-0 text-muted-foreground`}):(0,H.jsx)(n,{className:`h-3.5 w-3.5 shrink-0 text-muted-foreground`})]}):(0,H.jsx)(d,{className:`h-3.5 w-3.5 shrink-0 text-muted-foreground`}),(0,H.jsx)(`span`,{className:`truncate flex-1 min-w-0`,children:e.name}),!l&&e.status&&(0,H.jsx)(`span`,{className:W(e.status),children:G(e.status)})]});return l?u:(0,H.jsxs)(_e,{children:[(0,H.jsx)(R,{asChild:!0,children:u}),(0,H.jsx)(z,{children:(0,H.jsxs)(ge,{onClick:()=>{e.fileIndex!==void 0&&c?.(i[e.fileIndex])},children:[(0,H.jsx)(E,{className:`mr-2 h-3.5 w-3.5`}),`Revert Change`]})})]})},t[21]=i,t[22]=s,t[23]=c,t[24]=o,t[25]=x):x=t[25];let S;t[26]!==x||t[27]!==r?(S=(0,H.jsx)(`div`,{className:`flex-1 overflow-y-auto pt-3 pb-2 px-1`,children:(0,H.jsx)(oe,{nodes:r,defaultOpen:!0,resetKey:r,indent:16,childContainerClassName:`ml-4 border-l border-sidebar-border pl-2`,renderNode:x})}),t[26]=x,t[27]=r,t[28]=S):S=t[28];let C;return t[29]!==b||t[30]!==S?(C=(0,H.jsx)(q,{v0:(0,H.jsx)(ve,{title:`Review Changes`,headerAction:b,children:S})}),t[29]=b,t[30]=S,t[31]=C):C=t[31],C};function J(e){return e.type===`add`}function Y(e,t){return e+t.changes.filter(J).length}function we(e,t){return e+t.hunks.reduce(Y,0)}function Te(e){return e.type===`delete`}function Ee(e,t){return e+t.changes.filter(Te).length}function X(e,t){return e+t.hunks.reduce(Ee,0)}function De(e){let t=(0,V.c)(2),{isOpen:n}=e,r=n===void 0||n?`ml-[-40px]`:``,i;return t[0]===r?i=t[1]:(i=(0,H.jsx)(fe,{withHandle:!0,className:r}),t[0]=r,t[1]=i),i}function Oe(e){let n=(0,V.c)(36),{open:r,lineNumber:a,lineContent:o,initialComment:l,isEditing:u,onSave:d,onDelete:f,onClose:p}=e,[m,ee]=(0,B.useState)((l===void 0?``:l)??``),g;n[0]!==d||n[1]!==m?(g=()=>{m.trim()&&d(m.trim())},n[0]=d,n[1]=m,n[2]=g):g=n[2];let _=g,v;n[3]===_?v=n[4]:(v=e=>{(e.metaKey||e.ctrlKey)&&e.key===`Enter`&&(e.preventDefault(),_())},n[3]=_,n[4]=v);let y=v,b;n[5]===p?b=n[6]:(b=e=>{e||p()},n[5]=p,n[6]=b);let x;n[7]===a?x=n[8]:(x=(0,H.jsx)(S,{children:(0,H.jsxs)(s,{children:[`Comment on line `,a]})}),n[7]=a,n[8]=x);let C;n[9]===Symbol.for(`react.memo_cache_sentinel`)?(C=O(k.compact,`font-mono rounded bg-muted px-3 py-2 text-muted-foreground overflow-x-auto whitespace-pre`),n[9]=C):C=n[9];let w=o||` `,T;n[10]===w?T=n[11]:(T=(0,H.jsx)(`div`,{className:C,children:w}),n[10]=w,n[11]=T);let E;n[12]===Symbol.for(`react.memo_cache_sentinel`)?(E=e=>ee(e.target.value),n[12]=E):E=n[12];let D;n[13]!==y||n[14]!==m?(D=(0,H.jsx)(se,{autoFocus:!0,placeholder:`Add a comment... (Cmd+Enter to save)`,value:m,onChange:E,onKeyDown:y,rows:12,className:`resize-none text-base`}),n[13]=y,n[14]=m,n[15]=D):D=n[15];let A;n[16]!==u||n[17]!==f?(A=u&&f&&(0,H.jsx)(h,{variant:`destructive`,size:`sm`,onClick:f,className:`mr-auto`,children:`Delete`}),n[16]=u,n[17]=f,n[18]=A):A=n[18];let j;n[19]===m?j=n[20]:(j=m.trim(),n[19]=m,n[20]=j);let M=!j,N;n[21]!==_||n[22]!==M?(N=(0,H.jsx)(h,{size:`sm`,onClick:_,disabled:M,children:`Save`}),n[21]=_,n[22]=M,n[23]=N):N=n[23];let P;n[24]!==A||n[25]!==N?(P=(0,H.jsxs)(t,{className:`gap-2 sm:gap-0`,children:[A,N]}),n[24]=A,n[25]=N,n[26]=P):P=n[26];let F;n[27]!==D||n[28]!==P||n[29]!==x||n[30]!==T?(F=(0,H.jsxs)(c,{className:`max-w-2xl`,children:[x,T,D,P]}),n[27]=D,n[28]=P,n[29]=x,n[30]=T,n[31]=F):F=n[31];let I;return n[32]!==r||n[33]!==F||n[34]!==b?(I=(0,H.jsx)(i,{open:r,onOpenChange:b,children:F}),n[32]=r,n[33]=F,n[34]=b,n[35]=I):I=n[35],I}function ke(e,t){return`git-diff:${e}:${t}`}function Ae({threadId:e,onExit:t,loadVersion:n}){let i=te(ke(e,n),()=>b(e)),s=ae(),c=ue(e=>e.diffComments),d=ue(e=>e.projectModelSelections),{resolvedTheme:p}=ie(),m=pe(),[x,S]=(0,B.useState)(i.files||[]),[E,j]=(0,B.useState)(null),[M,F]=(0,B.useState)(0),[I,ne]=(0,B.useState)(!1),[L,re]=(0,B.useState)(!1),[oe,se]=(0,B.useState)(!1),[fe,R]=(0,B.useState)(!0),z=(0,B.useRef)(null);(0,B.useEffect)(()=>{R(!0)},[e]);let ge=(0,B.useCallback)(e=>{F(e),m&&R(!1)},[m]),_e=(0,B.useCallback)(()=>{R(!0)},[]),V=m&&!fe,ve=m&&fe,be=m&&!fe,U=(0,B.useMemo)(()=>c[e]??[],[c,e]),W=(0,B.useCallback)(t=>{let n=c[e]??[],r=typeof t==`function`?t(n):t;s({type:de.SetDiffComments,threadId:e,comments:r})},[s,e,c]),[G,xe]=(0,B.useState)(null),[K,Se]=(0,B.useState)(null),[q,J]=(0,B.useState)(null),Y=(0,B.useRef)(null),we=(0,B.useRef)(U),Te=(0,B.useRef)(G),Ee=(0,B.useRef)({isFullView:I,selectedFileIndex:M,files:x}),X=(0,B.useRef)({original:[],modified:[]}),Ae=(0,B.useRef)(!0);(0,B.useEffect)(()=>{we.current=U},[U]),(0,B.useEffect)(()=>{Te.current=G},[G]),(0,B.useEffect)(()=>{Ee.current={isFullView:I,selectedFileIndex:M,files:x}},[I,M,x]);let je=(0,B.useCallback)(()=>{z.current&&(L?z.current.expand():z.current.collapse())},[L]),Me=(0,B.useCallback)(async()=>{if(e){j(null);try{S((await b(e)).files||[]),F(0)}catch(e){j(e instanceof Error?e.message:`Failed to load diff`)}}},[e]),Ne=(0,B.useCallback)(async t=>{try{await f(e,t.path),await Me()}catch(e){j(e instanceof Error?e.message:`Failed to revert file`)}},[e,Me]),Pe=(0,B.useRef)(!1);(0,B.useEffect)(()=>{if((c[e]??[]).length>0){Pe.current=!0;return}w(e).then(t=>{t.diffComments&&t.diffComments.length>0&&s({type:de.SetDiffComments,threadId:e,comments:t.diffComments}),Pe.current=!0}).catch(()=>{Pe.current=!0})},[e]),(0,B.useEffect)(()=>{Pe.current&&C(e,{diffComments:U}).catch(()=>{})},[e,U]);let Fe=(0,B.useMemo)(()=>ye(x),[x]),Z=e=>{if(e.hunks.length===0)return null;let t=1/0,n=0;return e.hunks.forEach(e=>{let r=Math.min(e.oldStart,e.newStart),i=e.oldStart+e.oldLines,a=e.newStart+e.newLines,o=Math.max(i,a);t=Math.min(t,r),n=Math.max(n,o)}),t===1/0?null:{startLine:Math.max(1,t-2),endLine:n+2}},Ie=(e,t,n)=>e.split(`
2
- `).slice(t-1,n).join(`
3
- `),Le=e=>{let t=Z(e);return t?t.startLine<=1:!0},Re=e=>({ts:`typescript`,tsx:`typescript`,js:`javascript`,jsx:`javascript`,json:`json`,md:`markdown`,css:`css`,scss:`scss`,html:`html`,py:`python`,rb:`ruby`,go:`go`,rs:`rust`,java:`java`,kt:`kotlin`,swift:`swift`,c:`c`,cpp:`cpp`,h:`c`,hpp:`cpp`,sh:`shell`,yaml:`yaml`,yml:`yaml`,xml:`xml`,sql:`sql`})[e.split(`.`).pop()??``]||`plaintext`,Q=x[M],ze=Q?I?Q.oldContent:(()=>{let e=Z(Q);return e?Ie(Q.oldContent,e.startLine,e.endLine):Q.oldContent})():``,Be=Q?I?Q.newContent:(()=>{let e=Z(Q);return e?Ie(Q.newContent,e.startLine,e.endLine):Q.newContent})():``,$=(0,B.useCallback)(()=>{if(!Ae.current)return;let e=Y.current;if(!e)return;let{isFullView:t,selectedFileIndex:n,files:r}=Ee.current,i=we.current,a=Te.current,o=r[n];if(!o)return;let s=(e,r)=>{let s=t?null:Z(o),c=i.filter(e=>e.fileIndex===n&&e.side===r),l=new Set(c.map(e=>s?e.lineNumber-s.startLine+1:e.lineNumber)),u=e.getModel()?.getLineCount()??0,d=[];for(let e=1;e<=u;e++)l.has(e)||d.push({range:{startLineNumber:e,startColumn:1,endLineNumber:e,endColumn:1},options:{isWholeLine:!0,glyphMarginClassName:`diff-gutter-add-comment`,glyphMarginHoverMessage:{value:`$(add) Click to add a comment`},stickiness:P.TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges}});let f=c.map(e=>{let t=s?e.lineNumber-s.startLine+1:e.lineNumber;if(t<1)return null;let n=i.indexOf(e)===a;return{range:{startLineNumber:t,startColumn:1,endLineNumber:t,endColumn:1},options:{isWholeLine:!0,className:n?`diff-comment-active-line`:`diff-comment-marked-line`,glyphMarginClassName:n?`diff-comment-glyph-active`:`diff-comment-glyph`,glyphMarginHoverMessage:{value:e.comment},stickiness:P.TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges}}}).filter(e=>e!==null);d.push(...f);let p=r===`original`?X.current.original:X.current.modified,m=e.deltaDecorations(p,d);r===`original`?X.current.original=m:X.current.modified=m};s(e.getOriginalEditor(),`original`),s(e.getModifiedEditor(),`modified`)},[]);(0,B.useEffect)(()=>{$()},[$,U,G,M,I,Q]),(0,B.useEffect)(()=>()=>{Y.current=null,X.current={original:[],modified:[]}},[M]),(0,B.useEffect)(()=>()=>{Ae.current=!1,Y.current&&=(Y.current.getOriginalEditor().getModel()?.dispose(),Y.current.getModifiedEditor().getModel()?.dispose(),Y.current.dispose(),null),X.current={original:[],modified:[]}},[]);let Ve=(0,B.useCallback)(e=>{Y.current=e;let t=e=>e===P.MouseTargetType.GUTTER_GLYPH_MARGIN||e===P.MouseTargetType.GUTTER_LINE_NUMBERS||e===P.MouseTargetType.GUTTER_LINE_DECORATIONS||e===P.MouseTargetType.GUTTER_VIEW_ZONE,n=(e,n)=>{e.onMouseDown(r=>{if(!r.target?.position||!t(r.target.type))return;let i=r.target.position.lineNumber,{isFullView:a,selectedFileIndex:o,files:s}=Ee.current,c=s[o];if(!c)return;let l=a?null:Z(c),u=l?l.startLine+i-1:i,d=e.getModel()?.getLineContent(i)??``,f=we.current.find(e=>e.fileIndex===o&&e.lineNumber===u&&e.side===n);f?J(f):Se({lineNumber:u,lineContent:d,side:n})})};n(e.getOriginalEditor(),`original`),n(e.getModifiedEditor(),`modified`),setTimeout(()=>{Y.current===e&&$()},150)},[$]),He=(0,B.useCallback)(e=>{if(K&&Q){let t={id:`comment-${Date.now()}`,filePath:Q.path,fileIndex:M,lineNumber:K.lineNumber,lineContent:K.lineContent,comment:e,side:K.side};W(e=>[...e,t]),Se(null)}else q&&(W(t=>t.map(t=>t.id===q.id?{...t,comment:e}:t)),J(null))},[K,q,Q,M,W]),Ue=(0,B.useCallback)(()=>{q&&(W(e=>e.filter(e=>e.id!==q.id)),J(null))},[q,W]),We=(0,B.useCallback)(e=>{if(U.length===0)return;let t=(e%U.length+U.length)%U.length,n=U[t];xe(t),F(n.fileIndex),m&&R(!1),setTimeout(()=>{let e=Y.current;if(!e)return;let t=x[n.fileIndex];if(!t)return;let r=I?null:Z(t),i=r?n.lineNumber-r.startLine+1:n.lineNumber;(n.side===`original`?e.getOriginalEditor():e.getModifiedEditor()).revealLineInCenter(Math.max(1,i)),$()},100)},[U,x,I,$,m]),Ge=(0,B.useCallback)(()=>{We((G??0)-1)},[We,G]),Ke=(0,B.useCallback)(()=>{We((G??-1)+1)},[We,G]),qe=(0,B.useCallback)(async()=>{let n=d[e];if(!n)try{let e=await l(),t=Object.values(e).flat();if(t.length>0)n=t[0];else{console.error(`No models available to process comments`);return}}catch(e){console.error(`Failed to load models:`,e);return}let r=n.id,i=n.provider;try{let{prompt:n}=await a(e,U);W([]),s({type:de.SetPendingChatMessage,message:{threadId:e,message:n,model:r,provider:i}}),t()}catch(e){console.error(`Failed to fix comments:`,e),typeof window<`u`&&window.alert(`Failed to process comments. Please try again.`)}},[U,d,s,e,t,W]),Je={readOnly:!0,renderSideBySide:!m,ignoreTrimWhitespace:!1,renderOverviewRuler:!0,scrollBeyondLastLine:!1,minimap:{enabled:!1},folding:!1,glyphMargin:!0,lineNumbers:Q&&(I||Le(Q))?`on`:`off`,diffWordWrap:`on`,originalEditable:!1,automaticLayout:!0};return(0,H.jsxs)(`div`,{className:`diff-view-root flex h-full flex-col`,children:[(0,H.jsx)(`div`,{className:`diff-body flex flex-1 overflow-hidden`,children:(0,H.jsxs)(le,{direction:`horizontal`,children:[(0,H.jsx)(me,{ref:z,defaultSize:m?100:25,minSize:m?50:12,maxSize:m?100:40,collapsible:!0,collapsedSize:0,onCollapse:()=>re(!0),onExpand:()=>re(!1),className:O(`border-r border-transparent`,V&&`hidden`),children:(0,H.jsx)(`div`,{className:`h-full overflow-hidden`,children:(0,H.jsx)(Ce,{treeData:Fe,files:x,error:E,selectedFileIndex:M,onFileSelect:ge,onRevertFile:Ne})})}),!m&&(0,H.jsx)(De,{isOpen:!L}),(0,H.jsx)(me,{className:O(`overflow-hidden bg-transparent`,ve&&`hidden`),children:(0,H.jsxs)(`div`,{className:`diff-editor-panel flex h-full bg-transparent flex-col overflow-hidden`,children:[(0,H.jsxs)(ce,{className:O(`bg-transparent`,L&&`h-auto py-3 flex-col items-start gap-3 md:flex-row md:items-center md:h-[71px] md:py-0 md:gap-2 justify-between`),children:[(0,H.jsxs)(`div`,{className:`flex items-center gap-2`,children:[be?(0,H.jsxs)(h,{variant:`ghost`,size:`icon`,className:`h-8 w-8 text-muted-foreground shrink-0`,onClick:_e,children:[(0,H.jsx)(v,{className:`h-4 w-4`}),(0,H.jsx)(`span`,{className:`sr-only`,children:`Show file tree`})]}):(0,H.jsxs)(h,{variant:`ghost`,size:`icon`,className:`h-8 w-8 text-muted-foreground shrink-0`,onClick:je,children:[L?(0,H.jsx)(v,{className:`h-4 w-4`}):(0,H.jsx)(_,{className:`h-4 w-4`}),(0,H.jsx)(`span`,{className:`sr-only`,children:`Toggle file tree`})]}),(0,H.jsx)(`span`,{className:O(k.label,`text-foreground`),children:Q?Q.path:`Review Changes`})]}),(0,H.jsxs)(`div`,{className:O(`flex items-center gap-2`,L&&`ml-0`,!L&&`ml-auto`,`md:ml-auto`),children:[(0,H.jsx)(h,{variant:`ghost`,size:`sm`,onClick:()=>ne(e=>!e),disabled:!Q,className:O(k.compact,`h-8 gap-1 px-2`),children:I?(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(A,{className:`h-3 w-3`}),` Show changes only`]}):(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(u,{className:`h-3 w-3`}),` Show full file`]})}),U.length>0&&(0,H.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,H.jsxs)(g,{children:[(0,H.jsx)(y,{asChild:!0,children:(0,H.jsx)(h,{variant:`ghost`,size:`icon`,className:`h-8 w-8 rounded-full`,onClick:Ge,disabled:(G??0)===0,children:(0,H.jsx)(ee,{className:`h-3 w-3`})})}),(0,H.jsx)(T,{children:`Previous comment`})]}),(0,H.jsx)(`span`,{className:O(k.caption,`whitespace-nowrap`),children:U.length===1?`1 Comment`:`Comment ${(G??0)+1} of ${U.length}`}),(0,H.jsxs)(g,{children:[(0,H.jsx)(y,{asChild:!0,children:(0,H.jsx)(h,{variant:`ghost`,size:`icon`,className:`h-8 w-8 rounded-full`,onClick:Ke,disabled:(G??0)===U.length-1,children:(0,H.jsx)(D,{className:`h-3 w-3`})})}),(0,H.jsx)(T,{children:`Next comment`})]})]}),U.length>0&&(0,H.jsxs)(g,{children:[(0,H.jsx)(y,{asChild:!0,children:(0,H.jsxs)(h,{size:`sm`,onClick:qe,className:O(k.compact,`h-8 gap-1 px-3 bg-foreground text-background hover:bg-foreground/90`),children:[(0,H.jsx)(r,{className:`h-3 w-3`}),`Fix all comments`]})}),(0,H.jsx)(T,{children:`Send all comments to Tarsk for resolution`})]})]})]}),(0,H.jsxs)(`div`,{className:`flex-1 bg-transparent relative`,children:[(0,H.jsx)(N,{height:`100%`,language:Re(Q?.path||``),original:ze,modified:Be,theme:p===`dark`?`vs-dark`:`vs-light`,onMount:Ve,options:Je},`diff-${M}`),(0,H.jsxs)(`div`,{className:`pointer-events-none absolute bottom-4 right-4 z-20 flex flex-col items-end gap-3`,children:[oe&&(0,H.jsxs)(`div`,{className:`pointer-events-auto w-[min(100%,48rem)] rounded-2xl bg-background/50 p-4 backdrop-blur-md`,children:[(0,H.jsx)(`div`,{className:`mb-3 flex items-center justify-end`,children:(0,H.jsxs)(h,{variant:`ghost`,size:`icon`,className:`h-8 w-8`,onClick:()=>se(!1),children:[(0,H.jsx)(o,{className:`h-4 w-4`}),(0,H.jsx)(`span`,{className:`sr-only`,children:`Close chat`})]})}),(0,H.jsx)(he,{})]}),!oe&&(0,H.jsxs)(g,{children:[(0,H.jsx)(y,{asChild:!0,children:(0,H.jsxs)(h,{size:`icon`,className:`pointer-events-auto h-12 w-12 rounded-full shadow-lg`,onClick:()=>se(!0),children:[(0,H.jsx)(r,{className:`h-5 w-5`}),(0,H.jsx)(`span`,{className:`sr-only`,children:`Open review chat`})]})}),(0,H.jsx)(T,{children:`Chat about this diff`})]})]})]})]})})]})}),(0,H.jsx)(Oe,{open:K!==null||q!==null,lineNumber:q?.lineNumber??K?.lineNumber??0,lineContent:q?.lineContent??K?.lineContent??``,initialComment:q?.comment,isEditing:q!==null,onSave:He,onDelete:Ue,onClose:()=>{Se(null),J(null)}},`${q?.id??``}-${K?.lineNumber??``}-${K?.side??``}`)]})}function je(e){let t=(0,V.c)(11),[n,r]=(0,B.useState)(0),i;t[0]!==n||t[1]!==e.threadId?(i=function(){re(ke(e.threadId,n)),r(Me)},t[0]=n,t[1]=e.threadId,t[2]=i):i=t[2];let a=i,o;t[3]===Symbol.for(`react.memo_cache_sentinel`)?(o=(0,H.jsx)(ne,{}),t[3]=o):o=t[3];let s=`${e.threadId}:${n}`,c;t[4]!==n||t[5]!==e||t[6]!==s?(c=(0,H.jsx)(B.Suspense,{fallback:o,children:(0,H.jsx)(Ae,{...e,loadVersion:n},s)}),t[4]=n,t[5]=e,t[6]=s,t[7]=c):c=t[7];let l;return t[8]!==a||t[9]!==c?(l=(0,H.jsx)(L,{fallbackTitle:`Failed to load review changes`,onRetry:a,children:c}),t[8]=a,t[9]=c,t[10]=l):l=t[10],l}function Me(e){return e+1}export{je as DiffView,je as default};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/explorer-tree-CPHGgahA.js","assets/rolldown-runtime-aKtaBQYM.js","assets/index-DjD2SPNZ.js","assets/monaco-CZnIWXyV.js","assets/monaco-Br_kD0ds.css","assets/history-view-jX3PPID6.js","assets/dialogs-config-DZKtVbNK.js","assets/onboarding-CxtzQldG.js","assets/whisper-wasm-EGutPGND.js","assets/react-vendor-Ba8DSNiO.js","assets/utils-BlXPFbY9.js","assets/index-jIBJk8xl.css","assets/api-DWU0D34A.js","assets/context-menu-C7FTMa2c.js","assets/ui-components-f8jJJzEo.js","assets/explorer-view-BTvhSMDQ.js"])))=>i.map(i=>d[i]);
2
- import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{c as ee,ji as t,ui as n,wi as r,xo as i,yo as a}from"./dialogs-config-DZKtVbNK.js";import{r as o}from"./monaco-CZnIWXyV.js";import{l as s,u as c}from"./history-view-jX3PPID6.js";import{C as l,i as u,j as d,n as f,p,r as m}from"./index-DjD2SPNZ.js";var h=a(),g=e(i(),1),_=t(),v=(0,g.lazy)(()=>o(()=>import(`./explorer-tree-CPHGgahA.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]))),y=(0,g.lazy)(()=>o(()=>import(`./explorer-view-BTvhSMDQ.js`),__vite__mapDeps([15,1,2,3,4,5,6,7,8,9,10,11,12])));function b(){let e=(0,h.c)(44),t=d(x),i=p(),[a,o]=(0,g.useState)(null),[b,S]=(0,g.useState)(!0),{pendingExplorerPath:C,setPendingExplorerPath:w,explorerClearPath:T,setExplorerClearPath:E}=l(),D;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(D=()=>{S(!0)},e[0]=D):D=e[0];let O;e[1]===t?O=e[2]:(O=[t],e[1]=t,e[2]=O),(0,g.useEffect)(D,O);let k;e[3]===i?k=e[4]:(k=e=>{o(e),i&&S(!1)},e[3]=i,e[4]=k);let A=k,j;e[5]===Symbol.for(`react.memo_cache_sentinel`)?(j=()=>{S(!0)},e[5]=j):j=e[5];let M=j,N,P;e[6]!==i||e[7]!==C||e[8]!==w?(N=()=>{C&&(o({name:C.split(`/`).pop()??C,path:C,type:`file`}),i&&S(!1),w(null))},P=[i,C,w],e[6]=i,e[7]=C,e[8]=w,e[9]=N,e[10]=P):(N=e[9],P=e[10]),(0,g.useEffect)(N,P);let F,I;e[11]!==T||e[12]!==i||e[13]!==a||e[14]!==E?(F=()=>{T&&(a&&(a.path===T||a.path.startsWith(T+`/`))&&(o(null),i&&S(!0)),E(null))},I=[T,i,a,E],e[11]=T,e[12]=i,e[13]=a,e[14]=E,e[15]=F,e[16]=I):(F=e[15],I=e[16]),(0,g.useEffect)(F,I);let L=i&&!b,R=i&&b,z=i?100:25,B=i?50:15,V=i?100:50,H=L&&`hidden`,U;e[17]===H?U=e[18]:(U=n(`overflow-hidden border-r border-border`,H),e[17]=H,e[18]=U);let W;e[19]!==A||e[20]!==a?.path||e[21]!==t?(W=(0,_.jsx)(ee,{className:`h-full`,children:t?(0,_.jsx)(g.Suspense,{fallback:(0,_.jsx)(c,{}),children:(0,_.jsx)(v,{threadId:t,selectedPath:a?.path??null,onNodeSelect:A})}):(0,_.jsx)(`p`,{className:n(r.caption,`px-3 py-4 text-center`),children:`No thread selected.`})}),e[19]=A,e[20]=a?.path,e[21]=t,e[22]=W):W=e[22];let G;e[23]!==V||e[24]!==U||e[25]!==W||e[26]!==z||e[27]!==B?(G=(0,_.jsx)(m,{defaultSize:z,minSize:B,maxSize:V,className:U,children:W}),e[23]=V,e[24]=U,e[25]=W,e[26]=z,e[27]=B,e[28]=G):G=e[28];let K;e[29]===i?K=e[30]:(K=!i&&(0,_.jsx)(f,{withHandle:!0}),e[29]=i,e[30]=K);let q=R&&`hidden`,J;e[31]===q?J=e[32]:(J=n(`overflow-hidden`,q),e[31]=q,e[32]=J);let Y;e[33]===Symbol.for(`react.memo_cache_sentinel`)?(Y=(0,_.jsx)(s,{}),e[33]=Y):Y=e[33];let X=i&&!b,Z;e[34]!==a||e[35]!==X?(Z=(0,_.jsx)(g.Suspense,{fallback:Y,children:(0,_.jsx)(y,{selectedFile:a,showTreeBackButton:X,onShowTree:M})}),e[34]=a,e[35]=X,e[36]=Z):Z=e[36];let Q;e[37]!==J||e[38]!==Z?(Q=(0,_.jsx)(m,{className:J,children:Z}),e[37]=J,e[38]=Z,e[39]=Q):Q=e[39];let $;return e[40]!==G||e[41]!==K||e[42]!==Q?($=(0,_.jsx)(`div`,{className:`flex h-full flex-col overflow-hidden`,children:(0,_.jsxs)(u,{direction:`horizontal`,className:`flex-1 overflow-hidden`,children:[G,K,Q]})}),e[40]=G,e[41]=K,e[42]=Q,e[43]=$):$=e[43],$}function x(e){return e.selectedThreadId}export{b as default};