@burmese/claude 3.1.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 (42) hide show
  1. package/LICENSE +21 -0
  2. package/dist/check-claude-code.d.ts +2 -0
  3. package/dist/check-claude-code.d.ts.map +1 -0
  4. package/dist/check-claude-code.js +89 -0
  5. package/dist/check-claude-code.js.map +1 -0
  6. package/dist/check-claude-hooks.d.ts +2 -0
  7. package/dist/check-claude-hooks.d.ts.map +1 -0
  8. package/dist/check-claude-hooks.js +193 -0
  9. package/dist/check-claude-hooks.js.map +1 -0
  10. package/dist/claude-code.d.ts +49 -0
  11. package/dist/claude-code.d.ts.map +1 -0
  12. package/dist/claude-code.js +222 -0
  13. package/dist/claude-code.js.map +1 -0
  14. package/dist/cli-args.d.ts +4 -0
  15. package/dist/cli-args.d.ts.map +1 -0
  16. package/dist/cli-args.js +44 -0
  17. package/dist/cli-args.js.map +1 -0
  18. package/dist/cli.d.ts +3 -0
  19. package/dist/cli.d.ts.map +1 -0
  20. package/dist/cli.js +36 -0
  21. package/dist/cli.js.map +1 -0
  22. package/dist/codex-code.d.ts +32 -0
  23. package/dist/codex-code.d.ts.map +1 -0
  24. package/dist/codex-code.js +201 -0
  25. package/dist/codex-code.js.map +1 -0
  26. package/dist/hook-messages.d.ts +2 -0
  27. package/dist/hook-messages.d.ts.map +1 -0
  28. package/dist/hook-messages.js +2 -0
  29. package/dist/hook-messages.js.map +1 -0
  30. package/dist/hook-settings.d.ts +30 -0
  31. package/dist/hook-settings.d.ts.map +1 -0
  32. package/dist/hook-settings.js +243 -0
  33. package/dist/hook-settings.js.map +1 -0
  34. package/dist/hooks.d.ts +27 -0
  35. package/dist/hooks.d.ts.map +1 -0
  36. package/dist/hooks.js +254 -0
  37. package/dist/hooks.js.map +1 -0
  38. package/dist/index.d.ts +7 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +7 -0
  41. package/dist/index.js.map +1 -0
  42. package/package.json +42 -0
@@ -0,0 +1,30 @@
1
+ import { type OpenPetsCommandMode } from "./claude-code.js";
2
+ export declare const openPetsHookMarker = "--openpets-managed";
3
+ export declare const claudeHookEvents: readonly ["UserPromptSubmit", "PreToolUse", "PermissionRequest", "Notification", "Stop", "StopFailure"];
4
+ export type ClaudeHookInstallStatus = "not_installed" | "installed" | "needs_update" | "error";
5
+ export interface ClaudeHookDoctorResult {
6
+ readonly status: ClaudeHookInstallStatus;
7
+ readonly settingsPath: string;
8
+ readonly exists: boolean;
9
+ readonly valid: boolean;
10
+ readonly message: string;
11
+ readonly backupPath?: string;
12
+ readonly preview: Record<string, unknown>;
13
+ readonly asyncSupported: boolean;
14
+ }
15
+ export interface ClaudeHookWriteResult extends ClaudeHookDoctorResult {
16
+ readonly changed: boolean;
17
+ }
18
+ export declare function getClaudeUserSettingsPath(): string;
19
+ export declare function createOpenPetsHookCommand(commandMode?: OpenPetsCommandMode, selectedPetId?: string, nodeCommand?: string): string;
20
+ export declare function getLocalClaudeCliPath(): string;
21
+ export declare function getBundledClaudeCliPath(): string;
22
+ export declare function assertLocalClaudeCliPath(): void;
23
+ export declare function assertBundledClaudeCliPath(): void;
24
+ export declare function createOpenPetsHookSettingsPreview(commandMode?: OpenPetsCommandMode, selectedPetId?: string, nodeCommand?: string): Record<string, unknown>;
25
+ export declare function doctorClaudeHooks(settingsPath?: string, commandMode?: OpenPetsCommandMode, selectedPetId?: string, nodeCommand?: string): ClaudeHookDoctorResult;
26
+ export declare function installClaudeHooks(settingsPath?: string, commandMode?: OpenPetsCommandMode, selectedPetId?: string, nodeCommand?: string): ClaudeHookWriteResult;
27
+ export declare function uninstallClaudeHooks(settingsPath?: string, commandMode?: OpenPetsCommandMode): ClaudeHookWriteResult;
28
+ export declare function addOpenPetsHooks(settings: Record<string, unknown>, commandMode?: OpenPetsCommandMode, selectedPetId?: string, nodeCommand?: string): Record<string, unknown>;
29
+ export declare function removeOpenPetsHooks(settings: Record<string, unknown>): Record<string, unknown>;
30
+ //# sourceMappingURL=hook-settings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook-settings.d.ts","sourceRoot":"","sources":["../src/hook-settings.ts"],"names":[],"mappings":"AAKA,OAAO,EAAiD,KAAK,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAE3G,eAAO,MAAM,kBAAkB,uBAAuB,CAAC;AACvD,eAAO,MAAM,gBAAgB,yGAA0G,CAAC;AAExI,MAAM,MAAM,uBAAuB,GAAG,eAAe,GAAG,WAAW,GAAG,cAAc,GAAG,OAAO,CAAC;AAE/F,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,MAAM,EAAE,uBAAuB,CAAC;IACzC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;CAClC;AAED,MAAM,WAAW,qBAAsB,SAAQ,sBAAsB;IACnE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,wBAAgB,yBAAyB,IAAI,MAAM,CAElD;AAED,wBAAgB,yBAAyB,CAAC,WAAW,GAAE,mBAAiC,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,WAAW,SAAS,GAAG,MAAM,CAQ9I;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD;AAED,wBAAgB,wBAAwB,IAAI,IAAI,CAM/C;AAED,wBAAgB,0BAA0B,IAAI,IAAI,CAWjD;AAMD,wBAAgB,iCAAiC,CAAC,WAAW,GAAE,mBAAiC,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,WAAW,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMvK;AAED,wBAAgB,iBAAiB,CAAC,YAAY,SAA8B,EAAE,WAAW,GAAE,mBAAiC,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,WAAW,SAAS,GAAG,sBAAsB,CAkBlM;AAED,wBAAgB,kBAAkB,CAAC,YAAY,SAA8B,EAAE,WAAW,GAAE,mBAAiC,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,WAAW,SAAS,GAAG,qBAAqB,CASlM;AAED,wBAAgB,oBAAoB,CAAC,YAAY,SAA8B,EAAE,WAAW,GAAE,mBAAiC,GAAG,qBAAqB,CAQtJ;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAE,mBAAiC,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,WAAW,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAUzL;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAc9F"}
@@ -0,0 +1,243 @@
1
+ import { chmodSync, existsSync, lstatSync, mkdirSync, readFileSync, realpathSync, renameSync, statSync, writeFileSync } from "node:fs";
2
+ import { dirname, isAbsolute, join, relative } from "node:path";
3
+ import { homedir } from "node:os";
4
+ import { fileURLToPath } from "node:url";
5
+ import { mapAsarPathToUnpacked, validateOpenPetsPetArg } from "./claude-code.js";
6
+ export const openPetsHookMarker = "--openpets-managed";
7
+ export const claudeHookEvents = ["UserPromptSubmit", "PreToolUse", "PermissionRequest", "Notification", "Stop", "StopFailure"];
8
+ export function getClaudeUserSettingsPath() {
9
+ return join(homedir(), ".claude", "settings.json");
10
+ }
11
+ export function createOpenPetsHookCommand(commandMode = "published", selectedPetId, nodeCommand = "node") {
12
+ const petArgs = selectedPetId === undefined ? "" : ` --pet ${shellQuote(validateOpenPetsPetArg(selectedPetId))}`;
13
+ if (commandMode === "local" || commandMode === "bundled") {
14
+ const cliPath = commandMode === "bundled" ? getBundledClaudeCliPath() : getLocalClaudeCliPath();
15
+ commandMode === "bundled" ? assertBundledClaudeCliPath() : assertLocalClaudeCliPath();
16
+ return `${shellQuote(nodeCommand)} ${shellQuote(cliPath)} hook ${openPetsHookMarker}${petArgs}`;
17
+ }
18
+ return `npx -y @burmese/claude hook ${openPetsHookMarker}${petArgs}`;
19
+ }
20
+ export function getLocalClaudeCliPath() {
21
+ return join(dirname(fileURLToPath(import.meta.url)), "cli.js");
22
+ }
23
+ export function getBundledClaudeCliPath() {
24
+ return mapAsarPathToUnpacked(getLocalClaudeCliPath());
25
+ }
26
+ export function assertLocalClaudeCliPath() {
27
+ const path = getLocalClaudeCliPath();
28
+ const expectedPrefix = dirname(fileURLToPath(import.meta.url));
29
+ if (!path.startsWith(expectedPrefix))
30
+ throw new Error("Local Claude hook path is outside the OpenPets package.");
31
+ const stat = statSync(path);
32
+ if (!stat.isFile())
33
+ throw new Error("Local Claude hook CLI path is not a regular file.");
34
+ }
35
+ export function assertBundledClaudeCliPath() {
36
+ const path = getBundledClaudeCliPath();
37
+ if (isTrueAsarPath(path))
38
+ throw new Error("Bundled Claude hook CLI path must be unpacked outside app.asar.");
39
+ if (path.includes("\n") || path.includes("\r") || path.includes("\0"))
40
+ throw new Error("Bundled Claude hook CLI path contains unsupported characters.");
41
+ if (lstatSync(path).isSymbolicLink())
42
+ throw new Error("Bundled Claude hook CLI path must not be a symlink.");
43
+ const stat = statSync(path);
44
+ if (!stat.isFile())
45
+ throw new Error("Bundled Claude hook CLI path is not a regular file.");
46
+ const expectedRoot = realpathSync(mapAsarPathToUnpacked(join(dirname(fileURLToPath(import.meta.url)), "..", "..")));
47
+ const realPath = realpathSync(path);
48
+ const rel = relative(expectedRoot, realPath);
49
+ if (rel.startsWith("..") || isAbsolute(rel))
50
+ throw new Error("Bundled Claude hook CLI path is outside the packaged OpenPets resources.");
51
+ }
52
+ function isTrueAsarPath(path) {
53
+ return /app\.asar(?:$|[\\/])/.test(path) && !/app\.asar\.unpacked(?:$|[\\/])/.test(path);
54
+ }
55
+ export function createOpenPetsHookSettingsPreview(commandMode = "published", selectedPetId, nodeCommand = "node") {
56
+ const hooks = {};
57
+ for (const event of claudeHookEvents) {
58
+ hooks[event] = [{ hooks: [createHookCommandEntry(commandMode, selectedPetId, nodeCommand)] }];
59
+ }
60
+ return { hooks };
61
+ }
62
+ export function doctorClaudeHooks(settingsPath = getClaudeUserSettingsPath(), commandMode = "published", selectedPetId, nodeCommand = "node") {
63
+ const preview = createOpenPetsHookSettingsPreview(commandMode, selectedPetId, nodeCommand);
64
+ const asyncSupported = isClaudeHookAsyncSupported();
65
+ try {
66
+ const settings = readClaudeSettings(settingsPath);
67
+ const status = getHookInstallStatus(settings, commandMode, selectedPetId, nodeCommand);
68
+ return {
69
+ status,
70
+ settingsPath,
71
+ exists: existsSync(settingsPath),
72
+ valid: true,
73
+ message: `${asyncSupported ? status === "installed" ? "OpenPets Claude hooks are installed. Async hook install is enabled by OpenPets." : status === "needs_update" ? "OpenPets Claude hooks need update. Async hook install is enabled by OpenPets." : "OpenPets Claude hooks are not installed. Async hook install is enabled by OpenPets." : "Async hook install is disabled by OpenPets."} ${selectedPetId ? `Hook events target ${selectedPetId}.` : "Hook events target the default pet."}`,
74
+ preview,
75
+ asyncSupported,
76
+ };
77
+ }
78
+ catch (error) {
79
+ return { status: "error", settingsPath, exists: existsSync(settingsPath), valid: false, message: error instanceof Error ? error.message : "Claude hook settings are invalid.", preview, asyncSupported };
80
+ }
81
+ }
82
+ export function installClaudeHooks(settingsPath = getClaudeUserSettingsPath(), commandMode = "published", selectedPetId, nodeCommand = "node") {
83
+ if (!isClaudeHookAsyncSupported())
84
+ throw new Error("Claude async hook support is not enabled for this OpenPets build.");
85
+ const settings = readClaudeSettings(settingsPath);
86
+ const status = getHookInstallStatus(settings, commandMode, selectedPetId, nodeCommand);
87
+ if (status === "installed")
88
+ return { ...doctorClaudeHooks(settingsPath, commandMode, selectedPetId, nodeCommand), changed: false };
89
+ const backupPath = backupSettings(settingsPath);
90
+ const next = addOpenPetsHooks(removeOpenPetsHooks(settings), commandMode, selectedPetId, nodeCommand);
91
+ writeClaudeSettings(settingsPath, next);
92
+ return { ...doctorClaudeHooks(settingsPath, commandMode, selectedPetId, nodeCommand), backupPath, changed: true };
93
+ }
94
+ export function uninstallClaudeHooks(settingsPath = getClaudeUserSettingsPath(), commandMode = "published") {
95
+ const settings = readClaudeSettings(settingsPath);
96
+ const status = getHookInstallStatus(settings, commandMode);
97
+ if (status === "not_installed")
98
+ return { ...doctorClaudeHooks(settingsPath, commandMode), changed: false };
99
+ const backupPath = backupSettings(settingsPath);
100
+ const next = removeOpenPetsHooks(settings);
101
+ writeClaudeSettings(settingsPath, next);
102
+ return { ...doctorClaudeHooks(settingsPath, commandMode), backupPath, changed: true };
103
+ }
104
+ export function addOpenPetsHooks(settings, commandMode = "published", selectedPetId, nodeCommand = "node") {
105
+ const next = structuredClone(settings);
106
+ assertSelectedHookEventsAreArrays(next);
107
+ const hooks = isRecord(next.hooks) ? { ...next.hooks } : {};
108
+ for (const event of claudeHookEvents) {
109
+ const existing = Array.isArray(hooks[event]) ? hooks[event].filter((entry) => !containsOpenPetsHook(entry)) : [];
110
+ hooks[event] = [...existing, { hooks: [createHookCommandEntry(commandMode, selectedPetId, nodeCommand)] }];
111
+ }
112
+ next.hooks = hooks;
113
+ return next;
114
+ }
115
+ export function removeOpenPetsHooks(settings) {
116
+ const next = structuredClone(settings);
117
+ if (!isRecord(next.hooks))
118
+ return next;
119
+ assertSelectedHookEventsAreArrays(next);
120
+ const hooks = { ...next.hooks };
121
+ for (const [event, entries] of Object.entries(hooks)) {
122
+ if (!Array.isArray(entries))
123
+ continue;
124
+ const cleaned = entries.map(removeOpenPetsHooksFromMatcher).filter((entry) => entry !== null);
125
+ if (cleaned.length > 0)
126
+ hooks[event] = cleaned;
127
+ else
128
+ delete hooks[event];
129
+ }
130
+ if (Object.keys(hooks).length > 0)
131
+ next.hooks = hooks;
132
+ else
133
+ delete next.hooks;
134
+ return next;
135
+ }
136
+ function getHookInstallStatus(settings, commandMode, selectedPetId, nodeCommand = "node") {
137
+ if (settings.hooks !== undefined && !isRecord(settings.hooks))
138
+ throw new Error("Claude settings hooks field is not an object.");
139
+ const hooks = isRecord(settings.hooks) ? settings.hooks : {};
140
+ let foundAny = false;
141
+ let staleManaged = false;
142
+ for (const event of claudeHookEvents) {
143
+ const entries = hooks[event];
144
+ if (!Array.isArray(entries))
145
+ return foundAny ? "needs_update" : "not_installed";
146
+ const currentCount = entries.filter((entry) => containsCurrentOpenPetsHook(entry, commandMode, selectedPetId, nodeCommand)).length;
147
+ const managedCount = entries.filter((entry) => containsOpenPetsHook(entry)).length;
148
+ const hasCurrent = currentCount === 1;
149
+ if (managedCount > 0)
150
+ foundAny = true;
151
+ if (managedCount !== currentCount || currentCount > 1)
152
+ staleManaged = true;
153
+ if (!hasCurrent)
154
+ return foundAny ? "needs_update" : "not_installed";
155
+ foundAny = true;
156
+ }
157
+ return staleManaged ? "needs_update" : "installed";
158
+ }
159
+ function createHookCommandEntry(commandMode, selectedPetId, nodeCommand = "node") {
160
+ return { type: "command", command: createOpenPetsHookCommand(commandMode, selectedPetId, nodeCommand), timeout: 3, async: true, asyncRewake: false };
161
+ }
162
+ function containsCurrentOpenPetsHook(value, commandMode, selectedPetId, nodeCommand = "node") {
163
+ if (!isRecord(value) || !Array.isArray(value.hooks))
164
+ return false;
165
+ const command = createOpenPetsHookCommand(commandMode, selectedPetId, nodeCommand);
166
+ return value.hooks.some((hook) => isRecord(hook) && hook.type === "command" && hook.command === command && hook.timeout === 3 && hook.async === true && hook.asyncRewake === false);
167
+ }
168
+ function containsOpenPetsHook(value) {
169
+ if (isRecord(value) && typeof value.command === "string" && value.command.includes(openPetsHookMarker))
170
+ return true;
171
+ if (isRecord(value) && Array.isArray(value.hooks))
172
+ return value.hooks.some(containsOpenPetsHook);
173
+ return false;
174
+ }
175
+ function removeOpenPetsHooksFromMatcher(value) {
176
+ if (!isRecord(value) || !Array.isArray(value.hooks))
177
+ return containsOpenPetsHook(value) ? null : value;
178
+ const hooks = value.hooks.filter((hook) => !containsOpenPetsHook(hook));
179
+ if (hooks.length === 0)
180
+ return null;
181
+ return { ...value, hooks };
182
+ }
183
+ function readClaudeSettings(path) {
184
+ assertSafeSettingsPath(path);
185
+ if (!existsSync(path))
186
+ return {};
187
+ const parsed = JSON.parse(readFileSync(path, "utf8"));
188
+ if (!isRecord(parsed) || Array.isArray(parsed))
189
+ throw new Error("Claude settings must be a JSON object.");
190
+ if (parsed.hooks !== undefined && !isRecord(parsed.hooks))
191
+ throw new Error("Claude settings hooks field is not an object.");
192
+ assertSelectedHookEventsAreArrays(parsed);
193
+ return parsed;
194
+ }
195
+ function assertSelectedHookEventsAreArrays(settings) {
196
+ if (!isRecord(settings.hooks))
197
+ return;
198
+ for (const event of claudeHookEvents) {
199
+ if (settings.hooks[event] !== undefined && !Array.isArray(settings.hooks[event])) {
200
+ throw new Error(`Claude settings hooks.${event} must be an array.`);
201
+ }
202
+ }
203
+ }
204
+ function isClaudeHookAsyncSupported() {
205
+ return process.env.OPENPETS_DISABLE_CLAUDE_ASYNC_HOOKS !== "1";
206
+ }
207
+ function shellQuote(value) {
208
+ if (/^[a-zA-Z0-9_@%+=:,./-]+$/.test(value))
209
+ return value;
210
+ if (/[\r\n"]/.test(value) || value.includes("\0"))
211
+ throw new Error("Local Claude hook path contains unsupported shell characters.");
212
+ return `"${value.replaceAll("\\", "\\\\").replaceAll("$", "\\$").replaceAll("`", "\\`")}"`;
213
+ }
214
+ function writeClaudeSettings(path, settings) {
215
+ assertSafeSettingsPath(path);
216
+ mkdirSync(dirname(path), { recursive: true, mode: 0o700 });
217
+ const tempPath = `${path}.${process.pid}.tmp`;
218
+ writeFileSync(tempPath, `${JSON.stringify(settings, null, 2)}\n`, { encoding: "utf8", mode: 0o600 });
219
+ renameSync(tempPath, path);
220
+ }
221
+ function backupSettings(path) {
222
+ if (!existsSync(path))
223
+ return undefined;
224
+ assertSafeSettingsPath(path);
225
+ const backupPath = `${path}.openpets-backup-${new Date().toISOString().replace(/[-:]/g, "").replace(/\.\d{3}Z$/, "Z")}.json`;
226
+ writeFileSync(backupPath, readFileSync(path), { mode: 0o600 });
227
+ try {
228
+ chmodSync(backupPath, 0o600);
229
+ }
230
+ catch { /* best effort */ }
231
+ return backupPath;
232
+ }
233
+ function assertSafeSettingsPath(path) {
234
+ if (!existsSync(path))
235
+ return;
236
+ const stat = lstatSync(path);
237
+ if (stat.isSymbolicLink() || !stat.isFile())
238
+ throw new Error("Claude settings path must be a regular file.");
239
+ }
240
+ function isRecord(value) {
241
+ return typeof value === "object" && value !== null && !Array.isArray(value);
242
+ }
243
+ //# sourceMappingURL=hook-settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook-settings.js","sourceRoot":"","sources":["../src/hook-settings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { type OpenPetsClient, type OpenPetsReaction } from "@burmese/client";
2
+ import { type HookSpeechCategory } from "./hook-messages.js";
3
+ export type ClaudeHookEventName = "UserPromptSubmit" | "PreToolUse" | "PostToolUse" | "PermissionRequest" | "Notification" | "Stop" | "StopFailure";
4
+ export interface ClaudeHookDecision {
5
+ readonly eventName?: string;
6
+ readonly reaction?: OpenPetsReaction;
7
+ readonly speechCategory?: HookSpeechCategory;
8
+ }
9
+ export interface ClaudeHookOptions {
10
+ readonly client?: OpenPetsClient;
11
+ readonly configuredPetId?: string;
12
+ readonly clientLabel?: string;
13
+ readonly projectLocal?: boolean;
14
+ readonly eventName?: ClaudeHookEventName;
15
+ readonly now?: () => number;
16
+ readonly random?: () => number;
17
+ readonly throttlePath?: string;
18
+ readonly debug?: boolean;
19
+ }
20
+ export declare function runClaudeHookFromStdin(stdin?: NodeJS.ReadStream, options?: ClaudeHookOptions): Promise<number>;
21
+ export declare function handleClaudeHookPayload(raw: string, options?: ClaudeHookOptions): Promise<ClaudeHookDecision | null>;
22
+ export declare function hasProjectLocalOpenPetsHook(projectDir?: string | undefined): boolean;
23
+ export declare function parseHookPayload(raw: string): Record<string, unknown>;
24
+ export declare function mapClaudeHookEvent(payload: Record<string, unknown>, eventNameOverride?: string): ClaudeHookDecision | null;
25
+ export declare function validateHookSpeech(message: string): string;
26
+ export declare function getDefaultThrottlePath(): string;
27
+ //# sourceMappingURL=hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAIA,OAAO,EAAwB,KAAK,cAAc,EAAE,KAAK,gBAAgB,EAAuB,MAAM,iBAAiB,CAAC;AAGxH,OAAO,EAAkB,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAE7E,MAAM,MAAM,mBAAmB,GAAG,kBAAkB,GAAG,YAAY,GAAG,aAAa,GAAG,mBAAmB,GAAG,cAAc,GAAG,MAAM,GAAG,aAAa,CAAC;AAEpJ,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IACrC,QAAQ,CAAC,cAAc,CAAC,EAAE,kBAAkB,CAAC;CAC9C;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,CAAC,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,mBAAmB,CAAC;IACzC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC;IAC/B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAUD,wBAAsB,sBAAsB,CAAC,KAAK,GAAE,MAAM,CAAC,UAA0B,EAAE,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,CAWvI;AAED,wBAAsB,uBAAuB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAoC9H;AAED,wBAAgB,2BAA2B,CAAC,UAAU,qBAAiC,GAAG,OAAO,CAiBhG;AAkBD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAIrE;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,CAAC,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI,CAU1H;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,wBAAgB,sBAAsB,IAAI,MAAM,CAS/C"}
package/dist/hooks.js ADDED
@@ -0,0 +1,254 @@
1
+ import { lstatSync, mkdirSync, readFileSync, realpathSync, renameSync, statSync, writeFileSync } from "node:fs";
2
+ import { dirname, isAbsolute, join, relative } from "node:path";
3
+ import { homedir, tmpdir, userInfo } from "node:os";
4
+ import { createOpenPetsClient, OpenPetsClientError } from "@burmese/client";
5
+ import { validateHookSpeech as validateSharedHookSpeech } from "@burmese/agent-events";
6
+ import { pickHookSpeech } from "./hook-messages.js";
7
+ const maxHookInputBytes = 64 * 1024;
8
+ const maxProjectLocalSettingsBytes = 256 * 1024;
9
+ const speechCooldownMs = 20_000;
10
+ const permissionCooldownMs = 3_000;
11
+ const reactionCooldownMs = 10_000;
12
+ const throttleStaleMs = 60_000;
13
+ const defaultOpenPetsClientLabel = "Claude";
14
+ export async function runClaudeHookFromStdin(stdin = process.stdin, options = {}) {
15
+ try {
16
+ const raw = await readLimitedStdin(stdin, maxHookInputBytes);
17
+ await handleClaudeHookPayload(raw, options);
18
+ return 0;
19
+ }
20
+ catch (error) {
21
+ if (options.debug || process.env.OPENPETS_DEBUG === "1") {
22
+ process.stderr.write(`OpenPets Claude hook ignored error: ${sanitizeDebugError(error)}\n`);
23
+ }
24
+ return 0;
25
+ }
26
+ }
27
+ export async function handleClaudeHookPayload(raw, options = {}) {
28
+ let parsed;
29
+ try {
30
+ parsed = parseHookPayload(raw);
31
+ }
32
+ catch {
33
+ return null;
34
+ }
35
+ const decision = mapClaudeHookEvent(parsed, options.eventName);
36
+ if (!decision?.reaction)
37
+ return decision;
38
+ if (!options.projectLocal && hasProjectLocalOpenPetsHook())
39
+ return decision;
40
+ // A task finishing is a discrete event, not a repeatable burst: never throttle terminal
41
+ // events, so one session's finish can't be swallowed by another session's recent finish.
42
+ const isTerminal = decision.eventName === "Stop" || decision.eventName === "StopFailure";
43
+ const externalSessionId = readOptionalSessionId(parsed);
44
+ const sessionId = externalSessionId ?? "global";
45
+ const shouldSpeak = decision.speechCategory ? (isTerminal || shouldSendSpeech(decision.speechCategory, sessionId, options)) : false;
46
+ const shouldReact = isTerminal || shouldSendReaction(decision.reaction, sessionId, options);
47
+ if (!shouldSpeak && !shouldReact)
48
+ return decision;
49
+ const client = options.client ?? createOpenPetsClient({ connectTimeoutMs: 500, responseTimeoutMs: 500 });
50
+ const clientLabel = options.clientLabel ?? defaultOpenPetsClientLabel;
51
+ const lease = options.configuredPetId ? await acquireHookLease(client, options.configuredPetId, options.debug) : undefined;
52
+ try {
53
+ if (decision.speechCategory && shouldSpeak) {
54
+ const message = validateHookSpeech(pickHookSpeech(decision.speechCategory, options.random));
55
+ await client.say(message, { reaction: decision.reaction, leaseId: lease?.leaseId, clientLabel, source: "hook", externalSessionId });
56
+ }
57
+ else {
58
+ await client.react(decision.reaction, { leaseId: lease?.leaseId, clientLabel, source: "hook", externalSessionId });
59
+ }
60
+ }
61
+ catch (error) {
62
+ if (!(error instanceof OpenPetsClientError) && options.debug) {
63
+ process.stderr.write(`OpenPets Claude hook client error: ${sanitizeDebugError(error)}\n`);
64
+ }
65
+ }
66
+ return decision;
67
+ }
68
+ export function hasProjectLocalOpenPetsHook(projectDir = process.env.CLAUDE_PROJECT_DIR) {
69
+ if (!projectDir || /[\0\r\n]/.test(projectDir))
70
+ return false;
71
+ try {
72
+ const projectReal = realpathSync(projectDir);
73
+ const settingsPath = join(projectReal, ".claude", "settings.local.json");
74
+ const settingsReal = realpathSync(settingsPath);
75
+ const rel = relative(projectReal, settingsReal);
76
+ if (rel.startsWith("..") || isAbsolute(rel))
77
+ return false;
78
+ const settingsLstat = lstatSync(settingsPath);
79
+ if (settingsLstat.isSymbolicLink())
80
+ return false;
81
+ const settingsStat = statSync(settingsPath);
82
+ if (!settingsStat.isFile() || settingsStat.size <= 0 || settingsStat.size > maxProjectLocalSettingsBytes)
83
+ return false;
84
+ const settings = JSON.parse(readFileSync(settingsPath, "utf8"));
85
+ return containsProjectLocalOpenPetsHook(settings);
86
+ }
87
+ catch {
88
+ return false;
89
+ }
90
+ }
91
+ function containsProjectLocalOpenPetsHook(value) {
92
+ if (typeof value === "string")
93
+ return value.includes("--openpets-managed") && value.includes("--project-local");
94
+ if (Array.isArray(value))
95
+ return value.some(containsProjectLocalOpenPetsHook);
96
+ if (isRecord(value))
97
+ return Object.values(value).some(containsProjectLocalOpenPetsHook);
98
+ return false;
99
+ }
100
+ async function acquireHookLease(client, requestedPetId, debug = false) {
101
+ try {
102
+ return await client.acquireLease({ requestedPetId });
103
+ }
104
+ catch (error) {
105
+ if (debug)
106
+ process.stderr.write(`OpenPets Claude hook lease unavailable: ${sanitizeDebugError(error)}\n`);
107
+ return undefined;
108
+ }
109
+ }
110
+ export function parseHookPayload(raw) {
111
+ if (Buffer.byteLength(raw, "utf8") > maxHookInputBytes)
112
+ throw new Error("Claude hook payload is too large.");
113
+ const parsed = JSON.parse(raw || "{}");
114
+ return isRecord(parsed) ? parsed : {};
115
+ }
116
+ export function mapClaudeHookEvent(payload, eventNameOverride) {
117
+ const eventName = eventNameOverride ?? readEventName(payload);
118
+ if (eventName === "UserPromptSubmit")
119
+ return { eventName, reaction: "thinking" };
120
+ if (eventName === "PermissionRequest")
121
+ return { eventName, reaction: "waiting", speechCategory: "permission" };
122
+ if (eventName === "Notification")
123
+ return { eventName };
124
+ if (eventName === "Stop")
125
+ return { eventName, reaction: "success" };
126
+ if (eventName === "StopFailure")
127
+ return { eventName, reaction: "error", speechCategory: "error" };
128
+ if (eventName === "PreToolUse")
129
+ return { eventName, reaction: classifyToolReaction(payload) ?? (eventNameOverride ? "working" : undefined) };
130
+ if (eventName === "PostToolUse")
131
+ return { eventName, reaction: "working" };
132
+ return eventName ? { eventName } : null;
133
+ }
134
+ export function validateHookSpeech(message) {
135
+ return validateSharedHookSpeech(message);
136
+ }
137
+ export function getDefaultThrottlePath() {
138
+ if (process.platform === "win32") {
139
+ const base = process.env.LOCALAPPDATA || join(homedir(), "AppData", "Local");
140
+ return join(base, "OpenPets", "claude-hook-throttle.json");
141
+ }
142
+ const stateHome = process.env.XDG_STATE_HOME || join(homedir(), ".local", "state");
143
+ if (stateHome)
144
+ return join(stateHome, "openpets", "claude-hook-throttle.json");
145
+ const uid = safeUid();
146
+ return join(tmpdir(), `openpets-${uid}`, "claude-hook-throttle.json");
147
+ }
148
+ function classifyToolReaction(payload) {
149
+ const toolName = typeof payload.tool_name === "string" ? payload.tool_name : typeof payload.toolName === "string" ? payload.toolName : typeof payload.name === "string" ? payload.name : "";
150
+ if (toolName === "Edit" || toolName === "Write" || toolName === "MultiEdit")
151
+ return "editing";
152
+ if (toolName === "Bash") {
153
+ const command = extractBashCommand(payload.tool_input);
154
+ return /\b(test|vitest|jest|pytest|npm\s+test|pnpm\s+test|yarn\s+test|cargo\s+test|go\s+test)\b/i.test(command) ? "testing" : undefined;
155
+ }
156
+ return undefined;
157
+ }
158
+ function readEventName(payload) {
159
+ for (const key of ["hook_event_name", "event_name", "hookEventName", "event"]) {
160
+ if (typeof payload[key] === "string")
161
+ return payload[key];
162
+ }
163
+ return undefined;
164
+ }
165
+ function readOptionalSessionId(payload) {
166
+ const raw = typeof payload.session_id === "string" ? payload.session_id : typeof payload.sessionId === "string" ? payload.sessionId : "";
167
+ return raw.replace(/[^A-Za-z0-9_-]/g, "").slice(0, 64) || undefined;
168
+ }
169
+ function extractBashCommand(value) {
170
+ return isRecord(value) && typeof value.command === "string" ? value.command.slice(0, 300) : "";
171
+ }
172
+ function shouldSendSpeech(category, sessionId, options) {
173
+ const now = options.now?.() ?? Date.now();
174
+ const cooldown = category === "permission" ? permissionCooldownMs : speechCooldownMs;
175
+ return shouldSendThrottleKey(`speech:${category}:${sessionId}`, cooldown, now, options.throttlePath ?? getDefaultThrottlePath());
176
+ }
177
+ function shouldSendReaction(reaction, sessionId, options) {
178
+ const now = options.now?.() ?? Date.now();
179
+ return shouldSendThrottleKey(`reaction:${reaction}:${sessionId}`, reactionCooldownMs, now, options.throttlePath ?? getDefaultThrottlePath());
180
+ }
181
+ function shouldSendThrottleKey(key, cooldown, now, path) {
182
+ const state = readThrottleState(path);
183
+ const previous = typeof state[key] === "number" ? state[key] : 0;
184
+ if (now - previous < cooldown)
185
+ return false;
186
+ state[key] = now;
187
+ pruneStaleThrottleKeys(state, now);
188
+ writeThrottleState(path, state);
189
+ return true;
190
+ }
191
+ // ponytail: per-session keys would grow the file unboundedly; drop entries older than any
192
+ // possible cooldown (longest is 20s) so the file stays bounded by recently-active sessions.
193
+ function pruneStaleThrottleKeys(state, now) {
194
+ for (const [key, value] of Object.entries(state)) {
195
+ if (now - value > throttleStaleMs)
196
+ delete state[key];
197
+ }
198
+ }
199
+ function readThrottleState(path) {
200
+ try {
201
+ const parsed = JSON.parse(readFileSync(path, "utf8"));
202
+ if (!isRecord(parsed))
203
+ return {};
204
+ const state = {};
205
+ for (const [key, value] of Object.entries(parsed)) {
206
+ if ((key.startsWith("reaction:") || key.startsWith("speech:")) && typeof value === "number" && Number.isFinite(value))
207
+ state[key] = value;
208
+ }
209
+ return state;
210
+ }
211
+ catch {
212
+ return {};
213
+ }
214
+ }
215
+ function writeThrottleState(path, state) {
216
+ try {
217
+ mkdirSync(dirname(path), { recursive: true, mode: 0o700 });
218
+ const tempPath = `${path}.${process.pid}.tmp`;
219
+ writeFileSync(tempPath, `${JSON.stringify(state)}\n`, { encoding: "utf8", mode: 0o600 });
220
+ renameSync(tempPath, path);
221
+ }
222
+ catch {
223
+ // Best effort only; throttling must never break hooks.
224
+ }
225
+ }
226
+ function readLimitedStdin(stdin, maxBytes) {
227
+ return new Promise((resolve, reject) => {
228
+ let buffer = "";
229
+ stdin.setEncoding("utf8");
230
+ stdin.on("data", (chunk) => {
231
+ buffer += chunk;
232
+ if (Buffer.byteLength(buffer, "utf8") > maxBytes)
233
+ reject(new Error("Claude hook stdin is too large."));
234
+ });
235
+ stdin.on("error", reject);
236
+ stdin.on("end", () => resolve(buffer));
237
+ });
238
+ }
239
+ function sanitizeDebugError(error) {
240
+ const message = error instanceof Error ? error.message : String(error);
241
+ return message.replace(/(?:[A-Za-z]:)?[\\/][^\s"']{2,}/g, "<path>").slice(0, 200);
242
+ }
243
+ function safeUid() {
244
+ try {
245
+ return String(userInfo().uid);
246
+ }
247
+ catch {
248
+ return "user";
249
+ }
250
+ }
251
+ function isRecord(value) {
252
+ return typeof value === "object" && value !== null;
253
+ }
254
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export declare const claudePackageName = "@burmese/claude";
2
+ export * from "./claude-code.js";
3
+ export * from "./codex-code.js";
4
+ export * from "./hooks.js";
5
+ export * from "./hook-settings.js";
6
+ export * from "./hook-messages.js";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,oBAAoB,CAAC;AAEnD,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,7 @@
1
+ export const claudePackageName = "@burmese/claude";
2
+ export * from "./claude-code.js";
3
+ export * from "./codex-code.js";
4
+ export * from "./hooks.js";
5
+ export * from "./hook-settings.js";
6
+ export * from "./hook-messages.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,iBAAiB,GAAG,iBAAiB,CAAC;AAEnD,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC"}