@tanstack/ai 0.37.0 → 0.39.0

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 (54) hide show
  1. package/dist/esm/activities/chat/index.js +28 -0
  2. package/dist/esm/activities/chat/index.js.map +1 -1
  3. package/dist/esm/activities/chat/mcp/manager.js +10 -1
  4. package/dist/esm/activities/chat/mcp/manager.js.map +1 -1
  5. package/dist/esm/activities/chat/mcp/types.d.ts +22 -0
  6. package/dist/esm/activities/chat/messages.js.map +1 -1
  7. package/dist/esm/activities/chat/middleware/compose.d.ts +7 -1
  8. package/dist/esm/activities/chat/middleware/compose.js +27 -0
  9. package/dist/esm/activities/chat/middleware/compose.js.map +1 -1
  10. package/dist/esm/activities/chat/middleware/index.d.ts +1 -1
  11. package/dist/esm/activities/chat/middleware/sandbox-runtime.d.ts +8 -0
  12. package/dist/esm/activities/chat/middleware/sandbox-runtime.js +9 -0
  13. package/dist/esm/activities/chat/middleware/sandbox-runtime.js.map +1 -0
  14. package/dist/esm/activities/chat/middleware/types.d.ts +22 -0
  15. package/dist/esm/activities/chat/stream/processor.js +23 -0
  16. package/dist/esm/activities/chat/stream/processor.js.map +1 -1
  17. package/dist/esm/activities/chat/tools/tool-calls.d.ts +6 -1
  18. package/dist/esm/activities/chat/tools/tool-calls.js +36 -0
  19. package/dist/esm/activities/chat/tools/tool-calls.js.map +1 -1
  20. package/dist/esm/adapter-internals.d.ts +2 -0
  21. package/dist/esm/adapter-internals.js +4 -0
  22. package/dist/esm/adapter-internals.js.map +1 -1
  23. package/dist/esm/client.d.ts +1 -1
  24. package/dist/esm/client.js.map +1 -1
  25. package/dist/esm/index.d.ts +2 -2
  26. package/dist/esm/logger/internal-logger.d.ts +2 -0
  27. package/dist/esm/logger/internal-logger.js +6 -1
  28. package/dist/esm/logger/internal-logger.js.map +1 -1
  29. package/dist/esm/logger/resolve.js +6 -3
  30. package/dist/esm/logger/resolve.js.map +1 -1
  31. package/dist/esm/logger/types.d.ts +5 -0
  32. package/dist/esm/types.d.ts +52 -1
  33. package/package.json +1 -1
  34. package/skills/ai-core/adapter-configuration/SKILL.md +25 -12
  35. package/skills/ai-core/chat-experience/SKILL.md +30 -2
  36. package/skills/ai-core/media-generation/SKILL.md +13 -0
  37. package/skills/ai-core/tool-calling/SKILL.md +10 -3
  38. package/src/activities/chat/index.ts +39 -0
  39. package/src/activities/chat/mcp/manager.ts +31 -1
  40. package/src/activities/chat/mcp/types.ts +23 -0
  41. package/src/activities/chat/messages.ts +5 -0
  42. package/src/activities/chat/middleware/compose.ts +34 -0
  43. package/src/activities/chat/middleware/index.ts +2 -0
  44. package/src/activities/chat/middleware/sandbox-runtime.ts +21 -0
  45. package/src/activities/chat/middleware/types.ts +37 -0
  46. package/src/activities/chat/stream/processor.ts +42 -0
  47. package/src/activities/chat/tools/tool-calls.ts +96 -2
  48. package/src/adapter-internals.ts +6 -0
  49. package/src/client.ts +1 -0
  50. package/src/index.ts +4 -0
  51. package/src/logger/internal-logger.ts +6 -0
  52. package/src/logger/resolve.ts +3 -0
  53. package/src/logger/types.ts +5 -0
  54. package/src/types.ts +51 -0
@@ -10,6 +10,7 @@ import { convertSchemaForStructuredOutput, isStandardSchema, parseWithStandardSc
10
10
  import { maxIterations } from "./agent-loop-strategies.js";
11
11
  import { convertMessagesToModelMessages, generateMessageId } from "./messages.js";
12
12
  import { MiddlewareRunner } from "./middleware/compose.js";
13
+ import { provideSandboxRuntime } from "./middleware/sandbox-runtime.js";
13
14
  import { CapabilityRegistry } from "./middleware/capabilities.js";
14
15
  import { validateCapabilities } from "./middleware/validate.js";
15
16
  import { MCPManager } from "./mcp/manager.js";
@@ -70,6 +71,7 @@ class TextEngine {
70
71
  // Middleware support
71
72
  middlewareRunner;
72
73
  middlewareCtx;
74
+ sandboxFileQueue = [];
73
75
  deferredPromises = [];
74
76
  abortReason;
75
77
  middlewareAbortController;
@@ -185,6 +187,16 @@ class TextEngine {
185
187
  getOptional: (capability) => capability[0](this.middlewareCtx, { optional: true }),
186
188
  provide: (capability, value) => capability[1](this.middlewareCtx, value)
187
189
  };
190
+ provideSandboxRuntime(this.middlewareCtx, {
191
+ logger: this.logger,
192
+ emit: (event) => {
193
+ this.logger.sandbox(`file ${event.type} ${event.path}`, { event });
194
+ void this.middlewareRunner.runSandboxFile(this.middlewareCtx, event);
195
+ this.sandboxFileQueue.push(
196
+ this.createCustomEventChunk("sandbox.file", { ...event })
197
+ );
198
+ }
199
+ });
188
200
  }
189
201
  /** Get the accumulated content after the chat loop completes */
190
202
  getAccumulatedContent() {
@@ -399,6 +411,10 @@ class TextEngine {
399
411
  threadId: this.threadId,
400
412
  runId: this.runIdOverride,
401
413
  parentRunId: this.parentRunIdOverride,
414
+ // Expose provided capabilities (e.g. sandbox) to harness adapters.
415
+ capabilities: this.middlewareCtx,
416
+ // Client approval decisions, for harness interactive-approval resolution.
417
+ approvals: this.initialApprovals,
402
418
  ...combinedSchema ? { outputSchema: combinedSchema } : {}
403
419
  })) {
404
420
  if (this.isCancelled()) {
@@ -444,10 +460,12 @@ class TextEngine {
444
460
  if (chunk.type === "RUN_FINISHED" && chunk.usage) {
445
461
  await this.middlewareRunner.runOnUsage(this.middlewareCtx, chunk.usage);
446
462
  }
463
+ yield* this.drainSandboxFileQueue();
447
464
  if (this.earlyTermination) {
448
465
  break;
449
466
  }
450
467
  }
468
+ yield* this.drainSandboxFileQueue();
451
469
  }
452
470
  handleStreamChunk(chunk) {
453
471
  switch (chunk.type) {
@@ -1412,6 +1430,16 @@ class TextEngine {
1412
1430
  this.middlewareCtx.chunkIndex++;
1413
1431
  }
1414
1432
  }
1433
+ /**
1434
+ * Drain queued `sandbox.file` chunks (emitted via the SandboxRuntime sink)
1435
+ * through the middleware pipeline and into the public stream.
1436
+ */
1437
+ async *drainSandboxFileQueue() {
1438
+ while (this.sandboxFileQueue.length > 0) {
1439
+ const chunk = this.sandboxFileQueue.shift();
1440
+ if (chunk) yield* this.pipeThroughMiddleware(chunk);
1441
+ }
1442
+ }
1415
1443
  /**
1416
1444
  * Drain an executeToolCalls async generator, yielding any CustomEvent chunks
1417
1445
  * through the middleware pipeline and returning the final ExecuteToolCallsResult.