@ironbee-ai/cli 0.5.2 → 0.6.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 (159) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +1 -1
  3. package/dist/analysis/cross-session.d.ts +1 -1
  4. package/dist/analysis/cross-session.js +1 -1
  5. package/dist/analysis/cross-session.js.map +1 -1
  6. package/dist/analysis/time-analysis.js +3 -3
  7. package/dist/analysis/time-analysis.js.map +1 -1
  8. package/dist/analysis/verdict-details.d.ts +1 -1
  9. package/dist/clients/claude/hooks/clear-verdict.d.ts.map +1 -1
  10. package/dist/clients/claude/hooks/clear-verdict.js +17 -9
  11. package/dist/clients/claude/hooks/clear-verdict.js.map +1 -1
  12. package/dist/clients/claude/hooks/require-verification.d.ts.map +1 -1
  13. package/dist/clients/claude/hooks/require-verification.js +31 -4
  14. package/dist/clients/claude/hooks/require-verification.js.map +1 -1
  15. package/dist/clients/claude/hooks/session-end.d.ts.map +1 -1
  16. package/dist/clients/claude/hooks/session-end.js +6 -1
  17. package/dist/clients/claude/hooks/session-end.js.map +1 -1
  18. package/dist/clients/claude/hooks/session-start.d.ts.map +1 -1
  19. package/dist/clients/claude/hooks/session-start.js +9 -3
  20. package/dist/clients/claude/hooks/session-start.js.map +1 -1
  21. package/dist/clients/claude/hooks/track-action.d.ts +25 -4
  22. package/dist/clients/claude/hooks/track-action.d.ts.map +1 -1
  23. package/dist/clients/claude/hooks/track-action.js +160 -29
  24. package/dist/clients/claude/hooks/track-action.js.map +1 -1
  25. package/dist/clients/claude/hooks/verify-gate.d.ts.map +1 -1
  26. package/dist/clients/claude/hooks/verify-gate.js +5 -0
  27. package/dist/clients/claude/hooks/verify-gate.js.map +1 -1
  28. package/dist/clients/claude/index.d.ts.map +1 -1
  29. package/dist/clients/claude/index.js +18 -1
  30. package/dist/clients/claude/index.js.map +1 -1
  31. package/dist/clients/claude/util.d.ts +74 -0
  32. package/dist/clients/claude/util.d.ts.map +1 -0
  33. package/dist/clients/claude/util.js +352 -0
  34. package/dist/clients/claude/util.js.map +1 -0
  35. package/dist/clients/cursor/hooks/clear-verdict.d.ts.map +1 -1
  36. package/dist/clients/cursor/hooks/clear-verdict.js +19 -10
  37. package/dist/clients/cursor/hooks/clear-verdict.js.map +1 -1
  38. package/dist/clients/cursor/hooks/require-verification.d.ts.map +1 -1
  39. package/dist/clients/cursor/hooks/require-verification.js +28 -4
  40. package/dist/clients/cursor/hooks/require-verification.js.map +1 -1
  41. package/dist/clients/cursor/hooks/session-end.d.ts.map +1 -1
  42. package/dist/clients/cursor/hooks/session-end.js +6 -1
  43. package/dist/clients/cursor/hooks/session-end.js.map +1 -1
  44. package/dist/clients/cursor/hooks/session-start.d.ts.map +1 -1
  45. package/dist/clients/cursor/hooks/session-start.js +7 -2
  46. package/dist/clients/cursor/hooks/session-start.js.map +1 -1
  47. package/dist/clients/cursor/hooks/track-action.d.ts +30 -8
  48. package/dist/clients/cursor/hooks/track-action.d.ts.map +1 -1
  49. package/dist/clients/cursor/hooks/track-action.js +192 -54
  50. package/dist/clients/cursor/hooks/track-action.js.map +1 -1
  51. package/dist/clients/cursor/hooks/verify-gate.d.ts.map +1 -1
  52. package/dist/clients/cursor/hooks/verify-gate.js +4 -0
  53. package/dist/clients/cursor/hooks/verify-gate.js.map +1 -1
  54. package/dist/clients/cursor/index.d.ts.map +1 -1
  55. package/dist/clients/cursor/index.js +13 -2
  56. package/dist/clients/cursor/index.js.map +1 -1
  57. package/dist/clients/cursor/util.d.ts +52 -0
  58. package/dist/clients/cursor/util.d.ts.map +1 -0
  59. package/dist/clients/cursor/util.js +264 -0
  60. package/dist/clients/cursor/util.js.map +1 -0
  61. package/dist/commands/analyze.js +3 -3
  62. package/dist/commands/analyze.js.map +1 -1
  63. package/dist/commands/hook.js +1 -2
  64. package/dist/commands/hook.js.map +1 -1
  65. package/dist/commands/process-job-file.d.ts +10 -0
  66. package/dist/commands/process-job-file.d.ts.map +1 -0
  67. package/dist/commands/process-job-file.js +19 -0
  68. package/dist/commands/process-job-file.js.map +1 -0
  69. package/dist/commands/queue.d.ts +12 -0
  70. package/dist/commands/queue.d.ts.map +1 -0
  71. package/dist/commands/queue.js +495 -0
  72. package/dist/commands/queue.js.map +1 -0
  73. package/dist/hooks/core/actions.d.ts +168 -27
  74. package/dist/hooks/core/actions.d.ts.map +1 -1
  75. package/dist/hooks/core/actions.js +81 -4
  76. package/dist/hooks/core/actions.js.map +1 -1
  77. package/dist/hooks/core/activity.d.ts.map +1 -1
  78. package/dist/hooks/core/activity.js +13 -6
  79. package/dist/hooks/core/activity.js.map +1 -1
  80. package/dist/hooks/core/session-state.d.ts +19 -7
  81. package/dist/hooks/core/session-state.d.ts.map +1 -1
  82. package/dist/hooks/core/session-state.js +66 -12
  83. package/dist/hooks/core/session-state.js.map +1 -1
  84. package/dist/hooks/core/submit-verdict.d.ts.map +1 -1
  85. package/dist/hooks/core/submit-verdict.js +13 -4
  86. package/dist/hooks/core/submit-verdict.js.map +1 -1
  87. package/dist/hooks/core/verification-lifecycle.d.ts.map +1 -1
  88. package/dist/hooks/core/verification-lifecycle.js +14 -4
  89. package/dist/hooks/core/verification-lifecycle.js.map +1 -1
  90. package/dist/hooks/core/verify-gate.d.ts.map +1 -1
  91. package/dist/hooks/core/verify-gate.js +31 -19
  92. package/dist/hooks/core/verify-gate.js.map +1 -1
  93. package/dist/index.js +12 -3
  94. package/dist/index.js.map +1 -1
  95. package/dist/lib/collector.d.ts +64 -5
  96. package/dist/lib/collector.d.ts.map +1 -1
  97. package/dist/lib/collector.js +107 -44
  98. package/dist/lib/collector.js.map +1 -1
  99. package/dist/lib/config.d.ts +72 -8
  100. package/dist/lib/config.d.ts.map +1 -1
  101. package/dist/lib/config.js +40 -0
  102. package/dist/lib/config.js.map +1 -1
  103. package/dist/queue/dead-letter.d.ts +26 -0
  104. package/dist/queue/dead-letter.d.ts.map +1 -0
  105. package/dist/queue/dead-letter.js +233 -0
  106. package/dist/queue/dead-letter.js.map +1 -0
  107. package/dist/queue/drain.d.ts +36 -0
  108. package/dist/queue/drain.d.ts.map +1 -0
  109. package/dist/queue/drain.js +170 -0
  110. package/dist/queue/drain.js.map +1 -0
  111. package/dist/queue/flush.d.ts +64 -0
  112. package/dist/queue/flush.d.ts.map +1 -0
  113. package/dist/queue/flush.js +119 -0
  114. package/dist/queue/flush.js.map +1 -0
  115. package/dist/queue/handlers/send-event.d.ts +23 -0
  116. package/dist/queue/handlers/send-event.d.ts.map +1 -0
  117. package/dist/queue/handlers/send-event.js +131 -0
  118. package/dist/queue/handlers/send-event.js.map +1 -0
  119. package/dist/queue/index.d.ts +30 -0
  120. package/dist/queue/index.d.ts.map +1 -0
  121. package/dist/queue/index.js +71 -0
  122. package/dist/queue/index.js.map +1 -0
  123. package/dist/queue/paths.d.ts +40 -0
  124. package/dist/queue/paths.d.ts.map +1 -0
  125. package/dist/queue/paths.js +107 -0
  126. package/dist/queue/paths.js.map +1 -0
  127. package/dist/queue/process-file.d.ts +22 -0
  128. package/dist/queue/process-file.d.ts.map +1 -0
  129. package/dist/queue/process-file.js +257 -0
  130. package/dist/queue/process-file.js.map +1 -0
  131. package/dist/queue/register-handlers.d.ts +26 -0
  132. package/dist/queue/register-handlers.d.ts.map +1 -0
  133. package/dist/queue/register-handlers.js +36 -0
  134. package/dist/queue/register-handlers.js.map +1 -0
  135. package/dist/queue/registry.d.ts +42 -0
  136. package/dist/queue/registry.d.ts.map +1 -0
  137. package/dist/queue/registry.js +36 -0
  138. package/dist/queue/registry.js.map +1 -0
  139. package/dist/queue/snapshot.d.ts +16 -0
  140. package/dist/queue/snapshot.d.ts.map +1 -0
  141. package/dist/queue/snapshot.js +39 -0
  142. package/dist/queue/snapshot.js.map +1 -0
  143. package/dist/queue/spawn.d.ts +15 -0
  144. package/dist/queue/spawn.d.ts.map +1 -0
  145. package/dist/queue/spawn.js +45 -0
  146. package/dist/queue/spawn.js.map +1 -0
  147. package/dist/queue/submit.d.ts +19 -0
  148. package/dist/queue/submit.d.ts.map +1 -0
  149. package/dist/queue/submit.js +94 -0
  150. package/dist/queue/submit.js.map +1 -0
  151. package/dist/queue/types.d.ts +77 -0
  152. package/dist/queue/types.d.ts.map +1 -0
  153. package/dist/queue/types.js +83 -0
  154. package/dist/queue/types.js.map +1 -0
  155. package/dist/queue/worker-log.d.ts +21 -0
  156. package/dist/queue/worker-log.d.ts.map +1 -0
  157. package/dist/queue/worker-log.js +140 -0
  158. package/dist/queue/worker-log.js.map +1 -0
  159. package/package.json +1 -1
@@ -4,74 +4,215 @@
4
4
  * Appends typed events to .ironbee/sessions/{sessionId}/actions.jsonl
5
5
  * Event types: session_start, tool_call, verification_requested, etc.
6
6
  */
7
+ /**
8
+ * Event type catalog — mirrors Java `EventType` enum.
9
+ * Using a const object + union type gives enum-like ergonomics without
10
+ * blocking raw string literal assignments (e.g. in tests).
11
+ */
12
+ export declare const EventType: {
13
+ readonly SESSION_START: "session_start";
14
+ readonly SESSION_END: "session_end";
15
+ readonly ACTIVITY_START: "activity_start";
16
+ readonly ACTIVITY_END: "activity_end";
17
+ readonly VERIFICATION_START: "verification_start";
18
+ readonly VERIFICATION_END: "verification_end";
19
+ readonly VERIFICATION_REQUESTED: "verification_requested";
20
+ readonly VERDICT_WRITE: "verdict_write";
21
+ readonly FIX_START: "fix_start";
22
+ readonly FIX_END: "fix_end";
23
+ readonly FILE_EDIT: "file_edit";
24
+ readonly TOOL_CALL: "tool_call";
25
+ };
26
+ export type EventTypeValue = typeof EventType[keyof typeof EventType];
7
27
  export interface ActionEntry {
8
- id?: string;
9
- type: string;
10
- timestamp: string;
28
+ id: string;
29
+ type: EventTypeValue;
30
+ timestamp: number;
31
+ session_id: string;
32
+ project_name: string;
33
+ user_email?: string;
11
34
  [key: string]: unknown;
12
35
  }
13
- export interface ToolCallAction extends ActionEntry {
36
+ /**
37
+ * Resolve project name by walking up from the given directory looking for a
38
+ * `.git` entry (directory or file — the latter covers worktrees). If a git
39
+ * root is found, its basename becomes the project name. Otherwise falls back
40
+ * to the basename of the starting directory.
41
+ */
42
+ export declare function resolveProjectName(startDir: string): string;
43
+ /**
44
+ * Base fields that every event must carry — derived from the actionsFile path.
45
+ * Writers spread this into concrete event constructions to satisfy the strict
46
+ * `ActionEntry` contract without duplicating derivation logic.
47
+ *
48
+ * `user_email` is read from the per-session `state.json` (populated once at
49
+ * session start). If state.json is absent or the field is unset, it is
50
+ * omitted from the returned object so JSON.stringify drops it downstream.
51
+ */
52
+ export declare function baseFields(actionsFile: string): {
53
+ id: string;
54
+ session_id: string;
55
+ project_name: string;
56
+ user_email?: string;
57
+ };
58
+ /**
59
+ * Marker interfaces for hierarchical parent IDs.
60
+ * Hierarchy: session > activity > verification + fix.
61
+ * VerificationAware and FixAware extend ActivityAware — a verification or fix
62
+ * cycle is always part of an activity turn.
63
+ */
64
+ export interface ActivityAwareActionEntry extends ActionEntry {
65
+ activity_id: string;
66
+ }
67
+ export interface VerificationAwareActionEntry extends ActivityAwareActionEntry {
68
+ verification_id: string;
69
+ }
70
+ export interface FixAwareActionEntry extends ActivityAwareActionEntry {
71
+ fix_id: string;
72
+ }
73
+ /**
74
+ * A tool_call event. Extends ActivityAwareActionEntry (activity is always
75
+ * known when a tool runs) but NOT VerificationAwareActionEntry — tool calls
76
+ * happen everywhere in a session, most of them outside verification cycles
77
+ * (Bash / Edit / Read fire any time the agent wants, whereas verification
78
+ * cycles are bounded windows explicitly opened by the agent). Downstream
79
+ * schema must therefore treat `verification_id` and `trace_id` as optional.
80
+ */
81
+ export interface ToolCallAction extends ActivityAwareActionEntry {
14
82
  type: "tool_call";
83
+ /**
84
+ * Canonical tool identity after classification:
85
+ * - `tool_type="mcp"` → bare tool name WITHOUT server prefix (e.g. `"bdt_navigation_go-to"`)
86
+ * - `tool_type="skill"` → skill name from `tool_input.skill` (e.g. `"commit"`)
87
+ * - `tool_type="sub_agent"` → sub-agent type from `tool_input.subagent_type` (e.g. `"code-reviewer"`)
88
+ * - `tool_type=null` → the raw tool name (`"Read"`, `"Bash"`, …)
89
+ * See `src/lib/tool-taxonomy.ts:classifyTool`.
90
+ */
15
91
  tool_name: string;
92
+ /**
93
+ * Coarse classification of the tool invocation. `null` for native
94
+ * (Read/Write/Bash/…) tool calls; otherwise one of the three special
95
+ * buckets.
96
+ */
97
+ tool_type?: "mcp" | "skill" | "sub_agent" | null;
98
+ /**
99
+ * Hook-provided tool invocation id. Claude sets `tool_use_id` on both
100
+ * PreToolUse and PostToolUse stdin; Cursor sets it on postToolUse. Lets
101
+ * collector joins correlate a `tool_call` event with the MCP server's
102
+ * own span for the same invocation. Absent on nested (bdt_execute-parsed)
103
+ * entries since those never enter the hook lifecycle with a dedicated id.
104
+ */
105
+ tool_use_id?: string;
16
106
  tool_input?: unknown;
17
107
  tool_response?: unknown;
108
+ /**
109
+ * UTF-8 byte length of `tool_input` (serialized when non-string). Used
110
+ * for size-only telemetry where the raw content would leak sensitive
111
+ * data. `actions.jsonl` entries keep the raw fields; queue `send_event`
112
+ * wire payloads strip content and carry only sizes.
113
+ */
114
+ tool_input_size?: number;
115
+ /** UTF-8 byte length of `tool_response`. See `tool_input_size`. */
116
+ tool_response_size?: number;
117
+ /** Present only when the tool call ran inside a verification cycle. */
118
+ verification_id?: string;
119
+ /** Present only when the tool call ran inside a verification cycle (OTel correlation). */
120
+ trace_id?: string;
121
+ /**
122
+ * MCP server name owning this tool, when applicable. Claude fills this
123
+ * from its `mcp__<server>__<tool>` naming convention; Cursor leaves it
124
+ * null because none of Cursor's hook stdin fields expose the server.
125
+ * `null` means either "not an MCP tool" OR "Cursor adapter couldn't
126
+ * determine it".
127
+ */
128
+ mcp_server?: string | null;
129
+ /**
130
+ * Tool wall-clock duration in ms — pure tool-execution time, excluding
131
+ * PreToolUse hooks and permission-prompt wait. Claude Code supplies it
132
+ * on both PostToolUse and PostToolUseFailure via stdin `duration_ms`;
133
+ * Cursor supplies it on postToolUseFailure (and sometimes postToolUse).
134
+ * `null` on pre-duration-support Claude versions.
135
+ * Downstream must treat missing / null as "unknown" not "zero".
136
+ */
137
+ duration?: number | null;
138
+ error?: string;
18
139
  }
19
- export interface VerificationRequestedAction extends ActionEntry {
140
+ export interface VerificationRequestedAction extends ActivityAwareActionEntry {
20
141
  type: "verification_requested";
21
- action?: "allow" | "block";
22
- reason?: string;
142
+ action: "allow" | "block";
143
+ reason: string;
23
144
  }
24
- export interface VerdictWriteAction extends ActionEntry {
145
+ /**
146
+ * Verdict payload recorded inside VerdictWriteAction.
147
+ * Mirrors the Java `Verdict` domain class: status/pages_tested/checks are
148
+ * always present; counts and issue/fix lists are optional.
149
+ */
150
+ export interface Verdict {
151
+ status: string;
152
+ pages_tested: string[];
153
+ checks: string[];
154
+ console_errors?: number;
155
+ network_failures?: number;
156
+ issues?: string[];
157
+ fixes?: string[];
158
+ }
159
+ export interface VerdictWriteAction extends VerificationAwareActionEntry {
25
160
  type: "verdict_write";
26
- verdict: Record<string, unknown>;
161
+ trace_id?: string;
162
+ verdict: Verdict;
27
163
  }
28
- export interface FileEditAction extends ActionEntry {
164
+ export interface FileEditAction extends FixAwareActionEntry {
29
165
  type: "file_edit";
30
166
  tool_name: string;
31
- file_path?: string;
167
+ file_path: string;
32
168
  }
33
169
  export interface SessionStartAction extends ActionEntry {
34
170
  type: "session_start";
35
- session_id: string;
171
+ source: string;
36
172
  client?: string;
37
- source?: string;
38
173
  }
39
174
  export interface SessionEndAction extends ActionEntry {
40
175
  type: "session_end";
41
- session_id: string;
42
176
  duration?: number;
43
177
  reason?: string;
44
178
  }
45
- export interface VerificationStartAction extends ActionEntry {
179
+ export interface VerificationStartAction extends VerificationAwareActionEntry {
46
180
  type: "verification_start";
47
- verification_id: string;
48
- trace_id?: string;
181
+ trace_id: string;
49
182
  }
50
- export interface VerificationEndAction extends ActionEntry {
183
+ export interface VerificationEndAction extends VerificationAwareActionEntry {
51
184
  type: "verification_end";
52
- verification_id: string;
53
- trace_id?: string;
185
+ trace_id: string;
54
186
  duration?: number;
55
187
  status?: string;
188
+ reason?: string;
56
189
  }
57
- export interface FixStartAction extends ActionEntry {
190
+ export interface FixStartAction extends FixAwareActionEntry {
58
191
  type: "fix_start";
59
- fix_id: string;
60
192
  }
61
- export interface FixEndAction extends ActionEntry {
193
+ export interface FixEndAction extends FixAwareActionEntry {
62
194
  type: "fix_end";
63
- fix_id: string;
64
195
  duration?: number;
196
+ reason?: string;
65
197
  }
66
- export interface ActivityStartAction extends ActionEntry {
198
+ export interface ActivityStartAction extends ActivityAwareActionEntry {
67
199
  type: "activity_start";
68
200
  source?: string;
69
201
  }
70
- export interface ActivityEndAction extends ActionEntry {
202
+ export interface ActivityEndAction extends ActivityAwareActionEntry {
71
203
  type: "activity_end";
72
204
  duration?: number;
205
+ reason?: string;
73
206
  }
74
- export declare function appendAction(actionsFile: string, entry: ActionEntry): Promise<void>;
207
+ export type AppendActionInput = {
208
+ type: EventTypeValue;
209
+ timestamp: number;
210
+ id?: string;
211
+ session_id?: string;
212
+ project_name?: string;
213
+ [key: string]: unknown;
214
+ };
215
+ export declare function appendAction(actionsFile: string, entry: AppendActionInput): Promise<void>;
75
216
  /**
76
217
  * Find the last action of a given type in actions.jsonl and calculate
77
218
  * duration from its timestamp to now.
@@ -1 +1 @@
1
- {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../../src/hooks/core/actions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../../src/hooks/core/actions.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,9 @@
6
6
  * Event types: session_start, tool_call, verification_requested, etc.
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.EventType = void 0;
10
+ exports.resolveProjectName = resolveProjectName;
11
+ exports.baseFields = baseFields;
9
12
  exports.appendAction = appendAction;
10
13
  exports.findDurationSinceLastAction = findDurationSinceLastAction;
11
14
  exports.readActionsSinceLastMarker = readActionsSinceLastMarker;
@@ -18,9 +21,84 @@ const crypto_1 = require("crypto");
18
21
  const path_1 = require("path");
19
22
  const logger_1 = require("../../lib/logger");
20
23
  const collector_1 = require("../../lib/collector");
24
+ /**
25
+ * Event type catalog — mirrors Java `EventType` enum.
26
+ * Using a const object + union type gives enum-like ergonomics without
27
+ * blocking raw string literal assignments (e.g. in tests).
28
+ */
29
+ exports.EventType = {
30
+ SESSION_START: "session_start",
31
+ SESSION_END: "session_end",
32
+ ACTIVITY_START: "activity_start",
33
+ ACTIVITY_END: "activity_end",
34
+ VERIFICATION_START: "verification_start",
35
+ VERIFICATION_END: "verification_end",
36
+ VERIFICATION_REQUESTED: "verification_requested",
37
+ VERDICT_WRITE: "verdict_write",
38
+ FIX_START: "fix_start",
39
+ FIX_END: "fix_end",
40
+ FILE_EDIT: "file_edit",
41
+ TOOL_CALL: "tool_call",
42
+ };
43
+ /**
44
+ * Resolve project name by walking up from the given directory looking for a
45
+ * `.git` entry (directory or file — the latter covers worktrees). If a git
46
+ * root is found, its basename becomes the project name. Otherwise falls back
47
+ * to the basename of the starting directory.
48
+ */
49
+ function resolveProjectName(startDir) {
50
+ let current = startDir;
51
+ while (true) {
52
+ if ((0, fs_1.existsSync)((0, path_1.join)(current, ".git"))) {
53
+ return (0, path_1.basename)(current);
54
+ }
55
+ const parent = (0, path_1.dirname)(current);
56
+ if (parent === current) {
57
+ break;
58
+ }
59
+ current = parent;
60
+ }
61
+ return (0, path_1.basename)(startDir);
62
+ }
63
+ /**
64
+ * Base fields that every event must carry — derived from the actionsFile path.
65
+ * Writers spread this into concrete event constructions to satisfy the strict
66
+ * `ActionEntry` contract without duplicating derivation logic.
67
+ *
68
+ * `user_email` is read from the per-session `state.json` (populated once at
69
+ * session start). If state.json is absent or the field is unset, it is
70
+ * omitted from the returned object so JSON.stringify drops it downstream.
71
+ */
72
+ function baseFields(actionsFile) {
73
+ const sessionId = (0, path_1.basename)((0, path_1.dirname)(actionsFile));
74
+ const projectDir = (0, path_1.dirname)((0, path_1.dirname)((0, path_1.dirname)((0, path_1.dirname)(actionsFile))));
75
+ const sessionDir = (0, path_1.dirname)(actionsFile);
76
+ // Local require to avoid a circular import between actions.ts and
77
+ // session-state.ts (which imports several action types).
78
+ const { getUserEmail } = require("./session-state");
79
+ const userEmail = getUserEmail(sessionDir);
80
+ const out = {
81
+ id: (0, crypto_1.randomUUID)(),
82
+ session_id: sessionId,
83
+ project_name: resolveProjectName(projectDir),
84
+ };
85
+ if (userEmail) {
86
+ out.user_email = userEmail;
87
+ }
88
+ return out;
89
+ }
21
90
  async function appendAction(actionsFile, entry) {
91
+ // Safety net: enrich base fields from path if caller left any blank.
92
+ // Writers using `baseFields(actionsFile)` already have these set.
93
+ const base = baseFields(actionsFile);
22
94
  if (!entry.id) {
23
- entry.id = (0, crypto_1.randomUUID)();
95
+ entry.id = base.id;
96
+ }
97
+ if (!entry.session_id) {
98
+ entry.session_id = base.session_id;
99
+ }
100
+ if (!entry.project_name) {
101
+ entry.project_name = base.project_name;
24
102
  }
25
103
  try {
26
104
  (0, fs_1.mkdirSync)((0, path_1.dirname)(actionsFile), { recursive: true });
@@ -56,9 +134,8 @@ function findDurationSinceLastAction(actionsFile, actionType, now) {
56
134
  for (let i = lines.length - 1; i >= 0; i--) {
57
135
  try {
58
136
  const entry = JSON.parse(lines[i]);
59
- if (entry.type === actionType && entry.timestamp) {
60
- const startTime = new Date(entry.timestamp).getTime();
61
- return now - startTime;
137
+ if (entry.type === actionType && typeof entry.timestamp === "number") {
138
+ return now - entry.timestamp;
62
139
  }
63
140
  }
64
141
  catch {
@@ -1 +1 @@
1
- {"version":3,"file":"actions.js","sourceRoot":"","sources":["../../../src/hooks/core/actions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"actions.js","sourceRoot":"","sources":["../../../src/hooks/core/actions.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"activity.d.ts","sourceRoot":"","sources":["../../../src/hooks/core/activity.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,MAAM,WAAW,kBAAkB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,wBAAsB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgB5E;AAED,wBAAsB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBxE"}
1
+ {"version":3,"file":"activity.d.ts","sourceRoot":"","sources":["../../../src/hooks/core/activity.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,MAAM,WAAW,kBAAkB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,wBAAsB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmB5E;AAED,wBAAsB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBxE"}
@@ -10,6 +10,7 @@
10
10
  Object.defineProperty(exports, "__esModule", { value: true });
11
11
  exports.startActivity = startActivity;
12
12
  exports.endActivity = endActivity;
13
+ const crypto_1 = require("crypto");
13
14
  const logger_1 = require("../../lib/logger");
14
15
  const session_state_1 = require("./session-state");
15
16
  const actions_1 = require("./actions");
@@ -18,29 +19,35 @@ async function startActivity(input) {
18
19
  if ((0, session_state_1.isActive)(sessionDir)) {
19
20
  return;
20
21
  }
21
- (0, session_state_1.setActive)(sessionDir, true);
22
+ const activityId = (0, crypto_1.randomUUID)();
23
+ (0, session_state_1.setActiveActivity)(sessionDir, activityId);
22
24
  const entry = {
25
+ ...(0, actions_1.baseFields)(actionsFile),
23
26
  type: "activity_start",
24
- timestamp: new Date().toISOString(),
27
+ timestamp: Date.now(),
28
+ activity_id: activityId,
25
29
  source,
26
30
  };
27
31
  await (0, actions_1.appendAction)(actionsFile, entry);
28
- logger_1.logger.debug(`activity-start: source=${source ?? "unknown"}`);
32
+ logger_1.logger.debug(`activity-start: ${activityId} source=${source ?? "unknown"}`);
29
33
  }
30
34
  async function endActivity(input) {
31
35
  const { sessionDir, actionsFile } = input;
32
36
  if (!(0, session_state_1.isActive)(sessionDir)) {
33
37
  return;
34
38
  }
35
- (0, session_state_1.setActive)(sessionDir, false);
39
+ const activityId = (0, session_state_1.getActiveActivityId)(sessionDir);
40
+ (0, session_state_1.clearActiveActivity)(sessionDir);
36
41
  const now = Date.now();
37
42
  const duration = (0, actions_1.findDurationSinceLastAction)(actionsFile, "activity_start", now);
38
43
  const entry = {
44
+ ...(0, actions_1.baseFields)(actionsFile),
39
45
  type: "activity_end",
40
- timestamp: new Date(now).toISOString(),
46
+ timestamp: now,
47
+ activity_id: activityId,
41
48
  duration,
42
49
  };
43
50
  await (0, actions_1.appendAction)(actionsFile, entry);
44
- logger_1.logger.debug(`activity-end: duration=${duration ?? "unknown"}`);
51
+ logger_1.logger.debug(`activity-end: ${activityId ?? ""} duration=${duration ?? "unknown"}`);
45
52
  }
46
53
  //# sourceMappingURL=activity.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"activity.js","sourceRoot":"","sources":["../../../src/hooks/core/activity.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;AAiBH,sCAgBC;AAED,kCAmBC;AApDD,6CAA0C;AAC1C,mDAAsD;AACtD,uCAA8G;AAavG,KAAK,UAAU,aAAa,CAAC,KAAyB;IACzD,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IAElD,IAAI,IAAA,wBAAQ,EAAC,UAAU,CAAC,EAAE,CAAC;QACvB,OAAO;IACX,CAAC;IAED,IAAA,yBAAS,EAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAE5B,MAAM,KAAK,GAAwB;QAC/B,IAAI,EAAE,gBAAgB;QACtB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,MAAM;KACT,CAAC;IACF,MAAM,IAAA,sBAAY,EAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IACvC,eAAM,CAAC,KAAK,CAAC,0BAA0B,MAAM,IAAI,SAAS,EAAE,CAAC,CAAC;AAClE,CAAC;AAEM,KAAK,UAAU,WAAW,CAAC,KAAuB;IACrD,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC;IAE1C,IAAI,CAAC,IAAA,wBAAQ,EAAC,UAAU,CAAC,EAAE,CAAC;QACxB,OAAO;IACX,CAAC;IAED,IAAA,yBAAS,EAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAE7B,MAAM,GAAG,GAAW,IAAI,CAAC,GAAG,EAAE,CAAC;IAC/B,MAAM,QAAQ,GAAuB,IAAA,qCAA2B,EAAC,WAAW,EAAE,gBAAgB,EAAE,GAAG,CAAC,CAAC;IAErG,MAAM,KAAK,GAAsB;QAC7B,IAAI,EAAE,cAAc;QACpB,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE;QACtC,QAAQ;KACX,CAAC;IACF,MAAM,IAAA,sBAAY,EAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IACvC,eAAM,CAAC,KAAK,CAAC,0BAA0B,QAAQ,IAAI,SAAS,EAAE,CAAC,CAAC;AACpE,CAAC"}
1
+ {"version":3,"file":"activity.js","sourceRoot":"","sources":["../../../src/hooks/core/activity.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;AAkBH,sCAmBC;AAED,kCAsBC;AA3DD,mCAAoC;AACpC,6CAA0C;AAC1C,mDAAwG;AACxG,uCAA0H;AAanH,KAAK,UAAU,aAAa,CAAC,KAAyB;IACzD,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IAElD,IAAI,IAAA,wBAAQ,EAAC,UAAU,CAAC,EAAE,CAAC;QACvB,OAAO;IACX,CAAC;IAED,MAAM,UAAU,GAAW,IAAA,mBAAU,GAAE,CAAC;IACxC,IAAA,iCAAiB,EAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAE1C,MAAM,KAAK,GAAwB;QAC/B,GAAG,IAAA,oBAAU,EAAC,WAAW,CAAC;QAC1B,IAAI,EAAE,gBAAgB;QACtB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,WAAW,EAAE,UAAU;QACvB,MAAM;KACT,CAAC;IACF,MAAM,IAAA,sBAAY,EAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IACvC,eAAM,CAAC,KAAK,CAAC,mBAAmB,UAAU,WAAW,MAAM,IAAI,SAAS,EAAE,CAAC,CAAC;AAChF,CAAC;AAEM,KAAK,UAAU,WAAW,CAAC,KAAuB;IACrD,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC;IAE1C,IAAI,CAAC,IAAA,wBAAQ,EAAC,UAAU,CAAC,EAAE,CAAC;QACxB,OAAO;IACX,CAAC;IAED,MAAM,UAAU,GAAuB,IAAA,mCAAmB,EAAC,UAAU,CAAC,CAAC;IACvE,IAAA,mCAAmB,EAAC,UAAU,CAAC,CAAC;IAEhC,MAAM,GAAG,GAAW,IAAI,CAAC,GAAG,EAAE,CAAC;IAC/B,MAAM,QAAQ,GAAuB,IAAA,qCAA2B,EAAC,WAAW,EAAE,gBAAgB,EAAE,GAAG,CAAC,CAAC;IAErG,MAAM,KAAK,GAAsB;QAC7B,GAAG,IAAA,oBAAU,EAAC,WAAW,CAAC;QAC1B,IAAI,EAAE,cAAc;QACpB,SAAS,EAAE,GAAG;QACd,WAAW,EAAE,UAAW;QACxB,QAAQ;KACX,CAAC;IACF,MAAM,IAAA,sBAAY,EAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IACvC,eAAM,CAAC,KAAK,CAAC,iBAAiB,UAAU,IAAI,EAAE,aAAa,QAAQ,IAAI,SAAS,EAAE,CAAC,CAAC;AACxF,CAAC"}
@@ -5,6 +5,7 @@
5
5
  * All session state (retries, activeVerificationId, lastVerdictStatus)
6
6
  * is stored in a single state.json file per session.
7
7
  */
8
+ import { ActionEntry } from "./actions";
8
9
  export type SessionPhase = "coding" | "verifying" | "fixing" | null;
9
10
  export interface SessionState {
10
11
  retries: number;
@@ -12,10 +13,18 @@ export interface SessionState {
12
13
  activeTraceId: string | null;
13
14
  lastVerdictStatus: string | null;
14
15
  activeFixId: string | null;
16
+ activeActivityId: string | null;
15
17
  phase: SessionPhase;
16
18
  recordingRequired: boolean;
17
19
  recordingActive: boolean;
18
20
  active: boolean;
21
+ /**
22
+ * Authenticated user email, resolved once at session start and attached
23
+ * to every action/event via `baseFields()`. Cached here so hooks avoid
24
+ * re-reading `~/.claude.json` / stdin on every invocation.
25
+ * `null` = unauthenticated session or lookup failed.
26
+ */
27
+ userEmail: string | null;
19
28
  }
20
29
  /** Generate an OTEL-compatible trace ID (32 hex chars / 16 bytes). */
21
30
  export declare function generateTraceId(): string;
@@ -41,16 +50,19 @@ export declare function isRecordingActive(sessionDir: string): boolean;
41
50
  export declare function setRecordingActive(sessionDir: string, active: boolean): void;
42
51
  export declare function isActive(sessionDir: string): boolean;
43
52
  export declare function setActive(sessionDir: string, active: boolean): void;
53
+ export declare function getActiveActivityId(sessionDir: string): string | undefined;
54
+ export declare function getUserEmail(sessionDir: string): string | undefined;
55
+ /**
56
+ * Persist the authenticated user email into state.json. Idempotent — writing
57
+ * the same value twice is a no-op write. `null` / empty clears the field.
58
+ */
59
+ export declare function setUserEmail(sessionDir: string, email: string | null | undefined): void;
60
+ export declare function setActiveActivity(sessionDir: string, activityId: string): void;
61
+ export declare function clearActiveActivity(sessionDir: string): void;
44
62
  /**
45
63
  * Reconcile session state on session start/resume.
46
64
  * Closes any open verification or fix cycles, records appropriate
47
65
  * end entries in actions.jsonl, and resets phase to "coding".
48
- *
49
- * @param appendFn — action appender function (avoids circular import with actions.ts)
50
66
  */
51
- export declare function reconcileSessionState(sessionDir: string, actionsFile: string, appendFn: (file: string, entry: {
52
- type: string;
53
- timestamp: string;
54
- [key: string]: unknown;
55
- }) => Promise<void>): Promise<void>;
67
+ export declare function reconcileSessionState(sessionDir: string, actionsFile: string, appendFn: (file: string, entry: ActionEntry) => Promise<void>): Promise<void>;
56
68
  //# sourceMappingURL=session-state.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-state.d.ts","sourceRoot":"","sources":["../../../src/hooks/core/session-state.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,IAAI,CAAC;AAEpE,MAAM,WAAW,YAAY;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,EAAE,YAAY,CAAC;IACpB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,eAAe,EAAE,OAAO,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC;CACnB;AAgBD,sEAAsE;AACtE,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,wBAAgB,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,YAAY,CAwB1D;AAED,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,CAQxE;AAED,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAG9E;AAED,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAMvG;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGvE;AAED,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAMhE;AAED,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAGrD;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAK3D;AAED,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAIrD;AAED,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAG3E;AAED,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAIpF;AAED,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAIpE;AAED,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGrE;AAED,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAIvD;AAED,wBAAgB,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,CAItE;AAED,wBAAgB,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,YAAY,CAGzD;AAED,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAG/D;AAED,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI,CAIhF;AAED,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAG7D;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAI5E;AAED,wBAAgB,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAGpD;AAED,wBAAgB,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAInE;AAED;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CACvC,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,KAAK,OAAO,CAAC,IAAI,CAAC,GAC9G,OAAO,CAAC,IAAI,CAAC,CA4Df"}
1
+ {"version":3,"file":"session-state.d.ts","sourceRoot":"","sources":["../../../src/hooks/core/session-state.ts"],"names":[],"mappings":"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"}