Skip to content

Commit 982ed4b

Browse files
Merge pull request #27 from johnlindquist/fix/typescript-hook-payload-types
fix: add hook_type property to saveSessionData calls in hook templates
2 parents c70447b + 0e96185 commit 982ed4b

File tree

2 files changed

+11
-9
lines changed

2 files changed

+11
-9
lines changed

templates/hooks/index.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import {saveSessionData} from './session'
1515
// PreToolUse handler - called before Claude uses any tool
1616
async function preToolUse(payload: PreToolUsePayload): Promise<PreToolUseResponse> {
1717
// Save session data (optional - remove if not needed)
18-
await saveSessionData('PreToolUse', payload)
18+
await saveSessionData('PreToolUse', {...payload, hook_type: 'PreToolUse'} as const)
1919

2020
// Example: Log when Claude is about to edit files
2121
if (payload.tool_name === 'Edit' && payload.tool_input) {
@@ -45,7 +45,7 @@ async function preToolUse(payload: PreToolUsePayload): Promise<PreToolUseRespons
4545
// PostToolUse handler - called after Claude uses a tool
4646
async function postToolUse(payload: PostToolUsePayload): Promise<void> {
4747
// Save session data (optional - remove if not needed)
48-
await saveSessionData('PostToolUse', payload)
48+
await saveSessionData('PostToolUse', {...payload, hook_type: 'PostToolUse'} as const)
4949

5050
// Example: React to successful file writes
5151
if (payload.tool_name === 'Write' && payload.tool_response) {
@@ -57,23 +57,23 @@ async function postToolUse(payload: PostToolUsePayload): Promise<void> {
5757

5858
// Notification handler - receive Claude's notifications
5959
async function notification(payload: NotificationPayload): Promise<void> {
60-
await saveSessionData('Notification', payload)
60+
await saveSessionData('Notification', {...payload, hook_type: 'Notification'} as const)
6161

6262
// Example: Log Claude's progress
6363
console.log(`🔔 ${payload.message}`)
6464
}
6565

6666
// Stop handler - called when Claude stops
6767
async function stop(payload: StopPayload): Promise<void> {
68-
await saveSessionData('Stop', payload)
68+
await saveSessionData('Stop', {...payload, hook_type: 'Stop'} as const)
6969

7070
// Example: Summary or cleanup logic
7171
console.log(`👋 Session ended`)
7272
}
7373

7474
// SubagentStop handler - called when a Claude subagent (Task tool) stops
7575
async function subagentStop(payload: SubagentStopPayload): Promise<void> {
76-
await saveSessionData('SubagentStop', payload)
76+
await saveSessionData('SubagentStop', {...payload, hook_type: 'SubagentStop'} as const)
7777

7878
// Example: Log subagent completion
7979
console.log(`🤖 Subagent task completed`)

test/smoke/generated-files.test.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -79,10 +79,12 @@ describe('Smoke Tests - Generated Files', () => {
7979
})
8080

8181
it('should save session data in all handlers', () => {
82-
expect(indexContent).to.match(/await saveSessionData\('PreToolUse', payload\)/)
83-
expect(indexContent).to.match(/await saveSessionData\('PostToolUse', payload\)/)
84-
expect(indexContent).to.match(/await saveSessionData\('Notification', payload\)/)
85-
expect(indexContent).to.match(/await saveSessionData\('Stop', payload\)/)
82+
expect(indexContent).to.match(/await saveSessionData\('PreToolUse', \{\.\.\.payload, hook_type: 'PreToolUse'\}/)
83+
expect(indexContent).to.match(/await saveSessionData\('PostToolUse', \{\.\.\.payload, hook_type: 'PostToolUse'\}/)
84+
expect(indexContent).to.match(
85+
/await saveSessionData\('Notification', \{\.\.\.payload, hook_type: 'Notification'\}/,
86+
)
87+
expect(indexContent).to.match(/await saveSessionData\('Stop', \{\.\.\.payload, hook_type: 'Stop'\}/)
8688
})
8789

8890
it('should include helpful examples for TypeScript convenience', () => {

0 commit comments

Comments
 (0)