@mastra/code-sdk 1.15.0-alpha.10 → 1.15.0-alpha.12

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 (131) hide show
  1. package/dist/acp/agent.js +2 -1
  2. package/dist/acp/agent.js.map +1 -1
  3. package/dist/acp/event-mapper.js +0 -2
  4. package/dist/acp/event-mapper.js.map +1 -1
  5. package/dist/acp.js +1 -2
  6. package/dist/agent-connections/registry.js.map +1 -1
  7. package/dist/agent-connections/signal-provider.js.map +1 -1
  8. package/dist/agent-connections/state-processor.js.map +1 -1
  9. package/dist/agent-connections/tools.js +26 -24
  10. package/dist/agent-connections/tools.js.map +1 -1
  11. package/dist/agents/instructions.js +3 -2
  12. package/dist/agents/instructions.js.map +1 -1
  13. package/dist/agents/mastracode-gateway.js +35 -27
  14. package/dist/agents/mastracode-gateway.js.map +1 -1
  15. package/dist/agents/memory.d.ts.map +1 -1
  16. package/dist/agents/memory.js +16 -2
  17. package/dist/agents/memory.js.map +1 -1
  18. package/dist/agents/prompts/agent-instructions.js +1 -1
  19. package/dist/agents/prompts/agent-instructions.js.map +1 -1
  20. package/dist/agents/prompts/index.js +3 -2
  21. package/dist/agents/prompts/index.js.map +1 -1
  22. package/dist/agents/prompts/plan.js +2 -1
  23. package/dist/agents/prompts/plan.js.map +1 -1
  24. package/dist/agents/sandbox-filesystem.d.ts +28 -0
  25. package/dist/agents/sandbox-filesystem.d.ts.map +1 -1
  26. package/dist/agents/sandbox-filesystem.js +81 -2
  27. package/dist/agents/sandbox-filesystem.js.map +1 -1
  28. package/dist/agents/tools.d.ts.map +1 -1
  29. package/dist/agents/tools.js +18 -12
  30. package/dist/agents/tools.js.map +1 -1
  31. package/dist/agents/workspace.js +2 -1
  32. package/dist/agents/workspace.js.map +1 -1
  33. package/dist/auth/account-rotation-processor.js +2 -1
  34. package/dist/auth/account-rotation-processor.js.map +1 -1
  35. package/dist/auth/providers/anthropic.js +2 -2
  36. package/dist/auth/providers/anthropic.js.map +1 -1
  37. package/dist/auth/providers/github-copilot.js +1 -1
  38. package/dist/auth/providers/github-copilot.js.map +1 -1
  39. package/dist/auth/providers/openai-codex.js +3 -2
  40. package/dist/auth/providers/openai-codex.js.map +1 -1
  41. package/dist/auth/providers/xai.js +1 -1
  42. package/dist/auth/providers/xai.js.map +1 -1
  43. package/dist/clipboard/index.js +5 -4
  44. package/dist/clipboard/index.js.map +1 -1
  45. package/dist/evals/context-builder.js +1 -3
  46. package/dist/evals/context-builder.js.map +1 -1
  47. package/dist/evals/scorers/outcome.js +2 -1
  48. package/dist/evals/scorers/outcome.js.map +1 -1
  49. package/dist/factory/remote-controller.js.map +1 -1
  50. package/dist/factory/remote-session.js +1 -3
  51. package/dist/factory/remote-session.js.map +1 -1
  52. package/dist/headless/cli.js +2 -1
  53. package/dist/headless/cli.js.map +1 -1
  54. package/dist/headless/run-mc.js +9 -9
  55. package/dist/headless/run-mc.js.map +1 -1
  56. package/dist/hooks/executor.js +3 -1
  57. package/dist/hooks/executor.js.map +1 -1
  58. package/dist/hooks/manager.js +40 -26
  59. package/dist/hooks/manager.js.map +1 -1
  60. package/dist/index.d.ts.map +1 -1
  61. package/dist/index.js +30 -18
  62. package/dist/index.js.map +1 -1
  63. package/dist/knowledge-inspector.js +2 -2
  64. package/dist/knowledge-inspector.js.map +1 -1
  65. package/dist/lsp/server.js +4 -2
  66. package/dist/lsp/server.js.map +1 -1
  67. package/dist/mcp/manager.d.ts.map +1 -1
  68. package/dist/mcp/manager.js +14 -2
  69. package/dist/mcp/manager.js.map +1 -1
  70. package/dist/onboarding/settings.js +5 -2
  71. package/dist/onboarding/settings.js.map +1 -1
  72. package/dist/platform/index.js +5 -3
  73. package/dist/platform/index.js.map +1 -1
  74. package/dist/plugins/loader.js +3 -1
  75. package/dist/plugins/loader.js.map +1 -1
  76. package/dist/plugins/manager.js +2 -1
  77. package/dist/plugins/manager.js.map +1 -1
  78. package/dist/plugins/package-link.js.map +1 -1
  79. package/dist/plugins/scaffold.js +4 -2
  80. package/dist/plugins/scaffold.js.map +1 -1
  81. package/dist/plugins/signal-lane.js.map +1 -1
  82. package/dist/process-memory-diagnostics.js +2 -1
  83. package/dist/process-memory-diagnostics.js.map +1 -1
  84. package/dist/providers/amazon-bedrock-gateway.js +2 -1
  85. package/dist/providers/amazon-bedrock-gateway.js.map +1 -1
  86. package/dist/providers/amazon-bedrock.js +2 -2
  87. package/dist/providers/amazon-bedrock.js.map +1 -1
  88. package/dist/providers/claude-max.js +13 -9
  89. package/dist/providers/claude-max.js.map +1 -1
  90. package/dist/providers/github-copilot-gateway.js.map +1 -1
  91. package/dist/providers/github-copilot.js +13 -12
  92. package/dist/providers/github-copilot.js.map +1 -1
  93. package/dist/providers/openai-codex.js +14 -11
  94. package/dist/providers/openai-codex.js.map +1 -1
  95. package/dist/providers/provider-thinking.js.map +1 -1
  96. package/dist/schedules/run-script.js +1 -1
  97. package/dist/schedules/run-script.js.map +1 -1
  98. package/dist/schedules/scheduler.js.map +1 -1
  99. package/dist/tools/request-sandbox-access.js +7 -5
  100. package/dist/tools/request-sandbox-access.js.map +1 -1
  101. package/dist/tools/utils.js +3 -1
  102. package/dist/tools/utils.js.map +1 -1
  103. package/dist/tools/web-search.d.ts +13 -11
  104. package/dist/tools/web-search.d.ts.map +1 -1
  105. package/dist/tools/web-search.js +21 -15
  106. package/dist/tools/web-search.js.map +1 -1
  107. package/dist/utils/debug-log.js +2 -2
  108. package/dist/utils/debug-log.js.map +1 -1
  109. package/dist/utils/gateway-sync.js +1 -1
  110. package/dist/utils/gateway-sync.js.map +1 -1
  111. package/dist/utils/local-observability.d.ts +1 -1
  112. package/dist/utils/local-observability.d.ts.map +1 -1
  113. package/dist/utils/local-observability.js +1 -1
  114. package/dist/utils/local-observability.js.map +1 -1
  115. package/dist/utils/prune-cli.js +10 -8
  116. package/dist/utils/prune-cli.js.map +1 -1
  117. package/dist/utils/signals-pubsub.js.map +1 -1
  118. package/dist/utils/slash-command-processor.js +1 -1
  119. package/dist/utils/slash-command-processor.js.map +1 -1
  120. package/dist/utils/stdin-pipe.js +1 -1
  121. package/dist/utils/stdin-pipe.js.map +1 -1
  122. package/dist/utils/storage-factory.d.ts.map +1 -1
  123. package/dist/utils/storage-factory.js +1 -1
  124. package/dist/utils/storage-factory.js.map +1 -1
  125. package/dist/utils/storage-maintenance.js +1 -1
  126. package/dist/utils/storage-maintenance.js.map +1 -1
  127. package/dist/utils/update-check.js +2 -1
  128. package/dist/utils/update-check.js.map +1 -1
  129. package/dist/workflows/register-primitives.js +1 -1
  130. package/dist/workflows/register-primitives.js.map +1 -1
  131. package/package.json +11 -11
@@ -1 +1 @@
1
- {"version":3,"file":"executor.js","names":[],"sources":["../../src/hooks/executor.ts"],"sourcesContent":["/**\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 // Without this, Node's default Windows argument escaping re-quotes\n // hook.command before cmd.exe ever sees it, so a quoted path (or any\n // path containing spaces) reaches the child process with literal \"\n // characters embedded in it. mastracode/tui's shell-runner.ts already\n // sets this for its own cmd invocations; this call site just missed it.\n ...(isWindows ? { windowsVerbatimArguments: true } : {}),\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 // A hook that never reads stdin (or exits before we finish writing) closes\n // the pipe under us. That surfaces asynchronously as an EPIPE 'error' event\n // on the socket, which Node escalates to an unhandled error — taking the\n // whole host process down — unless something is listening. The hook's real\n // outcome still arrives via 'close', so absorb it.\n child.stdin?.on('error', () => {});\n\n try {\n child.stdin?.write(JSON.stringify(stdinPayload));\n child.stdin?.end();\n } catch {\n // Synchronous 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"],"mappings":"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"}
1
+ {"version":3,"file":"executor.js","names":[],"sources":["../../src/hooks/executor.ts"],"sourcesContent":["/**\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 // Without this, Node's default Windows argument escaping re-quotes\n // hook.command before cmd.exe ever sees it, so a quoted path (or any\n // path containing spaces) reaches the child process with literal \"\n // characters embedded in it. mastracode/tui's shell-runner.ts already\n // sets this for its own cmd invocations; this call site just missed it.\n ...(isWindows ? { windowsVerbatimArguments: true } : {}),\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 // A hook that never reads stdin (or exits before we finish writing) closes\n // the pipe under us. That surfaces asynchronously as an EPIPE 'error' event\n // on the socket, which Node escalates to an unhandled error — taking the\n // whole host process down — unless something is listening. The hook's real\n // outcome still arrives via 'close', so absorb it.\n child.stdin?.on('error', () => {});\n\n try {\n child.stdin?.write(JSON.stringify(stdinPayload));\n child.stdin?.end();\n } catch {\n // Synchronous 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"],"mappings":"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"}
@@ -86,49 +86,55 @@ var HookManager = class {
86
86
  async runPreToolUse(toolName, toolInput) {
87
87
  const hooks = this.config.PreToolUse;
88
88
  if (!hooks || hooks.length === 0) return emptyResult();
89
- return runHooksForEvent(hooks, {
89
+ const stdin = {
90
90
  ...this.baseStdinFields("PreToolUse"),
91
91
  tool_name: toolName,
92
92
  tool_input: toolInput
93
- }, { tool_name: toolName });
93
+ };
94
+ return runHooksForEvent(hooks, stdin, { tool_name: toolName });
94
95
  }
95
96
  async runPostToolUse(toolName, toolInput, toolOutput, toolError) {
96
97
  const hooks = this.config.PostToolUse;
97
98
  if (!hooks || hooks.length === 0) return emptyResult();
98
- return runHooksForEvent(hooks, {
99
+ const stdin = {
99
100
  ...this.baseStdinFields("PostToolUse"),
100
101
  tool_name: toolName,
101
102
  tool_input: toolInput,
102
103
  tool_output: toolOutput,
103
104
  tool_error: toolError
104
- }, { tool_name: toolName });
105
+ };
106
+ return runHooksForEvent(hooks, stdin, { tool_name: toolName });
105
107
  }
106
108
  async runUserPromptSubmit(userMessage) {
107
109
  const hooks = this.config.UserPromptSubmit;
108
110
  if (!hooks || hooks.length === 0) return emptyResult();
109
- return runHooksForEvent(hooks, {
111
+ const stdin = {
110
112
  ...this.baseStdinFields("UserPromptSubmit"),
111
113
  user_message: userMessage
112
- });
114
+ };
115
+ return runHooksForEvent(hooks, stdin);
113
116
  }
114
117
  async runStop(assistantMessage, stopReason) {
115
118
  const hooks = this.config.Stop;
116
119
  if (!hooks || hooks.length === 0) return emptyResult();
117
- return runHooksForEvent(hooks, {
120
+ const stdin = {
118
121
  ...this.baseStdinFields("Stop"),
119
122
  assistant_message: assistantMessage,
120
123
  stop_reason: stopReason
121
- });
124
+ };
125
+ return runHooksForEvent(hooks, stdin);
122
126
  }
123
127
  async runSessionStart() {
124
128
  const hooks = this.config.SessionStart;
125
129
  if (!hooks || hooks.length === 0) return emptyResult();
126
- return runHooksForEvent(hooks, this.sessionStdin("SessionStart"));
130
+ const stdin = this.sessionStdin("SessionStart");
131
+ return runHooksForEvent(hooks, stdin);
127
132
  }
128
133
  async runSessionEnd() {
129
134
  const hooks = this.config.SessionEnd;
130
135
  if (!hooks || hooks.length === 0) return emptyResult();
131
- return runHooksForEvent(hooks, this.sessionStdin("SessionEnd"));
136
+ const stdin = this.sessionStdin("SessionEnd");
137
+ return runHooksForEvent(hooks, stdin);
132
138
  }
133
139
  /**
134
140
  * Fire notification hooks (non-blocking, fire-and-forget).
@@ -137,53 +143,57 @@ var HookManager = class {
137
143
  runNotification(reason, message) {
138
144
  const hooks = this.config.Notification;
139
145
  if (!hooks || hooks.length === 0) return;
140
- runHooksForEvent(hooks, {
146
+ const stdin = {
141
147
  ...this.baseStdinFields("Notification"),
142
148
  reason,
143
149
  message
144
- }).catch(() => {});
150
+ };
151
+ runHooksForEvent(hooks, stdin).catch(() => {});
145
152
  }
146
153
  async runAgentStart() {
147
154
  const hooks = this.config.AgentStart;
148
155
  if (!hooks || hooks.length === 0) return emptyResult();
149
156
  const runId = this.runId;
150
157
  if (!runId) return emptyResult();
151
- return runHooksForEvent(hooks, {
158
+ const stdin = {
152
159
  ...this.baseStdinFields("AgentStart"),
153
160
  run_id: runId
154
- });
161
+ };
162
+ return runHooksForEvent(hooks, stdin);
155
163
  }
156
164
  async runAgentEnd(stopReason) {
157
165
  const hooks = this.config.AgentEnd;
158
166
  if (!hooks || hooks.length === 0) return emptyResult();
159
167
  const runId = this.runId;
160
168
  if (!runId) return emptyResult();
161
- return runHooksForEvent(hooks, {
169
+ const stdin = {
162
170
  ...this.baseStdinFields("AgentEnd"),
163
171
  run_id: runId,
164
172
  stop_reason: stopReason
165
- });
173
+ };
174
+ return runHooksForEvent(hooks, stdin);
166
175
  }
167
176
  async runPermissionRequest(permissionKind, toolCallId, toolName, toolInput) {
168
177
  const hooks = this.config.PermissionRequest;
169
178
  if (!hooks || hooks.length === 0) return emptyResult();
170
179
  const runId = this.runId;
171
180
  if (!runId) return emptyResult();
172
- return runHooksForEvent(hooks, {
181
+ const stdin = {
173
182
  ...this.baseStdinFields("PermissionRequest"),
174
183
  run_id: runId,
175
184
  permission_kind: permissionKind,
176
185
  tool_call_id: toolCallId,
177
186
  tool_name: toolName,
178
187
  ...toolInput !== void 0 ? { tool_input: toolInput } : {}
179
- });
188
+ };
189
+ return runHooksForEvent(hooks, stdin);
180
190
  }
181
191
  async runPermissionResult(permissionKind, toolCallId, toolName, decision, toolInput) {
182
192
  const hooks = this.config.PermissionResult;
183
193
  if (!hooks || hooks.length === 0) return emptyResult();
184
194
  const runId = this.runId;
185
195
  if (!runId) return emptyResult();
186
- return runHooksForEvent(hooks, {
196
+ const stdin = {
187
197
  ...this.baseStdinFields("PermissionResult"),
188
198
  run_id: runId,
189
199
  permission_kind: permissionKind,
@@ -191,25 +201,27 @@ var HookManager = class {
191
201
  tool_name: toolName,
192
202
  decision,
193
203
  ...toolInput !== void 0 ? { tool_input: toolInput } : {}
194
- });
204
+ };
205
+ return runHooksForEvent(hooks, stdin);
195
206
  }
196
207
  async runInterrupt(reason) {
197
208
  const hooks = this.config.Interrupt;
198
209
  if (!hooks || hooks.length === 0) return emptyResult();
199
210
  const runId = this.runId;
200
211
  if (!runId) return emptyResult();
201
- return runHooksForEvent(hooks, {
212
+ const stdin = {
202
213
  ...this.baseStdinFields("Interrupt"),
203
214
  run_id: runId,
204
215
  reason
205
- });
216
+ };
217
+ return runHooksForEvent(hooks, stdin);
206
218
  }
207
219
  async runSubagentStart(toolCallId, agentType, task, modelId, forked) {
208
220
  const hooks = this.config.SubagentStart;
209
221
  if (!hooks || hooks.length === 0) return emptyResult();
210
222
  const runId = this.runId;
211
223
  if (!runId) return emptyResult();
212
- return runHooksForEvent(hooks, {
224
+ const stdin = {
213
225
  ...this.baseStdinFields("SubagentStart"),
214
226
  run_id: runId,
215
227
  tool_call_id: toolCallId,
@@ -217,14 +229,15 @@ var HookManager = class {
217
229
  task,
218
230
  ...modelId !== void 0 ? { model_id: modelId } : {},
219
231
  ...forked !== void 0 ? { forked } : {}
220
- });
232
+ };
233
+ return runHooksForEvent(hooks, stdin);
221
234
  }
222
235
  async runSubagentEnd(toolCallId, agentType, result, isError, durationMs) {
223
236
  const hooks = this.config.SubagentEnd;
224
237
  if (!hooks || hooks.length === 0) return emptyResult();
225
238
  const runId = this.runId;
226
239
  if (!runId) return emptyResult();
227
- return runHooksForEvent(hooks, {
240
+ const stdin = {
228
241
  ...this.baseStdinFields("SubagentEnd"),
229
242
  run_id: runId,
230
243
  tool_call_id: toolCallId,
@@ -232,7 +245,8 @@ var HookManager = class {
232
245
  result,
233
246
  is_error: isError,
234
247
  duration_ms: durationMs
235
- });
248
+ };
249
+ return runHooksForEvent(hooks, stdin);
236
250
  }
237
251
  };
238
252
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"manager.js","names":[],"sources":["../../src/hooks/manager.ts"],"sourcesContent":["/**\n * HookManager — high-level orchestration for the hooks system.\n * Created once at startup, provides methods for each lifecycle event.\n */\nimport { DEFAULT_CONFIG_DIR } from '../constants.js';\nimport { loadHooksConfig, getProjectHooksPath, getGlobalHooksPath } from './config.js';\nimport { runHooksForEvent } from './executor.js';\nimport type {\n HooksConfig,\n HookEventResult,\n HookEventName,\n HookStdinToolEvent,\n HookStdinUserPrompt,\n HookStdinStop,\n HookStdinSession,\n HookStdinNotification,\n HookStdinAgentStart,\n HookStdinAgentEnd,\n HookStdinPermissionRequest,\n HookStdinPermissionResult,\n HookStdinInterrupt,\n HookStdinSubagentStart,\n HookStdinSubagentEnd,\n PermissionKind,\n PermissionDecision,\n InterruptReason,\n SessionWorktreeInfo,\n} from './types.js';\n\nconst emptyResult = (): HookEventResult => ({ allowed: true, results: [], warnings: [] });\n\nexport class HookManager {\n private config: HooksConfig;\n private projectDir: string;\n private sessionId: string;\n private configDirName: string;\n private homeDir?: string;\n private runId?: string;\n private worktree?: SessionWorktreeInfo;\n\n constructor(\n projectDir: string,\n sessionId: string,\n configDirName = DEFAULT_CONFIG_DIR,\n homeDir?: string,\n worktree?: SessionWorktreeInfo,\n ) {\n this.worktree = worktree;\n this.projectDir = projectDir;\n this.sessionId = sessionId;\n this.configDirName = configDirName;\n this.homeDir = homeDir;\n this.config = loadHooksConfig(projectDir, configDirName, homeDir);\n }\n\n reload(): void {\n this.config = loadHooksConfig(this.projectDir, this.configDirName, this.homeDir);\n }\n\n setSessionId(sessionId: string): void {\n this.sessionId = sessionId;\n }\n\n /** Set the active agent run id. Included as `run_id` in all hook stdin while a run is active. */\n setRunId(runId: string): void {\n this.runId = runId;\n }\n\n /** Clear the active run id. Call only after end-of-run hooks (AgentEnd, Stop) have been dispatched. */\n clearRunId(): void {\n this.runId = undefined;\n }\n\n getRunId(): string | undefined {\n return this.runId;\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, this.configDirName),\n global: getGlobalHooksPath(this.configDirName, this.homeDir),\n };\n }\n\n // =========================================================================\n // Stdin Helpers\n // =========================================================================\n\n /**\n * Build the common stdin base fields. `run_id` is included when an active run\n * is set, so every event dispatched during a run carries the same identifier.\n */\n private baseStdinFields<T extends HookEventName>(\n hook_event_name: T,\n ): {\n session_id: string;\n cwd: string;\n hook_event_name: T;\n run_id?: string;\n } {\n const base: { session_id: string; cwd: string; hook_event_name: T; run_id?: string } = {\n session_id: this.sessionId,\n cwd: this.projectDir,\n hook_event_name,\n };\n if (this.runId) base.run_id = this.runId;\n return base;\n }\n\n /**\n * Session stdin, carrying worktree identity when there is one. Emitted on both\n * session events so a hook that provisions on start can tear down on end using\n * the same fields.\n */\n private sessionStdin(hook_event_name: 'SessionStart' | 'SessionEnd'): HookStdinSession {\n const stdin: HookStdinSession = this.baseStdinFields(hook_event_name);\n if (this.worktree) {\n stdin.worktree_path = this.worktree.path;\n if (this.worktree.branch) stdin.branch = this.worktree.branch;\n if (this.worktree.mainRepoPath) stdin.main_repo_path = this.worktree.mainRepoPath;\n }\n return stdin;\n }\n\n // =========================================================================\n // Blocking Event Methods (decisions enforced by callers)\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 emptyResult();\n }\n\n const stdin: HookStdinToolEvent = {\n ...this.baseStdinFields('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 emptyResult();\n }\n\n const stdin: HookStdinToolEvent = {\n ...this.baseStdinFields('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 emptyResult();\n }\n\n const stdin: HookStdinUserPrompt = {\n ...this.baseStdinFields('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 emptyResult();\n }\n\n const stdin: HookStdinStop = {\n ...this.baseStdinFields('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 emptyResult();\n }\n\n const stdin: HookStdinSession = this.sessionStdin('SessionStart');\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 emptyResult();\n }\n\n const stdin: HookStdinSession = this.sessionStdin('SessionEnd');\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 ...this.baseStdinFields('Notification'),\n reason,\n message,\n };\n\n // Fire-and-forget — don't await\n runHooksForEvent(hooks, stdin).catch(() => {});\n }\n\n // =========================================================================\n // Lifecycle Event Methods (non-blocking: observe behavior, never enforce)\n // =========================================================================\n\n async runAgentStart(): Promise<HookEventResult> {\n const hooks = this.config.AgentStart;\n if (!hooks || hooks.length === 0) {\n return emptyResult();\n }\n const runId = this.runId;\n if (!runId) {\n return emptyResult();\n }\n\n const stdin: HookStdinAgentStart = {\n ...this.baseStdinFields('AgentStart'),\n run_id: runId,\n };\n\n return runHooksForEvent(hooks, stdin);\n }\n\n async runAgentEnd(stopReason: 'complete' | 'aborted' | 'error' | 'suspended'): Promise<HookEventResult> {\n const hooks = this.config.AgentEnd;\n if (!hooks || hooks.length === 0) {\n return emptyResult();\n }\n const runId = this.runId;\n if (!runId) {\n return emptyResult();\n }\n\n const stdin: HookStdinAgentEnd = {\n ...this.baseStdinFields('AgentEnd'),\n run_id: runId,\n stop_reason: stopReason,\n };\n\n return runHooksForEvent(hooks, stdin);\n }\n\n async runPermissionRequest(\n permissionKind: PermissionKind,\n toolCallId: string,\n toolName: string,\n toolInput?: unknown,\n ): Promise<HookEventResult> {\n const hooks = this.config.PermissionRequest;\n if (!hooks || hooks.length === 0) {\n return emptyResult();\n }\n const runId = this.runId;\n if (!runId) {\n return emptyResult();\n }\n\n const stdin: HookStdinPermissionRequest = {\n ...this.baseStdinFields('PermissionRequest'),\n run_id: runId,\n permission_kind: permissionKind,\n tool_call_id: toolCallId,\n tool_name: toolName,\n ...(toolInput !== undefined ? { tool_input: toolInput } : {}),\n };\n\n return runHooksForEvent(hooks, stdin);\n }\n\n async runPermissionResult(\n permissionKind: PermissionKind,\n toolCallId: string,\n toolName: string,\n decision: PermissionDecision,\n toolInput?: unknown,\n ): Promise<HookEventResult> {\n const hooks = this.config.PermissionResult;\n if (!hooks || hooks.length === 0) {\n return emptyResult();\n }\n\n const runId = this.runId;\n if (!runId) {\n return emptyResult();\n }\n\n const stdin: HookStdinPermissionResult = {\n ...this.baseStdinFields('PermissionResult'),\n run_id: runId,\n permission_kind: permissionKind,\n tool_call_id: toolCallId,\n tool_name: toolName,\n decision,\n ...(toolInput !== undefined ? { tool_input: toolInput } : {}),\n };\n\n return runHooksForEvent(hooks, stdin);\n }\n\n async runInterrupt(reason: InterruptReason): Promise<HookEventResult> {\n const hooks = this.config.Interrupt;\n if (!hooks || hooks.length === 0) {\n return emptyResult();\n }\n\n const runId = this.runId;\n if (!runId) {\n return emptyResult();\n }\n\n const stdin: HookStdinInterrupt = {\n ...this.baseStdinFields('Interrupt'),\n run_id: runId,\n reason,\n };\n\n return runHooksForEvent(hooks, stdin);\n }\n\n async runSubagentStart(\n toolCallId: string,\n agentType: string,\n task: string,\n modelId?: string,\n forked?: boolean,\n ): Promise<HookEventResult> {\n const hooks = this.config.SubagentStart;\n if (!hooks || hooks.length === 0) {\n return emptyResult();\n }\n const runId = this.runId;\n if (!runId) {\n return emptyResult();\n }\n\n const stdin: HookStdinSubagentStart = {\n ...this.baseStdinFields('SubagentStart'),\n run_id: runId,\n tool_call_id: toolCallId,\n agent_type: agentType,\n task,\n ...(modelId !== undefined ? { model_id: modelId } : {}),\n ...(forked !== undefined ? { forked } : {}),\n };\n\n return runHooksForEvent(hooks, stdin);\n }\n\n async runSubagentEnd(\n toolCallId: string,\n agentType: string,\n result: unknown,\n isError: boolean,\n durationMs: number,\n ): Promise<HookEventResult> {\n const hooks = this.config.SubagentEnd;\n if (!hooks || hooks.length === 0) {\n return emptyResult();\n }\n const runId = this.runId;\n if (!runId) {\n return emptyResult();\n }\n\n const stdin: HookStdinSubagentEnd = {\n ...this.baseStdinFields('SubagentEnd'),\n run_id: runId,\n tool_call_id: toolCallId,\n agent_type: agentType,\n result,\n is_error: isError,\n duration_ms: durationMs,\n };\n\n return runHooksForEvent(hooks, stdin);\n }\n}\n"],"mappings":";;;;;;;;AA6BA,MAAM,qBAAsC;CAAE,SAAS;CAAM,SAAS,CAAC;CAAG,UAAU,CAAC;AAAE;AAEvF,IAAa,cAAb,MAAyB;CACvB;CACA;CACA;CACA;CACA;CACA;CACA;CAEA,YACE,YACA,WACA,gBAAgB,oBAChB,SACA,UACA;EACA,KAAK,WAAW;EAChB,KAAK,aAAa;EAClB,KAAK,YAAY;EACjB,KAAK,gBAAgB;EACrB,KAAK,UAAU;EACf,KAAK,SAAS,gBAAgB,YAAY,eAAe,OAAO;CAClE;CAEA,SAAe;EACb,KAAK,SAAS,gBAAgB,KAAK,YAAY,KAAK,eAAe,KAAK,OAAO;CACjF;CAEA,aAAa,WAAyB;EACpC,KAAK,YAAY;CACnB;;CAGA,SAAS,OAAqB;EAC5B,KAAK,QAAQ;CACf;;CAGA,aAAmB;EACjB,KAAK,QAAQ,KAAA;CACf;CAEA,WAA+B;EAC7B,OAAO,KAAK;CACd;CAEA,WAAoB;EAClB,OAAO,OAAO,KAAK,KAAK,MAAM,CAAC,CAAC,SAAS;CAC3C;CAEA,YAAyB;EACvB,OAAO,KAAK;CACd;CAEA,iBAAsD;EACpD,OAAO;GACL,SAAS,oBAAoB,KAAK,YAAY,KAAK,aAAa;GAChE,QAAQ,mBAAmB,KAAK,eAAe,KAAK,OAAO;EAC7D;CACF;;;;;CAUA,gBACE,iBAMA;EACA,MAAM,OAAiF;GACrF,YAAY,KAAK;GACjB,KAAK,KAAK;GACV;EACF;EACA,IAAI,KAAK,OAAO,KAAK,SAAS,KAAK;EACnC,OAAO;CACT;;;;;;CAOA,aAAqB,iBAAkE;EACrF,MAAM,QAA0B,KAAK,gBAAgB,eAAe;EACpE,IAAI,KAAK,UAAU;GACjB,MAAM,gBAAgB,KAAK,SAAS;GACpC,IAAI,KAAK,SAAS,QAAQ,MAAM,SAAS,KAAK,SAAS;GACvD,IAAI,KAAK,SAAS,cAAc,MAAM,iBAAiB,KAAK,SAAS;EACvE;EACA,OAAO;CACT;CAMA,MAAM,cAAc,UAAkB,WAA8C;EAClF,MAAM,QAAQ,KAAK,OAAO;EAC1B,IAAI,CAAC,SAAS,MAAM,WAAW,GAC7B,OAAO,YAAY;EASrB,OAAO,iBAAiB,OAAO;GAL7B,GAAG,KAAK,gBAAgB,YAAY;GACpC,WAAW;GACX,YAAY;EAGqB,GAAG,EAAE,WAAW,SAAS,CAAC;CAC/D;CAEA,MAAM,eACJ,UACA,WACA,YACA,WAC0B;EAC1B,MAAM,QAAQ,KAAK,OAAO;EAC1B,IAAI,CAAC,SAAS,MAAM,WAAW,GAC7B,OAAO,YAAY;EAWrB,OAAO,iBAAiB,OAAO;GAP7B,GAAG,KAAK,gBAAgB,aAAa;GACrC,WAAW;GACX,YAAY;GACZ,aAAa;GACb,YAAY;EAGqB,GAAG,EAAE,WAAW,SAAS,CAAC;CAC/D;CAEA,MAAM,oBAAoB,aAA+C;EACvE,MAAM,QAAQ,KAAK,OAAO;EAC1B,IAAI,CAAC,SAAS,MAAM,WAAW,GAC7B,OAAO,YAAY;EAQrB,OAAO,iBAAiB,OAAO;GAJ7B,GAAG,KAAK,gBAAgB,kBAAkB;GAC1C,cAAc;EAGmB,CAAC;CACtC;CAEA,MAAM,QACJ,kBACA,YAC0B;EAC1B,MAAM,QAAQ,KAAK,OAAO;EAC1B,IAAI,CAAC,SAAS,MAAM,WAAW,GAC7B,OAAO,YAAY;EASrB,OAAO,iBAAiB,OAAO;GAL7B,GAAG,KAAK,gBAAgB,MAAM;GAC9B,mBAAmB;GACnB,aAAa;EAGoB,CAAC;CACtC;CAEA,MAAM,kBAA4C;EAChD,MAAM,QAAQ,KAAK,OAAO;EAC1B,IAAI,CAAC,SAAS,MAAM,WAAW,GAC7B,OAAO,YAAY;EAKrB,OAAO,iBAAiB,OAFQ,KAAK,aAAa,cAEf,CAAC;CACtC;CACA,MAAM,gBAA0C;EAC9C,MAAM,QAAQ,KAAK,OAAO;EAC1B,IAAI,CAAC,SAAS,MAAM,WAAW,GAC7B,OAAO,YAAY;EAKrB,OAAO,iBAAiB,OAFQ,KAAK,aAAa,YAEf,CAAC;CACtC;;;;;CAMA,gBAAgB,QAAgB,SAAwB;EACtD,MAAM,QAAQ,KAAK,OAAO;EAC1B,IAAI,CAAC,SAAS,MAAM,WAAW,GAAG;EASlC,iBAAiB,OAAO;GANtB,GAAG,KAAK,gBAAgB,cAAc;GACtC;GACA;EAI0B,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;CAC/C;CAMA,MAAM,gBAA0C;EAC9C,MAAM,QAAQ,KAAK,OAAO;EAC1B,IAAI,CAAC,SAAS,MAAM,WAAW,GAC7B,OAAO,YAAY;EAErB,MAAM,QAAQ,KAAK;EACnB,IAAI,CAAC,OACH,OAAO,YAAY;EAQrB,OAAO,iBAAiB,OAAO;GAJ7B,GAAG,KAAK,gBAAgB,YAAY;GACpC,QAAQ;EAGyB,CAAC;CACtC;CAEA,MAAM,YAAY,YAAsF;EACtG,MAAM,QAAQ,KAAK,OAAO;EAC1B,IAAI,CAAC,SAAS,MAAM,WAAW,GAC7B,OAAO,YAAY;EAErB,MAAM,QAAQ,KAAK;EACnB,IAAI,CAAC,OACH,OAAO,YAAY;EASrB,OAAO,iBAAiB,OAAO;GAL7B,GAAG,KAAK,gBAAgB,UAAU;GAClC,QAAQ;GACR,aAAa;EAGoB,CAAC;CACtC;CAEA,MAAM,qBACJ,gBACA,YACA,UACA,WAC0B;EAC1B,MAAM,QAAQ,KAAK,OAAO;EAC1B,IAAI,CAAC,SAAS,MAAM,WAAW,GAC7B,OAAO,YAAY;EAErB,MAAM,QAAQ,KAAK;EACnB,IAAI,CAAC,OACH,OAAO,YAAY;EAYrB,OAAO,iBAAiB,OAAO;GAR7B,GAAG,KAAK,gBAAgB,mBAAmB;GAC3C,QAAQ;GACR,iBAAiB;GACjB,cAAc;GACd,WAAW;GACX,GAAI,cAAc,KAAA,IAAY,EAAE,YAAY,UAAU,IAAI,CAAC;EAG1B,CAAC;CACtC;CAEA,MAAM,oBACJ,gBACA,YACA,UACA,UACA,WAC0B;EAC1B,MAAM,QAAQ,KAAK,OAAO;EAC1B,IAAI,CAAC,SAAS,MAAM,WAAW,GAC7B,OAAO,YAAY;EAGrB,MAAM,QAAQ,KAAK;EACnB,IAAI,CAAC,OACH,OAAO,YAAY;EAarB,OAAO,iBAAiB,OAAO;GAT7B,GAAG,KAAK,gBAAgB,kBAAkB;GAC1C,QAAQ;GACR,iBAAiB;GACjB,cAAc;GACd,WAAW;GACX;GACA,GAAI,cAAc,KAAA,IAAY,EAAE,YAAY,UAAU,IAAI,CAAC;EAG1B,CAAC;CACtC;CAEA,MAAM,aAAa,QAAmD;EACpE,MAAM,QAAQ,KAAK,OAAO;EAC1B,IAAI,CAAC,SAAS,MAAM,WAAW,GAC7B,OAAO,YAAY;EAGrB,MAAM,QAAQ,KAAK;EACnB,IAAI,CAAC,OACH,OAAO,YAAY;EASrB,OAAO,iBAAiB,OAAO;GAL7B,GAAG,KAAK,gBAAgB,WAAW;GACnC,QAAQ;GACR;EAGiC,CAAC;CACtC;CAEA,MAAM,iBACJ,YACA,WACA,MACA,SACA,QAC0B;EAC1B,MAAM,QAAQ,KAAK,OAAO;EAC1B,IAAI,CAAC,SAAS,MAAM,WAAW,GAC7B,OAAO,YAAY;EAErB,MAAM,QAAQ,KAAK;EACnB,IAAI,CAAC,OACH,OAAO,YAAY;EAarB,OAAO,iBAAiB,OAAO;GAT7B,GAAG,KAAK,gBAAgB,eAAe;GACvC,QAAQ;GACR,cAAc;GACd,YAAY;GACZ;GACA,GAAI,YAAY,KAAA,IAAY,EAAE,UAAU,QAAQ,IAAI,CAAC;GACrD,GAAI,WAAW,KAAA,IAAY,EAAE,OAAO,IAAI,CAAC;EAGR,CAAC;CACtC;CAEA,MAAM,eACJ,YACA,WACA,QACA,SACA,YAC0B;EAC1B,MAAM,QAAQ,KAAK,OAAO;EAC1B,IAAI,CAAC,SAAS,MAAM,WAAW,GAC7B,OAAO,YAAY;EAErB,MAAM,QAAQ,KAAK;EACnB,IAAI,CAAC,OACH,OAAO,YAAY;EAarB,OAAO,iBAAiB,OAAO;GAT7B,GAAG,KAAK,gBAAgB,aAAa;GACrC,QAAQ;GACR,cAAc;GACd,YAAY;GACZ;GACA,UAAU;GACV,aAAa;EAGoB,CAAC;CACtC;AACF"}
1
+ {"version":3,"file":"manager.js","names":[],"sources":["../../src/hooks/manager.ts"],"sourcesContent":["/**\n * HookManager — high-level orchestration for the hooks system.\n * Created once at startup, provides methods for each lifecycle event.\n */\nimport { DEFAULT_CONFIG_DIR } from '../constants.js';\nimport { loadHooksConfig, getProjectHooksPath, getGlobalHooksPath } from './config.js';\nimport { runHooksForEvent } from './executor.js';\nimport type {\n HooksConfig,\n HookEventResult,\n HookEventName,\n HookStdinToolEvent,\n HookStdinUserPrompt,\n HookStdinStop,\n HookStdinSession,\n HookStdinNotification,\n HookStdinAgentStart,\n HookStdinAgentEnd,\n HookStdinPermissionRequest,\n HookStdinPermissionResult,\n HookStdinInterrupt,\n HookStdinSubagentStart,\n HookStdinSubagentEnd,\n PermissionKind,\n PermissionDecision,\n InterruptReason,\n SessionWorktreeInfo,\n} from './types.js';\n\nconst emptyResult = (): HookEventResult => ({ allowed: true, results: [], warnings: [] });\n\nexport class HookManager {\n private config: HooksConfig;\n private projectDir: string;\n private sessionId: string;\n private configDirName: string;\n private homeDir?: string;\n private runId?: string;\n private worktree?: SessionWorktreeInfo;\n\n constructor(\n projectDir: string,\n sessionId: string,\n configDirName = DEFAULT_CONFIG_DIR,\n homeDir?: string,\n worktree?: SessionWorktreeInfo,\n ) {\n this.worktree = worktree;\n this.projectDir = projectDir;\n this.sessionId = sessionId;\n this.configDirName = configDirName;\n this.homeDir = homeDir;\n this.config = loadHooksConfig(projectDir, configDirName, homeDir);\n }\n\n reload(): void {\n this.config = loadHooksConfig(this.projectDir, this.configDirName, this.homeDir);\n }\n\n setSessionId(sessionId: string): void {\n this.sessionId = sessionId;\n }\n\n /** Set the active agent run id. Included as `run_id` in all hook stdin while a run is active. */\n setRunId(runId: string): void {\n this.runId = runId;\n }\n\n /** Clear the active run id. Call only after end-of-run hooks (AgentEnd, Stop) have been dispatched. */\n clearRunId(): void {\n this.runId = undefined;\n }\n\n getRunId(): string | undefined {\n return this.runId;\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, this.configDirName),\n global: getGlobalHooksPath(this.configDirName, this.homeDir),\n };\n }\n\n // =========================================================================\n // Stdin Helpers\n // =========================================================================\n\n /**\n * Build the common stdin base fields. `run_id` is included when an active run\n * is set, so every event dispatched during a run carries the same identifier.\n */\n private baseStdinFields<T extends HookEventName>(\n hook_event_name: T,\n ): {\n session_id: string;\n cwd: string;\n hook_event_name: T;\n run_id?: string;\n } {\n const base: { session_id: string; cwd: string; hook_event_name: T; run_id?: string } = {\n session_id: this.sessionId,\n cwd: this.projectDir,\n hook_event_name,\n };\n if (this.runId) base.run_id = this.runId;\n return base;\n }\n\n /**\n * Session stdin, carrying worktree identity when there is one. Emitted on both\n * session events so a hook that provisions on start can tear down on end using\n * the same fields.\n */\n private sessionStdin(hook_event_name: 'SessionStart' | 'SessionEnd'): HookStdinSession {\n const stdin: HookStdinSession = this.baseStdinFields(hook_event_name);\n if (this.worktree) {\n stdin.worktree_path = this.worktree.path;\n if (this.worktree.branch) stdin.branch = this.worktree.branch;\n if (this.worktree.mainRepoPath) stdin.main_repo_path = this.worktree.mainRepoPath;\n }\n return stdin;\n }\n\n // =========================================================================\n // Blocking Event Methods (decisions enforced by callers)\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 emptyResult();\n }\n\n const stdin: HookStdinToolEvent = {\n ...this.baseStdinFields('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 emptyResult();\n }\n\n const stdin: HookStdinToolEvent = {\n ...this.baseStdinFields('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 emptyResult();\n }\n\n const stdin: HookStdinUserPrompt = {\n ...this.baseStdinFields('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 emptyResult();\n }\n\n const stdin: HookStdinStop = {\n ...this.baseStdinFields('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 emptyResult();\n }\n\n const stdin: HookStdinSession = this.sessionStdin('SessionStart');\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 emptyResult();\n }\n\n const stdin: HookStdinSession = this.sessionStdin('SessionEnd');\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 ...this.baseStdinFields('Notification'),\n reason,\n message,\n };\n\n // Fire-and-forget — don't await\n runHooksForEvent(hooks, stdin).catch(() => {});\n }\n\n // =========================================================================\n // Lifecycle Event Methods (non-blocking: observe behavior, never enforce)\n // =========================================================================\n\n async runAgentStart(): Promise<HookEventResult> {\n const hooks = this.config.AgentStart;\n if (!hooks || hooks.length === 0) {\n return emptyResult();\n }\n const runId = this.runId;\n if (!runId) {\n return emptyResult();\n }\n\n const stdin: HookStdinAgentStart = {\n ...this.baseStdinFields('AgentStart'),\n run_id: runId,\n };\n\n return runHooksForEvent(hooks, stdin);\n }\n\n async runAgentEnd(stopReason: 'complete' | 'aborted' | 'error' | 'suspended'): Promise<HookEventResult> {\n const hooks = this.config.AgentEnd;\n if (!hooks || hooks.length === 0) {\n return emptyResult();\n }\n const runId = this.runId;\n if (!runId) {\n return emptyResult();\n }\n\n const stdin: HookStdinAgentEnd = {\n ...this.baseStdinFields('AgentEnd'),\n run_id: runId,\n stop_reason: stopReason,\n };\n\n return runHooksForEvent(hooks, stdin);\n }\n\n async runPermissionRequest(\n permissionKind: PermissionKind,\n toolCallId: string,\n toolName: string,\n toolInput?: unknown,\n ): Promise<HookEventResult> {\n const hooks = this.config.PermissionRequest;\n if (!hooks || hooks.length === 0) {\n return emptyResult();\n }\n const runId = this.runId;\n if (!runId) {\n return emptyResult();\n }\n\n const stdin: HookStdinPermissionRequest = {\n ...this.baseStdinFields('PermissionRequest'),\n run_id: runId,\n permission_kind: permissionKind,\n tool_call_id: toolCallId,\n tool_name: toolName,\n ...(toolInput !== undefined ? { tool_input: toolInput } : {}),\n };\n\n return runHooksForEvent(hooks, stdin);\n }\n\n async runPermissionResult(\n permissionKind: PermissionKind,\n toolCallId: string,\n toolName: string,\n decision: PermissionDecision,\n toolInput?: unknown,\n ): Promise<HookEventResult> {\n const hooks = this.config.PermissionResult;\n if (!hooks || hooks.length === 0) {\n return emptyResult();\n }\n\n const runId = this.runId;\n if (!runId) {\n return emptyResult();\n }\n\n const stdin: HookStdinPermissionResult = {\n ...this.baseStdinFields('PermissionResult'),\n run_id: runId,\n permission_kind: permissionKind,\n tool_call_id: toolCallId,\n tool_name: toolName,\n decision,\n ...(toolInput !== undefined ? { tool_input: toolInput } : {}),\n };\n\n return runHooksForEvent(hooks, stdin);\n }\n\n async runInterrupt(reason: InterruptReason): Promise<HookEventResult> {\n const hooks = this.config.Interrupt;\n if (!hooks || hooks.length === 0) {\n return emptyResult();\n }\n\n const runId = this.runId;\n if (!runId) {\n return emptyResult();\n }\n\n const stdin: HookStdinInterrupt = {\n ...this.baseStdinFields('Interrupt'),\n run_id: runId,\n reason,\n };\n\n return runHooksForEvent(hooks, stdin);\n }\n\n async runSubagentStart(\n toolCallId: string,\n agentType: string,\n task: string,\n modelId?: string,\n forked?: boolean,\n ): Promise<HookEventResult> {\n const hooks = this.config.SubagentStart;\n if (!hooks || hooks.length === 0) {\n return emptyResult();\n }\n const runId = this.runId;\n if (!runId) {\n return emptyResult();\n }\n\n const stdin: HookStdinSubagentStart = {\n ...this.baseStdinFields('SubagentStart'),\n run_id: runId,\n tool_call_id: toolCallId,\n agent_type: agentType,\n task,\n ...(modelId !== undefined ? { model_id: modelId } : {}),\n ...(forked !== undefined ? { forked } : {}),\n };\n\n return runHooksForEvent(hooks, stdin);\n }\n\n async runSubagentEnd(\n toolCallId: string,\n agentType: string,\n result: unknown,\n isError: boolean,\n durationMs: number,\n ): Promise<HookEventResult> {\n const hooks = this.config.SubagentEnd;\n if (!hooks || hooks.length === 0) {\n return emptyResult();\n }\n const runId = this.runId;\n if (!runId) {\n return emptyResult();\n }\n\n const stdin: HookStdinSubagentEnd = {\n ...this.baseStdinFields('SubagentEnd'),\n run_id: runId,\n tool_call_id: toolCallId,\n agent_type: agentType,\n result,\n is_error: isError,\n duration_ms: durationMs,\n };\n\n return runHooksForEvent(hooks, stdin);\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -87,7 +87,6 @@ import { DEFAULT_GOAL_JUDGE_PROMPT } from "@mastra/core/tools";
87
87
  import { GithubSignals } from "@mastra/github-signals";
88
88
  import { LibSQLStore, LibSQLVector } from "@mastra/libsql";
89
89
  import { MastraPlatformExporter, MastraStorageExporter, Observability, SensitiveDataFilter } from "@mastra/observability";
90
- import { PostgresStore } from "@mastra/pg";
91
90
  //#region src/index.ts
92
91
  const CODE_AGENT_ID = "code-agent";
93
92
  const MASTRACODE_TRANSIENT_CONNECTION_MAX_RETRIES = 10;
@@ -228,7 +227,7 @@ function hasAncestorClassNamed(value, className) {
228
227
  function resolveInjectedStorageBackend(storage, configuredBackend) {
229
228
  if (configuredBackend) return configuredBackend;
230
229
  if (storage instanceof LibSQLStore || hasAncestorClassNamed(storage, "LibSQLStore")) return "libsql";
231
- if (storage instanceof PostgresStore || hasAncestorClassNamed(storage, "PostgresStore")) return "pg";
230
+ if (hasAncestorClassNamed(storage, "PostgresStore")) return "pg";
232
231
  throw new Error("storageBackend is required when injecting a custom storage instance.");
233
232
  }
234
233
  /** Whether the model router would resolve `modelId` through a gateway outside `sdkGatewayIds`. */
@@ -284,8 +283,9 @@ async function createMastraCodeAgentController(config) {
284
283
  });
285
284
  }
286
285
  const mgApiKey = process.env["MASTRA_GATEWAY_API_KEY"] ?? storedGatewayKey;
286
+ const mastraGatewayBaseUrl = (process.env["MASTRA_GATEWAY_URL"] ?? storedGatewayUrl ?? "https://gateway-api.mastra.ai").replace(/\/+$/, "").replace(/\/v1$/, "");
287
287
  const mastraCodeGateway = createMastraCodeGateway({
288
- mastraGatewayBaseUrl: (process.env["MASTRA_GATEWAY_URL"] ?? storedGatewayUrl ?? "https://gateway-api.mastra.ai").replace(/\/+$/, "").replace(/\/v1$/, ""),
288
+ mastraGatewayBaseUrl,
289
289
  mastraGatewayApiKey: mgApiKey,
290
290
  routeThroughMastraGateway: false,
291
291
  settingsPath: config?.settingsPath
@@ -430,6 +430,14 @@ async function createMastraCodeAgentController(config) {
430
430
  owner: `${ownerId}:${process.pid}:${randomUUID()}`,
431
431
  onError: (error) => console.warn("Notification dispatch failed:", error)
432
432
  });
433
+ const resolveWakeOwner = async (target, leases) => {
434
+ const owner = await findWakeSession(controller, liveSessions, target, leases);
435
+ if (owner || !config?.resumeWakeSession) return owner;
436
+ await config.resumeWakeSession(target);
437
+ const resumed = await findWakeSession(controller, liveSessions, target, leases);
438
+ if (!resumed) throw new Error(`No session owns resource ${target.resourceId} to run its wake on thread ${target.threadId}.`);
439
+ return resumed;
440
+ };
433
441
  const getWakeStreamOptions = async ({ resourceId, threadId, owner }) => {
434
442
  const wake = owner ?? await findWakeSession(controller, liveSessions, {
435
443
  resourceId,
@@ -559,7 +567,11 @@ async function createMastraCodeAgentController(config) {
559
567
  resourceId: schedule.resourceId,
560
568
  threadId: schedule.threadId
561
569
  };
562
- const streamOptions = await getWakeStreamOptions(target);
570
+ const owner = await resolveWakeOwner(target);
571
+ const streamOptions = owner && owner !== FOREIGN_THREAD ? await getWakeStreamOptions({
572
+ ...target,
573
+ owner
574
+ }) : void 0;
563
575
  const accepted = await codeAgent.sendSignal({
564
576
  type: "user",
565
577
  tagName: "user",
@@ -570,7 +582,8 @@ async function createMastraCodeAgentController(config) {
570
582
  ifActive: { behavior: "deliver" },
571
583
  ifIdle: {
572
584
  behavior: "wake",
573
- ...streamOptions ? { streamOptions } : {}
585
+ ...streamOptions ? { streamOptions } : {},
586
+ ...owner === FOREIGN_THREAD ? { requireClaimedOwner: true } : {}
574
587
  }
575
588
  }).accepted;
576
589
  if (accepted.action === "blocked" || accepted.action === "discard") throw new Error(`the agent did not accept the prompt (${accepted.action})`);
@@ -633,12 +646,13 @@ async function createMastraCodeAgentController(config) {
633
646
  const projectPath = state?.projectPath ?? project.rootPath;
634
647
  const untrusted = state?.untrustedCheckout === true && typeof state?.baseRef === "string";
635
648
  const roots = sessionInstructionRoots(projectPath, state?.instructionRoots);
636
- return instructionSourcePaths(loadSessionInstructions({
649
+ const sources = loadSessionInstructions({
637
650
  workingDir: projectPath,
638
651
  instructionRoots: state?.instructionRoots,
639
652
  untrustedCheckout: untrusted,
640
653
  baseRef: untrusted ? state?.baseRef : void 0
641
- }), roots);
654
+ });
655
+ return instructionSourcePaths(sources, roots);
642
656
  }
643
657
  })
644
658
  ];
@@ -680,15 +694,16 @@ async function createMastraCodeAgentController(config) {
680
694
  return NO_PLUGIN_PROCESSORS;
681
695
  }
682
696
  };
683
- const codeAgent = wrapExperimentalAgent(createCodingAgent({
697
+ const baseCodeAgent = createCodingAgent({
684
698
  id: CODE_AGENT_ID,
685
699
  name: "Code Agent",
686
700
  workspace: void 0,
687
701
  instructions: async ({ requestContext }) => {
688
702
  const configured = config?.hostInstructions;
703
+ const hostInstructions = typeof configured === "function" ? await configured({ requestContext }) : configured;
689
704
  return getDynamicInstructions({
690
705
  requestContext,
691
- hostInstructions: typeof configured === "function" ? await configured({ requestContext }) : configured,
706
+ hostInstructions,
692
707
  coAuthor: config?.coAuthor,
693
708
  hasSubconscious,
694
709
  hasSubagents: subagents.length > 0,
@@ -696,7 +711,8 @@ async function createMastraCodeAgentController(config) {
696
711
  });
697
712
  },
698
713
  model: withCredentialTenantPreparation(async (ctx) => {
699
- const hasSessionLevel = isThinkingLevelSetting(ctx.requestContext.get("controller")?.state?.thinkingLevel);
714
+ const controller = ctx.requestContext.get("controller");
715
+ const hasSessionLevel = isThinkingLevelSetting(controller?.state?.thinkingLevel);
700
716
  return getDynamicModel(ctx, config?.settingsPath, {
701
717
  modeless,
702
718
  defaultThinkingLevel: hasSessionLevel ? void 0 : await config?.resolveDefaultThinkingLevel?.(ctx)
@@ -709,12 +725,7 @@ async function createMastraCodeAgentController(config) {
709
725
  resourceId: input.record.resourceId,
710
726
  threadId: input.record.threadId
711
727
  };
712
- let owner = await findWakeSession(controller, liveSessions, target, notificationDispatchLeases);
713
- if (!owner && config?.resumeWakeSession && (decision.action === "deliver" || decision.action === "summarize")) {
714
- await config.resumeWakeSession(target);
715
- owner = await findWakeSession(controller, liveSessions, target, notificationDispatchLeases);
716
- if (!owner) throw new Error(`No session owns resource ${target.resourceId} to run its wake on thread ${target.threadId}.`);
717
- }
728
+ const owner = decision.action === "deliver" || decision.action === "summarize" ? await resolveWakeOwner(target, notificationDispatchLeases) : await findWakeSession(controller, liveSessions, target, notificationDispatchLeases);
718
729
  if (owner === FOREIGN_THREAD) return {
719
730
  ...decision,
720
731
  hold: true
@@ -820,7 +831,8 @@ async function createMastraCodeAgentController(config) {
820
831
  })
821
832
  ],
822
833
  maxProcessorRetries: MASTRACODE_MAX_PROCESSOR_RETRIES
823
- }), experimentalAgent);
834
+ });
835
+ const codeAgent = wrapExperimentalAgent(baseCodeAgent, experimentalAgent);
824
836
  const planMode = createPlanMode(!disabledBuiltinTools.has("submit_plan"));
825
837
  const defaultModes = [
826
838
  {
@@ -847,7 +859,7 @@ async function createMastraCodeAgentController(config) {
847
859
  ];
848
860
  const intervalHandlers = config?.intervalHandlers ?? [{
849
861
  id: "gateway-sync",
850
- intervalMs: 300 * 1e3,
862
+ intervalMs: 3e5,
851
863
  immediate: false,
852
864
  handler: () => syncGateways()
853
865
  }];