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.
Files changed (119) hide show
  1. package/dist/index.js +159 -45
  2. package/dist/public/assets/account-view-DqN6PuZx.js +1 -0
  3. package/dist/public/assets/api-BEi04Nbw.js +2 -0
  4. package/dist/public/assets/{async-error-boundary-BX1G17o9.js → async-error-boundary-p7xL6pqw.js} +1 -1
  5. package/dist/public/assets/{async-loading-fallback-V0EaQ_Kn.js → async-loading-fallback-cCtsF_26.js} +1 -1
  6. package/dist/public/assets/browser-tab-D8O7Fv9w.js +12 -0
  7. package/dist/public/assets/{button-kWtLAMpB.js → button-D1ArHt_o.js} +1 -1
  8. package/dist/public/assets/{card-B_EASkic.js → card-Bp7fZl_f.js} +1 -1
  9. package/dist/public/assets/chat-dock-context-BlxEXa9b.js +1 -0
  10. package/dist/public/assets/commit-dialog-DY4D8-I1.js +1 -0
  11. package/dist/public/assets/{commit-error-dialog-CdcGI69P.js → commit-error-dialog-DBXZAW1l.js} +1 -1
  12. package/dist/public/assets/{commit-method-fields-BtEHb0_G.js → commit-method-fields-C335Y5Id.js} +1 -1
  13. package/dist/public/assets/{context-menu-BcM6I0Sx.js → context-menu-BUjcm0iJ.js} +1 -1
  14. package/dist/public/assets/conversation-history-view-DQ_PXqZ9.js +1 -0
  15. package/dist/public/assets/{create-project-dialog-a6Wgq-Z8.js → create-project-dialog-fc3B-dqb.js} +2 -2
  16. package/dist/public/assets/create-repo-dialog-DchKq-aa.js +1 -0
  17. package/dist/public/assets/delete-confirm-dialog-DEuqA4Wk.js +1 -0
  18. package/dist/public/assets/diff-view-CVlpWjUp.js +4 -0
  19. package/dist/public/assets/dist-BGVtJOIV.js +2 -0
  20. package/dist/public/assets/{dist-C2G92uPn.js → dist-BQOHvuU5.js} +1 -1
  21. package/dist/public/assets/{dist-CHhgoHp6.js → dist-BrrQ4RKZ.js} +1 -1
  22. package/dist/public/assets/{dist-D-2G8xGB.js → dist-CRRMWh4A.js} +1 -1
  23. package/dist/public/assets/{dist-c_QADQ5u.js → dist-DLuGyArC.js} +1 -1
  24. package/dist/public/assets/{dist-DoxvnNEY.js → dist-DSd8c-dh.js} +1 -1
  25. package/dist/public/assets/{dist-DD4GtbiM.js → dist-DTleMiQ4.js} +1 -1
  26. package/dist/public/assets/{dist-DsmF-KJ-.js → dist-bBjaCw3d.js} +1 -1
  27. package/dist/public/assets/{dist-yM5kyz9Q.js → dist-sGpOBecq.js} +1 -1
  28. package/dist/public/assets/{es2015-BlPKkFZZ.js → es2015-SVM3tAoD.js} +1 -1
  29. package/dist/public/assets/{explorer-monaco-editor-BdZ_bBqh.js → explorer-monaco-editor-DuU68YH9.js} +1 -1
  30. package/dist/public/assets/explorer-tab-view-CHQ0mxMq.js +2 -0
  31. package/dist/public/assets/explorer-tree-BHqNnEtP.js +1 -0
  32. package/dist/public/assets/explorer-view-CgdDN1D-.js +76 -0
  33. package/dist/public/assets/{git-history-dialog-DL0Trxiz.js → git-history-dialog-BAWqdcQy.js} +1 -1
  34. package/dist/public/assets/index-BHXl-V4W.js +3665 -0
  35. package/dist/public/assets/{index-BLNUy5nZ.css → index-CLo6-Tya.css} +1 -1
  36. package/dist/public/assets/{model-list-controls-I67L2x3H.js → model-list-controls-BTd-p6XD.js} +1 -1
  37. package/dist/public/assets/onboarding-dialog-DXg4wTyD.js +1 -0
  38. package/dist/public/assets/project-coding-view-R1jPpXkA.js +1 -0
  39. package/dist/public/assets/{project-danger-zone-view-CkvKOQrl.js → project-danger-zone-view-B8gSJxHw.js} +1 -1
  40. package/dist/public/assets/project-env-vars-view-CHfsOYa_.js +1 -0
  41. package/dist/public/assets/project-model-aliases-view-DnEbS87g.js +1 -0
  42. package/dist/public/assets/project-settings-view-34BqFxN-.js +1 -0
  43. package/dist/public/assets/project-tools-view-DCBhdS_I.js +1 -0
  44. package/dist/public/assets/providers-list-view-m6xHKltt.js +1 -0
  45. package/dist/public/assets/pull-request-dialog-Bmtin2Mh.js +1 -0
  46. package/dist/public/assets/{pull-with-changes-dialog-V3_km2zQ.js → pull-with-changes-dialog-Cmh1vFmo.js} +1 -1
  47. package/dist/public/assets/{push-before-pr-dialog-CarrD3y2.js → push-before-pr-dialog-CxboQlmj.js} +1 -1
  48. package/dist/public/assets/{radio-group-Dn_pN-pn.js → radio-group-DzcDTzWb.js} +1 -1
  49. package/dist/public/assets/{scroll-area-lkVMElz5.js → scroll-area-DgahW31C.js} +1 -1
  50. package/dist/public/assets/settings-general-view-XHYGeoAk.js +1 -0
  51. package/dist/public/assets/{settings-list-DiiYzOxn.js → settings-list-D-51AyVy.js} +1 -1
  52. package/dist/public/assets/{settings-logs-view-DbKM1SNk.js → settings-logs-view-BiY8r9HI.js} +3 -3
  53. package/dist/public/assets/settings-mcp-servers-view-DEmqI7is.js +5 -0
  54. package/dist/public/assets/settings-models-view-CB6htSan.js +1 -0
  55. package/dist/public/assets/settings-skills-view-QL-AL_vP.js +3 -0
  56. package/dist/public/assets/settings-slack-view-Bo1oDUFr.js +1 -0
  57. package/dist/public/assets/settings-slash-commands-view-CUY_SkzD.js +1 -0
  58. package/dist/public/assets/settings-statistics-view-B1iibWb7.js +1 -0
  59. package/dist/public/assets/settings-storage-view-BClnyDai.js +1 -0
  60. package/dist/public/assets/settings-subagents-view-D4OEJJk8.js +2 -0
  61. package/dist/public/assets/settings-system-prompt-view-e6CgLFVs.js +1 -0
  62. package/dist/public/assets/settings-view-Bk-knKOJ.js +2 -0
  63. package/dist/public/assets/{slug-utils-CQ8PMWUL.js → slug-utils-DgUDtDRP.js} +1 -1
  64. package/dist/public/assets/store-IJouqtOd.js +9 -0
  65. package/dist/public/assets/{table-A3cgauiZ.js → table-CYtkHxHy.js} +1 -1
  66. package/dist/public/assets/tasks-view-DpGp9_WH.js +1 -0
  67. package/dist/public/assets/{terminal-panel-DIh6it7K.js → terminal-panel-OW4yyorA.js} +3 -3
  68. package/dist/public/assets/{toggle-group-Q36wRGKA.js → toggle-group-rSptomuG.js} +1 -1
  69. package/dist/public/assets/{tooltip-Db8UeYxm.js → tooltip-BqGy0Y1-.js} +1 -1
  70. package/dist/public/assets/{use-active-dock-panel-instance-DRfRj6MV.js → use-active-dock-panel-instance-DjhNdiNZ.js} +1 -1
  71. package/dist/public/assets/use-installed-ai-files-BcrX9Nna.js +1 -0
  72. package/dist/public/assets/{useBaseQuery-34f0-SVd.js → useBaseQuery-BytIT4Si.js} +1 -1
  73. package/dist/public/assets/{web-Bn9n5e7r.js → web-BogjYrUi.js} +1 -1
  74. package/dist/public/assets/{web-Dk3GAfTy.js → web-C28hpsuV.js} +1 -1
  75. package/dist/public/assets/{web-DycfRH4j.js → web-CWmUhqaq.js} +1 -1
  76. package/dist/public/assets/{web-C2KGFouM.js → web-HPHkrB3q.js} +1 -1
  77. package/dist/public/index.html +22 -26
  78. package/package.json +1 -1
  79. package/dist/public/assets/account-view-CWtpznW2.js +0 -1
  80. package/dist/public/assets/alert-dialog-BxMfaLuO.js +0 -7
  81. package/dist/public/assets/api-DX1ny6q-.js +0 -2
  82. package/dist/public/assets/browser-tab-D_5MLhxE.js +0 -12
  83. package/dist/public/assets/chat-dock-context-8K8Ikjgy.js +0 -1
  84. package/dist/public/assets/commit-dialog-CSXPoomw.js +0 -1
  85. package/dist/public/assets/conversation-history-view-CuzU9qF6.js +0 -1
  86. package/dist/public/assets/create-project-workspace-Dv_lEfZx.js +0 -2
  87. package/dist/public/assets/create-repo-dialog-BTIQ5Nw4.js +0 -1
  88. package/dist/public/assets/delete-confirm-dialog-Dl76vaxb.js +0 -1
  89. package/dist/public/assets/diff-view-DA1uT9tc.js +0 -4
  90. package/dist/public/assets/dist-CTLFS4dn.js +0 -2
  91. package/dist/public/assets/explorer-tab-view-CewTYYOm.js +0 -2
  92. package/dist/public/assets/explorer-tree-C0VDhihz.js +0 -1
  93. package/dist/public/assets/explorer-view-RCfDm3p5.js +0 -76
  94. package/dist/public/assets/index-B3-5kIOf.js +0 -3658
  95. package/dist/public/assets/merged-pr-dialog-BzND8nzx.js +0 -1
  96. package/dist/public/assets/onboarding-dialog-DY8v11hv.js +0 -1
  97. package/dist/public/assets/project-coding-view-DxOwsjtt.js +0 -1
  98. package/dist/public/assets/project-env-vars-view-DYLWA7s0.js +0 -1
  99. package/dist/public/assets/project-model-aliases-view-DWu9khLA.js +0 -1
  100. package/dist/public/assets/project-settings-view-DJfmaWn6.js +0 -1
  101. package/dist/public/assets/project-tools-view-BEjBkghz.js +0 -1
  102. package/dist/public/assets/providers-list-view-jMEPJCci.js +0 -1
  103. package/dist/public/assets/pull-request-dialog-B_JCqT53.js +0 -1
  104. package/dist/public/assets/settings-general-view-BhrfHGfQ.js +0 -1
  105. package/dist/public/assets/settings-mcp-servers-view-4FpPIeYV.js +0 -5
  106. package/dist/public/assets/settings-models-view-CJVeo9ad.js +0 -1
  107. package/dist/public/assets/settings-skills-view-DoRPGbHG.js +0 -3
  108. package/dist/public/assets/settings-slack-view-Cc1NgVkx.js +0 -1
  109. package/dist/public/assets/settings-slash-commands-view-CmlWqqmi.js +0 -1
  110. package/dist/public/assets/settings-statistics-view-DRuyEbcN.js +0 -1
  111. package/dist/public/assets/settings-storage-view-DihbtUYb.js +0 -1
  112. package/dist/public/assets/settings-subagents-view-B2RvxDZI.js +0 -2
  113. package/dist/public/assets/settings-system-prompt-view-CvVbgjNN.js +0 -1
  114. package/dist/public/assets/settings-view-CPUAjTMa.js +0 -2
  115. package/dist/public/assets/store-BSzKIu5G.js +0 -9
  116. package/dist/public/assets/tasks-view-CvFFLPeD.js +0 -1
  117. package/dist/public/assets/use-installed-ai-files-C8nNWGC7.js +0 -1
  118. package/dist/public/assets/use-suspense-resource-Dakt9lfT.js +0 -1
  119. 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
- BASE_SYSTEM_PROMPT = `You are a helpful coding assistant. ${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/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.
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 randomUUID27 = async () => globalThis.crypto?.randomUUID() || (await import("crypto")).randomUUID();
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 randomUUID27();
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: options2,
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 randomUUID17 } from "crypto";
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 = randomUUID17();
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 randomUUID18 } from "crypto";
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 = randomUUID18();
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 = randomUUID18();
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 = randomUUID18();
240800
- const initialThreadId = randomUUID18();
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 = randomUUID18();
240910
- const initialThreadId = randomUUID18();
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 = randomUUID18();
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 = randomUUID18();
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 = randomUUID18();
241188
- const initialThreadId = randomUUID18();
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 randomUUID19 } from "crypto";
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-${randomUUID19().slice(0, 8)}`;
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 randomUUID20 } from "crypto";
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 = randomUUID20();
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 thread "${threadTitle}" for project "${project.name}"...`,
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: randomUUID20(),
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 randomUUID21 } from "crypto";
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
- randomUUID21(),
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 baseBranch = body.baseBranch ?? await findDefaultBranch(gitRoot) ?? void 0;
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 randomUUID22 } from "crypto";
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 ?? randomUUID22();
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 = randomUUID22();
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 = randomUUID22();
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 randomUUID23 } from "crypto";
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: randomUUID23(),
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 randomUUID24 } from "crypto";
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 = randomUUID24();
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 = randomUUID24();
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 randomUUID25 } from "node:crypto";
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 = randomUUID25();
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 randomUUID26 } from "crypto";
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 = randomUUID26();
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};