@scotthuang/agent-knock-knock 0.3.2 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/CHANGELOG.md +9 -571
  2. package/README.md +97 -123
  3. package/dist/src/agent-session-provider.d.ts +1 -2
  4. package/dist/src/approval-policy.d.ts +1 -1
  5. package/dist/src/approval-policy.js +1 -1
  6. package/dist/src/approval-policy.js.map +1 -1
  7. package/dist/src/claude-terminal-agent-adapter.d.ts +2 -17
  8. package/dist/src/claude-terminal-agent-adapter.js +4 -489
  9. package/dist/src/claude-terminal-agent-adapter.js.map +1 -1
  10. package/dist/src/cli.js +1489 -3406
  11. package/dist/src/cli.js.map +1 -1
  12. package/dist/src/codex-local-session-provider.d.ts +1 -2
  13. package/dist/src/codex-local-session-provider.js +1 -9
  14. package/dist/src/codex-local-session-provider.js.map +1 -1
  15. package/dist/src/codex-session-provider.d.ts +1 -8
  16. package/dist/src/codex-session-provider.js +0 -56
  17. package/dist/src/codex-session-provider.js.map +1 -1
  18. package/dist/src/codex-terminal-agent-adapter.d.ts +1 -1
  19. package/dist/src/doctor-capabilities.d.ts +5 -13
  20. package/dist/src/doctor-capabilities.js +15 -60
  21. package/dist/src/doctor-capabilities.js.map +1 -1
  22. package/dist/src/executors.d.ts +5 -51
  23. package/dist/src/executors.js +4 -68
  24. package/dist/src/executors.js.map +1 -1
  25. package/dist/src/openclaw-doctor.d.ts +1 -1
  26. package/dist/src/openclaw-doctor.js +1 -1
  27. package/dist/src/openclaw-doctor.js.map +1 -1
  28. package/dist/src/openclaw-plugin-helpers.d.ts +5 -8
  29. package/dist/src/openclaw-plugin-helpers.js +57 -40
  30. package/dist/src/openclaw-plugin-helpers.js.map +1 -1
  31. package/dist/src/openclaw-plugin.js +138 -248
  32. package/dist/src/openclaw-plugin.js.map +1 -1
  33. package/dist/src/protocol.d.ts +1 -5
  34. package/dist/src/protocol.js +1 -1
  35. package/dist/src/protocol.js.map +1 -1
  36. package/dist/src/session-selector.js +1 -1
  37. package/dist/src/session-selector.js.map +1 -1
  38. package/dist/src/terminal-agent-adapter.d.ts +3 -17
  39. package/dist/src/terminal-agent-adapter.js.map +1 -1
  40. package/dist/src/terminal-agent-bridge.d.ts +3 -3
  41. package/dist/src/terminal-agent-bridge.js +0 -75
  42. package/dist/src/terminal-agent-bridge.js.map +1 -1
  43. package/dist/src/transcript.js +2 -3
  44. package/dist/src/transcript.js.map +1 -1
  45. package/docs/quickstart-tmux.md +7 -7
  46. package/openclaw.plugin.json +4 -83
  47. package/package.json +7 -15
  48. package/templates/openclaw-skills/agent-knock-knock/SKILL.md +94 -147
  49. package/dist/src/acpx-output.d.ts +0 -18
  50. package/dist/src/acpx-output.js +0 -223
  51. package/dist/src/acpx-output.js.map +0 -1
  52. package/dist/src/bootstrap.d.ts +0 -8
  53. package/dist/src/bootstrap.js +0 -45
  54. package/dist/src/bootstrap.js.map +0 -1
  55. package/dist/src/claude-hook-installer.d.ts +0 -65
  56. package/dist/src/claude-hook-installer.js +0 -410
  57. package/dist/src/claude-hook-installer.js.map +0 -1
  58. package/dist/src/claude-hook-protocol.d.ts +0 -89
  59. package/dist/src/claude-hook-protocol.js +0 -243
  60. package/dist/src/claude-hook-protocol.js.map +0 -1
  61. package/dist/src/claude-hook-store.d.ts +0 -247
  62. package/dist/src/claude-hook-store.js +0 -1075
  63. package/dist/src/claude-hook-store.js.map +0 -1
  64. package/dist/src/session-takeover-planner.d.ts +0 -37
  65. package/dist/src/session-takeover-planner.js +0 -57
  66. package/dist/src/session-takeover-planner.js.map +0 -1
  67. package/docs/quickstart-managed-acpx.md +0 -43
  68. package/scripts/smoke-acpx.js +0 -139
  69. package/scripts/smoke-tmux.js +0 -140
@@ -1,45 +0,0 @@
1
- export function claudeBootstrapPrompt(options) {
2
- return executorBootstrapPrompt({
3
- executorName: "Claude Code",
4
- ...options
5
- });
6
- }
7
- export function executorBootstrapPrompt({ callbackCommand, executorName = "the coding agent", softLimit = 50, hardLimit = 100 }) {
8
- return `You are ${executorName}, the autonomous engineering implementation agent managed by OpenClaw.
9
-
10
- OpenClaw owns product direction, requirements interpretation, acceptance criteria, and delivery tradeoffs. Treat OpenClaw as the product manager and final product decision maker.
11
-
12
- You own engineering execution. You may directly read and edit files, run commands, fix tests, and complete the assigned development task.
13
-
14
- Use the fewest response-requiring rounds possible. Decide ordinary implementation details yourself when they do not affect product behavior, scope, user experience, acceptance criteria, or delivery risk.
15
-
16
- Send question or blocked messages when:
17
- - requirements are ambiguous or conflict
18
- - product behavior, UX, scope, or acceptance criteria need interpretation
19
- - an engineering problem requires a product compromise, degraded behavior, narrower scope, workaround, or changed delivery standard
20
- - architecture, risk, permission, dependency, or environment decisions affect the final product
21
- - you cannot continue without OpenClaw's decision
22
-
23
- After OpenClaw answers, implement according to OpenClaw's product decision even if there are multiple engineering alternatives.
24
-
25
- Progress reports must use type=progress and requires_response=false.
26
-
27
- When complete, send type=done with:
28
- - what changed
29
- - how it was verified
30
- - any remaining issues
31
-
32
- Response budget:
33
- - soft limit: ${softLimit}
34
- - hard limit: ${hardLimit}
35
- - after 30 response rounds, converge and choose the shortest completion path
36
- - after 40 response rounds, finish, degrade, or provide a failure reason within 10 response rounds
37
-
38
- Send messages back to OpenClaw by executing this command with a single structured JSON message as the final argument:
39
-
40
- ${callbackCommand}
41
-
42
- Replace <structured-message-json> with one shell-quoted JSON object. If the JSON contains single quotes, escape them using standard shell quoting before executing the command.
43
- `;
44
- }
45
- //# sourceMappingURL=bootstrap.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/bootstrap.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,qBAAqB,CAAC,OAAqD;IACzF,OAAO,uBAAuB,CAAC;QAC7B,YAAY,EAAE,aAAa;QAC3B,GAAG,OAAO;KACX,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,EAAE,eAAe,EAAE,YAAY,GAAG,kBAAkB,EAAE,SAAS,GAAG,EAAE,EAAE,SAAS,GAAG,GAAG,EAA0B;IACrJ,OAAO,WAAW,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;gBAyBhB,SAAS;gBACT,SAAS;;;;;;EAMvB,eAAe;;;CAGhB,CAAC;AACF,CAAC"}
@@ -1,65 +0,0 @@
1
- export declare const CLAUDE_HOOK_EVENT_NAMES: readonly ["SessionStart", "UserPromptSubmit", "PermissionRequest", "Stop", "StopFailure", "Notification"];
2
- export type InstalledClaudeHookEventName = typeof CLAUDE_HOOK_EVENT_NAMES[number];
3
- export interface InstallClaudeHooksOptions {
4
- /** Absolute path to the agent-knock-knock executable. */
5
- executablePath: string;
6
- /** Defaults to ~/.claude/settings.json. */
7
- settingsPath?: string;
8
- /** Computes and returns a summary without creating or changing any files. */
9
- dryRun?: boolean;
10
- /** Injectable for deterministic backup names in tests. */
11
- now?: () => Date;
12
- }
13
- export interface ClaudeHookInstallSummary {
14
- addedCount: number;
15
- existingCount: number;
16
- warningCount: number;
17
- }
18
- export interface InstallClaudeHooksResult {
19
- settingsPath: string;
20
- changed: boolean;
21
- written: boolean;
22
- dryRun: boolean;
23
- created: boolean;
24
- backupPath?: string;
25
- addedEvents: InstalledClaudeHookEventName[];
26
- existingEvents: InstalledClaudeHookEventName[];
27
- warnings: string[];
28
- summary: ClaudeHookInstallSummary;
29
- }
30
- export interface MergeClaudeHookSettingsResult {
31
- settings: Record<string, unknown>;
32
- changed: boolean;
33
- addedEvents: InstalledClaudeHookEventName[];
34
- existingEvents: InstalledClaudeHookEventName[];
35
- warnings: string[];
36
- }
37
- export interface TrustedClaudeTokenjuiceLauncher {
38
- /** Exact absolute path configured by the trusted Claude PreToolUse hook. */
39
- configuredPath: string;
40
- /** Canonical target observed while loading that configuration. */
41
- canonicalPath: string;
42
- }
43
- /** Returns Claude Code's user settings path without reading it. */
44
- export declare function defaultClaudeSettingsPath(): string;
45
- /**
46
- * Reads only Tokenjuice launcher provenance from Claude's trusted user settings.
47
- * Invalid, missing, non-executable, or relative launchers are ignored so approval
48
- * normalization fails closed without exposing settings contents.
49
- */
50
- export declare function loadTrustedClaudeTokenjuiceLaunchers(settingsPath?: string): TrustedClaudeTokenjuiceLauncher[];
51
- export declare function extractClaudeTokenjuiceLaunchers(settingsValue: unknown): string[];
52
- /**
53
- * Adds AKK matcher groups without mutating the supplied settings object.
54
- * Existing groups and sibling handlers are retained byte-for-byte when the
55
- * result is serialized, apart from JSON's normal formatting.
56
- */
57
- export declare function mergeClaudeHookSettings(settingsValue: unknown, executablePathValue: string): MergeClaudeHookSettingsResult;
58
- /**
59
- * Safely installs Claude Code user hooks. This function does not log settings
60
- * contents and its result contains only paths, event names, counts, and
61
- * non-sensitive warnings.
62
- */
63
- export declare function installClaudeHooks(options: InstallClaudeHooksOptions): InstallClaudeHooksResult;
64
- /** Compatibility-friendly explicit name for callers wiring an install command. */
65
- export declare const installClaudeHookSettings: typeof installClaudeHooks;
@@ -1,410 +0,0 @@
1
- import { randomBytes } from "node:crypto";
2
- import fs from "node:fs";
3
- import os from "node:os";
4
- import path from "node:path";
5
- export const CLAUDE_HOOK_EVENT_NAMES = [
6
- "SessionStart",
7
- "UserPromptSubmit",
8
- "PermissionRequest",
9
- "Stop",
10
- "StopFailure",
11
- "Notification"
12
- ];
13
- const HOOK_ARGUMENTS = ["claude-hook"];
14
- const PERMISSION_STATUS_MESSAGE = "Waiting for Agent Knock Knock approval...";
15
- const HOOK_DEFINITIONS = [
16
- {
17
- event: "SessionStart",
18
- matcher: "startup|resume|clear|compact|fork",
19
- timeout: 10
20
- },
21
- { event: "UserPromptSubmit", timeout: 10 },
22
- { event: "PermissionRequest", matcher: "*", timeout: 600, statusMessage: PERMISSION_STATUS_MESSAGE },
23
- { event: "Stop", timeout: 10 },
24
- {
25
- event: "StopFailure",
26
- matcher: "rate_limit|authentication_failed|oauth_org_not_allowed|billing_error|invalid_request|model_not_found|server_error|max_output_tokens|unknown",
27
- timeout: 10
28
- },
29
- {
30
- event: "Notification",
31
- matcher: "permission_prompt|idle_prompt|agent_needs_input|agent_completed",
32
- timeout: 10
33
- }
34
- ];
35
- /** Returns Claude Code's user settings path without reading it. */
36
- export function defaultClaudeSettingsPath() {
37
- return path.join(os.homedir(), ".claude", "settings.json");
38
- }
39
- /**
40
- * Reads only Tokenjuice launcher provenance from Claude's trusted user settings.
41
- * Invalid, missing, non-executable, or relative launchers are ignored so approval
42
- * normalization fails closed without exposing settings contents.
43
- */
44
- export function loadTrustedClaudeTokenjuiceLaunchers(settingsPath = defaultClaudeSettingsPath()) {
45
- let settings;
46
- try {
47
- settings = readSettings(path.resolve(settingsPath));
48
- }
49
- catch {
50
- return [];
51
- }
52
- return extractClaudeTokenjuiceLaunchers(settings).flatMap((launcher) => {
53
- try {
54
- fs.accessSync(launcher, fs.constants.X_OK);
55
- return [{
56
- configuredPath: launcher,
57
- canonicalPath: fs.realpathSync(launcher)
58
- }];
59
- }
60
- catch {
61
- return [];
62
- }
63
- }).filter((launcher, index, values) => values.findIndex((candidate) => candidate.configuredPath === launcher.configuredPath &&
64
- candidate.canonicalPath === launcher.canonicalPath) === index);
65
- }
66
- export function extractClaudeTokenjuiceLaunchers(settingsValue) {
67
- if (!isObject(settingsValue) || !isObject(settingsValue.hooks)) {
68
- return [];
69
- }
70
- const groups = settingsValue.hooks.PreToolUse;
71
- if (!Array.isArray(groups)) {
72
- return [];
73
- }
74
- const launchers = [];
75
- for (const group of groups) {
76
- if (!isObject(group) || group.matcher !== "Bash" || !Array.isArray(group.hooks)) {
77
- continue;
78
- }
79
- for (const handler of group.hooks) {
80
- if (!isObject(handler) || handler.type !== "command" || typeof handler.command !== "string") {
81
- continue;
82
- }
83
- const tokens = tokenizeShellWords(handler.command);
84
- if (!tokens) {
85
- continue;
86
- }
87
- const subcommandIndex = tokens.indexOf("claude-code-pre-tool-use");
88
- if (subcommandIndex < 1) {
89
- continue;
90
- }
91
- let launcher;
92
- for (let index = subcommandIndex + 1; index < tokens.length; index += 1) {
93
- if (tokens[index] === "--wrap-launcher") {
94
- launcher = tokens[index + 1];
95
- break;
96
- }
97
- if (tokens[index].startsWith("--wrap-launcher=")) {
98
- launcher = tokens[index].slice("--wrap-launcher=".length);
99
- break;
100
- }
101
- }
102
- if (launcher && path.isAbsolute(launcher)) {
103
- launchers.push(path.normalize(launcher));
104
- }
105
- }
106
- }
107
- return launchers.filter((launcher, index) => launchers.indexOf(launcher) === index);
108
- }
109
- /**
110
- * Adds AKK matcher groups without mutating the supplied settings object.
111
- * Existing groups and sibling handlers are retained byte-for-byte when the
112
- * result is serialized, apart from JSON's normal formatting.
113
- */
114
- export function mergeClaudeHookSettings(settingsValue, executablePathValue) {
115
- const executablePath = requireAbsoluteExecutable(executablePathValue);
116
- const settings = requireObject(settingsValue, "Claude settings");
117
- const existingHooksValue = settings.hooks;
118
- const existingHooks = existingHooksValue === undefined
119
- ? {}
120
- : requireObject(existingHooksValue, "Claude settings hooks");
121
- const mergedSettings = { ...settings };
122
- const mergedHooks = { ...existingHooks };
123
- const addedEvents = [];
124
- const existingEvents = [];
125
- const warnings = [];
126
- for (const definition of HOOK_DEFINITIONS) {
127
- const groupsValue = existingHooks[definition.event];
128
- if (groupsValue !== undefined && !Array.isArray(groupsValue)) {
129
- throw new Error(`Claude settings hooks.${definition.event} must be an array`);
130
- }
131
- const groups = groupsValue === undefined ? [] : groupsValue;
132
- const inspection = inspectEventGroups(groups, definition, executablePath);
133
- warnings.push(...inspection.warnings);
134
- if (inspection.hasExactHandler) {
135
- existingEvents.push(definition.event);
136
- continue;
137
- }
138
- mergedHooks[definition.event] = [
139
- ...groups,
140
- createMatcherGroup(definition, executablePath)
141
- ];
142
- addedEvents.push(definition.event);
143
- }
144
- mergedSettings.hooks = mergedHooks;
145
- return {
146
- settings: mergedSettings,
147
- changed: addedEvents.length > 0,
148
- addedEvents,
149
- existingEvents,
150
- warnings
151
- };
152
- }
153
- /**
154
- * Safely installs Claude Code user hooks. This function does not log settings
155
- * contents and its result contains only paths, event names, counts, and
156
- * non-sensitive warnings.
157
- */
158
- export function installClaudeHooks(options) {
159
- const executablePath = requireAbsoluteExecutable(options.executablePath);
160
- const settingsPath = path.resolve(options.settingsPath ?? defaultClaudeSettingsPath());
161
- const dryRun = options.dryRun === true;
162
- const exists = fs.existsSync(settingsPath);
163
- const settings = exists ? readSettings(settingsPath) : {};
164
- const merged = mergeClaudeHookSettings(settings, executablePath);
165
- let backupPath;
166
- if (merged.changed && !dryRun) {
167
- const parentDirectory = path.dirname(settingsPath);
168
- fs.mkdirSync(parentDirectory, { recursive: true, mode: 0o700 });
169
- if (exists) {
170
- backupPath = createBackup(settingsPath, options.now ?? (() => new Date()));
171
- }
172
- atomicWriteJson(settingsPath, merged.settings);
173
- }
174
- return {
175
- settingsPath,
176
- changed: merged.changed,
177
- written: merged.changed && !dryRun,
178
- dryRun,
179
- created: !exists && merged.changed && !dryRun,
180
- ...(backupPath === undefined ? {} : { backupPath }),
181
- addedEvents: merged.addedEvents,
182
- existingEvents: merged.existingEvents,
183
- warnings: merged.warnings,
184
- summary: {
185
- addedCount: merged.addedEvents.length,
186
- existingCount: merged.existingEvents.length,
187
- warningCount: merged.warnings.length
188
- }
189
- };
190
- }
191
- /** Compatibility-friendly explicit name for callers wiring an install command. */
192
- export const installClaudeHookSettings = installClaudeHooks;
193
- function createMatcherGroup(definition, executablePath) {
194
- const handler = {
195
- type: "command",
196
- command: executablePath,
197
- args: [...HOOK_ARGUMENTS],
198
- timeout: definition.timeout,
199
- ...(definition.statusMessage === undefined ? {} : { statusMessage: definition.statusMessage })
200
- };
201
- return {
202
- ...(definition.matcher === undefined ? {} : { matcher: definition.matcher }),
203
- hooks: [handler]
204
- };
205
- }
206
- function inspectEventGroups(groups, definition, executablePath) {
207
- let hasExactHandler = false;
208
- let hasDifferentArguments = false;
209
- let exactHandlerNeedsReview = false;
210
- for (const groupValue of groups) {
211
- if (!isObject(groupValue) || !Array.isArray(groupValue.hooks)) {
212
- continue;
213
- }
214
- for (const handlerValue of groupValue.hooks) {
215
- if (!isObject(handlerValue) || handlerValue.command !== executablePath) {
216
- continue;
217
- }
218
- if (!isExactHookArguments(handlerValue.args)) {
219
- hasDifferentArguments = true;
220
- continue;
221
- }
222
- hasExactHandler = true;
223
- if (!handlerMatchesDefinition(handlerValue, groupValue, definition)) {
224
- exactHandlerNeedsReview = true;
225
- }
226
- }
227
- }
228
- const warnings = [];
229
- if (hasDifferentArguments) {
230
- warnings.push(`${definition.event} contains a handler for the AKK executable with different arguments; it was preserved.`);
231
- }
232
- if (exactHandlerNeedsReview) {
233
- warnings.push(`${definition.event} already contains the AKK claude-hook handler with non-recommended options; it was preserved.`);
234
- }
235
- return { hasExactHandler, warnings };
236
- }
237
- function handlerMatchesDefinition(handler, group, definition) {
238
- const matcherMatches = definition.matcher === undefined
239
- ? group.matcher === undefined
240
- : group.matcher === definition.matcher;
241
- const statusMatches = definition.statusMessage === undefined
242
- ? true
243
- : handler.statusMessage === definition.statusMessage;
244
- return handler.type === "command" &&
245
- handler.timeout === definition.timeout &&
246
- matcherMatches &&
247
- statusMatches;
248
- }
249
- function isExactHookArguments(value) {
250
- return Array.isArray(value) && value.length === 1 && value[0] === HOOK_ARGUMENTS[0];
251
- }
252
- function tokenizeShellWords(command) {
253
- const tokens = [];
254
- let token = "";
255
- let quote;
256
- let escaped = false;
257
- let started = false;
258
- for (const character of command.trim()) {
259
- if (escaped) {
260
- token += character;
261
- escaped = false;
262
- started = true;
263
- continue;
264
- }
265
- if (character === "\\" && quote !== "'") {
266
- escaped = true;
267
- started = true;
268
- continue;
269
- }
270
- if (quote) {
271
- if (character === quote) {
272
- quote = undefined;
273
- }
274
- else {
275
- token += character;
276
- }
277
- started = true;
278
- continue;
279
- }
280
- if (character === "'" || character === '"') {
281
- quote = character;
282
- started = true;
283
- continue;
284
- }
285
- if (/\s/u.test(character)) {
286
- if (started) {
287
- tokens.push(token);
288
- token = "";
289
- started = false;
290
- }
291
- continue;
292
- }
293
- token += character;
294
- started = true;
295
- }
296
- if (escaped || quote) {
297
- return undefined;
298
- }
299
- if (started) {
300
- tokens.push(token);
301
- }
302
- return tokens;
303
- }
304
- function readSettings(settingsPath) {
305
- const stat = fs.lstatSync(settingsPath);
306
- if (stat.isSymbolicLink()) {
307
- throw new Error(`Refusing to replace symbolic-link Claude settings: ${settingsPath}`);
308
- }
309
- if (!stat.isFile()) {
310
- throw new Error(`Claude settings path is not a regular file: ${settingsPath}`);
311
- }
312
- let value;
313
- try {
314
- value = JSON.parse(fs.readFileSync(settingsPath, "utf8"));
315
- }
316
- catch {
317
- throw new Error(`Claude settings JSON is invalid: ${settingsPath}`);
318
- }
319
- return requireObject(value, "Claude settings");
320
- }
321
- function createBackup(settingsPath, now) {
322
- const date = now();
323
- if (!(date instanceof Date) || !Number.isFinite(date.getTime())) {
324
- throw new Error("Claude hook installer clock returned an invalid date");
325
- }
326
- const timestamp = date.toISOString().replace(/[:.]/gu, "-");
327
- let suffix = 0;
328
- while (true) {
329
- const candidate = `${settingsPath}.bak.${timestamp}${suffix === 0 ? "" : `.${suffix}`}`;
330
- let descriptor;
331
- try {
332
- descriptor = fs.openSync(candidate, "wx", 0o600);
333
- fs.writeFileSync(descriptor, fs.readFileSync(settingsPath));
334
- fs.fsyncSync(descriptor);
335
- fs.closeSync(descriptor);
336
- descriptor = undefined;
337
- return candidate;
338
- }
339
- catch (error) {
340
- if (descriptor !== undefined) {
341
- fs.closeSync(descriptor);
342
- fs.rmSync(candidate, { force: true });
343
- }
344
- if (isFileExistsError(error)) {
345
- suffix += 1;
346
- continue;
347
- }
348
- throw error;
349
- }
350
- }
351
- }
352
- function atomicWriteJson(filePath, value) {
353
- const parentDirectory = path.dirname(filePath);
354
- const temporaryPath = `${filePath}.${process.pid}.${randomBytes(8).toString("hex")}.tmp`;
355
- let descriptor;
356
- try {
357
- descriptor = fs.openSync(temporaryPath, "wx", 0o600);
358
- fs.writeFileSync(descriptor, `${JSON.stringify(value, null, 2)}\n`, "utf8");
359
- fs.fsyncSync(descriptor);
360
- fs.closeSync(descriptor);
361
- descriptor = undefined;
362
- fs.renameSync(temporaryPath, filePath);
363
- fs.chmodSync(filePath, 0o600);
364
- fsyncDirectory(parentDirectory);
365
- }
366
- finally {
367
- if (descriptor !== undefined) {
368
- fs.closeSync(descriptor);
369
- }
370
- fs.rmSync(temporaryPath, { force: true });
371
- }
372
- }
373
- function fsyncDirectory(directoryPath) {
374
- let descriptor;
375
- try {
376
- descriptor = fs.openSync(directoryPath, "r");
377
- fs.fsyncSync(descriptor);
378
- }
379
- catch {
380
- // Some filesystems do not support syncing directories. The rename is
381
- // still atomic, and the original settings remain available as a backup.
382
- }
383
- finally {
384
- if (descriptor !== undefined) {
385
- fs.closeSync(descriptor);
386
- }
387
- }
388
- }
389
- function requireAbsoluteExecutable(value) {
390
- if (typeof value !== "string" || value.trim().length === 0 || value.includes("\0")) {
391
- throw new Error("Claude hook executable path must be a non-empty absolute path");
392
- }
393
- if (!path.isAbsolute(value)) {
394
- throw new Error("Claude hook executable path must be absolute");
395
- }
396
- return path.normalize(value);
397
- }
398
- function requireObject(value, label) {
399
- if (!isObject(value)) {
400
- throw new Error(`${label} must be a JSON object`);
401
- }
402
- return value;
403
- }
404
- function isObject(value) {
405
- return value !== null && typeof value === "object" && !Array.isArray(value);
406
- }
407
- function isFileExistsError(error) {
408
- return isObject(error) && error.code === "EEXIST";
409
- }
410
- //# sourceMappingURL=claude-hook-installer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"claude-hook-installer.js","sourceRoot":"","sources":["../../src/claude-hook-installer.ts"],"names":[],"mappings":"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"}
@@ -1,89 +0,0 @@
1
- export type ClaudeHookEventName = "SessionStart" | "UserPromptSubmit" | "PermissionRequest" | "Stop" | "StopFailure" | "Notification";
2
- export type ClaudeJsonValue = null | boolean | number | string | ClaudeJsonValue[] | {
3
- [key: string]: ClaudeJsonValue;
4
- };
5
- export type ClaudeJsonObject = {
6
- [key: string]: ClaudeJsonValue;
7
- };
8
- export interface ClaudeHookInputBase {
9
- session_id: string;
10
- transcript_path: string;
11
- cwd: string;
12
- permission_mode?: string;
13
- effort?: ClaudeJsonValue;
14
- agent_id?: string;
15
- agent_type?: string;
16
- /** Present in recent Claude Code hook payloads and useful for exact turn correlation. */
17
- prompt_id?: string;
18
- }
19
- export interface ClaudeSessionStartHookInput extends ClaudeHookInputBase {
20
- hook_event_name: "SessionStart";
21
- source: "startup" | "resume" | "clear" | "compact" | "fork";
22
- model?: string;
23
- }
24
- export interface ClaudeUserPromptSubmitHookInput extends ClaudeHookInputBase {
25
- hook_event_name: "UserPromptSubmit";
26
- prompt: string;
27
- }
28
- export interface ClaudePermissionRequestHookInput extends ClaudeHookInputBase {
29
- hook_event_name: "PermissionRequest";
30
- tool_name: string;
31
- tool_input: ClaudeJsonValue;
32
- permission_suggestions?: ClaudeJsonValue[];
33
- }
34
- export interface ClaudeBackgroundTaskSummary extends ClaudeJsonObject {
35
- id: string;
36
- type: string;
37
- status: string;
38
- description: string;
39
- }
40
- export interface ClaudeSessionCronSummary extends ClaudeJsonObject {
41
- id: string;
42
- schedule: string;
43
- recurring: boolean;
44
- prompt: string;
45
- }
46
- export interface ClaudeStopHookInput extends ClaudeHookInputBase {
47
- hook_event_name: "Stop";
48
- stop_hook_active: boolean;
49
- last_assistant_message?: string;
50
- /** Undefined is intentionally distinct from an observed empty array. */
51
- background_tasks?: ClaudeBackgroundTaskSummary[];
52
- /** Undefined is intentionally distinct from an observed empty array. */
53
- session_crons?: ClaudeSessionCronSummary[];
54
- }
55
- export type ClaudeStopFailureCode = "rate_limit" | "authentication_failed" | "oauth_org_not_allowed" | "billing_error" | "invalid_request" | "model_not_found" | "server_error" | "max_output_tokens" | "unknown";
56
- export interface ClaudeStopFailureHookInput extends ClaudeHookInputBase {
57
- hook_event_name: "StopFailure";
58
- error: ClaudeStopFailureCode;
59
- error_details?: ClaudeJsonValue;
60
- last_assistant_message?: string;
61
- }
62
- export interface ClaudeNotificationHookInput extends ClaudeHookInputBase {
63
- hook_event_name: "Notification";
64
- message: string;
65
- title?: string;
66
- notification_type: string;
67
- }
68
- export type ClaudeHookInput = ClaudeSessionStartHookInput | ClaudeUserPromptSubmitHookInput | ClaudePermissionRequestHookInput | ClaudeStopHookInput | ClaudeStopFailureHookInput | ClaudeNotificationHookInput;
69
- export type ClaudePermissionBehavior = "allow" | "deny";
70
- export type ClaudePermissionHookOutput = {
71
- hookSpecificOutput: {
72
- hookEventName: "PermissionRequest";
73
- decision: {
74
- behavior: "allow";
75
- } | {
76
- behavior: "deny";
77
- message: string;
78
- interrupt?: boolean;
79
- };
80
- };
81
- };
82
- export declare function parseClaudeHookInput(value: unknown): ClaudeHookInput;
83
- export declare function canonicalClaudePermissionFingerprint(input: ClaudePermissionRequestHookInput): string;
84
- export declare function claudePermissionHookOutput(decision: {
85
- behavior: ClaudePermissionBehavior;
86
- interrupt?: boolean;
87
- message?: string;
88
- }): ClaudePermissionHookOutput;
89
- export declare function canonicalJson(value: ClaudeJsonValue): string;