mastracode 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/CHANGELOG.md +132 -0
  2. package/README.md +60 -12
  3. package/dist/agents/instructions.d.ts.map +1 -1
  4. package/dist/agents/model.d.ts +4 -1
  5. package/dist/agents/model.d.ts.map +1 -1
  6. package/dist/auth/claude-max-warning.d.ts +9 -0
  7. package/dist/auth/claude-max-warning.d.ts.map +1 -0
  8. package/dist/{chunk-7TFV3VBB.cjs → chunk-C4X3C2DL.cjs} +1091 -607
  9. package/dist/chunk-C4X3C2DL.cjs.map +1 -0
  10. package/dist/{chunk-7K5VFY2N.cjs → chunk-K4WJUBEC.cjs} +151 -48
  11. package/dist/chunk-K4WJUBEC.cjs.map +1 -0
  12. package/dist/{chunk-HHX6BKLR.js → chunk-M5LKPQB4.js} +12 -11
  13. package/dist/chunk-M5LKPQB4.js.map +1 -0
  14. package/dist/{chunk-V4HZ2AVV.js → chunk-REVOTI2T.js} +143 -38
  15. package/dist/chunk-REVOTI2T.js.map +1 -0
  16. package/dist/{chunk-C6XKRHRK.cjs → chunk-S5ZLN7DR.cjs} +6 -2
  17. package/dist/chunk-S5ZLN7DR.cjs.map +1 -0
  18. package/dist/{chunk-VRZZSUQE.js → chunk-SM3QCOA7.js} +6 -3
  19. package/dist/chunk-SM3QCOA7.js.map +1 -0
  20. package/dist/{chunk-LYETHS2L.js → chunk-X3BGE7CL.js} +877 -394
  21. package/dist/chunk-X3BGE7CL.js.map +1 -0
  22. package/dist/{chunk-VZFPT5N7.cjs → chunk-Z4QRXVST.cjs} +62 -61
  23. package/dist/chunk-Z4QRXVST.cjs.map +1 -0
  24. package/dist/cli.cjs +20 -10
  25. package/dist/cli.cjs.map +1 -1
  26. package/dist/cli.js +14 -4
  27. package/dist/cli.js.map +1 -1
  28. package/dist/docs/SKILL.md +30 -0
  29. package/dist/docs/assets/SOURCE_MAP.json +11 -0
  30. package/dist/docs/references/docs-mastra-code-configuration.md +299 -0
  31. package/dist/docs/references/docs-mastra-code-customization.md +228 -0
  32. package/dist/docs/references/docs-mastra-code-modes.md +104 -0
  33. package/dist/docs/references/docs-mastra-code-overview.md +135 -0
  34. package/dist/docs/references/docs-mastra-code-tools.md +229 -0
  35. package/dist/docs/references/reference-mastra-code-createMastraCode.md +108 -0
  36. package/dist/index.cjs +2 -2
  37. package/dist/index.js +1 -1
  38. package/dist/onboarding/onboarding-inline.d.ts +5 -0
  39. package/dist/onboarding/onboarding-inline.d.ts.map +1 -1
  40. package/dist/onboarding/settings.d.ts +3 -0
  41. package/dist/onboarding/settings.d.ts.map +1 -1
  42. package/dist/providers/openai-codex.d.ts +5 -1
  43. package/dist/providers/openai-codex.d.ts.map +1 -1
  44. package/dist/schema.d.ts +7 -1
  45. package/dist/schema.d.ts.map +1 -1
  46. package/dist/storage-PO4VN5NF.cjs +24 -0
  47. package/dist/{storage-JFFX7LJJ.cjs.map → storage-PO4VN5NF.cjs.map} +1 -1
  48. package/dist/storage-PQOHJLBI.js +3 -0
  49. package/dist/{storage-52Y5MKTG.js.map → storage-PQOHJLBI.js.map} +1 -1
  50. package/dist/tui/claude-max-warning.d.ts +18 -0
  51. package/dist/tui/claude-max-warning.d.ts.map +1 -0
  52. package/dist/tui/command-dispatch.d.ts.map +1 -1
  53. package/dist/tui/commands/index.d.ts +1 -0
  54. package/dist/tui/commands/index.d.ts.map +1 -1
  55. package/dist/tui/commands/login.d.ts.map +1 -1
  56. package/dist/tui/commands/models-pack.d.ts.map +1 -1
  57. package/dist/tui/commands/settings.d.ts.map +1 -1
  58. package/dist/tui/commands/skills.d.ts.map +1 -1
  59. package/dist/tui/commands/theme.d.ts +6 -0
  60. package/dist/tui/commands/theme.d.ts.map +1 -0
  61. package/dist/tui/commands/think.d.ts +1 -1
  62. package/dist/tui/commands/think.d.ts.map +1 -1
  63. package/dist/tui/components/banner.d.ts.map +1 -1
  64. package/dist/tui/components/diff-output.d.ts.map +1 -1
  65. package/dist/tui/components/help-overlay.d.ts.map +1 -1
  66. package/dist/tui/components/obi-loader.d.ts.map +1 -1
  67. package/dist/tui/components/settings.d.ts +1 -0
  68. package/dist/tui/components/settings.d.ts.map +1 -1
  69. package/dist/tui/components/shell-output.d.ts.map +1 -1
  70. package/dist/tui/components/task-progress.d.ts.map +1 -1
  71. package/dist/tui/components/thinking-settings.d.ts +11 -22
  72. package/dist/tui/components/thinking-settings.d.ts.map +1 -1
  73. package/dist/tui/components/tool-execution-enhanced.d.ts.map +1 -1
  74. package/dist/tui/detect-theme.d.ts +17 -0
  75. package/dist/tui/detect-theme.d.ts.map +1 -0
  76. package/dist/tui/event-dispatch.d.ts.map +1 -1
  77. package/dist/tui/handlers/agent-lifecycle.d.ts.map +1 -1
  78. package/dist/tui/index.d.ts +2 -2
  79. package/dist/tui/index.d.ts.map +1 -1
  80. package/dist/tui/mastra-tui.d.ts +8 -0
  81. package/dist/tui/mastra-tui.d.ts.map +1 -1
  82. package/dist/tui/render-messages.d.ts.map +1 -1
  83. package/dist/tui/setup.d.ts.map +1 -1
  84. package/dist/tui/status-line.d.ts.map +1 -1
  85. package/dist/tui/theme.d.ts +33 -20
  86. package/dist/tui/theme.d.ts.map +1 -1
  87. package/dist/tui.cjs +27 -19
  88. package/dist/tui.js +2 -2
  89. package/dist/utils/project.d.ts +5 -0
  90. package/dist/utils/project.d.ts.map +1 -1
  91. package/dist/utils/slash-command-processor.d.ts.map +1 -1
  92. package/package.json +8 -8
  93. package/dist/chunk-7K5VFY2N.cjs.map +0 -1
  94. package/dist/chunk-7TFV3VBB.cjs.map +0 -1
  95. package/dist/chunk-C6XKRHRK.cjs.map +0 -1
  96. package/dist/chunk-HHX6BKLR.js.map +0 -1
  97. package/dist/chunk-LYETHS2L.js.map +0 -1
  98. package/dist/chunk-V4HZ2AVV.js.map +0 -1
  99. package/dist/chunk-VRZZSUQE.js.map +0 -1
  100. package/dist/chunk-VZFPT5N7.cjs.map +0 -1
  101. package/dist/storage-52Y5MKTG.js +0 -3
  102. package/dist/storage-JFFX7LJJ.cjs +0 -24
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var chunk7K5VFY2N_cjs = require('./chunk-7K5VFY2N.cjs');
4
- var chunkC6XKRHRK_cjs = require('./chunk-C6XKRHRK.cjs');
3
+ var chunkK4WJUBEC_cjs = require('./chunk-K4WJUBEC.cjs');
4
+ var chunkS5ZLN7DR_cjs = require('./chunk-S5ZLN7DR.cjs');
5
5
  var chunkMT3YCFCC_cjs = require('./chunk-MT3YCFCC.cjs');
6
6
  var core = require('@mastra/core');
7
7
  var agent = require('@mastra/core/agent');
@@ -443,7 +443,7 @@ var modePrompts = {
443
443
  };
444
444
  function buildFullPrompt(ctx) {
445
445
  const modelId = ctx.state?.currentModelId;
446
- const hasWebSearch = chunk7K5VFY2N_cjs.hasTavilyKey() || !!modelId && modelId.startsWith("anthropic/");
446
+ const hasWebSearch = chunkK4WJUBEC_cjs.hasTavilyKey() || !!modelId && modelId.startsWith("anthropic/");
447
447
  const toolGuidance = buildToolGuidance(ctx.modeId, { hasWebSearch });
448
448
  const baseCtx = {
449
449
  projectPath: ctx.workingDir,
@@ -481,10 +481,11 @@ function getDynamicInstructions({ requestContext }) {
481
481
  const harnessContext = requestContext.get("harness");
482
482
  const state = harnessContext?.state;
483
483
  const modeId = harnessContext?.modeId ?? "build";
484
+ const projectPath = state?.projectPath ?? process.cwd();
484
485
  const promptCtx = {
485
- projectPath: state?.projectPath ?? process.cwd(),
486
+ projectPath,
486
487
  projectName: state?.projectName ?? "",
487
- gitBranch: state?.gitBranch,
488
+ gitBranch: chunkS5ZLN7DR_cjs.getCurrentGitBranch(projectPath) ?? state?.gitBranch,
488
489
  platform: process.platform,
489
490
  date: (/* @__PURE__ */ new Date()).toISOString().split("T")[0],
490
491
  mode: modeId,
@@ -511,16 +512,16 @@ function getHarnessState(requestContext) {
511
512
  }
512
513
  function getObserverModel({ requestContext }) {
513
514
  const state = getHarnessState(requestContext);
514
- return chunk7K5VFY2N_cjs.resolveModel(state?.observerModelId ?? DEFAULT_OM_MODEL_ID);
515
+ return chunkK4WJUBEC_cjs.resolveModel(state?.observerModelId ?? DEFAULT_OM_MODEL_ID);
515
516
  }
516
517
  function getReflectorModel({ requestContext }) {
517
518
  const state = getHarnessState(requestContext);
518
- return chunk7K5VFY2N_cjs.resolveModel(state?.reflectorModelId ?? DEFAULT_OM_MODEL_ID);
519
+ return chunkK4WJUBEC_cjs.resolveModel(state?.reflectorModelId ?? DEFAULT_OM_MODEL_ID);
519
520
  }
520
521
  function getDynamicMemory(storage) {
521
522
  return ({ requestContext }) => {
522
523
  const state = getHarnessState(requestContext);
523
- const omScope = chunkC6XKRHRK_cjs.getOmScope(state?.projectPath);
524
+ const omScope = chunkS5ZLN7DR_cjs.getOmScope(state?.projectPath);
524
525
  const obsThreshold = state?.observationThreshold ?? DEFAULT_OBS_THRESHOLD;
525
526
  const refThreshold = state?.reflectionThreshold ?? DEFAULT_REF_THRESHOLD;
526
527
  const cacheKey = `${obsThreshold}:${refThreshold}:${omScope}`;
@@ -534,11 +535,11 @@ function getDynamicMemory(storage) {
534
535
  enabled: true,
535
536
  scope: omScope,
536
537
  observation: {
537
- bufferTokens: 1 / 10,
538
- bufferActivation: 4e3,
538
+ bufferTokens: 1 / 5,
539
+ bufferActivation: 2e3,
539
540
  model: getObserverModel,
540
541
  messageTokens: obsThreshold,
541
- blockAfter: 1.2,
542
+ blockAfter: 2,
542
543
  modelSettings: {
543
544
  maxOutputTokens: 6e4
544
545
  }
@@ -567,26 +568,26 @@ function createDynamicTools(mcpManager) {
567
568
  const modelId = state?.currentModelId;
568
569
  const isAnthropicModel = modelId?.startsWith("anthropic/");
569
570
  const projectPath = state?.projectPath ?? "";
570
- const viewTool = chunk7K5VFY2N_cjs.createViewTool(projectPath);
571
- const grepTool = chunk7K5VFY2N_cjs.createGrepTool(projectPath);
572
- const globTool = chunk7K5VFY2N_cjs.createGlobTool(projectPath);
573
- const executeCommandTool = chunk7K5VFY2N_cjs.createExecuteCommandTool(projectPath);
574
- const writeFileTool = chunk7K5VFY2N_cjs.createWriteFileTool(projectPath);
571
+ const viewTool = chunkK4WJUBEC_cjs.createViewTool(projectPath);
572
+ const grepTool = chunkK4WJUBEC_cjs.createGrepTool(projectPath);
573
+ const globTool = chunkK4WJUBEC_cjs.createGlobTool(projectPath);
574
+ const executeCommandTool = chunkK4WJUBEC_cjs.createExecuteCommandTool(projectPath);
575
+ const writeFileTool = chunkK4WJUBEC_cjs.createWriteFileTool(projectPath);
575
576
  const tools = {
576
577
  view: viewTool,
577
578
  search_content: grepTool,
578
579
  find_files: globTool,
579
580
  execute_command: executeCommandTool,
580
- request_sandbox_access: chunk7K5VFY2N_cjs.requestSandboxAccessTool
581
+ request_sandbox_access: chunkK4WJUBEC_cjs.requestSandboxAccessTool
581
582
  };
582
583
  if (modeId !== "plan") {
583
- tools.string_replace_lsp = chunk7K5VFY2N_cjs.stringReplaceLspTool;
584
- tools.ast_smart_edit = chunk7K5VFY2N_cjs.astSmartEditTool;
584
+ tools.string_replace_lsp = chunkK4WJUBEC_cjs.stringReplaceLspTool;
585
+ tools.ast_smart_edit = chunkK4WJUBEC_cjs.astSmartEditTool;
585
586
  tools.write_file = writeFileTool;
586
587
  }
587
- if (chunk7K5VFY2N_cjs.hasTavilyKey()) {
588
- tools.web_search = chunk7K5VFY2N_cjs.createWebSearchTool();
589
- tools.web_extract = chunk7K5VFY2N_cjs.createWebExtractTool();
588
+ if (chunkK4WJUBEC_cjs.hasTavilyKey()) {
589
+ tools.web_search = chunkK4WJUBEC_cjs.createWebSearchTool();
590
+ tools.web_extract = chunkK4WJUBEC_cjs.createWebExtractTool();
590
591
  } else if (isAnthropicModel) {
591
592
  const anthropic$1 = anthropic.createAnthropic({});
592
593
  tools.web_search = anthropic$1.tools.webSearch_20250305();
@@ -1172,8 +1173,8 @@ var stateSchema = zod.z.object({
1172
1173
  // Observational Memory threshold settings
1173
1174
  observationThreshold: zod.z.number().default(3e4),
1174
1175
  reflectionThreshold: zod.z.number().default(4e4),
1175
- // Thinking level for extended thinking (Anthropic models)
1176
- thinkingLevel: zod.z.string().default("off"),
1176
+ // Thinking level for model reasoning effort
1177
+ thinkingLevel: zod.z.enum(["off", "low", "medium", "high", "xhigh"]).default("off"),
1177
1178
  // YOLO mode — auto-approve all tool calls
1178
1179
  yolo: zod.z.boolean().default(false),
1179
1180
  // Permission rules — per-category and per-tool approval policies
@@ -1336,7 +1337,7 @@ async function syncGateways(force = false) {
1336
1337
  function createFallbackLibSQL() {
1337
1338
  return new libsql.LibSQLStore({
1338
1339
  id: "mastra-code-storage",
1339
- url: `file:${chunkC6XKRHRK_cjs.getDatabasePath()}`
1340
+ url: `file:${chunkS5ZLN7DR_cjs.getDatabasePath()}`
1340
1341
  });
1341
1342
  }
1342
1343
  async function createStorage(config) {
@@ -1397,17 +1398,17 @@ var PROVIDER_TO_OAUTH_ID = {
1397
1398
  };
1398
1399
  async function createMastraCode(config) {
1399
1400
  const cwd = config?.cwd ?? process.cwd();
1400
- const authStorage = new chunkC6XKRHRK_cjs.AuthStorage();
1401
- chunk7K5VFY2N_cjs.setAuthStorage(authStorage);
1402
- chunk7K5VFY2N_cjs.setAuthStorage2(authStorage);
1403
- const project = chunkC6XKRHRK_cjs.detectProject(cwd);
1404
- const resourceIdOverride = chunkC6XKRHRK_cjs.getResourceIdOverride(project.rootPath);
1401
+ const authStorage = new chunkS5ZLN7DR_cjs.AuthStorage();
1402
+ chunkK4WJUBEC_cjs.setAuthStorage(authStorage);
1403
+ chunkK4WJUBEC_cjs.setAuthStorage2(authStorage);
1404
+ const project = chunkS5ZLN7DR_cjs.detectProject(cwd);
1405
+ const resourceIdOverride = chunkS5ZLN7DR_cjs.getResourceIdOverride(project.rootPath);
1405
1406
  if (resourceIdOverride) {
1406
1407
  project.resourceId = resourceIdOverride;
1407
1408
  project.resourceIdOverride = true;
1408
1409
  }
1409
- const globalSettings = chunk7K5VFY2N_cjs.loadSettings();
1410
- const storageConfig = config?.storage ?? chunkC6XKRHRK_cjs.getStorageConfig(project.rootPath, globalSettings.storage);
1410
+ const globalSettings = chunkK4WJUBEC_cjs.loadSettings();
1411
+ const storageConfig = config?.storage ?? chunkS5ZLN7DR_cjs.getStorageConfig(project.rootPath, globalSettings.storage);
1411
1412
  const storageResult = await createStorage(storageConfig);
1412
1413
  const storage = storageResult.storage;
1413
1414
  const storageWarning = storageResult.warning;
@@ -1417,7 +1418,7 @@ async function createMastraCode(config) {
1417
1418
  id: "code-agent",
1418
1419
  name: "Code Agent",
1419
1420
  instructions: getDynamicInstructions,
1420
- model: chunk7K5VFY2N_cjs.getDynamicModel,
1421
+ model: chunkK4WJUBEC_cjs.getDynamicModel,
1421
1422
  tools: createDynamicTools(mcpManager)
1422
1423
  });
1423
1424
  const mastraInstance = new core.Mastra({
@@ -1432,11 +1433,11 @@ async function createMastraCode(config) {
1432
1433
  const hookCount = Object.values(hookConfig).reduce((sum, hooks) => sum + (hooks?.length ?? 0), 0);
1433
1434
  console.info(`Hooks: ${hookCount} hook(s) configured`);
1434
1435
  }
1435
- const viewTool = chunk7K5VFY2N_cjs.createViewTool(project.rootPath);
1436
- const grepTool = chunk7K5VFY2N_cjs.createGrepTool(project.rootPath);
1437
- const globTool = chunk7K5VFY2N_cjs.createGlobTool(project.rootPath);
1438
- const executeCommandTool = chunk7K5VFY2N_cjs.createExecuteCommandTool(project.rootPath);
1439
- const writeFileTool = chunk7K5VFY2N_cjs.createWriteFileTool(project.rootPath);
1436
+ const viewTool = chunkK4WJUBEC_cjs.createViewTool(project.rootPath);
1437
+ const grepTool = chunkK4WJUBEC_cjs.createGrepTool(project.rootPath);
1438
+ const globTool = chunkK4WJUBEC_cjs.createGlobTool(project.rootPath);
1439
+ const executeCommandTool = chunkK4WJUBEC_cjs.createExecuteCommandTool(project.rootPath);
1440
+ const writeFileTool = chunkK4WJUBEC_cjs.createWriteFileTool(project.rootPath);
1440
1441
  const readOnlyTools = {
1441
1442
  view: viewTool,
1442
1443
  search_content: grepTool,
@@ -1444,27 +1445,27 @@ async function createMastraCode(config) {
1444
1445
  };
1445
1446
  const defaultSubagents = [
1446
1447
  {
1447
- id: chunk7K5VFY2N_cjs.exploreSubagent.id,
1448
- name: chunk7K5VFY2N_cjs.exploreSubagent.name,
1448
+ id: chunkK4WJUBEC_cjs.exploreSubagent.id,
1449
+ name: chunkK4WJUBEC_cjs.exploreSubagent.name,
1449
1450
  description: "Read-only codebase exploration. Use for questions like 'find all usages of X', 'how does module Y work'.",
1450
- instructions: chunk7K5VFY2N_cjs.exploreSubagent.instructions,
1451
+ instructions: chunkK4WJUBEC_cjs.exploreSubagent.instructions,
1451
1452
  tools: readOnlyTools
1452
1453
  },
1453
1454
  {
1454
- id: chunk7K5VFY2N_cjs.planSubagent.id,
1455
- name: chunk7K5VFY2N_cjs.planSubagent.name,
1455
+ id: chunkK4WJUBEC_cjs.planSubagent.id,
1456
+ name: chunkK4WJUBEC_cjs.planSubagent.name,
1456
1457
  description: "Read-only analysis and planning. Use for 'create an implementation plan for X', 'analyze the architecture of Y'.",
1457
- instructions: chunk7K5VFY2N_cjs.planSubagent.instructions,
1458
+ instructions: chunkK4WJUBEC_cjs.planSubagent.instructions,
1458
1459
  tools: readOnlyTools
1459
1460
  },
1460
1461
  {
1461
- id: chunk7K5VFY2N_cjs.executeSubagent.id,
1462
- name: chunk7K5VFY2N_cjs.executeSubagent.name,
1462
+ id: chunkK4WJUBEC_cjs.executeSubagent.id,
1463
+ name: chunkK4WJUBEC_cjs.executeSubagent.name,
1463
1464
  description: "Task execution with write capabilities. Use for 'implement feature X', 'fix bug Y', 'refactor module Z'.",
1464
- instructions: chunk7K5VFY2N_cjs.executeSubagent.instructions,
1465
+ instructions: chunkK4WJUBEC_cjs.executeSubagent.instructions,
1465
1466
  tools: {
1466
1467
  ...readOnlyTools,
1467
- string_replace_lsp: chunk7K5VFY2N_cjs.stringReplaceLspTool,
1468
+ string_replace_lsp: chunkK4WJUBEC_cjs.stringReplaceLspTool,
1468
1469
  write_file: writeFileTool,
1469
1470
  execute_command: executeCommandTool,
1470
1471
  task_write: harness.taskWriteTool,
@@ -1478,21 +1479,21 @@ async function createMastraCode(config) {
1478
1479
  name: "Build",
1479
1480
  default: true,
1480
1481
  defaultModelId: "anthropic/claude-opus-4-6",
1481
- color: chunk7K5VFY2N_cjs.mastra.purple,
1482
+ color: chunkK4WJUBEC_cjs.mastra.purple,
1482
1483
  agent: codeAgent
1483
1484
  },
1484
1485
  {
1485
1486
  id: "plan",
1486
1487
  name: "Plan",
1487
1488
  defaultModelId: "openai/gpt-5.2-codex",
1488
- color: chunk7K5VFY2N_cjs.mastra.blue,
1489
+ color: chunkK4WJUBEC_cjs.mastra.blue,
1489
1490
  agent: codeAgent
1490
1491
  },
1491
1492
  {
1492
1493
  id: "fast",
1493
1494
  name: "Fast",
1494
1495
  defaultModelId: "cerebras/zai-glm-4.7",
1495
- color: chunk7K5VFY2N_cjs.mastra.green,
1496
+ color: chunkK4WJUBEC_cjs.mastra.green,
1496
1497
  agent: codeAgent
1497
1498
  }
1498
1499
  ];
@@ -1510,10 +1511,10 @@ async function createMastraCode(config) {
1510
1511
  google: process.env.GOOGLE_GENERATIVE_AI_API_KEY ? "apikey" : false,
1511
1512
  deepseek: process.env.DEEPSEEK_API_KEY ? "apikey" : false
1512
1513
  };
1513
- const builtinPacks = chunk7K5VFY2N_cjs.getAvailableModePacks(startupAccess);
1514
- const builtinOmPacks = chunk7K5VFY2N_cjs.getAvailableOmPacks(startupAccess);
1515
- const effectiveDefaults = chunk7K5VFY2N_cjs.resolveModelDefaults(globalSettings, builtinPacks);
1516
- const effectiveOmModel = chunk7K5VFY2N_cjs.resolveOmModel(globalSettings, builtinOmPacks);
1514
+ const builtinPacks = chunkK4WJUBEC_cjs.getAvailableModePacks(startupAccess);
1515
+ const builtinOmPacks = chunkK4WJUBEC_cjs.getAvailableOmPacks(startupAccess);
1516
+ const effectiveDefaults = chunkK4WJUBEC_cjs.resolveModelDefaults(globalSettings, builtinPacks);
1517
+ const effectiveOmModel = chunkK4WJUBEC_cjs.resolveOmModel(globalSettings, builtinOmPacks);
1517
1518
  const modes = (config?.modes ?? defaultModes).map((mode) => {
1518
1519
  const savedModel = effectiveDefaults[mode.id];
1519
1520
  return savedModel ? { ...mode, defaultModelId: savedModel } : mode;
@@ -1546,7 +1547,7 @@ async function createMastraCode(config) {
1546
1547
  memory,
1547
1548
  stateSchema,
1548
1549
  subagents,
1549
- resolveModel: chunk7K5VFY2N_cjs.resolveModel,
1550
+ resolveModel: chunkK4WJUBEC_cjs.resolveModel,
1550
1551
  toolCategoryResolver: chunkMT3YCFCC_cjs.getToolCategory,
1551
1552
  initialState: {
1552
1553
  projectPath: project.rootPath,
@@ -1566,10 +1567,10 @@ async function createMastraCode(config) {
1566
1567
  }
1567
1568
  return void 0;
1568
1569
  },
1569
- modelUseCountProvider: () => chunk7K5VFY2N_cjs.loadSettings().modelUseCounts,
1570
+ modelUseCountProvider: () => chunkK4WJUBEC_cjs.loadSettings().modelUseCounts,
1570
1571
  threadLock: {
1571
- acquire: chunk7K5VFY2N_cjs.acquireThreadLock,
1572
- release: chunk7K5VFY2N_cjs.releaseThreadLock
1572
+ acquire: chunkK4WJUBEC_cjs.acquireThreadLock,
1573
+ release: chunkK4WJUBEC_cjs.releaseThreadLock
1573
1574
  }
1574
1575
  });
1575
1576
  if (hookManager) {
@@ -1585,5 +1586,5 @@ async function createMastraCode(config) {
1585
1586
  }
1586
1587
 
1587
1588
  exports.createMastraCode = createMastraCode;
1588
- //# sourceMappingURL=chunk-VZFPT5N7.cjs.map
1589
- //# sourceMappingURL=chunk-VZFPT5N7.cjs.map
1589
+ //# sourceMappingURL=chunk-Z4QRXVST.cjs.map
1590
+ //# sourceMappingURL=chunk-Z4QRXVST.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/agents/prompts/base.ts","../src/agents/prompts/build.ts","../src/agents/prompts/plan.ts","../src/agents/prompts/fast.ts","../src/agents/prompts/agent-instructions.ts","../src/agents/prompts/tool-guidance.ts","../src/agents/prompts/index.ts","../src/agents/instructions.ts","../src/constants.ts","../src/agents/memory.ts","../src/agents/tools.ts","../src/agents/workspace.ts","../src/hooks/config.ts","../src/hooks/types.ts","../src/hooks/executor.ts","../src/hooks/manager.ts","../src/mcp/config.ts","../src/mcp/manager.ts","../src/schema.ts","../src/utils/gateway-sync.ts","../src/utils/storage-factory.ts","../src/index.ts"],"names":["join","existsSync","homedir","readFileSync","hasTavilyKey","getCurrentGitBranch","resolveModel","getOmScope","Memory","createViewTool","createGrepTool","createGlobTool","createExecuteCommandTool","createWriteFileTool","requestSandboxAccessTool","stringReplaceLspTool","astSmartEditTool","createWebSearchTool","createWebExtractTool","anthropic","createAnthropic","path","os","fs","workspace","Workspace","LocalFilesystem","LocalSandbox","path2","os2","fs2","spawn","loadSingleConfig","mergeConfigs","path3","os3","fs3","validateConfig","MCPClient","z","ModelsDevGateway","NetlifyGateway","LibSQLStore","getDatabasePath","PostgresStore","AuthStorage","setAuthStorage","detectProject","getResourceIdOverride","loadSettings","getStorageConfig","Agent","getDynamicModel","Mastra","noopLogger","exploreSubagent","planSubagent","executeSubagent","taskWriteTool","taskCheckTool","mastra","getAvailableModePacks","getAvailableOmPacks","resolveModelDefaults","resolveOmModel","harness","Harness","getToolCategory","acquireThreadLock","releaseThreadLock"],"mappings":"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","file":"chunk-Z4QRXVST.cjs","sourcesContent":["/**\n * Base system prompt — shared behavioral instructions for all modes.\n * This is the \"brain\" that makes the agent a good coding assistant.\n */\n\nexport interface PromptContext {\n projectPath: string;\n projectName: string;\n gitBranch?: string;\n platform: string;\n date: string;\n mode: string;\n modelId?: string;\n activePlan?: { title: string; plan: string; approvedAt: string } | null;\n toolGuidance: string;\n}\n\nexport function buildBasePrompt(ctx: PromptContext): string {\n return `You are Mastra Code, an interactive CLI coding agent that helps users with software engineering tasks.\n\n# Environment\nWorking directory: ${ctx.projectPath}\nProject: ${ctx.projectName}\n${ctx.gitBranch ? `Git branch: ${ctx.gitBranch}` : 'Not a git repository'}\nPlatform: ${ctx.platform}\nDate: ${ctx.date}\nCurrent mode: ${ctx.mode}\n\n# Tone and Style\n- Your output is displayed on a command line interface. Keep responses concise.\n- Use Github-flavored markdown for formatting.\n- Only use emojis if the user explicitly requests it.\n- Use tool calls for actions (editing files, running commands, searching, etc.). Use text for communication — talk to the user in text, not via tools, except for communication tools like \\`submit_plan\\`, \\`ask_user\\`, and \\`task_write\\`.\n- Prioritize technical accuracy over validating the user's beliefs. Be direct and objective. Respectful correction is more valuable than false agreement.\n\n${ctx.toolGuidance}\n\n# How to Work on Tasks\n\n## Start by Understanding\n- Read relevant code before making changes. Use search_content/find_files to find related files.\n- For unfamiliar codebases, check git log to understand recent changes and patterns.\n- Identify existing conventions (naming, structure, error handling) and follow them.\n\n## Work Incrementally\n- Focus on ONE thing at a time. Complete it fully before moving to the next.\n- Leave the codebase in a clean state after each change — no half-implemented features.\n- For multi-step tasks, use tasks to track progress and ensure nothing is missed.\n\n## Verify Before Moving On\n- After each change, verify it works. Don't assume — actually test it.\n- Run the relevant tests, check for type errors, or manually verify the behavior.\n- If something breaks, fix it immediately. Don't pile more changes on top of broken code.\n\n# Coding Philosophy\n\n- **Avoid over-engineering.** Only make changes that are directly requested or clearly necessary.\n- **Don't add extras.** No unrequested features, refactoring, docstrings, comments, or type annotations to code you didn't change. Only add comments where the logic isn't self-evident.\n- **Don't add unnecessary error handling.** Trust internal code and framework guarantees. Only validate at system boundaries (user input, external APIs).\n- **Don't create premature abstractions.** Three similar lines of code is better than a helper function used once. Don't design for hypothetical future requirements.\n- **Clean up dead code.** If something is unused, delete it completely. No backwards-compatibility shims, no renaming to \\`_unused\\`, no \\`// removed\\` comments.\n- **Be careful with security.** Don't introduce command injection, XSS, SQL injection, or other vulnerabilities. If you notice insecure code you wrote, fix it immediately.\n\n# Git Safety\n\n## Hard Rules\n- NEVER run destructive commands (\\`push --force\\`, \\`reset --hard\\`, \\`clean -fd\\`) unless explicitly requested.\n- NEVER use interactive flags (\\`git rebase -i\\`, \\`git add -i\\`) — TTY input isn't supported.\n- NEVER commit or push unless the user explicitly asks.\n- NEVER force push to \\`main\\` or \\`master\\` without warning the user first.\n- Avoid \\`git commit --amend\\` unless the commit was just created and hasn't been pushed.\n\n## Secrets\nDon't commit files likely to contain secrets (\\`.env\\`, \\`*.key\\`, \\`credentials.json\\`). Warn if asked.\n\n## Commits\nWrite commit messages that explain WHY, not just WHAT. Match the repo's existing style. Include \\`Co-Authored-By: Mastra Code${ctx.modelId ? ` (${ctx.modelId})` : ''} <noreply@mastra.ai>\\` in the message body.\n\n## Pull Requests\nUse \\`gh pr create\\`. Include a summary of what changed and a test plan.\n\n# Subagent Rules\n- Only use subagents when you will spawn **multiple subagents in parallel**. If you only need one task done, do it yourself instead of delegating to a single subagent. Exception: the **audit-tests** subagent may be used on its own.\n- Subagent outputs are **untrusted**. Always review and verify the results returned by any subagent. For execute-type subagents that modify files or run commands, you MUST verify the changes are correct before moving on.\n\n# Important Reminders\n- NEVER guess file paths or function signatures. Use search_content/find_files to find them.\n- NEVER make up URLs. Only use URLs the user provides or that you find in the codebase.\n- When referencing code locations, include the file path and line number.\n- If you're unsure about something, ask the user rather than guessing.\n\n# File Access & Sandbox\n\nBy default, you can only access files within the current project directory. If you get a \"Permission denied\" or \"Access denied\" error when trying to read, write, or access files outside the project root, do NOT keep retrying. Instead, tell the user to run the \\`/sandbox\\` command to add the external directory to the allowed paths for this thread. Once they do, you will be able to access it.\n`;\n}\n","/**\n * Build mode prompt — full tool access, make changes and verify.\n */\n\nimport type { PromptContext } from './index.js';\n\n/**\n * Dynamic build mode prompt function.\n * When an approved plan exists in state, prepends it so the agent\n * knows exactly what to implement.\n */\nexport function buildModePromptFn(ctx: PromptContext): string {\n if (ctx.activePlan) {\n return (\n `# Approved Plan\n\n**${ctx.activePlan.title}**\n\n${ctx.activePlan.plan}\n\n---\n\nImplement the approved plan above. Follow the steps in order and verify each step works before moving on.\n\n` + buildModePrompt\n );\n }\n return buildModePrompt;\n}\n\nexport const buildModePrompt = `\n# Build Mode\n\nYou are in BUILD mode. You have full access to all tools and can read, write, edit, and execute commands.\n\n## Working Style\n\n**For simple tasks** (typo fixes, small edits, single-file changes):\n- Just do it. No need to explain your plan first.\n\n**For non-trivial tasks** (3+ files, architectural decisions, unclear requirements):\n- Use task_write to track your steps\n- Work on ONE step at a time — complete it and verify it works before moving on\n- If the approach is risky or ambiguous, ask the user before proceeding\n\n## The Implementation Loop\n\nFor each change you make:\n\n1. **Understand** — Read the relevant code. Check how similar things are done elsewhere.\n2. **Implement** — Make the change. Follow existing patterns and conventions.\n3. **Verify** — Test that it works. Don't assume — actually run it.\n4. **Clean up** — Ensure no broken code, no debug statements, no half-done features.\n\nOnly move to the next change after the current one is verified working.\n\n## Verification is Required\n\nBefore considering any task complete:\n- Run relevant tests (check package.json for test scripts)\n- For TypeScript, run \\`tsc --noEmit\\` to catch type errors\n- If there are no automated tests, manually verify the behavior works as expected\n- Use task_check to ensure all tracked tasks are done\n\n**Don't mark something as done until you've verified it actually works.**\n\n## Error Recovery\n\nWhen something breaks:\n1. Read the full error output carefully — don't guess\n2. Find the root cause, not just the symptom\n3. Fix it properly — no casts or suppressions to hide errors\n4. Re-run to confirm the fix\n5. If stuck after 2 attempts, tell the user what you've tried\n\n## Git in Build Mode\n\n- Don't commit unless asked — just report what you changed\n- Before committing, verify the code compiles and passes lint\n- Use descriptive branch names: \\`feat/...\\`, \\`fix/...\\`, \\`refactor/...\\`\n`;\n","/**\n * Plan mode prompt — read-only exploration and planning.\n */\n\nexport const planModePrompt = `\n# Plan Mode — READ-ONLY\n\nYou are in PLAN mode. Your job is to explore the codebase and design an implementation plan — NOT to make changes.\n\n## CRITICAL: Read-Only Mode\n\nThis mode is **strictly read-only**. You must NOT modify anything.\n\n- Do NOT modify, create, or delete any files\n- Do NOT run commands that change state (no git commit, no npm install, no file creation)\n- Do NOT run build commands, tests, or scripts that have side effects\n\nIf the user asks you to make changes while in Plan mode, explain that you're in read-only mode and they should switch to Build mode (\\`/mode build\\`) first.\n\n## Exploration Strategy\n\nBefore writing any plan, build a mental model of the codebase:\n1. Start with the directory structure (\\`view\\` on the project root or relevant subdirectory).\n2. Find the relevant entry points and core files using \\`search_content\\` and \\`find_files\\`.\n3. Read the actual code — don't assume based on file names alone.\n4. Trace data flow: where does input come from, how is it transformed, where does it go?\n5. Identify existing patterns the codebase uses (naming, structure, error handling, testing).\n\n## Your Plan Output\n\nProduce a clear, step-by-step plan with this structure:\n\n### Overview\nOne paragraph: what the change does and why.\n\n### Complexity Estimate\n- **Size**: Small (1-2 files) / Medium (3-5 files) / Large (6+ files)\n- **Risk**: Low (additive, no breaking changes) / Medium (modifies existing behavior) / High (architectural, affects many consumers)\n- **Dependencies**: List any new packages, external services, or migration steps needed.\n\n### Steps\nFor each step:\n1. **File**: path to create or modify\n2. **Change**: what to add/modify/remove, with enough specificity to implement directly\n3. **Why**: brief rationale connecting this step to the overall goal\n\n### Verification\n- What tests to run\n- What to check manually\n- What could go wrong\n\n## IMMEDIATE ACTION: Call submit_plan Tool\n\nAs soon as your plan is complete, **STOP** and call the \\`submit_plan\\` tool immediately.\n\n**CRITICAL:** Do NOT generate a long text response describing your plan. The plan content belongs in the \\`submit_plan\\` tool call, not in your text output.\n\nWhen done, call:\n\\`\\`\\`javascript\nsubmit_plan({\n title: \"short descriptive title\",\n plan: \"your full plan in markdown\"\n})\n\\`\\`\\`\n\nThe user will see the plan rendered inline and can:\n- **Approve** — automatically switches to Build mode for implementation\n- **Reject** — stays in Plan mode\n- **Request changes** — provides feedback for you to revise and resubmit\n\nDo NOT start implementing until the plan is approved. If rejected with feedback, revise the plan and call \\`submit_plan\\` again.\n`;\n","/**\n * Fast mode prompt — quick answers and small edits, minimal overhead.\n */\n\nexport const fastModePrompt = `\n# Fast Mode\n\nYou are in FAST mode. Optimize for speed and brevity.\n\n## Rules\n- Keep responses short. Under 200 words unless the task genuinely requires more.\n- Skip planning. Just do the task directly.\n- For questions: give the direct answer, not a tutorial.\n- For edits: make the change, show what you did, move on.\n- Don't explore the codebase more than necessary for the immediate task.\n\n## When to Use Tools vs. Just Answer\n- If the user asks a general programming question, answer directly from knowledge. Don't search the codebase.\n- If the user asks about THIS project's code, use tools to look it up — don't guess.\n- If the user asks for a quick edit and you know the file, read it and edit it. Don't ask for confirmation.\n- One tool call to read + one to edit is ideal. Minimize round trips.\n`;\n","/**\n * Load project and global agent instruction files (AGENTS.md, CLAUDE.md).\n * Prefers AGENTS.md over CLAUDE.md when multiple exist at the same location.\n */\n\nimport { existsSync, readFileSync } from 'node:fs';\nimport { homedir } from 'node:os';\nimport { join } from 'node:path';\n\n// Filenames to check, in order of preference\nconst INSTRUCTION_FILES = ['AGENTS.md', 'CLAUDE.md'];\n\n// Locations to scan (relative to project root or home)\nconst PROJECT_LOCATIONS = [\n '', // project root\n '.claude',\n '.mastracode',\n];\n\nconst GLOBAL_LOCATIONS = ['.claude', '.mastracode', '.config/claude', '.config/mastracode'];\n\ninterface InstructionSource {\n path: string;\n content: string;\n scope: 'global' | 'project';\n}\n\n/**\n * Find the first existing instruction file at a given base path.\n * Prefers AGENTS.md over CLAUDE.md.\n */\nfunction findInstructionFile(basePath: string): string | null {\n for (const filename of INSTRUCTION_FILES) {\n const fullPath = join(basePath, filename);\n if (existsSync(fullPath)) {\n return fullPath;\n }\n }\n return null;\n}\n\n/**\n * Load all agent instruction files from global and project locations.\n * Returns an array of instruction sources, with global ones first.\n */\nexport function loadAgentInstructions(projectPath: string): InstructionSource[] {\n const sources: InstructionSource[] = [];\n const home = homedir();\n\n // Load global instructions first\n for (const location of GLOBAL_LOCATIONS) {\n const basePath = join(home, location);\n const filePath = findInstructionFile(basePath);\n if (filePath) {\n try {\n const content = readFileSync(filePath, 'utf-8').trim();\n if (content) {\n sources.push({ path: filePath, content, scope: 'global' });\n break; // Only use first found global instruction file\n }\n } catch {\n // Skip unreadable files\n }\n }\n }\n\n // Load project instructions\n for (const location of PROJECT_LOCATIONS) {\n const basePath = location ? join(projectPath, location) : projectPath;\n const filePath = findInstructionFile(basePath);\n if (filePath) {\n try {\n const content = readFileSync(filePath, 'utf-8').trim();\n if (content) {\n sources.push({ path: filePath, content, scope: 'project' });\n break; // Only use first found project instruction file\n }\n } catch {\n // Skip unreadable files\n }\n }\n }\n\n return sources;\n}\n\n/**\n * Format loaded instructions into a string for the system prompt.\n */\nexport function formatAgentInstructions(sources: InstructionSource[]): string {\n if (sources.length === 0) return '';\n\n const sections = sources.map(source => {\n const label = source.scope === 'global' ? 'Global' : 'Project';\n return `<!-- ${label} instructions from ${source.path} -->\\n${source.content}`;\n });\n\n return `\\n# Agent Instructions\\n\\n${sections.join('\\n\\n')}\\n`;\n}\n","/**\n * Mode-specific tool behavioral guidance.\n * Generates tool usage instructions that match the actual registered tool names\n * and are scoped to what's available in the current mode.\n */\n\ninterface ToolGuidanceOptions {\n hasWebSearch?: boolean;\n}\n\nexport function buildToolGuidance(modeId: string, options: ToolGuidanceOptions = {}): string {\n const sections: string[] = [];\n\n sections.push(`# Tool Usage Rules\n\nIMPORTANT: You can ONLY call tools by their exact registered names listed below. Shell commands like \\`git\\`, \\`npm\\`, \\`ls\\`, etc. are NOT tools — they must be run via the \\`execute_command\\` tool.\n\nYou have access to the following tools. Use the RIGHT tool for the job:`);\n\n // --- Read tools (all modes) ---\n\n sections.push(`\n**view** — Read file contents or list directories\n- Use this to read files before editing them. NEVER propose changes to code you haven't read.\n- Use \\`view_range\\` for large files to read specific sections.\n- For directory listings, this shows 2 levels deep.\n- Example: To check lines 50-100 of a large file: \\`view(\"src/big-file.ts\", { view_range: [50, 100] })\\`\n\n**search_content** — Search file contents using regex\n- Use this for ALL content search (finding functions, variables, error messages, imports, etc.)\n- NEVER use \\`execute_command\\` with grep, rg, or ag. Always use the search_content tool.\n- Supports regex patterns, file type filtering, and context lines.\n- Example: Find where a function is defined: \\`search_content(\"function handleSubmit\", { glob: \"**/*.ts\" })\\`\n- Example: Find all imports of a module: \\`search_content(\"from ['\\\\\"]express['\\\\\"]\", { glob: \"**/*.ts\" })\\`\n\n**find_files** — Find files by name pattern\n- Use this to find files matching a pattern (e.g., \"**/*.ts\", \"src/**/test*\").\n- NEVER use \\`execute_command\\` with find or ls for file search. Always use find_files.\n- Respects .gitignore automatically.\n- Example: Find all test files: \\`find_files(\"**/*.test.ts\")\\`\n- Example: Find config files: \\`find_files(\"**/config.{js,ts,json}\")\\`\n\n**execute_command** — Run shell commands\n- Use for: git, npm/pnpm, docker, build tools, test runners, and other terminal operations.\n- Do NOT use for: file reading (use view), file search (use search_content/find_files), file editing (use string_replace_lsp/write_file).\n- Commands have a 30-second default timeout. Use the \\`timeout\\` parameter for longer-running commands.\n- Pipe to \\`| tail -N\\` for commands with long output — the full output streams to the user, only the last N lines are returned to you. If you're building any kind of package you should be tailing.\n- Good: Run independent commands in parallel when possible.\n- Bad: Running \\`cat file.txt\\` — use the view tool instead.`);\n\n // --- Write/edit tools (build & fast only) ---\n\n if (modeId !== 'plan') {\n sections.push(`\n**string_replace_lsp** — Edit files by replacing exact text\n- You MUST read a file with \\`view\\` before editing it.\n- \\`old_str\\` must be an exact match of existing text in the file.\n- Provide enough surrounding context in \\`old_str\\` to make it unique.\n- For creating new files, use \\`write_file\\` instead.\n- Good: Include 2-3 lines of surrounding context to ensure uniqueness.\n- Bad: Using just \\`return true;\\` — too common, will match multiple places.\n\n**write_file** — Create new files or overwrite existing ones\n- Use this to create new files.\n- If overwriting an existing file, you MUST have read it first with \\`view\\`.\n- NEVER create files unless necessary. Prefer editing existing files.`);\n }\n\n // --- Web tools (all modes, conditionally available) ---\n\n if (options.hasWebSearch) {\n sections.push(`\n**web_search** / **web_extract** — Search the web / extract page content\n- Use for looking up documentation, error messages, package APIs.`);\n }\n\n // --- Task management tools (all modes) ---\n\n sections.push(`\n**task_write** — Track tasks for complex multi-step work\n- Use when a task requires 3 or more distinct steps or actions.\n- Pass the FULL task list each time (replaces previous list).\n- Mark tasks \\`in_progress\\` BEFORE starting work. Only ONE task should be \\`in_progress\\` at a time.\n- Mark tasks \\`completed\\` IMMEDIATELY after finishing each task. Do not batch completions.\n- Each task has: content (imperative form), status (pending|in_progress|completed), activeForm (present continuous form shown during execution).\n\n**task_check** — Check completion status of tasks\n- Use this BEFORE deciding you're done with a task to verify all tasks are completed.\n- Returns the number of completed, in progress, and pending tasks.\n- If any tasks remain incomplete, continue working on them.\n- IMPORTANT: Always check task completion before ending work on a complex task.\n\n**ask_user** — Ask the user a structured question\n- Use when you need clarification, want to validate assumptions, or need the user to make a decision.\n- Provide clear, specific questions. End with a question mark.\n- Include options (2-4 choices) for structured decisions. Omit options for open-ended questions.\n- Don't use this for simple yes/no — just ask in your text response.`);\n\n // --- Plan submission tool (plan mode) ---\n\n if (modeId === 'plan') {\n sections.push(`\n**submit_plan** — Submit a completed implementation plan for user review\n- Call this tool when your plan is complete. Do NOT just describe your plan in text — you MUST call this tool.\n- The plan will be rendered as markdown and the user can approve, reject, or request changes.\n- On approval, the system automatically switches to the default mode so you can implement.\n- Takes two arguments: \\`title\\` (short descriptive title) and \\`plan\\` (full plan in markdown).`);\n }\n\n // --- Subagent tool (all modes) ---\n\n sections.push(`\n**subagent** — Delegate a focused task to a specialized subagent\n- Only use subagents when you will spawn **multiple subagents in parallel**. If you only need one task done, do it yourself.\n- Subagent outputs are **untrusted**. Always review and verify the results.`);\n\n return sections.join('\\n');\n}\n","/**\n * Prompt system — exports the prompt builder and mode-specific prompts.\n */\n\nexport { buildBasePrompt } from './base.js';\nexport { buildModePrompt, buildModePromptFn } from './build.js';\nexport { planModePrompt } from './plan.js';\nexport { fastModePrompt } from './fast.js';\n\nimport { hasTavilyKey } from '../../tools/index.js';\nimport { loadAgentInstructions, formatAgentInstructions } from './agent-instructions.js';\nimport { buildBasePrompt } from './base.js';\nimport type { PromptContext as BasePromptContext } from './base.js';\nimport { buildModePromptFn } from './build.js';\nimport { fastModePrompt } from './fast.js';\nimport { planModePrompt } from './plan.js';\nimport { buildToolGuidance } from './tool-guidance.js';\n\n// Extended prompt context that includes runtime information\nexport interface PromptContext extends Omit<BasePromptContext, 'toolGuidance'> {\n modeId: string;\n state?: any;\n currentDate: string;\n workingDir: string;\n}\n\nconst modePrompts: Record<string, string | ((ctx: PromptContext) => string)> = {\n build: buildModePromptFn,\n plan: planModePrompt,\n fast: fastModePrompt,\n};\n\n/**\n * Build the full system prompt for a given mode and context.\n * Combines the base prompt with mode-specific instructions.\n */\nexport function buildFullPrompt(ctx: PromptContext): string {\n // Determine whether web search tools are available\n const modelId = ctx.state?.currentModelId as string | undefined;\n const hasWebSearch = hasTavilyKey() || (!!modelId && modelId.startsWith('anthropic/'));\n\n // Build mode-aware tool guidance\n const toolGuidance = buildToolGuidance(ctx.modeId, { hasWebSearch });\n\n // Map new context to base context\n const baseCtx: BasePromptContext = {\n projectPath: ctx.workingDir,\n projectName: ctx.projectName || 'unknown',\n gitBranch: ctx.gitBranch,\n platform: process.platform,\n date: ctx.currentDate,\n mode: ctx.modeId,\n modelId: ctx.modelId,\n activePlan: ctx.state?.activePlan,\n toolGuidance,\n };\n\n const base = buildBasePrompt(baseCtx);\n const entry = modePrompts[ctx.modeId] || modePrompts.build;\n const modeSpecific = typeof entry === 'function' ? entry(ctx) : entry;\n\n // Inject current task state so agent doesn't lose track after OM truncation\n let taskSection = '';\n const tasks = ctx.state?.tasks as { content: string; status: string; activeForm: string }[] | undefined;\n if (tasks && tasks.length > 0) {\n const lines = tasks.map(t => {\n const icon = t.status === 'completed' ? '✓' : t.status === 'in_progress' ? '▸' : '○';\n return ` ${icon} [${t.status}] ${t.content}`;\n });\n taskSection = `\\n<current-task-list>\\n${lines.join('\\n')}\\n</current-task-list>\\n`;\n }\n\n // Load and inject agent instructions from AGENTS.md/CLAUDE.md files\n const instructionSources = loadAgentInstructions(ctx.workingDir);\n const instructionsSection = formatAgentInstructions(instructionSources);\n\n return base + taskSection + instructionsSection + '\\n' + modeSpecific;\n}\n","import type { HarnessRequestContext } from '@mastra/core/harness';\nimport type { stateSchema } from '../schema.js';\nimport { getCurrentGitBranch } from '../utils/project.js';\nimport type { PromptContext } from './prompts/index.js';\nimport { buildFullPrompt } from './prompts/index.js';\n\nexport function getDynamicInstructions({ requestContext }: { requestContext: { get(key: string): unknown } }) {\n const harnessContext = requestContext.get('harness') as HarnessRequestContext<typeof stateSchema> | undefined;\n const state = harnessContext?.state;\n const modeId = harnessContext?.modeId ?? 'build';\n const projectPath = state?.projectPath ?? process.cwd();\n\n const promptCtx: PromptContext = {\n projectPath,\n projectName: state?.projectName ?? '',\n gitBranch: getCurrentGitBranch(projectPath) ?? state?.gitBranch,\n platform: process.platform,\n date: new Date().toISOString().split('T')[0]!,\n mode: modeId,\n modelId: state?.currentModelId || undefined,\n activePlan: state?.activePlan ?? null,\n modeId: modeId,\n currentDate: new Date().toISOString().split('T')[0]!,\n workingDir: state?.projectPath ?? process.cwd(),\n state: state,\n };\n\n return buildFullPrompt(promptCtx);\n}\n","// Default OM model - using gemini-2.5-flash for efficiency\nexport const DEFAULT_OM_MODEL_ID = process.env.DEFAULT_OM_MODEL_ID ?? 'google/gemini-2.5-flash';\n\n// Default OM thresholds — per-thread overrides are loaded from thread metadata\nexport const DEFAULT_OBS_THRESHOLD = 30_000;\nexport const DEFAULT_REF_THRESHOLD = 40_000;\n","import type { HarnessRequestContext } from '@mastra/core/harness';\nimport type { RequestContext } from '@mastra/core/request-context';\nimport type { MastraCompositeStore } from '@mastra/core/storage';\nimport { Memory } from '@mastra/memory';\nimport { DEFAULT_OM_MODEL_ID, DEFAULT_OBS_THRESHOLD, DEFAULT_REF_THRESHOLD } from '../constants';\nimport type { stateSchema } from '../schema';\nimport { getOmScope } from '../utils/project';\nimport { resolveModel } from './model';\n\nlet cachedMemory: Memory | null = null;\nlet cachedMemoryKey: string | null = null;\n\n/**\n * Read harness state from requestContext.\n * Used by both the memory factory and the OM model functions.\n */\nfunction getHarnessState(requestContext: RequestContext) {\n return (requestContext.get('harness') as HarnessRequestContext<typeof stateSchema> | undefined)?.getState?.();\n}\n\n/**\n * Observer model function — reads the current observer model ID from\n * harness state via requestContext (now propagated by OM's agent.generate).\n */\nfunction getObserverModel({ requestContext }: { requestContext: RequestContext }) {\n const state = getHarnessState(requestContext);\n return resolveModel(state?.observerModelId ?? DEFAULT_OM_MODEL_ID);\n}\n\n/**\n * Reflector model function — reads the current reflector model ID from\n * harness state via requestContext (now propagated by OM's agent.generate).\n */\nfunction getReflectorModel({ requestContext }: { requestContext: RequestContext }) {\n const state = getHarnessState(requestContext);\n return resolveModel(state?.reflectorModelId ?? DEFAULT_OM_MODEL_ID);\n}\n\n/**\n * Dynamic memory factory function.\n * Reads OM thresholds from harness state via requestContext.\n * Model functions also read from requestContext (no mutable bridge needed).\n */\nexport function getDynamicMemory(storage: MastraCompositeStore) {\n return ({ requestContext }: { requestContext: RequestContext }) => {\n const state = getHarnessState(requestContext);\n const omScope = getOmScope(state?.projectPath);\n\n const obsThreshold = state?.observationThreshold ?? DEFAULT_OBS_THRESHOLD;\n const refThreshold = state?.reflectionThreshold ?? DEFAULT_REF_THRESHOLD;\n\n const cacheKey = `${obsThreshold}:${refThreshold}:${omScope}`;\n if (cachedMemory && cachedMemoryKey === cacheKey) {\n return cachedMemory;\n }\n\n cachedMemory = new Memory({\n storage,\n options: {\n observationalMemory: {\n enabled: true,\n scope: omScope,\n observation: {\n bufferTokens: 1 / 5,\n bufferActivation: 2000,\n model: getObserverModel,\n messageTokens: obsThreshold,\n blockAfter: 2,\n modelSettings: {\n maxOutputTokens: 60000,\n },\n },\n reflection: {\n bufferActivation: 1 / 2,\n blockAfter: 1.1,\n model: getReflectorModel,\n observationTokens: refThreshold,\n modelSettings: {\n maxOutputTokens: 60000,\n },\n },\n },\n },\n });\n cachedMemoryKey = cacheKey;\n\n return cachedMemory;\n };\n}\n","import { createAnthropic } from '@ai-sdk/anthropic';\nimport type { HarnessRequestContext } from '@mastra/core/harness';\nimport type { RequestContext } from '@mastra/core/request-context';\nimport type { McpManager } from '../mcp';\nimport type { stateSchema } from '../schema';\nimport {\n createViewTool,\n createGrepTool,\n createGlobTool,\n createExecuteCommandTool,\n createWriteFileTool,\n createWebSearchTool,\n createWebExtractTool,\n hasTavilyKey,\n stringReplaceLspTool,\n astSmartEditTool,\n requestSandboxAccessTool,\n} from '../tools';\n\nexport function createDynamicTools(mcpManager?: McpManager) {\n return function getDynamicTools({ requestContext }: { requestContext: RequestContext }) {\n const ctx = requestContext.get('harness') as HarnessRequestContext<typeof stateSchema> | undefined;\n const state = ctx?.getState?.();\n const modeId = ctx?.modeId ?? 'build';\n\n const modelId = state?.currentModelId;\n const isAnthropicModel = modelId?.startsWith('anthropic/');\n\n const projectPath = state?.projectPath ?? '';\n\n const viewTool = createViewTool(projectPath);\n const grepTool = createGrepTool(projectPath);\n const globTool = createGlobTool(projectPath);\n const executeCommandTool = createExecuteCommandTool(projectPath);\n const writeFileTool = createWriteFileTool(projectPath);\n\n // NOTE: Tool names \"grep\" and \"glob\" are reserved by Anthropic's OAuth\n // validation (they match Claude Code's internal tools). We use\n // \"search_content\" and \"find_files\" to avoid the collision.\n const tools: Record<string, any> = {\n view: viewTool,\n search_content: grepTool,\n find_files: globTool,\n execute_command: executeCommandTool,\n request_sandbox_access: requestSandboxAccessTool,\n };\n\n if (modeId !== 'plan') {\n tools.string_replace_lsp = stringReplaceLspTool;\n tools.ast_smart_edit = astSmartEditTool;\n tools.write_file = writeFileTool;\n }\n\n if (hasTavilyKey()) {\n tools.web_search = createWebSearchTool();\n tools.web_extract = createWebExtractTool();\n } else if (isAnthropicModel) {\n const anthropic = createAnthropic({});\n tools.web_search = anthropic.tools.webSearch_20250305();\n }\n\n if (mcpManager) {\n const mcpTools = mcpManager.getTools();\n Object.assign(tools, mcpTools);\n }\n\n return tools;\n };\n}\n","import fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\nimport type { HarnessRequestContext } from '@mastra/core/harness';\nimport type { RequestContext } from '@mastra/core/request-context';\nimport { Workspace, LocalFilesystem, LocalSandbox } from '@mastra/core/workspace';\nimport type { stateSchema } from '../schema';\n\n// =============================================================================\n// Create Workspace with Skills\n// =============================================================================\n\n// We support multiple skill locations for compatibility:\n// 1. Project-local: .mastracode/skills (project-specific mastracode skills)\n// 2. Project-local: .claude/skills (Claude Code compatible skills)\n// 3. Global: ~/.mastracode/skills (user-wide mastracode skills)\n// 4. Global: ~/.claude/skills (user-wide Claude Code skills)\n\nconst mastraCodeLocalSkillsPath = path.join(process.cwd(), '.mastracode', 'skills');\n\nconst claudeLocalSkillsPath = path.join(process.cwd(), '.claude', 'skills');\n\nconst mastraCodeGlobalSkillsPath = path.join(os.homedir(), '.mastracode', 'skills');\n\nconst claudeGlobalSkillsPath = path.join(os.homedir(), '.claude', 'skills');\n\n// Mastra's LocalSkillSource.readdir uses Node's Dirent.isDirectory() which\n// returns false for symlinks. Tools like `npx skills add` install skills as\n// symlinks, so we need to resolve them. For each symlinked skill directory,\n// we add the real (resolved) parent path as an additional skill scan path.\nfunction collectSkillPaths(skillsDirs: string[]): string[] {\n const paths: string[] = [];\n const seen = new Set<string>();\n\n for (const skillsDir of skillsDirs) {\n if (!fs.existsSync(skillsDir)) continue;\n\n // Always add the directory itself\n const resolved = fs.realpathSync(skillsDir);\n if (!seen.has(resolved)) {\n seen.add(resolved);\n paths.push(skillsDir);\n }\n\n // Check for symlinked skill subdirectories and add their real parents\n try {\n const entries = fs.readdirSync(skillsDir, { withFileTypes: true });\n for (const entry of entries) {\n if (entry.isSymbolicLink()) {\n const linkPath = path.join(skillsDir, entry.name);\n const realPath = fs.realpathSync(linkPath);\n const stat = fs.statSync(realPath);\n if (stat.isDirectory()) {\n // Add the real parent directory as a skill path\n // so Mastra discovers it as a regular directory\n const realParent = path.dirname(realPath);\n if (!seen.has(realParent)) {\n seen.add(realParent);\n paths.push(realParent);\n }\n }\n }\n }\n } catch {\n // Ignore errors during symlink resolution\n }\n }\n\n return paths;\n}\n\nconst skillPaths = collectSkillPaths([\n mastraCodeLocalSkillsPath,\n claudeLocalSkillsPath,\n mastraCodeGlobalSkillsPath,\n claudeGlobalSkillsPath,\n]);\n\nexport function getDynamicWorkspace({ requestContext }: { requestContext: RequestContext }) {\n const ctx = requestContext.get('harness') as HarnessRequestContext<typeof stateSchema> | undefined;\n const state = ctx?.getState?.();\n const projectPath = state?.projectPath;\n\n if (!projectPath) {\n throw new Error('Project path is required');\n }\n\n // Sync filesystem's allowedPaths with sandbox-granted paths from harness state\n const sandboxPaths = state?.sandboxAllowedPaths ?? [];\n\n const workspace = new Workspace({\n id: 'mastra-code-workspace',\n name: 'Mastra Code Workspace',\n filesystem: new LocalFilesystem({\n basePath: projectPath,\n allowedPaths: skillPaths,\n }),\n sandbox: new LocalSandbox({\n workingDirectory: projectPath,\n env: process.env,\n }),\n // Disable workspace tools — built-in tools are used instead.\n // Workspace tools use different output formats (e.g. → separator, offset/limit params)\n // that the TUI renderers don't fully support yet.\n // We will update to use workspace tools very soon - just disabling until then\n tools: { enabled: false },\n ...(skillPaths.length > 0 ? { skills: skillPaths } : {}),\n });\n\n workspace.filesystem.setAllowedPaths([...skillPaths, ...sandboxPaths.map((p: string) => path.resolve(p))]);\n\n return workspace;\n}\n\nif (skillPaths.length > 0) {\n console.info(`Skills loaded from:`);\n for (const p of skillPaths) {\n console.info(` - ${p}`);\n }\n}\n","/**\n * Hook configuration loading from filesystem.\n * Loads from global (~/.mastracode/hooks.json) and project (.mastracode/hooks.json).\n * Global hooks run first, project hooks append.\n */\n\nimport * as fs from 'node:fs';\nimport * as os from 'node:os';\nimport * as path from 'node:path';\nimport type { HooksConfig, HookDefinition, HookEventName } from './types.js';\n\nconst VALID_EVENTS: HookEventName[] = [\n 'PreToolUse',\n 'PostToolUse',\n 'Stop',\n 'UserPromptSubmit',\n 'SessionStart',\n 'SessionEnd',\n];\n\nexport function loadHooksConfig(projectDir: string): HooksConfig {\n const globalPath = getGlobalHooksPath();\n const projectPath = getProjectHooksPath(projectDir);\n\n const globalConfig = loadSingleConfig(globalPath);\n const projectConfig = loadSingleConfig(projectPath);\n\n return mergeConfigs(globalConfig, projectConfig);\n}\n\nexport function getProjectHooksPath(projectDir: string): string {\n return path.join(projectDir, '.mastracode', 'hooks.json');\n}\n\nexport function getGlobalHooksPath(): string {\n return path.join(os.homedir(), '.mastracode', 'hooks.json');\n}\n\nfunction loadSingleConfig(filePath: string): HooksConfig {\n try {\n if (!fs.existsSync(filePath)) return {};\n const raw = fs.readFileSync(filePath, 'utf-8');\n return validateConfig(JSON.parse(raw));\n } catch {\n return {};\n }\n}\n\nfunction validateConfig(raw: unknown): HooksConfig {\n if (!raw || typeof raw !== 'object') return {};\n\n const config: HooksConfig = {};\n const obj = raw as Record<string, unknown>;\n\n for (const event of VALID_EVENTS) {\n if (Array.isArray(obj[event])) {\n const hooks = (obj[event] as unknown[]).filter(isValidHook);\n if (hooks.length > 0) {\n config[event] = hooks;\n }\n }\n }\n\n return config;\n}\n\nfunction isValidHook(raw: unknown): raw is HookDefinition {\n if (!raw || typeof raw !== 'object') return false;\n const obj = raw as Record<string, unknown>;\n return obj.type === 'command' && typeof obj.command === 'string';\n}\n\nfunction mergeConfigs(global: HooksConfig, project: HooksConfig): HooksConfig {\n const merged: HooksConfig = {};\n\n for (const event of VALID_EVENTS) {\n const combined = [...(global[event] ?? []), ...(project[event] ?? [])];\n if (combined.length > 0) {\n merged[event] = combined;\n }\n }\n\n return merged;\n}\n","/**\n * Type definitions for the hooks system.\n * Hooks are user-configured shell commands that run at lifecycle events.\n */\n\n// =============================================================================\n// Hook Event Names\n// =============================================================================\nexport type HookEventName =\n | 'PreToolUse'\n | 'PostToolUse'\n | 'Stop'\n | 'UserPromptSubmit'\n | 'SessionStart'\n | 'SessionEnd'\n | 'Notification';\n\nexport type BlockingHookEvent = 'PreToolUse' | 'Stop' | 'UserPromptSubmit';\n\nexport function isBlockingEvent(event: HookEventName): event is BlockingHookEvent {\n return event === 'PreToolUse' || event === 'Stop' || event === 'UserPromptSubmit';\n}\n\n// =============================================================================\n// Hook Configuration\n// =============================================================================\n\nexport interface HookMatcher {\n /** Regex pattern matched against tool_name (PreToolUse/PostToolUse only). */\n tool_name?: string;\n}\n\nexport interface HookDefinition {\n /** Hook type. Only \"command\" supported in phase 1. */\n type: 'command';\n /** Shell command to execute via /bin/sh -c. */\n command: string;\n /** Optional matcher to filter when this hook runs. */\n matcher?: HookMatcher;\n /** Timeout in ms. Default 10000. Process killed after timeout. */\n timeout?: number;\n /** Human-readable description for /hooks display. */\n description?: string;\n}\nexport interface HooksConfig {\n PreToolUse?: HookDefinition[];\n PostToolUse?: HookDefinition[];\n Stop?: HookDefinition[];\n UserPromptSubmit?: HookDefinition[];\n SessionStart?: HookDefinition[];\n SessionEnd?: HookDefinition[];\n Notification?: HookDefinition[];\n}\n\n// =============================================================================\n// Stdin Protocol (JSON sent to hook process)\n// =============================================================================\n\nexport interface HookStdinBase {\n session_id: string;\n cwd: string;\n hook_event_name: HookEventName;\n}\n\nexport interface HookStdinToolEvent extends HookStdinBase {\n hook_event_name: 'PreToolUse' | 'PostToolUse';\n tool_name: string;\n tool_input: unknown;\n tool_output?: unknown;\n tool_error?: boolean;\n}\n\nexport interface HookStdinUserPrompt extends HookStdinBase {\n hook_event_name: 'UserPromptSubmit';\n user_message: string;\n}\n\nexport interface HookStdinStop extends HookStdinBase {\n hook_event_name: 'Stop';\n assistant_message?: string;\n stop_reason: 'complete' | 'aborted' | 'error';\n}\nexport interface HookStdinSession extends HookStdinBase {\n hook_event_name: 'SessionStart' | 'SessionEnd';\n}\n\nexport interface HookStdinNotification extends HookStdinBase {\n hook_event_name: 'Notification';\n /** Why the notification fired: agent_done, ask_question, tool_approval, plan_approval, sandbox_access */\n reason: string;\n /** Optional human-readable message for the notification. */\n message?: string;\n}\n\nexport type HookStdin =\n | HookStdinToolEvent\n | HookStdinUserPrompt\n | HookStdinStop\n | HookStdinSession\n | HookStdinNotification;\n\n// =============================================================================\n// Stdout Protocol (JSON read from hook process)\n// =============================================================================\n\nexport interface HookStdout {\n decision?: 'allow' | 'block';\n reason?: string;\n additionalContext?: string;\n}\n\n// =============================================================================\n// Execution Results\n// =============================================================================\n\nexport interface HookResult {\n hook: HookDefinition;\n exitCode: number;\n stdout?: HookStdout;\n stderr?: string;\n timedOut: boolean;\n durationMs: number;\n}\n\nexport interface HookEventResult {\n allowed: boolean;\n blockReason?: string;\n additionalContext?: string;\n results: HookResult[];\n warnings: string[];\n}\n","/**\n * Hook process execution.\n * Spawns shell commands, handles stdin/stdout/exit-code protocol.\n */\n\nimport { spawn } from 'node:child_process';\nimport type { HookDefinition, HookStdin, HookResult, HookStdout, HookEventResult } from './types.js';\nimport { isBlockingEvent } from './types.js';\n\nconst DEFAULT_TIMEOUT = 10_000;\n\nexport async function executeHook(hook: HookDefinition, stdinPayload: HookStdin): Promise<HookResult> {\n const timeout = hook.timeout ?? DEFAULT_TIMEOUT;\n const startTime = Date.now();\n\n return new Promise<HookResult>(resolve => {\n const isWindows = process.platform === 'win32';\n const shell = isWindows ? 'cmd' : '/bin/sh';\n const shellArgs = isWindows ? ['/c', hook.command] : ['-c', hook.command];\n\n const child = spawn(shell, shellArgs, {\n stdio: ['pipe', 'pipe', 'pipe'],\n cwd: stdinPayload.cwd,\n env: {\n ...process.env,\n MASTRA_HOOK_EVENT: stdinPayload.hook_event_name,\n },\n });\n\n let stdout = '';\n let stderr = '';\n let timedOut = false;\n let resolved = false;\n\n const timer = setTimeout(() => {\n timedOut = true;\n child.kill('SIGKILL');\n }, timeout);\n\n child.stdout?.on('data', (data: Buffer) => {\n stdout += data.toString();\n });\n\n child.stderr?.on('data', (data: Buffer) => {\n stderr += data.toString();\n });\n\n child.on('close', exitCode => {\n clearTimeout(timer);\n if (resolved) return;\n resolved = true;\n\n let parsedStdout: HookStdout | undefined;\n if (stdout.trim()) {\n try {\n parsedStdout = JSON.parse(stdout.trim()) as HookStdout;\n } catch {\n // Not valid JSON — ignore\n }\n }\n\n resolve({\n hook,\n exitCode: exitCode ?? 1,\n stdout: parsedStdout,\n stderr: stderr.trim() || undefined,\n timedOut,\n durationMs: Date.now() - startTime,\n });\n });\n\n child.on('error', error => {\n clearTimeout(timer);\n if (resolved) return;\n resolved = true;\n\n resolve({\n hook,\n exitCode: 1,\n stderr: error.message,\n timedOut: false,\n durationMs: Date.now() - startTime,\n });\n });\n\n try {\n child.stdin?.write(JSON.stringify(stdinPayload));\n child.stdin?.end();\n } catch {\n // stdin write failure — process continues\n }\n });\n}\n\nexport function matchesHook(hook: HookDefinition, context: { tool_name?: string }): boolean {\n if (!hook.matcher) return true;\n\n if (hook.matcher.tool_name) {\n if (!context.tool_name) return false;\n try {\n return new RegExp(hook.matcher.tool_name).test(context.tool_name);\n } catch {\n return false;\n }\n }\n\n return true;\n}\n\nexport async function runHooksForEvent(\n hooks: HookDefinition[],\n stdinPayload: HookStdin,\n matchContext: { tool_name?: string } = {},\n): Promise<HookEventResult> {\n const results: HookResult[] = [];\n const warnings: string[] = [];\n let additionalContext: string | undefined;\n\n const applicable = hooks.filter(h => matchesHook(h, matchContext));\n if (applicable.length === 0) {\n return { allowed: true, results: [], warnings: [] };\n }\n\n const blocking = isBlockingEvent(stdinPayload.hook_event_name);\n\n for (const hook of applicable) {\n const result = await executeHook(hook, stdinPayload);\n results.push(result);\n\n if (result.stdout?.additionalContext) {\n additionalContext = additionalContext\n ? `${additionalContext}\\n${result.stdout.additionalContext}`\n : result.stdout.additionalContext;\n }\n\n if (result.timedOut) {\n warnings.push(`Hook timed out after ${hook.timeout ?? DEFAULT_TIMEOUT}ms: ${hook.command}`);\n continue;\n }\n\n if (result.exitCode === 2 && blocking) {\n const reason = result.stdout?.reason || result.stderr || `Blocked by hook: ${hook.description || hook.command}`;\n\n return {\n allowed: false,\n blockReason: reason,\n additionalContext,\n results,\n warnings,\n };\n }\n\n if (result.exitCode === 0) continue;\n\n const warnMsg = result.stderr || `Hook exited with code ${result.exitCode}`;\n warnings.push(`${hook.description || hook.command}: ${warnMsg}`);\n }\n\n return { allowed: true, additionalContext, results, warnings };\n}\n","/**\n * HookManager — high-level orchestration for the hooks system.\n * Created once at startup, provides methods for each lifecycle event.\n */\nimport { loadHooksConfig, getProjectHooksPath, getGlobalHooksPath } from './config.js';\nimport { runHooksForEvent } from './executor.js';\nimport type {\n HooksConfig,\n HookEventResult,\n HookStdinToolEvent,\n HookStdinUserPrompt,\n HookStdinStop,\n HookStdinSession,\n HookStdinNotification,\n} from './types.js';\n\nexport class HookManager {\n private config: HooksConfig;\n private projectDir: string;\n private sessionId: string;\n\n constructor(projectDir: string, sessionId: string) {\n this.projectDir = projectDir;\n this.sessionId = sessionId;\n this.config = loadHooksConfig(projectDir);\n }\n\n reload(): void {\n this.config = loadHooksConfig(this.projectDir);\n }\n\n setSessionId(sessionId: string): void {\n this.sessionId = sessionId;\n }\n\n hasHooks(): boolean {\n return Object.keys(this.config).length > 0;\n }\n\n getConfig(): HooksConfig {\n return this.config;\n }\n\n getConfigPaths(): { project: string; global: string } {\n return {\n project: getProjectHooksPath(this.projectDir),\n global: getGlobalHooksPath(),\n };\n }\n\n // =========================================================================\n // Event Methods\n // =========================================================================\n\n async runPreToolUse(toolName: string, toolInput: unknown): Promise<HookEventResult> {\n const hooks = this.config.PreToolUse;\n if (!hooks || hooks.length === 0) {\n return { allowed: true, results: [], warnings: [] };\n }\n\n const stdin: HookStdinToolEvent = {\n session_id: this.sessionId,\n cwd: this.projectDir,\n hook_event_name: 'PreToolUse',\n tool_name: toolName,\n tool_input: toolInput,\n };\n\n return runHooksForEvent(hooks, stdin, { tool_name: toolName });\n }\n\n async runPostToolUse(\n toolName: string,\n toolInput: unknown,\n toolOutput: unknown,\n toolError: boolean,\n ): Promise<HookEventResult> {\n const hooks = this.config.PostToolUse;\n if (!hooks || hooks.length === 0) {\n return { allowed: true, results: [], warnings: [] };\n }\n\n const stdin: HookStdinToolEvent = {\n session_id: this.sessionId,\n cwd: this.projectDir,\n hook_event_name: 'PostToolUse',\n tool_name: toolName,\n tool_input: toolInput,\n tool_output: toolOutput,\n tool_error: toolError,\n };\n\n return runHooksForEvent(hooks, stdin, { tool_name: toolName });\n }\n\n async runUserPromptSubmit(userMessage: string): Promise<HookEventResult> {\n const hooks = this.config.UserPromptSubmit;\n if (!hooks || hooks.length === 0) {\n return { allowed: true, results: [], warnings: [] };\n }\n\n const stdin: HookStdinUserPrompt = {\n session_id: this.sessionId,\n cwd: this.projectDir,\n hook_event_name: 'UserPromptSubmit',\n user_message: userMessage,\n };\n\n return runHooksForEvent(hooks, stdin);\n }\n\n async runStop(\n assistantMessage: string | undefined,\n stopReason: 'complete' | 'aborted' | 'error',\n ): Promise<HookEventResult> {\n const hooks = this.config.Stop;\n if (!hooks || hooks.length === 0) {\n return { allowed: true, results: [], warnings: [] };\n }\n\n const stdin: HookStdinStop = {\n session_id: this.sessionId,\n cwd: this.projectDir,\n hook_event_name: 'Stop',\n assistant_message: assistantMessage,\n stop_reason: stopReason,\n };\n\n return runHooksForEvent(hooks, stdin);\n }\n\n async runSessionStart(): Promise<HookEventResult> {\n const hooks = this.config.SessionStart;\n if (!hooks || hooks.length === 0) {\n return { allowed: true, results: [], warnings: [] };\n }\n\n const stdin: HookStdinSession = {\n session_id: this.sessionId,\n cwd: this.projectDir,\n hook_event_name: 'SessionStart',\n };\n\n return runHooksForEvent(hooks, stdin);\n }\n async runSessionEnd(): Promise<HookEventResult> {\n const hooks = this.config.SessionEnd;\n if (!hooks || hooks.length === 0) {\n return { allowed: true, results: [], warnings: [] };\n }\n\n const stdin: HookStdinSession = {\n session_id: this.sessionId,\n cwd: this.projectDir,\n hook_event_name: 'SessionEnd',\n };\n\n return runHooksForEvent(hooks, stdin);\n }\n\n /**\n * Fire notification hooks (non-blocking, fire-and-forget).\n * Called when the TUI is waiting for user input.\n */\n runNotification(reason: string, message?: string): void {\n const hooks = this.config.Notification;\n if (!hooks || hooks.length === 0) return;\n\n const stdin: HookStdinNotification = {\n session_id: this.sessionId,\n cwd: this.projectDir,\n hook_event_name: 'Notification',\n reason,\n message,\n };\n\n // Fire-and-forget — don't await\n runHooksForEvent(hooks, stdin).catch(() => {});\n }\n}\n","/**\n * MCP server configuration loading from filesystem.\n * Loads from:\n * 1. .claude/settings.local.json (Claude Code compat — lowest priority)\n * 2. ~/.mastracode/mcp.json (global)\n * 3. .mastracode/mcp.json (project — highest priority)\n *\n * Project overrides global by server name. Claude Code config is lowest priority.\n */\n\nimport * as fs from 'node:fs';\nimport * as os from 'node:os';\nimport * as path from 'node:path';\nimport type { McpConfig, McpServerConfig } from './types.js';\n\nexport function loadMcpConfig(projectDir: string): McpConfig {\n const claudeConfig = loadClaudeSettings(projectDir);\n const globalConfig = loadSingleConfig(getGlobalMcpPath());\n const projectConfig = loadSingleConfig(getProjectMcpPath(projectDir));\n\n return mergeConfigs(claudeConfig, globalConfig, projectConfig);\n}\n\nexport function getProjectMcpPath(projectDir: string): string {\n return path.join(projectDir, '.mastracode', 'mcp.json');\n}\n\nexport function getGlobalMcpPath(): string {\n return path.join(os.homedir(), '.mastracode', 'mcp.json');\n}\n\nexport function getClaudeSettingsPath(projectDir: string): string {\n return path.join(projectDir, '.claude', 'settings.local.json');\n}\n\nfunction loadSingleConfig(filePath: string): McpConfig {\n try {\n if (!fs.existsSync(filePath)) return {};\n const raw = fs.readFileSync(filePath, 'utf-8');\n return validateConfig(JSON.parse(raw));\n } catch {\n return {};\n }\n}\n\nfunction loadClaudeSettings(projectDir: string): McpConfig {\n try {\n const filePath = getClaudeSettingsPath(projectDir);\n if (!fs.existsSync(filePath)) return {};\n const raw = fs.readFileSync(filePath, 'utf-8');\n const parsed = JSON.parse(raw);\n // Claude Code stores mcpServers at the top level of settings\n if (parsed?.mcpServers && typeof parsed.mcpServers === 'object') {\n return validateConfig({ mcpServers: parsed.mcpServers });\n }\n return {};\n } catch {\n return {};\n }\n}\n\nfunction validateConfig(raw: unknown): McpConfig {\n if (!raw || typeof raw !== 'object') return {};\n const obj = raw as Record<string, unknown>;\n\n if (!obj.mcpServers || typeof obj.mcpServers !== 'object') return {};\n\n const servers: Record<string, McpServerConfig> = {};\n const rawServers = obj.mcpServers as Record<string, unknown>;\n\n for (const [name, entry] of Object.entries(rawServers)) {\n if (isValidServerConfig(entry)) {\n servers[name] = {\n command: (entry as Record<string, unknown>).command as string,\n args: Array.isArray((entry as Record<string, unknown>).args)\n ? ((entry as Record<string, unknown>).args as string[])\n : undefined,\n env:\n typeof (entry as Record<string, unknown>).env === 'object' && (entry as Record<string, unknown>).env !== null\n ? ((entry as Record<string, unknown>).env as Record<string, string>)\n : undefined,\n };\n }\n }\n\n if (Object.keys(servers).length === 0) return {};\n return { mcpServers: servers };\n}\n\nfunction isValidServerConfig(raw: unknown): boolean {\n if (!raw || typeof raw !== 'object') return false;\n const obj = raw as Record<string, unknown>;\n return typeof obj.command === 'string';\n}\n\n/**\n * Merge configs: claude (lowest priority) < global < project (highest).\n * Later configs override earlier by server name.\n */\nfunction mergeConfigs(...configs: McpConfig[]): McpConfig {\n const merged: Record<string, McpServerConfig> = {};\n\n for (const config of configs) {\n if (config.mcpServers) {\n for (const [name, server] of Object.entries(config.mcpServers)) {\n merged[name] = server;\n }\n }\n }\n\n if (Object.keys(merged).length === 0) return {};\n return { mcpServers: merged };\n}\n","/**\n * MCP manager — orchestrates MCP server connections using MCPClient directly.\n * Created once at startup, provides tools from connected MCP servers.\n */\n\nimport { MCPClient } from '@mastra/mcp';\nimport { loadMcpConfig, getProjectMcpPath, getGlobalMcpPath, getClaudeSettingsPath } from './config.js';\nimport type { McpConfig, McpServerStatus } from './types.js';\n\n/** Public interface for the MCP manager returned by createMcpManager(). */\nexport interface McpManager {\n /** Connect to all configured MCP servers and collect their tools. */\n init(): Promise<void>;\n /** Disconnect all servers, reload config from disk, reconnect. */\n reload(): Promise<void>;\n /** Disconnect from all MCP servers and clean up. */\n disconnect(): Promise<void>;\n /** Get all tools from connected MCP servers (namespaced as serverName_toolName). */\n getTools(): Record<string, any>;\n /** Check if any MCP servers are configured. */\n hasServers(): boolean;\n /** Get status of all servers. */\n getServerStatuses(): McpServerStatus[];\n /** Get config file paths for display. */\n getConfigPaths(): { project: string; global: string; claude: string };\n /** Get the merged config. */\n getConfig(): McpConfig;\n}\n\n/**\n * Create an MCP manager that wraps MCPClient with config-file discovery\n * and per-server status tracking.\n */\nexport function createMcpManager(projectDir: string): McpManager {\n let config = loadMcpConfig(projectDir);\n let client: MCPClient | null = null;\n let tools: Record<string, any> = {};\n let serverStatuses = new Map<string, McpServerStatus>();\n let initialized = false;\n\n function buildServerDefs(\n servers: Record<string, { command: string; args?: string[]; env?: Record<string, string> }>,\n ) {\n const defs: Record<string, { command: string; args?: string[]; env?: Record<string, string> }> = {};\n for (const [name, cfg] of Object.entries(servers)) {\n defs[name] = { command: cfg.command, args: cfg.args, env: cfg.env };\n }\n return defs;\n }\n\n async function connectAndCollectTools(): Promise<void> {\n const servers = config.mcpServers;\n if (!servers || Object.keys(servers).length === 0) {\n return;\n }\n\n client = new MCPClient({\n id: 'mastra-code-mcp',\n servers: buildServerDefs(servers),\n });\n\n // MCPClient.listTools() uses Promise.all internally — a single server\n // failure throws for all. We call it once wrapped in try/catch and\n // derive per-server status from tool name prefixes (serverName_toolName).\n const serverNames = Object.keys(servers);\n\n try {\n tools = await client.listTools();\n\n for (const name of serverNames) {\n const prefix = `${name}_`;\n const serverToolNames = Object.keys(tools).filter(t => t.startsWith(prefix));\n serverStatuses.set(name, {\n name,\n connected: true,\n toolCount: serverToolNames.length,\n toolNames: serverToolNames,\n });\n }\n } catch (error) {\n const errMsg = error instanceof Error ? error.message : String(error);\n\n for (const name of serverNames) {\n serverStatuses.set(name, {\n name,\n connected: false,\n toolCount: 0,\n toolNames: [],\n error: errMsg,\n });\n }\n }\n }\n\n async function disconnect(): Promise<void> {\n if (client) {\n try {\n await client.disconnect();\n } catch {\n // Ignore disconnect errors\n }\n client = null;\n }\n }\n\n return {\n async init() {\n if (initialized) return;\n await connectAndCollectTools();\n initialized = true;\n },\n\n async reload() {\n await disconnect();\n config = loadMcpConfig(projectDir);\n tools = {};\n serverStatuses = new Map();\n initialized = false;\n await connectAndCollectTools();\n initialized = true;\n },\n\n disconnect,\n\n getTools() {\n return { ...tools };\n },\n\n hasServers() {\n return config.mcpServers !== undefined && Object.keys(config.mcpServers).length > 0;\n },\n\n getServerStatuses() {\n return Array.from(serverStatuses.values());\n },\n\n getConfigPaths() {\n return {\n project: getProjectMcpPath(projectDir),\n global: getGlobalMcpPath(),\n claude: getClaudeSettingsPath(projectDir),\n };\n },\n\n getConfig() {\n return config;\n },\n };\n}\n","import { z } from 'zod';\nimport { DEFAULT_OM_MODEL_ID } from './constants';\n\nexport const stateSchema = z.object({\n projectPath: z.string().optional(),\n projectName: z.string().optional(),\n gitBranch: z.string().optional(),\n lastCommand: z.string().optional(),\n currentModelId: z.string().default(''),\n // Subagent model settings (per-thread/per-mode)\n subagentModelId: z.string().optional(), // Thread-level default for subagents\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 // 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 (persisted per-thread)\n tasks: z\n .array(\n z.object({\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 // 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});\n","/**\n * Gateway sync utility for keeping the model registry up to date.\n * Periodically fetches provider data from gateways and updates the global cache.\n */\n\nimport fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\n\nimport { ModelsDevGateway, NetlifyGateway } from '@mastra/core/llm';\nimport type { ProviderConfig } from '@mastra/core/llm';\n\n// Cache paths (same as Mastra uses)\nconst CACHE_DIR = path.join(os.homedir(), '.cache', 'mastra');\nconst CACHE_FILE = path.join(CACHE_DIR, 'gateway-refresh-time');\nconst GLOBAL_PROVIDER_REGISTRY_JSON = path.join(CACHE_DIR, 'provider-registry.json');\nconst GLOBAL_PROVIDER_TYPES_DTS = path.join(CACHE_DIR, 'provider-types.generated.d.ts');\n\n// Default sync interval: 5 minutes\nconst DEFAULT_SYNC_INTERVAL_MS = 5 * 60 * 1000;\n\nlet syncInterval: NodeJS.Timeout | null = null;\nlet isSyncing = false;\n\n/**\n * Atomic file write to prevent corruption from concurrent writes\n */\nasync function atomicWriteFile(filePath: string, content: string): Promise<void> {\n const randomSuffix = Math.random().toString(36).substring(2, 15);\n const tempPath = `${filePath}.${process.pid}.${Date.now()}.${randomSuffix}.tmp`;\n\n try {\n await fs.promises.writeFile(tempPath, content, 'utf-8');\n await fs.promises.rename(tempPath, filePath);\n } catch (error) {\n try {\n await fs.promises.unlink(tempPath);\n } catch {\n // Ignore cleanup errors\n }\n throw error;\n }\n}\n\n/**\n * Fetch providers from all gateways\n */\nasync function fetchProvidersFromGateways(): Promise<{\n providers: Record<string, ProviderConfig>;\n models: Record<string, string[]>;\n}> {\n const allProviders: Record<string, ProviderConfig> = {};\n const allModels: Record<string, string[]> = {};\n\n const gateways = [new ModelsDevGateway({}), new NetlifyGateway()];\n\n for (const gateway of gateways) {\n try {\n const providers = await gateway.fetchProviders();\n\n // models.dev is a provider registry, not a true gateway - don't prefix its providers\n const isProviderRegistry = gateway.id === 'models.dev';\n\n for (const [providerId, config] of Object.entries(providers)) {\n const typeProviderId = isProviderRegistry\n ? providerId\n : providerId === gateway.id\n ? gateway.id\n : `${gateway.id}/${providerId}`;\n\n allProviders[typeProviderId] = config;\n allModels[typeProviderId] = config.models.sort();\n }\n } catch (error) {\n console.warn(`[GatewaySync] Failed to fetch from ${gateway.id}:`, error);\n }\n }\n\n return { providers: allProviders, models: allModels };\n}\n\n/**\n * Generate TypeScript type definitions content\n */\nfunction generateTypesContent(models: Record<string, string[]>): string {\n const providerModelsEntries = Object.entries(models)\n .map(([provider, modelList]) => {\n const modelsList = modelList.map(m => `'${m}'`);\n const needsQuotes = /[^a-zA-Z0-9_$]/.test(provider);\n const providerKey = needsQuotes ? `'${provider}'` : provider;\n const singleLine = ` readonly ${providerKey}: readonly [${modelsList.join(', ')}];`;\n\n if (singleLine.length > 120) {\n const formattedModels = modelList.map(m => ` '${m}',`).join('\\n');\n return ` readonly ${providerKey}: readonly [\\n${formattedModels}\\n ];`;\n }\n\n return singleLine;\n })\n .join('\\n');\n\n return `/**\n * THIS FILE IS AUTO-GENERATED - DO NOT EDIT\n * Generated from model gateway providers\n */\n\nexport type ProviderModelsMap = {\n${providerModelsEntries}\n};\n\nexport type Provider = keyof ProviderModelsMap;\n\nexport interface ProviderModels {\n [key: string]: string[];\n}\n\nexport type ModelRouterModelId =\n | {\n [P in Provider]: \\`\\${P}/\\${ProviderModelsMap[P][number]}\\`;\n }[Provider]\n | (string & {});\n\nexport type ModelForProvider<P extends Provider> = ProviderModelsMap[P][number];\n`;\n}\n\n/**\n * Get the last sync time from disk\n */\nfunction getLastSyncTime(): Date | null {\n try {\n if (!fs.existsSync(CACHE_FILE)) {\n return null;\n }\n const timestamp = fs.readFileSync(CACHE_FILE, 'utf-8').trim();\n return new Date(parseInt(timestamp, 10));\n } catch {\n return null;\n }\n}\n\n/**\n * Save the last sync time to disk\n */\nfunction saveLastSyncTime(date: Date): void {\n try {\n if (!fs.existsSync(CACHE_DIR)) {\n fs.mkdirSync(CACHE_DIR, { recursive: true });\n }\n fs.writeFileSync(CACHE_FILE, date.getTime().toString(), 'utf-8');\n } catch (error) {\n console.warn('[GatewaySync] Failed to save sync time:', error);\n }\n}\n\n/**\n * Sync gateways and update the global cache\n */\nexport async function syncGateways(force = false): Promise<void> {\n if (isSyncing && !force) {\n return;\n }\n\n // Check if we synced recently (within the last 5 minutes)\n if (!force) {\n const lastSync = getLastSyncTime();\n if (lastSync) {\n const timeSinceSync = Date.now() - lastSync.getTime();\n if (timeSinceSync < DEFAULT_SYNC_INTERVAL_MS) {\n // console.debug(`[GatewaySync] Skipping sync, last sync was ${Math.round(timeSinceSync / 1000)}s ago`)\n return;\n }\n }\n }\n\n isSyncing = true;\n\n try {\n // console.debug(\"[GatewaySync] Starting gateway sync...\")\n\n const { providers, models } = await fetchProvidersFromGateways();\n\n // Ensure cache directory exists\n await fs.promises.mkdir(CACHE_DIR, { recursive: true });\n\n // Write registry JSON\n const registryData = {\n providers,\n models,\n version: '1.0.0',\n };\n await atomicWriteFile(GLOBAL_PROVIDER_REGISTRY_JSON, JSON.stringify(registryData, null, 2));\n\n // Write types file\n const typesContent = generateTypesContent(models);\n await atomicWriteFile(GLOBAL_PROVIDER_TYPES_DTS, typesContent);\n\n // Save sync time\n const now = new Date();\n saveLastSyncTime(now);\n\n // console.debug(`[GatewaySync] ✅ Sync completed at ${now.toISOString()}`)\n } catch (error) {\n console.error('[GatewaySync] ❌ Sync failed:', error);\n } finally {\n isSyncing = false;\n }\n}\n\n/**\n * Start periodic gateway sync\n * @param intervalMs Sync interval in milliseconds (default: 5 minutes)\n */\nexport function startGatewaySync(intervalMs = DEFAULT_SYNC_INTERVAL_MS): void {\n if (syncInterval) {\n return;\n }\n\n // Do an initial sync\n syncGateways().catch(console.error);\n\n // Set up periodic sync\n syncInterval = setInterval(() => {\n syncGateways().catch(console.error);\n }, intervalMs);\n\n // Don't prevent process exit\n syncInterval.unref();\n}\n\n/**\n * Stop periodic gateway sync\n */\nexport function stopGatewaySync(): void {\n if (syncInterval) {\n clearInterval(syncInterval);\n syncInterval = null;\n }\n}\n","/**\n * Storage factory — creates the appropriate storage backend based on resolved config.\n *\n * If PG is selected but fails to connect, falls back to LibSQL so the TUI\n * can start and the user can fix the connection via /settings.\n */\n\nimport type { MastraCompositeStore } from '@mastra/core/storage';\nimport { LibSQLStore } from '@mastra/libsql';\nimport { PostgresStore } from '@mastra/pg';\n\nimport type { StorageConfig, PgStorageConfig } from './project.js';\nimport { getDatabasePath } from './project.js';\n\nexport interface StorageResult {\n storage: MastraCompositeStore;\n /** Non-null when PG was requested but failed — contains a user-facing warning. */\n warning?: string;\n}\n\nfunction createFallbackLibSQL(): MastraCompositeStore {\n return new LibSQLStore({\n id: 'mastra-code-storage',\n url: `file:${getDatabasePath()}`,\n });\n}\n\n/**\n * Create a storage instance from the resolved config.\n *\n * - `libsql` backend → LibSQLStore (always available)\n * - `pg` backend → PostgresStore, falls back to LibSQL on connection failure\n */\nexport async function createStorage(config: StorageConfig): Promise<StorageResult> {\n if (config.backend === 'pg') {\n return createPgStorage(config);\n }\n\n // Default: LibSQL\n return {\n storage: new LibSQLStore({\n id: 'mastra-code-storage',\n url: config.url,\n ...(config.authToken ? { authToken: config.authToken } : {}),\n }),\n };\n}\n\nasync function createPgStorage(config: PgStorageConfig): Promise<StorageResult> {\n // No connection info → fall back with guidance\n if (!config.connectionString && !config.host) {\n return {\n storage: createFallbackLibSQL(),\n warning:\n 'PostgreSQL backend selected but no connection info configured. ' +\n 'Using LibSQL fallback. Set a connection string via /settings.',\n };\n }\n\n const base = {\n id: 'mastra-code-storage' as const,\n ...(config.schemaName ? { schemaName: config.schemaName } : {}),\n ...(config.disableInit ? { disableInit: config.disableInit } : {}),\n ...(config.skipDefaultIndexes ? { skipDefaultIndexes: config.skipDefaultIndexes } : {}),\n };\n\n const store = config.connectionString\n ? new PostgresStore({ ...base, connectionString: config.connectionString })\n : new PostgresStore({\n ...base,\n host: config.host!,\n port: config.port,\n database: config.database,\n user: config.user,\n password: config.password,\n });\n\n // Test the connection before committing — if it fails, fall back to LibSQL\n // so the user can fix the config via /settings.\n try {\n await store.init();\n } catch (err: any) {\n const msg = err?.message ?? String(err);\n const target = config.connectionString ?? `${config.host}:${config.port ?? 5432}`;\n try {\n await store.close();\n } catch {\n // ignore cleanup errors\n }\n return {\n storage: createFallbackLibSQL(),\n warning:\n `Failed to connect to PostgreSQL at ${target}: ${msg}\\n` +\n 'Using LibSQL fallback. Fix the connection via /settings.',\n };\n }\n\n return { storage: store };\n}\n","import { Mastra } from '@mastra/core';\nimport { Agent } from '@mastra/core/agent';\nimport { Harness, taskWriteTool, taskCheckTool } from '@mastra/core/harness';\nimport type { HeartbeatHandler, HarnessMode, HarnessSubagent } from '@mastra/core/harness';\nimport { noopLogger } from '@mastra/core/logger';\n\nimport { getDynamicInstructions } from './agents/instructions.js';\nimport { getDynamicMemory } from './agents/memory.js';\nimport { getDynamicModel, resolveModel } from './agents/model.js';\nimport { executeSubagent } from './agents/subagents/execute.js';\nimport { exploreSubagent } from './agents/subagents/explore.js';\nimport { planSubagent } from './agents/subagents/plan.js';\nimport { createDynamicTools } from './agents/tools.js';\n\nimport { getDynamicWorkspace } from './agents/workspace.js';\nimport { AuthStorage } from './auth/storage.js';\nimport { HookManager } from './hooks/index.js';\nimport { createMcpManager } from './mcp/index.js';\nimport type { ProviderAccess } from './onboarding/packs.js';\nimport { getAvailableModePacks, getAvailableOmPacks } from './onboarding/packs.js';\nimport { loadSettings, resolveModelDefaults, resolveOmModel } from './onboarding/settings.js';\nimport { getToolCategory } from './permissions.js';\nimport { setAuthStorage } from './providers/claude-max.js';\nimport { setAuthStorage as setOpenAIAuthStorage } from './providers/openai-codex.js';\n\nimport { stateSchema } from './schema.js';\nimport {\n createViewTool,\n createGrepTool,\n createGlobTool,\n createExecuteCommandTool,\n createWriteFileTool,\n stringReplaceLspTool,\n} from './tools/index.js';\nimport { mastra } from './tui/theme.js';\nimport { syncGateways } from './utils/gateway-sync.js';\nimport { detectProject, getStorageConfig, getResourceIdOverride } from './utils/project.js';\nimport type { StorageConfig } from './utils/project.js';\nimport { createStorage } from './utils/storage-factory.js';\nimport { acquireThreadLock, releaseThreadLock } from './utils/thread-lock.js';\n\nconst PROVIDER_TO_OAUTH_ID: Record<string, string> = {\n anthropic: 'anthropic',\n openai: 'openai-codex',\n};\n\nexport interface MastraCodeConfig {\n /** Working directory for project detection. Default: process.cwd() */\n cwd?: string;\n /** Override modes (model IDs, colors, which modes exist). Default: build/plan/fast */\n modes?: HarnessMode[];\n /** Override or extend subagent definitions. Default: explore/plan/execute */\n subagents?: HarnessSubagent[];\n /** Extra tools merged into the dynamic tool set */\n extraTools?: Record<string, any>;\n /** Custom storage config instead of auto-detected default */\n storage?: StorageConfig;\n /** Initial state overrides (yolo, thinkingLevel, etc.) */\n initialState?: Record<string, unknown>;\n /** Override heartbeat handlers. Default: gateway-sync */\n heartbeatHandlers?: HeartbeatHandler[];\n /** Disable MCP server discovery. Default: false */\n disableMcp?: boolean;\n /** Disable hooks. Default: false */\n disableHooks?: boolean;\n}\n\nexport async function createMastraCode(config?: MastraCodeConfig) {\n const cwd = config?.cwd ?? process.cwd();\n\n // Auth storage (shared with Claude Max / OpenAI providers and Harness)\n const authStorage = new AuthStorage();\n setAuthStorage(authStorage);\n setOpenAIAuthStorage(authStorage);\n\n // Project detection\n const project = detectProject(cwd);\n\n const resourceIdOverride = getResourceIdOverride(project.rootPath);\n if (resourceIdOverride) {\n project.resourceId = resourceIdOverride;\n project.resourceIdOverride = true;\n }\n\n // Load global settings to resolve storage preferences (needed before storage creation)\n const globalSettings = loadSettings();\n\n // Storage\n const storageConfig = config?.storage ?? getStorageConfig(project.rootPath, globalSettings.storage);\n const storageResult = await createStorage(storageConfig);\n const storage = storageResult.storage;\n const storageWarning = storageResult.warning;\n\n const memory = getDynamicMemory(storage);\n\n // MCP\n const mcpManager = config?.disableMcp ? undefined : createMcpManager(project.rootPath);\n\n // Agent\n const codeAgentInstance = new Agent({\n id: 'code-agent',\n name: 'Code Agent',\n instructions: getDynamicInstructions,\n model: getDynamicModel,\n tools: createDynamicTools(mcpManager),\n });\n\n const mastraInstance = new Mastra({\n agents: { codeAgentInstance },\n logger: noopLogger,\n storage,\n });\n\n const codeAgent = mastraInstance.getAgent('codeAgentInstance');\n\n // Hooks\n const hookManager = config?.disableHooks ? undefined : new HookManager(project.rootPath, 'session-init');\n\n if (hookManager?.hasHooks()) {\n const hookConfig = hookManager.getConfig();\n const hookCount = Object.values(hookConfig).reduce((sum, hooks) => sum + (hooks?.length ?? 0), 0);\n console.info(`Hooks: ${hookCount} hook(s) configured`);\n }\n\n // Build subagent definitions with project-scoped tools\n const viewTool = createViewTool(project.rootPath);\n const grepTool = createGrepTool(project.rootPath);\n const globTool = createGlobTool(project.rootPath);\n const executeCommandTool = createExecuteCommandTool(project.rootPath);\n const writeFileTool = createWriteFileTool(project.rootPath);\n\n const readOnlyTools = {\n view: viewTool,\n search_content: grepTool,\n find_files: globTool,\n };\n\n const defaultSubagents: HarnessSubagent[] = [\n {\n id: exploreSubagent.id,\n name: exploreSubagent.name,\n description:\n \"Read-only codebase exploration. Use for questions like 'find all usages of X', 'how does module Y work'.\",\n instructions: exploreSubagent.instructions,\n tools: readOnlyTools,\n },\n {\n id: planSubagent.id,\n name: planSubagent.name,\n description:\n \"Read-only analysis and planning. Use for 'create an implementation plan for X', 'analyze the architecture of Y'.\",\n instructions: planSubagent.instructions,\n tools: readOnlyTools,\n },\n {\n id: executeSubagent.id,\n name: executeSubagent.name,\n description:\n \"Task execution with write capabilities. Use for 'implement feature X', 'fix bug Y', 'refactor module Z'.\",\n instructions: executeSubagent.instructions,\n tools: {\n ...readOnlyTools,\n string_replace_lsp: stringReplaceLspTool,\n write_file: writeFileTool,\n execute_command: executeCommandTool,\n task_write: taskWriteTool,\n task_check: taskCheckTool,\n },\n },\n ];\n\n const defaultModes: HarnessMode[] = [\n {\n id: 'build',\n name: 'Build',\n default: true,\n defaultModelId: 'anthropic/claude-opus-4-6',\n color: mastra.purple,\n agent: codeAgent,\n },\n {\n id: 'plan',\n name: 'Plan',\n defaultModelId: 'openai/gpt-5.2-codex',\n color: mastra.blue,\n agent: codeAgent,\n },\n {\n id: 'fast',\n name: 'Fast',\n defaultModelId: 'cerebras/zai-glm-4.7',\n color: mastra.green,\n agent: codeAgent,\n },\n ];\n\n const defaultHeartbeatHandlers: HeartbeatHandler[] = [\n {\n id: 'gateway-sync',\n intervalMs: 5 * 60 * 1000,\n handler: () => syncGateways(),\n },\n ];\n\n // Build lightweight provider access for resolving built-in packs at startup.\n // OAuth providers are checked via authStorage, env-only providers via process.env.\n const startupAccess: ProviderAccess = {\n anthropic: authStorage.isLoggedIn('anthropic') ? 'oauth' : process.env.ANTHROPIC_API_KEY ? 'apikey' : false,\n openai: authStorage.isLoggedIn('openai-codex') ? 'oauth' : process.env.OPENAI_API_KEY ? 'apikey' : false,\n cerebras: process.env.CEREBRAS_API_KEY ? 'apikey' : false,\n google: process.env.GOOGLE_GENERATIVE_AI_API_KEY ? 'apikey' : false,\n deepseek: process.env.DEEPSEEK_API_KEY ? 'apikey' : false,\n };\n const builtinPacks = getAvailableModePacks(startupAccess);\n const builtinOmPacks = getAvailableOmPacks(startupAccess);\n const effectiveDefaults = resolveModelDefaults(globalSettings, builtinPacks);\n const effectiveOmModel = resolveOmModel(globalSettings, builtinOmPacks);\n\n // Apply resolved model defaults to modes\n const modes = (config?.modes ?? defaultModes).map(mode => {\n const savedModel = effectiveDefaults[mode.id];\n return savedModel ? { ...mode, defaultModelId: savedModel } : mode;\n });\n\n // Map subagent types to mode models: explore→fast, plan→plan, execute→build\n const subagentModeMap: Record<string, string> = { explore: 'fast', plan: 'plan', execute: 'build' };\n const subagents = (config?.subagents ?? defaultSubagents).map(sa => {\n const modeId = subagentModeMap[sa.id];\n const model = modeId ? effectiveDefaults[modeId] : undefined;\n return model ? { ...sa, defaultModelId: model } : sa;\n });\n\n // Build initial state with global preferences\n const globalInitialState: Record<string, unknown> = {};\n if (effectiveOmModel) {\n globalInitialState.observerModelId = effectiveOmModel;\n globalInitialState.reflectorModelId = effectiveOmModel;\n }\n if (globalSettings.preferences.yolo !== null) {\n globalInitialState.yolo = globalSettings.preferences.yolo;\n }\n // Seed subagent models from global settings\n for (const [key, modelId] of Object.entries(globalSettings.models.subagentModels)) {\n if (key === '_default') {\n globalInitialState.subagentModelId = modelId;\n } else {\n globalInitialState[`subagentModelId_${key}`] = modelId;\n }\n }\n\n const harness = new Harness({\n id: 'mastra-code',\n resourceId: project.resourceId,\n storage,\n memory,\n stateSchema,\n subagents,\n resolveModel,\n toolCategoryResolver: getToolCategory,\n initialState: {\n projectPath: project.rootPath,\n projectName: project.name,\n gitBranch: project.gitBranch,\n yolo: true,\n ...globalInitialState,\n ...config?.initialState,\n },\n workspace: getDynamicWorkspace,\n modes,\n heartbeatHandlers: config?.heartbeatHandlers ?? defaultHeartbeatHandlers,\n modelAuthChecker: provider => {\n const oauthId = PROVIDER_TO_OAUTH_ID[provider];\n if (oauthId && authStorage.isLoggedIn(oauthId)) {\n return true;\n }\n return undefined;\n },\n modelUseCountProvider: () => loadSettings().modelUseCounts,\n threadLock: {\n acquire: acquireThreadLock,\n release: releaseThreadLock,\n },\n });\n\n // Sync hookManager session ID on thread changes\n if (hookManager) {\n harness.subscribe(event => {\n if (event.type === 'thread_changed') {\n hookManager.setSessionId(event.threadId);\n } else if (event.type === 'thread_created') {\n hookManager.setSessionId(event.thread.id);\n }\n });\n }\n\n return { harness, mcpManager, hookManager, authStorage, storageWarning };\n}\n"]}