sparkecoder 0.1.122 → 0.1.124

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 (136) hide show
  1. package/dist/agent/index.d.ts +3 -3
  2. package/dist/agent/index.js +67 -14
  3. package/dist/agent/index.js.map +1 -1
  4. package/dist/cli.js +201 -66
  5. package/dist/cli.js.map +1 -1
  6. package/dist/db/index.d.ts +2 -2
  7. package/dist/{index-DczYH89U.d.ts → index-Bcz0aCAR.d.ts} +104 -104
  8. package/dist/index.d.ts +5 -5
  9. package/dist/index.js +124 -24
  10. package/dist/index.js.map +1 -1
  11. package/dist/{schema-DxrKyetI.d.ts → schema-BWbWmfDQ.d.ts} +3 -3
  12. package/dist/{search-CVVfuBPZ.d.ts → search-DOzC4ojH.d.ts} +4 -4
  13. package/dist/server/index.js +124 -24
  14. package/dist/server/index.js.map +1 -1
  15. package/dist/skills/default/recording.md +2 -2
  16. package/dist/tools/index.d.ts +3 -3
  17. package/package.json +1 -1
  18. package/src/skills/default/recording.md +2 -2
  19. package/web/.next/BUILD_ID +1 -1
  20. package/web/.next/standalone/web/.next/BUILD_ID +1 -1
  21. package/web/.next/standalone/web/.next/build-manifest.json +2 -2
  22. package/web/.next/standalone/web/.next/prerender-manifest.json +3 -3
  23. package/web/.next/standalone/web/.next/server/app/(main)/agents/page_client-reference-manifest.js +1 -1
  24. package/web/.next/standalone/web/.next/server/app/(main)/page_client-reference-manifest.js +1 -1
  25. package/web/.next/standalone/web/.next/server/app/(main)/session/[id]/page.js.nft.json +1 -1
  26. package/web/.next/standalone/web/.next/server/app/(main)/session/[id]/page_client-reference-manifest.js +1 -1
  27. package/web/.next/standalone/web/.next/server/app/(main)/settings/page_client-reference-manifest.js +1 -1
  28. package/web/.next/standalone/web/.next/server/app/_global-error.html +2 -2
  29. package/web/.next/standalone/web/.next/server/app/_global-error.rsc +1 -1
  30. package/web/.next/standalone/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  31. package/web/.next/standalone/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  32. package/web/.next/standalone/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  33. package/web/.next/standalone/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  34. package/web/.next/standalone/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  35. package/web/.next/standalone/web/.next/server/app/_not-found.html +1 -1
  36. package/web/.next/standalone/web/.next/server/app/_not-found.rsc +1 -1
  37. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  38. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  39. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  40. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  41. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  42. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  43. package/web/.next/standalone/web/.next/server/app/agents.html +1 -1
  44. package/web/.next/standalone/web/.next/server/app/agents.rsc +3 -3
  45. package/web/.next/standalone/web/.next/server/app/agents.segments/!KG1haW4p/agents/__PAGE__.segment.rsc +2 -2
  46. package/web/.next/standalone/web/.next/server/app/agents.segments/!KG1haW4p/agents.segment.rsc +1 -1
  47. package/web/.next/standalone/web/.next/server/app/agents.segments/!KG1haW4p.segment.rsc +2 -2
  48. package/web/.next/standalone/web/.next/server/app/agents.segments/_full.segment.rsc +3 -3
  49. package/web/.next/standalone/web/.next/server/app/agents.segments/_head.segment.rsc +1 -1
  50. package/web/.next/standalone/web/.next/server/app/agents.segments/_index.segment.rsc +1 -1
  51. package/web/.next/standalone/web/.next/server/app/agents.segments/_tree.segment.rsc +1 -1
  52. package/web/.next/standalone/web/.next/server/app/docs/installation.html +2 -2
  53. package/web/.next/standalone/web/.next/server/app/docs/installation.rsc +1 -1
  54. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_full.segment.rsc +1 -1
  55. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_head.segment.rsc +1 -1
  56. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_index.segment.rsc +1 -1
  57. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_tree.segment.rsc +1 -1
  58. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/docs/installation/__PAGE__.segment.rsc +1 -1
  59. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/docs/installation.segment.rsc +1 -1
  60. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/docs.segment.rsc +1 -1
  61. package/web/.next/standalone/web/.next/server/app/docs/skills.html +2 -2
  62. package/web/.next/standalone/web/.next/server/app/docs/skills.rsc +1 -1
  63. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_full.segment.rsc +1 -1
  64. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_head.segment.rsc +1 -1
  65. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_index.segment.rsc +1 -1
  66. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_tree.segment.rsc +1 -1
  67. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/docs/skills/__PAGE__.segment.rsc +1 -1
  68. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/docs/skills.segment.rsc +1 -1
  69. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/docs.segment.rsc +1 -1
  70. package/web/.next/standalone/web/.next/server/app/docs/tools.html +2 -2
  71. package/web/.next/standalone/web/.next/server/app/docs/tools.rsc +1 -1
  72. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_full.segment.rsc +1 -1
  73. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_head.segment.rsc +1 -1
  74. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_index.segment.rsc +1 -1
  75. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_tree.segment.rsc +1 -1
  76. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/docs/tools/__PAGE__.segment.rsc +1 -1
  77. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/docs/tools.segment.rsc +1 -1
  78. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/docs.segment.rsc +1 -1
  79. package/web/.next/standalone/web/.next/server/app/docs.html +2 -2
  80. package/web/.next/standalone/web/.next/server/app/docs.rsc +1 -1
  81. package/web/.next/standalone/web/.next/server/app/docs.segments/_full.segment.rsc +1 -1
  82. package/web/.next/standalone/web/.next/server/app/docs.segments/_head.segment.rsc +1 -1
  83. package/web/.next/standalone/web/.next/server/app/docs.segments/_index.segment.rsc +1 -1
  84. package/web/.next/standalone/web/.next/server/app/docs.segments/_tree.segment.rsc +1 -1
  85. package/web/.next/standalone/web/.next/server/app/docs.segments/docs/__PAGE__.segment.rsc +1 -1
  86. package/web/.next/standalone/web/.next/server/app/docs.segments/docs.segment.rsc +1 -1
  87. package/web/.next/standalone/web/.next/server/app/index.html +1 -1
  88. package/web/.next/standalone/web/.next/server/app/index.rsc +3 -3
  89. package/web/.next/standalone/web/.next/server/app/index.segments/!KG1haW4p/__PAGE__.segment.rsc +2 -2
  90. package/web/.next/standalone/web/.next/server/app/index.segments/!KG1haW4p.segment.rsc +2 -2
  91. package/web/.next/standalone/web/.next/server/app/index.segments/_full.segment.rsc +3 -3
  92. package/web/.next/standalone/web/.next/server/app/index.segments/_head.segment.rsc +1 -1
  93. package/web/.next/standalone/web/.next/server/app/index.segments/_index.segment.rsc +1 -1
  94. package/web/.next/standalone/web/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  95. package/web/.next/standalone/web/.next/server/app/settings.html +1 -1
  96. package/web/.next/standalone/web/.next/server/app/settings.rsc +3 -3
  97. package/web/.next/standalone/web/.next/server/app/settings.segments/!KG1haW4p/settings/__PAGE__.segment.rsc +2 -2
  98. package/web/.next/standalone/web/.next/server/app/settings.segments/!KG1haW4p/settings.segment.rsc +1 -1
  99. package/web/.next/standalone/web/.next/server/app/settings.segments/!KG1haW4p.segment.rsc +2 -2
  100. package/web/.next/standalone/web/.next/server/app/settings.segments/_full.segment.rsc +3 -3
  101. package/web/.next/standalone/web/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  102. package/web/.next/standalone/web/.next/server/app/settings.segments/_index.segment.rsc +1 -1
  103. package/web/.next/standalone/web/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
  104. package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_c87abaf4._.js → 2374f_12d55e68._.js} +1 -1
  105. package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_1f3f2d00._.js → 2374f_1c0639c2._.js} +1 -1
  106. package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_a0d5caeb._.js → 2374f_28cd6777._.js} +1 -1
  107. package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_570c34dc._.js → 2374f_5f47a9b7._.js} +1 -1
  108. package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_d8122230._.js → 2374f_aa218457._.js} +1 -1
  109. package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_9c560f3a._.js → 2374f_f678a96f._.js} +1 -1
  110. package/web/.next/standalone/web/.next/server/chunks/ssr/{2374f_38945fd9._.js → 2374f_fac4000d._.js} +1 -1
  111. package/web/.next/standalone/web/.next/server/chunks/ssr/{[root-of-the-server]__4de426bd._.js → [root-of-the-server]__e5911ea8._.js} +4 -4
  112. package/web/.next/standalone/web/.next/server/chunks/ssr/{web_62ca4286._.js → web_2966b3a3._.js} +2 -2
  113. package/web/.next/standalone/web/.next/server/chunks/ssr/web_4fe3c244._.js +1 -1
  114. package/web/.next/standalone/web/.next/server/pages/404.html +1 -1
  115. package/web/.next/standalone/web/.next/server/pages/500.html +2 -2
  116. package/web/.next/standalone/web/.next/server/server-reference-manifest.js +1 -1
  117. package/web/.next/standalone/web/.next/server/server-reference-manifest.json +1 -1
  118. package/web/.next/standalone/web/.next/static/chunks/{91988e253d5fa420.js → 4d95c15f712c9e06.js} +5 -5
  119. package/web/.next/standalone/web/.next/static/chunks/780c93257fac7d43.js +1 -0
  120. package/web/.next/standalone/web/.next/static/static/chunks/{91988e253d5fa420.js → 4d95c15f712c9e06.js} +5 -5
  121. package/web/.next/standalone/web/.next/static/static/chunks/780c93257fac7d43.js +1 -0
  122. package/web/.next/standalone/web/src/components/chat-interface.tsx +112 -1
  123. package/web/.next/static/chunks/{91988e253d5fa420.js → 4d95c15f712c9e06.js} +5 -5
  124. package/web/.next/static/chunks/780c93257fac7d43.js +1 -0
  125. package/web/.next/standalone/web/.next/static/chunks/f0f19357f3fb7cf8.js +0 -1
  126. package/web/.next/standalone/web/.next/static/static/chunks/f0f19357f3fb7cf8.js +0 -1
  127. package/web/.next/static/chunks/f0f19357f3fb7cf8.js +0 -1
  128. /package/web/.next/standalone/web/.next/static/{BEIBC9-dP0_AWGmRy97hJ → cYXZ7UzGc5TttFIXRRcSC}/_buildManifest.js +0 -0
  129. /package/web/.next/standalone/web/.next/static/{BEIBC9-dP0_AWGmRy97hJ → cYXZ7UzGc5TttFIXRRcSC}/_clientMiddlewareManifest.json +0 -0
  130. /package/web/.next/standalone/web/.next/static/{BEIBC9-dP0_AWGmRy97hJ → cYXZ7UzGc5TttFIXRRcSC}/_ssgManifest.js +0 -0
  131. /package/web/.next/standalone/web/.next/static/static/{BEIBC9-dP0_AWGmRy97hJ → cYXZ7UzGc5TttFIXRRcSC}/_buildManifest.js +0 -0
  132. /package/web/.next/standalone/web/.next/static/static/{BEIBC9-dP0_AWGmRy97hJ → cYXZ7UzGc5TttFIXRRcSC}/_clientMiddlewareManifest.json +0 -0
  133. /package/web/.next/standalone/web/.next/static/static/{BEIBC9-dP0_AWGmRy97hJ → cYXZ7UzGc5TttFIXRRcSC}/_ssgManifest.js +0 -0
  134. /package/web/.next/static/{BEIBC9-dP0_AWGmRy97hJ → cYXZ7UzGc5TttFIXRRcSC}/_buildManifest.js +0 -0
  135. /package/web/.next/static/{BEIBC9-dP0_AWGmRy97hJ → cYXZ7UzGc5TttFIXRRcSC}/_clientMiddlewareManifest.json +0 -0
  136. /package/web/.next/static/{BEIBC9-dP0_AWGmRy97hJ → cYXZ7UzGc5TttFIXRRcSC}/_ssgManifest.js +0 -0
@@ -1,6 +1,6 @@
1
1
  import 'ai';
2
- import '../schema-DxrKyetI.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-DczYH89U.js';
4
- import '../search-CVVfuBPZ.js';
2
+ import '../schema-BWbWmfDQ.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-Bcz0aCAR.js';
4
+ import '../search-DOzC4ojH.js';
5
5
  import 'drizzle-orm/sqlite-core';
6
6
  import 'zod';
@@ -6865,6 +6865,7 @@ ${summaryContent}`
6865
6865
  ];
6866
6866
  }
6867
6867
  messages = repairToolPairing(messages);
6868
+ messages = ensureToolResultsFollowCalls(messages);
6868
6869
  messages = ensureEndsWithUserOrTool(messages);
6869
6870
  return messages;
6870
6871
  }
@@ -7059,7 +7060,7 @@ ${summaryContent}`
7059
7060
  }
7060
7061
  }
7061
7062
  async addResponseMessages(messages) {
7062
- const safe = repairToolPairing(messages);
7063
+ const safe = ensureToolResultsFollowCalls(repairToolPairing(messages));
7063
7064
  await messageQueries.addMany(this.sessionId, safe);
7064
7065
  try {
7065
7066
  const { appendTurn: appendTurn2, flattenContent: flattenContent2 } = await Promise.resolve().then(() => (init_conversation_archive(), conversation_archive_exports));
@@ -7133,6 +7134,55 @@ function wrapToolsNeverThrow(tools) {
7133
7134
  }
7134
7135
  return wrapped;
7135
7136
  }
7137
+ function ensureToolResultsFollowCalls(messages) {
7138
+ if (!Array.isArray(messages) || messages.length < 3) return messages;
7139
+ let mutated = false;
7140
+ const result = messages.slice();
7141
+ let i = 0;
7142
+ while (i < result.length) {
7143
+ const msg = result[i];
7144
+ if (msg?.role !== "assistant" || !Array.isArray(msg.content)) {
7145
+ i++;
7146
+ continue;
7147
+ }
7148
+ const callIds = /* @__PURE__ */ new Set();
7149
+ for (const part of msg.content) {
7150
+ if (part?.type === "tool-call" && typeof part.toolCallId === "string") {
7151
+ callIds.add(part.toolCallId);
7152
+ }
7153
+ }
7154
+ if (callIds.size === 0) {
7155
+ i++;
7156
+ continue;
7157
+ }
7158
+ let toolIdx = -1;
7159
+ for (let j = i + 1; j < result.length; j++) {
7160
+ const m = result[j];
7161
+ if (m?.role === "assistant" && Array.isArray(m.content) && m.content.some((p) => p?.type === "tool-call")) {
7162
+ break;
7163
+ }
7164
+ if (m?.role === "tool" && Array.isArray(m.content)) {
7165
+ const answersOne = m.content.some(
7166
+ (p) => p?.type === "tool-result" && typeof p.toolCallId === "string" && callIds.has(p.toolCallId)
7167
+ );
7168
+ if (answersOne) {
7169
+ toolIdx = j;
7170
+ break;
7171
+ }
7172
+ }
7173
+ }
7174
+ if (toolIdx > i + 1) {
7175
+ const [toolMsg] = result.splice(toolIdx, 1);
7176
+ result.splice(i + 1, 0, toolMsg);
7177
+ mutated = true;
7178
+ console.warn(
7179
+ `[tool-repair] Reordered tool-result message from index ${toolIdx} to ${i + 1} to immediately follow assistant tool-call(s) (${[...callIds].join(", ")}). ${toolIdx - i - 1} message(s) were wedged between them.`
7180
+ );
7181
+ }
7182
+ i++;
7183
+ }
7184
+ return mutated ? result : messages;
7185
+ }
7136
7186
  function repairToolPairing(messages) {
7137
7187
  const toolCallIds = /* @__PURE__ */ new Set();
7138
7188
  const toolResultIds = /* @__PURE__ */ new Set();
@@ -8327,7 +8377,7 @@ ${prompt}` });
8327
8377
  const config = getConfig();
8328
8378
  const userContent = this.buildUserMessageContent(options.prompt, options.attachments);
8329
8379
  if (!options.skipSaveUserMessage) {
8330
- this.context.addUserMessage(userContent);
8380
+ await this.context.addUserMessage(userContent);
8331
8381
  }
8332
8382
  await sessionQueries.updateStatus(this.session.id, "active");
8333
8383
  let systemPrompt = await buildSystemPrompt({
@@ -8375,9 +8425,10 @@ ${personality.trim()}`;
8375
8425
  // aborted mid-tool). Repairing in `prepareStep` guarantees no orphan
8376
8426
  // ever reaches the model and we never hit AI_MissingToolResultsError.
8377
8427
  prepareStep: async ({ messages: stepMessages }) => {
8378
- const repaired = repairToolPairing(stepMessages);
8379
- if (repaired === stepMessages) return {};
8380
- return { messages: repaired };
8428
+ const paired = repairToolPairing(stepMessages);
8429
+ const ordered = ensureToolResultsFollowCalls(paired);
8430
+ if (ordered === stepMessages) return {};
8431
+ return { messages: ordered };
8381
8432
  },
8382
8433
  onStepFinish: async (step) => {
8383
8434
  options.onStepFinish?.(step);
@@ -8390,7 +8441,7 @@ ${personality.trim()}`;
8390
8441
  const result = await stream;
8391
8442
  const response = await result.response;
8392
8443
  const responseMessages = response.messages;
8393
- this.context.addResponseMessages(responseMessages);
8444
+ await this.context.addResponseMessages(responseMessages);
8394
8445
  };
8395
8446
  return {
8396
8447
  sessionId: this.session.id,
@@ -8404,7 +8455,7 @@ ${personality.trim()}`;
8404
8455
  */
8405
8456
  async run(options) {
8406
8457
  const config = getConfig();
8407
- this.context.addUserMessage(options.prompt);
8458
+ await this.context.addUserMessage(options.prompt);
8408
8459
  const systemPrompt = await buildSystemPrompt({
8409
8460
  workingDirectory: this.session.workingDirectory,
8410
8461
  skillsDirectories: config.resolvedSkillsDirectories,
@@ -8428,13 +8479,14 @@ ${personality.trim()}`;
8428
8479
  } : void 0,
8429
8480
  // Repair tool pairing before every step (see `stream()` for full rationale).
8430
8481
  prepareStep: async ({ messages: stepMessages }) => {
8431
- const repaired = repairToolPairing(stepMessages);
8432
- if (repaired === stepMessages) return {};
8433
- return { messages: repaired };
8482
+ const paired = repairToolPairing(stepMessages);
8483
+ const ordered = ensureToolResultsFollowCalls(paired);
8484
+ if (ordered === stepMessages) return {};
8485
+ return { messages: ordered };
8434
8486
  }
8435
8487
  });
8436
8488
  const responseMessages = result.response.messages;
8437
- this.context.addResponseMessages(responseMessages);
8489
+ await this.context.addResponseMessages(responseMessages);
8438
8490
  return {
8439
8491
  text: result.text,
8440
8492
  steps: result.steps
@@ -8617,9 +8669,10 @@ ${p.text}` : p.text;
8617
8669
  // See the matching note in `stream()` — repair tool pairing before
8618
8670
  // every step so we never feed the model an orphan tool-call.
8619
8671
  prepareStep: async ({ messages: stepMessages }) => {
8620
- const repaired = repairToolPairing(stepMessages);
8621
- if (repaired === stepMessages) return {};
8622
- return { messages: repaired };
8672
+ const paired = repairToolPairing(stepMessages);
8673
+ const ordered = ensureToolResultsFollowCalls(paired);
8674
+ if (ordered === stepMessages) return {};
8675
+ return { messages: ordered };
8623
8676
  },
8624
8677
  onStepFinish: async (step) => {
8625
8678
  options.onStepFinish?.(step);