@mastra/code-sdk 0.2.0-alpha.9 → 1.0.0-alpha.14
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/CHANGELOG.md +142 -0
- package/README.md +20 -0
- package/dist/agents/workspace.d.ts.map +1 -1
- package/dist/agents/workspace.js +4 -4
- package/dist/agents/workspace.js.map +1 -1
- package/dist/auth/storage.js +2 -2
- package/dist/auth/storage.js.map +1 -1
- package/dist/constants.js +1 -1
- package/dist/constants.js.map +1 -1
- package/dist/goal-manager.d.ts +2 -7
- package/dist/goal-manager.d.ts.map +1 -1
- package/dist/goal-manager.js +28 -37
- package/dist/goal-manager.js.map +1 -1
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp/config.d.ts +21 -1
- package/dist/mcp/config.d.ts.map +1 -1
- package/dist/mcp/config.js +30 -6
- package/dist/mcp/config.js.map +1 -1
- package/dist/mcp/manager.d.ts +22 -0
- package/dist/mcp/manager.d.ts.map +1 -1
- package/dist/mcp/manager.js +193 -80
- package/dist/mcp/manager.js.map +1 -1
- package/dist/mcp/types.d.ts +24 -2
- package/dist/mcp/types.d.ts.map +1 -1
- package/dist/onboarding/packs.js +4 -4
- package/dist/onboarding/packs.js.map +1 -1
- package/dist/plugins/manager.d.ts +4 -0
- package/dist/plugins/manager.d.ts.map +1 -1
- package/dist/plugins/manager.js +18 -6
- package/dist/plugins/manager.js.map +1 -1
- package/dist/schema.d.ts +6 -3
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +2 -1
- package/dist/schema.js.map +1 -1
- package/package.json +15 -15
package/dist/mcp/types.d.ts
CHANGED
|
@@ -30,8 +30,16 @@ export interface McpHttpServerConfig {
|
|
|
30
30
|
* OAuth client configuration for an HTTP MCP server.
|
|
31
31
|
*/
|
|
32
32
|
export interface McpHttpOAuthConfig {
|
|
33
|
-
/** Redirect URL
|
|
34
|
-
redirectUrl
|
|
33
|
+
/** Redirect URL for OAuth callbacks. Defaults to DEFAULT_OAUTH_REDIRECT_URL when omitted. */
|
|
34
|
+
redirectUrl?: string;
|
|
35
|
+
/**
|
|
36
|
+
* Shorthand for a loopback redirect URL: synthesizes
|
|
37
|
+
* `http://localhost:<callbackPort>/callback`, matching the convention
|
|
38
|
+
* Claude Code and Codex use. Config files reject entries that set both
|
|
39
|
+
* `callbackPort` and `redirectUrl`; for programmatically registered
|
|
40
|
+
* servers, `callbackPort` takes precedence over `redirectUrl`.
|
|
41
|
+
*/
|
|
42
|
+
callbackPort?: number;
|
|
35
43
|
/** Human-readable OAuth client name */
|
|
36
44
|
clientName?: string;
|
|
37
45
|
/** Optional scopes requested during OAuth */
|
|
@@ -81,5 +89,19 @@ export interface McpServerStatus {
|
|
|
81
89
|
transport: 'stdio' | 'http';
|
|
82
90
|
/** Error message if connection failed */
|
|
83
91
|
error?: string;
|
|
92
|
+
/** Whether the server rejected the connection pending OAuth authorization */
|
|
93
|
+
needsAuth?: boolean;
|
|
94
|
+
/**
|
|
95
|
+
* Whether an OAuth authorization flow is currently in flight for this server.
|
|
96
|
+
* Owned by the manager so the state survives a selector being closed/reopened;
|
|
97
|
+
* the UI uses it to keep offering "Cancel authentication" while auth is pending.
|
|
98
|
+
*/
|
|
99
|
+
authenticating?: boolean;
|
|
100
|
+
/**
|
|
101
|
+
* Whether this failed status is the result of the caller deliberately
|
|
102
|
+
* cancelling an in-flight authentication (rather than a genuine failure).
|
|
103
|
+
* The UI uses it to suppress a misleading "Failed to authenticate" message.
|
|
104
|
+
*/
|
|
105
|
+
cancelled?: boolean;
|
|
84
106
|
}
|
|
85
107
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/mcp/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/mcp/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,mDAAmD;IACnD,OAAO,EAAE,MAAM,CAAC;IAChB,gCAAgC;IAChC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,0DAA0D;IAC1D,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,gDAAgD;IAChD,GAAG,EAAE,MAAM,CAAC;IACZ,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,kEAAkE;IAClE,KAAK,CAAC,EAAE,kBAAkB,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/mcp/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,mDAAmD;IACnD,OAAO,EAAE,MAAM,CAAC;IAChB,gCAAgC;IAChC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,0DAA0D;IAC1D,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,gDAAgD;IAChD,GAAG,EAAE,MAAM,CAAC;IACZ,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,kEAAkE;IAClE,KAAK,CAAC,EAAE,kBAAkB,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,6FAA6F;IAC7F,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uCAAuC;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6CAA6C;IAC7C,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kDAAkD;IAClD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,oBAAoB,GAAG,mBAAmB,CAAC;AAEzE;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC7C,cAAc,CAAC,EAAE,gBAAgB,EAAE,CAAC;CACrC;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,gDAAgD;IAChD,SAAS,EAAE,OAAO,CAAC;IACnB,iDAAiD;IACjD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,kCAAkC;IAClC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,wCAAwC;IACxC,SAAS,EAAE,OAAO,GAAG,MAAM,CAAC;IAC5B,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB"}
|
package/dist/onboarding/packs.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
function getAvailableModePacks(access, savedCustomPacks = []) {
|
|
2
2
|
const packs = [];
|
|
3
|
-
const openaiCodex = "openai/gpt-5.
|
|
3
|
+
const openaiCodex = "openai/gpt-5.6";
|
|
4
4
|
const openaiFast = "openai/gpt-5.4-mini";
|
|
5
|
-
const anthropicBuild =
|
|
5
|
+
const anthropicBuild = "anthropic/claude-fable-5";
|
|
6
6
|
if (access.anthropic) {
|
|
7
7
|
packs.push({
|
|
8
8
|
id: "anthropic",
|
|
@@ -67,7 +67,7 @@ function getAvailableOmPacks(access) {
|
|
|
67
67
|
id: "gemini",
|
|
68
68
|
name: "Gemini Flash",
|
|
69
69
|
description: access.google === "oauth" ? "Via Google OAuth" : "Via Google API key",
|
|
70
|
-
modelId: "google/gemini-
|
|
70
|
+
modelId: "google/gemini-3.5-flash"
|
|
71
71
|
});
|
|
72
72
|
}
|
|
73
73
|
if (access.anthropic) {
|
|
@@ -91,7 +91,7 @@ function getAvailableOmPacks(access) {
|
|
|
91
91
|
id: "deepseek",
|
|
92
92
|
name: "DeepSeek",
|
|
93
93
|
description: "Via DeepSeek API key",
|
|
94
|
-
modelId: "deepseek/deepseek-
|
|
94
|
+
modelId: "deepseek/deepseek-v4-flash"
|
|
95
95
|
});
|
|
96
96
|
}
|
|
97
97
|
packs.push({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/onboarding/packs.ts"],"sourcesContent":["/**\n * Onboarding \"packs\" — predefined model configurations for each mode.\n *\n * Each pack assigns a default model to the build, plan, and fast modes,\n * plus an OM (observational memory) model.\n */\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface ModePack {\n id: string;\n name: string;\n description: string;\n models: {\n build: string;\n plan: string;\n fast: string;\n };\n}\n\nexport interface OMPack {\n id: string;\n name: string;\n description: string;\n modelId: string;\n}\n\n/** How a provider is accessed: OAuth subscription, API key, or not at all. */\nexport type ProviderAccessLevel = 'oauth' | 'apikey' | false;\n\n/** Which providers the user has access to and how. */\nexport interface ProviderAccess {\n anthropic: ProviderAccessLevel;\n openai: ProviderAccessLevel;\n cerebras: ProviderAccessLevel;\n google: ProviderAccessLevel;\n deepseek: ProviderAccessLevel;\n 'github-copilot': ProviderAccessLevel;\n [provider: string]: ProviderAccessLevel;\n}\n\n// ---------------------------------------------------------------------------\n// Mode Packs\n// ---------------------------------------------------------------------------\n\n/**\n * Build the list of available mode packs based on which providers the user\n * can actually reach (API key or OAuth login).\n *\n * @param savedCustomPacks Previously saved custom packs from settings.json.\n * These are inserted before the \"New Custom\" option.\n */\nexport function getAvailableModePacks(\n access: ProviderAccess,\n savedCustomPacks: Array<{ name: string; models: Record<string, string> }> = [],\n): ModePack[] {\n const packs: ModePack[] = [];\n\n const openaiCodex = 'openai/gpt-5.
|
|
1
|
+
{"version":3,"sources":["../../src/onboarding/packs.ts"],"sourcesContent":["/**\n * Onboarding \"packs\" — predefined model configurations for each mode.\n *\n * Each pack assigns a default model to the build, plan, and fast modes,\n * plus an OM (observational memory) model.\n */\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface ModePack {\n id: string;\n name: string;\n description: string;\n models: {\n build: string;\n plan: string;\n fast: string;\n };\n}\n\nexport interface OMPack {\n id: string;\n name: string;\n description: string;\n modelId: string;\n}\n\n/** How a provider is accessed: OAuth subscription, API key, or not at all. */\nexport type ProviderAccessLevel = 'oauth' | 'apikey' | false;\n\n/** Which providers the user has access to and how. */\nexport interface ProviderAccess {\n anthropic: ProviderAccessLevel;\n openai: ProviderAccessLevel;\n cerebras: ProviderAccessLevel;\n google: ProviderAccessLevel;\n deepseek: ProviderAccessLevel;\n 'github-copilot': ProviderAccessLevel;\n [provider: string]: ProviderAccessLevel;\n}\n\n// ---------------------------------------------------------------------------\n// Mode Packs\n// ---------------------------------------------------------------------------\n\n/**\n * Build the list of available mode packs based on which providers the user\n * can actually reach (API key or OAuth login).\n *\n * @param savedCustomPacks Previously saved custom packs from settings.json.\n * These are inserted before the \"New Custom\" option.\n */\nexport function getAvailableModePacks(\n access: ProviderAccess,\n savedCustomPacks: Array<{ name: string; models: Record<string, string> }> = [],\n): ModePack[] {\n const packs: ModePack[] = [];\n\n const openaiCodex = 'openai/gpt-5.6';\n const openaiFast = 'openai/gpt-5.4-mini';\n const anthropicBuild = 'anthropic/claude-fable-5';\n\n if (access.anthropic) {\n packs.push({\n id: 'anthropic',\n name: 'Anthropic',\n description:\n access.anthropic === 'oauth' ? 'All Anthropic models via Max subscription' : 'All Anthropic models via API key',\n models: {\n build: anthropicBuild,\n plan: anthropicBuild,\n fast: 'anthropic/claude-haiku-4-5',\n },\n });\n }\n\n if (access.openai) {\n packs.push({\n id: 'openai',\n name: 'OpenAI',\n description:\n access.openai === 'oauth' ? 'All OpenAI models via Codex subscription' : 'All OpenAI models via API key',\n models: {\n build: openaiCodex,\n plan: openaiCodex,\n fast: openaiFast,\n },\n });\n }\n\n if (access['github-copilot']) {\n packs.push({\n id: 'github-copilot',\n name: 'GitHub Copilot',\n description: 'GitHub Copilot subscription',\n models: {\n build: 'github-copilot/gpt-4.1',\n plan: 'github-copilot/gemini-2.5-pro',\n fast: 'github-copilot/grok-code-fast-1',\n },\n });\n }\n\n // Saved custom packs — inserted before the \"New Custom\" option\n for (const cp of savedCustomPacks) {\n packs.push({\n id: `custom:${cp.name}`,\n name: cp.name,\n description: 'Saved custom pack',\n models: {\n build: cp.models.build ?? '',\n plan: cp.models.plan ?? '',\n fast: cp.models.fast ?? '',\n },\n });\n }\n\n // New Custom — always available; user picks each model individually\n const hasCustom = savedCustomPacks.length > 0;\n packs.push({\n id: 'custom',\n name: hasCustom ? 'New Custom' : 'Custom',\n description: 'Choose a model for each mode',\n models: { build: '', plan: '', fast: '' },\n });\n\n return packs;\n}\n\n// ---------------------------------------------------------------------------\n// OM Packs\n// ---------------------------------------------------------------------------\n\nexport function getAvailableOmPacks(access: ProviderAccess): OMPack[] {\n const packs: OMPack[] = [];\n\n if (access.google) {\n packs.push({\n id: 'gemini',\n name: 'Gemini Flash',\n description: access.google === 'oauth' ? 'Via Google OAuth' : 'Via Google API key',\n modelId: 'google/gemini-3.5-flash',\n });\n }\n\n if (access.anthropic) {\n packs.push({\n id: 'anthropic',\n name: 'Claude Haiku',\n description: access.anthropic === 'oauth' ? 'Via Max subscription' : 'Via Anthropic API key',\n modelId: 'anthropic/claude-haiku-4-5',\n });\n }\n\n if (access.openai) {\n packs.push({\n id: 'openai',\n name: 'OpenAI Mini',\n description: access.openai === 'oauth' ? 'Via Codex subscription' : 'Via OpenAI API key',\n modelId: 'openai/gpt-5.4-mini',\n });\n }\n\n if (access.deepseek) {\n packs.push({\n id: 'deepseek',\n name: 'DeepSeek',\n description: 'Via DeepSeek API key',\n modelId: 'deepseek/deepseek-v4-flash',\n });\n }\n\n // Custom — always available; user picks any model\n packs.push({\n id: 'custom',\n name: 'Custom',\n description: 'Choose any available model',\n modelId: '',\n });\n\n return packs;\n}\n\n// ---------------------------------------------------------------------------\n// Current onboarding version — bump when adding new steps\n// ---------------------------------------------------------------------------\n\nexport const ONBOARDING_VERSION = 1;\n"],"mappings":"AAsDO,SAAS,sBACd,QACA,mBAA4E,CAAC,GACjE;AACZ,QAAM,QAAoB,CAAC;AAE3B,QAAM,cAAc;AACpB,QAAM,aAAa;AACnB,QAAM,iBAAiB;AAEvB,MAAI,OAAO,WAAW;AACpB,UAAM,KAAK;AAAA,MACT,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,aACE,OAAO,cAAc,UAAU,8CAA8C;AAAA,MAC/E,QAAQ;AAAA,QACN,OAAO;AAAA,QACP,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF,CAAC;AAAA,EACH;AAEA,MAAI,OAAO,QAAQ;AACjB,UAAM,KAAK;AAAA,MACT,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,aACE,OAAO,WAAW,UAAU,6CAA6C;AAAA,MAC3E,QAAQ;AAAA,QACN,OAAO;AAAA,QACP,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF,CAAC;AAAA,EACH;AAEA,MAAI,OAAO,gBAAgB,GAAG;AAC5B,UAAM,KAAK;AAAA,MACT,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,aAAa;AAAA,MACb,QAAQ;AAAA,QACN,OAAO;AAAA,QACP,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF,CAAC;AAAA,EACH;AAGA,aAAW,MAAM,kBAAkB;AACjC,UAAM,KAAK;AAAA,MACT,IAAI,UAAU,GAAG,IAAI;AAAA,MACrB,MAAM,GAAG;AAAA,MACT,aAAa;AAAA,MACb,QAAQ;AAAA,QACN,OAAO,GAAG,OAAO,SAAS;AAAA,QAC1B,MAAM,GAAG,OAAO,QAAQ;AAAA,QACxB,MAAM,GAAG,OAAO,QAAQ;AAAA,MAC1B;AAAA,IACF,CAAC;AAAA,EACH;AAGA,QAAM,YAAY,iBAAiB,SAAS;AAC5C,QAAM,KAAK;AAAA,IACT,IAAI;AAAA,IACJ,MAAM,YAAY,eAAe;AAAA,IACjC,aAAa;AAAA,IACb,QAAQ,EAAE,OAAO,IAAI,MAAM,IAAI,MAAM,GAAG;AAAA,EAC1C,CAAC;AAED,SAAO;AACT;AAMO,SAAS,oBAAoB,QAAkC;AACpE,QAAM,QAAkB,CAAC;AAEzB,MAAI,OAAO,QAAQ;AACjB,UAAM,KAAK;AAAA,MACT,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,aAAa,OAAO,WAAW,UAAU,qBAAqB;AAAA,MAC9D,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAEA,MAAI,OAAO,WAAW;AACpB,UAAM,KAAK;AAAA,MACT,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,aAAa,OAAO,cAAc,UAAU,yBAAyB;AAAA,MACrE,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAEA,MAAI,OAAO,QAAQ;AACjB,UAAM,KAAK;AAAA,MACT,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,aAAa,OAAO,WAAW,UAAU,2BAA2B;AAAA,MACpE,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAEA,MAAI,OAAO,UAAU;AACnB,UAAM,KAAK;AAAA,MACT,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,aAAa;AAAA,MACb,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAGA,QAAM,KAAK;AAAA,IACT,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,IACb,SAAS;AAAA,EACX,CAAC;AAED,SAAO;AACT;AAMO,MAAM,qBAAqB;","names":[]}
|
|
@@ -18,8 +18,11 @@ export declare class PluginManager {
|
|
|
18
18
|
private githubPollInFlight;
|
|
19
19
|
private reloadInFlight;
|
|
20
20
|
private readonly reloadListeners;
|
|
21
|
+
private readonly githubUpdateListeners;
|
|
21
22
|
constructor(options: PluginManagerOptions);
|
|
22
23
|
onReload(listener: (plugins: LoadedPlugin[]) => void | Promise<void>): () => void;
|
|
24
|
+
/** Notified with the display names of GitHub plugins that were updated by the background poll. */
|
|
25
|
+
onGithubPluginsUpdated(listener: (pluginNames: string[]) => void | Promise<void>): () => void;
|
|
23
26
|
reload(): Promise<LoadedPlugin[]>;
|
|
24
27
|
listPlugins(): Promise<LoadedPlugin[]>;
|
|
25
28
|
getLoadedPlugins(): LoadedPlugin[];
|
|
@@ -38,6 +41,7 @@ export declare class PluginManager {
|
|
|
38
41
|
private updateGithubPoller;
|
|
39
42
|
pollGithubSourcesForUpdates(): Promise<boolean>;
|
|
40
43
|
private pollGithubSourcesForUpdatesOnce;
|
|
44
|
+
private notifyGithubUpdateListeners;
|
|
41
45
|
private refreshGithubCheckout;
|
|
42
46
|
private backupGitCheckout;
|
|
43
47
|
private resolveGitUpstream;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/plugins/manager.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAEhE,OAAO,EAAE,oBAAoB,EAAoE,MAAM,cAAc,CAAC;AACtH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAIzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAa5D,KAAK,oBAAoB,GAAG,iBAAiB,GAAG;IAC9C,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,qBAAa,aAAa;
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/plugins/manager.ts"],"names":[],"mappings":"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"}
|
package/dist/plugins/manager.js
CHANGED
|
@@ -30,10 +30,16 @@ class PluginManager {
|
|
|
30
30
|
githubPollInFlight;
|
|
31
31
|
reloadInFlight;
|
|
32
32
|
reloadListeners = /* @__PURE__ */ new Set();
|
|
33
|
+
githubUpdateListeners = /* @__PURE__ */ new Set();
|
|
33
34
|
onReload(listener) {
|
|
34
35
|
this.reloadListeners.add(listener);
|
|
35
36
|
return () => this.reloadListeners.delete(listener);
|
|
36
37
|
}
|
|
38
|
+
/** Notified with the display names of GitHub plugins that were updated by the background poll. */
|
|
39
|
+
onGithubPluginsUpdated(listener) {
|
|
40
|
+
this.githubUpdateListeners.add(listener);
|
|
41
|
+
return () => this.githubUpdateListeners.delete(listener);
|
|
42
|
+
}
|
|
37
43
|
async reload() {
|
|
38
44
|
if (this.reloadInFlight) return this.reloadInFlight;
|
|
39
45
|
this.reloadInFlight = (async () => {
|
|
@@ -189,7 +195,7 @@ class PluginManager {
|
|
|
189
195
|
return this.githubPollInFlight;
|
|
190
196
|
}
|
|
191
197
|
async pollGithubSourcesForUpdatesOnce() {
|
|
192
|
-
|
|
198
|
+
const changedCheckouts = /* @__PURE__ */ new Set();
|
|
193
199
|
const seen = /* @__PURE__ */ new Set();
|
|
194
200
|
for (const plugin of this.loadedPlugins) {
|
|
195
201
|
if (plugin.source !== "github" || plugin.status === "inactive" || plugin.status === "blocked") continue;
|
|
@@ -199,12 +205,18 @@ class PluginManager {
|
|
|
199
205
|
const before = await this.readGitHead(checkoutPath);
|
|
200
206
|
const checkoutChanged = await this.refreshGithubCheckout(plugin, checkoutPath, before);
|
|
201
207
|
const after = await this.readGitHead(checkoutPath);
|
|
202
|
-
if (checkoutChanged || before !== after)
|
|
203
|
-
}
|
|
204
|
-
if (changed) {
|
|
205
|
-
await this.reload();
|
|
208
|
+
if (checkoutChanged || before !== after) changedCheckouts.add(checkoutPath);
|
|
206
209
|
}
|
|
207
|
-
return
|
|
210
|
+
if (changedCheckouts.size === 0) return false;
|
|
211
|
+
await this.reload();
|
|
212
|
+
const updatedPluginNames = this.loadedPlugins.filter(
|
|
213
|
+
(plugin) => plugin.source === "github" && plugin.status !== "inactive" && plugin.status !== "blocked" && changedCheckouts.has(this.resolvePluginSourcePath(plugin))
|
|
214
|
+
).map((plugin) => plugin.name ?? plugin.id);
|
|
215
|
+
await this.notifyGithubUpdateListeners(updatedPluginNames);
|
|
216
|
+
return true;
|
|
217
|
+
}
|
|
218
|
+
async notifyGithubUpdateListeners(pluginNames) {
|
|
219
|
+
await Promise.all([...this.githubUpdateListeners].map((listener) => Promise.resolve(listener(pluginNames))));
|
|
208
220
|
}
|
|
209
221
|
async refreshGithubCheckout(plugin, checkoutPath, currentHead) {
|
|
210
222
|
await execa("git", ["fetch", "origin"], gitExecOptions(checkoutPath));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/plugins/manager.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { execa } from 'execa';\n\nimport type { MastraCodePluginConfigValue } from '../plugin.js';\nimport { getEntryPackageRoot, installPluginDependenciesForEntry } from './dependencies.js';\nimport { discoverLocalPlugins, installGithubPlugin, installLocalPlugin, NON_INTERACTIVE_GIT_ENV } from './install.js';\nimport type { InstallPluginOptions } from './install.js';\nimport { collectActivePluginTools, isInsideDirectory, loadPlugins, resolvePluginEntryPath } from './loader.js';\nimport { ensureMastraCodePackageLink } from './package-link.js';\nimport { getPluginScopePaths } from './paths.js';\nimport type { PluginPathOptions } from './paths.js';\nimport { loadPluginRegistry, removePluginRecord, savePluginRegistry, setPluginRecord } from './registry.js';\nimport type { LoadedPlugin, PluginScope } from './types.js';\n\nconst GITHUB_PLUGIN_POLL_INTERVAL_MS = 60_000;\n\nfunction gitExecOptions(cwd: string) {\n return { cwd, env: NON_INTERACTIVE_GIT_ENV };\n}\n\nfunction getEntryVersion(entryPath: string): string {\n const stat = fs.statSync(entryPath, { bigint: true });\n return `${stat.mtimeNs}:${stat.size}`;\n}\n\ntype PluginManagerOptions = PluginPathOptions & {\n githubCliPath?: string;\n};\n\nexport class PluginManager {\n private loadedPlugins: LoadedPlugin[] = [];\n private readonly pluginTools: ReturnType<typeof collectActivePluginTools> = {};\n private readonly rawPluginTools: ReturnType<typeof collectActivePluginTools> = {};\n private readonly toolRenderConfigs = new Map<string, NonNullable<LoadedPlugin['renderConfigs']>[string]>();\n private readonly watchedLocalEntries = new Set<string>();\n private readonly localEntryVersions = new Map<string, string>();\n private githubPollTimer: ReturnType<typeof setInterval> | undefined;\n private githubPollInFlight: Promise<boolean> | undefined;\n private reloadInFlight: Promise<LoadedPlugin[]> | undefined;\n private readonly reloadListeners = new Set<(plugins: LoadedPlugin[]) => void | Promise<void>>();\n\n constructor(private readonly options: PluginManagerOptions) {}\n\n onReload(listener: (plugins: LoadedPlugin[]) => void | Promise<void>): () => void {\n this.reloadListeners.add(listener);\n return () => this.reloadListeners.delete(listener);\n }\n\n async reload(): Promise<LoadedPlugin[]> {\n if (this.reloadInFlight) return this.reloadInFlight;\n\n this.reloadInFlight = (async () => {\n this.loadedPlugins = await loadPlugins(this.options);\n this.updateLocalEntryWatchers(this.loadedPlugins);\n this.updateGithubPoller(this.loadedPlugins);\n this.updatePluginRenderConfigs(this.loadedPlugins);\n this.updatePluginTools(collectActivePluginTools(this.loadedPlugins));\n await this.notifyReloadListeners(this.loadedPlugins);\n return this.loadedPlugins;\n })().finally(() => {\n this.reloadInFlight = undefined;\n });\n\n return this.reloadInFlight;\n }\n\n async listPlugins(): Promise<LoadedPlugin[]> {\n if (this.loadedPlugins.length === 0) {\n await this.reload();\n }\n return this.loadedPlugins;\n }\n\n getLoadedPlugins(): LoadedPlugin[] {\n return this.loadedPlugins;\n }\n\n getPluginTools() {\n return this.pluginTools;\n }\n\n getToolRenderConfig(toolName: string) {\n return this.toolRenderConfigs.get(toolName);\n }\n\n getPluginSkillPaths(): string[] {\n return this.loadedPlugins.flatMap(plugin => (plugin.status === 'active' ? (plugin.skillPaths ?? []) : []));\n }\n\n getPluginCommandPaths(): string[] {\n return this.loadedPlugins.flatMap(plugin => (plugin.status === 'active' ? (plugin.commandPaths ?? []) : []));\n }\n\n getPluginInstructions(): string[] {\n return this.loadedPlugins.flatMap(plugin =>\n plugin.status === 'active' && plugin.instructions ? [plugin.instructions] : [],\n );\n }\n\n private async notifyReloadListeners(plugins: LoadedPlugin[]): Promise<void> {\n await Promise.all([...this.reloadListeners].map(listener => Promise.resolve(listener(plugins))));\n }\n\n private updatePluginRenderConfigs(plugins: LoadedPlugin[]): void {\n this.toolRenderConfigs.clear();\n for (const plugin of plugins) {\n if (plugin.status !== 'active') continue;\n for (const [toolName, renderConfig] of Object.entries(plugin.renderConfigs ?? {})) {\n if (!this.toolRenderConfigs.has(toolName)) {\n this.toolRenderConfigs.set(toolName, renderConfig);\n }\n }\n }\n }\n\n private updatePluginTools(nextTools: ReturnType<typeof collectActivePluginTools>): void {\n for (const name of Object.keys(this.rawPluginTools)) {\n if (!(name in nextTools)) {\n delete this.rawPluginTools[name];\n delete this.pluginTools[name];\n }\n }\n\n for (const [name, tool] of Object.entries(nextTools)) {\n this.rawPluginTools[name] = tool;\n if (!this.pluginTools[name]) {\n this.pluginTools[name] = this.createLiveToolProxy(name);\n }\n this.syncLiveToolProxy(name, tool);\n }\n }\n\n private createLiveToolProxy(toolName: string) {\n return {\n execute: async (...args: any[]) => {\n await this.reloadChangedLocalPlugins();\n const latestTool = this.rawPluginTools[toolName];\n if (!latestTool?.execute) {\n throw new Error(`Plugin tool \"${toolName}\" is no longer available`);\n }\n return (latestTool.execute as (...args: any[]) => unknown)(...args);\n },\n } as LoadedPlugin['tools'][string];\n }\n\n private syncLiveToolProxy(toolName: string, tool: LoadedPlugin['tools'][string]): void {\n const proxy = this.pluginTools[toolName];\n if (!proxy) return;\n const mutableProxy = proxy as unknown as Record<string, unknown>;\n for (const key of Object.keys(mutableProxy)) {\n delete mutableProxy[key];\n }\n Object.assign(proxy, tool);\n proxy.execute = this.createLiveToolProxy(toolName).execute;\n }\n\n private async reloadChangedLocalPlugins(): Promise<void> {\n for (const plugin of this.loadedPlugins) {\n if (plugin.source !== 'local' || plugin.status !== 'active') continue;\n const entryPath = resolvePluginEntryPath(plugin, this.options);\n const currentVersion = getEntryVersion(entryPath);\n if (this.localEntryVersions.get(entryPath) !== currentVersion) {\n await this.reload();\n return;\n }\n }\n }\n\n private updateLocalEntryWatchers(plugins: LoadedPlugin[]): void {\n const nextEntries = new Set<string>();\n for (const plugin of plugins) {\n if (plugin.source !== 'local' || plugin.status !== 'active') continue;\n let entryPath: string;\n let entryVersion: string;\n try {\n entryPath = resolvePluginEntryPath(plugin, this.options);\n entryVersion = getEntryVersion(entryPath);\n } catch {\n continue;\n }\n nextEntries.add(entryPath);\n this.localEntryVersions.set(entryPath, entryVersion);\n if (this.watchedLocalEntries.has(entryPath)) continue;\n\n const watcher = fs.watchFile(entryPath, { interval: 500 }, (current, previous) => {\n if (current.mtimeMs === previous.mtimeMs) return;\n void this.reload().catch(() => undefined);\n });\n watcher.unref?.();\n this.watchedLocalEntries.add(entryPath);\n }\n\n for (const entryPath of this.watchedLocalEntries) {\n if (nextEntries.has(entryPath)) continue;\n fs.unwatchFile(entryPath);\n this.watchedLocalEntries.delete(entryPath);\n this.localEntryVersions.delete(entryPath);\n }\n }\n\n private updateGithubPoller(plugins: LoadedPlugin[]): void {\n const hasGithubPlugin = plugins.some(\n plugin => plugin.source === 'github' && plugin.status !== 'inactive' && plugin.status !== 'blocked',\n );\n if (hasGithubPlugin && !this.githubPollTimer) {\n this.githubPollTimer = setInterval(() => {\n void this.pollGithubSourcesForUpdates().catch(() => undefined);\n }, GITHUB_PLUGIN_POLL_INTERVAL_MS);\n this.githubPollTimer.unref?.();\n }\n if (!hasGithubPlugin && this.githubPollTimer) {\n clearInterval(this.githubPollTimer);\n this.githubPollTimer = undefined;\n }\n }\n\n async pollGithubSourcesForUpdates(): Promise<boolean> {\n if (this.githubPollInFlight) return this.githubPollInFlight;\n this.githubPollInFlight = this.pollGithubSourcesForUpdatesOnce().finally(() => {\n this.githubPollInFlight = undefined;\n });\n return this.githubPollInFlight;\n }\n\n private async pollGithubSourcesForUpdatesOnce(): Promise<boolean> {\n let changed = false;\n const seen = new Set<string>();\n for (const plugin of this.loadedPlugins) {\n if (plugin.source !== 'github' || plugin.status === 'inactive' || plugin.status === 'blocked') continue;\n const checkoutPath = this.resolvePluginSourcePath(plugin);\n if (seen.has(checkoutPath) || !fs.existsSync(path.join(checkoutPath, '.git'))) continue;\n seen.add(checkoutPath);\n\n const before = await this.readGitHead(checkoutPath);\n const checkoutChanged = await this.refreshGithubCheckout(plugin, checkoutPath, before);\n const after = await this.readGitHead(checkoutPath);\n if (checkoutChanged || before !== after) changed = true;\n }\n\n if (changed) {\n await this.reload();\n }\n return changed;\n }\n\n private async refreshGithubCheckout(\n plugin: LoadedPlugin,\n checkoutPath: string,\n currentHead: string,\n ): Promise<boolean> {\n await execa('git', ['fetch', 'origin'], gitExecOptions(checkoutPath));\n const upstream = await this.resolveGitUpstream(checkoutPath, plugin.ref);\n if (!upstream) return false;\n const [localOnly, remoteOnly] = await this.readGitAheadBehind(checkoutPath, upstream);\n const hasLocalChanges = await this.hasGitWorkingTreeChanges(checkoutPath);\n\n if (localOnly > 0 || hasLocalChanges) {\n await this.backupGitCheckout(checkoutPath, currentHead, hasLocalChanges);\n }\n\n if (remoteOnly > 0 || localOnly > 0 || hasLocalChanges) {\n await execa('git', ['reset', '--hard', upstream], gitExecOptions(checkoutPath));\n try {\n await installPluginDependenciesForEntry(checkoutPath, plugin.entry);\n ensureMastraCodePackageLink(getEntryPackageRoot(checkoutPath, plugin.entry));\n } catch (error) {\n await execa('git', ['reset', '--hard', currentHead], gitExecOptions(checkoutPath));\n throw error;\n }\n return true;\n }\n\n return false;\n }\n\n private async backupGitCheckout(\n checkoutPath: string,\n currentHead: string,\n includeWorkingTree: boolean,\n ): Promise<void> {\n const backupBranch = this.createGitBackupBranchName(currentHead);\n\n if (includeWorkingTree) {\n const currentBranch = await this.readGitCurrentBranch(checkoutPath);\n await execa('git', ['switch', '-c', backupBranch], gitExecOptions(checkoutPath));\n await execa('git', ['add', '-A'], gitExecOptions(checkoutPath));\n const hasStagedChanges = await this.hasGitStagedChanges(checkoutPath);\n if (hasStagedChanges) {\n await execa(\n 'git',\n [\n '-c',\n 'user.name=Mastra Code',\n '-c',\n 'user.email=noreply@mastra.ai',\n 'commit',\n '-m',\n 'chore: backup local plugin checkout changes',\n ],\n gitExecOptions(checkoutPath),\n );\n }\n await this.restoreGitCheckout(checkoutPath, currentBranch, currentHead);\n return;\n }\n\n await execa('git', ['branch', backupBranch, 'HEAD'], gitExecOptions(checkoutPath));\n }\n\n private async resolveGitUpstream(cwd: string, installedRef?: string): Promise<string | undefined> {\n try {\n const { stdout } = await execa(\n 'git',\n ['rev-parse', '--abbrev-ref', '--symbolic-full-name', '@{u}'],\n gitExecOptions(cwd),\n );\n return stdout.trim();\n } catch {\n return installedRef ? undefined : 'origin/main';\n }\n }\n\n private async readGitAheadBehind(cwd: string, upstream: string): Promise<[number, number]> {\n const { stdout } = await execa(\n 'git',\n ['rev-list', '--left-right', '--count', `HEAD...${upstream}`],\n gitExecOptions(cwd),\n );\n const [ahead = '0', behind = '0'] = stdout.trim().split(/\\s+/);\n return [Number(ahead) || 0, Number(behind) || 0];\n }\n\n private async hasGitWorkingTreeChanges(cwd: string): Promise<boolean> {\n const { stdout } = await execa('git', ['status', '--porcelain'], gitExecOptions(cwd));\n return stdout.trim().length > 0;\n }\n\n private async hasGitStagedChanges(cwd: string): Promise<boolean> {\n try {\n await execa('git', ['diff', '--cached', '--quiet'], gitExecOptions(cwd));\n return false;\n } catch {\n return true;\n }\n }\n\n private async restoreGitCheckout(cwd: string, branch: string | undefined, fallbackHead: string): Promise<void> {\n if (branch) {\n await execa('git', ['switch', branch], gitExecOptions(cwd));\n return;\n }\n await execa('git', ['checkout', fallbackHead], gitExecOptions(cwd));\n }\n\n private async readGitCurrentBranch(cwd: string): Promise<string | undefined> {\n const { stdout } = await execa('git', ['branch', '--show-current'], gitExecOptions(cwd));\n const branch = stdout.trim();\n return branch.length > 0 ? branch : undefined;\n }\n\n private createGitBackupBranchName(currentHead: string): string {\n const timestamp = new Date().toISOString().replace(/[:.]/g, '-');\n return `mastracode/plugin-backup/${timestamp}-${currentHead.slice(0, 8)}`;\n }\n\n private resolvePluginSourcePath(plugin: LoadedPlugin): string {\n const paths = getPluginScopePaths(plugin.scope, this.options);\n return path.isAbsolute(plugin.path) ? plugin.path : path.join(paths.root, plugin.path);\n }\n\n private async readGitHead(cwd: string): Promise<string> {\n const { stdout } = await execa('git', ['rev-parse', 'HEAD'], gitExecOptions(cwd));\n return stdout.trim();\n }\n\n discoverLocal(searchRoot = '.'): ReturnType<typeof discoverLocalPlugins> {\n return discoverLocalPlugins(searchRoot, this.options);\n }\n\n async installLocal(\n localPath: string,\n scope: PluginScope,\n options: Pick<InstallPluginOptions, 'entry'> = {},\n ): Promise<string> {\n const id = await installLocalPlugin(localPath, scope, { ...this.options, ...options });\n await this.reload();\n return id;\n }\n\n async installGithub(\n url: string,\n scope: PluginScope,\n options: Pick<InstallPluginOptions, 'entry' | 'ref' | 'onOutput' | 'signal'> = {},\n ): Promise<string> {\n const id = await installGithubPlugin(url, scope, { ...this.options, ...options });\n await this.reload();\n return id;\n }\n\n async setEnabled(pluginId: string, scope: PluginScope, enabled: boolean): Promise<void> {\n const paths = getPluginScopePaths(scope, this.options);\n const registry = loadPluginRegistry(paths.registryPath);\n const record = registry.plugins[pluginId];\n if (!record) {\n throw new Error(`Plugin \"${pluginId}\" is not installed in ${scope} scope`);\n }\n savePluginRegistry(paths.registryPath, setPluginRecord(registry, pluginId, { ...record, enabled }));\n await this.reload();\n }\n\n async setConfigValue(\n pluginId: string,\n scope: PluginScope,\n key: string,\n value: MastraCodePluginConfigValue,\n ): Promise<void> {\n const paths = getPluginScopePaths(scope, this.options);\n const registry = loadPluginRegistry(paths.registryPath);\n const record = registry.plugins[pluginId];\n if (!record) {\n throw new Error(`Plugin \"${pluginId}\" is not installed in ${scope} scope`);\n }\n const config = { ...(record.config ?? {}) };\n if (value === undefined || value === '') {\n delete config[key];\n } else {\n config[key] = value;\n }\n const nextRecord = { ...record, config: Object.keys(config).length > 0 ? config : undefined };\n savePluginRegistry(paths.registryPath, setPluginRecord(registry, pluginId, nextRecord));\n await this.reload();\n }\n\n async uninstall(pluginId: string, scope: PluginScope): Promise<void> {\n const paths = getPluginScopePaths(scope, this.options);\n const registry = loadPluginRegistry(paths.registryPath);\n const record = registry.plugins[pluginId];\n if (!record) {\n throw new Error(`Plugin \"${pluginId}\" is not installed in ${scope} scope`);\n }\n\n savePluginRegistry(paths.registryPath, removePluginRecord(registry, pluginId));\n if (record.source === 'github') {\n const checkoutPath = path.resolve(\n path.isAbsolute(record.path) ? record.path : path.join(paths.root, record.path),\n );\n const githubSourcesPath = path.resolve(paths.sourcesPath, 'github');\n if (isInsideDirectory(checkoutPath, githubSourcesPath)) {\n fs.rmSync(checkoutPath, { recursive: true, force: true });\n }\n }\n await this.reload();\n }\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/plugins/manager.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { execa } from 'execa';\n\nimport type { MastraCodePluginConfigValue } from '../plugin.js';\nimport { getEntryPackageRoot, installPluginDependenciesForEntry } from './dependencies.js';\nimport { discoverLocalPlugins, installGithubPlugin, installLocalPlugin, NON_INTERACTIVE_GIT_ENV } from './install.js';\nimport type { InstallPluginOptions } from './install.js';\nimport { collectActivePluginTools, isInsideDirectory, loadPlugins, resolvePluginEntryPath } from './loader.js';\nimport { ensureMastraCodePackageLink } from './package-link.js';\nimport { getPluginScopePaths } from './paths.js';\nimport type { PluginPathOptions } from './paths.js';\nimport { loadPluginRegistry, removePluginRecord, savePluginRegistry, setPluginRecord } from './registry.js';\nimport type { LoadedPlugin, PluginScope } from './types.js';\n\nconst GITHUB_PLUGIN_POLL_INTERVAL_MS = 60_000;\n\nfunction gitExecOptions(cwd: string) {\n return { cwd, env: NON_INTERACTIVE_GIT_ENV };\n}\n\nfunction getEntryVersion(entryPath: string): string {\n const stat = fs.statSync(entryPath, { bigint: true });\n return `${stat.mtimeNs}:${stat.size}`;\n}\n\ntype PluginManagerOptions = PluginPathOptions & {\n githubCliPath?: string;\n};\n\nexport class PluginManager {\n private loadedPlugins: LoadedPlugin[] = [];\n private readonly pluginTools: ReturnType<typeof collectActivePluginTools> = {};\n private readonly rawPluginTools: ReturnType<typeof collectActivePluginTools> = {};\n private readonly toolRenderConfigs = new Map<string, NonNullable<LoadedPlugin['renderConfigs']>[string]>();\n private readonly watchedLocalEntries = new Set<string>();\n private readonly localEntryVersions = new Map<string, string>();\n private githubPollTimer: ReturnType<typeof setInterval> | undefined;\n private githubPollInFlight: Promise<boolean> | undefined;\n private reloadInFlight: Promise<LoadedPlugin[]> | undefined;\n private readonly reloadListeners = new Set<(plugins: LoadedPlugin[]) => void | Promise<void>>();\n private readonly githubUpdateListeners = new Set<(pluginNames: string[]) => void | Promise<void>>();\n\n constructor(private readonly options: PluginManagerOptions) {}\n\n onReload(listener: (plugins: LoadedPlugin[]) => void | Promise<void>): () => void {\n this.reloadListeners.add(listener);\n return () => this.reloadListeners.delete(listener);\n }\n\n /** Notified with the display names of GitHub plugins that were updated by the background poll. */\n onGithubPluginsUpdated(listener: (pluginNames: string[]) => void | Promise<void>): () => void {\n this.githubUpdateListeners.add(listener);\n return () => this.githubUpdateListeners.delete(listener);\n }\n\n async reload(): Promise<LoadedPlugin[]> {\n if (this.reloadInFlight) return this.reloadInFlight;\n\n this.reloadInFlight = (async () => {\n this.loadedPlugins = await loadPlugins(this.options);\n this.updateLocalEntryWatchers(this.loadedPlugins);\n this.updateGithubPoller(this.loadedPlugins);\n this.updatePluginRenderConfigs(this.loadedPlugins);\n this.updatePluginTools(collectActivePluginTools(this.loadedPlugins));\n await this.notifyReloadListeners(this.loadedPlugins);\n return this.loadedPlugins;\n })().finally(() => {\n this.reloadInFlight = undefined;\n });\n\n return this.reloadInFlight;\n }\n\n async listPlugins(): Promise<LoadedPlugin[]> {\n if (this.loadedPlugins.length === 0) {\n await this.reload();\n }\n return this.loadedPlugins;\n }\n\n getLoadedPlugins(): LoadedPlugin[] {\n return this.loadedPlugins;\n }\n\n getPluginTools() {\n return this.pluginTools;\n }\n\n getToolRenderConfig(toolName: string) {\n return this.toolRenderConfigs.get(toolName);\n }\n\n getPluginSkillPaths(): string[] {\n return this.loadedPlugins.flatMap(plugin => (plugin.status === 'active' ? (plugin.skillPaths ?? []) : []));\n }\n\n getPluginCommandPaths(): string[] {\n return this.loadedPlugins.flatMap(plugin => (plugin.status === 'active' ? (plugin.commandPaths ?? []) : []));\n }\n\n getPluginInstructions(): string[] {\n return this.loadedPlugins.flatMap(plugin =>\n plugin.status === 'active' && plugin.instructions ? [plugin.instructions] : [],\n );\n }\n\n private async notifyReloadListeners(plugins: LoadedPlugin[]): Promise<void> {\n await Promise.all([...this.reloadListeners].map(listener => Promise.resolve(listener(plugins))));\n }\n\n private updatePluginRenderConfigs(plugins: LoadedPlugin[]): void {\n this.toolRenderConfigs.clear();\n for (const plugin of plugins) {\n if (plugin.status !== 'active') continue;\n for (const [toolName, renderConfig] of Object.entries(plugin.renderConfigs ?? {})) {\n if (!this.toolRenderConfigs.has(toolName)) {\n this.toolRenderConfigs.set(toolName, renderConfig);\n }\n }\n }\n }\n\n private updatePluginTools(nextTools: ReturnType<typeof collectActivePluginTools>): void {\n for (const name of Object.keys(this.rawPluginTools)) {\n if (!(name in nextTools)) {\n delete this.rawPluginTools[name];\n delete this.pluginTools[name];\n }\n }\n\n for (const [name, tool] of Object.entries(nextTools)) {\n this.rawPluginTools[name] = tool;\n if (!this.pluginTools[name]) {\n this.pluginTools[name] = this.createLiveToolProxy(name);\n }\n this.syncLiveToolProxy(name, tool);\n }\n }\n\n private createLiveToolProxy(toolName: string) {\n return {\n execute: async (...args: any[]) => {\n await this.reloadChangedLocalPlugins();\n const latestTool = this.rawPluginTools[toolName];\n if (!latestTool?.execute) {\n throw new Error(`Plugin tool \"${toolName}\" is no longer available`);\n }\n return (latestTool.execute as (...args: any[]) => unknown)(...args);\n },\n } as LoadedPlugin['tools'][string];\n }\n\n private syncLiveToolProxy(toolName: string, tool: LoadedPlugin['tools'][string]): void {\n const proxy = this.pluginTools[toolName];\n if (!proxy) return;\n const mutableProxy = proxy as unknown as Record<string, unknown>;\n for (const key of Object.keys(mutableProxy)) {\n delete mutableProxy[key];\n }\n Object.assign(proxy, tool);\n proxy.execute = this.createLiveToolProxy(toolName).execute;\n }\n\n private async reloadChangedLocalPlugins(): Promise<void> {\n for (const plugin of this.loadedPlugins) {\n if (plugin.source !== 'local' || plugin.status !== 'active') continue;\n const entryPath = resolvePluginEntryPath(plugin, this.options);\n const currentVersion = getEntryVersion(entryPath);\n if (this.localEntryVersions.get(entryPath) !== currentVersion) {\n await this.reload();\n return;\n }\n }\n }\n\n private updateLocalEntryWatchers(plugins: LoadedPlugin[]): void {\n const nextEntries = new Set<string>();\n for (const plugin of plugins) {\n if (plugin.source !== 'local' || plugin.status !== 'active') continue;\n let entryPath: string;\n let entryVersion: string;\n try {\n entryPath = resolvePluginEntryPath(plugin, this.options);\n entryVersion = getEntryVersion(entryPath);\n } catch {\n continue;\n }\n nextEntries.add(entryPath);\n this.localEntryVersions.set(entryPath, entryVersion);\n if (this.watchedLocalEntries.has(entryPath)) continue;\n\n const watcher = fs.watchFile(entryPath, { interval: 500 }, (current, previous) => {\n if (current.mtimeMs === previous.mtimeMs) return;\n void this.reload().catch(() => undefined);\n });\n watcher.unref?.();\n this.watchedLocalEntries.add(entryPath);\n }\n\n for (const entryPath of this.watchedLocalEntries) {\n if (nextEntries.has(entryPath)) continue;\n fs.unwatchFile(entryPath);\n this.watchedLocalEntries.delete(entryPath);\n this.localEntryVersions.delete(entryPath);\n }\n }\n\n private updateGithubPoller(plugins: LoadedPlugin[]): void {\n const hasGithubPlugin = plugins.some(\n plugin => plugin.source === 'github' && plugin.status !== 'inactive' && plugin.status !== 'blocked',\n );\n if (hasGithubPlugin && !this.githubPollTimer) {\n this.githubPollTimer = setInterval(() => {\n void this.pollGithubSourcesForUpdates().catch(() => undefined);\n }, GITHUB_PLUGIN_POLL_INTERVAL_MS);\n this.githubPollTimer.unref?.();\n }\n if (!hasGithubPlugin && this.githubPollTimer) {\n clearInterval(this.githubPollTimer);\n this.githubPollTimer = undefined;\n }\n }\n\n async pollGithubSourcesForUpdates(): Promise<boolean> {\n if (this.githubPollInFlight) return this.githubPollInFlight;\n this.githubPollInFlight = this.pollGithubSourcesForUpdatesOnce().finally(() => {\n this.githubPollInFlight = undefined;\n });\n return this.githubPollInFlight;\n }\n\n private async pollGithubSourcesForUpdatesOnce(): Promise<boolean> {\n const changedCheckouts = new Set<string>();\n const seen = new Set<string>();\n for (const plugin of this.loadedPlugins) {\n if (plugin.source !== 'github' || plugin.status === 'inactive' || plugin.status === 'blocked') continue;\n const checkoutPath = this.resolvePluginSourcePath(plugin);\n if (seen.has(checkoutPath) || !fs.existsSync(path.join(checkoutPath, '.git'))) continue;\n seen.add(checkoutPath);\n\n const before = await this.readGitHead(checkoutPath);\n const checkoutChanged = await this.refreshGithubCheckout(plugin, checkoutPath, before);\n const after = await this.readGitHead(checkoutPath);\n if (checkoutChanged || before !== after) changedCheckouts.add(checkoutPath);\n }\n\n if (changedCheckouts.size === 0) return false;\n\n await this.reload();\n // Derive names from the reloaded state so a manifest display-name change reports the new name.\n // Multiple plugins can share one checkout — report every plugin whose source changed.\n const updatedPluginNames = this.loadedPlugins\n .filter(\n plugin =>\n plugin.source === 'github' &&\n plugin.status !== 'inactive' &&\n plugin.status !== 'blocked' &&\n changedCheckouts.has(this.resolvePluginSourcePath(plugin)),\n )\n .map(plugin => plugin.name ?? plugin.id);\n await this.notifyGithubUpdateListeners(updatedPluginNames);\n return true;\n }\n\n private async notifyGithubUpdateListeners(pluginNames: string[]): Promise<void> {\n await Promise.all([...this.githubUpdateListeners].map(listener => Promise.resolve(listener(pluginNames))));\n }\n\n private async refreshGithubCheckout(\n plugin: LoadedPlugin,\n checkoutPath: string,\n currentHead: string,\n ): Promise<boolean> {\n await execa('git', ['fetch', 'origin'], gitExecOptions(checkoutPath));\n const upstream = await this.resolveGitUpstream(checkoutPath, plugin.ref);\n if (!upstream) return false;\n const [localOnly, remoteOnly] = await this.readGitAheadBehind(checkoutPath, upstream);\n const hasLocalChanges = await this.hasGitWorkingTreeChanges(checkoutPath);\n\n if (localOnly > 0 || hasLocalChanges) {\n await this.backupGitCheckout(checkoutPath, currentHead, hasLocalChanges);\n }\n\n if (remoteOnly > 0 || localOnly > 0 || hasLocalChanges) {\n await execa('git', ['reset', '--hard', upstream], gitExecOptions(checkoutPath));\n try {\n await installPluginDependenciesForEntry(checkoutPath, plugin.entry);\n ensureMastraCodePackageLink(getEntryPackageRoot(checkoutPath, plugin.entry));\n } catch (error) {\n await execa('git', ['reset', '--hard', currentHead], gitExecOptions(checkoutPath));\n throw error;\n }\n return true;\n }\n\n return false;\n }\n\n private async backupGitCheckout(\n checkoutPath: string,\n currentHead: string,\n includeWorkingTree: boolean,\n ): Promise<void> {\n const backupBranch = this.createGitBackupBranchName(currentHead);\n\n if (includeWorkingTree) {\n const currentBranch = await this.readGitCurrentBranch(checkoutPath);\n await execa('git', ['switch', '-c', backupBranch], gitExecOptions(checkoutPath));\n await execa('git', ['add', '-A'], gitExecOptions(checkoutPath));\n const hasStagedChanges = await this.hasGitStagedChanges(checkoutPath);\n if (hasStagedChanges) {\n await execa(\n 'git',\n [\n '-c',\n 'user.name=Mastra Code',\n '-c',\n 'user.email=noreply@mastra.ai',\n 'commit',\n '-m',\n 'chore: backup local plugin checkout changes',\n ],\n gitExecOptions(checkoutPath),\n );\n }\n await this.restoreGitCheckout(checkoutPath, currentBranch, currentHead);\n return;\n }\n\n await execa('git', ['branch', backupBranch, 'HEAD'], gitExecOptions(checkoutPath));\n }\n\n private async resolveGitUpstream(cwd: string, installedRef?: string): Promise<string | undefined> {\n try {\n const { stdout } = await execa(\n 'git',\n ['rev-parse', '--abbrev-ref', '--symbolic-full-name', '@{u}'],\n gitExecOptions(cwd),\n );\n return stdout.trim();\n } catch {\n return installedRef ? undefined : 'origin/main';\n }\n }\n\n private async readGitAheadBehind(cwd: string, upstream: string): Promise<[number, number]> {\n const { stdout } = await execa(\n 'git',\n ['rev-list', '--left-right', '--count', `HEAD...${upstream}`],\n gitExecOptions(cwd),\n );\n const [ahead = '0', behind = '0'] = stdout.trim().split(/\\s+/);\n return [Number(ahead) || 0, Number(behind) || 0];\n }\n\n private async hasGitWorkingTreeChanges(cwd: string): Promise<boolean> {\n const { stdout } = await execa('git', ['status', '--porcelain'], gitExecOptions(cwd));\n return stdout.trim().length > 0;\n }\n\n private async hasGitStagedChanges(cwd: string): Promise<boolean> {\n try {\n await execa('git', ['diff', '--cached', '--quiet'], gitExecOptions(cwd));\n return false;\n } catch {\n return true;\n }\n }\n\n private async restoreGitCheckout(cwd: string, branch: string | undefined, fallbackHead: string): Promise<void> {\n if (branch) {\n await execa('git', ['switch', branch], gitExecOptions(cwd));\n return;\n }\n await execa('git', ['checkout', fallbackHead], gitExecOptions(cwd));\n }\n\n private async readGitCurrentBranch(cwd: string): Promise<string | undefined> {\n const { stdout } = await execa('git', ['branch', '--show-current'], gitExecOptions(cwd));\n const branch = stdout.trim();\n return branch.length > 0 ? branch : undefined;\n }\n\n private createGitBackupBranchName(currentHead: string): string {\n const timestamp = new Date().toISOString().replace(/[:.]/g, '-');\n return `mastracode/plugin-backup/${timestamp}-${currentHead.slice(0, 8)}`;\n }\n\n private resolvePluginSourcePath(plugin: LoadedPlugin): string {\n const paths = getPluginScopePaths(plugin.scope, this.options);\n return path.isAbsolute(plugin.path) ? plugin.path : path.join(paths.root, plugin.path);\n }\n\n private async readGitHead(cwd: string): Promise<string> {\n const { stdout } = await execa('git', ['rev-parse', 'HEAD'], gitExecOptions(cwd));\n return stdout.trim();\n }\n\n discoverLocal(searchRoot = '.'): ReturnType<typeof discoverLocalPlugins> {\n return discoverLocalPlugins(searchRoot, this.options);\n }\n\n async installLocal(\n localPath: string,\n scope: PluginScope,\n options: Pick<InstallPluginOptions, 'entry'> = {},\n ): Promise<string> {\n const id = await installLocalPlugin(localPath, scope, { ...this.options, ...options });\n await this.reload();\n return id;\n }\n\n async installGithub(\n url: string,\n scope: PluginScope,\n options: Pick<InstallPluginOptions, 'entry' | 'ref' | 'onOutput' | 'signal'> = {},\n ): Promise<string> {\n const id = await installGithubPlugin(url, scope, { ...this.options, ...options });\n await this.reload();\n return id;\n }\n\n async setEnabled(pluginId: string, scope: PluginScope, enabled: boolean): Promise<void> {\n const paths = getPluginScopePaths(scope, this.options);\n const registry = loadPluginRegistry(paths.registryPath);\n const record = registry.plugins[pluginId];\n if (!record) {\n throw new Error(`Plugin \"${pluginId}\" is not installed in ${scope} scope`);\n }\n savePluginRegistry(paths.registryPath, setPluginRecord(registry, pluginId, { ...record, enabled }));\n await this.reload();\n }\n\n async setConfigValue(\n pluginId: string,\n scope: PluginScope,\n key: string,\n value: MastraCodePluginConfigValue,\n ): Promise<void> {\n const paths = getPluginScopePaths(scope, this.options);\n const registry = loadPluginRegistry(paths.registryPath);\n const record = registry.plugins[pluginId];\n if (!record) {\n throw new Error(`Plugin \"${pluginId}\" is not installed in ${scope} scope`);\n }\n const config = { ...(record.config ?? {}) };\n if (value === undefined || value === '') {\n delete config[key];\n } else {\n config[key] = value;\n }\n const nextRecord = { ...record, config: Object.keys(config).length > 0 ? config : undefined };\n savePluginRegistry(paths.registryPath, setPluginRecord(registry, pluginId, nextRecord));\n await this.reload();\n }\n\n async uninstall(pluginId: string, scope: PluginScope): Promise<void> {\n const paths = getPluginScopePaths(scope, this.options);\n const registry = loadPluginRegistry(paths.registryPath);\n const record = registry.plugins[pluginId];\n if (!record) {\n throw new Error(`Plugin \"${pluginId}\" is not installed in ${scope} scope`);\n }\n\n savePluginRegistry(paths.registryPath, removePluginRecord(registry, pluginId));\n if (record.source === 'github') {\n const checkoutPath = path.resolve(\n path.isAbsolute(record.path) ? record.path : path.join(paths.root, record.path),\n );\n const githubSourcesPath = path.resolve(paths.sourcesPath, 'github');\n if (isInsideDirectory(checkoutPath, githubSourcesPath)) {\n fs.rmSync(checkoutPath, { recursive: true, force: true });\n }\n }\n await this.reload();\n }\n}\n"],"mappings":"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","names":[]}
|
package/dist/schema.d.ts
CHANGED
|
@@ -11,8 +11,10 @@ export interface MastraCodeState {
|
|
|
11
11
|
subagentModelId?: string;
|
|
12
12
|
projectPath?: string;
|
|
13
13
|
projectName?: string;
|
|
14
|
-
/**
|
|
15
|
-
|
|
14
|
+
/** Factory project that owns this session. */
|
|
15
|
+
factoryProjectId?: string;
|
|
16
|
+
/** Linked repository used by this session when source-control execution is required. */
|
|
17
|
+
projectRepositoryId?: string;
|
|
16
18
|
/** Persisted sandbox id for reattaching the project's cloud workspace. */
|
|
17
19
|
sandboxId?: string;
|
|
18
20
|
/** Path inside the sandbox the repo is cloned into. */
|
|
@@ -77,7 +79,8 @@ export declare const stateSchema: z.ZodObject<{
|
|
|
77
79
|
subagentModelId: z.ZodOptional<z.ZodString>;
|
|
78
80
|
projectPath: z.ZodOptional<z.ZodString>;
|
|
79
81
|
projectName: z.ZodOptional<z.ZodString>;
|
|
80
|
-
|
|
82
|
+
factoryProjectId: z.ZodOptional<z.ZodString>;
|
|
83
|
+
projectRepositoryId: z.ZodOptional<z.ZodString>;
|
|
81
84
|
sandboxId: z.ZodOptional<z.ZodString>;
|
|
82
85
|
sandboxWorkdir: z.ZodOptional<z.ZodString>;
|
|
83
86
|
worktreePath: z.ZodOptional<z.ZodString>;
|
package/dist/schema.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;AAExD,MAAM,MAAM,sBAAsB,GAAG;IACnC,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,eAAe,GAAG,sBAAsB,CAAC;AAE/E,MAAM,WAAW,eAAe;IAC9B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,CAAC,GAAG,EAAE,mBAAmB,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAAC;IACvD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
|
package/dist/schema.js
CHANGED
|
@@ -10,7 +10,8 @@ const stateSchema = z.object({
|
|
|
10
10
|
subagentModelId: z.string().optional(),
|
|
11
11
|
projectPath: z.string().optional(),
|
|
12
12
|
projectName: z.string().optional(),
|
|
13
|
-
|
|
13
|
+
factoryProjectId: z.string().optional(),
|
|
14
|
+
projectRepositoryId: z.string().optional(),
|
|
14
15
|
sandboxId: z.string().optional(),
|
|
15
16
|
sandboxWorkdir: z.string().optional(),
|
|
16
17
|
worktreePath: z.string().optional(),
|
package/dist/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/schema.ts"],"sourcesContent":["import { z } from 'zod';\nimport { DEFAULT_CONFIG_DIR, DEFAULT_OM_MODEL_ID } from './constants.js';\n\nexport type PermissionPolicy = 'allow' | 'ask' | 'deny';\n\nexport type MastraCodeSessionState = {\n currentModelId: string;\n modeId: string;\n};\n\nexport type MastraCodeComposedState = MastraCodeState & MastraCodeSessionState;\n\nexport interface MastraCodeState {\n [key: string]: unknown;\n [key: `subagentModelId_${string}`]: string | undefined;\n subagentModelId?: string;\n projectPath?: string;\n projectName?: string;\n /**
|
|
1
|
+
{"version":3,"sources":["../src/schema.ts"],"sourcesContent":["import { z } from 'zod';\nimport { DEFAULT_CONFIG_DIR, DEFAULT_OM_MODEL_ID } from './constants.js';\n\nexport type PermissionPolicy = 'allow' | 'ask' | 'deny';\n\nexport type MastraCodeSessionState = {\n currentModelId: string;\n modeId: string;\n};\n\nexport type MastraCodeComposedState = MastraCodeState & MastraCodeSessionState;\n\nexport interface MastraCodeState {\n [key: string]: unknown;\n [key: `subagentModelId_${string}`]: string | undefined;\n subagentModelId?: string;\n projectPath?: string;\n projectName?: string;\n /** Factory project that owns this session. */\n factoryProjectId?: string;\n /** Linked repository used by this session when source-control execution is required. */\n projectRepositoryId?: string;\n /** Persisted sandbox id for reattaching the project's cloud workspace. */\n sandboxId?: string;\n /** Path inside the sandbox the repo is cloned into. */\n sandboxWorkdir?: string;\n /** Active git worktree path inside the sandbox for the current unit of work. */\n worktreePath?: string;\n /** Active feature branch checked out in the worktree. */\n branch?: string;\n configDir: string;\n homeDir?: string;\n gitBranch?: string;\n lastCommand?: string;\n observerModelId: string;\n reflectorModelId: string;\n observationThreshold: number;\n reflectionThreshold: number;\n cavemanObservations: boolean;\n observeAttachments: 'auto' | boolean;\n omScope?: 'thread' | 'resource';\n thinkingLevel: 'off' | 'low' | 'medium' | 'high' | 'xhigh';\n yolo: boolean;\n permissionRules: {\n categories: Record<string, PermissionPolicy>;\n tools: Record<string, PermissionPolicy>;\n };\n smartEditing: boolean;\n notifications: 'bell' | 'system' | 'both' | 'off';\n tasks: Array<{\n id?: string;\n content: string;\n status: 'pending' | 'in_progress' | 'completed';\n activeForm: string;\n }>;\n sandboxAllowedPaths: string[];\n pluginSkillPaths: string[];\n pluginCommandPaths: string[];\n pluginInstructions: string[];\n activePlan: {\n title: string;\n plan: string;\n approvedAt: string;\n } | null;\n activeBrowserSettings?: {\n enabled: boolean;\n provider: 'stagehand' | 'agent-browser';\n headless?: boolean;\n viewport?: {\n width: number;\n height: number;\n };\n cdpUrl?: string;\n stagehand?: {\n env: 'LOCAL' | 'BROWSERBASE';\n apiKey?: string;\n projectId?: string;\n };\n };\n}\n\nexport const stateSchema = z.object({\n // Session-scoped selection.\n // validates state against this schema, so they MUST be declared here — Zod\n // strips unknown keys on parse, which would otherwise silently discard the\n // seeded model and leave the controller with no model selected.\n currentModelId: z.string().optional(),\n modeId: z.string().optional(),\n subagentModelId: z.string().optional(),\n projectPath: z.string().optional(),\n projectName: z.string().optional(),\n factoryProjectId: z.string().optional(),\n projectRepositoryId: z.string().optional(),\n sandboxId: z.string().optional(),\n sandboxWorkdir: z.string().optional(),\n worktreePath: z.string().optional(),\n branch: z.string().optional(),\n configDir: z.string().default(DEFAULT_CONFIG_DIR),\n homeDir: z.string().optional(),\n gitBranch: z.string().optional(),\n lastCommand: z.string().optional(),\n // Observational Memory model settings\n observerModelId: z.string().default(DEFAULT_OM_MODEL_ID),\n reflectorModelId: z.string().default(DEFAULT_OM_MODEL_ID),\n // Observational Memory threshold settings\n observationThreshold: z.number().default(30_000),\n reflectionThreshold: z.number().default(40_000),\n // Whether observations and reflections use the terse caveman-style instruction.\n // Off by default — caveman style is opt-in via `/om` settings; observers and\n // reflectors fall back to their built-in (prose) behavior unless enabled.\n cavemanObservations: z.boolean().default(false),\n // Whether OM forwards image/file attachment parts to the Observer LLM.\n // 'auto' (default) checks the provider capabilities registry to decide.\n // true/false forces the setting regardless of model capabilities.\n observeAttachments: z.union([z.literal('auto'), z.boolean()]).default('auto'),\n // Observational Memory scope — 'thread' (per-conversation) or 'resource' (shared across threads)\n omScope: z.enum(['thread', 'resource']).optional(),\n // Thinking level for model reasoning effort\n thinkingLevel: z.enum(['off', 'low', 'medium', 'high', 'xhigh']).default('off'),\n // YOLO mode — auto-approve all tool calls\n yolo: z.boolean().default(false),\n // Permission rules — per-category and per-tool approval policies\n permissionRules: z\n .object({\n categories: z.record(z.string(), z.enum(['allow', 'ask', 'deny'])).default({}),\n tools: z.record(z.string(), z.enum(['allow', 'ask', 'deny'])).default({}),\n })\n .default({ categories: {}, tools: {} }),\n // Smart editing mode — use AST-based analysis for code edits\n smartEditing: z.boolean().default(true),\n // Notification mode — alert when TUI needs user attention\n notifications: z.enum(['bell', 'system', 'both', 'off']).default('off'),\n // Task list (ephemeral per-thread, cleared on thread switch/creation)\n tasks: z\n .array(\n z.object({\n id: z.string().optional(),\n content: z.string(),\n status: z.enum(['pending', 'in_progress', 'completed']),\n activeForm: z.string(),\n }),\n )\n .default([]),\n // Sandbox allowed paths (per-thread, absolute paths allowed in addition to project root)\n sandboxAllowedPaths: z.array(z.string()).default([]),\n // Asset directories contributed by active plugins.\n pluginSkillPaths: z.array(z.string()).default([]),\n pluginCommandPaths: z.array(z.string()).default([]),\n pluginInstructions: z.array(z.string()).default([]),\n // Active plan (set when a plan is approved in Plan mode)\n activePlan: z\n .object({\n title: z.string(),\n plan: z.string(),\n approvedAt: z.string(),\n })\n .nullable()\n .default(null),\n // Active browser settings (tracks what's actually running vs. what's in the settings file)\n activeBrowserSettings: z\n .object({\n enabled: z.boolean(),\n provider: z.enum(['stagehand', 'agent-browser']),\n headless: z.boolean().optional(),\n viewport: z\n .object({\n width: z.number(),\n height: z.number(),\n })\n .optional(),\n cdpUrl: z.string().optional(),\n stagehand: z\n .object({\n env: z.enum(['LOCAL', 'BROWSERBASE']),\n apiKey: z.string().optional(),\n projectId: z.string().optional(),\n })\n .optional(),\n })\n .optional(),\n});\n"],"mappings":"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","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mastra/code-sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0-alpha.14",
|
|
4
4
|
"description": "Mastra Code SDK: the agent core behind Mastra Code (everything except the TUI) — build your own UIs and surfaces on top of it",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"publishConfig": {
|
|
@@ -41,13 +41,13 @@
|
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
43
|
"@agentclientprotocol/sdk": "^0.21.0",
|
|
44
|
-
"@ai-sdk/amazon-bedrock": "^3.0.
|
|
45
|
-
"@ai-sdk/anthropic": "^3.0.
|
|
46
|
-
"@ai-sdk/openai": "^3.0.
|
|
47
|
-
"@ai-sdk/openai-compatible": "^2.0.
|
|
44
|
+
"@ai-sdk/amazon-bedrock": "^3.0.107",
|
|
45
|
+
"@ai-sdk/anthropic": "^3.0.98",
|
|
46
|
+
"@ai-sdk/openai": "^3.0.86",
|
|
47
|
+
"@ai-sdk/openai-compatible": "^2.0.62",
|
|
48
48
|
"@ast-grep/napi": "^0.42.0",
|
|
49
49
|
"@aws-sdk/credential-providers": "^3.864.0",
|
|
50
|
-
"ai": "^6.0.
|
|
50
|
+
"ai": "^6.0.230",
|
|
51
51
|
"execa": "^9.6.1",
|
|
52
52
|
"libsql": "^0.5.29",
|
|
53
53
|
"posthog-node": "^5.37.0",
|
|
@@ -57,18 +57,18 @@
|
|
|
57
57
|
"yaml": "^2.7.1",
|
|
58
58
|
"zod": "^4.3.6",
|
|
59
59
|
"@mastra/agent-browser": "0.4.1",
|
|
60
|
-
"@mastra/fastembed": "1.2.0",
|
|
61
60
|
"@mastra/duckdb": "1.5.1",
|
|
61
|
+
"@mastra/core": "1.52.0-alpha.12",
|
|
62
|
+
"@mastra/libsql": "1.17.0-alpha.3",
|
|
63
|
+
"@mastra/fastembed": "1.2.0",
|
|
62
64
|
"@mastra/github-signals": "0.2.2",
|
|
63
|
-
"@mastra/libsql": "1.17.0-alpha.1",
|
|
64
|
-
"@mastra/memory": "1.23.1-alpha.1",
|
|
65
65
|
"@mastra/mcp": "1.15.0-alpha.0",
|
|
66
|
-
"@mastra/
|
|
66
|
+
"@mastra/observability": "1.16.2-alpha.1",
|
|
67
|
+
"@mastra/pg": "1.17.0-alpha.3",
|
|
67
68
|
"@mastra/schema-compat": "1.3.4",
|
|
69
|
+
"@mastra/memory": "1.23.1-alpha.1",
|
|
68
70
|
"@mastra/stagehand": "0.3.1-alpha.0",
|
|
69
|
-
"@mastra/
|
|
70
|
-
"@mastra/tavily": "1.1.1-alpha.0",
|
|
71
|
-
"@mastra/observability": "1.16.2-alpha.0"
|
|
71
|
+
"@mastra/tavily": "1.1.1-alpha.0"
|
|
72
72
|
},
|
|
73
73
|
"devDependencies": {
|
|
74
74
|
"@libsql/client": "^0.17.4",
|
|
@@ -79,8 +79,8 @@
|
|
|
79
79
|
"typescript": "^6.0.3",
|
|
80
80
|
"typescript-eslint": "^8.57.0",
|
|
81
81
|
"vitest": "4.1.10",
|
|
82
|
-
"@internal/
|
|
83
|
-
"@internal/
|
|
82
|
+
"@internal/types-builder": "0.0.89",
|
|
83
|
+
"@internal/lint": "0.0.114"
|
|
84
84
|
},
|
|
85
85
|
"engines": {
|
|
86
86
|
"node": ">=22.19.0"
|