sparkecoder 0.1.65 → 0.1.67

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 (142) hide show
  1. package/dist/agent/index.d.ts +2 -2
  2. package/dist/agent/index.js +37 -28
  3. package/dist/agent/index.js.map +1 -1
  4. package/dist/cli.js +102 -118
  5. package/dist/cli.js.map +1 -1
  6. package/dist/{index-BhKQYdOx.d.ts → index-DHyVVhJY.d.ts} +1 -1
  7. package/dist/index.d.ts +3 -3
  8. package/dist/index.js +102 -118
  9. package/dist/index.js.map +1 -1
  10. package/dist/{search-DkNNtC5A.d.ts → search-CCffrVJE.d.ts} +1 -0
  11. package/dist/server/index.js +102 -118
  12. package/dist/server/index.js.map +1 -1
  13. package/dist/tools/index.d.ts +2 -2
  14. package/dist/tools/index.js +16 -11
  15. package/dist/tools/index.js.map +1 -1
  16. package/package.json +1 -1
  17. package/web/.next/BUILD_ID +1 -1
  18. package/web/.next/standalone/web/.next/BUILD_ID +1 -1
  19. package/web/.next/standalone/web/.next/build-manifest.json +2 -2
  20. package/web/.next/standalone/web/.next/prerender-manifest.json +3 -3
  21. package/web/.next/standalone/web/.next/server/app/(main)/page.js.nft.json +1 -1
  22. package/web/.next/standalone/web/.next/server/app/(main)/page_client-reference-manifest.js +1 -1
  23. package/web/.next/standalone/web/.next/server/app/(main)/session/[id]/page.js.nft.json +1 -1
  24. package/web/.next/standalone/web/.next/server/app/(main)/session/[id]/page_client-reference-manifest.js +1 -1
  25. package/web/.next/standalone/web/.next/server/app/_global-error.html +2 -2
  26. package/web/.next/standalone/web/.next/server/app/_global-error.rsc +1 -1
  27. package/web/.next/standalone/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  28. package/web/.next/standalone/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  29. package/web/.next/standalone/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  30. package/web/.next/standalone/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  31. package/web/.next/standalone/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  32. package/web/.next/standalone/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  33. package/web/.next/standalone/web/.next/server/app/_not-found.html +1 -1
  34. package/web/.next/standalone/web/.next/server/app/_not-found.rsc +2 -2
  35. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  36. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  37. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  38. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  39. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  40. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  41. package/web/.next/standalone/web/.next/server/app/docs/installation/page_client-reference-manifest.js +1 -1
  42. package/web/.next/standalone/web/.next/server/app/docs/installation.html +2 -2
  43. package/web/.next/standalone/web/.next/server/app/docs/installation.rsc +2 -2
  44. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_full.segment.rsc +2 -2
  45. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_head.segment.rsc +1 -1
  46. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_index.segment.rsc +2 -2
  47. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_tree.segment.rsc +2 -2
  48. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/docs/installation/__PAGE__.segment.rsc +1 -1
  49. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/docs/installation.segment.rsc +1 -1
  50. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/docs.segment.rsc +1 -1
  51. package/web/.next/standalone/web/.next/server/app/docs/page_client-reference-manifest.js +1 -1
  52. package/web/.next/standalone/web/.next/server/app/docs/skills/page_client-reference-manifest.js +1 -1
  53. package/web/.next/standalone/web/.next/server/app/docs/skills.html +2 -2
  54. package/web/.next/standalone/web/.next/server/app/docs/skills.rsc +2 -2
  55. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_full.segment.rsc +2 -2
  56. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_head.segment.rsc +1 -1
  57. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_index.segment.rsc +2 -2
  58. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_tree.segment.rsc +2 -2
  59. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/docs/skills/__PAGE__.segment.rsc +1 -1
  60. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/docs/skills.segment.rsc +1 -1
  61. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/docs.segment.rsc +1 -1
  62. package/web/.next/standalone/web/.next/server/app/docs/tools/page_client-reference-manifest.js +1 -1
  63. package/web/.next/standalone/web/.next/server/app/docs/tools.html +2 -2
  64. package/web/.next/standalone/web/.next/server/app/docs/tools.rsc +2 -2
  65. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_full.segment.rsc +2 -2
  66. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_head.segment.rsc +1 -1
  67. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_index.segment.rsc +2 -2
  68. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_tree.segment.rsc +2 -2
  69. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/docs/tools/__PAGE__.segment.rsc +1 -1
  70. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/docs/tools.segment.rsc +1 -1
  71. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/docs.segment.rsc +1 -1
  72. package/web/.next/standalone/web/.next/server/app/docs.html +2 -2
  73. package/web/.next/standalone/web/.next/server/app/docs.rsc +2 -2
  74. package/web/.next/standalone/web/.next/server/app/docs.segments/_full.segment.rsc +2 -2
  75. package/web/.next/standalone/web/.next/server/app/docs.segments/_head.segment.rsc +1 -1
  76. package/web/.next/standalone/web/.next/server/app/docs.segments/_index.segment.rsc +2 -2
  77. package/web/.next/standalone/web/.next/server/app/docs.segments/_tree.segment.rsc +2 -2
  78. package/web/.next/standalone/web/.next/server/app/docs.segments/docs/__PAGE__.segment.rsc +1 -1
  79. package/web/.next/standalone/web/.next/server/app/docs.segments/docs.segment.rsc +1 -1
  80. package/web/.next/standalone/web/.next/server/app/embed/[id]/page.js.nft.json +1 -1
  81. package/web/.next/standalone/web/.next/server/app/embed/[id]/page_client-reference-manifest.js +1 -1
  82. package/web/.next/standalone/web/.next/server/app/index.html +1 -1
  83. package/web/.next/standalone/web/.next/server/app/index.rsc +4 -4
  84. package/web/.next/standalone/web/.next/server/app/index.segments/!KG1haW4p/__PAGE__.segment.rsc +2 -2
  85. package/web/.next/standalone/web/.next/server/app/index.segments/!KG1haW4p.segment.rsc +2 -2
  86. package/web/.next/standalone/web/.next/server/app/index.segments/_full.segment.rsc +4 -4
  87. package/web/.next/standalone/web/.next/server/app/index.segments/_head.segment.rsc +1 -1
  88. package/web/.next/standalone/web/.next/server/app/index.segments/_index.segment.rsc +2 -2
  89. package/web/.next/standalone/web/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  90. package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_708e1a2e._.js → 2374f_02a118f9._.js} +1 -1
  91. package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_3db08933._.js → 2374f_0ed477f8._.js} +1 -1
  92. package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_7d957e38._.js → 2374f_12bad06e._.js} +1 -1
  93. package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_1225fb9d._.js → 2374f_2526ca80._.js} +1 -1
  94. package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_95e53328._.js → 2374f_3b51a934._.js} +1 -1
  95. package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_f1f229dd._.js → 2374f_3e519469._.js} +1 -1
  96. package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_a90b70ee._.js → 2374f_5ebfcf1a._.js} +1 -1
  97. package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_a19628a3._.js → 2374f_a0f483d1._.js} +1 -1
  98. package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_8385a57b._.js → 2374f_acf3dfe4._.js} +1 -1
  99. package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_32fd5733._.js → 2374f_ad08e83a._.js} +1 -1
  100. package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_2eac907f._.js → 2374f_c1d54c16._.js} +1 -1
  101. package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_51500fd2._.js → 2374f_db3e363b._.js} +1 -1
  102. package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_2775224f._.js → 2374f_f0d7e130._.js} +1 -1
  103. package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_6f1ea3a7._.js → 2374f_fc992d90._.js} +1 -1
  104. package/web/.next/standalone/web/.next/server/chunks/ssr/{[root-of-the-server]__5bde4c40._.js → [root-of-the-server]__06818a54._.js} +2 -2
  105. package/web/.next/standalone/web/.next/server/chunks/ssr/{[root-of-the-server]__4085bf35._.js → [root-of-the-server]__c71f29f9._.js} +4 -4
  106. package/web/.next/standalone/web/.next/server/chunks/ssr/web_2b3a5919._.js +1 -1
  107. package/web/.next/standalone/web/.next/server/chunks/ssr/web_38156da8._.js +1 -1
  108. package/web/.next/standalone/web/.next/server/chunks/ssr/web_5cca707f._.js +7 -0
  109. package/web/.next/standalone/web/.next/server/chunks/ssr/web_935e81f5._.js +7 -0
  110. package/web/.next/standalone/web/.next/server/chunks/ssr/{web_14735895._.js → web_cc5f7515._.js} +2 -2
  111. package/web/.next/standalone/web/.next/server/pages/404.html +1 -1
  112. package/web/.next/standalone/web/.next/server/pages/500.html +2 -2
  113. package/web/.next/standalone/web/.next/server/server-reference-manifest.js +1 -1
  114. package/web/.next/standalone/web/.next/server/server-reference-manifest.json +1 -1
  115. package/web/.next/{static/chunks/4b6a9454bc6460c5.js → standalone/web/.next/static/chunks/31208ade542a0fcb.js} +3 -3
  116. package/web/.next/{static/chunks/4a490bc538aa0940.js → standalone/web/.next/static/chunks/4e673433173ad456.js} +3 -3
  117. package/web/.next/standalone/web/.next/static/chunks/{c2dccd8f56d8eb5a.js → 515f0c0bd6087843.js} +5 -5
  118. package/web/.next/standalone/web/.next/static/chunks/fd39dd62879495e1.css +1 -0
  119. package/web/.next/standalone/web/.next/static/static/chunks/{4b6a9454bc6460c5.js → 31208ade542a0fcb.js} +3 -3
  120. package/web/.next/standalone/web/.next/static/static/chunks/{4a490bc538aa0940.js → 4e673433173ad456.js} +3 -3
  121. package/web/.next/standalone/web/.next/static/static/chunks/{c2dccd8f56d8eb5a.js → 515f0c0bd6087843.js} +5 -5
  122. package/web/.next/standalone/web/.next/static/static/chunks/fd39dd62879495e1.css +1 -0
  123. package/web/.next/standalone/web/src/components/chat-interface.tsx +96 -1
  124. package/web/.next/standalone/web/src/lib/api.ts +24 -0
  125. package/web/.next/{standalone/web/.next/static/chunks/4b6a9454bc6460c5.js → static/chunks/31208ade542a0fcb.js} +3 -3
  126. package/web/.next/{standalone/web/.next/static/chunks/4a490bc538aa0940.js → static/chunks/4e673433173ad456.js} +3 -3
  127. package/web/.next/static/chunks/{c2dccd8f56d8eb5a.js → 515f0c0bd6087843.js} +5 -5
  128. package/web/.next/static/chunks/fd39dd62879495e1.css +1 -0
  129. package/web/.next/standalone/web/.next/server/chunks/ssr/web_08bbd8c8._.js +0 -7
  130. package/web/.next/standalone/web/.next/server/chunks/ssr/web_c729ad51._.js +0 -7
  131. package/web/.next/standalone/web/.next/static/chunks/8b53c110c5a6f9a0.css +0 -1
  132. package/web/.next/standalone/web/.next/static/static/chunks/8b53c110c5a6f9a0.css +0 -1
  133. package/web/.next/static/chunks/8b53c110c5a6f9a0.css +0 -1
  134. /package/web/.next/standalone/web/.next/static/{NuySHGSR0CchKU9zo42LK → static/tZkod5afiOX7T9AkN1yPO}/_buildManifest.js +0 -0
  135. /package/web/.next/standalone/web/.next/static/{NuySHGSR0CchKU9zo42LK → static/tZkod5afiOX7T9AkN1yPO}/_clientMiddlewareManifest.json +0 -0
  136. /package/web/.next/standalone/web/.next/static/{NuySHGSR0CchKU9zo42LK → static/tZkod5afiOX7T9AkN1yPO}/_ssgManifest.js +0 -0
  137. /package/web/.next/standalone/web/.next/static/{static/NuySHGSR0CchKU9zo42LK → tZkod5afiOX7T9AkN1yPO}/_buildManifest.js +0 -0
  138. /package/web/.next/standalone/web/.next/static/{static/NuySHGSR0CchKU9zo42LK → tZkod5afiOX7T9AkN1yPO}/_clientMiddlewareManifest.json +0 -0
  139. /package/web/.next/standalone/web/.next/static/{static/NuySHGSR0CchKU9zo42LK → tZkod5afiOX7T9AkN1yPO}/_ssgManifest.js +0 -0
  140. /package/web/.next/static/{NuySHGSR0CchKU9zo42LK → tZkod5afiOX7T9AkN1yPO}/_buildManifest.js +0 -0
  141. /package/web/.next/static/{NuySHGSR0CchKU9zo42LK → tZkod5afiOX7T9AkN1yPO}/_clientMiddlewareManifest.json +0 -0
  142. /package/web/.next/static/{NuySHGSR0CchKU9zo42LK → tZkod5afiOX7T9AkN1yPO}/_ssgManifest.js +0 -0
@@ -1,6 +1,6 @@
1
1
  import 'ai';
2
2
  import '../schema-XcP0dedO.js';
3
- export { A as Agent, a as AgentOptions, b as AgentRunOptions, c as AgentStreamResult, C as ContextManager, M as MessageAttachment, d as buildSystemPrompt, e as buildTaskPromptAddendum } from '../index-BhKQYdOx.js';
4
- import '../search-DkNNtC5A.js';
3
+ export { A as Agent, a as AgentOptions, b as AgentRunOptions, c as AgentStreamResult, C as ContextManager, M as MessageAttachment, d as buildSystemPrompt, e as buildTaskPromptAddendum } from '../index-DHyVVhJY.js';
4
+ import '../search-CCffrVJE.js';
5
5
  import 'drizzle-orm/sqlite-core';
6
6
  import 'zod';
@@ -1416,19 +1416,14 @@ __export(stream_proxy_exports, {
1416
1416
  import WebSocket from "ws";
1417
1417
  import { EventEmitter } from "events";
1418
1418
  function getOrCreateProxy(sessionId, port) {
1419
- let proxy = activeProxies.get(sessionId);
1420
- if (proxy && !proxy.connected) {
1421
- proxy.destroy();
1422
- proxy = void 0;
1423
- }
1424
- if (!proxy) {
1425
- proxy = new BrowserStreamProxy(port);
1426
- activeProxies.set(sessionId, proxy);
1427
- proxy.on("close", () => {
1428
- activeProxies.delete(sessionId);
1429
- });
1430
- proxy.connect();
1431
- }
1419
+ const existing = activeProxies.get(sessionId);
1420
+ if (existing) return existing;
1421
+ const proxy = new BrowserStreamProxy(port);
1422
+ activeProxies.set(sessionId, proxy);
1423
+ proxy.on("close", () => {
1424
+ activeProxies.delete(sessionId);
1425
+ });
1426
+ proxy.connect();
1432
1427
  return proxy;
1433
1428
  }
1434
1429
  function getProxy(sessionId) {
@@ -1445,8 +1440,8 @@ var RECONNECT_DELAY_MS, MAX_RECONNECT_ATTEMPTS, FRAME_THROTTLE_MS, BrowserStream
1445
1440
  var init_stream_proxy = __esm({
1446
1441
  "src/browser/stream-proxy.ts"() {
1447
1442
  "use strict";
1448
- RECONNECT_DELAY_MS = 500;
1449
- MAX_RECONNECT_ATTEMPTS = 10;
1443
+ RECONNECT_DELAY_MS = 1e3;
1444
+ MAX_RECONNECT_ATTEMPTS = 20;
1450
1445
  FRAME_THROTTLE_MS = 100;
1451
1446
  BrowserStreamProxy = class extends EventEmitter {
1452
1447
  ws = null;
@@ -1496,8 +1491,11 @@ var init_stream_proxy = __esm({
1496
1491
  }
1497
1492
  });
1498
1493
  this.ws.on("close", () => {
1494
+ const wasConnected = this._connected;
1499
1495
  this._connected = false;
1500
- this.emit("status", { connected: false, screencasting: false });
1496
+ if (wasConnected) {
1497
+ this.emit("status", { connected: false, screencasting: false });
1498
+ }
1501
1499
  if (!this.destroyed) {
1502
1500
  this.scheduleReconnect();
1503
1501
  }
@@ -1539,7 +1537,7 @@ var init_stream_proxy = __esm({
1539
1537
  return;
1540
1538
  }
1541
1539
  this.reconnectAttempts++;
1542
- const delay = RECONNECT_DELAY_MS * this.reconnectAttempts;
1540
+ const delay = this.reconnectAttempts <= 5 ? RECONNECT_DELAY_MS : RECONNECT_DELAY_MS * (this.reconnectAttempts - 4);
1543
1541
  this.reconnectTimer = setTimeout(() => this.doConnect(), delay);
1544
1542
  }
1545
1543
  /**
@@ -2179,15 +2177,15 @@ function getBrowserStreamPort(sessionId) {
2179
2177
  }
2180
2178
  return port;
2181
2179
  }
2182
- function isAgentBrowserOpenCommand(command) {
2183
- return /\bagent-browser\s+open\b/.test(command);
2180
+ function hasAgentBrowserCommand(command) {
2181
+ return /\bagent-browser\b/.test(command);
2184
2182
  }
2185
2183
  function isAgentBrowserCloseCommand(command) {
2186
- return /\bagent-browser\s+close\b/.test(command);
2184
+ return /\bagent-browser\s+(close|close\s+--all)\b/.test(command);
2187
2185
  }
2188
2186
  function injectBrowserStreamPort(command, port) {
2189
2187
  return command.replace(
2190
- /\bagent-browser\b/,
2188
+ /\bagent-browser\b/g,
2191
2189
  `AGENT_BROWSER_STREAM_PORT=${port} agent-browser`
2192
2190
  );
2193
2191
  }
@@ -2357,12 +2355,14 @@ Terminal output is stored in the global SparkECoder data directory. Use the \`ta
2357
2355
  };
2358
2356
  }
2359
2357
  let actualCommand = command;
2360
- const browserOpen = isAgentBrowserOpenCommand(command);
2358
+ const hasAgentBrowser = hasAgentBrowserCommand(command);
2361
2359
  const browserClose = isAgentBrowserCloseCommand(command);
2362
2360
  let browserPort;
2363
- if (browserOpen) {
2361
+ if (hasAgentBrowser) {
2364
2362
  browserPort = getBrowserStreamPort(options.sessionId);
2365
- actualCommand = injectBrowserStreamPort(command, browserPort);
2363
+ if (!browserClose) {
2364
+ actualCommand = injectBrowserStreamPort(command, browserPort);
2365
+ }
2366
2366
  }
2367
2367
  const canUseTmux = await shouldUseTmux();
2368
2368
  if (background) {
@@ -2378,9 +2378,6 @@ Terminal output is stored in the global SparkECoder data directory. Use the \`ta
2378
2378
  sessionId: options.sessionId,
2379
2379
  terminalId
2380
2380
  });
2381
- if (browserOpen && browserPort) {
2382
- options.onProgress?.({ terminalId, status: "running", command, browserStreamPort: browserPort });
2383
- }
2384
2381
  return {
2385
2382
  success: true,
2386
2383
  id: result.id,
@@ -2399,7 +2396,13 @@ Terminal output is stored in the global SparkECoder data directory. Use the \`ta
2399
2396
  });
2400
2397
  const truncatedOutput = truncateOutput(result.output, MAX_OUTPUT_CHARS2);
2401
2398
  options.onOutput?.(truncatedOutput);
2402
- options.onProgress?.({ terminalId, status: "completed", command, browserStreamPort: browserClose ? browserPort : void 0 });
2399
+ options.onProgress?.({
2400
+ terminalId,
2401
+ status: "completed",
2402
+ command,
2403
+ browserStreamPort: browserPort,
2404
+ browserClosed: browserClose || void 0
2405
+ });
2403
2406
  return {
2404
2407
  success: result.exitCode === 0,
2405
2408
  id: result.id,
@@ -5614,12 +5617,18 @@ Before calling \`complete_task\`, you MUST verify your work completely. Do not j
5614
5617
  - If the task asked for multiple things, verify EACH one individually.
5615
5618
  - If something doesn't look right, fix it \u2014 don't complete with known issues.
5616
5619
 
5620
+ **Screenshot your completed work:**
5621
+ - After completing a task, take a screenshot of the result when it makes sense (UI changes browser pages, etc.). You can use the browser skill to do this.
5622
+ - Use \`upload_file\` to upload the screenshot and include the download URL in your task result so the user can see proof of what was done.
5623
+ - This is especially valuable for UI/visual changes, successful test runs, and browser verification \u2014 show, don't just tell.
5624
+
5617
5625
  ### Use All Available Tools
5618
5626
  - **load_skill**: Load specialized skills/knowledge relevant to the task. Check what skills are available and use them.
5619
5627
  - **explore_agent**: Use for codebase exploration and understanding before making changes.
5620
5628
  - **code_graph**: Use to understand type hierarchies, references, and impact before refactoring.
5621
5629
  - **todo**: Track your progress on multi-step tasks so you don't miss steps.
5622
5630
  - **bash**: Full shell access \u2014 run builds, tests, dev servers, open browsers, curl endpoints, anything.
5631
+ - **upload_file**: Upload files (screenshots, reports, exports) to cloud storage. Use this to include screenshots of completed work in your task result \u2014 visual proof is very helpful.
5623
5632
 
5624
5633
  ### Output Schema
5625
5634
  The \`complete_task\` tool expects a \`result\` object matching this JSON Schema: