@mastra/code-sdk 1.9.0-alpha.9 → 1.10.0-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.
- package/README.md +23 -0
- package/dist/agent-connections/tools.d.ts.map +1 -1
- package/dist/agent-connections/tools.js +5 -5
- package/dist/agent-connections/tools.js.map +1 -1
- package/dist/agents/tools.d.ts +1 -1
- package/dist/agents/tools.d.ts.map +1 -1
- package/dist/agents/tools.js +2 -1
- package/dist/agents/tools.js.map +1 -1
- package/dist/analytics.d.ts.map +1 -1
- package/dist/analytics.js +2 -3
- package/dist/analytics.js.map +1 -1
- package/dist/auth/account-rotation-processor.d.ts.map +1 -1
- package/dist/auth/account-rotation-processor.js +17 -10
- package/dist/auth/account-rotation-processor.js.map +1 -1
- package/dist/auth/providers/kimi-coding.d.ts.map +1 -1
- package/dist/auth/providers/kimi-coding.js +1 -2
- package/dist/auth/providers/kimi-coding.js.map +1 -1
- package/dist/auth/providers/openai-codex.d.ts +1 -1
- package/dist/auth/providers/openai-codex.d.ts.map +1 -1
- package/dist/auth/providers/openai-codex.js +7 -19
- package/dist/auth/providers/openai-codex.js.map +1 -1
- package/dist/auth/storage.js +3 -3
- package/dist/auth/storage.js.map +1 -1
- package/dist/experimental-agent.d.ts +11 -0
- package/dist/experimental-agent.d.ts.map +1 -0
- package/dist/experimental-agent.js +36 -0
- package/dist/experimental-agent.js.map +1 -0
- package/dist/goal-manager.d.ts +39 -3
- package/dist/goal-manager.d.ts.map +1 -1
- package/dist/goal-manager.js +113 -31
- package/dist/goal-manager.js.map +1 -1
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +95 -12
- package/dist/index.js.map +1 -1
- package/dist/knowledge-inspector.d.ts.map +1 -1
- package/dist/knowledge-inspector.js +1 -2
- package/dist/knowledge-inspector.js.map +1 -1
- package/dist/onboarding/settings.d.ts +11 -0
- package/dist/onboarding/settings.d.ts.map +1 -1
- package/dist/onboarding/settings.js +39 -5
- package/dist/onboarding/settings.js.map +1 -1
- package/dist/permissions.d.ts.map +1 -1
- package/dist/permissions.js +6 -1
- package/dist/permissions.js.map +1 -1
- package/dist/plugins/loader.d.ts.map +1 -1
- package/dist/plugins/loader.js +1 -2
- package/dist/plugins/loader.js.map +1 -1
- package/dist/process-memory-diagnostics.d.ts.map +1 -1
- package/dist/process-memory-diagnostics.js +2 -3
- package/dist/process-memory-diagnostics.js.map +1 -1
- package/dist/schedules/index.d.ts +10 -0
- package/dist/schedules/index.d.ts.map +1 -0
- package/dist/schedules/index.js +6 -0
- package/dist/schedules/interval.d.ts +49 -0
- package/dist/schedules/interval.d.ts.map +1 -0
- package/dist/schedules/interval.js +215 -0
- package/dist/schedules/interval.js.map +1 -0
- package/dist/schedules/prompt.d.ts +36 -0
- package/dist/schedules/prompt.d.ts.map +1 -0
- package/dist/schedules/prompt.js +39 -0
- package/dist/schedules/prompt.js.map +1 -0
- package/dist/schedules/run-script.d.ts +8 -0
- package/dist/schedules/run-script.d.ts.map +1 -0
- package/dist/schedules/run-script.js +83 -0
- package/dist/schedules/run-script.js.map +1 -0
- package/dist/schedules/scheduler.d.ts +101 -0
- package/dist/schedules/scheduler.d.ts.map +1 -0
- package/dist/schedules/scheduler.js +169 -0
- package/dist/schedules/scheduler.js.map +1 -0
- package/dist/schedules/tools.d.ts +57 -0
- package/dist/schedules/tools.d.ts.map +1 -0
- package/dist/schedules/tools.js +220 -0
- package/dist/schedules/tools.js.map +1 -0
- package/dist/tools/workflows/ephemeral-memory.d.ts +21 -0
- package/dist/tools/workflows/ephemeral-memory.d.ts.map +1 -1
- package/dist/tools/workflows/ephemeral-memory.js +1 -2
- package/dist/tools/workflows/ephemeral-memory.js.map +1 -1
- package/dist/utils/discarding-scores-storage.d.ts +33 -0
- package/dist/utils/discarding-scores-storage.d.ts.map +1 -0
- package/dist/utils/discarding-scores-storage.js +54 -0
- package/dist/utils/discarding-scores-storage.js.map +1 -0
- package/dist/utils/maintenance-lock.d.ts +42 -0
- package/dist/utils/maintenance-lock.d.ts.map +1 -0
- package/dist/utils/maintenance-lock.js +199 -0
- package/dist/utils/maintenance-lock.js.map +1 -0
- package/dist/utils/prune-cli.d.ts +24 -0
- package/dist/utils/prune-cli.d.ts.map +1 -0
- package/dist/utils/prune-cli.js +125 -0
- package/dist/utils/prune-cli.js.map +1 -0
- package/dist/utils/signals-pubsub.d.ts.map +1 -1
- package/dist/utils/signals-pubsub.js +1 -2
- package/dist/utils/signals-pubsub.js.map +1 -1
- package/dist/utils/storage-maintenance.d.ts.map +1 -1
- package/dist/utils/storage-maintenance.js +33 -3
- package/dist/utils/storage-maintenance.js.map +1 -1
- package/package.json +21 -15
package/dist/index.js
CHANGED
|
@@ -5,6 +5,7 @@ import { AuthStorage } from "./auth/storage.js";
|
|
|
5
5
|
import { setAuthStorage } from "./providers/openai-codex.js";
|
|
6
6
|
import { getAvailableModePacks, getAvailableOmPacks, selectPreferredOMPack } from "./onboarding/packs.js";
|
|
7
7
|
import { MASTRA_GATEWAY_PROVIDER, OBSERVABILITY_AUTH_PREFIX, THREAD_ACTIVE_MODEL_PACK_ID_KEY, loadSettings, resolveModelDefaults, resolveOmRoleModel, saveSettings } from "./onboarding/settings.js";
|
|
8
|
+
import { resolveExperimentalAgent, validateExperimentalAgent, wrapExperimentalAgent } from "./experimental-agent.js";
|
|
8
9
|
import { createSessionThreadAdvertisement } from "./agent-connections/session-advertisement.js";
|
|
9
10
|
import { AgentConnectionsSignalProvider } from "./agent-connections/signal-provider.js";
|
|
10
11
|
import { createBackgroundCompletionEvents } from "./agents/background-completion-events.js";
|
|
@@ -43,9 +44,16 @@ import { getToolCategory } from "./permissions.js";
|
|
|
43
44
|
import { PluginManager } from "./plugins/manager.js";
|
|
44
45
|
import { PluginSignalLane } from "./plugins/signal-lane.js";
|
|
45
46
|
import { PlanRejectionAbortProcessor } from "./processors/plan-rejection-abort.js";
|
|
47
|
+
import { assembleSchedulePrompt } from "./schedules/prompt.js";
|
|
48
|
+
import { ThreadScheduler, scheduleSignalAttributes, shortScheduleId } from "./schedules/scheduler.js";
|
|
49
|
+
import { runScript } from "./schedules/run-script.js";
|
|
50
|
+
import { createScheduleTools } from "./schedules/tools.js";
|
|
51
|
+
import "./schedules/index.js";
|
|
46
52
|
import { stateSchema } from "./schema.js";
|
|
47
53
|
import { mastraBrand } from "./theme-palette.js";
|
|
54
|
+
import { DiscardingScoresStorage } from "./utils/discarding-scores-storage.js";
|
|
48
55
|
import { syncGateways } from "./utils/gateway-sync.js";
|
|
56
|
+
import { registerSessionAndWaitForMaintenance, unregisterSession } from "./utils/maintenance-lock.js";
|
|
49
57
|
import { createSignalsPubSub } from "./utils/signals-pubsub.js";
|
|
50
58
|
import { DEFAULT_RETENTION, createStorageMaintenance, resolveLocalDbFiles } from "./utils/storage-maintenance.js";
|
|
51
59
|
import { createStorage, createVectorStore } from "./utils/storage-factory.js";
|
|
@@ -57,14 +65,16 @@ import { formatHuman, formatJsonl, renderJsonResult, renderTextResult } from "./
|
|
|
57
65
|
import { hasHeadlessFlag, runMCCli } from "./headless/cli.js";
|
|
58
66
|
import "./headless/index.js";
|
|
59
67
|
import path from "path";
|
|
60
|
-
import {
|
|
68
|
+
import { statSync } from "fs";
|
|
69
|
+
import { homedir, hostname } from "os";
|
|
61
70
|
import { createHash } from "crypto";
|
|
71
|
+
import { readFile } from "fs/promises";
|
|
62
72
|
import { AgentController } from "@mastra/core/agent-controller";
|
|
63
73
|
import { createCodingAgent } from "@mastra/core/coding-agent";
|
|
64
|
-
import { PROVIDER_REGISTRY } from "@mastra/core/llm";
|
|
74
|
+
import { PROVIDER_REGISTRY, findGatewayForModel, getGatewayId } from "@mastra/core/llm";
|
|
65
75
|
import { Mastra } from "@mastra/core/mastra";
|
|
66
76
|
import { defaultNotificationDeliveryDecision } from "@mastra/core/notifications";
|
|
67
|
-
import { AgentsMDInjector, CyberRefusalHandler,
|
|
77
|
+
import { AgentsMDInjector, CyberRefusalHandler, ProviderHistoryCompat, StreamErrorRetryProcessor, createBackgroundWorkSignalProcessor, isBadRequestError } from "@mastra/core/processors";
|
|
68
78
|
import { RequestContext } from "@mastra/core/request-context";
|
|
69
79
|
import { TaskSignalProvider } from "@mastra/core/signals";
|
|
70
80
|
import { InMemoryHarness, MastraCompositeStore } from "@mastra/core/storage";
|
|
@@ -217,6 +227,15 @@ function resolveInjectedStorageBackend(storage, configuredBackend) {
|
|
|
217
227
|
if (storage instanceof PostgresStore || hasAncestorClassNamed(storage, "PostgresStore")) return "pg";
|
|
218
228
|
throw new Error("storageBackend is required when injecting a custom storage instance.");
|
|
219
229
|
}
|
|
230
|
+
/** Whether the model router would resolve `modelId` through a gateway outside `sdkGatewayIds`. */
|
|
231
|
+
function routesToOtherGateway(modelId, gateways, sdkGatewayIds) {
|
|
232
|
+
try {
|
|
233
|
+
return !sdkGatewayIds.has(getGatewayId(findGatewayForModel(modelId, gateways)));
|
|
234
|
+
} catch (error) {
|
|
235
|
+
if (error?.id === "MODEL_ROUTER_NO_GATEWAY_FOUND") return false;
|
|
236
|
+
throw error;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
220
239
|
async function createMastraCodeAgentController(config) {
|
|
221
240
|
const cwd = config?.cwd ?? process.cwd();
|
|
222
241
|
const homeDir = config?.homeDir ?? config?.initialState?.homeDir;
|
|
@@ -229,6 +248,7 @@ async function createMastraCodeAgentController(config) {
|
|
|
229
248
|
} catch {}
|
|
230
249
|
const authStorage = createAuthStorage();
|
|
231
250
|
const globalSettings = loadSettings(config?.settingsPath);
|
|
251
|
+
const experimentalAgent = resolveExperimentalAgent(globalSettings);
|
|
232
252
|
const backgroundToolsEnabled = globalSettings.backgroundTools?.enabled ?? false;
|
|
233
253
|
const storedGatewayKey = authStorage.getStoredApiKey(MASTRA_GATEWAY_PROVIDER);
|
|
234
254
|
const storedGatewayUrl = globalSettings.memoryGateway?.baseUrl;
|
|
@@ -276,12 +296,21 @@ async function createMastraCodeAgentController(config) {
|
|
|
276
296
|
const crossProcessPubSub = config?.crossProcessPubSub ?? (!configuredPubSub && useUnixSocketPubSub);
|
|
277
297
|
if (crossProcessPubSub && !signalsPubSub) throw new Error("crossProcessPubSub requires a pubsub instance");
|
|
278
298
|
const useCrossAgentSignals = config?.crossAgentSignals ?? globalSettings.signals?.experimentalCrossAgentSignals ?? false;
|
|
299
|
+
const useScheduleTools = config?.scheduleTools ?? globalSettings.signals?.experimentalScheduleTools ?? false;
|
|
279
300
|
const injectedStorage = isInjectedStorageInstance(config?.storage) ? config.storage : void 0;
|
|
280
301
|
const storageConfig = injectedStorage ? void 0 : config?.storage ?? getStorageConfig(project.rootPath, globalSettings.storage, configDir);
|
|
281
|
-
|
|
302
|
+
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.`) });
|
|
303
|
+
let storageResult;
|
|
304
|
+
if (injectedStorage) storageResult = {
|
|
282
305
|
storage: injectedStorage,
|
|
283
306
|
backend: resolveInjectedStorageBackend(injectedStorage, config?.storageBackend)
|
|
284
|
-
}
|
|
307
|
+
};
|
|
308
|
+
else try {
|
|
309
|
+
storageResult = await createStorage(storageConfig);
|
|
310
|
+
} catch (error) {
|
|
311
|
+
unregisterSession();
|
|
312
|
+
throw error;
|
|
313
|
+
}
|
|
285
314
|
const storageWarning = storageResult.warning;
|
|
286
315
|
let observabilityDomain;
|
|
287
316
|
let observabilityWarning;
|
|
@@ -298,12 +327,14 @@ async function createMastraCodeAgentController(config) {
|
|
|
298
327
|
else observabilityWarning = `Observability unavailable — DuckDB initialization failed: ${message}`;
|
|
299
328
|
}
|
|
300
329
|
const harnessStorage = new InMemoryHarness();
|
|
330
|
+
const scoresStorage = new DiscardingScoresStorage();
|
|
301
331
|
const storage = new MastraCompositeStore({
|
|
302
332
|
id: "mastra-code-storage",
|
|
303
333
|
default: storageResult.storage,
|
|
304
334
|
domains: {
|
|
305
335
|
observability: observabilityDomain ?? false,
|
|
306
|
-
harness: harnessStorage
|
|
336
|
+
harness: harnessStorage,
|
|
337
|
+
scores: scoresStorage
|
|
307
338
|
}
|
|
308
339
|
});
|
|
309
340
|
const observability = new Observability({ configs: { default: {
|
|
@@ -471,6 +502,51 @@ async function createMastraCodeAgentController(config) {
|
|
|
471
502
|
modelSettings: { temperature: 1 }
|
|
472
503
|
};
|
|
473
504
|
};
|
|
505
|
+
const threadScheduler = new ThreadScheduler({
|
|
506
|
+
assemblePrompt: (schedule) => assembleSchedulePrompt(schedule, {
|
|
507
|
+
cwd: project.rootPath,
|
|
508
|
+
runScript,
|
|
509
|
+
readFile: (absPath) => readFile(absPath, "utf8")
|
|
510
|
+
}),
|
|
511
|
+
deliver: async (schedule, assembled) => {
|
|
512
|
+
const target = {
|
|
513
|
+
resourceId: schedule.resourceId,
|
|
514
|
+
threadId: schedule.threadId
|
|
515
|
+
};
|
|
516
|
+
const streamOptions = await getWakeStreamOptions(target);
|
|
517
|
+
const accepted = await codeAgent.sendSignal({
|
|
518
|
+
type: "user",
|
|
519
|
+
tagName: "user",
|
|
520
|
+
contents: assembled.prompt,
|
|
521
|
+
attributes: scheduleSignalAttributes(schedule, assembled)
|
|
522
|
+
}, {
|
|
523
|
+
...target,
|
|
524
|
+
ifActive: { behavior: "deliver" },
|
|
525
|
+
ifIdle: {
|
|
526
|
+
behavior: "wake",
|
|
527
|
+
...streamOptions ? { streamOptions } : {}
|
|
528
|
+
}
|
|
529
|
+
}).accepted;
|
|
530
|
+
if (accepted.action === "blocked" || accepted.action === "discard") throw new Error(`the agent did not accept the prompt (${accepted.action})`);
|
|
531
|
+
},
|
|
532
|
+
onError: (error, schedule) => {
|
|
533
|
+
console.warn(`Schedule ${shortScheduleId(schedule.id)} failed to fire:`, error);
|
|
534
|
+
}
|
|
535
|
+
});
|
|
536
|
+
const scheduleTools = useScheduleTools ? createScheduleTools({
|
|
537
|
+
scheduler: threadScheduler,
|
|
538
|
+
fileOptions: () => ({
|
|
539
|
+
cwd: project.rootPath,
|
|
540
|
+
homeDir: homedir(),
|
|
541
|
+
fileExists: (absPath) => {
|
|
542
|
+
try {
|
|
543
|
+
return statSync(absPath).isFile();
|
|
544
|
+
} catch {
|
|
545
|
+
return false;
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
})
|
|
549
|
+
}) : void 0;
|
|
474
550
|
const githubSignals = globalSettings.signals?.experimentalGithubSignals && !config?.disableGithubSignals ? new GithubSignals({
|
|
475
551
|
cwd: project.rootPath,
|
|
476
552
|
pollIntervalMs: globalSettings.signals.githubPollIntervalMs,
|
|
@@ -497,8 +573,7 @@ async function createMastraCodeAgentController(config) {
|
|
|
497
573
|
const projectPath = state?.projectPath ?? project.rootPath;
|
|
498
574
|
return getStaticallyLoadedInstructionPaths(projectPath, void 0, state?.untrustedCheckout === true && typeof state?.baseRef === "string" ? createGitRefInstructionReader(projectPath, state.baseRef) : void 0);
|
|
499
575
|
}
|
|
500
|
-
})
|
|
501
|
-
new ProviderHistoryCompat()
|
|
576
|
+
})
|
|
502
577
|
];
|
|
503
578
|
const taskSignalProvider = new TaskSignalProvider();
|
|
504
579
|
const agentConnectionsSignalProvider = useCrossAgentSignals ? new AgentConnectionsSignalProvider(config?.agentConnections) : void 0;
|
|
@@ -532,7 +607,7 @@ async function createMastraCodeAgentController(config) {
|
|
|
532
607
|
return NO_PLUGIN_PROCESSORS;
|
|
533
608
|
}
|
|
534
609
|
};
|
|
535
|
-
const codeAgent = createCodingAgent({
|
|
610
|
+
const codeAgent = wrapExperimentalAgent(createCodingAgent({
|
|
536
611
|
id: CODE_AGENT_ID,
|
|
537
612
|
name: "Code Agent",
|
|
538
613
|
workspace: void 0,
|
|
@@ -559,7 +634,7 @@ async function createMastraCodeAgentController(config) {
|
|
|
559
634
|
streamOptions
|
|
560
635
|
} : decision;
|
|
561
636
|
} } },
|
|
562
|
-
tools: createDynamicTools(mcpManager, config?.extraTools, config?.disabledTools, storage, pluginTools, backgroundToolsEnabled),
|
|
637
|
+
tools: createDynamicTools(mcpManager, config?.extraTools, config?.disabledTools, storage, pluginTools, backgroundToolsEnabled, scheduleTools),
|
|
563
638
|
hooks: createToolHooks(hookManager, config?.postToolObserver),
|
|
564
639
|
scorers: {
|
|
565
640
|
outcome: {
|
|
@@ -622,7 +697,6 @@ async function createMastraCodeAgentController(config) {
|
|
|
622
697
|
onRetry: ({ error, retryCount, delayMs, requestContext }) => emitTransientRetry(error, retryCount, delayMs, requestContext)
|
|
623
698
|
}
|
|
624
699
|
] }),
|
|
625
|
-
new PrefillErrorHandler(),
|
|
626
700
|
new AccountRotationProcessor({
|
|
627
701
|
credentialStore: authStorage,
|
|
628
702
|
maxProcessorRetries: MASTRACODE_MAX_PROCESSOR_RETRIES,
|
|
@@ -630,7 +704,7 @@ async function createMastraCodeAgentController(config) {
|
|
|
630
704
|
})
|
|
631
705
|
],
|
|
632
706
|
maxProcessorRetries: MASTRACODE_MAX_PROCESSOR_RETRIES
|
|
633
|
-
});
|
|
707
|
+
}), experimentalAgent);
|
|
634
708
|
const defaultModes = [
|
|
635
709
|
{
|
|
636
710
|
...buildMode,
|
|
@@ -748,6 +822,11 @@ async function createMastraCodeAgentController(config) {
|
|
|
748
822
|
stateSchema: typedStateSchema,
|
|
749
823
|
agent: codeAgent,
|
|
750
824
|
subagents,
|
|
825
|
+
resolveSubagentModel: (modelId, { requestContext }) => routesToOtherGateway(modelId, Object.values(controller.getMastra()?.listGateways() ?? {}), /* @__PURE__ */ new Set([
|
|
826
|
+
mastraCodeGateway.id,
|
|
827
|
+
amazonBedrockGateway.id,
|
|
828
|
+
"models.dev"
|
|
829
|
+
])) ? modelId : resolveModel(modelId, { requestContext }),
|
|
751
830
|
gateways: [amazonBedrockGateway, mastraCodeGateway],
|
|
752
831
|
workspace: config?.workspace ?? ((args) => getDynamicWorkspace({
|
|
753
832
|
...args,
|
|
@@ -867,6 +946,8 @@ async function createMastraCodeAgentController(config) {
|
|
|
867
946
|
unsubscribePluginReload = void 0;
|
|
868
947
|
pluginSignalLane?.stopAll();
|
|
869
948
|
},
|
|
949
|
+
/** Process-local `/schedules` scheduler. Call `stop()` on shutdown. */
|
|
950
|
+
threadScheduler,
|
|
870
951
|
/**
|
|
871
952
|
* Hands Mastra to the statically configured input processors.
|
|
872
953
|
*
|
|
@@ -941,6 +1022,7 @@ async function bootLocalAgentController(config) {
|
|
|
941
1022
|
const base = await createMastraCodeAgentController(config);
|
|
942
1023
|
const { controller, sessionId, ownerId, projectPath, codeAgent, mcpManager } = base;
|
|
943
1024
|
await controller.init();
|
|
1025
|
+
validateExperimentalAgent(codeAgent, controller.getMastra());
|
|
944
1026
|
const mastra = controller.getMastra();
|
|
945
1027
|
if (mastra) await registerWorkflowBuilderPrimitives(mastra, {
|
|
946
1028
|
projectPath,
|
|
@@ -1036,6 +1118,7 @@ async function prepareAgentControllerMount(config) {
|
|
|
1036
1118
|
};
|
|
1037
1119
|
const finalize = async () => {
|
|
1038
1120
|
await controller.init();
|
|
1121
|
+
validateExperimentalAgent(codeAgent, controller.getMastra());
|
|
1039
1122
|
if (weOwnTheMastra) {
|
|
1040
1123
|
const mastra = controller.getMastra();
|
|
1041
1124
|
if (mastra) await registerWorkflowBuilderPrimitives(mastra, {
|