@mastra/code-sdk 1.15.0-alpha.8 → 1.15.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 (143) hide show
  1. package/dist/acp/agent.js +2 -1
  2. package/dist/acp/agent.js.map +1 -1
  3. package/dist/acp/event-mapper.js +0 -2
  4. package/dist/acp/event-mapper.js.map +1 -1
  5. package/dist/acp.js +1 -2
  6. package/dist/agent-connections/registry.js.map +1 -1
  7. package/dist/agent-connections/signal-provider.js.map +1 -1
  8. package/dist/agent-connections/state-processor.js.map +1 -1
  9. package/dist/agent-connections/tools.js +26 -24
  10. package/dist/agent-connections/tools.js.map +1 -1
  11. package/dist/agents/background-completion.d.ts +15 -2
  12. package/dist/agents/background-completion.d.ts.map +1 -1
  13. package/dist/agents/background-completion.js +19 -2
  14. package/dist/agents/background-completion.js.map +1 -1
  15. package/dist/agents/instructions.js +3 -2
  16. package/dist/agents/instructions.js.map +1 -1
  17. package/dist/agents/mastracode-gateway.js +35 -27
  18. package/dist/agents/mastracode-gateway.js.map +1 -1
  19. package/dist/agents/memory.d.ts.map +1 -1
  20. package/dist/agents/memory.js +17 -3
  21. package/dist/agents/memory.js.map +1 -1
  22. package/dist/agents/prompts/agent-instructions.js +1 -1
  23. package/dist/agents/prompts/agent-instructions.js.map +1 -1
  24. package/dist/agents/prompts/index.js +3 -2
  25. package/dist/agents/prompts/index.js.map +1 -1
  26. package/dist/agents/prompts/plan.js +2 -1
  27. package/dist/agents/prompts/plan.js.map +1 -1
  28. package/dist/agents/sandbox-filesystem.d.ts +28 -0
  29. package/dist/agents/sandbox-filesystem.d.ts.map +1 -1
  30. package/dist/agents/sandbox-filesystem.js +81 -2
  31. package/dist/agents/sandbox-filesystem.js.map +1 -1
  32. package/dist/agents/tools.d.ts.map +1 -1
  33. package/dist/agents/tools.js +18 -12
  34. package/dist/agents/tools.js.map +1 -1
  35. package/dist/agents/workspace.js +2 -1
  36. package/dist/agents/workspace.js.map +1 -1
  37. package/dist/auth/account-rotation-processor.js +2 -1
  38. package/dist/auth/account-rotation-processor.js.map +1 -1
  39. package/dist/auth/providers/anthropic.js +2 -2
  40. package/dist/auth/providers/anthropic.js.map +1 -1
  41. package/dist/auth/providers/github-copilot.js +1 -1
  42. package/dist/auth/providers/github-copilot.js.map +1 -1
  43. package/dist/auth/providers/openai-codex.js +3 -2
  44. package/dist/auth/providers/openai-codex.js.map +1 -1
  45. package/dist/auth/providers/xai.js +1 -1
  46. package/dist/auth/providers/xai.js.map +1 -1
  47. package/dist/clipboard/index.js +5 -4
  48. package/dist/clipboard/index.js.map +1 -1
  49. package/dist/evals/context-builder.js +1 -3
  50. package/dist/evals/context-builder.js.map +1 -1
  51. package/dist/evals/scorers/outcome.js +2 -1
  52. package/dist/evals/scorers/outcome.js.map +1 -1
  53. package/dist/factory/remote-controller.js.map +1 -1
  54. package/dist/factory/remote-session.d.ts +1 -1
  55. package/dist/factory/remote-session.d.ts.map +1 -1
  56. package/dist/factory/remote-session.js +15 -13
  57. package/dist/factory/remote-session.js.map +1 -1
  58. package/dist/headless/cli.js +2 -1
  59. package/dist/headless/cli.js.map +1 -1
  60. package/dist/headless/run-mc.js +9 -9
  61. package/dist/headless/run-mc.js.map +1 -1
  62. package/dist/hooks/executor.js +3 -1
  63. package/dist/hooks/executor.js.map +1 -1
  64. package/dist/hooks/manager.js +40 -26
  65. package/dist/hooks/manager.js.map +1 -1
  66. package/dist/index.d.ts.map +1 -1
  67. package/dist/index.js +38 -21
  68. package/dist/index.js.map +1 -1
  69. package/dist/knowledge-inspector.js +2 -2
  70. package/dist/knowledge-inspector.js.map +1 -1
  71. package/dist/lsp/server.js +4 -2
  72. package/dist/lsp/server.js.map +1 -1
  73. package/dist/mcp/manager.d.ts.map +1 -1
  74. package/dist/mcp/manager.js +14 -2
  75. package/dist/mcp/manager.js.map +1 -1
  76. package/dist/onboarding/settings.js +5 -2
  77. package/dist/onboarding/settings.js.map +1 -1
  78. package/dist/platform/index.js +5 -3
  79. package/dist/platform/index.js.map +1 -1
  80. package/dist/plugins/loader.js +3 -1
  81. package/dist/plugins/loader.js.map +1 -1
  82. package/dist/plugins/manager.js +2 -1
  83. package/dist/plugins/manager.js.map +1 -1
  84. package/dist/plugins/package-link.js.map +1 -1
  85. package/dist/plugins/scaffold.js +4 -2
  86. package/dist/plugins/scaffold.js.map +1 -1
  87. package/dist/plugins/signal-lane.js.map +1 -1
  88. package/dist/process-memory-diagnostics.js +2 -1
  89. package/dist/process-memory-diagnostics.js.map +1 -1
  90. package/dist/providers/amazon-bedrock-gateway.js +2 -1
  91. package/dist/providers/amazon-bedrock-gateway.js.map +1 -1
  92. package/dist/providers/amazon-bedrock.js +2 -2
  93. package/dist/providers/amazon-bedrock.js.map +1 -1
  94. package/dist/providers/claude-max.js +13 -9
  95. package/dist/providers/claude-max.js.map +1 -1
  96. package/dist/providers/github-copilot-gateway.js.map +1 -1
  97. package/dist/providers/github-copilot.js +13 -12
  98. package/dist/providers/github-copilot.js.map +1 -1
  99. package/dist/providers/openai-codex.js +14 -11
  100. package/dist/providers/openai-codex.js.map +1 -1
  101. package/dist/providers/provider-thinking.js.map +1 -1
  102. package/dist/providers/thinking-request.js +1 -1
  103. package/dist/providers/thinking-request.js.map +1 -1
  104. package/dist/schedules/run-script.js +1 -1
  105. package/dist/schedules/run-script.js.map +1 -1
  106. package/dist/schedules/scheduler.js.map +1 -1
  107. package/dist/tools/request-sandbox-access.js +7 -5
  108. package/dist/tools/request-sandbox-access.js.map +1 -1
  109. package/dist/tools/utils.js +3 -1
  110. package/dist/tools/utils.js.map +1 -1
  111. package/dist/tools/web-search.d.ts +13 -11
  112. package/dist/tools/web-search.d.ts.map +1 -1
  113. package/dist/tools/web-search.js +21 -15
  114. package/dist/tools/web-search.js.map +1 -1
  115. package/dist/utils/debug-log.js +2 -2
  116. package/dist/utils/debug-log.js.map +1 -1
  117. package/dist/utils/gateway-sync.js +1 -1
  118. package/dist/utils/gateway-sync.js.map +1 -1
  119. package/dist/utils/local-observability.d.ts +1 -1
  120. package/dist/utils/local-observability.d.ts.map +1 -1
  121. package/dist/utils/local-observability.js +1 -1
  122. package/dist/utils/local-observability.js.map +1 -1
  123. package/dist/utils/prune-cli.js +10 -8
  124. package/dist/utils/prune-cli.js.map +1 -1
  125. package/dist/utils/signals-pubsub.js.map +1 -1
  126. package/dist/utils/slash-command-processor.js +1 -1
  127. package/dist/utils/slash-command-processor.js.map +1 -1
  128. package/dist/utils/stdin-pipe.js +1 -1
  129. package/dist/utils/stdin-pipe.js.map +1 -1
  130. package/dist/utils/storage-factory.d.ts.map +1 -1
  131. package/dist/utils/storage-factory.js +1 -1
  132. package/dist/utils/storage-factory.js.map +1 -1
  133. package/dist/utils/storage-maintenance.js +1 -1
  134. package/dist/utils/storage-maintenance.js.map +1 -1
  135. package/dist/utils/update-check.js +2 -1
  136. package/dist/utils/update-check.js.map +1 -1
  137. package/dist/utils/wake-session.d.ts +1 -1
  138. package/dist/utils/wake-session.d.ts.map +1 -1
  139. package/dist/utils/wake-session.js +8 -1
  140. package/dist/utils/wake-session.js.map +1 -1
  141. package/dist/workflows/register-primitives.js +1 -1
  142. package/dist/workflows/register-primitives.js.map +1 -1
  143. package/package.json +19 -19
package/dist/index.js CHANGED
@@ -21,7 +21,7 @@ import { setAuthStorage as setAuthStorage$1 } from "./providers/claude-max.js";
21
21
  import { setAuthStorage as setAuthStorage$2 } from "./providers/github-copilot.js";
22
22
  import { setAuthStorage as setAuthStorage$3 } from "./providers/kimi-coding.js";
23
23
  import { setAuthStorage as setAuthStorage$4 } from "./providers/xai.js";
24
- import { createMastraCodeGateway, getDynamicModel, getGoalJudgeModel, resolveModel } from "./agents/model.js";
24
+ import { canUseProvider, createMastraCodeGateway, getDynamicModel, getGoalJudgeModel, resolveModel } from "./agents/model.js";
25
25
  import { getDynamicMemory, hasSubconsciousTools } from "./agents/memory.js";
26
26
  import { buildMode } from "./agents/modes/build.js";
27
27
  import { fastMode } from "./agents/modes/explore.js";
@@ -87,7 +87,6 @@ import { DEFAULT_GOAL_JUDGE_PROMPT } from "@mastra/core/tools";
87
87
  import { GithubSignals } from "@mastra/github-signals";
88
88
  import { LibSQLStore, LibSQLVector } from "@mastra/libsql";
89
89
  import { MastraPlatformExporter, MastraStorageExporter, Observability, SensitiveDataFilter } from "@mastra/observability";
90
- import { PostgresStore } from "@mastra/pg";
91
90
  //#region src/index.ts
92
91
  const CODE_AGENT_ID = "code-agent";
93
92
  const MASTRACODE_TRANSIENT_CONNECTION_MAX_RETRIES = 10;
@@ -228,7 +227,7 @@ function hasAncestorClassNamed(value, className) {
228
227
  function resolveInjectedStorageBackend(storage, configuredBackend) {
229
228
  if (configuredBackend) return configuredBackend;
230
229
  if (storage instanceof LibSQLStore || hasAncestorClassNamed(storage, "LibSQLStore")) return "libsql";
231
- if (storage instanceof PostgresStore || hasAncestorClassNamed(storage, "PostgresStore")) return "pg";
230
+ if (hasAncestorClassNamed(storage, "PostgresStore")) return "pg";
232
231
  throw new Error("storageBackend is required when injecting a custom storage instance.");
233
232
  }
234
233
  /** Whether the model router would resolve `modelId` through a gateway outside `sdkGatewayIds`. */
@@ -247,6 +246,10 @@ async function createMastraCodeAgentController(config) {
247
246
  const modeless = config?.modes === false;
248
247
  let activeSession;
249
248
  const liveSessions = /* @__PURE__ */ new Set();
249
+ const sessionRouter = {
250
+ getSession: (sessionId) => controller.getSession(sessionId),
251
+ listLiveSessions: () => liveSessions
252
+ };
250
253
  let pluginRuntimeController;
251
254
  if (configDir !== ".mastracode") validateConfigDirName(configDir);
252
255
  if (!config?.disableEnvFile) try {
@@ -280,8 +283,9 @@ async function createMastraCodeAgentController(config) {
280
283
  });
281
284
  }
282
285
  const mgApiKey = process.env["MASTRA_GATEWAY_API_KEY"] ?? storedGatewayKey;
286
+ const mastraGatewayBaseUrl = (process.env["MASTRA_GATEWAY_URL"] ?? storedGatewayUrl ?? "https://gateway-api.mastra.ai").replace(/\/+$/, "").replace(/\/v1$/, "");
283
287
  const mastraCodeGateway = createMastraCodeGateway({
284
- mastraGatewayBaseUrl: (process.env["MASTRA_GATEWAY_URL"] ?? storedGatewayUrl ?? "https://gateway-api.mastra.ai").replace(/\/+$/, "").replace(/\/v1$/, ""),
288
+ mastraGatewayBaseUrl,
285
289
  mastraGatewayApiKey: mgApiKey,
286
290
  routeThroughMastraGateway: false,
287
291
  settingsPath: config?.settingsPath
@@ -426,6 +430,14 @@ async function createMastraCodeAgentController(config) {
426
430
  owner: `${ownerId}:${process.pid}:${randomUUID()}`,
427
431
  onError: (error) => console.warn("Notification dispatch failed:", error)
428
432
  });
433
+ const resolveWakeOwner = async (target, leases) => {
434
+ const owner = await findWakeSession(controller, liveSessions, target, leases);
435
+ if (owner || !config?.resumeWakeSession) return owner;
436
+ await config.resumeWakeSession(target);
437
+ const resumed = await findWakeSession(controller, liveSessions, target, leases);
438
+ if (!resumed) throw new Error(`No session owns resource ${target.resourceId} to run its wake on thread ${target.threadId}.`);
439
+ return resumed;
440
+ };
429
441
  const getWakeStreamOptions = async ({ resourceId, threadId, owner }) => {
430
442
  const wake = owner ?? await findWakeSession(controller, liveSessions, {
431
443
  resourceId,
@@ -501,6 +513,7 @@ async function createMastraCodeAgentController(config) {
501
513
  isThreadActive: () => session.thread.getId() === threadId,
502
514
  threadId,
503
515
  resourceId,
516
+ sessionId: session.identity.getId(),
504
517
  session: {
505
518
  id: session.identity.getId(),
506
519
  ownerId: session.identity.getOwnerId(),
@@ -554,7 +567,11 @@ async function createMastraCodeAgentController(config) {
554
567
  resourceId: schedule.resourceId,
555
568
  threadId: schedule.threadId
556
569
  };
557
- const streamOptions = await getWakeStreamOptions(target);
570
+ const owner = await resolveWakeOwner(target);
571
+ const streamOptions = owner && owner !== FOREIGN_THREAD ? await getWakeStreamOptions({
572
+ ...target,
573
+ owner
574
+ }) : void 0;
558
575
  const accepted = await codeAgent.sendSignal({
559
576
  type: "user",
560
577
  tagName: "user",
@@ -565,7 +582,8 @@ async function createMastraCodeAgentController(config) {
565
582
  ifActive: { behavior: "deliver" },
566
583
  ifIdle: {
567
584
  behavior: "wake",
568
- ...streamOptions ? { streamOptions } : {}
585
+ ...streamOptions ? { streamOptions } : {},
586
+ ...owner === FOREIGN_THREAD ? { requireClaimedOwner: true } : {}
569
587
  }
570
588
  }).accepted;
571
589
  if (accepted.action === "blocked" || accepted.action === "discard") throw new Error(`the agent did not accept the prompt (${accepted.action})`);
@@ -628,12 +646,13 @@ async function createMastraCodeAgentController(config) {
628
646
  const projectPath = state?.projectPath ?? project.rootPath;
629
647
  const untrusted = state?.untrustedCheckout === true && typeof state?.baseRef === "string";
630
648
  const roots = sessionInstructionRoots(projectPath, state?.instructionRoots);
631
- return instructionSourcePaths(loadSessionInstructions({
649
+ const sources = loadSessionInstructions({
632
650
  workingDir: projectPath,
633
651
  instructionRoots: state?.instructionRoots,
634
652
  untrustedCheckout: untrusted,
635
653
  baseRef: untrusted ? state?.baseRef : void 0
636
- }), roots);
654
+ });
655
+ return instructionSourcePaths(sources, roots);
637
656
  }
638
657
  })
639
658
  ];
@@ -675,15 +694,16 @@ async function createMastraCodeAgentController(config) {
675
694
  return NO_PLUGIN_PROCESSORS;
676
695
  }
677
696
  };
678
- const codeAgent = wrapExperimentalAgent(createCodingAgent({
697
+ const baseCodeAgent = createCodingAgent({
679
698
  id: CODE_AGENT_ID,
680
699
  name: "Code Agent",
681
700
  workspace: void 0,
682
701
  instructions: async ({ requestContext }) => {
683
702
  const configured = config?.hostInstructions;
703
+ const hostInstructions = typeof configured === "function" ? await configured({ requestContext }) : configured;
684
704
  return getDynamicInstructions({
685
705
  requestContext,
686
- hostInstructions: typeof configured === "function" ? await configured({ requestContext }) : configured,
706
+ hostInstructions,
687
707
  coAuthor: config?.coAuthor,
688
708
  hasSubconscious,
689
709
  hasSubagents: subagents.length > 0,
@@ -691,7 +711,8 @@ async function createMastraCodeAgentController(config) {
691
711
  });
692
712
  },
693
713
  model: withCredentialTenantPreparation(async (ctx) => {
694
- const hasSessionLevel = isThinkingLevelSetting(ctx.requestContext.get("controller")?.state?.thinkingLevel);
714
+ const controller = ctx.requestContext.get("controller");
715
+ const hasSessionLevel = isThinkingLevelSetting(controller?.state?.thinkingLevel);
695
716
  return getDynamicModel(ctx, config?.settingsPath, {
696
717
  modeless,
697
718
  defaultThinkingLevel: hasSessionLevel ? void 0 : await config?.resolveDefaultThinkingLevel?.(ctx)
@@ -704,12 +725,7 @@ async function createMastraCodeAgentController(config) {
704
725
  resourceId: input.record.resourceId,
705
726
  threadId: input.record.threadId
706
727
  };
707
- let owner = await findWakeSession(controller, liveSessions, target, notificationDispatchLeases);
708
- if (!owner && config?.resumeWakeSession && (decision.action === "deliver" || decision.action === "summarize")) {
709
- await config.resumeWakeSession(target);
710
- owner = await findWakeSession(controller, liveSessions, target, notificationDispatchLeases);
711
- if (!owner) throw new Error(`No session owns resource ${target.resourceId} to run its wake on thread ${target.threadId}.`);
712
- }
728
+ const owner = decision.action === "deliver" || decision.action === "summarize" ? await resolveWakeOwner(target, notificationDispatchLeases) : await findWakeSession(controller, liveSessions, target, notificationDispatchLeases);
713
729
  if (owner === FOREIGN_THREAD) return {
714
730
  ...decision,
715
731
  hold: true
@@ -815,7 +831,8 @@ async function createMastraCodeAgentController(config) {
815
831
  })
816
832
  ],
817
833
  maxProcessorRetries: MASTRACODE_MAX_PROCESSOR_RETRIES
818
- }), experimentalAgent);
834
+ });
835
+ const codeAgent = wrapExperimentalAgent(baseCodeAgent, experimentalAgent);
819
836
  const planMode = createPlanMode(!disabledBuiltinTools.has("submit_plan"));
820
837
  const defaultModes = [
821
838
  {
@@ -842,7 +859,7 @@ async function createMastraCodeAgentController(config) {
842
859
  ];
843
860
  const intervalHandlers = config?.intervalHandlers ?? [{
844
861
  id: "gateway-sync",
845
- intervalMs: 300 * 1e3,
862
+ intervalMs: 3e5,
846
863
  immediate: false,
847
864
  handler: () => syncGateways()
848
865
  }];
@@ -933,7 +950,7 @@ async function createMastraCodeAgentController(config) {
933
950
  ...backgroundToolsEnabled ? { backgroundTasks: {
934
951
  enabled: true,
935
952
  recoverStaleTasksOnStart: false,
936
- ...createBackgroundCompletionCallbacks(() => controller, backgroundCompletionEvents)
953
+ ...createBackgroundCompletionCallbacks(() => sessionRouter, backgroundCompletionEvents)
937
954
  } } : {},
938
955
  observability,
939
956
  memory,
@@ -944,7 +961,7 @@ async function createMastraCodeAgentController(config) {
944
961
  defaultObserverModelId: DEFAULT_OM_MODEL_ID,
945
962
  reflectorModel: "auto",
946
963
  defaultReflectorModelId: DEFAULT_OM_MODEL_ID,
947
- resolveAutoModelId: ({ currentModelId }) => resolveAutoOMModelId(currentModelId)
964
+ resolveAutoModelId: ({ currentModelId }) => resolveAutoOMModelId(currentModelId, canUseProvider)
948
965
  },
949
966
  agent: codeAgent,
950
967
  subagents,