@mastra/code-sdk 1.8.4-alpha.6 → 1.9.0-alpha.10

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 (126) hide show
  1. package/README.md +190 -0
  2. package/dist/acp/agent.d.ts +30 -17
  3. package/dist/acp/agent.d.ts.map +1 -1
  4. package/dist/acp/agent.js +294 -103
  5. package/dist/acp/agent.js.map +1 -1
  6. package/dist/acp/errors.d.ts +3 -0
  7. package/dist/acp/errors.d.ts.map +1 -0
  8. package/dist/acp/errors.js +14 -0
  9. package/dist/acp/errors.js.map +1 -0
  10. package/dist/acp/event-mapper.d.ts +6 -1
  11. package/dist/acp/event-mapper.d.ts.map +1 -1
  12. package/dist/acp/event-mapper.js +116 -56
  13. package/dist/acp/event-mapper.js.map +1 -1
  14. package/dist/acp/index.d.ts +1 -4
  15. package/dist/acp/index.d.ts.map +1 -1
  16. package/dist/acp/index.js +6 -48
  17. package/dist/acp/index.js.map +1 -1
  18. package/dist/acp/runtime.d.ts +5 -0
  19. package/dist/acp/runtime.d.ts.map +1 -0
  20. package/dist/acp/runtime.js +80 -0
  21. package/dist/acp/runtime.js.map +1 -0
  22. package/dist/acp/server.d.ts +3 -6
  23. package/dist/acp/server.d.ts.map +1 -1
  24. package/dist/acp/server.js +22 -19
  25. package/dist/acp/server.js.map +1 -1
  26. package/dist/acp/skills.d.ts +6 -0
  27. package/dist/acp/skills.d.ts.map +1 -0
  28. package/dist/acp/skills.js +33 -0
  29. package/dist/acp/skills.js.map +1 -0
  30. package/dist/agents/model.js +1 -1
  31. package/dist/agents/prompts/agent-instructions.js +2 -2
  32. package/dist/agents/tools.d.ts +1 -1
  33. package/dist/agents/tools.d.ts.map +1 -1
  34. package/dist/agents/tools.js +2 -1
  35. package/dist/agents/tools.js.map +1 -1
  36. package/dist/agents/workspace.js +1 -1
  37. package/dist/analytics.js +2 -2
  38. package/dist/auth/providers/kimi-coding.js +1 -1
  39. package/dist/auth/storage.js +2 -2
  40. package/dist/clipboard/index.js +2 -2
  41. package/dist/headless/run-mc.d.ts.map +1 -1
  42. package/dist/headless/run-mc.js +14 -0
  43. package/dist/headless/run-mc.js.map +1 -1
  44. package/dist/hooks/config.js +1 -1
  45. package/dist/index.d.ts +14 -0
  46. package/dist/index.d.ts.map +1 -1
  47. package/dist/index.js +75 -8
  48. package/dist/index.js.map +1 -1
  49. package/dist/lsp/server.js +1 -1
  50. package/dist/lsp/workspace.js +1 -1
  51. package/dist/mcp/config.js +1 -1
  52. package/dist/mcp/manager.d.ts.map +1 -1
  53. package/dist/mcp/manager.js +2 -1
  54. package/dist/mcp/manager.js.map +1 -1
  55. package/dist/mcp/state.js +1 -1
  56. package/dist/mcp/types.d.ts +2 -0
  57. package/dist/mcp/types.d.ts.map +1 -1
  58. package/dist/onboarding/settings.d.ts +2 -0
  59. package/dist/onboarding/settings.d.ts.map +1 -1
  60. package/dist/onboarding/settings.js +6 -4
  61. package/dist/onboarding/settings.js.map +1 -1
  62. package/dist/permissions.d.ts.map +1 -1
  63. package/dist/permissions.js +6 -1
  64. package/dist/permissions.js.map +1 -1
  65. package/dist/plugins/dependencies.js +1 -1
  66. package/dist/plugins/install.js +1 -1
  67. package/dist/plugins/loader.js +3 -3
  68. package/dist/plugins/manager.js +1 -1
  69. package/dist/plugins/manifest.js +1 -1
  70. package/dist/plugins/package-link.js +1 -1
  71. package/dist/plugins/paths.js +1 -1
  72. package/dist/plugins/registry.js +1 -1
  73. package/dist/plugins/scaffold.js +1 -1
  74. package/dist/process-memory-diagnostics.js +3 -3
  75. package/dist/providers/amazon-bedrock-gateway.js +1 -1
  76. package/dist/providers/openai-codex.js +1 -1
  77. package/dist/schedules/index.d.ts +10 -0
  78. package/dist/schedules/index.d.ts.map +1 -0
  79. package/dist/schedules/index.js +6 -0
  80. package/dist/schedules/interval.d.ts +49 -0
  81. package/dist/schedules/interval.d.ts.map +1 -0
  82. package/dist/schedules/interval.js +215 -0
  83. package/dist/schedules/interval.js.map +1 -0
  84. package/dist/schedules/prompt.d.ts +36 -0
  85. package/dist/schedules/prompt.d.ts.map +1 -0
  86. package/dist/schedules/prompt.js +39 -0
  87. package/dist/schedules/prompt.js.map +1 -0
  88. package/dist/schedules/run-script.d.ts +8 -0
  89. package/dist/schedules/run-script.d.ts.map +1 -0
  90. package/dist/schedules/run-script.js +83 -0
  91. package/dist/schedules/run-script.js.map +1 -0
  92. package/dist/schedules/scheduler.d.ts +101 -0
  93. package/dist/schedules/scheduler.d.ts.map +1 -0
  94. package/dist/schedules/scheduler.js +169 -0
  95. package/dist/schedules/scheduler.js.map +1 -0
  96. package/dist/schedules/tools.d.ts +57 -0
  97. package/dist/schedules/tools.d.ts.map +1 -0
  98. package/dist/schedules/tools.js +220 -0
  99. package/dist/schedules/tools.js.map +1 -0
  100. package/dist/schema.js +1 -1
  101. package/dist/tools/request-sandbox-access.js +5 -4
  102. package/dist/tools/request-sandbox-access.js.map +1 -1
  103. package/dist/utils/debug-log.js +1 -1
  104. package/dist/utils/discarding-scores-storage.d.ts +33 -0
  105. package/dist/utils/discarding-scores-storage.d.ts.map +1 -0
  106. package/dist/utils/discarding-scores-storage.js +54 -0
  107. package/dist/utils/discarding-scores-storage.js.map +1 -0
  108. package/dist/utils/maintenance-lock.d.ts +42 -0
  109. package/dist/utils/maintenance-lock.d.ts.map +1 -0
  110. package/dist/utils/maintenance-lock.js +199 -0
  111. package/dist/utils/maintenance-lock.js.map +1 -0
  112. package/dist/utils/project.js +3 -3
  113. package/dist/utils/prune-cli.d.ts +24 -0
  114. package/dist/utils/prune-cli.d.ts.map +1 -0
  115. package/dist/utils/prune-cli.js +125 -0
  116. package/dist/utils/prune-cli.js.map +1 -0
  117. package/dist/utils/signals-pubsub.js +1 -1
  118. package/dist/utils/slash-command-loader.js +1 -1
  119. package/dist/utils/slash-command-processor.js +1 -1
  120. package/dist/utils/storage-maintenance.d.ts.map +1 -1
  121. package/dist/utils/storage-maintenance.js +34 -4
  122. package/dist/utils/storage-maintenance.js.map +1 -1
  123. package/dist/utils/thread-lock.js +1 -1
  124. package/dist/utils/update-check.js +2 -2
  125. package/dist/workflows/register-primitives.js +1 -1
  126. package/package.json +22 -12
package/dist/index.js CHANGED
@@ -43,9 +43,16 @@ import { getToolCategory } from "./permissions.js";
43
43
  import { PluginManager } from "./plugins/manager.js";
44
44
  import { PluginSignalLane } from "./plugins/signal-lane.js";
45
45
  import { PlanRejectionAbortProcessor } from "./processors/plan-rejection-abort.js";
46
+ import { assembleSchedulePrompt } from "./schedules/prompt.js";
47
+ import { ThreadScheduler, scheduleSignalAttributes, shortScheduleId } from "./schedules/scheduler.js";
48
+ import { runScript } from "./schedules/run-script.js";
49
+ import { createScheduleTools } from "./schedules/tools.js";
50
+ import "./schedules/index.js";
46
51
  import { stateSchema } from "./schema.js";
47
52
  import { mastraBrand } from "./theme-palette.js";
53
+ import { DiscardingScoresStorage } from "./utils/discarding-scores-storage.js";
48
54
  import { syncGateways } from "./utils/gateway-sync.js";
55
+ import { registerSessionAndWaitForMaintenance, unregisterSession } from "./utils/maintenance-lock.js";
49
56
  import { createSignalsPubSub } from "./utils/signals-pubsub.js";
50
57
  import { DEFAULT_RETENTION, createStorageMaintenance, resolveLocalDbFiles } from "./utils/storage-maintenance.js";
51
58
  import { createStorage, createVectorStore } from "./utils/storage-factory.js";
@@ -56,10 +63,11 @@ import { runMC } from "./headless/run-mc.js";
56
63
  import { formatHuman, formatJsonl, renderJsonResult, renderTextResult } from "./headless/format.js";
57
64
  import { hasHeadlessFlag, runMCCli } from "./headless/cli.js";
58
65
  import "./headless/index.js";
59
- import { TaskSignalProvider } from "@mastra/core/signals";
60
- import { createHash } from "crypto";
61
- import { hostname } from "os";
62
66
  import path from "path";
67
+ import { statSync } from "fs";
68
+ import { homedir, hostname } from "os";
69
+ import { createHash } from "crypto";
70
+ import { readFile } from "fs/promises";
63
71
  import { AgentController } from "@mastra/core/agent-controller";
64
72
  import { createCodingAgent } from "@mastra/core/coding-agent";
65
73
  import { PROVIDER_REGISTRY } from "@mastra/core/llm";
@@ -67,6 +75,7 @@ import { Mastra } from "@mastra/core/mastra";
67
75
  import { defaultNotificationDeliveryDecision } from "@mastra/core/notifications";
68
76
  import { AgentsMDInjector, CyberRefusalHandler, PrefillErrorHandler, ProviderHistoryCompat, StreamErrorRetryProcessor, createBackgroundWorkSignalProcessor, isBadRequestError } from "@mastra/core/processors";
69
77
  import { RequestContext } from "@mastra/core/request-context";
78
+ import { TaskSignalProvider } from "@mastra/core/signals";
70
79
  import { InMemoryHarness, MastraCompositeStore } from "@mastra/core/storage";
71
80
  import { DEFAULT_GOAL_JUDGE_PROMPT } from "@mastra/core/tools";
72
81
  import { DuckDBStore } from "@mastra/duckdb";
@@ -224,7 +233,7 @@ async function createMastraCodeAgentController(config) {
224
233
  let activeSession;
225
234
  let pluginRuntimeController;
226
235
  if (configDir !== ".mastracode") validateConfigDirName(configDir);
227
- try {
236
+ if (!config?.disableEnvFile) try {
228
237
  process.loadEnvFile(path.join(cwd, ".env"));
229
238
  } catch {}
230
239
  const authStorage = createAuthStorage();
@@ -276,12 +285,21 @@ async function createMastraCodeAgentController(config) {
276
285
  const crossProcessPubSub = config?.crossProcessPubSub ?? (!configuredPubSub && useUnixSocketPubSub);
277
286
  if (crossProcessPubSub && !signalsPubSub) throw new Error("crossProcessPubSub requires a pubsub instance");
278
287
  const useCrossAgentSignals = config?.crossAgentSignals ?? globalSettings.signals?.experimentalCrossAgentSignals ?? false;
288
+ const useScheduleTools = config?.scheduleTools ?? globalSettings.signals?.experimentalScheduleTools ?? false;
279
289
  const injectedStorage = isInjectedStorageInstance(config?.storage) ? config.storage : void 0;
280
290
  const storageConfig = injectedStorage ? void 0 : config?.storage ?? getStorageConfig(project.rootPath, globalSettings.storage, configDir);
281
- const storageResult = injectedStorage ? {
291
+ if (!injectedStorage) await registerSessionAndWaitForMaintenance({ onWait: (pid) => console.error(`Waiting for storage maintenance (mastracode prune${pid === -1 ? "" : `, PID ${pid}`}) to finish. Press Ctrl+C to give up.`) });
292
+ let storageResult;
293
+ if (injectedStorage) storageResult = {
282
294
  storage: injectedStorage,
283
295
  backend: resolveInjectedStorageBackend(injectedStorage, config?.storageBackend)
284
- } : await createStorage(storageConfig);
296
+ };
297
+ else try {
298
+ storageResult = await createStorage(storageConfig);
299
+ } catch (error) {
300
+ unregisterSession();
301
+ throw error;
302
+ }
285
303
  const storageWarning = storageResult.warning;
286
304
  let observabilityDomain;
287
305
  let observabilityWarning;
@@ -298,12 +316,14 @@ async function createMastraCodeAgentController(config) {
298
316
  else observabilityWarning = `Observability unavailable — DuckDB initialization failed: ${message}`;
299
317
  }
300
318
  const harnessStorage = new InMemoryHarness();
319
+ const scoresStorage = new DiscardingScoresStorage();
301
320
  const storage = new MastraCompositeStore({
302
321
  id: "mastra-code-storage",
303
322
  default: storageResult.storage,
304
323
  domains: {
305
324
  observability: observabilityDomain ?? false,
306
- harness: harnessStorage
325
+ harness: harnessStorage,
326
+ scores: scoresStorage
307
327
  }
308
328
  });
309
329
  const observability = new Observability({ configs: { default: {
@@ -471,6 +491,51 @@ async function createMastraCodeAgentController(config) {
471
491
  modelSettings: { temperature: 1 }
472
492
  };
473
493
  };
494
+ const threadScheduler = new ThreadScheduler({
495
+ assemblePrompt: (schedule) => assembleSchedulePrompt(schedule, {
496
+ cwd: project.rootPath,
497
+ runScript,
498
+ readFile: (absPath) => readFile(absPath, "utf8")
499
+ }),
500
+ deliver: async (schedule, assembled) => {
501
+ const target = {
502
+ resourceId: schedule.resourceId,
503
+ threadId: schedule.threadId
504
+ };
505
+ const streamOptions = await getWakeStreamOptions(target);
506
+ const accepted = await codeAgent.sendSignal({
507
+ type: "user",
508
+ tagName: "user",
509
+ contents: assembled.prompt,
510
+ attributes: scheduleSignalAttributes(schedule, assembled)
511
+ }, {
512
+ ...target,
513
+ ifActive: { behavior: "deliver" },
514
+ ifIdle: {
515
+ behavior: "wake",
516
+ ...streamOptions ? { streamOptions } : {}
517
+ }
518
+ }).accepted;
519
+ if (accepted.action === "blocked" || accepted.action === "discard") throw new Error(`the agent did not accept the prompt (${accepted.action})`);
520
+ },
521
+ onError: (error, schedule) => {
522
+ console.warn(`Schedule ${shortScheduleId(schedule.id)} failed to fire:`, error);
523
+ }
524
+ });
525
+ const scheduleTools = useScheduleTools ? createScheduleTools({
526
+ scheduler: threadScheduler,
527
+ fileOptions: () => ({
528
+ cwd: project.rootPath,
529
+ homeDir: homedir(),
530
+ fileExists: (absPath) => {
531
+ try {
532
+ return statSync(absPath).isFile();
533
+ } catch {
534
+ return false;
535
+ }
536
+ }
537
+ })
538
+ }) : void 0;
474
539
  const githubSignals = globalSettings.signals?.experimentalGithubSignals && !config?.disableGithubSignals ? new GithubSignals({
475
540
  cwd: project.rootPath,
476
541
  pollIntervalMs: globalSettings.signals.githubPollIntervalMs,
@@ -559,7 +624,7 @@ async function createMastraCodeAgentController(config) {
559
624
  streamOptions
560
625
  } : decision;
561
626
  } } },
562
- tools: createDynamicTools(mcpManager, config?.extraTools, config?.disabledTools, storage, pluginTools, backgroundToolsEnabled),
627
+ tools: createDynamicTools(mcpManager, config?.extraTools, config?.disabledTools, storage, pluginTools, backgroundToolsEnabled, scheduleTools),
563
628
  hooks: createToolHooks(hookManager, config?.postToolObserver),
564
629
  scorers: {
565
630
  outcome: {
@@ -867,6 +932,8 @@ async function createMastraCodeAgentController(config) {
867
932
  unsubscribePluginReload = void 0;
868
933
  pluginSignalLane?.stopAll();
869
934
  },
935
+ /** Process-local `/schedules` scheduler. Call `stop()` on shutdown. */
936
+ threadScheduler,
870
937
  /**
871
938
  * Hands Mastra to the statically configured input processors.
872
939
  *