@agentproto/adapter-mastracode 0.2.2 → 0.2.4

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/dist/index.mjs CHANGED
@@ -22,11 +22,16 @@ var mastracode = defineAgentCli({
22
22
  auth: {
23
23
  ref: "./SECRETS.md",
24
24
  state: {
25
+ // The env names mastracode actually consults per provider. For Google it
26
+ // is GOOGLE_API_KEY, not GOOGLE_GENERATIVE_AI_API_KEY: @mastra/core's
27
+ // PROVIDER_REGISTRY.google.apiKeyEnvVar is the alias array
28
+ // ["GOOGLE_API_KEY", "GOOGLE_GENERATIVE_AI_API_KEY"], but @mastra/code-sdk
29
+ // collapses it to envVars[0] (GOOGLE_API_KEY) before the env-key check.
25
30
  env: [
26
31
  "ANTHROPIC_API_KEY",
27
32
  "OPENAI_API_KEY",
28
33
  "OPENROUTER_API_KEY",
29
- "GOOGLE_GENERATIVE_AI_API_KEY"
34
+ "GOOGLE_API_KEY"
30
35
  ]
31
36
  }
32
37
  },
@@ -50,17 +55,22 @@ var mastracode = defineAgentCli({
50
55
  // adapter's own default Claude model stays listed (repointing the default
51
56
  // is out of scope). The extra Sonnet + gateway dupe are dropped from the
52
57
  // menu; the free-form `model` option still accepts any id.
58
+ // `provider` is read straight off each id's own prefix — Mastra's model
59
+ // router resolves a bare `provider/model` string itself, no adapter mode
60
+ // needed.
53
61
  allowed: [
54
- "anthropic/claude-sonnet-4-5",
55
- "openai/gpt-5.1",
56
- "openai/gpt-5.1-mini",
57
- "google/gemini-2.5-flash"
62
+ { id: "anthropic/claude-sonnet-4-5", provider: "anthropic" },
63
+ { id: "openai/gpt-5.1", provider: "openai" },
64
+ { id: "openai/gpt-5.1-mini", provider: "openai" },
65
+ { id: "google/gemini-2.5-flash", provider: "google" }
58
66
  ],
59
67
  env: {
60
68
  anthropic: "ANTHROPIC_API_KEY",
61
69
  openai: "OPENAI_API_KEY",
62
70
  openrouter: "OPENROUTER_API_KEY",
63
- google: "GOOGLE_GENERATIVE_AI_API_KEY"
71
+ // mastracode reads GOOGLE_API_KEY for `google` (see the auth.state.env
72
+ // note above) — NOT GOOGLE_GENERATIVE_AI_API_KEY.
73
+ google: "GOOGLE_API_KEY"
64
74
  }
65
75
  },
66
76
  capabilities: {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * @agentproto/adapter-mastracode — AIP-45 adapter for Mastra Code.\n *\n * Mastra Code does not currently expose a discoverable ACP subcommand\n * (`mastracode acp --help` prints the top-level CLI help). We spawn\n * its documented headless CLI via `npx -y mastracode` and mark this\n * adapter as a print/headless protocol arm rather than claiming ACP.\n *\n * import { mastracode, mastracodeRuntime } from \"@agentproto/adapter-mastracode\"\n * const session = await mastracodeRuntime().start()\n * for await (const evt of session.send({ role: \"user\", content: \"...\" })) {\n * console.log(evt)\n * }\n * await session.close()\n */\n\nimport {\n createAgentCliRuntime,\n defineAgentCli,\n type AgentCliHandle,\n type AgentCliRuntime,\n} from \"@agentproto/driver-agent-cli\"\n\nexport const mastracode: AgentCliHandle = defineAgentCli({\n name: \"mastracode\",\n id: \"mastracode\",\n description:\n \"Mastra Code — terminal-based AI coding agent with persistent threads, tools, modes, and multi-provider model support. Current CLI exposes TUI/headless operation, not ACP; spawned via `npx -y mastracode`.\",\n version: \"0.1.0\",\n bin: \"npx\",\n bin_args: [\"-y\", \"mastracode\"],\n install: [{ method: \"npm\", package: \"mastracode\", global: true }],\n version_check: {\n cmd: \"npm view mastracode version\",\n parse: \"(\\\\d+\\\\.\\\\d+\\\\.\\\\d+)\",\n range: \">=0.26.0\",\n timeout_ms: 15_000,\n },\n auth: {\n ref: \"./SECRETS.md\",\n state: {\n env: [\n \"ANTHROPIC_API_KEY\",\n \"OPENAI_API_KEY\",\n \"OPENROUTER_API_KEY\",\n \"GOOGLE_GENERATIVE_AI_API_KEY\",\n ],\n },\n },\n sandbox: \"./SANDBOX.md\",\n protocol: \"print\",\n print: {\n prompt_flag: \"--prompt\",\n output_format: [\"--output\", \"jsonl\"],\n pre_prompt: [],\n resume: { flag: \"--thread\", kind: \"value\" },\n event_schema: \"mastra-jsonl\",\n },\n session: {\n mode: \"ephemeral\",\n idle_timeout_ms: 1_800_000,\n context_carryover: false,\n },\n models: {\n default: \"anthropic/claude-sonnet-4-5\",\n // Anthropic is no longer advertised as a pickable escalation — only the\n // adapter's own default Claude model stays listed (repointing the default\n // is out of scope). The extra Sonnet + gateway dupe are dropped from the\n // menu; the free-form `model` option still accepts any id.\n allowed: [\n \"anthropic/claude-sonnet-4-5\",\n \"openai/gpt-5.1\",\n \"openai/gpt-5.1-mini\",\n \"google/gemini-2.5-flash\",\n ],\n env: {\n anthropic: \"ANTHROPIC_API_KEY\",\n openai: \"OPENAI_API_KEY\",\n openrouter: \"OPENROUTER_API_KEY\",\n google: \"GOOGLE_GENERATIVE_AI_API_KEY\",\n },\n },\n capabilities: {\n streaming: true,\n tool_calls: true,\n sub_agents: true,\n file_io: true,\n multimodal: false,\n // `mastracode --thread <id>` reattaches to a prior thread with real\n // persisted memory (confirmed cross-process: separate spawn, same\n // thread id, correct continuity). `print.resume` below drives this.\n resumable: true,\n bidirectional: false,\n },\n modes: [\n {\n id: \"default\",\n description:\n \"Default headless mode. Mastra Code defaults to build mode when omitted.\",\n },\n {\n id: \"plan\",\n description:\n \"Plan-only mode — analyze architecture and propose implementation plans before writing code.\",\n bin_args_append: [\"--mode\", \"plan\"],\n },\n {\n id: \"build\",\n description:\n \"Build mode — file edits and shell commands use Mastra Code's configured permissions.\",\n bin_args_append: [\"--mode\", \"build\"],\n },\n {\n id: \"fast\",\n description: \"Fast mode — lower-latency answers and small edits.\",\n bin_args_append: [\"--mode\", \"fast\"],\n },\n ],\n options: [\n {\n id: \"model\",\n type: \"string\",\n description:\n \"Provider/model override for this operator binding (e.g. `anthropic/claude-sonnet-4-5`).\",\n bin_args_template: [\"--model\", \"{value}\"],\n },\n {\n id: \"thinking_level\",\n type: \"enum\",\n enum: [\"off\", \"low\", \"medium\", \"high\", \"xhigh\"],\n description: \"Thinking level passed to Mastra Code.\",\n bin_args_template: [\"--thinking-level\", \"{value}\"],\n },\n {\n id: \"timeout\",\n type: \"integer\",\n min: 1,\n max: 86_400,\n description: \"Maximum headless run duration in seconds.\",\n bin_args_template: [\"--timeout\", \"{value}\"],\n },\n ],\n continuation: {\n default: \"none\",\n supported: [\"none\", \"transcript\", \"native-resume\"],\n },\n metadata: {\n acp: {\n checked: \"2026-06-30\",\n result:\n \"`mastracode acp --help` prints top-level Mastra Code help; no ACP subcommand is currently discoverable.\",\n },\n lean: {\n checked: \"2026-07-03\",\n result:\n \"No `lean` mode declared. The headless entrypoint this adapter spawns \" +\n \"(runMCCli, driven by `--prompt`) has no flag to drop skill/subagent/OM \" +\n \"scaffolding, and does not read the MASTRACODE_DISABLE_MCP / \" +\n \"MASTRACODE_DISABLE_HOOKS / MASTRACODE_DISABLE_MEMORY env vars — those \" +\n \"are wired only into the interactive TUI entrypoint (tuiMain), so declaring \" +\n \"them here would silently do nothing. `--settings <path>` could point at a \" +\n \"leaner packaged settings.json, but that means shipping and maintaining an \" +\n \"actual settings file, not just a manifest patch — revisit if worth doing.\",\n },\n },\n tags: [\"mastracode\", \"mastra\", \"print\", \"agent-runtime\", \"coding\"],\n})\n\nexport function mastracodeRuntime(): AgentCliRuntime {\n return createAgentCliRuntime(mastracode)\n}\n\nexport type { AgentCliHandle, AgentCliRuntime }\n"]}
1
+ {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * @agentproto/adapter-mastracode — AIP-45 adapter for Mastra Code.\n *\n * Mastra Code does not currently expose a discoverable ACP subcommand\n * (`mastracode acp --help` prints the top-level CLI help). We spawn\n * its documented headless CLI via `npx -y mastracode` and mark this\n * adapter as a print/headless protocol arm rather than claiming ACP.\n *\n * import { mastracode, mastracodeRuntime } from \"@agentproto/adapter-mastracode\"\n * const session = await mastracodeRuntime().start()\n * for await (const evt of session.send({ role: \"user\", content: \"...\" })) {\n * console.log(evt)\n * }\n * await session.close()\n */\n\nimport {\n createAgentCliRuntime,\n defineAgentCli,\n type AgentCliHandle,\n type AgentCliRuntime,\n} from \"@agentproto/driver-agent-cli\"\n\nexport const mastracode: AgentCliHandle = defineAgentCli({\n name: \"mastracode\",\n id: \"mastracode\",\n description:\n \"Mastra Code — terminal-based AI coding agent with persistent threads, tools, modes, and multi-provider model support. Current CLI exposes TUI/headless operation, not ACP; spawned via `npx -y mastracode`.\",\n version: \"0.1.0\",\n bin: \"npx\",\n bin_args: [\"-y\", \"mastracode\"],\n install: [{ method: \"npm\", package: \"mastracode\", global: true }],\n version_check: {\n cmd: \"npm view mastracode version\",\n parse: \"(\\\\d+\\\\.\\\\d+\\\\.\\\\d+)\",\n range: \">=0.26.0\",\n timeout_ms: 15_000,\n },\n auth: {\n ref: \"./SECRETS.md\",\n state: {\n // The env names mastracode actually consults per provider. For Google it\n // is GOOGLE_API_KEY, not GOOGLE_GENERATIVE_AI_API_KEY: @mastra/core's\n // PROVIDER_REGISTRY.google.apiKeyEnvVar is the alias array\n // [\"GOOGLE_API_KEY\", \"GOOGLE_GENERATIVE_AI_API_KEY\"], but @mastra/code-sdk\n // collapses it to envVars[0] (GOOGLE_API_KEY) before the env-key check.\n env: [\n \"ANTHROPIC_API_KEY\",\n \"OPENAI_API_KEY\",\n \"OPENROUTER_API_KEY\",\n \"GOOGLE_API_KEY\",\n ],\n },\n },\n sandbox: \"./SANDBOX.md\",\n protocol: \"print\",\n print: {\n prompt_flag: \"--prompt\",\n output_format: [\"--output\", \"jsonl\"],\n pre_prompt: [],\n resume: { flag: \"--thread\", kind: \"value\" },\n event_schema: \"mastra-jsonl\",\n },\n session: {\n mode: \"ephemeral\",\n idle_timeout_ms: 1_800_000,\n context_carryover: false,\n },\n models: {\n default: \"anthropic/claude-sonnet-4-5\",\n // Anthropic is no longer advertised as a pickable escalation — only the\n // adapter's own default Claude model stays listed (repointing the default\n // is out of scope). The extra Sonnet + gateway dupe are dropped from the\n // menu; the free-form `model` option still accepts any id.\n // `provider` is read straight off each id's own prefix — Mastra's model\n // router resolves a bare `provider/model` string itself, no adapter mode\n // needed.\n allowed: [\n { id: \"anthropic/claude-sonnet-4-5\", provider: \"anthropic\" },\n { id: \"openai/gpt-5.1\", provider: \"openai\" },\n { id: \"openai/gpt-5.1-mini\", provider: \"openai\" },\n { id: \"google/gemini-2.5-flash\", provider: \"google\" },\n ],\n env: {\n anthropic: \"ANTHROPIC_API_KEY\",\n openai: \"OPENAI_API_KEY\",\n openrouter: \"OPENROUTER_API_KEY\",\n // mastracode reads GOOGLE_API_KEY for `google` (see the auth.state.env\n // note above) — NOT GOOGLE_GENERATIVE_AI_API_KEY.\n google: \"GOOGLE_API_KEY\",\n },\n },\n capabilities: {\n streaming: true,\n tool_calls: true,\n sub_agents: true,\n file_io: true,\n multimodal: false,\n // `mastracode --thread <id>` reattaches to a prior thread with real\n // persisted memory (confirmed cross-process: separate spawn, same\n // thread id, correct continuity). `print.resume` below drives this.\n resumable: true,\n bidirectional: false,\n },\n modes: [\n {\n id: \"default\",\n description:\n \"Default headless mode. Mastra Code defaults to build mode when omitted.\",\n },\n {\n id: \"plan\",\n description:\n \"Plan-only mode — analyze architecture and propose implementation plans before writing code.\",\n bin_args_append: [\"--mode\", \"plan\"],\n },\n {\n id: \"build\",\n description:\n \"Build mode — file edits and shell commands use Mastra Code's configured permissions.\",\n bin_args_append: [\"--mode\", \"build\"],\n },\n {\n id: \"fast\",\n description: \"Fast mode — lower-latency answers and small edits.\",\n bin_args_append: [\"--mode\", \"fast\"],\n },\n ],\n options: [\n {\n id: \"model\",\n type: \"string\",\n description:\n \"Provider/model override for this operator binding (e.g. `anthropic/claude-sonnet-4-5`).\",\n bin_args_template: [\"--model\", \"{value}\"],\n },\n {\n id: \"thinking_level\",\n type: \"enum\",\n enum: [\"off\", \"low\", \"medium\", \"high\", \"xhigh\"],\n description: \"Thinking level passed to Mastra Code.\",\n bin_args_template: [\"--thinking-level\", \"{value}\"],\n },\n {\n id: \"timeout\",\n type: \"integer\",\n min: 1,\n max: 86_400,\n description: \"Maximum headless run duration in seconds.\",\n bin_args_template: [\"--timeout\", \"{value}\"],\n },\n ],\n continuation: {\n default: \"none\",\n supported: [\"none\", \"transcript\", \"native-resume\"],\n },\n metadata: {\n acp: {\n checked: \"2026-06-30\",\n result:\n \"`mastracode acp --help` prints top-level Mastra Code help; no ACP subcommand is currently discoverable.\",\n },\n lean: {\n checked: \"2026-07-03\",\n result:\n \"No `lean` mode declared. The headless entrypoint this adapter spawns \" +\n \"(runMCCli, driven by `--prompt`) has no flag to drop skill/subagent/OM \" +\n \"scaffolding, and does not read the MASTRACODE_DISABLE_MCP / \" +\n \"MASTRACODE_DISABLE_HOOKS / MASTRACODE_DISABLE_MEMORY env vars — those \" +\n \"are wired only into the interactive TUI entrypoint (tuiMain), so declaring \" +\n \"them here would silently do nothing. `--settings <path>` could point at a \" +\n \"leaner packaged settings.json, but that means shipping and maintaining an \" +\n \"actual settings file, not just a manifest patch — revisit if worth doing.\",\n },\n },\n tags: [\"mastracode\", \"mastra\", \"print\", \"agent-runtime\", \"coding\"],\n})\n\nexport function mastracodeRuntime(): AgentCliRuntime {\n return createAgentCliRuntime(mastracode)\n}\n\nexport type { AgentCliHandle, AgentCliRuntime }\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentproto/adapter-mastracode",
3
- "version": "0.2.2",
3
+ "version": "0.2.4",
4
4
  "description": "@agentproto/adapter-mastracode — AIP-45 AGENT-CLI adapter for Mastra Code. Spawns the documented headless CLI via `npx -y mastracode`; current Mastra Code does not expose a discoverable ACP subcommand.",
5
5
  "keywords": [
6
6
  "agentproto",
@@ -41,7 +41,7 @@
41
41
  "access": "public"
42
42
  },
43
43
  "dependencies": {
44
- "@agentproto/driver-agent-cli": "1.0.0"
44
+ "@agentproto/driver-agent-cli": "1.2.0"
45
45
  },
46
46
  "devDependencies": {
47
47
  "@types/node": "^25.6.2",