@mastra/code-sdk 1.0.3-alpha.0 → 1.1.0-alpha.2

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 (258) hide show
  1. package/CHANGELOG.md +49 -0
  2. package/dist/acp/agent.js +155 -167
  3. package/dist/acp/agent.js.map +1 -1
  4. package/dist/acp/event-mapper.js +193 -168
  5. package/dist/acp/event-mapper.js.map +1 -1
  6. package/dist/acp/index.js +60 -49
  7. package/dist/acp/index.js.map +1 -1
  8. package/dist/acp/server.js +31 -30
  9. package/dist/acp/server.js.map +1 -1
  10. package/dist/acp.js +1 -4
  11. package/dist/agents/credential-resolver.js +40 -29
  12. package/dist/agents/credential-resolver.js.map +1 -1
  13. package/dist/agents/custom-provider-source.js +16 -9
  14. package/dist/agents/custom-provider-source.js.map +1 -1
  15. package/dist/agents/instructions.js +27 -36
  16. package/dist/agents/instructions.js.map +1 -1
  17. package/dist/agents/mastracode-gateway.js +355 -428
  18. package/dist/agents/mastracode-gateway.js.map +1 -1
  19. package/dist/agents/memory.js +87 -78
  20. package/dist/agents/memory.js.map +1 -1
  21. package/dist/agents/model.js +114 -119
  22. package/dist/agents/model.js.map +1 -1
  23. package/dist/agents/modes/build.js +12 -13
  24. package/dist/agents/modes/build.js.map +1 -1
  25. package/dist/agents/modes/explore.js +14 -13
  26. package/dist/agents/modes/explore.js.map +1 -1
  27. package/dist/agents/modes/plan.js +14 -15
  28. package/dist/agents/modes/plan.js.map +1 -1
  29. package/dist/agents/prompts/agent-instructions.js +78 -69
  30. package/dist/agents/prompts/agent-instructions.js.map +1 -1
  31. package/dist/agents/prompts/build.js +19 -16
  32. package/dist/agents/prompts/build.js.map +1 -1
  33. package/dist/agents/prompts/fast.js +8 -4
  34. package/dist/agents/prompts/fast.js.map +1 -1
  35. package/dist/agents/prompts/index.js +48 -47
  36. package/dist/agents/prompts/index.js.map +1 -1
  37. package/dist/agents/prompts/model.js +6 -5
  38. package/dist/agents/prompts/model.js.map +1 -1
  39. package/dist/agents/prompts/plan.js +20 -16
  40. package/dist/agents/prompts/plan.js.map +1 -1
  41. package/dist/agents/prompts/tool-guidance.js +77 -109
  42. package/dist/agents/prompts/tool-guidance.js.map +1 -1
  43. package/dist/agents/sandbox-filesystem.js +245 -259
  44. package/dist/agents/sandbox-filesystem.js.map +1 -1
  45. package/dist/agents/sandbox-reattach.js +9 -11
  46. package/dist/agents/sandbox-reattach.js.map +1 -1
  47. package/dist/agents/thread-caveman-state.js +92 -81
  48. package/dist/agents/thread-caveman-state.js.map +1 -1
  49. package/dist/agents/tool-availability.js +62 -80
  50. package/dist/agents/tool-availability.js.map +1 -1
  51. package/dist/agents/tools.js +99 -139
  52. package/dist/agents/tools.js.map +1 -1
  53. package/dist/agents/workspace.js +232 -225
  54. package/dist/agents/workspace.js.map +1 -1
  55. package/dist/analytics.js +139 -128
  56. package/dist/analytics.js.map +1 -1
  57. package/dist/auth/authorization-input.js +39 -25
  58. package/dist/auth/authorization-input.js.map +1 -1
  59. package/dist/auth/device-code.js +112 -80
  60. package/dist/auth/device-code.js.map +1 -1
  61. package/dist/auth/index.js +2 -9
  62. package/dist/auth/pkce.js +27 -16
  63. package/dist/auth/pkce.js.map +1 -1
  64. package/dist/auth/providers/anthropic.js +107 -93
  65. package/dist/auth/providers/anthropic.js.map +1 -1
  66. package/dist/auth/providers/github-copilot.js +304 -293
  67. package/dist/auth/providers/github-copilot.js.map +1 -1
  68. package/dist/auth/providers/openai-codex.js +442 -460
  69. package/dist/auth/providers/openai-codex.js.map +1 -1
  70. package/dist/auth/providers/xai.js +179 -145
  71. package/dist/auth/providers/xai.js.map +1 -1
  72. package/dist/auth/storage.js +182 -175
  73. package/dist/auth/storage.js.map +1 -1
  74. package/dist/auth/types.js +1 -1
  75. package/dist/clipboard/index.js +206 -172
  76. package/dist/clipboard/index.js.map +1 -1
  77. package/dist/constants.js +11 -16
  78. package/dist/constants.js.map +1 -1
  79. package/dist/error-classification.js +19 -11
  80. package/dist/error-classification.js.map +1 -1
  81. package/dist/evals/context-builder.js +145 -104
  82. package/dist/evals/context-builder.js.map +1 -1
  83. package/dist/evals/index.js +4 -7
  84. package/dist/evals/scorers/classify-command.js +62 -41
  85. package/dist/evals/scorers/classify-command.js.map +1 -1
  86. package/dist/evals/scorers/efficiency.js +239 -181
  87. package/dist/evals/scorers/efficiency.js.map +1 -1
  88. package/dist/evals/scorers/extract-tools.js +51 -47
  89. package/dist/evals/scorers/extract-tools.js.map +1 -1
  90. package/dist/evals/scorers/index.js +1 -5
  91. package/dist/evals/scorers/outcome.js +321 -212
  92. package/dist/evals/scorers/outcome.js.map +1 -1
  93. package/dist/goal-manager.js +266 -261
  94. package/dist/goal-manager.js.map +1 -1
  95. package/dist/goal-signal.js +14 -13
  96. package/dist/goal-signal.js.map +1 -1
  97. package/dist/headless/cli.js +153 -154
  98. package/dist/headless/cli.js.map +1 -1
  99. package/dist/headless/flags.js +180 -178
  100. package/dist/headless/flags.js.map +1 -1
  101. package/dist/headless/format.js +72 -71
  102. package/dist/headless/format.js.map +1 -1
  103. package/dist/headless/index.js +5 -31
  104. package/dist/headless/policy.js +35 -31
  105. package/dist/headless/policy.js.map +1 -1
  106. package/dist/headless/run-mc.js +332 -334
  107. package/dist/headless/run-mc.js.map +1 -1
  108. package/dist/headless/types.js +16 -7
  109. package/dist/headless/types.js.map +1 -1
  110. package/dist/hooks/config.js +56 -61
  111. package/dist/hooks/config.js.map +1 -1
  112. package/dist/hooks/executor.js +118 -116
  113. package/dist/hooks/executor.js.map +1 -1
  114. package/dist/hooks/index.js +4 -15
  115. package/dist/hooks/manager.js +221 -280
  116. package/dist/hooks/manager.js.map +1 -1
  117. package/dist/hooks/types.js +5 -4
  118. package/dist/hooks/types.js.map +1 -1
  119. package/dist/index.d.ts.map +1 -1
  120. package/dist/index.js +632 -712
  121. package/dist/index.js.map +1 -1
  122. package/dist/ipc/ipc-reporter.js +19 -22
  123. package/dist/ipc/ipc-reporter.js.map +1 -1
  124. package/dist/lsp/client.js +248 -306
  125. package/dist/lsp/client.js.map +1 -1
  126. package/dist/lsp/index.js +1 -6
  127. package/dist/lsp/language.js +39 -43
  128. package/dist/lsp/language.js.map +1 -1
  129. package/dist/lsp/manager.js +78 -93
  130. package/dist/lsp/manager.js.map +1 -1
  131. package/dist/lsp/server.js +151 -120
  132. package/dist/lsp/server.js.map +1 -1
  133. package/dist/lsp/workspace.js +50 -47
  134. package/dist/lsp/workspace.js.map +1 -1
  135. package/dist/mcp/config.js +210 -199
  136. package/dist/mcp/config.js.map +1 -1
  137. package/dist/mcp/index.js +2 -9
  138. package/dist/mcp/manager.js +482 -475
  139. package/dist/mcp/manager.js.map +1 -1
  140. package/dist/mcp/types.js +1 -1
  141. package/dist/onboarding/custom-packs.js +14 -17
  142. package/dist/onboarding/custom-packs.js.map +1 -1
  143. package/dist/onboarding/custom-providers.js +22 -20
  144. package/dist/onboarding/custom-providers.js.map +1 -1
  145. package/dist/onboarding/index.d.ts +1 -1
  146. package/dist/onboarding/index.d.ts.map +1 -1
  147. package/dist/onboarding/index.js +3 -21
  148. package/dist/onboarding/om-settings.d.ts +5 -0
  149. package/dist/onboarding/om-settings.d.ts.map +1 -1
  150. package/dist/onboarding/om-settings.js +41 -20
  151. package/dist/onboarding/om-settings.js.map +1 -1
  152. package/dist/onboarding/packs.d.ts +4 -6
  153. package/dist/onboarding/packs.d.ts.map +1 -1
  154. package/dist/onboarding/packs.js +154 -105
  155. package/dist/onboarding/packs.js.map +1 -1
  156. package/dist/onboarding/settings.js +575 -517
  157. package/dist/onboarding/settings.js.map +1 -1
  158. package/dist/permissions.js +112 -99
  159. package/dist/permissions.js.map +1 -1
  160. package/dist/plugin.js +21 -23
  161. package/dist/plugin.js.map +1 -1
  162. package/dist/plugins/dependencies.js +64 -87
  163. package/dist/plugins/dependencies.js.map +1 -1
  164. package/dist/plugins/install.js +159 -169
  165. package/dist/plugins/install.js.map +1 -1
  166. package/dist/plugins/loader.js +170 -185
  167. package/dist/plugins/loader.js.map +1 -1
  168. package/dist/plugins/manager.js +374 -380
  169. package/dist/plugins/manager.js.map +1 -1
  170. package/dist/plugins/manifest.js +38 -63
  171. package/dist/plugins/manifest.js.map +1 -1
  172. package/dist/plugins/package-link.js +48 -64
  173. package/dist/plugins/package-link.js.map +1 -1
  174. package/dist/plugins/paths.js +18 -19
  175. package/dist/plugins/paths.js.map +1 -1
  176. package/dist/plugins/registry.js +97 -81
  177. package/dist/plugins/registry.js.map +1 -1
  178. package/dist/plugins/scaffold.js +62 -98
  179. package/dist/plugins/scaffold.js.map +1 -1
  180. package/dist/plugins/types.js +1 -1
  181. package/dist/processors/plan-rejection-abort.js +45 -44
  182. package/dist/processors/plan-rejection-abort.js.map +1 -1
  183. package/dist/providers/amazon-bedrock-gateway.js +134 -125
  184. package/dist/providers/amazon-bedrock-gateway.js.map +1 -1
  185. package/dist/providers/amazon-bedrock.js +68 -47
  186. package/dist/providers/amazon-bedrock.js.map +1 -1
  187. package/dist/providers/claude-max.js +153 -133
  188. package/dist/providers/claude-max.js.map +1 -1
  189. package/dist/providers/github-copilot.js +232 -230
  190. package/dist/providers/github-copilot.js.map +1 -1
  191. package/dist/providers/openai-codex.js +271 -260
  192. package/dist/providers/openai-codex.js.map +1 -1
  193. package/dist/providers/xai.js +57 -50
  194. package/dist/providers/xai.js.map +1 -1
  195. package/dist/schema.js +91 -89
  196. package/dist/schema.js.map +1 -1
  197. package/dist/theme-palette.js +18 -14
  198. package/dist/theme-palette.js.map +1 -1
  199. package/dist/tool-names.js +46 -37
  200. package/dist/tool-names.js.map +1 -1
  201. package/dist/tools/index.js +2 -8
  202. package/dist/tools/request-sandbox-access.js +71 -80
  203. package/dist/tools/request-sandbox-access.js.map +1 -1
  204. package/dist/tools/utils.js +26 -16
  205. package/dist/tools/utils.js.map +1 -1
  206. package/dist/tools/web-search.js +51 -55
  207. package/dist/tools/web-search.js.map +1 -1
  208. package/dist/utils/binaries.js +65 -61
  209. package/dist/utils/binaries.js.map +1 -1
  210. package/dist/utils/debug-log.js +51 -47
  211. package/dist/utils/debug-log.js.map +1 -1
  212. package/dist/utils/errors.js +157 -192
  213. package/dist/utils/errors.js.map +1 -1
  214. package/dist/utils/gateway-sync.js +49 -37
  215. package/dist/utils/gateway-sync.js.map +1 -1
  216. package/dist/utils/path-security.js +7 -6
  217. package/dist/utils/path-security.js.map +1 -1
  218. package/dist/utils/plan-diff.js +58 -39
  219. package/dist/utils/plan-diff.js.map +1 -1
  220. package/dist/utils/plans.js +92 -74
  221. package/dist/utils/plans.js.map +1 -1
  222. package/dist/utils/project.js +318 -256
  223. package/dist/utils/project.js.map +1 -1
  224. package/dist/utils/signals-pubsub.js +117 -99
  225. package/dist/utils/signals-pubsub.js.map +1 -1
  226. package/dist/utils/slash-command-loader.js +118 -154
  227. package/dist/utils/slash-command-loader.js.map +1 -1
  228. package/dist/utils/slash-command-processor.js +92 -83
  229. package/dist/utils/slash-command-processor.js.map +1 -1
  230. package/dist/utils/stdin-pipe.js +87 -63
  231. package/dist/utils/stdin-pipe.js.map +1 -1
  232. package/dist/utils/storage-factory.js +104 -84
  233. package/dist/utils/storage-factory.js.map +1 -1
  234. package/dist/utils/storage-maintenance.js +249 -211
  235. package/dist/utils/storage-maintenance.js.map +1 -1
  236. package/dist/utils/thread-lock.js +96 -92
  237. package/dist/utils/thread-lock.js.map +1 -1
  238. package/dist/utils/token-estimator.js +12 -12
  239. package/dist/utils/token-estimator.js.map +1 -1
  240. package/dist/utils/update-check.d.ts +1 -1
  241. package/dist/utils/update-check.js +341 -259
  242. package/dist/utils/update-check.js.map +1 -1
  243. package/dist/voice/stt-registry.js +131 -113
  244. package/dist/voice/stt-registry.js.map +1 -1
  245. package/package.json +11 -11
  246. package/dist/acp.js.map +0 -1
  247. package/dist/auth/index.js.map +0 -1
  248. package/dist/auth/types.js.map +0 -1
  249. package/dist/evals/index.js.map +0 -1
  250. package/dist/evals/scorers/index.js.map +0 -1
  251. package/dist/headless/index.js.map +0 -1
  252. package/dist/hooks/index.js.map +0 -1
  253. package/dist/lsp/index.js.map +0 -1
  254. package/dist/mcp/index.js.map +0 -1
  255. package/dist/mcp/types.js.map +0 -1
  256. package/dist/onboarding/index.js.map +0 -1
  257. package/dist/plugins/types.js.map +0 -1
  258. package/dist/tools/index.js.map +0 -1
@@ -1,16 +1,5 @@
1
- import { HookManager } from "./manager.js";
2
- import { loadHooksConfig, getProjectHooksPath, getGlobalHooksPath, VALID_EVENTS } from "./config.js";
3
- import { executeHook, runHooksForEvent, matchesHook } from "./executor.js";
1
+ import { VALID_EVENTS, getGlobalHooksPath, getProjectHooksPath, loadHooksConfig } from "./config.js";
4
2
  import { isBlockingEvent } from "./types.js";
5
- export {
6
- HookManager,
7
- VALID_EVENTS,
8
- executeHook,
9
- getGlobalHooksPath,
10
- getProjectHooksPath,
11
- isBlockingEvent,
12
- loadHooksConfig,
13
- matchesHook,
14
- runHooksForEvent
15
- };
16
- //# sourceMappingURL=index.js.map
3
+ import { executeHook, matchesHook, runHooksForEvent } from "./executor.js";
4
+ import { HookManager } from "./manager.js";
5
+ export { HookManager, VALID_EVENTS, executeHook, getGlobalHooksPath, getProjectHooksPath, isBlockingEvent, loadHooksConfig, matchesHook, runHooksForEvent };
@@ -1,284 +1,225 @@
1
1
  import { DEFAULT_CONFIG_DIR } from "../constants.js";
2
- import { loadHooksConfig, getProjectHooksPath, getGlobalHooksPath } from "./config.js";
2
+ import { getGlobalHooksPath, getProjectHooksPath, loadHooksConfig } from "./config.js";
3
3
  import { runHooksForEvent } from "./executor.js";
4
- const emptyResult = () => ({ allowed: true, results: [], warnings: [] });
5
- class HookManager {
6
- config;
7
- projectDir;
8
- sessionId;
9
- configDirName;
10
- homeDir;
11
- runId;
12
- constructor(projectDir, sessionId, configDirName = DEFAULT_CONFIG_DIR, homeDir) {
13
- this.projectDir = projectDir;
14
- this.sessionId = sessionId;
15
- this.configDirName = configDirName;
16
- this.homeDir = homeDir;
17
- this.config = loadHooksConfig(projectDir, configDirName, homeDir);
18
- }
19
- reload() {
20
- this.config = loadHooksConfig(this.projectDir, this.configDirName, this.homeDir);
21
- }
22
- setSessionId(sessionId) {
23
- this.sessionId = sessionId;
24
- }
25
- /** Set the active agent run id. Included as `run_id` in all hook stdin while a run is active. */
26
- setRunId(runId) {
27
- this.runId = runId;
28
- }
29
- /** Clear the active run id. Call only after end-of-run hooks (AgentEnd, Stop) have been dispatched. */
30
- clearRunId() {
31
- this.runId = void 0;
32
- }
33
- getRunId() {
34
- return this.runId;
35
- }
36
- hasHooks() {
37
- return Object.keys(this.config).length > 0;
38
- }
39
- getConfig() {
40
- return this.config;
41
- }
42
- getConfigPaths() {
43
- return {
44
- project: getProjectHooksPath(this.projectDir, this.configDirName),
45
- global: getGlobalHooksPath(this.configDirName, this.homeDir)
46
- };
47
- }
48
- // =========================================================================
49
- // Stdin Helpers
50
- // =========================================================================
51
- /**
52
- * Build the common stdin base fields. `run_id` is included when an active run
53
- * is set, so every event dispatched during a run carries the same identifier.
54
- */
55
- baseStdinFields(hook_event_name) {
56
- const base = {
57
- session_id: this.sessionId,
58
- cwd: this.projectDir,
59
- hook_event_name
60
- };
61
- if (this.runId) base.run_id = this.runId;
62
- return base;
63
- }
64
- // =========================================================================
65
- // Blocking Event Methods (decisions enforced by callers)
66
- // =========================================================================
67
- async runPreToolUse(toolName, toolInput) {
68
- const hooks = this.config.PreToolUse;
69
- if (!hooks || hooks.length === 0) {
70
- return emptyResult();
71
- }
72
- const stdin = {
73
- ...this.baseStdinFields("PreToolUse"),
74
- tool_name: toolName,
75
- tool_input: toolInput
76
- };
77
- return runHooksForEvent(hooks, stdin, { tool_name: toolName });
78
- }
79
- async runPostToolUse(toolName, toolInput, toolOutput, toolError) {
80
- const hooks = this.config.PostToolUse;
81
- if (!hooks || hooks.length === 0) {
82
- return emptyResult();
83
- }
84
- const stdin = {
85
- ...this.baseStdinFields("PostToolUse"),
86
- tool_name: toolName,
87
- tool_input: toolInput,
88
- tool_output: toolOutput,
89
- tool_error: toolError
90
- };
91
- return runHooksForEvent(hooks, stdin, { tool_name: toolName });
92
- }
93
- async runUserPromptSubmit(userMessage) {
94
- const hooks = this.config.UserPromptSubmit;
95
- if (!hooks || hooks.length === 0) {
96
- return emptyResult();
97
- }
98
- const stdin = {
99
- ...this.baseStdinFields("UserPromptSubmit"),
100
- user_message: userMessage
101
- };
102
- return runHooksForEvent(hooks, stdin);
103
- }
104
- async runStop(assistantMessage, stopReason) {
105
- const hooks = this.config.Stop;
106
- if (!hooks || hooks.length === 0) {
107
- return emptyResult();
108
- }
109
- const stdin = {
110
- ...this.baseStdinFields("Stop"),
111
- assistant_message: assistantMessage,
112
- stop_reason: stopReason
113
- };
114
- return runHooksForEvent(hooks, stdin);
115
- }
116
- async runSessionStart() {
117
- const hooks = this.config.SessionStart;
118
- if (!hooks || hooks.length === 0) {
119
- return emptyResult();
120
- }
121
- const stdin = {
122
- ...this.baseStdinFields("SessionStart")
123
- };
124
- return runHooksForEvent(hooks, stdin);
125
- }
126
- async runSessionEnd() {
127
- const hooks = this.config.SessionEnd;
128
- if (!hooks || hooks.length === 0) {
129
- return emptyResult();
130
- }
131
- const stdin = {
132
- ...this.baseStdinFields("SessionEnd")
133
- };
134
- return runHooksForEvent(hooks, stdin);
135
- }
136
- /**
137
- * Fire notification hooks (non-blocking, fire-and-forget).
138
- * Called when the TUI is waiting for user input.
139
- */
140
- runNotification(reason, message) {
141
- const hooks = this.config.Notification;
142
- if (!hooks || hooks.length === 0) return;
143
- const stdin = {
144
- ...this.baseStdinFields("Notification"),
145
- reason,
146
- message
147
- };
148
- runHooksForEvent(hooks, stdin).catch(() => {
149
- });
150
- }
151
- // =========================================================================
152
- // Lifecycle Event Methods (non-blocking: observe behavior, never enforce)
153
- // =========================================================================
154
- async runAgentStart() {
155
- const hooks = this.config.AgentStart;
156
- if (!hooks || hooks.length === 0) {
157
- return emptyResult();
158
- }
159
- const runId = this.runId;
160
- if (!runId) {
161
- return emptyResult();
162
- }
163
- const stdin = {
164
- ...this.baseStdinFields("AgentStart"),
165
- run_id: runId
166
- };
167
- return runHooksForEvent(hooks, stdin);
168
- }
169
- async runAgentEnd(stopReason) {
170
- const hooks = this.config.AgentEnd;
171
- if (!hooks || hooks.length === 0) {
172
- return emptyResult();
173
- }
174
- const runId = this.runId;
175
- if (!runId) {
176
- return emptyResult();
177
- }
178
- const stdin = {
179
- ...this.baseStdinFields("AgentEnd"),
180
- run_id: runId,
181
- stop_reason: stopReason
182
- };
183
- return runHooksForEvent(hooks, stdin);
184
- }
185
- async runPermissionRequest(permissionKind, toolCallId, toolName, toolInput) {
186
- const hooks = this.config.PermissionRequest;
187
- if (!hooks || hooks.length === 0) {
188
- return emptyResult();
189
- }
190
- const runId = this.runId;
191
- if (!runId) {
192
- return emptyResult();
193
- }
194
- const stdin = {
195
- ...this.baseStdinFields("PermissionRequest"),
196
- run_id: runId,
197
- permission_kind: permissionKind,
198
- tool_call_id: toolCallId,
199
- tool_name: toolName,
200
- ...toolInput !== void 0 ? { tool_input: toolInput } : {}
201
- };
202
- return runHooksForEvent(hooks, stdin);
203
- }
204
- async runPermissionResult(permissionKind, toolCallId, toolName, decision, toolInput) {
205
- const hooks = this.config.PermissionResult;
206
- if (!hooks || hooks.length === 0) {
207
- return emptyResult();
208
- }
209
- const runId = this.runId;
210
- if (!runId) {
211
- return emptyResult();
212
- }
213
- const stdin = {
214
- ...this.baseStdinFields("PermissionResult"),
215
- run_id: runId,
216
- permission_kind: permissionKind,
217
- tool_call_id: toolCallId,
218
- tool_name: toolName,
219
- decision,
220
- ...toolInput !== void 0 ? { tool_input: toolInput } : {}
221
- };
222
- return runHooksForEvent(hooks, stdin);
223
- }
224
- async runInterrupt(reason) {
225
- const hooks = this.config.Interrupt;
226
- if (!hooks || hooks.length === 0) {
227
- return emptyResult();
228
- }
229
- const runId = this.runId;
230
- if (!runId) {
231
- return emptyResult();
232
- }
233
- const stdin = {
234
- ...this.baseStdinFields("Interrupt"),
235
- run_id: runId,
236
- reason
237
- };
238
- return runHooksForEvent(hooks, stdin);
239
- }
240
- async runSubagentStart(toolCallId, agentType, task, modelId, forked) {
241
- const hooks = this.config.SubagentStart;
242
- if (!hooks || hooks.length === 0) {
243
- return emptyResult();
244
- }
245
- const runId = this.runId;
246
- if (!runId) {
247
- return emptyResult();
248
- }
249
- const stdin = {
250
- ...this.baseStdinFields("SubagentStart"),
251
- run_id: runId,
252
- tool_call_id: toolCallId,
253
- agent_type: agentType,
254
- task,
255
- ...modelId !== void 0 ? { model_id: modelId } : {},
256
- ...forked !== void 0 ? { forked } : {}
257
- };
258
- return runHooksForEvent(hooks, stdin);
259
- }
260
- async runSubagentEnd(toolCallId, agentType, result, isError, durationMs) {
261
- const hooks = this.config.SubagentEnd;
262
- if (!hooks || hooks.length === 0) {
263
- return emptyResult();
264
- }
265
- const runId = this.runId;
266
- if (!runId) {
267
- return emptyResult();
268
- }
269
- const stdin = {
270
- ...this.baseStdinFields("SubagentEnd"),
271
- run_id: runId,
272
- tool_call_id: toolCallId,
273
- agent_type: agentType,
274
- result,
275
- is_error: isError,
276
- duration_ms: durationMs
277
- };
278
- return runHooksForEvent(hooks, stdin);
279
- }
280
- }
281
- export {
282
- HookManager
4
+ //#region src/hooks/manager.ts
5
+ /**
6
+ * HookManager — high-level orchestration for the hooks system.
7
+ * Created once at startup, provides methods for each lifecycle event.
8
+ */
9
+ const emptyResult = () => ({
10
+ allowed: true,
11
+ results: [],
12
+ warnings: []
13
+ });
14
+ var HookManager = class {
15
+ config;
16
+ projectDir;
17
+ sessionId;
18
+ configDirName;
19
+ homeDir;
20
+ runId;
21
+ constructor(projectDir, sessionId, configDirName = DEFAULT_CONFIG_DIR, homeDir) {
22
+ this.projectDir = projectDir;
23
+ this.sessionId = sessionId;
24
+ this.configDirName = configDirName;
25
+ this.homeDir = homeDir;
26
+ this.config = loadHooksConfig(projectDir, configDirName, homeDir);
27
+ }
28
+ reload() {
29
+ this.config = loadHooksConfig(this.projectDir, this.configDirName, this.homeDir);
30
+ }
31
+ setSessionId(sessionId) {
32
+ this.sessionId = sessionId;
33
+ }
34
+ /** Set the active agent run id. Included as `run_id` in all hook stdin while a run is active. */
35
+ setRunId(runId) {
36
+ this.runId = runId;
37
+ }
38
+ /** Clear the active run id. Call only after end-of-run hooks (AgentEnd, Stop) have been dispatched. */
39
+ clearRunId() {
40
+ this.runId = void 0;
41
+ }
42
+ getRunId() {
43
+ return this.runId;
44
+ }
45
+ hasHooks() {
46
+ return Object.keys(this.config).length > 0;
47
+ }
48
+ getConfig() {
49
+ return this.config;
50
+ }
51
+ getConfigPaths() {
52
+ return {
53
+ project: getProjectHooksPath(this.projectDir, this.configDirName),
54
+ global: getGlobalHooksPath(this.configDirName, this.homeDir)
55
+ };
56
+ }
57
+ /**
58
+ * Build the common stdin base fields. `run_id` is included when an active run
59
+ * is set, so every event dispatched during a run carries the same identifier.
60
+ */
61
+ baseStdinFields(hook_event_name) {
62
+ const base = {
63
+ session_id: this.sessionId,
64
+ cwd: this.projectDir,
65
+ hook_event_name
66
+ };
67
+ if (this.runId) base.run_id = this.runId;
68
+ return base;
69
+ }
70
+ async runPreToolUse(toolName, toolInput) {
71
+ const hooks = this.config.PreToolUse;
72
+ if (!hooks || hooks.length === 0) return emptyResult();
73
+ return runHooksForEvent(hooks, {
74
+ ...this.baseStdinFields("PreToolUse"),
75
+ tool_name: toolName,
76
+ tool_input: toolInput
77
+ }, { tool_name: toolName });
78
+ }
79
+ async runPostToolUse(toolName, toolInput, toolOutput, toolError) {
80
+ const hooks = this.config.PostToolUse;
81
+ if (!hooks || hooks.length === 0) return emptyResult();
82
+ return runHooksForEvent(hooks, {
83
+ ...this.baseStdinFields("PostToolUse"),
84
+ tool_name: toolName,
85
+ tool_input: toolInput,
86
+ tool_output: toolOutput,
87
+ tool_error: toolError
88
+ }, { tool_name: toolName });
89
+ }
90
+ async runUserPromptSubmit(userMessage) {
91
+ const hooks = this.config.UserPromptSubmit;
92
+ if (!hooks || hooks.length === 0) return emptyResult();
93
+ return runHooksForEvent(hooks, {
94
+ ...this.baseStdinFields("UserPromptSubmit"),
95
+ user_message: userMessage
96
+ });
97
+ }
98
+ async runStop(assistantMessage, stopReason) {
99
+ const hooks = this.config.Stop;
100
+ if (!hooks || hooks.length === 0) return emptyResult();
101
+ return runHooksForEvent(hooks, {
102
+ ...this.baseStdinFields("Stop"),
103
+ assistant_message: assistantMessage,
104
+ stop_reason: stopReason
105
+ });
106
+ }
107
+ async runSessionStart() {
108
+ const hooks = this.config.SessionStart;
109
+ if (!hooks || hooks.length === 0) return emptyResult();
110
+ return runHooksForEvent(hooks, { ...this.baseStdinFields("SessionStart") });
111
+ }
112
+ async runSessionEnd() {
113
+ const hooks = this.config.SessionEnd;
114
+ if (!hooks || hooks.length === 0) return emptyResult();
115
+ return runHooksForEvent(hooks, { ...this.baseStdinFields("SessionEnd") });
116
+ }
117
+ /**
118
+ * Fire notification hooks (non-blocking, fire-and-forget).
119
+ * Called when the TUI is waiting for user input.
120
+ */
121
+ runNotification(reason, message) {
122
+ const hooks = this.config.Notification;
123
+ if (!hooks || hooks.length === 0) return;
124
+ runHooksForEvent(hooks, {
125
+ ...this.baseStdinFields("Notification"),
126
+ reason,
127
+ message
128
+ }).catch(() => {});
129
+ }
130
+ async runAgentStart() {
131
+ const hooks = this.config.AgentStart;
132
+ if (!hooks || hooks.length === 0) return emptyResult();
133
+ const runId = this.runId;
134
+ if (!runId) return emptyResult();
135
+ return runHooksForEvent(hooks, {
136
+ ...this.baseStdinFields("AgentStart"),
137
+ run_id: runId
138
+ });
139
+ }
140
+ async runAgentEnd(stopReason) {
141
+ const hooks = this.config.AgentEnd;
142
+ if (!hooks || hooks.length === 0) return emptyResult();
143
+ const runId = this.runId;
144
+ if (!runId) return emptyResult();
145
+ return runHooksForEvent(hooks, {
146
+ ...this.baseStdinFields("AgentEnd"),
147
+ run_id: runId,
148
+ stop_reason: stopReason
149
+ });
150
+ }
151
+ async runPermissionRequest(permissionKind, toolCallId, toolName, toolInput) {
152
+ const hooks = this.config.PermissionRequest;
153
+ if (!hooks || hooks.length === 0) return emptyResult();
154
+ const runId = this.runId;
155
+ if (!runId) return emptyResult();
156
+ return runHooksForEvent(hooks, {
157
+ ...this.baseStdinFields("PermissionRequest"),
158
+ run_id: runId,
159
+ permission_kind: permissionKind,
160
+ tool_call_id: toolCallId,
161
+ tool_name: toolName,
162
+ ...toolInput !== void 0 ? { tool_input: toolInput } : {}
163
+ });
164
+ }
165
+ async runPermissionResult(permissionKind, toolCallId, toolName, decision, toolInput) {
166
+ const hooks = this.config.PermissionResult;
167
+ if (!hooks || hooks.length === 0) return emptyResult();
168
+ const runId = this.runId;
169
+ if (!runId) return emptyResult();
170
+ return runHooksForEvent(hooks, {
171
+ ...this.baseStdinFields("PermissionResult"),
172
+ run_id: runId,
173
+ permission_kind: permissionKind,
174
+ tool_call_id: toolCallId,
175
+ tool_name: toolName,
176
+ decision,
177
+ ...toolInput !== void 0 ? { tool_input: toolInput } : {}
178
+ });
179
+ }
180
+ async runInterrupt(reason) {
181
+ const hooks = this.config.Interrupt;
182
+ if (!hooks || hooks.length === 0) return emptyResult();
183
+ const runId = this.runId;
184
+ if (!runId) return emptyResult();
185
+ return runHooksForEvent(hooks, {
186
+ ...this.baseStdinFields("Interrupt"),
187
+ run_id: runId,
188
+ reason
189
+ });
190
+ }
191
+ async runSubagentStart(toolCallId, agentType, task, modelId, forked) {
192
+ const hooks = this.config.SubagentStart;
193
+ if (!hooks || hooks.length === 0) return emptyResult();
194
+ const runId = this.runId;
195
+ if (!runId) return emptyResult();
196
+ return runHooksForEvent(hooks, {
197
+ ...this.baseStdinFields("SubagentStart"),
198
+ run_id: runId,
199
+ tool_call_id: toolCallId,
200
+ agent_type: agentType,
201
+ task,
202
+ ...modelId !== void 0 ? { model_id: modelId } : {},
203
+ ...forked !== void 0 ? { forked } : {}
204
+ });
205
+ }
206
+ async runSubagentEnd(toolCallId, agentType, result, isError, durationMs) {
207
+ const hooks = this.config.SubagentEnd;
208
+ if (!hooks || hooks.length === 0) return emptyResult();
209
+ const runId = this.runId;
210
+ if (!runId) return emptyResult();
211
+ return runHooksForEvent(hooks, {
212
+ ...this.baseStdinFields("SubagentEnd"),
213
+ run_id: runId,
214
+ tool_call_id: toolCallId,
215
+ agent_type: agentType,
216
+ result,
217
+ is_error: isError,
218
+ duration_ms: durationMs
219
+ });
220
+ }
283
221
  };
222
+ //#endregion
223
+ export { HookManager };
224
+
284
225
  //# sourceMappingURL=manager.js.map
@@ -1 +1 @@
1
- {"version":3,"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} 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\n constructor(projectDir: string, sessionId: string, configDirName = DEFAULT_CONFIG_DIR, homeDir?: string) {\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 // 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 = {\n ...this.baseStdinFields('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 emptyResult();\n }\n\n const stdin: HookStdinSession = {\n ...this.baseStdinFields('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 ...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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","names":[]}
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} 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\n constructor(projectDir: string, sessionId: string, configDirName = DEFAULT_CONFIG_DIR, homeDir?: string) {\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 // 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 = {\n ...this.baseStdinFields('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 emptyResult();\n }\n\n const stdin: HookStdinSession = {\n ...this.baseStdinFields('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 ...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,7 +1,8 @@
1
+ //#region src/hooks/types.ts
1
2
  function isBlockingEvent(event) {
2
- return event === "PreToolUse" || event === "Stop" || event === "UserPromptSubmit";
3
+ return event === "PreToolUse" || event === "Stop" || event === "UserPromptSubmit";
3
4
  }
4
- export {
5
- isBlockingEvent
6
- };
5
+ //#endregion
6
+ export { isBlockingEvent };
7
+
7
8
  //# sourceMappingURL=types.js.map