@agentdeck/hooks 0.2.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.
- package/LICENSE +21 -0
- package/dist/install.d.ts +42 -0
- package/dist/install.d.ts.map +1 -0
- package/dist/install.js +208 -0
- package/dist/install.js.map +1 -0
- package/package.json +32 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 SerendipityBound
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export declare const HOOK_EVENTS: readonly ["SessionStart", "SessionEnd", "PreToolUse", "PostToolUse", "Stop", "Notification", "UserPromptSubmit"];
|
|
2
|
+
/**
|
|
3
|
+
* Shell snippet that resolves the AgentDeck daemon's HTTP port at hook
|
|
4
|
+
* runtime, then POSTs the hook payload to it. Kept in a single helper so
|
|
5
|
+
* the three hook-writer code paths (`@agentdeck/hooks`, `@agentdeck/setup`
|
|
6
|
+
* inlined copy, Swift `HookInstaller`) emit byte-identical shell.
|
|
7
|
+
*
|
|
8
|
+
* Discovery precedence:
|
|
9
|
+
* 1. `$AGENTDECK_PORT` env var (set by `agentdeck claude` session bridge
|
|
10
|
+
* so the hook targets the *owning* daemon even when several daemons
|
|
11
|
+
* are running in parallel)
|
|
12
|
+
* 2. `~/.agentdeck/daemon.json` (CLI)
|
|
13
|
+
* 3. App Store group container `daemon.json` (Swift)
|
|
14
|
+
* 4. `9120` fallback (legacy, never reached in practice)
|
|
15
|
+
*
|
|
16
|
+
* For (2) and (3) the snippet prefers the daemon's `httpPort` field when
|
|
17
|
+
* present — Swift runs WS and HTTP on separate ports. Each candidate is
|
|
18
|
+
* verified with a short `/health` probe so a stale daemon.json from a
|
|
19
|
+
* crashed daemon doesn't swallow the hook.
|
|
20
|
+
*/
|
|
21
|
+
export declare function buildHookCommand(eventName: string): string;
|
|
22
|
+
export declare function buildHookEntry(eventName: string): {
|
|
23
|
+
matcher: string;
|
|
24
|
+
hooks: any[];
|
|
25
|
+
};
|
|
26
|
+
/** Pure logic: apply AgentDeck hooks to a settings object (no file I/O). */
|
|
27
|
+
export declare function applyHooks(settings: any): any;
|
|
28
|
+
/** Pure logic: remove AgentDeck hooks from a settings object (no file I/O). */
|
|
29
|
+
export declare function removeHooks(settings: any): any;
|
|
30
|
+
/** Pure logic: migrate old hook formats to v2.1 matcher-group format. */
|
|
31
|
+
export declare function migrateHooks(settings: any): {
|
|
32
|
+
settings: any;
|
|
33
|
+
migrated: boolean;
|
|
34
|
+
};
|
|
35
|
+
/** File-system wrapper: install hooks into ~/.claude/settings.local.json */
|
|
36
|
+
export declare function installHooks(): void;
|
|
37
|
+
/** File-system wrapper: uninstall hooks from ~/.claude/settings.local.json */
|
|
38
|
+
export declare function uninstallHooks(): void;
|
|
39
|
+
/** File-system wrapper: migrate old hook formats in ~/.claude/settings.local.json.
|
|
40
|
+
* Silently catches errors to avoid breaking session startup. */
|
|
41
|
+
export declare function migrateHooksIfNeeded(): void;
|
|
42
|
+
//# sourceMappingURL=install.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,WAAW,kHAQd,CAAC;AAEX;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAa1D;AAGD,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM;;;EAa/C;AAED,4EAA4E;AAC5E,wBAAgB,UAAU,CAAC,QAAQ,EAAE,GAAG,GAAG,GAAG,CAuB7C;AAED,+EAA+E;AAC/E,wBAAgB,WAAW,CAAC,QAAQ,EAAE,GAAG,GAAG,GAAG,CAwB9C;AAED,yEAAyE;AACzE,wBAAgB,YAAY,CAAC,QAAQ,EAAE,GAAG,GAAG;IAAE,QAAQ,EAAE,GAAG,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAyChF;AAED,4EAA4E;AAC5E,wBAAgB,YAAY,IAAI,IAAI,CAkBnC;AAED,8EAA8E;AAC9E,wBAAgB,cAAc,IAAI,IAAI,CASrC;AAED;iEACiE;AACjE,wBAAgB,oBAAoB,IAAI,IAAI,CAwB3C"}
|
package/dist/install.js
ADDED
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'fs';
|
|
2
|
+
import { join } from 'path';
|
|
3
|
+
import { homedir } from 'os';
|
|
4
|
+
export const HOOK_EVENTS = [
|
|
5
|
+
'SessionStart',
|
|
6
|
+
'SessionEnd',
|
|
7
|
+
'PreToolUse',
|
|
8
|
+
'PostToolUse',
|
|
9
|
+
'Stop',
|
|
10
|
+
'Notification',
|
|
11
|
+
'UserPromptSubmit',
|
|
12
|
+
];
|
|
13
|
+
/**
|
|
14
|
+
* Shell snippet that resolves the AgentDeck daemon's HTTP port at hook
|
|
15
|
+
* runtime, then POSTs the hook payload to it. Kept in a single helper so
|
|
16
|
+
* the three hook-writer code paths (`@agentdeck/hooks`, `@agentdeck/setup`
|
|
17
|
+
* inlined copy, Swift `HookInstaller`) emit byte-identical shell.
|
|
18
|
+
*
|
|
19
|
+
* Discovery precedence:
|
|
20
|
+
* 1. `$AGENTDECK_PORT` env var (set by `agentdeck claude` session bridge
|
|
21
|
+
* so the hook targets the *owning* daemon even when several daemons
|
|
22
|
+
* are running in parallel)
|
|
23
|
+
* 2. `~/.agentdeck/daemon.json` (CLI)
|
|
24
|
+
* 3. App Store group container `daemon.json` (Swift)
|
|
25
|
+
* 4. `9120` fallback (legacy, never reached in practice)
|
|
26
|
+
*
|
|
27
|
+
* For (2) and (3) the snippet prefers the daemon's `httpPort` field when
|
|
28
|
+
* present — Swift runs WS and HTTP on separate ports. Each candidate is
|
|
29
|
+
* verified with a short `/health` probe so a stale daemon.json from a
|
|
30
|
+
* crashed daemon doesn't swallow the hook.
|
|
31
|
+
*/
|
|
32
|
+
export function buildHookCommand(eventName) {
|
|
33
|
+
return [
|
|
34
|
+
`PORT="\${AGENTDECK_PORT:-}"`,
|
|
35
|
+
`if [ -z "$PORT" ]; then`,
|
|
36
|
+
` for F in "$HOME/.agentdeck/daemon.json" "$HOME/Library/Group Containers/group.bound.serendipity.agentdeck.dashboard/daemon.json"; do`,
|
|
37
|
+
` [ -f "$F" ] || continue`,
|
|
38
|
+
` P=$(python3 -c "import json;d=json.load(open('$F'));print(d.get('httpPort') or d.get('port',''))" 2>/dev/null)`,
|
|
39
|
+
` [ -n "$P" ] && curl -sf --max-time 0.3 "http://127.0.0.1:$P/health" >/dev/null 2>&1 && { PORT="$P"; break; }`,
|
|
40
|
+
` done`,
|
|
41
|
+
`fi`,
|
|
42
|
+
`PORT="\${PORT:-9120}"`,
|
|
43
|
+
`curl -sf -X POST "http://127.0.0.1:$PORT/hooks/${eventName}" -H 'Content-Type: application/json' -d @- 2>/dev/null || true`,
|
|
44
|
+
].join('\n');
|
|
45
|
+
}
|
|
46
|
+
// Claude Code v2.1+ requires 3-level nesting: event → matcher group → hook handler.
|
|
47
|
+
export function buildHookEntry(eventName) {
|
|
48
|
+
const handler = {
|
|
49
|
+
type: 'command',
|
|
50
|
+
command: buildHookCommand(eventName),
|
|
51
|
+
};
|
|
52
|
+
// Tool-specific hooks (PreToolUse, PostToolUse) need a glob matcher to fire.
|
|
53
|
+
// Empty string "" means "match nothing" for tool events — use "" for non-tool
|
|
54
|
+
// events (SessionStart, Stop, etc.) where matcher is ignored.
|
|
55
|
+
const needsToolMatcher = ['PreToolUse', 'PostToolUse'].includes(eventName);
|
|
56
|
+
return {
|
|
57
|
+
matcher: needsToolMatcher ? '*' : '',
|
|
58
|
+
hooks: [handler],
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
/** Pure logic: apply AgentDeck hooks to a settings object (no file I/O). */
|
|
62
|
+
export function applyHooks(settings) {
|
|
63
|
+
if (!settings.hooks) {
|
|
64
|
+
settings.hooks = {};
|
|
65
|
+
}
|
|
66
|
+
for (const event of HOOK_EVENTS) {
|
|
67
|
+
if (!settings.hooks[event]) {
|
|
68
|
+
settings.hooks[event] = [];
|
|
69
|
+
}
|
|
70
|
+
// Remove both old flat format and new matcher format
|
|
71
|
+
settings.hooks[event] = settings.hooks[event].filter((h) => {
|
|
72
|
+
if (h.command?.includes('AGENTDECK_PORT') || h.command?.includes('localhost:9120')) {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
if (Array.isArray(h.hooks) && h.hooks.some((hh) => hh.command?.includes('AGENTDECK_PORT') || hh.command?.includes('localhost:9120'))) {
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
return true;
|
|
79
|
+
});
|
|
80
|
+
settings.hooks[event].push(buildHookEntry(event));
|
|
81
|
+
}
|
|
82
|
+
return settings;
|
|
83
|
+
}
|
|
84
|
+
/** Pure logic: remove AgentDeck hooks from a settings object (no file I/O). */
|
|
85
|
+
export function removeHooks(settings) {
|
|
86
|
+
if (!settings.hooks)
|
|
87
|
+
return settings;
|
|
88
|
+
for (const event of HOOK_EVENTS) {
|
|
89
|
+
if (settings.hooks[event]) {
|
|
90
|
+
settings.hooks[event] = settings.hooks[event].filter((h) => {
|
|
91
|
+
if (h.command?.includes('AGENTDECK_PORT') || h.command?.includes('localhost:9120')) {
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
if (Array.isArray(h.hooks) && h.hooks.some((hh) => hh.command?.includes('AGENTDECK_PORT') || hh.command?.includes('localhost:9120'))) {
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
return true;
|
|
98
|
+
});
|
|
99
|
+
if (settings.hooks[event].length === 0) {
|
|
100
|
+
delete settings.hooks[event];
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
if (Object.keys(settings.hooks).length === 0) {
|
|
105
|
+
delete settings.hooks;
|
|
106
|
+
}
|
|
107
|
+
return settings;
|
|
108
|
+
}
|
|
109
|
+
/** Pure logic: migrate old hook formats to v2.1 matcher-group format. */
|
|
110
|
+
export function migrateHooks(settings) {
|
|
111
|
+
let migrated = false;
|
|
112
|
+
if (!settings.hooks)
|
|
113
|
+
return { settings, migrated };
|
|
114
|
+
for (const event of Object.keys(settings.hooks)) {
|
|
115
|
+
const hooks = settings.hooks[event];
|
|
116
|
+
if (!Array.isArray(hooks))
|
|
117
|
+
continue;
|
|
118
|
+
for (let i = 0; i < hooks.length; i++) {
|
|
119
|
+
const hook = hooks[i];
|
|
120
|
+
// Migration 1: hardcoded port → env var (flat format)
|
|
121
|
+
if (hook.command?.includes('localhost:9120') && !hook.command?.includes('AGENTDECK_PORT')) {
|
|
122
|
+
hook.command = hook.command.replace(/localhost:9120/g, 'localhost:${AGENTDECK_PORT:-9120}');
|
|
123
|
+
migrated = true;
|
|
124
|
+
}
|
|
125
|
+
// Migration 2: flat format → matcher-group format
|
|
126
|
+
if (hook.type === 'command' && hook.command?.includes('AGENTDECK_PORT') && !hook.hooks) {
|
|
127
|
+
const handler = { type: hook.type, command: hook.command };
|
|
128
|
+
hooks[i] = { matcher: '', hooks: [handler] };
|
|
129
|
+
migrated = true;
|
|
130
|
+
}
|
|
131
|
+
// Migration 3: hardcoded port inside matcher-group
|
|
132
|
+
if (Array.isArray(hook.hooks)) {
|
|
133
|
+
for (const inner of hook.hooks) {
|
|
134
|
+
if (inner.command?.includes('localhost:9120') && !inner.command?.includes('AGENTDECK_PORT')) {
|
|
135
|
+
inner.command = inner.command.replace(/localhost:9120/g, 'localhost:${AGENTDECK_PORT:-9120}');
|
|
136
|
+
migrated = true;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return { settings, migrated };
|
|
143
|
+
}
|
|
144
|
+
/** File-system wrapper: install hooks into ~/.claude/settings.local.json */
|
|
145
|
+
export function installHooks() {
|
|
146
|
+
const claudeDir = join(homedir(), '.claude');
|
|
147
|
+
const settingsPath = join(claudeDir, 'settings.local.json');
|
|
148
|
+
if (!existsSync(claudeDir)) {
|
|
149
|
+
mkdirSync(claudeDir, { recursive: true });
|
|
150
|
+
}
|
|
151
|
+
let settings = {};
|
|
152
|
+
if (existsSync(settingsPath)) {
|
|
153
|
+
const content = readFileSync(settingsPath, 'utf-8');
|
|
154
|
+
settings = JSON.parse(content);
|
|
155
|
+
}
|
|
156
|
+
applyHooks(settings);
|
|
157
|
+
writeFileSync(settingsPath, JSON.stringify(settings, null, 2) + '\n');
|
|
158
|
+
console.log(`Hooks installed to ${settingsPath}`);
|
|
159
|
+
}
|
|
160
|
+
/** File-system wrapper: uninstall hooks from ~/.claude/settings.local.json */
|
|
161
|
+
export function uninstallHooks() {
|
|
162
|
+
const settingsPath = join(homedir(), '.claude', 'settings.local.json');
|
|
163
|
+
if (!existsSync(settingsPath))
|
|
164
|
+
return;
|
|
165
|
+
const settings = JSON.parse(readFileSync(settingsPath, 'utf-8'));
|
|
166
|
+
removeHooks(settings);
|
|
167
|
+
writeFileSync(settingsPath, JSON.stringify(settings, null, 2) + '\n');
|
|
168
|
+
console.log('Hooks uninstalled');
|
|
169
|
+
}
|
|
170
|
+
/** File-system wrapper: migrate old hook formats in ~/.claude/settings.local.json.
|
|
171
|
+
* Silently catches errors to avoid breaking session startup. */
|
|
172
|
+
export function migrateHooksIfNeeded() {
|
|
173
|
+
try {
|
|
174
|
+
const settingsPath = join(homedir(), '.claude', 'settings.local.json');
|
|
175
|
+
if (!existsSync(settingsPath))
|
|
176
|
+
return;
|
|
177
|
+
const raw = readFileSync(settingsPath, 'utf-8');
|
|
178
|
+
if (!raw.includes('AGENTDECK_PORT') && !raw.includes('localhost:9120'))
|
|
179
|
+
return;
|
|
180
|
+
const settings = JSON.parse(raw);
|
|
181
|
+
let { migrated } = migrateHooks(settings);
|
|
182
|
+
// Migration 4: upgrade hooks using simple :-9120 fallback to daemon.json-reading format.
|
|
183
|
+
// This handles existing users from before daemon.json runtime lookup was added.
|
|
184
|
+
if (raw.includes('AGENTDECK_PORT') && !raw.includes('daemon.json')) {
|
|
185
|
+
applyHooks(settings);
|
|
186
|
+
migrated = true;
|
|
187
|
+
}
|
|
188
|
+
if (migrated) {
|
|
189
|
+
writeFileSync(settingsPath, JSON.stringify(settings, null, 2) + '\n');
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
catch {
|
|
193
|
+
// Silently ignore — migration is best-effort, never block session startup
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
// CLI execution
|
|
197
|
+
const isMainModule = import.meta.url === `file://${process.argv[1]}` ||
|
|
198
|
+
import.meta.url === new URL(process.argv[1], 'file://').href;
|
|
199
|
+
if (isMainModule) {
|
|
200
|
+
const action = process.argv[2] || 'install';
|
|
201
|
+
if (action === 'uninstall') {
|
|
202
|
+
uninstallHooks();
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
installHooks();
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=install.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@agentdeck/hooks",
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "https://github.com/puritysb/AgentDeck.git",
|
|
9
|
+
"directory": "hooks"
|
|
10
|
+
},
|
|
11
|
+
"files": [
|
|
12
|
+
"dist",
|
|
13
|
+
"!dist/__tests__"
|
|
14
|
+
],
|
|
15
|
+
"main": "dist/install.js",
|
|
16
|
+
"types": "dist/install.d.ts",
|
|
17
|
+
"exports": {
|
|
18
|
+
".": {
|
|
19
|
+
"import": "./dist/install.js",
|
|
20
|
+
"types": "./dist/install.d.ts"
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
"devDependencies": {
|
|
24
|
+
"@types/node": "^25.6.0",
|
|
25
|
+
"typescript": "^6.0.3"
|
|
26
|
+
},
|
|
27
|
+
"scripts": {
|
|
28
|
+
"build": "tsc",
|
|
29
|
+
"clean": "rm -rf dist",
|
|
30
|
+
"install-hooks": "node dist/install.js"
|
|
31
|
+
}
|
|
32
|
+
}
|