@mastra/code-sdk 1.15.0-alpha.9 → 1.15.1-alpha.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 (145) 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 +2 -2
  67. package/dist/index.d.ts.map +1 -1
  68. package/dist/index.js +56 -29
  69. package/dist/index.js.map +1 -1
  70. package/dist/knowledge-inspector.js +2 -2
  71. package/dist/knowledge-inspector.js.map +1 -1
  72. package/dist/lsp/server.js +4 -2
  73. package/dist/lsp/server.js.map +1 -1
  74. package/dist/mcp/manager.d.ts.map +1 -1
  75. package/dist/mcp/manager.js +14 -2
  76. package/dist/mcp/manager.js.map +1 -1
  77. package/dist/onboarding/settings.js +5 -2
  78. package/dist/onboarding/settings.js.map +1 -1
  79. package/dist/platform/index.js +5 -3
  80. package/dist/platform/index.js.map +1 -1
  81. package/dist/plugins/loader.js +3 -1
  82. package/dist/plugins/loader.js.map +1 -1
  83. package/dist/plugins/manager.js +2 -1
  84. package/dist/plugins/manager.js.map +1 -1
  85. package/dist/plugins/package-link.js.map +1 -1
  86. package/dist/plugins/scaffold.js +4 -2
  87. package/dist/plugins/scaffold.js.map +1 -1
  88. package/dist/plugins/signal-lane.js.map +1 -1
  89. package/dist/process-memory-diagnostics.js +2 -1
  90. package/dist/process-memory-diagnostics.js.map +1 -1
  91. package/dist/providers/amazon-bedrock-gateway.js +2 -1
  92. package/dist/providers/amazon-bedrock-gateway.js.map +1 -1
  93. package/dist/providers/amazon-bedrock.js +2 -2
  94. package/dist/providers/amazon-bedrock.js.map +1 -1
  95. package/dist/providers/claude-max.d.ts.map +1 -1
  96. package/dist/providers/claude-max.js +14 -10
  97. package/dist/providers/claude-max.js.map +1 -1
  98. package/dist/providers/github-copilot-gateway.js.map +1 -1
  99. package/dist/providers/github-copilot.js +13 -12
  100. package/dist/providers/github-copilot.js.map +1 -1
  101. package/dist/providers/openai-codex.js +14 -11
  102. package/dist/providers/openai-codex.js.map +1 -1
  103. package/dist/providers/provider-thinking.js.map +1 -1
  104. package/dist/providers/thinking-request.js +1 -1
  105. package/dist/providers/thinking-request.js.map +1 -1
  106. package/dist/schedules/run-script.js +1 -1
  107. package/dist/schedules/run-script.js.map +1 -1
  108. package/dist/schedules/scheduler.js.map +1 -1
  109. package/dist/tools/request-sandbox-access.js +7 -5
  110. package/dist/tools/request-sandbox-access.js.map +1 -1
  111. package/dist/tools/utils.js +3 -1
  112. package/dist/tools/utils.js.map +1 -1
  113. package/dist/tools/web-search.d.ts +13 -11
  114. package/dist/tools/web-search.d.ts.map +1 -1
  115. package/dist/tools/web-search.js +21 -15
  116. package/dist/tools/web-search.js.map +1 -1
  117. package/dist/utils/debug-log.js +2 -2
  118. package/dist/utils/debug-log.js.map +1 -1
  119. package/dist/utils/gateway-sync.js +1 -1
  120. package/dist/utils/gateway-sync.js.map +1 -1
  121. package/dist/utils/local-observability.d.ts +1 -1
  122. package/dist/utils/local-observability.d.ts.map +1 -1
  123. package/dist/utils/local-observability.js +1 -1
  124. package/dist/utils/local-observability.js.map +1 -1
  125. package/dist/utils/prune-cli.js +10 -8
  126. package/dist/utils/prune-cli.js.map +1 -1
  127. package/dist/utils/signals-pubsub.js.map +1 -1
  128. package/dist/utils/slash-command-processor.js +1 -1
  129. package/dist/utils/slash-command-processor.js.map +1 -1
  130. package/dist/utils/stdin-pipe.js +1 -1
  131. package/dist/utils/stdin-pipe.js.map +1 -1
  132. package/dist/utils/storage-factory.d.ts.map +1 -1
  133. package/dist/utils/storage-factory.js +1 -1
  134. package/dist/utils/storage-factory.js.map +1 -1
  135. package/dist/utils/storage-maintenance.js +1 -1
  136. package/dist/utils/storage-maintenance.js.map +1 -1
  137. package/dist/utils/update-check.js +2 -1
  138. package/dist/utils/update-check.js.map +1 -1
  139. package/dist/utils/wake-session.d.ts +1 -1
  140. package/dist/utils/wake-session.d.ts.map +1 -1
  141. package/dist/utils/wake-session.js +8 -1
  142. package/dist/utils/wake-session.js.map +1 -1
  143. package/dist/workflows/register-primitives.js +1 -1
  144. package/dist/workflows/register-primitives.js.map +1 -1
  145. package/package.json +22 -22
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";
@@ -78,7 +78,7 @@ import { AgentController, migratePersistedModelSelection } from "@mastra/core/ag
78
78
  import { createCodingAgent } from "@mastra/core/coding-agent";
79
79
  import { Knowledge } from "@mastra/core/knowledge";
80
80
  import { Mastra } from "@mastra/core/mastra";
81
- import { defaultNotificationDeliveryDecision } from "@mastra/core/notifications";
81
+ import { defaultNotificationDeliveryDecision, readNotificationRoutingRequirement } from "@mastra/core/notifications";
82
82
  import { AgentsMDInjector, CyberRefusalHandler, ProviderHistoryCompat, StreamErrorRetryProcessor, createBackgroundWorkSignalProcessor, isBadRequestError } from "@mastra/core/processors";
83
83
  import { RequestContext } from "@mastra/core/request-context";
84
84
  import { TaskSignalProvider } from "@mastra/core/signals";
@@ -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,21 +725,26 @@ 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}.`);
728
+ const owner = decision.action === "deliver" || decision.action === "summarize" ? await resolveWakeOwner(target, notificationDispatchLeases) : await findWakeSession(controller, liveSessions, target, notificationDispatchLeases);
729
+ if (owner === FOREIGN_THREAD || owner === void 0) {
730
+ const wakesAtFirstSend = decision.action === "deliver" || decision.action === "queue";
731
+ const routedToOwner = readNotificationRoutingRequirement(input.record.metadata)?.requireClaimedOwner;
732
+ if (!wakesAtFirstSend || routedToOwner) return {
733
+ ...decision,
734
+ hold: true
735
+ };
736
+ return {
737
+ action: "defer",
738
+ deliverAt: input.now,
739
+ reason: decision.reason,
740
+ hold: true
741
+ };
712
742
  }
713
- if (owner === FOREIGN_THREAD) return {
714
- ...decision,
715
- hold: true
716
- };
717
- const streamOptions = owner ? await getWakeStreamOptions({
743
+ const streamOptions = await getWakeStreamOptions({
718
744
  resourceId: input.record.resourceId,
719
745
  threadId: input.record.threadId,
720
746
  owner
721
- }) : void 0;
747
+ });
722
748
  const withOptions = streamOptions ? {
723
749
  ...decision,
724
750
  streamOptions
@@ -726,8 +752,8 @@ async function createMastraCodeAgentController(config) {
726
752
  if (!ownsNotificationDispatch) return withOptions;
727
753
  return shouldHoldNotificationDelivery({
728
754
  resourceId: input.record.resourceId,
729
- scope: owner?.scope,
730
- ownedHere: owner !== void 0,
755
+ scope: owner.scope,
756
+ ownedHere: true,
731
757
  dispatcher: notificationDispatcher
732
758
  }) ? {
733
759
  ...withOptions,
@@ -815,7 +841,8 @@ async function createMastraCodeAgentController(config) {
815
841
  })
816
842
  ],
817
843
  maxProcessorRetries: MASTRACODE_MAX_PROCESSOR_RETRIES
818
- }), experimentalAgent);
844
+ });
845
+ const codeAgent = wrapExperimentalAgent(baseCodeAgent, experimentalAgent);
819
846
  const planMode = createPlanMode(!disabledBuiltinTools.has("submit_plan"));
820
847
  const defaultModes = [
821
848
  {
@@ -842,7 +869,7 @@ async function createMastraCodeAgentController(config) {
842
869
  ];
843
870
  const intervalHandlers = config?.intervalHandlers ?? [{
844
871
  id: "gateway-sync",
845
- intervalMs: 300 * 1e3,
872
+ intervalMs: 3e5,
846
873
  immediate: false,
847
874
  handler: () => syncGateways()
848
875
  }];
@@ -933,7 +960,7 @@ async function createMastraCodeAgentController(config) {
933
960
  ...backgroundToolsEnabled ? { backgroundTasks: {
934
961
  enabled: true,
935
962
  recoverStaleTasksOnStart: false,
936
- ...createBackgroundCompletionCallbacks(() => controller, backgroundCompletionEvents)
963
+ ...createBackgroundCompletionCallbacks(() => sessionRouter, backgroundCompletionEvents)
937
964
  } } : {},
938
965
  observability,
939
966
  memory,
@@ -944,7 +971,7 @@ async function createMastraCodeAgentController(config) {
944
971
  defaultObserverModelId: DEFAULT_OM_MODEL_ID,
945
972
  reflectorModel: "auto",
946
973
  defaultReflectorModelId: DEFAULT_OM_MODEL_ID,
947
- resolveAutoModelId: ({ currentModelId }) => resolveAutoOMModelId(currentModelId)
974
+ resolveAutoModelId: ({ currentModelId }) => resolveAutoOMModelId(currentModelId, canUseProvider)
948
975
  },
949
976
  agent: codeAgent,
950
977
  subagents,