tarsk 0.5.76 → 0.5.77
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/index.js +159 -45
- package/dist/public/assets/account-view-DqN6PuZx.js +1 -0
- package/dist/public/assets/api-BEi04Nbw.js +2 -0
- package/dist/public/assets/{async-error-boundary-BX1G17o9.js → async-error-boundary-p7xL6pqw.js} +1 -1
- package/dist/public/assets/{async-loading-fallback-V0EaQ_Kn.js → async-loading-fallback-cCtsF_26.js} +1 -1
- package/dist/public/assets/browser-tab-D8O7Fv9w.js +12 -0
- package/dist/public/assets/{button-kWtLAMpB.js → button-D1ArHt_o.js} +1 -1
- package/dist/public/assets/{card-B_EASkic.js → card-Bp7fZl_f.js} +1 -1
- package/dist/public/assets/chat-dock-context-BlxEXa9b.js +1 -0
- package/dist/public/assets/commit-dialog-DY4D8-I1.js +1 -0
- package/dist/public/assets/{commit-error-dialog-CdcGI69P.js → commit-error-dialog-DBXZAW1l.js} +1 -1
- package/dist/public/assets/{commit-method-fields-BtEHb0_G.js → commit-method-fields-C335Y5Id.js} +1 -1
- package/dist/public/assets/{context-menu-BcM6I0Sx.js → context-menu-BUjcm0iJ.js} +1 -1
- package/dist/public/assets/conversation-history-view-DQ_PXqZ9.js +1 -0
- package/dist/public/assets/{create-project-dialog-a6Wgq-Z8.js → create-project-dialog-fc3B-dqb.js} +2 -2
- package/dist/public/assets/create-repo-dialog-DchKq-aa.js +1 -0
- package/dist/public/assets/delete-confirm-dialog-DEuqA4Wk.js +1 -0
- package/dist/public/assets/diff-view-CVlpWjUp.js +4 -0
- package/dist/public/assets/dist-BGVtJOIV.js +2 -0
- package/dist/public/assets/{dist-C2G92uPn.js → dist-BQOHvuU5.js} +1 -1
- package/dist/public/assets/{dist-CHhgoHp6.js → dist-BrrQ4RKZ.js} +1 -1
- package/dist/public/assets/{dist-D-2G8xGB.js → dist-CRRMWh4A.js} +1 -1
- package/dist/public/assets/{dist-c_QADQ5u.js → dist-DLuGyArC.js} +1 -1
- package/dist/public/assets/{dist-DoxvnNEY.js → dist-DSd8c-dh.js} +1 -1
- package/dist/public/assets/{dist-DD4GtbiM.js → dist-DTleMiQ4.js} +1 -1
- package/dist/public/assets/{dist-DsmF-KJ-.js → dist-bBjaCw3d.js} +1 -1
- package/dist/public/assets/{dist-yM5kyz9Q.js → dist-sGpOBecq.js} +1 -1
- package/dist/public/assets/{es2015-BlPKkFZZ.js → es2015-SVM3tAoD.js} +1 -1
- package/dist/public/assets/{explorer-monaco-editor-BdZ_bBqh.js → explorer-monaco-editor-DuU68YH9.js} +1 -1
- package/dist/public/assets/explorer-tab-view-CHQ0mxMq.js +2 -0
- package/dist/public/assets/explorer-tree-BHqNnEtP.js +1 -0
- package/dist/public/assets/explorer-view-CgdDN1D-.js +76 -0
- package/dist/public/assets/{git-history-dialog-DL0Trxiz.js → git-history-dialog-BAWqdcQy.js} +1 -1
- package/dist/public/assets/index-BHXl-V4W.js +3665 -0
- package/dist/public/assets/{index-BLNUy5nZ.css → index-CLo6-Tya.css} +1 -1
- package/dist/public/assets/{model-list-controls-I67L2x3H.js → model-list-controls-BTd-p6XD.js} +1 -1
- package/dist/public/assets/onboarding-dialog-DXg4wTyD.js +1 -0
- package/dist/public/assets/project-coding-view-R1jPpXkA.js +1 -0
- package/dist/public/assets/{project-danger-zone-view-CkvKOQrl.js → project-danger-zone-view-B8gSJxHw.js} +1 -1
- package/dist/public/assets/project-env-vars-view-CHfsOYa_.js +1 -0
- package/dist/public/assets/project-model-aliases-view-DnEbS87g.js +1 -0
- package/dist/public/assets/project-settings-view-34BqFxN-.js +1 -0
- package/dist/public/assets/project-tools-view-DCBhdS_I.js +1 -0
- package/dist/public/assets/providers-list-view-m6xHKltt.js +1 -0
- package/dist/public/assets/pull-request-dialog-Bmtin2Mh.js +1 -0
- package/dist/public/assets/{pull-with-changes-dialog-V3_km2zQ.js → pull-with-changes-dialog-Cmh1vFmo.js} +1 -1
- package/dist/public/assets/{push-before-pr-dialog-CarrD3y2.js → push-before-pr-dialog-CxboQlmj.js} +1 -1
- package/dist/public/assets/{radio-group-Dn_pN-pn.js → radio-group-DzcDTzWb.js} +1 -1
- package/dist/public/assets/{scroll-area-lkVMElz5.js → scroll-area-DgahW31C.js} +1 -1
- package/dist/public/assets/settings-general-view-XHYGeoAk.js +1 -0
- package/dist/public/assets/{settings-list-DiiYzOxn.js → settings-list-D-51AyVy.js} +1 -1
- package/dist/public/assets/{settings-logs-view-DbKM1SNk.js → settings-logs-view-BiY8r9HI.js} +3 -3
- package/dist/public/assets/settings-mcp-servers-view-DEmqI7is.js +5 -0
- package/dist/public/assets/settings-models-view-CB6htSan.js +1 -0
- package/dist/public/assets/settings-skills-view-QL-AL_vP.js +3 -0
- package/dist/public/assets/settings-slack-view-Bo1oDUFr.js +1 -0
- package/dist/public/assets/settings-slash-commands-view-CUY_SkzD.js +1 -0
- package/dist/public/assets/settings-statistics-view-B1iibWb7.js +1 -0
- package/dist/public/assets/settings-storage-view-BClnyDai.js +1 -0
- package/dist/public/assets/settings-subagents-view-D4OEJJk8.js +2 -0
- package/dist/public/assets/settings-system-prompt-view-e6CgLFVs.js +1 -0
- package/dist/public/assets/settings-view-Bk-knKOJ.js +2 -0
- package/dist/public/assets/{slug-utils-CQ8PMWUL.js → slug-utils-DgUDtDRP.js} +1 -1
- package/dist/public/assets/store-IJouqtOd.js +9 -0
- package/dist/public/assets/{table-A3cgauiZ.js → table-CYtkHxHy.js} +1 -1
- package/dist/public/assets/tasks-view-DpGp9_WH.js +1 -0
- package/dist/public/assets/{terminal-panel-DIh6it7K.js → terminal-panel-OW4yyorA.js} +3 -3
- package/dist/public/assets/{toggle-group-Q36wRGKA.js → toggle-group-rSptomuG.js} +1 -1
- package/dist/public/assets/{tooltip-Db8UeYxm.js → tooltip-BqGy0Y1-.js} +1 -1
- package/dist/public/assets/{use-active-dock-panel-instance-DRfRj6MV.js → use-active-dock-panel-instance-DjhNdiNZ.js} +1 -1
- package/dist/public/assets/use-installed-ai-files-BcrX9Nna.js +1 -0
- package/dist/public/assets/{useBaseQuery-34f0-SVd.js → useBaseQuery-BytIT4Si.js} +1 -1
- package/dist/public/assets/{web-Bn9n5e7r.js → web-BogjYrUi.js} +1 -1
- package/dist/public/assets/{web-Dk3GAfTy.js → web-C28hpsuV.js} +1 -1
- package/dist/public/assets/{web-DycfRH4j.js → web-CWmUhqaq.js} +1 -1
- package/dist/public/assets/{web-C2KGFouM.js → web-HPHkrB3q.js} +1 -1
- package/dist/public/index.html +22 -26
- package/package.json +1 -1
- package/dist/public/assets/account-view-CWtpznW2.js +0 -1
- package/dist/public/assets/alert-dialog-BxMfaLuO.js +0 -7
- package/dist/public/assets/api-DX1ny6q-.js +0 -2
- package/dist/public/assets/browser-tab-D_5MLhxE.js +0 -12
- package/dist/public/assets/chat-dock-context-8K8Ikjgy.js +0 -1
- package/dist/public/assets/commit-dialog-CSXPoomw.js +0 -1
- package/dist/public/assets/conversation-history-view-CuzU9qF6.js +0 -1
- package/dist/public/assets/create-project-workspace-Dv_lEfZx.js +0 -2
- package/dist/public/assets/create-repo-dialog-BTIQ5Nw4.js +0 -1
- package/dist/public/assets/delete-confirm-dialog-Dl76vaxb.js +0 -1
- package/dist/public/assets/diff-view-DA1uT9tc.js +0 -4
- package/dist/public/assets/dist-CTLFS4dn.js +0 -2
- package/dist/public/assets/explorer-tab-view-CewTYYOm.js +0 -2
- package/dist/public/assets/explorer-tree-C0VDhihz.js +0 -1
- package/dist/public/assets/explorer-view-RCfDm3p5.js +0 -76
- package/dist/public/assets/index-B3-5kIOf.js +0 -3658
- package/dist/public/assets/merged-pr-dialog-BzND8nzx.js +0 -1
- package/dist/public/assets/onboarding-dialog-DY8v11hv.js +0 -1
- package/dist/public/assets/project-coding-view-DxOwsjtt.js +0 -1
- package/dist/public/assets/project-env-vars-view-DYLWA7s0.js +0 -1
- package/dist/public/assets/project-model-aliases-view-DWu9khLA.js +0 -1
- package/dist/public/assets/project-settings-view-DJfmaWn6.js +0 -1
- package/dist/public/assets/project-tools-view-BEjBkghz.js +0 -1
- package/dist/public/assets/providers-list-view-jMEPJCci.js +0 -1
- package/dist/public/assets/pull-request-dialog-B_JCqT53.js +0 -1
- package/dist/public/assets/settings-general-view-BhrfHGfQ.js +0 -1
- package/dist/public/assets/settings-mcp-servers-view-4FpPIeYV.js +0 -5
- package/dist/public/assets/settings-models-view-CJVeo9ad.js +0 -1
- package/dist/public/assets/settings-skills-view-DoRPGbHG.js +0 -3
- package/dist/public/assets/settings-slack-view-Cc1NgVkx.js +0 -1
- package/dist/public/assets/settings-slash-commands-view-CmlWqqmi.js +0 -1
- package/dist/public/assets/settings-statistics-view-DRuyEbcN.js +0 -1
- package/dist/public/assets/settings-storage-view-DihbtUYb.js +0 -1
- package/dist/public/assets/settings-subagents-view-B2RvxDZI.js +0 -2
- package/dist/public/assets/settings-system-prompt-view-CvVbgjNN.js +0 -1
- package/dist/public/assets/settings-view-CPUAjTMa.js +0 -2
- package/dist/public/assets/store-BSzKIu5G.js +0 -9
- package/dist/public/assets/tasks-view-CvFFLPeD.js +0 -1
- package/dist/public/assets/use-installed-ai-files-C8nNWGC7.js +0 -1
- package/dist/public/assets/use-suspense-resource-Dakt9lfT.js +0 -1
- package/dist/public/assets/use-toast-xpb5jNtN.js +0 -1
package/dist/index.js
CHANGED
|
@@ -365,6 +365,19 @@ var init_agent_modes = __esm({
|
|
|
365
365
|
}
|
|
366
366
|
});
|
|
367
367
|
|
|
368
|
+
// ../shared/dist/agent-note.js
|
|
369
|
+
function isTarskAgentNoteModel(model) {
|
|
370
|
+
return model === TARSK_AGENT_NOTE_MODEL;
|
|
371
|
+
}
|
|
372
|
+
var TARSK_AGENT_NOTE_MODEL, TARSK_AGENT_NOTE_LABEL;
|
|
373
|
+
var init_agent_note = __esm({
|
|
374
|
+
"../shared/dist/agent-note.js"() {
|
|
375
|
+
"use strict";
|
|
376
|
+
TARSK_AGENT_NOTE_MODEL = "tarsk";
|
|
377
|
+
TARSK_AGENT_NOTE_LABEL = "Tarsk";
|
|
378
|
+
}
|
|
379
|
+
});
|
|
380
|
+
|
|
368
381
|
// ../shared/dist/agent-session.js
|
|
369
382
|
var AGENT_MAIN_LANE, AGENT_SESSION_STORAGE_VERSION, AGENT_SESSION_LEGACY_STORAGE_VERSION, AGENT_ROLLOVER_DETAILS_KIND;
|
|
370
383
|
var init_agent_session = __esm({
|
|
@@ -1030,7 +1043,7 @@ This conversation can move to a fresh model context while its complete transcrip
|
|
|
1030
1043
|
// ../shared/dist/system-prompt.js
|
|
1031
1044
|
function buildDefaultSystemPrompt(toolNames) {
|
|
1032
1045
|
const toolList = toolNames.length > 0 ? toolNames.join(", ") : "read, bash, edit, and write";
|
|
1033
|
-
return `You are a helpful coding assistant. You have access to ${toolList} tools. Use them to explore and modify the codebase as needed. ${SHELL_WORKING_DIRECTORY_INSTRUCTION} Skills are created and stored in .agents/skills/ . Use Mermaid for flowcharts, sequence diagrams, state diagrams, or graphs when appropriate. When a tool returns a local image, audio, or video file intended for the user, present it in the conversation by returning the file path or URL plainly so the UI can render it inline. If the user asks you to do multiple tasks "in subagents" or asks for work to be split across subagents, delegate the work by calling the agent tool once per subtask when that tool is available. Break the request into clear focused prompts, run subagents in parallel when supported by the runtime, and then synthesize their results for the user. Be concise and answer directly; do not restate the question, add preamble, or end with unsolicited follow-ups. Do not use emojis.
|
|
1046
|
+
return `You are a helpful coding assistant. You have access to ${toolList} tools. Use them to explore and modify the codebase as needed. ${PARALLEL_TOOL_CALLS_INSTRUCTION} ${SHELL_WORKING_DIRECTORY_INSTRUCTION} Skills are created and stored in .agents/skills/ . Use Mermaid for flowcharts, sequence diagrams, state diagrams, or graphs when appropriate. When a tool returns a local image, audio, or video file intended for the user, present it in the conversation by returning the file path or URL plainly so the UI can render it inline. If the user asks you to do multiple tasks "in subagents" or asks for work to be split across subagents, delegate the work by calling the agent tool once per subtask when that tool is available. Break the request into clear focused prompts, run subagents in parallel when supported by the runtime, and then synthesize their results for the user. Be concise and answer directly; do not restate the question, add preamble, or end with unsolicited follow-ups. Do not use emojis.
|
|
1034
1047
|
|
|
1035
1048
|
${CONTEXT_MEMORY_INSTRUCTIONS}`;
|
|
1036
1049
|
}
|
|
@@ -1043,14 +1056,15 @@ function formatCurrentDateLine(referenceDate = /* @__PURE__ */ new Date()) {
|
|
|
1043
1056
|
});
|
|
1044
1057
|
return `The current date is ${date5}.`;
|
|
1045
1058
|
}
|
|
1046
|
-
var TARSK_REPO_ROOT_ENV_VAR, SHELL_WORKING_DIRECTORY_INSTRUCTION, BASE_SYSTEM_PROMPT;
|
|
1059
|
+
var TARSK_REPO_ROOT_ENV_VAR, SHELL_WORKING_DIRECTORY_INSTRUCTION, PARALLEL_TOOL_CALLS_INSTRUCTION, BASE_SYSTEM_PROMPT;
|
|
1047
1060
|
var init_system_prompt = __esm({
|
|
1048
1061
|
"../shared/dist/system-prompt.js"() {
|
|
1049
1062
|
"use strict";
|
|
1050
1063
|
init_context_rollover();
|
|
1051
1064
|
TARSK_REPO_ROOT_ENV_VAR = "TARSK_REPO_ROOT";
|
|
1052
1065
|
SHELL_WORKING_DIRECTORY_INSTRUCTION = `Shell commands start in the repository root. Assume that working directory, prefer repository-relative paths, and do not prefix commands with an absolute-path cd. Use $${TARSK_REPO_ROOT_ENV_VAR} only as a fallback when the working directory cannot be assumed.`;
|
|
1053
|
-
|
|
1066
|
+
PARALLEL_TOOL_CALLS_INSTRUCTION = "Issue independent tool calls together in the same turn so they run in parallel.";
|
|
1067
|
+
BASE_SYSTEM_PROMPT = `You are a helpful coding assistant. ${SHELL_WORKING_DIRECTORY_INSTRUCTION} ${PARALLEL_TOOL_CALLS_INSTRUCTION} Skills are created and stored in .agents/skills/ . Use Mermaid for flowcharts, sequence diagrams, state diagrams, or graphs when appropriate. When a tool returns a local image/audio/video file intended for the user, present it in the conversation by returning the file path or URL plainly so the UI can render it inline. Be concise and answer directly; do not restate the question, add preamble, or end with unsolicited follow-ups. Do not use emojis.
|
|
1054
1068
|
|
|
1055
1069
|
${CONTEXT_MEMORY_INSTRUCTIONS}`;
|
|
1056
1070
|
}
|
|
@@ -13389,6 +13403,7 @@ var init_dist = __esm({
|
|
|
13389
13403
|
init_model_aliases();
|
|
13390
13404
|
init_model_id();
|
|
13391
13405
|
init_agent_modes();
|
|
13406
|
+
init_agent_note();
|
|
13392
13407
|
init_agent_session();
|
|
13393
13408
|
init_auto_route();
|
|
13394
13409
|
init_model_reasoning();
|
|
@@ -101161,7 +101176,7 @@ var require_gaxios = __commonJS({
|
|
|
101161
101176
|
var retry_js_1 = require_retry3();
|
|
101162
101177
|
var stream_1 = __require("stream");
|
|
101163
101178
|
var interceptor_js_1 = require_interceptor();
|
|
101164
|
-
var
|
|
101179
|
+
var randomUUID28 = async () => globalThis.crypto?.randomUUID() || (await import("crypto")).randomUUID();
|
|
101165
101180
|
var HTTP_STATUS_NO_CONTENT = 204;
|
|
101166
101181
|
var Gaxios = class {
|
|
101167
101182
|
agentCache = /* @__PURE__ */ new Map();
|
|
@@ -101434,7 +101449,7 @@ var require_gaxios = __commonJS({
|
|
|
101434
101449
|
*/
|
|
101435
101450
|
["Blob", "File", "FormData"].includes(opts.data?.constructor?.name || "");
|
|
101436
101451
|
if (opts.multipart?.length) {
|
|
101437
|
-
const boundary = await
|
|
101452
|
+
const boundary = await randomUUID28();
|
|
101438
101453
|
preparedHeaders.set("content-type", `multipart/related; boundary=${boundary}`);
|
|
101439
101454
|
opts.body = stream_1.Readable.from(this.getMultipartRequest(opts.multipart, boundary));
|
|
101440
101455
|
} else if (shouldDirectlyPassData) {
|
|
@@ -227661,7 +227676,8 @@ function prepareChatRequest(c, body) {
|
|
|
227661
227676
|
conversationId: requestedConversationId,
|
|
227662
227677
|
attribution: rawAttribution,
|
|
227663
227678
|
idempotencyKey: rawIdempotencyKey,
|
|
227664
|
-
hideUserMessage: rawHideUserMessage
|
|
227679
|
+
hideUserMessage: rawHideUserMessage,
|
|
227680
|
+
runInBackground: rawRunInBackground
|
|
227665
227681
|
} = body;
|
|
227666
227682
|
if (!threadId || typeof threadId !== "string") {
|
|
227667
227683
|
return {
|
|
@@ -227739,7 +227755,8 @@ function prepareChatRequest(c, body) {
|
|
|
227739
227755
|
requestedConversationId,
|
|
227740
227756
|
attribution: parseTurnAttribution(rawAttribution),
|
|
227741
227757
|
...idempotencyKey ? { idempotencyKey } : {},
|
|
227742
|
-
hideUserMessage: rawHideUserMessage === true
|
|
227758
|
+
hideUserMessage: rawHideUserMessage === true,
|
|
227759
|
+
runInBackground: rawRunInBackground === true
|
|
227743
227760
|
}
|
|
227744
227761
|
};
|
|
227745
227762
|
}
|
|
@@ -228033,7 +228050,8 @@ async function postChatMessage(c, threadManager, agentExecutor, conversationMana
|
|
|
228033
228050
|
requestedConversationId,
|
|
228034
228051
|
attribution,
|
|
228035
228052
|
idempotencyKey,
|
|
228036
|
-
hideUserMessage
|
|
228053
|
+
hideUserMessage,
|
|
228054
|
+
runInBackground
|
|
228037
228055
|
} = prepared.request;
|
|
228038
228056
|
let provider = rawProvider;
|
|
228039
228057
|
let model = baseModel;
|
|
@@ -228130,7 +228148,10 @@ async function postChatMessage(c, threadManager, agentExecutor, conversationMana
|
|
|
228130
228148
|
reservedRun = { threadId: activeThreadId, conversationId };
|
|
228131
228149
|
return captureMessageAndLaunch({
|
|
228132
228150
|
c,
|
|
228133
|
-
options:
|
|
228151
|
+
options: {
|
|
228152
|
+
...options2,
|
|
228153
|
+
runInBackground: options2?.runInBackground === true || runInBackground === true
|
|
228154
|
+
},
|
|
228134
228155
|
thread,
|
|
228135
228156
|
threadManager,
|
|
228136
228157
|
conversationManager,
|
|
@@ -228351,6 +228372,17 @@ function buildMessageMetadata(tokenCount, estimatedCost, processingTimeMs) {
|
|
|
228351
228372
|
};
|
|
228352
228373
|
}
|
|
228353
228374
|
function buildAgentMessage(message, response, pricingByModelId, threadModelId) {
|
|
228375
|
+
if (isTarskAgentNoteModel(message.request.model)) {
|
|
228376
|
+
const { content: sanitizedContent2 } = sanitizeStructuredMessageContent(response.content);
|
|
228377
|
+
return {
|
|
228378
|
+
messageId: `agent-${message.id}`,
|
|
228379
|
+
sender: "agent",
|
|
228380
|
+
content: sanitizedContent2,
|
|
228381
|
+
contentType: "markdown",
|
|
228382
|
+
timestamp: response.completedAt,
|
|
228383
|
+
senderLabel: TARSK_AGENT_NOTE_LABEL
|
|
228384
|
+
};
|
|
228385
|
+
}
|
|
228354
228386
|
const usageFromEvents = extractUsageFromEvents(response.events);
|
|
228355
228387
|
const tokenCount = resolveTokenCount(usageFromEvents, message);
|
|
228356
228388
|
const estimatedCost = resolveEstimatedCost(
|
|
@@ -228786,6 +228818,82 @@ var init_chat_delete_route = __esm({
|
|
|
228786
228818
|
}
|
|
228787
228819
|
});
|
|
228788
228820
|
|
|
228821
|
+
// src/features/chat/chat-agent-note.route.ts
|
|
228822
|
+
import { randomUUID as randomUUID17 } from "crypto";
|
|
228823
|
+
async function postAgentNote(c, threadManager, conversationManager) {
|
|
228824
|
+
try {
|
|
228825
|
+
const threadIdResult = requireThreadIdParam(c);
|
|
228826
|
+
if (!threadIdResult.ok) {
|
|
228827
|
+
return threadIdResult.response;
|
|
228828
|
+
}
|
|
228829
|
+
const { threadId } = threadIdResult;
|
|
228830
|
+
let body = {};
|
|
228831
|
+
try {
|
|
228832
|
+
body = await c.req.json();
|
|
228833
|
+
} catch {
|
|
228834
|
+
return errorResponse(c, ErrorCodes.REQUEST_PARSE_ERROR, "Invalid JSON body", 400);
|
|
228835
|
+
}
|
|
228836
|
+
const content = typeof body.content === "string" ? body.content.trim() : "";
|
|
228837
|
+
if (!content) {
|
|
228838
|
+
return errorResponse(c, ErrorCodes.INVALID_REQUEST, "content is required", 400);
|
|
228839
|
+
}
|
|
228840
|
+
const threadResult = await requireThread(c, threadManager, threadId);
|
|
228841
|
+
if (!threadResult.ok) {
|
|
228842
|
+
return threadResult.response;
|
|
228843
|
+
}
|
|
228844
|
+
const { thread } = threadResult;
|
|
228845
|
+
const requestedConversationId = typeof body.conversationId === "string" ? body.conversationId.trim() : "";
|
|
228846
|
+
let conversationId = requestedConversationId || thread.currentConversationId;
|
|
228847
|
+
if (!conversationId) {
|
|
228848
|
+
conversationId = randomUUID17();
|
|
228849
|
+
await threadManager.updateThread(threadId, { currentConversationId: conversationId });
|
|
228850
|
+
}
|
|
228851
|
+
const messageId = await conversationManager.startMessage(
|
|
228852
|
+
threadId,
|
|
228853
|
+
thread.path ?? "",
|
|
228854
|
+
conversationId,
|
|
228855
|
+
"",
|
|
228856
|
+
TARSK_AGENT_NOTE_MODEL
|
|
228857
|
+
);
|
|
228858
|
+
await conversationManager.completeMessage(messageId, content, [
|
|
228859
|
+
{ type: "message", role: "assistant", content }
|
|
228860
|
+
]);
|
|
228861
|
+
const history2 = await conversationManager.getConversationHistoryByConversationId(
|
|
228862
|
+
threadId,
|
|
228863
|
+
conversationId
|
|
228864
|
+
);
|
|
228865
|
+
const inserted = history2?.messages.find((message) => message.id === messageId);
|
|
228866
|
+
if (!inserted) {
|
|
228867
|
+
return errorResponse(
|
|
228868
|
+
c,
|
|
228869
|
+
ErrorCodes.INTERNAL_ERROR,
|
|
228870
|
+
"Failed to load the inserted agent note",
|
|
228871
|
+
500
|
|
228872
|
+
);
|
|
228873
|
+
}
|
|
228874
|
+
const [mapped] = mapConversationMessagesToThreadResponse([inserted]);
|
|
228875
|
+
return successResponse(c, mapped);
|
|
228876
|
+
} catch (error2) {
|
|
228877
|
+
return errorResponse(
|
|
228878
|
+
c,
|
|
228879
|
+
ErrorCodes.INTERNAL_ERROR,
|
|
228880
|
+
"Failed to insert agent note",
|
|
228881
|
+
500,
|
|
228882
|
+
error2 instanceof Error ? error2.message : String(error2)
|
|
228883
|
+
);
|
|
228884
|
+
}
|
|
228885
|
+
}
|
|
228886
|
+
var init_chat_agent_note_route = __esm({
|
|
228887
|
+
"src/features/chat/chat-agent-note.route.ts"() {
|
|
228888
|
+
"use strict";
|
|
228889
|
+
init_dist();
|
|
228890
|
+
init_threads_messages_mapper();
|
|
228891
|
+
init_conversation_route_params();
|
|
228892
|
+
init_route_helpers();
|
|
228893
|
+
init_error_responses();
|
|
228894
|
+
}
|
|
228895
|
+
});
|
|
228896
|
+
|
|
228789
228897
|
// src/features/chat/chat-subscribe.route.ts
|
|
228790
228898
|
function flushPendingAssistantContent(state3, target) {
|
|
228791
228899
|
const chunks = state3.pendingChunks;
|
|
@@ -229177,6 +229285,7 @@ function createChatRoutes(threadManager, agentExecutor, conversationManager, pro
|
|
|
229177
229285
|
"/:threadId/workspace-handoff",
|
|
229178
229286
|
(c) => handleWorkspaceHandoff(c, threadManager, conversationManager, metadataManager)
|
|
229179
229287
|
);
|
|
229288
|
+
router.post("/:threadId/agent-note", (c) => postAgentNote(c, threadManager, conversationManager));
|
|
229180
229289
|
router.post(
|
|
229181
229290
|
"/:threadId/steer",
|
|
229182
229291
|
(c) => steerChatMessage(c, agentExecutor, processingStateManager, conversationManager)
|
|
@@ -229196,6 +229305,7 @@ var init_chat_routes = __esm({
|
|
|
229196
229305
|
init_chat_auto_route_route();
|
|
229197
229306
|
init_chat_workspace_handoff_route();
|
|
229198
229307
|
init_chat_delete_route();
|
|
229308
|
+
init_chat_agent_note_route();
|
|
229199
229309
|
init_chat_subscribe_route();
|
|
229200
229310
|
init_chat_buffer_route();
|
|
229201
229311
|
init_chat_stop_route();
|
|
@@ -238998,7 +239108,7 @@ var init_projects_routes = __esm({
|
|
|
238998
239108
|
});
|
|
238999
239109
|
|
|
239000
239110
|
// src/features/git/git-auth.broker.ts
|
|
239001
|
-
import { randomUUID as
|
|
239111
|
+
import { randomUUID as randomUUID18 } from "crypto";
|
|
239002
239112
|
var GitAuthBroker;
|
|
239003
239113
|
var init_git_auth_broker = __esm({
|
|
239004
239114
|
"src/features/git/git-auth.broker.ts"() {
|
|
@@ -239010,7 +239120,7 @@ var init_git_auth_broker = __esm({
|
|
|
239010
239120
|
* with the credential, or null when the user cancelled the dialog.
|
|
239011
239121
|
*/
|
|
239012
239122
|
begin(context2) {
|
|
239013
|
-
const authId =
|
|
239123
|
+
const authId = randomUUID18();
|
|
239014
239124
|
const credential = new Promise((resolve21) => {
|
|
239015
239125
|
this.pending.set(authId, {
|
|
239016
239126
|
resolve: (value2) => {
|
|
@@ -240389,7 +240499,7 @@ var init_random_words = __esm({
|
|
|
240389
240499
|
});
|
|
240390
240500
|
|
|
240391
240501
|
// src/features/projects/projects.creator.ts
|
|
240392
|
-
import { randomUUID as
|
|
240502
|
+
import { randomUUID as randomUUID19 } from "crypto";
|
|
240393
240503
|
import { basename as basename7, dirname as dirname16, join as join40, relative as relative11, resolve as resolvePath5, sep as sep6 } from "path";
|
|
240394
240504
|
import { realpathSync as realpathSync2 } from "fs";
|
|
240395
240505
|
import { access as access7, mkdir as mkdir9, rm as rm6, stat as stat11, readdir as readdir11, writeFile as writeFile12 } from "fs/promises";
|
|
@@ -240692,14 +240802,14 @@ var init_projects_creator = __esm({
|
|
|
240692
240802
|
}
|
|
240693
240803
|
let initialThreadId;
|
|
240694
240804
|
try {
|
|
240695
|
-
const projectId =
|
|
240805
|
+
const projectId = randomUUID19();
|
|
240696
240806
|
const existingProjects = await this.metadataManager.loadProjects();
|
|
240697
240807
|
const existingNames = existingProjects.map((p) => p.name);
|
|
240698
240808
|
const projectName = this.ensureUniqueProjectName(
|
|
240699
240809
|
this.deriveProjectName(gitUrl),
|
|
240700
240810
|
existingNames
|
|
240701
240811
|
);
|
|
240702
|
-
initialThreadId =
|
|
240812
|
+
initialThreadId = randomUUID19();
|
|
240703
240813
|
const initialThreadTitle = generateRandomHyphenatedName();
|
|
240704
240814
|
const baseFolderName = this.toFolderName(this.deriveProjectName(gitUrl));
|
|
240705
240815
|
if (!baseFolderName) {
|
|
@@ -240796,8 +240906,8 @@ var init_projects_creator = __esm({
|
|
|
240796
240906
|
};
|
|
240797
240907
|
return;
|
|
240798
240908
|
}
|
|
240799
|
-
const projectId =
|
|
240800
|
-
const initialThreadId =
|
|
240909
|
+
const projectId = randomUUID19();
|
|
240910
|
+
const initialThreadId = randomUUID19();
|
|
240801
240911
|
const initialThreadTitle = generateRandomHyphenatedName();
|
|
240802
240912
|
this.processingStateManager?.setProcessing(initialThreadId);
|
|
240803
240913
|
try {
|
|
@@ -240906,8 +241016,8 @@ var init_projects_creator = __esm({
|
|
|
240906
241016
|
};
|
|
240907
241017
|
return;
|
|
240908
241018
|
}
|
|
240909
|
-
const projectId =
|
|
240910
|
-
const initialThreadId =
|
|
241019
|
+
const projectId = randomUUID19();
|
|
241020
|
+
const initialThreadId = randomUUID19();
|
|
240911
241021
|
const initialThreadTitle = generateRandomHyphenatedName();
|
|
240912
241022
|
const { signal } = options2 ?? {};
|
|
240913
241023
|
let folderPath;
|
|
@@ -241001,7 +241111,7 @@ var init_projects_creator = __esm({
|
|
|
241001
241111
|
yield { type: "error", message: "Could not derive a valid folder name from the zip" };
|
|
241002
241112
|
return;
|
|
241003
241113
|
}
|
|
241004
|
-
let projectId =
|
|
241114
|
+
let projectId = randomUUID19();
|
|
241005
241115
|
let projectNameToPersist = projectName;
|
|
241006
241116
|
if (options2?.signal?.aborted) {
|
|
241007
241117
|
return;
|
|
@@ -241015,7 +241125,7 @@ var init_projects_creator = __esm({
|
|
|
241015
241125
|
projectId = overrideProjectId;
|
|
241016
241126
|
projectNameToPersist = result.name;
|
|
241017
241127
|
}
|
|
241018
|
-
const initialThreadId =
|
|
241128
|
+
const initialThreadId = randomUUID19();
|
|
241019
241129
|
const initialThreadTitle = generateRandomHyphenatedName();
|
|
241020
241130
|
let folderPath;
|
|
241021
241131
|
let projectMetadataSaved = false;
|
|
@@ -241184,8 +241294,8 @@ var init_projects_creator = __esm({
|
|
|
241184
241294
|
};
|
|
241185
241295
|
return;
|
|
241186
241296
|
}
|
|
241187
|
-
const projectId =
|
|
241188
|
-
const initialThreadId =
|
|
241297
|
+
const projectId = randomUUID19();
|
|
241298
|
+
const initialThreadId = randomUUID19();
|
|
241189
241299
|
const initialThreadTitle = generateRandomHyphenatedName();
|
|
241190
241300
|
this.processingStateManager?.setProcessing(initialThreadId);
|
|
241191
241301
|
try {
|
|
@@ -243985,7 +244095,7 @@ var init_thread_folder_name = __esm({
|
|
|
243985
244095
|
});
|
|
243986
244096
|
|
|
243987
244097
|
// src/features/threads/thread-copy-clone.ts
|
|
243988
|
-
import { randomUUID as
|
|
244098
|
+
import { randomUUID as randomUUID20 } from "crypto";
|
|
243989
244099
|
import { readdir as readdir13, rename as rename5, stat as stat12, rm as rm8 } from "fs/promises";
|
|
243990
244100
|
import { join as join45 } from "path";
|
|
243991
244101
|
function supportsCopyOnWriteClone() {
|
|
@@ -244060,7 +244170,7 @@ async function cloneDirectoryTree(sourcePath, targetPath) {
|
|
|
244060
244170
|
if (typeof Worker === "undefined") {
|
|
244061
244171
|
return { ok: false, error: "workers are unavailable in this runtime" };
|
|
244062
244172
|
}
|
|
244063
|
-
const stagingPath = `${targetPath}.copying-${
|
|
244173
|
+
const stagingPath = `${targetPath}.copying-${randomUUID20().slice(0, 8)}`;
|
|
244064
244174
|
let worker;
|
|
244065
244175
|
try {
|
|
244066
244176
|
const workerUrl = URL.createObjectURL(
|
|
@@ -244213,7 +244323,7 @@ self.onmessage = (event) => {
|
|
|
244213
244323
|
});
|
|
244214
244324
|
|
|
244215
244325
|
// src/features/threads/threads.manager.ts
|
|
244216
|
-
import { randomUUID as
|
|
244326
|
+
import { randomUUID as randomUUID21 } from "crypto";
|
|
244217
244327
|
import { join as join46 } from "path";
|
|
244218
244328
|
import { execSync as execSync3 } from "child_process";
|
|
244219
244329
|
import { rm as rm9, stat as stat13, mkdir as mkdir11 } from "fs/promises";
|
|
@@ -244305,13 +244415,13 @@ var init_threads_manager = __esm({
|
|
|
244305
244415
|
return;
|
|
244306
244416
|
}
|
|
244307
244417
|
await this.ensureProjectDirectory(project.path);
|
|
244308
|
-
threadId =
|
|
244418
|
+
threadId = randomUUID21();
|
|
244309
244419
|
const threadTitle = await this.resolveThreadTitle(projectId, title);
|
|
244310
244420
|
const threadPath = await this.generateThreadPath(project.gitUrl, project.name);
|
|
244311
244421
|
this.processingStateManager?.setProcessing(threadId);
|
|
244312
244422
|
yield {
|
|
244313
244423
|
type: "progress",
|
|
244314
|
-
message: `Creating
|
|
244424
|
+
message: `Creating workspace "${threadTitle}" for project "${project.name}"...`,
|
|
244315
244425
|
threadId
|
|
244316
244426
|
};
|
|
244317
244427
|
let populateFailed = false;
|
|
@@ -244761,7 +244871,7 @@ var init_threads_manager = __esm({
|
|
|
244761
244871
|
const shouldDeleteProject = isProjectRoot && project.threads.length === 0;
|
|
244762
244872
|
if (project.threads.length === 0 && isBuiltInBot(project)) {
|
|
244763
244873
|
const replacement = {
|
|
244764
|
-
id:
|
|
244874
|
+
id: randomUUID21(),
|
|
244765
244875
|
projectId: project.id,
|
|
244766
244876
|
title: generateRandomHyphenatedName(),
|
|
244767
244877
|
path: project.path,
|
|
@@ -245186,7 +245296,7 @@ var init_threads_delete_route = __esm({
|
|
|
245186
245296
|
});
|
|
245187
245297
|
|
|
245188
245298
|
// src/features/project-scripts/project-scripts.database.ts
|
|
245189
|
-
import { randomUUID as
|
|
245299
|
+
import { randomUUID as randomUUID22 } from "crypto";
|
|
245190
245300
|
async function getScriptsByProject(db, projectId) {
|
|
245191
245301
|
const result = await db.execute({
|
|
245192
245302
|
sql: `SELECT id, projectId, workspace, name, command, friendlyName, updatedAt
|
|
@@ -245203,7 +245313,7 @@ async function upsertProjectScripts(projectId, scripts) {
|
|
|
245203
245313
|
sql: `INSERT OR REPLACE INTO project_scripts (id, projectId, workspace, name, command, friendlyName, updatedAt)
|
|
245204
245314
|
VALUES (?, ?, ?, ?, ?, ?, ?)`,
|
|
245205
245315
|
args: [
|
|
245206
|
-
|
|
245316
|
+
randomUUID22(),
|
|
245207
245317
|
projectId,
|
|
245208
245318
|
script.workspace,
|
|
245209
245319
|
script.name,
|
|
@@ -404562,7 +404672,11 @@ async function gitCreateBranchHandler(c, metadataManager) {
|
|
|
404562
404672
|
} catch {
|
|
404563
404673
|
return c.json({ error: `Path is not a git repository: ${absolutePath}` }, 400);
|
|
404564
404674
|
}
|
|
404565
|
-
const
|
|
404675
|
+
const previousBranch = await getCurrentBranch(gitRoot);
|
|
404676
|
+
const baseBranch = body.baseBranch ?? await findDefaultBranch(gitRoot);
|
|
404677
|
+
if (!baseBranch) {
|
|
404678
|
+
return c.json({ error: "Could not determine the default branch" }, 400);
|
|
404679
|
+
}
|
|
404566
404680
|
let branchName = body.branchName ? sanitizeBranchName(body.branchName) : sanitizeBranchName(generateRandomHyphenatedName());
|
|
404567
404681
|
if (!branchName) {
|
|
404568
404682
|
return c.json({ error: "Invalid branch name" }, 400);
|
|
@@ -404576,7 +404690,7 @@ async function gitCreateBranchHandler(c, metadataManager) {
|
|
|
404576
404690
|
}
|
|
404577
404691
|
await createAndCheckoutBranch(gitRoot, branchName, baseBranch);
|
|
404578
404692
|
await updateThreadCurrentBranch(metadataManager, threadId, branchName);
|
|
404579
|
-
return c.json({ success: true, branchName });
|
|
404693
|
+
return c.json({ success: true, branchName, previousBranch, baseBranch });
|
|
404580
404694
|
} catch (error2) {
|
|
404581
404695
|
const message = error2 instanceof Error ? error2.message : "Failed to create branch";
|
|
404582
404696
|
return c.json({ error: message }, 500);
|
|
@@ -440546,7 +440660,7 @@ var init_slack_shared = __esm({
|
|
|
440546
440660
|
});
|
|
440547
440661
|
|
|
440548
440662
|
// src/features/slack/slack.dispatch.ts
|
|
440549
|
-
import { randomUUID as
|
|
440663
|
+
import { randomUUID as randomUUID23 } from "crypto";
|
|
440550
440664
|
function clearBackgroundTurnRecovery() {
|
|
440551
440665
|
backgroundTurnRecovery.clear();
|
|
440552
440666
|
}
|
|
@@ -440812,7 +440926,7 @@ async function resolveOrCreateChannelThread(ctx, params) {
|
|
|
440812
440926
|
return { ok: false };
|
|
440813
440927
|
}
|
|
440814
440928
|
const tarskThreadId = createdThread.id;
|
|
440815
|
-
const nextConversationId = conversationId ??
|
|
440929
|
+
const nextConversationId = conversationId ?? randomUUID23();
|
|
440816
440930
|
const nextSlackMode = slackMode ?? (claimChannelDefault ? "plan" : "branch");
|
|
440817
440931
|
await announceChannelBranchReady(ctx, {
|
|
440818
440932
|
channelId,
|
|
@@ -440945,7 +441059,7 @@ async function claimChannelDefaultOwnership(ctx, params) {
|
|
|
440945
441059
|
log139.warn("Failed to delete duplicate channel default clone", { error: error2, tarskThreadId });
|
|
440946
441060
|
}
|
|
440947
441061
|
const winnerThreadId = claim.existing.defaultTarskThreadId;
|
|
440948
|
-
const conversationId =
|
|
441062
|
+
const conversationId = randomUUID23();
|
|
440949
441063
|
await upsertSlackThreadMap({
|
|
440950
441064
|
slackTeamId: teamId,
|
|
440951
441065
|
slackChannelId: channelId,
|
|
@@ -441171,7 +441285,7 @@ async function resolveSlackConversationId(ctx, params) {
|
|
|
441171
441285
|
return thread.currentConversationId;
|
|
441172
441286
|
}
|
|
441173
441287
|
}
|
|
441174
|
-
const conversationId =
|
|
441288
|
+
const conversationId = randomUUID23();
|
|
441175
441289
|
await ctx.deps.threadManager.updateThread(tarskThreadId, {
|
|
441176
441290
|
currentConversationId: conversationId
|
|
441177
441291
|
});
|
|
@@ -441195,7 +441309,7 @@ var init_slack_dispatch = __esm({
|
|
|
441195
441309
|
});
|
|
441196
441310
|
|
|
441197
441311
|
// src/features/slack/slack.branch.ts
|
|
441198
|
-
import { randomUUID as
|
|
441312
|
+
import { randomUUID as randomUUID24 } from "crypto";
|
|
441199
441313
|
async function handleBranchCommand(ctx, params) {
|
|
441200
441314
|
const { teamId, channelId, userId, messageTs, prompt, attachments, projectId } = params;
|
|
441201
441315
|
const project = await ctx.deps.projectManager.getProject(projectId);
|
|
@@ -441282,7 +441396,7 @@ async function remapSlackThreadToBranch(ctx, params) {
|
|
|
441282
441396
|
threadTitle,
|
|
441283
441397
|
slackMode: "branch",
|
|
441284
441398
|
isNewConversation: true,
|
|
441285
|
-
conversationId:
|
|
441399
|
+
conversationId: randomUUID24(),
|
|
441286
441400
|
clearPendingPropose: true
|
|
441287
441401
|
});
|
|
441288
441402
|
}
|
|
@@ -442171,7 +442285,7 @@ var init_slack_attachments = __esm({
|
|
|
442171
442285
|
});
|
|
442172
442286
|
|
|
442173
442287
|
// src/features/slack/slack.mentions.ts
|
|
442174
|
-
import { randomUUID as
|
|
442288
|
+
import { randomUUID as randomUUID25 } from "crypto";
|
|
442175
442289
|
function messageMentionsBot(event, botUserId) {
|
|
442176
442290
|
const text = event.text;
|
|
442177
442291
|
if (!botUserId || !text) {
|
|
@@ -442266,7 +442380,7 @@ async function handleAppMention(ctx, event, body) {
|
|
|
442266
442380
|
}
|
|
442267
442381
|
const defaultTarget = await resolveChannelDefaultTarget(ctx, teamId, channelId, binding);
|
|
442268
442382
|
if (defaultTarget) {
|
|
442269
|
-
const conversationId2 =
|
|
442383
|
+
const conversationId2 = randomUUID25();
|
|
442270
442384
|
await upsertSlackThreadMap({
|
|
442271
442385
|
slackTeamId: teamId,
|
|
442272
442386
|
slackChannelId: channelId,
|
|
@@ -442305,7 +442419,7 @@ async function handleAppMention(ctx, event, body) {
|
|
|
442305
442419
|
});
|
|
442306
442420
|
return;
|
|
442307
442421
|
}
|
|
442308
|
-
const conversationId =
|
|
442422
|
+
const conversationId = randomUUID25();
|
|
442309
442423
|
const channelLabel = binding.slackChannelName ?? await resolveSlackChannelName(ctx.getWeb(), channelId);
|
|
442310
442424
|
await dispatchChannelPrompt(ctx, {
|
|
442311
442425
|
teamId,
|
|
@@ -443486,7 +443600,7 @@ var init_file_routes = __esm({
|
|
|
443486
443600
|
|
|
443487
443601
|
// src/features/browser-js/browser-js.routes.ts
|
|
443488
443602
|
import { homedir as homedir11 } from "node:os";
|
|
443489
|
-
import { randomUUID as
|
|
443603
|
+
import { randomUUID as randomUUID26 } from "node:crypto";
|
|
443490
443604
|
import { isDeepStrictEqual as isDeepStrictEqual2 } from "node:util";
|
|
443491
443605
|
function prepareSmartJsArguments(params, output2) {
|
|
443492
443606
|
const validated = validateSmartJsOutput(output2);
|
|
@@ -443612,7 +443726,7 @@ async function resolveExecutionTool(args2) {
|
|
|
443612
443726
|
return tools[args2.toolName];
|
|
443613
443727
|
}
|
|
443614
443728
|
async function executeAndCaptureSmartJsResult(args2) {
|
|
443615
|
-
const executionId =
|
|
443729
|
+
const executionId = randomUUID26();
|
|
443616
443730
|
let result;
|
|
443617
443731
|
try {
|
|
443618
443732
|
result = await args2.tool.execute(executionId, args2.executionParams);
|
|
@@ -444234,7 +444348,7 @@ var init_logs_routes = __esm({
|
|
|
444234
444348
|
});
|
|
444235
444349
|
|
|
444236
444350
|
// src/features/user-tasks/user-tasks.database.ts
|
|
444237
|
-
import { randomUUID as
|
|
444351
|
+
import { randomUUID as randomUUID27 } from "crypto";
|
|
444238
444352
|
async function getUserTasksByProject(db, projectId) {
|
|
444239
444353
|
const result = await db.execute({
|
|
444240
444354
|
sql: `SELECT id, projectId, content, createdAt, updatedAt
|
|
@@ -444247,7 +444361,7 @@ async function getUserTasksByProject(db, projectId) {
|
|
|
444247
444361
|
}
|
|
444248
444362
|
async function insertUserTask(projectId, content) {
|
|
444249
444363
|
const db = await getDatabase();
|
|
444250
|
-
const id =
|
|
444364
|
+
const id = randomUUID27();
|
|
444251
444365
|
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
444252
444366
|
await db.execute({
|
|
444253
444367
|
sql: `INSERT INTO user_tasks (id, projectId, content, createdAt, updatedAt)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{n as t,o as n,t as r}from"./react-vendor-Ee0-5T4I.js";import{s as i}from"./chunk-QFMPRPBF-COsSkB7x.js";import{Dt as a}from"./dist-BGVtJOIV.js";import{r as o}from"./store-IJouqtOd.js";import{r as s,t as c}from"./button-D1ArHt_o.js";import{D as l,O as u,Pn as d,bt as f,vn as p}from"./dist-DLuGyArC.js";import{D as m,Kr as h,Q as g,Qt as _,sn as v}from"./api-BEi04Nbw.js";import{Yn as y,_t as b,kt as x,tr as S,vt as C}from"./index-BHXl-V4W.js";import{t as w}from"./delete-confirm-dialog-DEuqA4Wk.js";var T=t(),E=e(n(),1),D=r();function O(e){let t=(0,T.c)(6),{title:n,description:r,children:i}=e,a;t[0]!==r||t[1]!==n?(a=(0,D.jsx)(C,{title:n,description:r,sticky:!1}),t[0]=r,t[1]=n,t[2]=a):a=t[2];let o;return t[3]!==i||t[4]!==a?(o=(0,D.jsxs)(x,{children:[a,i]}),t[3]=i,t[4]=a,t[5]=o):o=t[5],o}function k(){let e=(0,T.c)(2),t;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,D.jsxs)(`div`,{className:`flex-1 space-y-2 rounded-xl border bg-card p-5`,children:[(0,D.jsx)(S,{className:`h-4 w-20`}),(0,D.jsx)(S,{className:`h-9 w-28`})]}),e[0]=t):t=e[0];let n;return e[1]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,D.jsxs)(`div`,{className:`flex gap-4 px-6 pb-6 pt-6`,children:[t,(0,D.jsxs)(`div`,{className:`flex-1 space-y-3 rounded-xl border bg-card p-5`,children:[(0,D.jsx)(S,{className:`h-4 w-24`}),(0,D.jsx)(S,{className:`h-6 w-32`}),(0,D.jsx)(S,{className:`h-4 w-full`})]})]}),e[1]=n):n=e[1],n}function A(){let e=(0,T.c)(2),t;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,D.jsxs)(`div`,{className:`flex items-center justify-between gap-4 px-6 py-5`,children:[(0,D.jsxs)(`div`,{className:`flex-1 space-y-1`,children:[(0,D.jsx)(S,{className:`h-5 w-28`}),(0,D.jsx)(S,{className:`h-4 w-64`})]}),(0,D.jsx)(S,{className:`h-9 w-28 shrink-0`})]}),e[0]=t):t=e[0];let n;return e[1]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,D.jsxs)(`div`,{className:`divide-y divide-table-border`,children:[t,(0,D.jsxs)(`div`,{className:`flex items-center justify-between gap-4 px-6 py-5`,children:[(0,D.jsxs)(`div`,{className:`flex-1 space-y-1`,children:[(0,D.jsx)(S,{className:`h-5 w-36`}),(0,D.jsx)(S,{className:`h-4 w-56`}),(0,D.jsx)(S,{className:`h-4 w-32`})]}),(0,D.jsx)(S,{className:`h-9 w-24 shrink-0`})]})]}),e[1]=n):n=e[1],n}function j(){let[e,t]=(0,E.useState)(null),[n,r]=(0,E.useState)(!0),[x,S]=(0,E.useState)(!1),[C,T]=(0,E.useState)(!1),j=i(),M=o(e=>e.projects),N=(0,E.useMemo)(()=>M.reduce((e,t)=>e+t.threads.length,0),[M]);(0,E.useEffect)(()=>{P();let e=()=>{document.visibilityState===`visible`&&P()};return document.addEventListener(`visibilitychange`,e),()=>document.removeEventListener(`visibilitychange`,e)},[]);async function P(){r(!0);try{t(await g())}catch(e){y({title:`Error`,description:e instanceof Error?e.message:`Failed to load account info`,variant:`destructive`})}finally{r(!1)}}function F(){_(`https://buy.stripe.com/14AcN6feK0Jjbheb2H3Nm03?client_reference_id=${e?.clientReferenceId??``}`)}function I(){_(`https://buy.stripe.com/9B67sMd6CgIh70Y0o33Nm04?client_reference_id=${e?.clientReferenceId??``}`)}async function L(){T(!0);try{if(await m(),h())try{await v()}catch{}window.close()}catch(e){T(!1),S(!1),y({title:`Error`,description:e instanceof Error?e.message:`Failed to delete account`,variant:`destructive`})}}let R=e?.plan===`unlimited-pro`,z=n&&e===null,B=e===null?n:!R;return(0,D.jsxs)(`div`,{className:`frosted-scrollbar flex h-full min-h-0 flex-col overflow-auto`,children:[(0,D.jsxs)(`div`,{className:`divide-y divide-table-border [&>*]:rounded-none`,children:[(0,D.jsx)(O,{title:`Account`,description:`Manage your Tarsk plan and prompt balance.`,children:z?(0,D.jsx)(k,{}):(0,D.jsxs)(`div`,{className:`flex gap-4 px-6 pb-6 pt-6`,children:[(0,D.jsxs)(`div`,{className:`flex-1 space-y-2 rounded-xl border bg-card p-5`,children:[(0,D.jsxs)(`div`,{className:s(a.label,`flex items-center gap-2 text-muted-foreground`),children:[(0,D.jsx)(f,{className:`h-4 w-4`}),`Balance`]}),(0,D.jsx)(`div`,{className:`flex items-end gap-2`,children:R?(0,D.jsx)(`span`,{className:a.stat,children:`Unlimited`}):(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(`span`,{className:a.stat,children:e?.promptsRemaining.toLocaleString()??0}),(0,D.jsx)(`span`,{className:`${a.caption} mb-1`,children:`prompts remaining`})]})})]}),(0,D.jsxs)(`div`,{className:`flex-1 space-y-3 rounded-xl border bg-card p-5`,children:[(0,D.jsxs)(`div`,{className:s(a.label,`flex items-center gap-2 text-muted-foreground`),children:[(0,D.jsx)(p,{className:`h-4 w-4`}),`Current Plan`]}),(0,D.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,D.jsx)(`span`,{className:a.label,children:R?`Unlimited Pro`:`Pay as you go`}),R&&(0,D.jsx)(`span`,{className:s(a.compact,`rounded-full bg-primary/10 px-2 py-0.5 font-medium text-primary`),children:`Active`})]}),(0,D.jsx)(`p`,{className:a.bodyMuted,children:R?`You have unlimited prompts with no restrictions.`:`Purchase prompts as needed. Upgrade to Pro for unlimited access.`})]})]})}),B?(0,D.jsx)(O,{title:`Add Prompts`,description:`Top up your balance or upgrade to Pro for unlimited access.`,children:z?(0,D.jsx)(A,{}):(0,D.jsxs)(`div`,{className:`divide-y divide-table-border`,children:[(0,D.jsxs)(`div`,{className:`flex items-center justify-between gap-4 px-6 py-5`,children:[(0,D.jsxs)(`div`,{className:`space-y-1`,children:[(0,D.jsx)(`span`,{className:a.label,children:`1,000 Prompts`}),(0,D.jsx)(`p`,{className:a.bodyMuted,children:`Top up your balance with 1,000 additional prompts for $5.`})]}),(0,D.jsx)(c,{onClick:F,className:`shrink-0`,children:`Top Up Balance`})]}),(0,D.jsxs)(`div`,{className:`flex items-center justify-between gap-4 px-6 py-5`,children:[(0,D.jsxs)(`div`,{className:`space-y-1`,children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,D.jsx)(p,{className:`h-4 w-4 text-primary`}),(0,D.jsx)(`span`,{className:a.label,children:`Unlimited Pro Plan`})]}),(0,D.jsx)(`p`,{className:a.bodyMuted,children:`Unlimited prompts for $100 and lifetime access to Tarsk.`}),(0,D.jsxs)(`ul`,{className:s(a.bodyMuted,`space-y-0.5`),children:[(0,D.jsxs)(`li`,{className:`flex items-center gap-1.5`,children:[(0,D.jsx)(d,{className:`h-3 w-3 text-primary`}),`Unlimited prompts`]}),(0,D.jsxs)(`li`,{className:`flex items-center gap-1.5`,children:[(0,D.jsx)(d,{className:`h-3 w-3 text-primary`}),`Priority access`]})]})]}),(0,D.jsx)(c,{onClick:I,className:`shrink-0`,children:`Purchase`})]})]})}):null,(0,D.jsx)(O,{title:`Delete Account`,description:`Permanently delete the Tarsk database and any logs on this device.`,children:(0,D.jsxs)(`div`,{className:`space-y-4 px-6 pb-6 pt-6`,children:[N>0?(0,D.jsxs)(b,{variant:`error`,children:[(0,D.jsxs)(`span`,{className:`flex items-start gap-2`,children:[(0,D.jsx)(l,{className:`mt-0.5 h-4 w-4 shrink-0`}),(0,D.jsxs)(`span`,{children:[`You have `,N,` workspace`,` `,N===1?`folder`:`folders`,` listed in Storage. Clear`,` `,N===1?`it`:`them`,` first under Storage — deleting your account does not remove those folders.`]})]}),(0,D.jsx)(`div`,{className:`mt-3`,children:(0,D.jsx)(c,{variant:`outline`,size:`sm`,onClick:()=>j(`/settings/storage`),children:`Go to Storage`})})]}):null,(0,D.jsx)(`p`,{className:a.bodyMuted,children:`This removes the Tarsk database and any logs on this machine and cannot be undone.`}),(0,D.jsxs)(c,{variant:`destructive`,onClick:()=>S(!0),children:[(0,D.jsx)(u,{className:`h-4 w-4`}),`Delete Account`]})]})})]}),(0,D.jsx)(w,{open:x,onOpenChange:e=>{!e&&!C&&S(!1)},title:`Delete account?`,description:`This permanently deletes the Tarsk database and any logs on this device. The app will close and you can relaunch it. This action cannot be undone.`,onConfirm:()=>void L(),confirming:C,confirmLabel:`Delete Account`,confirmingLabel:`Deleting...`})]})}export{j as default};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{N as e,R as t,jt as n,kt as r,tn as i,x as a}from"./dist-BGVtJOIV.js";var o=function(e){return e.PACKAGE_MANAGER=`tarsk.create-project.packageManager`,e.COMMIT_METHOD=`tarsk.create-project.commitMethod`,e.TEMPLATE_ID=`tarsk.create-project.templateId`,e.CREATE_BRANCH_AFTER_PR=`createBranchAfterPR`,e.CREATE_WORKSPACE_AFTER_PR=`createWorkspaceAfterPR`,e.PRIVATE_REPOSITORY_DEFAULT=`privateRepositoryDefault`,e.NEW_CHAT_ON_NEW_BRANCH=`newChatOnNewBranch`,e.SELECTED_MODEL_PREFIX=`selected-model-`,e.FONT_SCALE=`tarsk.general.fontScale`,e.FROSTED_PANEL_OPACITY=`tarsk.general.frostedPanelOpacity`,e.IMAGE_BACKGROUND=`tarsk.general.imageBackground`,e.WALLPAPER_MODE=`tarsk.general.wallpaperMode`,e.WALLPAPER_COLOR=`tarsk.general.wallpaperColor`,e.BRAND_COLOR=`tarsk.general.brandColor`,e.OPEN_WITH_PROGRAM=`tarsk.general.openWithProgram`,e.SERVER_URL=`tarsk.server.url`,e.SERVER_BIND_MODE=`tarsk.general.serverBindMode`,e.HISTORY_COLUMNS=`tarsk.settings.historyColumns`,e}({}),s=function(e){return e.MESSAGE_HISTORY=`chat_message_history`,e.BASH_COMMAND_DURATIONS=`tarsk.bash-command-durations`,e.SKILL_CATALOG_PREFIX=`tarsk.skills.catalog.`,e.SKILL_SOURCE_SELECTION=`tarsk.skills.selectedSource`,e.PROJECT_SESSION_OPEN_PREFIX=`tarsk.project-session-open.`,e}({});function c(e){return typeof localStorage>`u`?null:localStorage.getItem(e)}function l(e,t){typeof localStorage>`u`||localStorage.setItem(e,t)}function u(e){return typeof sessionStorage>`u`?null:sessionStorage.getItem(e)}function d(e,t){typeof sessionStorage>`u`||sessionStorage.setItem(e,t)}function f(e=`npm`){return c(`tarsk.create-project.packageManager`)??e}function p(e){l(`tarsk.create-project.packageManager`,e)}function ee(e=`pull-request`){return c(`tarsk.create-project.commitMethod`)??e}function m(e){l(`tarsk.create-project.commitMethod`,e)}function h(e=``){return c(`tarsk.create-project.templateId`)??e}function g(e){l(`tarsk.create-project.templateId`,e)}function _(e=!1){let t=c(`createBranchAfterPR`);return t===null?e:t===`true`}function te(e){l(`createBranchAfterPR`,e.toString())}function ne(e=!1){let t=c(`createWorkspaceAfterPR`);return t===null?e:t===`true`}function re(e){l(`createWorkspaceAfterPR`,e.toString())}function ie(e=!1){let t=c(`privateRepositoryDefault`);return t===null?e:t===`true`}function ae(e){l(`privateRepositoryDefault`,e.toString())}function oe(e=!1){let t=c(`newChatOnNewBranch`);return t===null?e:t===`true`}function se(e){l(`newChatOnNewBranch`,e.toString())}function ce(){let e=u(`chat_message_history`);return e?JSON.parse(e):[]}function le(e){let t=ce();e.trim()&&t[t.length-1]!==e&&(t.push(e),d(`chat_message_history`,JSON.stringify(t)))}function ue(e){return typeof sessionStorage>`u`?null:sessionStorage.getItem(e)}function de(e,t){typeof sessionStorage>`u`||sessionStorage.setItem(e,t)}function fe(e=`default`){return ue(`tarsk.skills.selectedSource`)??e}function pe(e){de(`tarsk.skills.selectedSource`,e)}function v(e){return`tarsk.skills.catalog.${e}`}function me(e){let t=ue(v(e));if(!t)return null;try{return JSON.parse(t)}catch{return null}}function he(e,t){de(v(e),JSON.stringify(t))}function ge(e){typeof sessionStorage>`u`||sessionStorage.removeItem(v(e))}var y=`tarsk.skills.customSources`;function _e(){if(typeof localStorage>`u`)return[];let e=localStorage.getItem(y);if(!e)return[];try{let t=JSON.parse(e);return Array.isArray(t)?t.filter(e=>typeof e==`object`&&!!e&&typeof e.id==`string`&&typeof e.title==`string`&&typeof e.url==`string`):[]}catch{return[]}}function ve(){typeof localStorage>`u`||localStorage.removeItem(y)}function ye(e=100){let t=c(`tarsk.general.fontScale`);if(t!==null){let e=Number(t);if(Number.isFinite(e)&&e>=50&&e<=300)return e}return e}function be(e){l(`tarsk.general.fontScale`,String(e))}function xe(e=80){let t=c(`tarsk.general.frostedPanelOpacity`);if(t!==null){let e=Number(t);if(Number.isFinite(e)&&e>=60&&e<=100)return e}return e}function Se(e){l(`tarsk.general.frostedPanelOpacity`,String(e))}var Ce=new Set([`image`,`background`,`color`]),b=/^#[0-9a-fA-F]{6}$/,x=`#1f2937`,S=`#82c309`;function we(e){return e!==null&&Ce.has(e)}function Te(e=`background`){let t=c(`tarsk.general.wallpaperMode`);if(we(t))return t;if(t===`brand`)return`background`;let n=c(`tarsk.general.imageBackground`);return n===`false`?`background`:n===`true`?`image`:e}function Ee(e){l(`tarsk.general.wallpaperMode`,e)}function De(e=x){let t=c(`tarsk.general.wallpaperColor`);return t!==null&&b.test(t)?t:e}function Oe(e){b.test(e)&&l(`tarsk.general.wallpaperColor`,e.toLowerCase())}function ke(e=S){let t=c(`tarsk.general.brandColor`);return t!==null&&b.test(t)?t:e}function Ae(e){b.test(e)&&l(`tarsk.general.brandColor`,e.toLowerCase())}function je(e=`VS Code`){return c(`tarsk.general.openWithProgram`)??e}function Me(e){l(`tarsk.general.openWithProgram`,e)}function Ne(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.fetchedAt==`number`&&(t.serverBindMode===`local`||t.serverBindMode===`network`)&&Array.isArray(t.networkAddresses)&&t.networkAddresses.every(e=>typeof e==`string`)}function Pe(){let e=c(`tarsk.general.serverBindMode`);if(!e)return null;try{let t=JSON.parse(e);return Ne(t)?t:null}catch{return null}}function Fe(e){l(`tarsk.general.serverBindMode`,JSON.stringify({...e,fetchedAt:e.fetchedAt??Date.now()}))}var Ie=`641`;function C(){return typeof window>`u`?null:window.Capacitor?.getPlatform?.()??null}function Le(){return E()&&C()===`ios`}function w(){return c(o.SERVER_URL)}function Re(e){l(o.SERVER_URL,e)}function ze(e){try{return new URL(e).hostname}catch{return``}}function T(e){let t=e.trim();if(!t)return``;let n=t.replace(/^https?:\/\//,``).split(`/`)[0]?.split(`:`)[0]??``;return n?`http://${n}:${Ie}`:``}function E(){if(typeof window>`u`)return!1;if(window.Capacitor?.isNativePlatform?.())return!0;let e=window.location.protocol;return e===`capacitor:`||e===`ionic:`||e===`file:`}function Be(){let e=w();if(e){let t=ze(e);if(t)return t}return E()?``:document.location.hostname}async function Ve(e){try{return(await fetch(`${e.replace(/\/$/,``)}/health`,{method:`GET`})).ok}catch{return!1}}function He(e){let t=T(e);if(t){if(E()){Re(t),window.location.reload();return}window.location.assign(t)}}function D(){return typeof window<`u`&&`__electrobunWebviewId`in window}function Ue(){return typeof document<`u`&&document.location.port===`8100`}function O(){if(typeof document>`u`)return null;let{protocol:e,hostname:t,port:n,host:r,origin:i}=document.location;return e!==`http:`&&e!==`https:`?null:i||`${e}//${r??(n?`${t}:${n}`:t)}`}function We(){if(typeof document>`u`)return`http://localhost:641`;let{hostname:e,port:t}=document.location;return t===`8100`?`http://${e}:462`:O()||`http://${e}:641`}function k(){if(D()){let e=O();if(e)return e}if(!E())return We();let e=w();return e?e.replace(/\/$/,``):We()}function A(e){let t=e.startsWith(`/`)?e:`/${e}`;return`${k()}${t}`}function j(e){if(!e)return`Unknown error`;if(typeof e.error==`string`)return e.error.trim()||`Unknown error`;if(e.error&&typeof e.error==`object`){let t=e.error.message;if(typeof t==`string`&&t.trim())return t.trim();let n=e.error.details;return typeof n==`string`&&n.trim()?n.trim():`Unknown error`}return`Unknown error`}async function M(e){try{return j(await e.json())}catch{}return e.statusText||`Unknown error`}function N(e,t,n){let r=Error(e);return n?.error&&typeof n.error==`object`&&(r.details=n.error.details,r.code=n.error.code),r}async function P(e){let t;try{t=await e.json()}catch{}throw N(j(t)||e.statusText||`Unknown error`,e,t)}async function F(e,t){let n=await fetch(A(e),{...t,method:`GET`});if(!n.ok){let e=await M(n);throw Error(e)}return n.blob()}async function I(e,t){let n=await fetch(A(e),{...t,method:`GET`});if(!n.ok){let e=await M(n);throw Error(e)}return n.json()}async function L(e,t,n){let r=await fetch(A(e),{...n,method:`POST`,headers:{"Content-Type":`application/json`,...n?.headers},body:t?JSON.stringify(t):void 0});if(!r.ok){let e=await M(r);throw Error(e)}return r.json()}async function Ge(e,t,n){let r=await fetch(A(e),{...n,method:`POST`,headers:{"Content-Type":`application/json`,...n?.headers},body:t?JSON.stringify(t):void 0});if(!r.ok){let e=await M(r);throw Error(e)}return r.blob()}async function Ke(e,t,n){let r=await fetch(A(e),{...n,method:`POST`,headers:{"Content-Type":`application/octet-stream`,...n?.headers},body:t});if(!r.ok){let e=await M(r);throw Error(e)}return r.json()}async function R(e,t,n){let r=await fetch(A(e),{...n,method:`PUT`,headers:{"Content-Type":`application/json`,...n?.headers},body:t?JSON.stringify(t):void 0});if(!r.ok){let e=await M(r);throw Error(e)}return r.json()}async function z(e,t,n){let r=await fetch(A(e),{...n,method:`PATCH`,headers:{"Content-Type":`application/json`,...n?.headers},body:t?JSON.stringify(t):void 0});if(!r.ok){let e=await M(r);throw Error(e)}return r.json()}async function qe(e,t,n){let r=await fetch(A(e),{...n,method:`PUT`,headers:{"Content-Type":`application/json`,...n?.headers},body:t?JSON.stringify(t):void 0});if(!r.ok){let e=await M(r);throw Error(e)}return r.body}async function B(e,t){let n=await fetch(A(e),{...t,method:`DELETE`});if(!n.ok){let e=await M(n);throw Error(e)}if(n.status!==204)return n.json()}async function Je(e,t){let n=await fetch(A(e),{...t,method:`DELETE`});if(!n.ok){let e=await M(n);throw Error(e)}return n.body}async function V(e,t,n){let r=await fetch(A(e),{...n,method:`POST`,headers:{"Content-Type":`application/json`,...n?.headers},body:t?JSON.stringify(t):void 0,signal:n?.signal});return r.ok||await P(r),r.body}async function H(e,t){let n=await fetch(A(e),{...t,method:`GET`});return n.ok||await P(n),n.body}async function U(e,t,n){let r=await fetch(A(e),{...n,method:`POST`,headers:{"Content-Type":`application/json`,...n?.headers},body:t?JSON.stringify(t):void 0});if(!r.ok){let e;try{e=await r.json()}catch{}throw N(j(e)||r.statusText||`Unknown error`,r,e)}return r.json()}async function W(e,t,n){let r=await fetch(A(e),{...n,method:`PUT`,headers:{"Content-Type":`application/json`,...n?.headers},body:t?JSON.stringify(t):void 0});if(!r.ok){let e;try{e=await r.json()}catch{}throw N(j(e)||r.statusText||`Unknown error`,r,e)}return r.json()}function G(...e){return e.map(e=>encodeURIComponent(String(e))).join(`/`)}var K=e(`gitops.ttl-cache`),q=new class{cache=new Map;inFlightRequests=new Map;generations=new Map;async get(e,t,n){let r=e.startsWith(`unified-git-status-`),i=r?performance.now():0,a=this.inFlightRequests.get(e);if(a)return r&&K.debug(`in-flight-reuse`,{key:e}),a;let o=this.cache.get(e);if(o&&Date.now()<o.expires){if(r){let t=Math.round(performance.now()-i);K.debug(`cache hit`,{key:e,duration:t})}return o.data}r&&K.debug(`cache miss, fetching`,{key:e});let s=this.generations.get(e)??0,c=t().then(t=>{if((this.generations.get(e)??0)===s){if(this.cache.set(e,{data:t,expires:Date.now()+n}),r){let t=Math.round(performance.now()-i);K.debug(`stored in cache`,{key:e,duration:t})}}else r&&K.debug(`skipped stale cache write`,{key:e});return t}).finally(()=>{this.inFlightRequests.get(e)===c&&this.inFlightRequests.delete(e)});return this.inFlightRequests.set(e,c),c}getSync(e){let t=this.cache.get(e);if(t&&Date.now()<t.expires)return t.data}bumpGeneration(e){this.generations.set(e,(this.generations.get(e)??0)+1)}invalidate(e){this.cache.delete(e),this.inFlightRequests.delete(e),this.bumpGeneration(e)}invalidatePattern(e){let t=[];for(let n of this.cache.keys())e.test(n)&&t.push(n);for(let n of this.inFlightRequests.keys())e.test(n)&&!t.includes(n)&&t.push(n);for(let e of t)this.cache.delete(e),this.inFlightRequests.delete(e),this.bumpGeneration(e)}clear(){for(let e of new Set([...this.cache.keys(),...this.inFlightRequests.keys(),...this.generations.keys()]))this.bumpGeneration(e);this.cache.clear(),this.inFlightRequests.clear()}};function Ye(e,t){let n=URL.createObjectURL(e),r=document.createElement(`a`);r.href=n,r.download=t,r.rel=`noopener`,document.body.appendChild(r),r.click(),document.body.removeChild(r),URL.revokeObjectURL(n)}function J(e,t=`image/png`){let n=atob(e),r=new Uint8Array(n.length);for(let e=0;e<n.length;e++)r[e]=n.charCodeAt(e);return new Blob([r],{type:t})}function Xe(e){let t=e.indexOf(`,`),n=e.slice(0,t);return J(e.slice(t+1),n.match(/^data:([^;]+)/)?.[1]??`image/png`)}async function Y(e){if(e.imageData)return J(e.imageData);if(e.imageUrl){if(e.imageUrl.startsWith(`data:`))return Xe(e.imageUrl);let t=n(e.imageUrl,k()),r=await fetch(t);if(!r.ok)throw Error(`Failed to fetch image: ${r.status}`);return r.blob()}throw Error(`imageUrl or imageData is required`)}function Ze(e){return!e.imageUrl||r(e.imageUrl)?e:{...e,imageUrl:n(e.imageUrl,k())}}async function Qe(e){let t=e.filename??`generated-image-${Date.now()}.png`;try{return Ye(await Y(e),t),{path:t}}catch{if(!e.imageUrl||e.imageUrl.startsWith(`data:`))throw Error(`imageUrl or imageData is required`);let n=document.createElement(`a`);return n.href=e.imageUrl,n.download=t,n.target=`_blank`,n.rel=`noopener noreferrer`,document.body.appendChild(n),n.click(),document.body.removeChild(n),{path:t}}}async function $e(e){let t=await Y(e);if(!navigator.clipboard?.write)throw Error(`Clipboard API not available`);let n=t.type||`image/png`,r=t.type?t:new Blob([t],{type:n});await navigator.clipboard.write([new ClipboardItem({[n]:r})])}async function et(e){return D()?L(`api/image/save`,Ze(e)):Qe(e)}async function tt(e){if(D()){await L(`api/image/clipboard`,Ze(e));return}await $e(e)}function nt(e){let t=e.trim().toLowerCase();return t===`load failed`||t.includes(`failed to fetch`)||t.includes(`network error`)||t.includes(`network connection was lost`)||t.includes(`networkrequestfailed`)||t.includes(`networkrequest failed`)||t.includes(`socket is not connected`)}function rt(e){if(e instanceof Error&&`code`in e&&typeof e.code==`string`)return e.code}function it(e){if(rt(e)===`THREAD_BUSY`)return!0;if(!(e instanceof Error))return!1;let t=e.message.toLowerCase();return t.includes(`already processing a message`)||t.includes(`already being processed`)||t.includes(`multiple chat windows are processing`)}function at(e,t){return it(e)?t?.trim()?!0:e instanceof Error?!e.message.toLowerCase().includes(`multiple chat windows`):!1:!1}var ot=50;function st(e,t,n,r,i){let o=e.getReader(),s=!1;function c(){s=!0,o.cancel().catch(()=>{})}let l=new TextDecoder,u=``,d=0;function f(e){let t=e.content?.trim();if(t)return a(t);let n=e.error?.message?.trim();if(n)return a(n);let r=e.message?.trim();return r?a(r):`Unknown error`}function p(e){if(!e)return!1;let t=e.trim();return t.length>200?!1:[/^Cannot read properties/i,/^Error:/i,/^TypeError:/i,/^ReferenceError:/i,/^SyntaxError:/i,/^failed to/i,/^error:/i,/^forbidden/i,/^unauthorized/i].some(e=>e.test(t))}async function ee(){d+=1,!(d<ot)&&(d=0,await new Promise(e=>{setTimeout(e,0)}))}async function m(e){return e.type===`ping`?`continue`:e.type===`error`?(r(f(e)),n(),`stop`):e.type===`message`?(i?.({role:e.role??`assistant`,content:e.content??``,isThinking:e.isThinking}),`continue`):e.type===`complete`?(n(),`stop`):e.type===`result`&&p(e.content)?(r(a(e.content??`Unknown error`)),n(),`stop`):(t(e),await ee(),`continue`)}async function h(){if(!u.trim())return`continue`;try{return await m(JSON.parse(u))}catch{return u.trim()&&t({type:`result`,content:u}),`continue`}}async function g(e){let t=e.trim();if(!t)return`continue`;try{return await m(JSON.parse(t))}catch{return`continue`}}async function _(){try{for(;!s;){let{done:e,value:t}=await o.read();if(e||s){if(!s&&e){if(await h()===`stop`)return;n()}break}u+=l.decode(t,{stream:!0});let r=u.split(`
|
|
2
|
+
`);u=r.pop()??``;for(let e of r)if(s||await g(e)===`stop`)return}}catch(e){s||(r(e instanceof Error?e.message:`Stream error`),n())}}return _(),c}var ct=e(`gitops.api`);async function lt(e,t=!1,n=!1){let r=new URLSearchParams;t&&r.set(`fresh`,`true`),n&&r.set(`asyncRefresh`,`true`);let i=r.toString(),a=i?`api/git/unified-status/${G(e)}?${i}`:`api/git/unified-status/${G(e)}`,o=performance.now();ct.debug(`getUnifiedGitStatus start`,{threadId:e,fresh:t});try{return await I(a)}finally{let n=Math.round(performance.now()-o);ct.debug(`getUnifiedGitStatus end`,{threadId:e,fresh:t,duration:n})}}async function ut(e,t,n){return(await L(`api/git/generate-commit-message/${G(e)}`,{model:t,provider:n})).message}async function dt(e,t){await L(`api/git/commit/${G(e)}`,{message:t})}async function ft(e){await L(`api/git/push/${G(e)}`)}async function pt(e){await L(`api/git/pull/${G(e)}`)}async function mt(e){return L(`api/git/sync-branch/${G(e)}`,{})}async function ht(e,t,n){return L(`api/git/generate-pr-info/${G(e)}`,{model:t,provider:n})}async function gt(e,t,n,r){return L(`api/git/create-pr/${G(e)}`,{title:t,description:n,baseBranch:r})}async function _t(e){await L(`api/git/fetch/${G(e)}`)}async function vt(e,t,n){return L(`api/git/create-branch/${G(e)}`,{baseBranch:t,branchName:n})}async function yt(e,t){return L(`api/git/revert-file/${G(e)}`,{filePath:t})}async function bt(e,t=50){return(await I(`api/git/log/${G(e)}?limit=${t}`)).commits}async function xt(e){return I(`api/git/pr-status/${G(e)}`)}async function St(e,t,n,r){return L(`api/git/create-repo/${G(e)}`,{repoName:t,description:n,isPrivate:r})}async function Ct(e,t){return L(`api/git/checkpoint/${G(e)}`,{messageId:t})}async function wt(e,t){return L(`api/git/checkpoint-restore/${G(e)}`,{checkpointRef:t})}async function Tt(e){return I(`api/git/diff/${G(e)}`)}async function Et(e,t,n){return F(`api/git/media/${G(e)}?path=${encodeURIComponent(t)}&version=${n}`)}async function Dt(e){return L(`api/git/cleanup-deleted-branches/${G(e)}`)}async function Ot(){return(await I(`api/skills/popular`)).skills??[]}async function kt(){return(await I(`api/skills/sources`)).sources??[]}async function At(e){return(await I(`api/skills/catalog?${new URLSearchParams({sourceId:e}).toString()}`)).skills??[]}async function jt(e,t){return L(`api/skills/sources/verify`,{title:e,url:t})}async function Mt(e,t,n){return R(`api/skills/sources/${G(e)}`,{title:t,url:n})}async function Nt(e){await B(`api/skills/sources/${G(e)}`)}async function Pt(e){return(await L(`api/skills/sources/import`,{sources:e})).sources??[]}async function Ft(e,t){return I(`api/skills/catalog/files?${new URLSearchParams({sourceId:e,skillId:t}).toString()}`)}async function It(e,t,n){return I(`api/skills/catalog/file?${new URLSearchParams({sourceId:e,skillId:t,relativePath:n}).toString()}`)}async function Lt(){return(await I(`api/agents/popular`)).agents??[]}async function Rt(){return(await I(`api/slash-commands/popular`)).commands??[]}async function zt(e,t,n,r,i){return L(`api/threads/${G(e)}/ai-files/github-folder`,{gitHubRepo:t,gitHubFolder:n,destPath:r,gitHubRef:i})}async function Bt(e,t,n,r){return L(`api/threads/${G(e)}/ai-files/catalog-skill`,{sourceId:t,skillId:n,destPath:r})}var Vt=e(`gitops.api`),X=class extends Error{constructor(){super(`No prompts remaining`),this.name=`EmptyBalanceError`}},Ht=50;async function Ut(){let{plan:e,promptsRemaining:t}=await Q();return e===`unlimited-pro`?{isEmpty:!1,isLow:!1,promptsRemaining:-1}:{isEmpty:t<=0,isLow:t>0&&t<=Ht,promptsRemaining:t}}var Wt=null,Z=!1;function Gt(e){Wt=e}function Kt(e){Z||(Z=!0,Wt?.(e))}async function qt(){return I(`api/scaffold/templates`)}async function Jt(){return(await I(`api/scaffold/check-vp`)).installed}async function Yt(){return L(`api/scaffold/install-vp`,{})}async function Xt(e,t,n,r){return V(`api/scaffold`,{projectName:e,templateId:t,packageManager:n},{signal:r})}async function Zt(){return q.get(`providers`,async()=>I(`api/providers`),6e4)}function Qt(e){return`${k()}/api/providers/${G(e)}/logo`}function $t(e){return`https://models.tarsk.io/svg/${G(e)}.svg`}async function en(e){return q.get(`provider-credits-${e}`,async()=>I(`api/providers/${G(e)}/credits`),3e4)}async function tn(e,t){await L(`api/providers/keys`,{providerName:e,apiKey:t}),q.invalidate(`providers`)}async function nn(e){await L(`api/providers/env`,{values:e}),q.invalidate(`providers`)}function rn(e){return typeof window>`u`?!1:window.open(e,`_blank`,`noopener,noreferrer`)!==null}async function an(e){if(typeof window<`u`&&!D()){rn(e);return}try{await L(`api/providers/open-external`,{url:e})}catch(t){if(rn(e))return;throw t instanceof Error?t:Error(`Failed to open URL`)}}async function Q(){return I(`api/account/info`)}async function on(){return L(`api/account/delete`,{})}async function sn(){return L(`api/account/quit`,{})}async function cn(){return I(`api/account/spend`)}async function ln(){return I(`api/account/statistics`)}async function un(){return B(`api/account/statistics`)}async function dn(){return I(`api/account/settings`)}async function fn(){return I(`api/slack/settings`)}async function pn(){await B(`api/logs`)}async function mn(e){return H(`api/logs/stream`,e)}async function hn(e){try{await L(`api/logs`,e)}catch(e){Vt.debug(`Failed to post client log entry`,e)}}async function gn(){return I(`api/slack/manifest`)}async function _n(e){return R(`api/slack/tokens`,e)}async function vn(){await B(`api/slack/tokens`)}async function yn(e){return L(`api/slack/bindings`,e)}async function bn(e,t){await B(`api/slack/bindings/${G(e)}/${G(t)}`)}async function xn(e){return R(`api/account/settings`,e)}async function Sn(e,t){return(await L(`api/voice-model/process-transcript`,{text:e,threadId:t?.threadId,provider:t?.provider,model:t?.model})).text}async function Cn(){return q.get(`available-programs`,async()=>(await I(`api/programs`)).programs??[],3e5)}async function wn(){return(await I(`api/processes`)).processes}async function Tn(e){await L(`api/processes/${G(e)}/kill`)}async function En(){return q.get(`processing-threads`,async()=>{let e=await I(`api/threads/processing`);return{processingThreadIds:e.processingThreadIds??[],processingRuns:e.processingRuns??[]}},0)}async function Dn(){return(await En()).processingThreadIds}async function On(e){let t=new URLSearchParams({since:e.since});return e.ids&&t.set(`ids`,e.ids),q.get(`processing-roster:${t.toString()}`,async()=>(await I(`api/conversations/processing-roster?${t.toString()}`)).conversations??[],0)}async function kn(){return q.get(`git-user`,async()=>{try{let e=await I(`api/git/user`);return{name:e.name??``,email:e.email??``}}catch{return{name:``,email:``}}},6e5)}async function An(){return(await kn()).name}async function jn(){return q.get(`projects`,async()=>{let e=await I(`api/projects`),n=Array.isArray(e)?e:e.projects??[],r=Array.isArray(e)?null:e.cloneRootPath??null;return{projects:(n||[]).map(e=>{let t=e;return{projectId:t.projectId??t.id,name:t.name,gitUrl:t.gitUrl,projectPath:t.projectPath??t.path,threads:t.threads??[],commands:t.commands??[],setupScript:t.setupScript,runCommand:t.runCommand,planPrompt:t.planPrompt,testPrompt:t.testPrompt,reviewPrompt:t.reviewPrompt,customSystemPrompt:t.customSystemPrompt,useCustomSystemPrompt:!!t.useCustomSystemPrompt,allowAllCommands:t.allowAllCommands!==!1,allowedCommandPatterns:t.allowedCommandPatterns??[],defaultChatMode:i(t.defaultChatMode)?t.defaultChatMode:void 0,disabledTools:t.disabledTools??void 0,smartJsEnabled:t.smartJsEnabled===!0,useBuiltInBrowser:t.useBuiltInBrowser!==!1,projectIcon:t.projectIcon,tasksModifiedCount:Number(t.tasksModifiedCount)||0,type:t.type===`bot`?`bot`:`standard`,builtIn:t.builtIn===!0}}).map(e=>{let n=(e.threads||[]).map(e=>{let n=e,r=n.threadId??n.id;return{threadId:r,title:n.title??r,path:n.path??``,currentBranch:n.currentBranch??``,isSelected:!!n.isSelected,model:n.model??void 0,modelProvider:n.modelProvider??void 0,gitStatusDot:t(n.gitStatusDot)}});return{...e,threads:n}}),cloneRootPath:r}},3e4)}async function Mn(e){await L(`api/projects/${G(e)}/tasks/clear-modifications`)}async function Nn(e,t,n){return V(`api/projects`,{gitUrl:e,commitMethod:t},{signal:n})}async function Pn(e,t){await L(`api/projects/git-auth/${encodeURIComponent(e)}`,t)}async function Fn(e){return V(`api/projects/open-folder`,{},{signal:e})}async function In(e,t){return V(`api/projects/open-path`,{path:e},{signal:t})}async function Ln(e,t){return V(`api/projects/new-folder`,{projectName:e},{signal:t})}async function Rn(e,t){return V(`api/projects/new-bot`,{projectName:e},{signal:t})}function zn(e){return new Promise((t,n)=>{let r=new FileReader;r.onload=()=>{let e=typeof r.result==`string`?r.result:``,n=e.indexOf(`,`);t(n>=0?e.slice(n+1):e)},r.onerror=()=>n(r.error),r.readAsDataURL(e)})}async function Bn(e,t,n,r){return V(`api/projects/from-zip`,{data:await zn(e),name:t,overrideProjectId:n},{signal:r})}async function Vn(e){return q.get(`project-${e}`,async()=>{let t=await I(`api/projects/${G(e)}`);return{...t,projectPath:t.projectPath??t.path}},3e4)}async function Hn(e){return I(`api/projects/${G(e)}/env-vars`)}async function Un(e){return(await I(`api/projects/${G(e)}/window-state`)).state}async function Wn(e,t){await W(`api/projects/${G(e)}/window-state`,{state:t})}async function Gn(e,t,n){return L(`api/projects/${G(e)}/replace-unique-text`,{oldText:t,newText:n})}async function Kn(e,t){await R(`api/projects/${G(e)}/env-vars`,{vars:t})}async function qn(e){await B(`api/projects/${G(e)}`),q.invalidate(`projects`)}function Jn(e){q.invalidate(`projects`),e&&q.invalidate(`project-${e}`)}async function Yn(e,t,n){return V(`api/threads`,{projectId:e,title:t,sourceThreadId:n?.sourceThreadId})}async function Xn(e,t){let n=await Je(`api/threads/${G(t)}?stream=true`);return q.invalidate(`projects`),n}async function Zn(e,t){await z(`api/threads/${G(e)}`,t),q.invalidate(`thread-${e}`),(`model`in t||`modelProvider`in t||`chatTitles`in t||`diffComments`in t)&&q.invalidate(`projects`)}async function Qn(e,t,n){return(await L(`api/threads/${G(e)}/generate-title`,{prompt:t,provider:n?.provider,model:n?.model})).title}async function $n(e,t){return(await L(`api/chat/${G(e)}/auto-route`,{prompt:t})).decision}async function er(e,t){return L(`api/threads/${G(e)}/fix-comments`,{comments:t})}async function tr(e,t){await L(`api/threads/${G(t)}/select`)}async function nr(e,t){let n=t?`?conversationId=${encodeURIComponent(t)}`:``;return{threadId:e,messages:await I(`api/threads/${G(e)}/messages${n}`)}}async function rr(e,t,n=1,r=2e3){let i=new URLSearchParams({offset:String(n),limit:String(r)});return I(`api/threads/${G(e)}/observations/${G(t)}?${i}`)}async function ir(e){return(await I(`api/threads/${G(e)}/conversation-folder-path`)).path}async function ar(e){return(await I(`api/threads/${G(e)}/session-learnings`)).learnings}async function or(e,t,n,r=[],i,a,o,s,c,l,u){let{isEmpty:d,isLow:f,promptsRemaining:p}=await Ut();if(d)throw new X;return f?Kt(p):Z=!1,V(`api/chat`,{threadId:e,content:t,model:n,provider:a,planMode:o,ralphMode:s,orchestrateMode:u,checkpointRef:c,conversationId:l,attachments:r.map(e=>({name:e.fileName,content:e.content.split(`,`)[1]||e.content,size:0,mimeType:e.mimeType||`application/octet-stream`}))},{signal:i})}async function sr(e,t,n,r=[],i,a,o,s){let{isEmpty:c,isLow:l,promptsRemaining:u}=await Ut();if(c)throw new X;return l?Kt(u):Z=!1,L(`api/chat`,{threadId:e,content:t,model:n,provider:i,planMode:a,ralphMode:o,orchestrateMode:s,runInBackground:!0,attachments:r.map(e=>({name:e.fileName,content:e.content.split(`,`)[1]||e.content,size:0,mimeType:e.mimeType||`application/octet-stream`}))})}async function cr(e,t,n,r,i,a){await L(`api/chat/${G(e)}/steer`,{messageId:t,content:n,conversationId:r,model:i,attachments:a.map(e=>({name:e.fileName,content:e.content.split(`,`)[1]||e.content,size:0,mimeType:e.mimeType||`application/octet-stream`}))})}async function lr(e,t,n){let r=new URLSearchParams({replay:`compact`}),i=n?.trim();return i&&r.set(`conversationId`,i),H(`api/chat/subscribe/${G(e)}?${r.toString()}`,{signal:t})}async function ur(e){let t=await B(`api/chat/${G(e)}`);return q.invalidate(`thread-${e}`),t?.conversationId||``}async function dr(e,t,n){return L(`api/chat/${G(e)}/agent-note`,{content:t,conversationId:n})}async function fr(e,t){return U(`api/chat/${G(e)}/compact`,t)}async function pr(e,t){let n=await L(`api/chat/${G(e)}/workspace-handoff`,t);return typeof n.brief==`string`?n.brief:``}async function mr(e,t){try{let n=new URLSearchParams,r=t?.conversationId?.trim();r&&n.set(`conversationId`,r),t?.all&&n.set(`all`,`1`);let i=n.size>0?`?${n.toString()}`:``;await L(`api/chat/stop/${G(e)}${i}`)}catch{}}async function $(e,t){return t.runNow&&t.setupScript?qe(`api/projects/${G(e)}`,t):(await W(`api/projects/${G(e)}`,t),Jn(e),null)}async function hr(e,t){await U(`api/projects/${G(e)}/open`,{program:t})}async function gr(e,t){await U(`api/threads/${G(e)}/open`,{program:t})}async function _r(e,t){await $(e,{program:t})}async function vr(e,t,n){return $(e,{setupScript:t,runNow:n})}async function yr(e,t){await $(e,{name:t})}async function br(e,t){let n=new URLSearchParams({provider:e});t!==void 0&&n.set(`supportedTools`,t?`true`:`false`),n.set(`useCase`,`coding`);let r=`available-models-${n.toString()}`;return q.get(r,async()=>{let e=await I(`api/models?${n.toString()}`);return{models:e.models??[],enabledModelIds:e.enabledModelIds??[]}},12e4)}async function xr(e){let t=new URLSearchParams({useCase:e}),n=`available-models-all-${e}`;return q.get(n,async()=>(await I(`api/models/all?${t.toString()}`)).providers??{},12e4)}async function Sr(e,t){await L(`api/models/${G(e,t)}/enable`),q.invalidate(`enabled-models`),q.invalidatePattern(/^available-models-/),q.invalidatePattern(/^available-image-models-/)}async function Cr(e,t){await L(`api/models/${G(e,t)}/disable`),q.invalidate(`enabled-models`),q.invalidatePattern(/^available-models-/),q.invalidatePattern(/^available-image-models-/)}async function wr(e,t,n){await L(`api/models/${G(e,t)}/settings`,n),q.invalidatePattern(/^available-models-/),q.invalidate(`enabled-models`)}async function Tr(){return q.get(`enabled-models`,async()=>(await I(`api/models/enabled?useCase=coding`)).enabledModels??{},12e4)}async function Er(e){let t=new URLSearchParams({provider:e,useCase:`image`}),n=`available-image-models-${e}`;return q.get(n,async()=>{let e=await I(`api/models?${t.toString()}`);return{models:e.models??[],enabledModelIds:e.enabledModelIds??[]}},12e4)}async function Dr(){return q.get(`enabled-image-models`,async()=>(await I(`api/models/enabled?useCase=image`)).enabledModels??{},12e4)}async function Or(e,t){await L(`api/models/${G(e,t)}/enable?useCase=image`),q.invalidate(`enabled-image-models`),q.invalidatePattern(/^available-models-/),q.invalidatePattern(/^available-image-models-/)}async function kr(e,t){await L(`api/models/${G(e,t)}/disable?useCase=image`),q.invalidate(`enabled-image-models`),q.invalidatePattern(/^available-models-/),q.invalidatePattern(/^available-image-models-/)}async function Ar(e,t,n,r){return L(`api/image/generate`,{prompt:e,model:t,provider:n,threadId:r})}async function jr(e){await tt(e)}async function Mr(e){return et(e)}async function Nr(e,t){return Ge(`api/projects/${G(e)}/plugin-export`,t)}async function Pr(e,t){return L(`api/projects/${G(e)}/plugin-import/preview`,{url:t})}async function Fr(e,t){return L(`api/projects/${G(e)}/plugin-import`,t)}async function Ir(e,t){return L(`api/projects/${G(e)}/plugin-upload`,t)}async function Lr(e){let t=await L(`api/models/${G(e)}/refresh`);return q.invalidatePattern(/^available-models-/),q.invalidatePattern(/^available-image-models-/),q.invalidate(`enabled-models`),q.invalidate(`enabled-image-models`),t.modelCount??0}async function Rr(e,t){await L(`api/projects/${G(e)}/commands`,t)}async function zr(e,t){await B(`api/projects/${G(e)}/commands/${G(t)}`)}async function Br(e){return I(`api/projects/${G(e)}/package-scripts`)}async function Vr(e){return I(`api/threads/${G(e)}/files`)}async function Hr(e){return(await I(`api/threads/${G(e)}/project-scripts`)).scripts}async function Ur(e,t,n,r){let{relativeFolder:i,...a}=r??{},o={scriptName:t,command:n};return i&&(o.relativeFolder=i),V(`api/threads/${G(e)}/project-scripts/run`,o,a)}async function Wr(e,t){return L(`api/threads/${G(e)}/project-scripts/stop`,{scriptName:t})}async function Gr(e){return q.get(`thread-${e}`,async()=>I(`api/threads/${e}`),45e3)}async function Kr(e){return(await I(`api/projects/${G(e)}/user-tasks`)).tasks??[]}async function qr(e,t){return L(`api/projects/${G(e)}/user-tasks`,{content:t})}async function Jr(e,t){await B(`api/projects/${G(e)}/user-tasks/${G(t)}`)}async function Yr(e){return L(`api/projects/${G(e)}/run-suggest`,{})}async function Xr(e,t,n){return Vt.info(`Start dev server requested`,{projectId:e,threadId:t}),q.invalidate(`dev-server-running-${e}`),V(`api/projects/${G(e)}/run`,{threadId:t},{signal:n})}async function Zr(e){return q.invalidate(`dev-server-running-${e}`),L(`api/projects/${G(e)}/stop`,{})}async function Qr(e,t){return L(`api/projects/${G(e)}/free-port`,{port:t})}async function $r(e){return q.get(`dev-server-running-${e}`,async()=>I(`api/projects/${G(e)}/running`),3e3)}async function ei(e){return I(`api/projects/${G(e)}/system-prompt`)}async function ti(){return I(`api/onboarding/status`)}async function ni(){return I(`api/onboarding/git-check`)}async function ri(){return L(`api/onboarding/complete`,{})}async function ii(){return L(`api/onboarding/reset`,{})}async function ai(){return I(`api/onboarding/recommended-models`)}async function oi(e){return(await I(`api/slash-commands?threadId=${G(e)}`)).commands??[]}async function si(e){let t=await I(`api/slash-commands?threadId=${G(e)}`);return{commands:t.commands??[],skills:t.skills??[],bundledSkills:t.bundledSkills??[]}}async function ci(e,t,n,r,i){return L(`api/slash-commands`,{name:e,content:t,metadata:n,scope:r,threadId:i})}async function li(e,t){let n=await fetch(`http://localhost:641/api/slash-commands`,{method:`DELETE`,headers:{"Content-Type":`application/json`},body:JSON.stringify({filePath:e,threadId:t})});if(!n.ok)throw Error(`Failed to delete slash command: ${n.statusText}`);return n.json()}async function ui(e){let t=new URLSearchParams;e?.threadId?t.set(`threadId`,e.threadId):e?.projectId&&t.set(`projectId`,e.projectId);let n=t.toString();await B(`api/conversations${n?`?${n}`:``}`)}async function di(e=20,t=0,n,r){return I(`api/conversations/recent?limit=${Math.min(Math.max(e,1),100)}&offset=${Math.max(t,0)}${n?`&projectId=${encodeURIComponent(n)}`:``}${r?.unreadOnly?`&unreadOnly=1`:``}`)}async function fi(e,t){await U(`api/conversations/${G(e)}/${G(t)}/read`,{})}async function pi(e,t){await B(`api/conversations/${G(e)}/${G(t)}/read`)}async function mi(e,t){return I(`api/conversations/${G(e)}/${G(t)}/usage`)}async function hi(e,t,n){let r=`context-breakdown-${e}-${t}`;return n?.forceRefresh&&q.invalidate(r),q.get(r,async()=>I(`api/conversations/${G(e)}/${G(t)}/context`),45e3)}async function gi(e,t){return I(`api/conversations/${G(e)}/${G(t)}/context/tool-definitions`)}async function _i(){try{return await I(`api/update/check`)}catch{return{updateAvailable:!1,supported:!1}}}async function vi(){return L(`api/update/apply`)}async function yi(){return(await I(`api/ask-user/pending`)).questions??[]}async function bi(e,t){await L(`api/ask-user/respond`,typeof t==`string`?{toolCallId:e,answer:t}:{toolCallId:e,answers:t})}async function xi(e,t,n){await L(`api/shell-permission/respond`,{toolCallId:e,decision:t,pattern:n?.pattern,projectId:n?.projectId})}async function Si(e,t){await L(`api/shell-permission/respond`,{toolCallId:e,escalationScope:t===`skip`?void 0:t,escalationDecision:t===`skip`?`skip`:void 0})}async function Ci(e,t){await L(`api/web-fetch-permission/respond`,{toolCallId:e,decision:t})}async function wi(e,t,n,r){await L(`api/browser-js/respond`,{toolCallId:e,result:t,threadId:n,...r===void 0?{}:{runToken:r}})}async function Ti(e,t,n){await L(`api/browser-js/respond`,{toolCallId:e,started:!0,threadId:t,...n===void 0?{}:{runToken:n}})}async function Ei(e,t){await L(`api/browser/ready`,{toolCallId:e,webviewId:t})}async function Di(e,t){await L(`api/browser/action-result`,{toolCallId:e,result:t})}async function Oi(e){return I(`api/mcp/config?projectPath=${encodeURIComponent(e)}`)}async function ki(e,t,n){return R(`api/mcp/config`,{projectPath:e,serverName:t,serverConfig:n})}async function Ai(e,t){return B(`api/mcp/config/${G(t)}?projectPath=${encodeURIComponent(e)}`)}async function ji(e,t){return L(`api/mcp/discover`,{projectPath:e,serverName:t})}async function Mi(){return(await I(`api/mcp/popular`)).servers??[]}async function Ni(e,t){return L(`api/mcp/oauth/authorize`,{projectPath:e,serverName:t})}async function Pi(e,t){return I(`api/mcp/oauth/status?projectPath=${encodeURIComponent(e)}&serverName=${encodeURIComponent(t)}`)}async function Fi(e,t){return B(`api/mcp/oauth?projectPath=${encodeURIComponent(e)}&serverName=${encodeURIComponent(t)}`)}async function Ii(e){return(await I(`api/projects/${G(e)}/ai-files`)).nodes??[]}async function Li(e,t){return B(`api/projects/${G(e)}/ai-file?path=${encodeURIComponent(t)}`)}async function Ri(e,t){return I(`api/projects/${G(e)}/ai-file?path=${encodeURIComponent(t)}`)}async function zi(e,t,n){return R(`api/projects/${G(e)}/ai-file`,{path:t,content:n})}async function Bi(e){return(await I(`api/threads/${G(e)}/ai-files`)).nodes??[]}async function Vi(e,t,n){return R(`api/threads/${G(e)}/ai-file`,{path:t,content:n})}async function Hi(e,t,n){return L(`api/threads/${G(e)}/ai-files/skill`,{name:t,description:n})}async function Ui(e,t,n,r){return L(`api/threads/${G(e)}/ai-files/agent`,{name:t,description:n,tools:r})}async function Wi(e,t){return B(`api/threads/${G(e)}/ai-file?path=${encodeURIComponent(t)}`)}export{dn as $,Ir as $n,Ve as $r,Fn as $t,qn as A,re as Ai,Gt as An,mt as Ar,Qt as At,Or as B,d as Bi,Si as Bn,F as Br,cn as Bt,Yn as C,me as Ci,Wn as Cn,dt as Cr,Hn as Ct,on as D,Ae as Di,tr as Dn,pt as Dr,jn as Dt,qr as E,Te as Ei,Vi as En,_t as Er,Un as Et,Wi as F,p as Fi,Zr as Fn,q as Fr,ar as Ft,br as G,Kn as Gn,Ue as Gr,Kr as Gt,Nr as H,g as Hi,Ci as Hn,L as Hr,Bi as Ht,Jr as I,Me as Ii,Wr as In,B as Ir,gn as It,Qr as J,$ as Jn,He as Jr,Jn as Jt,yi as K,pi as Kn,D as Kr,Fr as Kt,kr as L,ae as Li,mn as Ln,G as Lr,fn as Lt,bn as M,Se as Mi,Xr as Mn,nt as Mr,di as Mt,li as N,l as Ni,cr as Nn,st as Nr,ai as Nt,zr as O,m as Oi,or as On,ft as Or,en as Ot,Xn as P,se as Pi,mr as Pn,at as Pr,qt as Pt,Q,Zn as Qn,E as Qr,an as Qt,Cr as R,pe as Ri,bi as Rn,I as Rr,oi as Rt,ci as S,u as Si,zi as Sn,Dt as Sr,Ii as St,Hi as T,De as Ti,tn as Tn,gt as Tr,ei as Tt,xr as U,Oe as Ui,lr as Un,Ke as Ur,Vr as Ut,Sr as V,he as Vi,xi as Vn,z as Vr,Gr as Vt,Er as W,Ee as Wi,Yr as Wn,R as Wr,gi as Wt,Qn as X,_r as Xn,C as Xr,Tn as Xt,Ar as Y,yr as Yn,Be as Yr,$r as Yt,pr as Z,vr as Zn,Le as Zr,fi as Zt,Ln as _,f as _i,Ur as _n,Tt as _r,On as _t,_i as a,ve as ai,Pr as an,Rt as ar,hi as at,Xt as b,fe as bi,ki as bn,xt as br,Vn as bt,ur as c,ee as ci,Lr as cn,Pt as cr,kn as ct,Mn as d,ye as di,Ei as dn,Mt as dr,Oi as dt,S as ei,In as en,Nt as er,Dr as et,vn as f,xe as fi,un as fn,jt as fr,Pi as ft,Rn as g,oe as gi,$n as gn,ht as gr,Mi as gt,jr as h,ce as hi,Fi as hn,ut as hr,Br as ht,Ni as i,le as ii,hn as in,Ot as ir,wn as it,Li as j,be as ji,_n as jn,wt as jr,Zt as jt,Ai as k,te as ki,sr as kn,yt as kr,$t as kt,ui as l,_ as li,Gn as ln,Bt as lr,An as lt,ri as m,c as mi,Pn as mn,St as mr,ti as mt,Ti as n,o as ni,gr as nn,Ft as nr,Cn as nt,ni as o,ge as oi,Sn as on,At as or,ir as ot,fr as p,_e as pi,ii as pn,Ct as pr,rr as pt,er as q,xn as qn,T as qr,Yt as qt,vi as r,s as ri,dr as rn,Lt as rr,nr as rt,Jt as s,ke as si,sn,kt as sr,mi as st,X as t,x as ti,hr as tn,It as tr,Tr as tt,pn as u,ne as ui,Di as un,zt as ur,ln as ut,Nn as v,je as vi,Rr as vn,bt as vr,En as vt,Ui as w,h as wi,nn as wn,vt as wr,Hr as wt,yn as x,Pe as xi,wr as xn,lt as xr,Ri as xt,Bn as y,ie as yi,Mr as yn,Et as yr,Dn as yt,ji as z,Fe as zi,wi as zn,k as zr,si as zt};
|