@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.
- package/CHANGELOG.md +49 -0
- package/dist/acp/agent.js +155 -167
- package/dist/acp/agent.js.map +1 -1
- package/dist/acp/event-mapper.js +193 -168
- package/dist/acp/event-mapper.js.map +1 -1
- package/dist/acp/index.js +60 -49
- package/dist/acp/index.js.map +1 -1
- package/dist/acp/server.js +31 -30
- package/dist/acp/server.js.map +1 -1
- package/dist/acp.js +1 -4
- package/dist/agents/credential-resolver.js +40 -29
- package/dist/agents/credential-resolver.js.map +1 -1
- package/dist/agents/custom-provider-source.js +16 -9
- package/dist/agents/custom-provider-source.js.map +1 -1
- package/dist/agents/instructions.js +27 -36
- package/dist/agents/instructions.js.map +1 -1
- package/dist/agents/mastracode-gateway.js +355 -428
- package/dist/agents/mastracode-gateway.js.map +1 -1
- package/dist/agents/memory.js +87 -78
- package/dist/agents/memory.js.map +1 -1
- package/dist/agents/model.js +114 -119
- package/dist/agents/model.js.map +1 -1
- package/dist/agents/modes/build.js +12 -13
- package/dist/agents/modes/build.js.map +1 -1
- package/dist/agents/modes/explore.js +14 -13
- package/dist/agents/modes/explore.js.map +1 -1
- package/dist/agents/modes/plan.js +14 -15
- package/dist/agents/modes/plan.js.map +1 -1
- package/dist/agents/prompts/agent-instructions.js +78 -69
- package/dist/agents/prompts/agent-instructions.js.map +1 -1
- package/dist/agents/prompts/build.js +19 -16
- package/dist/agents/prompts/build.js.map +1 -1
- package/dist/agents/prompts/fast.js +8 -4
- package/dist/agents/prompts/fast.js.map +1 -1
- package/dist/agents/prompts/index.js +48 -47
- package/dist/agents/prompts/index.js.map +1 -1
- package/dist/agents/prompts/model.js +6 -5
- package/dist/agents/prompts/model.js.map +1 -1
- package/dist/agents/prompts/plan.js +20 -16
- package/dist/agents/prompts/plan.js.map +1 -1
- package/dist/agents/prompts/tool-guidance.js +77 -109
- package/dist/agents/prompts/tool-guidance.js.map +1 -1
- package/dist/agents/sandbox-filesystem.js +245 -259
- package/dist/agents/sandbox-filesystem.js.map +1 -1
- package/dist/agents/sandbox-reattach.js +9 -11
- package/dist/agents/sandbox-reattach.js.map +1 -1
- package/dist/agents/thread-caveman-state.js +92 -81
- package/dist/agents/thread-caveman-state.js.map +1 -1
- package/dist/agents/tool-availability.js +62 -80
- package/dist/agents/tool-availability.js.map +1 -1
- package/dist/agents/tools.js +99 -139
- package/dist/agents/tools.js.map +1 -1
- package/dist/agents/workspace.js +232 -225
- package/dist/agents/workspace.js.map +1 -1
- package/dist/analytics.js +139 -128
- package/dist/analytics.js.map +1 -1
- package/dist/auth/authorization-input.js +39 -25
- package/dist/auth/authorization-input.js.map +1 -1
- package/dist/auth/device-code.js +112 -80
- package/dist/auth/device-code.js.map +1 -1
- package/dist/auth/index.js +2 -9
- package/dist/auth/pkce.js +27 -16
- package/dist/auth/pkce.js.map +1 -1
- package/dist/auth/providers/anthropic.js +107 -93
- package/dist/auth/providers/anthropic.js.map +1 -1
- package/dist/auth/providers/github-copilot.js +304 -293
- package/dist/auth/providers/github-copilot.js.map +1 -1
- package/dist/auth/providers/openai-codex.js +442 -460
- package/dist/auth/providers/openai-codex.js.map +1 -1
- package/dist/auth/providers/xai.js +179 -145
- package/dist/auth/providers/xai.js.map +1 -1
- package/dist/auth/storage.js +182 -175
- package/dist/auth/storage.js.map +1 -1
- package/dist/auth/types.js +1 -1
- package/dist/clipboard/index.js +206 -172
- package/dist/clipboard/index.js.map +1 -1
- package/dist/constants.js +11 -16
- package/dist/constants.js.map +1 -1
- package/dist/error-classification.js +19 -11
- package/dist/error-classification.js.map +1 -1
- package/dist/evals/context-builder.js +145 -104
- package/dist/evals/context-builder.js.map +1 -1
- package/dist/evals/index.js +4 -7
- package/dist/evals/scorers/classify-command.js +62 -41
- package/dist/evals/scorers/classify-command.js.map +1 -1
- package/dist/evals/scorers/efficiency.js +239 -181
- package/dist/evals/scorers/efficiency.js.map +1 -1
- package/dist/evals/scorers/extract-tools.js +51 -47
- package/dist/evals/scorers/extract-tools.js.map +1 -1
- package/dist/evals/scorers/index.js +1 -5
- package/dist/evals/scorers/outcome.js +321 -212
- package/dist/evals/scorers/outcome.js.map +1 -1
- package/dist/goal-manager.js +266 -261
- package/dist/goal-manager.js.map +1 -1
- package/dist/goal-signal.js +14 -13
- package/dist/goal-signal.js.map +1 -1
- package/dist/headless/cli.js +153 -154
- package/dist/headless/cli.js.map +1 -1
- package/dist/headless/flags.js +180 -178
- package/dist/headless/flags.js.map +1 -1
- package/dist/headless/format.js +72 -71
- package/dist/headless/format.js.map +1 -1
- package/dist/headless/index.js +5 -31
- package/dist/headless/policy.js +35 -31
- package/dist/headless/policy.js.map +1 -1
- package/dist/headless/run-mc.js +332 -334
- package/dist/headless/run-mc.js.map +1 -1
- package/dist/headless/types.js +16 -7
- package/dist/headless/types.js.map +1 -1
- package/dist/hooks/config.js +56 -61
- package/dist/hooks/config.js.map +1 -1
- package/dist/hooks/executor.js +118 -116
- package/dist/hooks/executor.js.map +1 -1
- package/dist/hooks/index.js +4 -15
- package/dist/hooks/manager.js +221 -280
- package/dist/hooks/manager.js.map +1 -1
- package/dist/hooks/types.js +5 -4
- package/dist/hooks/types.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +632 -712
- package/dist/index.js.map +1 -1
- package/dist/ipc/ipc-reporter.js +19 -22
- package/dist/ipc/ipc-reporter.js.map +1 -1
- package/dist/lsp/client.js +248 -306
- package/dist/lsp/client.js.map +1 -1
- package/dist/lsp/index.js +1 -6
- package/dist/lsp/language.js +39 -43
- package/dist/lsp/language.js.map +1 -1
- package/dist/lsp/manager.js +78 -93
- package/dist/lsp/manager.js.map +1 -1
- package/dist/lsp/server.js +151 -120
- package/dist/lsp/server.js.map +1 -1
- package/dist/lsp/workspace.js +50 -47
- package/dist/lsp/workspace.js.map +1 -1
- package/dist/mcp/config.js +210 -199
- package/dist/mcp/config.js.map +1 -1
- package/dist/mcp/index.js +2 -9
- package/dist/mcp/manager.js +482 -475
- package/dist/mcp/manager.js.map +1 -1
- package/dist/mcp/types.js +1 -1
- package/dist/onboarding/custom-packs.js +14 -17
- package/dist/onboarding/custom-packs.js.map +1 -1
- package/dist/onboarding/custom-providers.js +22 -20
- package/dist/onboarding/custom-providers.js.map +1 -1
- package/dist/onboarding/index.d.ts +1 -1
- package/dist/onboarding/index.d.ts.map +1 -1
- package/dist/onboarding/index.js +3 -21
- package/dist/onboarding/om-settings.d.ts +5 -0
- package/dist/onboarding/om-settings.d.ts.map +1 -1
- package/dist/onboarding/om-settings.js +41 -20
- package/dist/onboarding/om-settings.js.map +1 -1
- package/dist/onboarding/packs.d.ts +4 -6
- package/dist/onboarding/packs.d.ts.map +1 -1
- package/dist/onboarding/packs.js +154 -105
- package/dist/onboarding/packs.js.map +1 -1
- package/dist/onboarding/settings.js +575 -517
- package/dist/onboarding/settings.js.map +1 -1
- package/dist/permissions.js +112 -99
- package/dist/permissions.js.map +1 -1
- package/dist/plugin.js +21 -23
- package/dist/plugin.js.map +1 -1
- package/dist/plugins/dependencies.js +64 -87
- package/dist/plugins/dependencies.js.map +1 -1
- package/dist/plugins/install.js +159 -169
- package/dist/plugins/install.js.map +1 -1
- package/dist/plugins/loader.js +170 -185
- package/dist/plugins/loader.js.map +1 -1
- package/dist/plugins/manager.js +374 -380
- package/dist/plugins/manager.js.map +1 -1
- package/dist/plugins/manifest.js +38 -63
- package/dist/plugins/manifest.js.map +1 -1
- package/dist/plugins/package-link.js +48 -64
- package/dist/plugins/package-link.js.map +1 -1
- package/dist/plugins/paths.js +18 -19
- package/dist/plugins/paths.js.map +1 -1
- package/dist/plugins/registry.js +97 -81
- package/dist/plugins/registry.js.map +1 -1
- package/dist/plugins/scaffold.js +62 -98
- package/dist/plugins/scaffold.js.map +1 -1
- package/dist/plugins/types.js +1 -1
- package/dist/processors/plan-rejection-abort.js +45 -44
- package/dist/processors/plan-rejection-abort.js.map +1 -1
- package/dist/providers/amazon-bedrock-gateway.js +134 -125
- package/dist/providers/amazon-bedrock-gateway.js.map +1 -1
- package/dist/providers/amazon-bedrock.js +68 -47
- package/dist/providers/amazon-bedrock.js.map +1 -1
- package/dist/providers/claude-max.js +153 -133
- package/dist/providers/claude-max.js.map +1 -1
- package/dist/providers/github-copilot.js +232 -230
- package/dist/providers/github-copilot.js.map +1 -1
- package/dist/providers/openai-codex.js +271 -260
- package/dist/providers/openai-codex.js.map +1 -1
- package/dist/providers/xai.js +57 -50
- package/dist/providers/xai.js.map +1 -1
- package/dist/schema.js +91 -89
- package/dist/schema.js.map +1 -1
- package/dist/theme-palette.js +18 -14
- package/dist/theme-palette.js.map +1 -1
- package/dist/tool-names.js +46 -37
- package/dist/tool-names.js.map +1 -1
- package/dist/tools/index.js +2 -8
- package/dist/tools/request-sandbox-access.js +71 -80
- package/dist/tools/request-sandbox-access.js.map +1 -1
- package/dist/tools/utils.js +26 -16
- package/dist/tools/utils.js.map +1 -1
- package/dist/tools/web-search.js +51 -55
- package/dist/tools/web-search.js.map +1 -1
- package/dist/utils/binaries.js +65 -61
- package/dist/utils/binaries.js.map +1 -1
- package/dist/utils/debug-log.js +51 -47
- package/dist/utils/debug-log.js.map +1 -1
- package/dist/utils/errors.js +157 -192
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/gateway-sync.js +49 -37
- package/dist/utils/gateway-sync.js.map +1 -1
- package/dist/utils/path-security.js +7 -6
- package/dist/utils/path-security.js.map +1 -1
- package/dist/utils/plan-diff.js +58 -39
- package/dist/utils/plan-diff.js.map +1 -1
- package/dist/utils/plans.js +92 -74
- package/dist/utils/plans.js.map +1 -1
- package/dist/utils/project.js +318 -256
- package/dist/utils/project.js.map +1 -1
- package/dist/utils/signals-pubsub.js +117 -99
- package/dist/utils/signals-pubsub.js.map +1 -1
- package/dist/utils/slash-command-loader.js +118 -154
- package/dist/utils/slash-command-loader.js.map +1 -1
- package/dist/utils/slash-command-processor.js +92 -83
- package/dist/utils/slash-command-processor.js.map +1 -1
- package/dist/utils/stdin-pipe.js +87 -63
- package/dist/utils/stdin-pipe.js.map +1 -1
- package/dist/utils/storage-factory.js +104 -84
- package/dist/utils/storage-factory.js.map +1 -1
- package/dist/utils/storage-maintenance.js +249 -211
- package/dist/utils/storage-maintenance.js.map +1 -1
- package/dist/utils/thread-lock.js +96 -92
- package/dist/utils/thread-lock.js.map +1 -1
- package/dist/utils/token-estimator.js +12 -12
- package/dist/utils/token-estimator.js.map +1 -1
- package/dist/utils/update-check.d.ts +1 -1
- package/dist/utils/update-check.js +341 -259
- package/dist/utils/update-check.js.map +1 -1
- package/dist/voice/stt-registry.js +131 -113
- package/dist/voice/stt-registry.js.map +1 -1
- package/package.json +11 -11
- package/dist/acp.js.map +0 -1
- package/dist/auth/index.js.map +0 -1
- package/dist/auth/types.js.map +0 -1
- package/dist/evals/index.js.map +0 -1
- package/dist/evals/scorers/index.js.map +0 -1
- package/dist/headless/index.js.map +0 -1
- package/dist/hooks/index.js.map +0 -1
- package/dist/lsp/index.js.map +0 -1
- package/dist/mcp/index.js.map +0 -1
- package/dist/mcp/types.js.map +0 -1
- package/dist/onboarding/index.js.map +0 -1
- package/dist/plugins/types.js.map +0 -1
- package/dist/tools/index.js.map +0 -1
package/dist/hooks/index.js
CHANGED
|
@@ -1,16 +1,5 @@
|
|
|
1
|
-
import {
|
|
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
|
-
|
|
6
|
-
|
|
7
|
-
|
|
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 };
|
package/dist/hooks/manager.js
CHANGED
|
@@ -1,284 +1,225 @@
|
|
|
1
1
|
import { DEFAULT_CONFIG_DIR } from "../constants.js";
|
|
2
|
-
import {
|
|
2
|
+
import { getGlobalHooksPath, getProjectHooksPath, loadHooksConfig } from "./config.js";
|
|
3
3
|
import { runHooksForEvent } from "./executor.js";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
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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"}
|
package/dist/hooks/types.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
//#region src/hooks/types.ts
|
|
1
2
|
function isBlockingEvent(event) {
|
|
2
|
-
|
|
3
|
+
return event === "PreToolUse" || event === "Stop" || event === "UserPromptSubmit";
|
|
3
4
|
}
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
//#endregion
|
|
6
|
+
export { isBlockingEvent };
|
|
7
|
+
|
|
7
8
|
//# sourceMappingURL=types.js.map
|