@eddacraft/kindling-adapter-claude-code 0.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.
- package/LICENSE +190 -0
- package/README.md +198 -0
- package/dist/claude-code/events.d.ts +134 -0
- package/dist/claude-code/events.d.ts.map +1 -0
- package/dist/claude-code/events.js +94 -0
- package/dist/claude-code/events.js.map +1 -0
- package/dist/claude-code/filter.d.ts +60 -0
- package/dist/claude-code/filter.d.ts.map +1 -0
- package/dist/claude-code/filter.js +150 -0
- package/dist/claude-code/filter.js.map +1 -0
- package/dist/claude-code/hooks.d.ts +105 -0
- package/dist/claude-code/hooks.d.ts.map +1 -0
- package/dist/claude-code/hooks.js +113 -0
- package/dist/claude-code/hooks.js.map +1 -0
- package/dist/claude-code/index.d.ts +12 -0
- package/dist/claude-code/index.d.ts.map +1 -0
- package/dist/claude-code/index.js +18 -0
- package/dist/claude-code/index.js.map +1 -0
- package/dist/claude-code/mapping.d.ts +27 -0
- package/dist/claude-code/mapping.d.ts.map +1 -0
- package/dist/claude-code/mapping.js +234 -0
- package/dist/claude-code/mapping.js.map +1 -0
- package/dist/claude-code/provenance.d.ts +27 -0
- package/dist/claude-code/provenance.d.ts.map +1 -0
- package/dist/claude-code/provenance.js +134 -0
- package/dist/claude-code/provenance.js.map +1 -0
- package/dist/claude-code/session.d.ts +98 -0
- package/dist/claude-code/session.d.ts.map +1 -0
- package/dist/claude-code/session.js +191 -0
- package/dist/claude-code/session.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event to observation mapping for Claude Code
|
|
3
|
+
*
|
|
4
|
+
* Maps Claude Code hook events to Kindling observations with provenance.
|
|
5
|
+
*/
|
|
6
|
+
import { extractProvenance } from './provenance.js';
|
|
7
|
+
import { filterContent, filterToolResult } from './filter.js';
|
|
8
|
+
/**
|
|
9
|
+
* Mapping from tool names to observation kinds
|
|
10
|
+
*/
|
|
11
|
+
const TOOL_TO_KIND_MAP = {
|
|
12
|
+
// File operations -> file_diff
|
|
13
|
+
Write: 'file_diff',
|
|
14
|
+
Edit: 'file_diff',
|
|
15
|
+
// Shell commands -> command
|
|
16
|
+
Bash: 'command',
|
|
17
|
+
// Everything else -> tool_call
|
|
18
|
+
Read: 'tool_call',
|
|
19
|
+
Glob: 'tool_call',
|
|
20
|
+
Grep: 'tool_call',
|
|
21
|
+
Task: 'tool_call',
|
|
22
|
+
WebFetch: 'tool_call',
|
|
23
|
+
WebSearch: 'tool_call',
|
|
24
|
+
AskUserQuestion: 'tool_call',
|
|
25
|
+
Skill: 'tool_call',
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Map a Claude Code event to a Kindling observation
|
|
29
|
+
*/
|
|
30
|
+
export function mapEvent(event) {
|
|
31
|
+
switch (event.type) {
|
|
32
|
+
case 'session_start':
|
|
33
|
+
case 'pre_compact':
|
|
34
|
+
// Session lifecycle handled separately
|
|
35
|
+
return { skip: true };
|
|
36
|
+
case 'post_tool_use':
|
|
37
|
+
return mapToolUseEvent(event);
|
|
38
|
+
case 'user_prompt':
|
|
39
|
+
return mapUserPromptEvent(event);
|
|
40
|
+
case 'subagent_stop':
|
|
41
|
+
return mapSubagentStopEvent(event);
|
|
42
|
+
case 'stop':
|
|
43
|
+
// Stop event triggers capsule close, handled separately
|
|
44
|
+
return { skip: true };
|
|
45
|
+
default:
|
|
46
|
+
return { error: `Unknown event type: ${event.type}` };
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Map a tool use event to an observation
|
|
51
|
+
*/
|
|
52
|
+
function mapToolUseEvent(event) {
|
|
53
|
+
if (!event.toolName) {
|
|
54
|
+
return { error: 'Tool use event missing toolName' };
|
|
55
|
+
}
|
|
56
|
+
// Determine observation kind
|
|
57
|
+
const kind = TOOL_TO_KIND_MAP[event.toolName] ?? 'tool_call';
|
|
58
|
+
// Format content based on tool type
|
|
59
|
+
const content = formatToolContent(event);
|
|
60
|
+
// Extract provenance
|
|
61
|
+
const provenance = extractProvenance(event);
|
|
62
|
+
// Build scope IDs
|
|
63
|
+
const scopeIds = {
|
|
64
|
+
sessionId: event.sessionId,
|
|
65
|
+
repoId: event.cwd,
|
|
66
|
+
};
|
|
67
|
+
return {
|
|
68
|
+
observation: {
|
|
69
|
+
kind,
|
|
70
|
+
content,
|
|
71
|
+
provenance,
|
|
72
|
+
scopeIds,
|
|
73
|
+
},
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Map a user prompt event to an observation
|
|
78
|
+
*/
|
|
79
|
+
function mapUserPromptEvent(event) {
|
|
80
|
+
if (!event.userContent) {
|
|
81
|
+
return { error: 'User prompt event missing content' };
|
|
82
|
+
}
|
|
83
|
+
const content = filterContent(event.userContent, { maxLength: 10000 });
|
|
84
|
+
const provenance = extractProvenance(event);
|
|
85
|
+
const scopeIds = {
|
|
86
|
+
sessionId: event.sessionId,
|
|
87
|
+
repoId: event.cwd,
|
|
88
|
+
};
|
|
89
|
+
return {
|
|
90
|
+
observation: {
|
|
91
|
+
kind: 'message',
|
|
92
|
+
content,
|
|
93
|
+
provenance,
|
|
94
|
+
scopeIds,
|
|
95
|
+
},
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Map a subagent stop event to an observation
|
|
100
|
+
*/
|
|
101
|
+
function mapSubagentStopEvent(event) {
|
|
102
|
+
const content = formatSubagentContent(event);
|
|
103
|
+
const provenance = extractProvenance(event);
|
|
104
|
+
const scopeIds = {
|
|
105
|
+
sessionId: event.sessionId,
|
|
106
|
+
repoId: event.cwd,
|
|
107
|
+
};
|
|
108
|
+
return {
|
|
109
|
+
observation: {
|
|
110
|
+
kind: 'node_end',
|
|
111
|
+
content,
|
|
112
|
+
provenance,
|
|
113
|
+
scopeIds,
|
|
114
|
+
},
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Format tool content for human readability
|
|
119
|
+
*/
|
|
120
|
+
function formatToolContent(event) {
|
|
121
|
+
const toolName = event.toolName ?? 'unknown';
|
|
122
|
+
const parts = [`Tool: ${toolName}`];
|
|
123
|
+
// Add tool-specific content
|
|
124
|
+
switch (toolName) {
|
|
125
|
+
case 'Read': {
|
|
126
|
+
const filePath = event.toolInput?.file_path;
|
|
127
|
+
if (filePath)
|
|
128
|
+
parts.push(`File: ${filePath}`);
|
|
129
|
+
break;
|
|
130
|
+
}
|
|
131
|
+
case 'Write': {
|
|
132
|
+
const filePath = event.toolInput?.file_path;
|
|
133
|
+
if (filePath)
|
|
134
|
+
parts.push(`File: ${filePath}`);
|
|
135
|
+
parts.push('Action: Created/overwrote file');
|
|
136
|
+
break;
|
|
137
|
+
}
|
|
138
|
+
case 'Edit': {
|
|
139
|
+
const filePath = event.toolInput?.file_path;
|
|
140
|
+
if (filePath)
|
|
141
|
+
parts.push(`File: ${filePath}`);
|
|
142
|
+
parts.push('Action: Edited file');
|
|
143
|
+
break;
|
|
144
|
+
}
|
|
145
|
+
case 'Bash': {
|
|
146
|
+
const command = event.toolInput?.command;
|
|
147
|
+
if (command)
|
|
148
|
+
parts.push(`$ ${command}`);
|
|
149
|
+
const resultStr = filterToolResult(toolName, event.toolResult);
|
|
150
|
+
if (resultStr)
|
|
151
|
+
parts.push(resultStr);
|
|
152
|
+
break;
|
|
153
|
+
}
|
|
154
|
+
case 'Glob': {
|
|
155
|
+
const pattern = event.toolInput?.pattern;
|
|
156
|
+
const path = event.toolInput?.path;
|
|
157
|
+
if (pattern)
|
|
158
|
+
parts.push(`Pattern: ${pattern}`);
|
|
159
|
+
if (path)
|
|
160
|
+
parts.push(`Path: ${path}`);
|
|
161
|
+
break;
|
|
162
|
+
}
|
|
163
|
+
case 'Grep': {
|
|
164
|
+
const pattern = event.toolInput?.pattern;
|
|
165
|
+
const path = event.toolInput?.path;
|
|
166
|
+
if (pattern)
|
|
167
|
+
parts.push(`Pattern: ${pattern}`);
|
|
168
|
+
if (path)
|
|
169
|
+
parts.push(`Path: ${path}`);
|
|
170
|
+
break;
|
|
171
|
+
}
|
|
172
|
+
case 'Task': {
|
|
173
|
+
const agentType = event.toolInput?.subagent_type;
|
|
174
|
+
const description = event.toolInput?.description;
|
|
175
|
+
if (agentType)
|
|
176
|
+
parts.push(`Agent: ${agentType}`);
|
|
177
|
+
if (description)
|
|
178
|
+
parts.push(`Task: ${description}`);
|
|
179
|
+
break;
|
|
180
|
+
}
|
|
181
|
+
case 'WebFetch': {
|
|
182
|
+
const url = event.toolInput?.url;
|
|
183
|
+
if (url)
|
|
184
|
+
parts.push(`URL: ${url}`);
|
|
185
|
+
break;
|
|
186
|
+
}
|
|
187
|
+
case 'WebSearch': {
|
|
188
|
+
const query = event.toolInput?.query;
|
|
189
|
+
if (query)
|
|
190
|
+
parts.push(`Query: ${query}`);
|
|
191
|
+
break;
|
|
192
|
+
}
|
|
193
|
+
default: {
|
|
194
|
+
// For unknown tools, show input keys
|
|
195
|
+
if (event.toolInput) {
|
|
196
|
+
const keys = Object.keys(event.toolInput).join(', ');
|
|
197
|
+
parts.push(`Input keys: ${keys}`);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
// Add error if present
|
|
202
|
+
if (event.toolError) {
|
|
203
|
+
parts.push(`Error: ${event.toolError}`);
|
|
204
|
+
}
|
|
205
|
+
return parts.join('\n\n');
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Format subagent content
|
|
209
|
+
*/
|
|
210
|
+
function formatSubagentContent(event) {
|
|
211
|
+
const parts = [`Subagent: ${event.agentType ?? 'unknown'}`];
|
|
212
|
+
if (event.agentOutput) {
|
|
213
|
+
const output = filterContent(event.agentOutput, { maxLength: 5000 });
|
|
214
|
+
parts.push(`Output:\n${output}`);
|
|
215
|
+
}
|
|
216
|
+
return parts.join('\n\n');
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Batch map multiple events
|
|
220
|
+
*/
|
|
221
|
+
export function mapEvents(events) {
|
|
222
|
+
const observations = [];
|
|
223
|
+
for (const event of events) {
|
|
224
|
+
const result = mapEvent(event);
|
|
225
|
+
if (result.observation) {
|
|
226
|
+
observations.push(result.observation);
|
|
227
|
+
}
|
|
228
|
+
else if (result.error) {
|
|
229
|
+
console.warn(`Failed to map event: ${result.error}`, event);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
return observations;
|
|
233
|
+
}
|
|
234
|
+
//# sourceMappingURL=mapping.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapping.js","sourceRoot":"","sources":["../../src/claude-code/mapping.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provenance extraction for Claude Code events
|
|
3
|
+
*
|
|
4
|
+
* Extracts structured metadata from events for queryability and explainability.
|
|
5
|
+
*/
|
|
6
|
+
import type { ClaudeCodeEvent } from './events.js';
|
|
7
|
+
/**
|
|
8
|
+
* Extract provenance from a tool use event
|
|
9
|
+
*/
|
|
10
|
+
export declare function extractToolUseProvenance(event: ClaudeCodeEvent): Record<string, unknown>;
|
|
11
|
+
/**
|
|
12
|
+
* Extract provenance from a user prompt event
|
|
13
|
+
*/
|
|
14
|
+
export declare function extractUserPromptProvenance(event: ClaudeCodeEvent): Record<string, unknown>;
|
|
15
|
+
/**
|
|
16
|
+
* Extract provenance from a subagent stop event
|
|
17
|
+
*/
|
|
18
|
+
export declare function extractSubagentProvenance(event: ClaudeCodeEvent): Record<string, unknown>;
|
|
19
|
+
/**
|
|
20
|
+
* Extract provenance from a stop event
|
|
21
|
+
*/
|
|
22
|
+
export declare function extractStopProvenance(event: ClaudeCodeEvent): Record<string, unknown>;
|
|
23
|
+
/**
|
|
24
|
+
* Extract provenance based on event type
|
|
25
|
+
*/
|
|
26
|
+
export declare function extractProvenance(event: ClaudeCodeEvent): Record<string, unknown>;
|
|
27
|
+
//# sourceMappingURL=provenance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provenance.d.ts","sourceRoot":"","sources":["../../src/claude-code/provenance.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA6DxF;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAS3F;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAUzF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAQrF;AAuBD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAiBjF"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provenance extraction for Claude Code events
|
|
3
|
+
*
|
|
4
|
+
* Extracts structured metadata from events for queryability and explainability.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Extract provenance from a tool use event
|
|
8
|
+
*/
|
|
9
|
+
export function extractToolUseProvenance(event) {
|
|
10
|
+
if (event.type !== 'post_tool_use') {
|
|
11
|
+
return {};
|
|
12
|
+
}
|
|
13
|
+
const provenance = {
|
|
14
|
+
toolName: event.toolName,
|
|
15
|
+
hasError: !!event.toolError,
|
|
16
|
+
};
|
|
17
|
+
// Extract tool-specific provenance
|
|
18
|
+
switch (event.toolName) {
|
|
19
|
+
case 'Read':
|
|
20
|
+
provenance.filePath = event.toolInput?.file_path;
|
|
21
|
+
break;
|
|
22
|
+
case 'Write':
|
|
23
|
+
provenance.filePath = event.toolInput?.file_path;
|
|
24
|
+
break;
|
|
25
|
+
case 'Edit':
|
|
26
|
+
provenance.filePath = event.toolInput?.file_path;
|
|
27
|
+
provenance.hasOldString = !!event.toolInput?.old_string;
|
|
28
|
+
break;
|
|
29
|
+
case 'Bash':
|
|
30
|
+
provenance.command = extractCommandName(event.toolInput?.command);
|
|
31
|
+
provenance.exitCode = extractExitCode(event.toolResult);
|
|
32
|
+
break;
|
|
33
|
+
case 'Glob':
|
|
34
|
+
provenance.pattern = event.toolInput?.pattern;
|
|
35
|
+
provenance.path = event.toolInput?.path;
|
|
36
|
+
break;
|
|
37
|
+
case 'Grep':
|
|
38
|
+
provenance.pattern = event.toolInput?.pattern;
|
|
39
|
+
provenance.path = event.toolInput?.path;
|
|
40
|
+
break;
|
|
41
|
+
case 'Task':
|
|
42
|
+
provenance.subagentType = event.toolInput?.subagent_type;
|
|
43
|
+
provenance.description = event.toolInput?.description;
|
|
44
|
+
break;
|
|
45
|
+
case 'WebFetch':
|
|
46
|
+
provenance.url = event.toolInput?.url;
|
|
47
|
+
break;
|
|
48
|
+
case 'WebSearch':
|
|
49
|
+
provenance.query = event.toolInput?.query;
|
|
50
|
+
break;
|
|
51
|
+
default:
|
|
52
|
+
// For unknown tools, include sanitized input keys
|
|
53
|
+
if (event.toolInput) {
|
|
54
|
+
provenance.inputKeys = Object.keys(event.toolInput);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return provenance;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Extract provenance from a user prompt event
|
|
61
|
+
*/
|
|
62
|
+
export function extractUserPromptProvenance(event) {
|
|
63
|
+
if (event.type !== 'user_prompt') {
|
|
64
|
+
return {};
|
|
65
|
+
}
|
|
66
|
+
return {
|
|
67
|
+
role: 'user',
|
|
68
|
+
length: event.userContent?.length ?? 0,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Extract provenance from a subagent stop event
|
|
73
|
+
*/
|
|
74
|
+
export function extractSubagentProvenance(event) {
|
|
75
|
+
if (event.type !== 'subagent_stop') {
|
|
76
|
+
return {};
|
|
77
|
+
}
|
|
78
|
+
return {
|
|
79
|
+
agentType: event.agentType,
|
|
80
|
+
hasOutput: !!event.agentOutput,
|
|
81
|
+
outputLength: event.agentOutput?.length ?? 0,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Extract provenance from a stop event
|
|
86
|
+
*/
|
|
87
|
+
export function extractStopProvenance(event) {
|
|
88
|
+
if (event.type !== 'stop') {
|
|
89
|
+
return {};
|
|
90
|
+
}
|
|
91
|
+
return {
|
|
92
|
+
reason: event.stopReason ?? 'unknown',
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Extract the command name from a full command string
|
|
97
|
+
*/
|
|
98
|
+
function extractCommandName(command) {
|
|
99
|
+
if (!command)
|
|
100
|
+
return undefined;
|
|
101
|
+
const parts = command.trim().split(/\s+/);
|
|
102
|
+
return parts[0] || undefined;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Extract exit code from bash tool result
|
|
106
|
+
*/
|
|
107
|
+
function extractExitCode(result) {
|
|
108
|
+
if (typeof result === 'object' && result !== null) {
|
|
109
|
+
const r = result;
|
|
110
|
+
if (typeof r.exitCode === 'number')
|
|
111
|
+
return r.exitCode;
|
|
112
|
+
if (typeof r.exit_code === 'number')
|
|
113
|
+
return r.exit_code;
|
|
114
|
+
}
|
|
115
|
+
return undefined;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Extract provenance based on event type
|
|
119
|
+
*/
|
|
120
|
+
export function extractProvenance(event) {
|
|
121
|
+
switch (event.type) {
|
|
122
|
+
case 'post_tool_use':
|
|
123
|
+
return extractToolUseProvenance(event);
|
|
124
|
+
case 'user_prompt':
|
|
125
|
+
return extractUserPromptProvenance(event);
|
|
126
|
+
case 'subagent_stop':
|
|
127
|
+
return extractSubagentProvenance(event);
|
|
128
|
+
case 'stop':
|
|
129
|
+
return extractStopProvenance(event);
|
|
130
|
+
default:
|
|
131
|
+
return {};
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=provenance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provenance.js","sourceRoot":"","sources":["../../src/claude-code/provenance.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,KAAsB;IAC7D,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;QACnC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,UAAU,GAA4B;QAC1C,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,SAAS;KAC5B,CAAC;IAEF,mCAAmC;IACnC,QAAQ,KAAK,CAAC,QAAQ,EAAE,CAAC;QACvB,KAAK,MAAM;YACT,UAAU,CAAC,QAAQ,GAAG,KAAK,CAAC,SAAS,EAAE,SAAS,CAAC;YACjD,MAAM;QAER,KAAK,OAAO;YACV,UAAU,CAAC,QAAQ,GAAG,KAAK,CAAC,SAAS,EAAE,SAAS,CAAC;YACjD,MAAM;QAER,KAAK,MAAM;YACT,UAAU,CAAC,QAAQ,GAAG,KAAK,CAAC,SAAS,EAAE,SAAS,CAAC;YACjD,UAAU,CAAC,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC;YACxD,MAAM;QAER,KAAK,MAAM;YACT,UAAU,CAAC,OAAO,GAAG,kBAAkB,CAAC,KAAK,CAAC,SAAS,EAAE,OAAiB,CAAC,CAAC;YAC5E,UAAU,CAAC,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YACxD,MAAM;QAER,KAAK,MAAM;YACT,UAAU,CAAC,OAAO,GAAG,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC;YAC9C,UAAU,CAAC,IAAI,GAAG,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC;YACxC,MAAM;QAER,KAAK,MAAM;YACT,UAAU,CAAC,OAAO,GAAG,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC;YAC9C,UAAU,CAAC,IAAI,GAAG,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC;YACxC,MAAM;QAER,KAAK,MAAM;YACT,UAAU,CAAC,YAAY,GAAG,KAAK,CAAC,SAAS,EAAE,aAAa,CAAC;YACzD,UAAU,CAAC,WAAW,GAAG,KAAK,CAAC,SAAS,EAAE,WAAW,CAAC;YACtD,MAAM;QAER,KAAK,UAAU;YACb,UAAU,CAAC,GAAG,GAAG,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC;YACtC,MAAM;QAER,KAAK,WAAW;YACd,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC;YAC1C,MAAM;QAER;YACE,kDAAkD;YAClD,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;gBACpB,UAAU,CAAC,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACtD,CAAC;IACL,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,2BAA2B,CAAC,KAAsB;IAChE,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QACjC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,KAAK,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC;KACvC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAC,KAAsB;IAC9D,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;QACnC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO;QACL,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW;QAC9B,YAAY,EAAE,KAAK,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC;KAC7C,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAsB;IAC1D,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC1B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO;QACL,MAAM,EAAE,KAAK,CAAC,UAAU,IAAI,SAAS;KACtC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,OAA2B;IACrD,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1C,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,MAAe;IACtC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QAClD,MAAM,CAAC,GAAG,MAAiC,CAAC;QAC5C,IAAI,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ;YAAE,OAAO,CAAC,CAAC,QAAQ,CAAC;QACtD,IAAI,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ;YAAE,OAAO,CAAC,CAAC,SAAS,CAAC;IAC1D,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAsB;IACtD,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,eAAe;YAClB,OAAO,wBAAwB,CAAC,KAAK,CAAC,CAAC;QAEzC,KAAK,aAAa;YAChB,OAAO,2BAA2B,CAAC,KAAK,CAAC,CAAC;QAE5C,KAAK,eAAe;YAClB,OAAO,yBAAyB,CAAC,KAAK,CAAC,CAAC;QAE1C,KAAK,MAAM;YACT,OAAO,qBAAqB,CAAC,KAAK,CAAC,CAAC;QAEtC;YACE,OAAO,EAAE,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Code session lifecycle management
|
|
3
|
+
*
|
|
4
|
+
* Manages the lifecycle of session capsules via hooks:
|
|
5
|
+
* - onSessionStart: Opens a new capsule
|
|
6
|
+
* - onEvent: Maps events and attaches observations
|
|
7
|
+
* - onStop: Closes the capsule
|
|
8
|
+
*/
|
|
9
|
+
import type { Capsule, CapsuleStore, Observation, ID } from '@eddacraft/kindling-core';
|
|
10
|
+
import type { ClaudeCodeEvent } from './events.js';
|
|
11
|
+
/**
|
|
12
|
+
* Session context tracking active session state
|
|
13
|
+
*/
|
|
14
|
+
export interface SessionContext {
|
|
15
|
+
sessionId: string;
|
|
16
|
+
cwd: string;
|
|
17
|
+
activeCapsuleId: ID;
|
|
18
|
+
eventCount: number;
|
|
19
|
+
startedAt: number;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Options for starting a session
|
|
23
|
+
*/
|
|
24
|
+
export interface SessionStartOptions {
|
|
25
|
+
sessionId: string;
|
|
26
|
+
cwd: string;
|
|
27
|
+
intent?: string;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Signals for ending a session
|
|
31
|
+
*/
|
|
32
|
+
export interface SessionEndSignals {
|
|
33
|
+
reason?: string;
|
|
34
|
+
summaryContent?: string;
|
|
35
|
+
summaryConfidence?: number;
|
|
36
|
+
evidenceRefs?: ID[];
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Result of processing an event
|
|
40
|
+
*/
|
|
41
|
+
export interface EventProcessingResult {
|
|
42
|
+
observation?: Observation;
|
|
43
|
+
skipped?: boolean;
|
|
44
|
+
error?: string;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* SessionManager manages Claude Code session lifecycles
|
|
48
|
+
*
|
|
49
|
+
* Provides hooks for session start, event processing, and session end.
|
|
50
|
+
* Each session gets its own capsule that collects observations.
|
|
51
|
+
*/
|
|
52
|
+
export declare class SessionManager {
|
|
53
|
+
private store;
|
|
54
|
+
private activeSessions;
|
|
55
|
+
constructor(store: CapsuleStore & {
|
|
56
|
+
insertObservation(observation: Observation): void;
|
|
57
|
+
attachObservationToCapsule(capsuleId: ID, observationId: ID): void;
|
|
58
|
+
});
|
|
59
|
+
/**
|
|
60
|
+
* Start a new session
|
|
61
|
+
*
|
|
62
|
+
* Opens a capsule for the session. If a session already has an open capsule,
|
|
63
|
+
* returns the existing context.
|
|
64
|
+
*/
|
|
65
|
+
onSessionStart(options: SessionStartOptions): SessionContext;
|
|
66
|
+
/**
|
|
67
|
+
* Process an event from the session
|
|
68
|
+
*
|
|
69
|
+
* Maps the event to an observation and attaches it to the active capsule.
|
|
70
|
+
*/
|
|
71
|
+
onEvent(event: ClaudeCodeEvent): EventProcessingResult;
|
|
72
|
+
/**
|
|
73
|
+
* End a session (called on Stop hook)
|
|
74
|
+
*
|
|
75
|
+
* Closes the active capsule for the session.
|
|
76
|
+
*/
|
|
77
|
+
onStop(sessionId: string, signals?: SessionEndSignals): Capsule;
|
|
78
|
+
/**
|
|
79
|
+
* Get active session context
|
|
80
|
+
*/
|
|
81
|
+
getSession(sessionId: string): SessionContext | undefined;
|
|
82
|
+
/**
|
|
83
|
+
* Check if session is active
|
|
84
|
+
*/
|
|
85
|
+
isSessionActive(sessionId: string): boolean;
|
|
86
|
+
/**
|
|
87
|
+
* Get all active session IDs
|
|
88
|
+
*/
|
|
89
|
+
getActiveSessions(): string[];
|
|
90
|
+
/**
|
|
91
|
+
* Get session statistics
|
|
92
|
+
*/
|
|
93
|
+
getSessionStats(sessionId: string): {
|
|
94
|
+
eventCount: number;
|
|
95
|
+
duration: number;
|
|
96
|
+
} | undefined;
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/claude-code/session.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AACvF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGnD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,EAAE,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,EAAE,EAAE,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;GAKG;AACH,qBAAa,cAAc;IAIvB,OAAO,CAAC,KAAK;IAHf,OAAO,CAAC,cAAc,CAA0C;gBAGtD,KAAK,EAAE,YAAY,GAAG;QAC5B,iBAAiB,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;QAClD,0BAA0B,CAAC,SAAS,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,GAAG,IAAI,CAAC;KACpE;IAGH;;;;;OAKG;IACH,cAAc,CAAC,OAAO,EAAE,mBAAmB,GAAG,cAAc;IAqD5D;;;;OAIG;IACH,OAAO,CAAC,KAAK,EAAE,eAAe,GAAG,qBAAqB;IA+CtD;;;;OAIG;IACH,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO;IA6C/D;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAIzD;;OAEG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI3C;;OAEG;IACH,iBAAiB,IAAI,MAAM,EAAE;IAI7B;;OAEG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS;CASzF"}
|