autodev-cli 1.4.0 → 1.4.4

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 (237) hide show
  1. package/bin/autodev.js +0 -0
  2. package/out/agentBackup/archive.d.ts +44 -0
  3. package/out/agentBackup/archive.js +131 -0
  4. package/out/agentBackup/archive.js.map +1 -0
  5. package/out/agentBackup/export.d.ts +18 -0
  6. package/out/agentBackup/export.js +92 -0
  7. package/out/agentBackup/export.js.map +1 -0
  8. package/out/agentBackup/import.d.ts +21 -0
  9. package/out/agentBackup/import.js +40 -0
  10. package/out/agentBackup/import.js.map +1 -0
  11. package/out/agentBackup/index.d.ts +6 -0
  12. package/out/agentBackup/index.js +11 -0
  13. package/out/agentBackup/index.js.map +1 -0
  14. package/out/agentBackup/layout.d.ts +30 -0
  15. package/out/agentBackup/layout.js +126 -0
  16. package/out/agentBackup/layout.js.map +1 -0
  17. package/out/agentBackup/manifest.d.ts +24 -0
  18. package/out/agentBackup/manifest.js +70 -0
  19. package/out/agentBackup/manifest.js.map +1 -0
  20. package/out/agentBackup/opencodeDb.d.ts +20 -0
  21. package/out/agentBackup/opencodeDb.js +213 -0
  22. package/out/agentBackup/opencodeDb.js.map +1 -0
  23. package/out/agentBackup/sessionProviders.d.ts +35 -0
  24. package/out/agentBackup/sessionProviders.js +263 -0
  25. package/out/agentBackup/sessionProviders.js.map +1 -0
  26. package/out/agentBackup/upload.d.ts +9 -0
  27. package/out/agentBackup/upload.js +121 -0
  28. package/out/agentBackup/upload.js.map +1 -0
  29. package/out/cli.d.ts +1 -0
  30. package/out/cli.js +8 -0
  31. package/out/cli.js.map +1 -1
  32. package/out/cliExit.d.ts +34 -0
  33. package/out/cliExit.js +159 -0
  34. package/out/cliExit.js.map +1 -0
  35. package/out/commands/config.d.ts +2 -0
  36. package/out/commands/config.js +7 -7
  37. package/out/commands/config.js.map +1 -1
  38. package/out/commands/connect.d.ts +2 -0
  39. package/out/commands/connect.js +11 -0
  40. package/out/commands/connect.js.map +1 -1
  41. package/out/commands/export.d.ts +2 -0
  42. package/out/commands/export.js +79 -0
  43. package/out/commands/export.js.map +1 -0
  44. package/out/commands/import.d.ts +2 -0
  45. package/out/commands/import.js +92 -0
  46. package/out/commands/import.js.map +1 -0
  47. package/out/commands/init.d.ts +16 -0
  48. package/out/commands/init.js +9 -5
  49. package/out/commands/init.js.map +1 -1
  50. package/out/commands/resume.d.ts +2 -0
  51. package/out/commands/resume.js +65 -0
  52. package/out/commands/resume.js.map +1 -0
  53. package/out/commands/sessions.d.ts +2 -0
  54. package/out/commands/sessions.js +64 -0
  55. package/out/commands/sessions.js.map +1 -0
  56. package/out/commands/start.d.ts +2 -0
  57. package/out/commands/start.js +40 -7
  58. package/out/commands/start.js.map +1 -1
  59. package/out/commands/status.d.ts +2 -0
  60. package/out/commands/status.js +3 -3
  61. package/out/commands/status.js.map +1 -1
  62. package/out/commands/tailOutput.d.ts +12 -0
  63. package/out/commands/up.d.ts +3 -0
  64. package/out/configManager.d.ts +42 -0
  65. package/out/configManager.js +447 -0
  66. package/out/configManager.js.map +1 -0
  67. package/out/connect.d.ts +4 -0
  68. package/out/connect.js +7 -7
  69. package/out/connect.js.map +1 -1
  70. package/out/core/adapters.d.ts +34 -0
  71. package/out/core/adapters.js +84 -0
  72. package/out/core/adapters.js.map +1 -0
  73. package/out/core/commandHelpers.d.ts +12 -0
  74. package/out/core/commandHelpers.js +96 -0
  75. package/out/core/commandHelpers.js.map +1 -0
  76. package/out/core/projectMcp.d.ts +34 -0
  77. package/out/core/projectMcp.js +160 -0
  78. package/out/core/projectMcp.js.map +1 -0
  79. package/out/core/provider/BaseProvider.d.ts +14 -0
  80. package/out/core/provider/BaseProvider.js +25 -0
  81. package/out/core/provider/BaseProvider.js.map +1 -0
  82. package/out/core/provider/ProviderRegistry.d.ts +12 -0
  83. package/out/core/provider/ProviderRegistry.js +40 -0
  84. package/out/core/provider/ProviderRegistry.js.map +1 -0
  85. package/out/core/provider/contract.d.ts +62 -0
  86. package/out/core/provider/contract.js +9 -0
  87. package/out/core/provider/contract.js.map +1 -0
  88. package/out/core/provider/implementations.d.ts +54 -0
  89. package/out/core/provider/implementations.js +147 -0
  90. package/out/core/provider/implementations.js.map +1 -0
  91. package/out/core/settingsLoader.d.ts +221 -0
  92. package/out/core/settingsLoader.js +176 -0
  93. package/out/core/settingsLoader.js.map +1 -0
  94. package/out/discordGateway.d.ts +26 -0
  95. package/out/discordGateway.js +230 -0
  96. package/out/discordGateway.js.map +1 -0
  97. package/out/discordPoller.d.ts +28 -0
  98. package/out/discordPoller.js +247 -0
  99. package/out/discordPoller.js.map +1 -0
  100. package/out/dispatcher.d.ts +12 -0
  101. package/out/dispatcher.js +214 -0
  102. package/out/dispatcher.js.map +1 -0
  103. package/out/emailPoller.d.ts +42 -0
  104. package/out/emailPoller.js +221 -0
  105. package/out/emailPoller.js.map +1 -0
  106. package/out/git/gitService.d.ts +36 -0
  107. package/out/git/gitService.js +165 -0
  108. package/out/git/gitService.js.map +1 -0
  109. package/out/hookEventNormalizer.d.ts +39 -0
  110. package/out/hookEventNormalizer.js +397 -0
  111. package/out/hookEventNormalizer.js.map +1 -0
  112. package/out/hooksManager.d.ts +25 -0
  113. package/out/hooksManager.js +471 -0
  114. package/out/hooksManager.js.map +1 -0
  115. package/out/launchIde.d.ts +14 -0
  116. package/out/logger.d.ts +12 -0
  117. package/out/mcpEmailTest.d.ts +29 -0
  118. package/out/mcpEmailTest.js +245 -0
  119. package/out/mcpEmailTest.js.map +1 -0
  120. package/out/mcpInstallCheck.d.ts +23 -0
  121. package/out/mcpInstallCheck.js +219 -0
  122. package/out/mcpInstallCheck.js.map +1 -0
  123. package/out/mcpManager.d.ts +35 -0
  124. package/out/mcpManager.js +371 -0
  125. package/out/mcpManager.js.map +1 -0
  126. package/out/messageBuilder.d.ts +54 -0
  127. package/out/messageBuilder.js +373 -0
  128. package/out/messageBuilder.js.map +1 -0
  129. package/out/openCodeHooksManager.d.ts +23 -0
  130. package/out/openCodeHooksManager.js +511 -0
  131. package/out/openCodeHooksManager.js.map +1 -0
  132. package/out/periodicActions.d.ts +63 -0
  133. package/out/periodicActions.js +237 -0
  134. package/out/periodicActions.js.map +1 -0
  135. package/out/profileBuilder.d.ts +29 -0
  136. package/out/profileBuilder.js +366 -0
  137. package/out/profileBuilder.js.map +1 -0
  138. package/out/prompt.d.ts +12 -0
  139. package/out/prompt.js +18 -0
  140. package/out/prompt.js.map +1 -0
  141. package/out/protocolSections.d.ts +26 -0
  142. package/out/protocolSections.js +209 -0
  143. package/out/protocolSections.js.map +1 -0
  144. package/out/providers/claudeCliProvider.d.ts +71 -0
  145. package/out/providers/claudeCliProvider.js +425 -0
  146. package/out/providers/claudeCliProvider.js.map +1 -0
  147. package/out/providers/claudeTuiProvider.d.ts +23 -0
  148. package/out/providers/claudeTuiProvider.js +296 -0
  149. package/out/providers/claudeTuiProvider.js.map +1 -0
  150. package/out/providers/copilotCliProvider.d.ts +16 -0
  151. package/out/providers/copilotCliProvider.js +44 -0
  152. package/out/providers/copilotCliProvider.js.map +1 -0
  153. package/out/providers/copilotSdkProvider.d.ts +12 -0
  154. package/out/providers/copilotSdkProvider.js +445 -0
  155. package/out/providers/copilotSdkProvider.js.map +1 -0
  156. package/out/providers/grokTuiProvider.d.ts +14 -0
  157. package/out/providers/grokTuiProvider.js +271 -0
  158. package/out/providers/grokTuiProvider.js.map +1 -0
  159. package/out/providers/opencodeCliProvider.d.ts +29 -0
  160. package/out/providers/opencodeCliProvider.js +199 -0
  161. package/out/providers/opencodeCliProvider.js.map +1 -0
  162. package/out/providers/opencodeSdkProvider.d.ts +22 -0
  163. package/out/providers/opencodeSdkProvider.js +557 -0
  164. package/out/providers/opencodeSdkProvider.js.map +1 -0
  165. package/out/providers.d.ts +9 -0
  166. package/out/providers.js +44 -0
  167. package/out/providers.js.map +1 -0
  168. package/out/rateLimit.d.ts +18 -0
  169. package/out/rateLimit.js +90 -0
  170. package/out/rateLimit.js.map +1 -0
  171. package/out/rdp/auth.d.ts +55 -0
  172. package/out/rdp/auth.js +197 -0
  173. package/out/rdp/auth.js.map +1 -0
  174. package/out/rdp/bridge.d.ts +86 -0
  175. package/out/rdp/bridge.js +1398 -0
  176. package/out/rdp/bridge.js.map +1 -0
  177. package/out/rdp/constants.d.ts +86 -0
  178. package/out/rdp/constants.js +182 -0
  179. package/out/rdp/constants.js.map +1 -0
  180. package/out/rdp/index.d.ts +7 -0
  181. package/out/rdp/index.js +14 -0
  182. package/out/rdp/index.js.map +1 -0
  183. package/out/rdp/session.d.ts +30 -0
  184. package/out/rdp/session.js +196 -0
  185. package/out/rdp/session.js.map +1 -0
  186. package/out/rdp/types.d.ts +27 -0
  187. package/out/rdp/types.js +6 -0
  188. package/out/rdp/types.js.map +1 -0
  189. package/out/sdk/index.d.ts +22 -0
  190. package/out/sdk/index.js +81 -0
  191. package/out/sdk/index.js.map +1 -0
  192. package/out/sessionState.d.ts +54 -0
  193. package/out/sessionState.js +284 -0
  194. package/out/sessionState.js.map +1 -0
  195. package/out/sessions.d.ts +11 -0
  196. package/out/sessions.js +32 -0
  197. package/out/sessions.js.map +1 -0
  198. package/out/taskLoop.d.ts +152 -0
  199. package/out/taskLoop.js +2505 -0
  200. package/out/taskLoop.js.map +1 -0
  201. package/out/todo.d.ts +42 -0
  202. package/out/todo.js +311 -0
  203. package/out/todo.js.map +1 -0
  204. package/out/todoWriteManager.d.ts +26 -0
  205. package/out/todoWriteManager.js +44 -0
  206. package/out/todoWriteManager.js.map +1 -0
  207. package/out/vnc/auth.d.ts +52 -0
  208. package/out/vnc/auth.js +181 -0
  209. package/out/vnc/auth.js.map +1 -0
  210. package/out/vnc/bridge.d.ts +40 -0
  211. package/out/vnc/bridge.js +540 -0
  212. package/out/vnc/bridge.js.map +1 -0
  213. package/out/vnc/constants.d.ts +8 -0
  214. package/out/vnc/constants.js +34 -0
  215. package/out/vnc/constants.js.map +1 -0
  216. package/out/vnc/des.d.ts +6 -0
  217. package/out/vnc/des.js +93 -0
  218. package/out/vnc/des.js.map +1 -0
  219. package/out/vnc/index.d.ts +7 -0
  220. package/out/vnc/index.js +13 -0
  221. package/out/vnc/index.js.map +1 -0
  222. package/out/vnc/session.d.ts +18 -0
  223. package/out/vnc/session.js +193 -0
  224. package/out/vnc/session.js.map +1 -0
  225. package/out/vnc/types.d.ts +16 -0
  226. package/out/vnc/types.js +6 -0
  227. package/out/vnc/types.js.map +1 -0
  228. package/out/webSocketPoller.d.ts +95 -0
  229. package/out/webSocketPoller.js +986 -0
  230. package/out/webSocketPoller.js.map +1 -0
  231. package/out/webhook.d.ts +37 -0
  232. package/out/webhook.js +265 -0
  233. package/out/webhook.js.map +1 -0
  234. package/out/webhookPoller.d.ts +40 -0
  235. package/out/webhookPoller.js +378 -0
  236. package/out/webhookPoller.js.map +1 -0
  237. package/package.json +54 -41
@@ -0,0 +1,165 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.getStatus = getStatus;
37
+ exports.getLog = getLog;
38
+ exports.getDiff = getDiff;
39
+ exports.getCommitDiff = getCommitDiff;
40
+ exports.stageFile = stageFile;
41
+ exports.unstageFile = unstageFile;
42
+ exports.stageAll = stageAll;
43
+ exports.commit = commit;
44
+ exports.fetchOrigin = fetchOrigin;
45
+ exports.getBranches = getBranches;
46
+ exports.checkoutBranch = checkoutBranch;
47
+ const child_process_1 = require("child_process");
48
+ const util_1 = require("util");
49
+ const execFileAsync = (0, util_1.promisify)(child_process_1.execFile);
50
+ async function git(cwd, args) {
51
+ const { stdout } = await execFileAsync('git', args, { cwd, maxBuffer: 8 * 1024 * 1024 });
52
+ return stdout;
53
+ }
54
+ async function getStatus(cwd) {
55
+ const [porcelain, branchRaw] = await Promise.all([
56
+ git(cwd, ['status', '--porcelain=v1', '-u']),
57
+ git(cwd, ['status', '-b', '--porcelain=v1']).catch(() => ''),
58
+ ]);
59
+ let branch = 'HEAD';
60
+ let upstream = null;
61
+ let ahead = 0;
62
+ let behind = 0;
63
+ const branchLine = branchRaw.split('\n')[0] ?? '';
64
+ // ## main...origin/main [ahead 2, behind 1]
65
+ const branchMatch = branchLine.match(/^## (.+?)(?:\.\.\.(\S+))?(?:\s+\[(.+)\])?$/);
66
+ if (branchMatch) {
67
+ branch = branchMatch[1] ?? 'HEAD';
68
+ upstream = branchMatch[2] ?? null;
69
+ const diverge = branchMatch[3] ?? '';
70
+ const aheadMatch = diverge.match(/ahead (\d+)/);
71
+ const behindMatch = diverge.match(/behind (\d+)/);
72
+ if (aheadMatch)
73
+ ahead = parseInt(aheadMatch[1], 10);
74
+ if (behindMatch)
75
+ behind = parseInt(behindMatch[1], 10);
76
+ }
77
+ const files = [];
78
+ for (const line of porcelain.split('\n')) {
79
+ if (line.length < 3)
80
+ continue;
81
+ const X = line[0] ?? ' ';
82
+ const Y = line[1] ?? ' ';
83
+ const filePath = line.slice(3).trim().replace(/^"(.*)"$/, '$1');
84
+ files.push({ path: filePath, staged: X, unstaged: Y });
85
+ }
86
+ return { branch, upstream, ahead, behind, files };
87
+ }
88
+ async function getLog(cwd, limit = 50) {
89
+ const SEP = '\x1f';
90
+ const fmt = `%H${SEP}%h${SEP}%s${SEP}%an${SEP}%ae${SEP}%ci${SEP}%D`;
91
+ const out = await git(cwd, ['log', `--format=${fmt}`, `-${limit}`]);
92
+ return out.split('\n')
93
+ .filter(l => l.trim())
94
+ .map(line => {
95
+ const parts = line.split(SEP);
96
+ return {
97
+ hash: parts[0] ?? '',
98
+ short: parts[1] ?? '',
99
+ subject: parts[2] ?? '',
100
+ author: parts[3] ?? '',
101
+ email: parts[4] ?? '',
102
+ date: parts[5] ?? '',
103
+ refs: parts[6] ?? '',
104
+ };
105
+ });
106
+ }
107
+ async function getDiff(cwd, filePath, staged) {
108
+ const args = staged
109
+ ? ['diff', '--cached', '--', filePath]
110
+ : ['diff', '--', filePath];
111
+ const out = await git(cwd, args).catch(() => '');
112
+ // If unstaged shows nothing but file is untracked, show full content as addition
113
+ if (!out && !staged) {
114
+ const content = await git(cwd, ['show', `:${filePath}`]).catch(async () => {
115
+ const { readFileSync } = await Promise.resolve().then(() => __importStar(require('fs')));
116
+ try {
117
+ return readFileSync(require('path').join(cwd, filePath), 'utf8');
118
+ }
119
+ catch {
120
+ return '';
121
+ }
122
+ });
123
+ if (content) {
124
+ return content.split('\n').map(l => `+${l}`).join('\n');
125
+ }
126
+ }
127
+ return out;
128
+ }
129
+ async function getCommitDiff(cwd, hash, filePath) {
130
+ const args = ['show', '--stat', hash];
131
+ if (filePath)
132
+ args.push('--', filePath);
133
+ return git(cwd, args).catch(() => '');
134
+ }
135
+ async function stageFile(cwd, filePath) {
136
+ await git(cwd, ['add', '--', filePath]);
137
+ }
138
+ async function unstageFile(cwd, filePath) {
139
+ await git(cwd, ['restore', '--staged', '--', filePath]).catch(() => git(cwd, ['reset', 'HEAD', '--', filePath]));
140
+ }
141
+ async function stageAll(cwd) {
142
+ await git(cwd, ['add', '-A']);
143
+ }
144
+ async function commit(cwd, message) {
145
+ const out = await git(cwd, ['commit', '-m', message]);
146
+ const hashMatch = out.match(/\[.+ ([a-f0-9]+)\]/);
147
+ return hashMatch?.[1] ?? '';
148
+ }
149
+ async function fetchOrigin(cwd) {
150
+ await git(cwd, ['fetch', '--prune']);
151
+ }
152
+ async function getBranches(cwd) {
153
+ const out = await git(cwd, ['branch', '-a', '--format=%(HEAD) %(refname:short)']).catch(() => '');
154
+ return out.split('\n')
155
+ .filter(l => l.trim())
156
+ .map(line => ({
157
+ current: line.startsWith('*'),
158
+ remote: line.includes('remotes/'),
159
+ name: line.replace(/^\*?\s+/, '').replace(/^remotes\//, ''),
160
+ }));
161
+ }
162
+ async function checkoutBranch(cwd, branch) {
163
+ await git(cwd, ['checkout', branch]);
164
+ }
165
+ //# sourceMappingURL=gitService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitService.js","sourceRoot":"","sources":["../../src/git/gitService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ export interface HookEvent {
2
+ hook_event_name: string;
3
+ provider: string;
4
+ tool_name?: string;
5
+ tool_input?: unknown;
6
+ tool_output?: {
7
+ text: string;
8
+ } | null;
9
+ success?: boolean;
10
+ session_id?: string | null;
11
+ message?: string | null;
12
+ timestamp: string;
13
+ [key: string]: unknown;
14
+ }
15
+ /**
16
+ * Normalize a raw provider event into the unified HookEvent schema.
17
+ *
18
+ * @param provider One of: 'copilot-sdk' | 'opencode-sdk' | 'claude-cli' |
19
+ * 'copilot-cli' | or any string for pass-through.
20
+ * @param raw The raw event object from the provider.
21
+ * @returns A HookEvent ready to be JSON-stringified, or null if the
22
+ * event type is not mapped / not interesting.
23
+ */
24
+ export declare function normalizeEvent(provider: string, raw: Record<string, unknown>): HookEvent | null;
25
+ /**
26
+ * Append a normalized event to a JSONL sink file.
27
+ * Creates the directory if it doesn't exist.
28
+ * Silently ignores write errors (non-critical path).
29
+ */
30
+ export declare function appendHookEvent(jsonlPath: string, provider: string, raw: Record<string, unknown>, fs: {
31
+ mkdirSync: (p: string, opts: {
32
+ recursive: boolean;
33
+ }) => void;
34
+ appendFileSync: (p: string, d: string, opts: BufferEncoding | {
35
+ encoding: BufferEncoding;
36
+ }) => void;
37
+ }, path: {
38
+ dirname: (p: string) => string;
39
+ }, onError?: (err: unknown) => void): void;
@@ -0,0 +1,397 @@
1
+ "use strict";
2
+ // ---------------------------------------------------------------------------
3
+ // hookEventNormalizer — converts raw events from any supported provider into
4
+ // the unified hook-event schema written to .autodev/hooks-events.jsonl.
5
+ //
6
+ // Unified schema (same as Claude/Copilot CLI hook scripts):
7
+ // hook_event_name — PascalCase event name (required)
8
+ // provider — source provider string (required)
9
+ // tool_name — name of tool involved (optional)
10
+ // tool_input — tool arguments (optional)
11
+ // tool_output — { text: string } (optional)
12
+ // success — boolean (optional)
13
+ // session_id — session / call ID (optional)
14
+ // message — free-form text (optional)
15
+ // timestamp — ISO-8601 (added here) (required)
16
+ //
17
+ // Usage:
18
+ // import { normalizeEvent } from './hookEventNormalizer';
19
+ // const hookEv = normalizeEvent('copilot-sdk', rawSdkEvent);
20
+ // if (hookEv) fs.appendFileSync(jsonlPath, JSON.stringify(hookEv) + '\n');
21
+ // ---------------------------------------------------------------------------
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports.normalizeEvent = normalizeEvent;
24
+ exports.appendHookEvent = appendHookEvent;
25
+ // ---------------------------------------------------------------------------
26
+ // Helpers
27
+ // ---------------------------------------------------------------------------
28
+ function safeStr(v) {
29
+ if (v == null) {
30
+ return null;
31
+ }
32
+ if (typeof v === 'string') {
33
+ return v;
34
+ }
35
+ try {
36
+ return JSON.stringify(v);
37
+ }
38
+ catch {
39
+ return String(v);
40
+ }
41
+ }
42
+ function safeObj(v) {
43
+ if (v == null) {
44
+ return null;
45
+ }
46
+ try {
47
+ return JSON.parse(JSON.stringify(v));
48
+ }
49
+ catch {
50
+ return String(v);
51
+ }
52
+ }
53
+ function textOut(v, maxLen = 400) {
54
+ if (v == null) {
55
+ return null;
56
+ }
57
+ const s = typeof v === 'string' ? v : safeStr(v) ?? '';
58
+ return s.length > 0 ? { text: s.slice(0, maxLen) } : null;
59
+ }
60
+ // ---------------------------------------------------------------------------
61
+ // Provider: 'copilot-sdk'
62
+ //
63
+ // Raw event shape: { type: string; data?: Record<string, unknown>; ephemeral?: boolean }
64
+ // Caller should only pass non-ephemeral events.
65
+ // toolCallId → toolName: populated by tool.execution_start, consumed by
66
+ // tool.execution_complete so we can resolve the tool name even when the SDK
67
+ // doesn't repeat it in the completion payload. Auto-pruned after 500 entries.
68
+ const _toolCallNames = new Map();
69
+ // toolCallId → intentionSummary: populated by assistant.message (toolRequests),
70
+ // consumed by tool.execution_start so PreToolUse carries the agent's stated reasoning.
71
+ const _toolCallIntentions = new Map();
72
+ // ---------------------------------------------------------------------------
73
+ function normalizeCopilotSdk(raw, provider) {
74
+ const type = raw['type'];
75
+ if (!type) {
76
+ return null;
77
+ }
78
+ const d = raw['data'] ?? {};
79
+ const toolName = (d['toolName'] ?? d['name'] ?? d['toolId']);
80
+ // Safe-serialise the raw data payload so pixel-office has all available fields.
81
+ const rawData = safeObj(d);
82
+ // Base event: include safe raw data so nothing is lost, then let mapped
83
+ // fields below override / supplement.
84
+ const base = {
85
+ sdk_type: type,
86
+ data: rawData,
87
+ };
88
+ switch (type) {
89
+ case 'tool.execution_start': {
90
+ const callId = safeStr(d['toolCallId']);
91
+ if (callId && toolName) {
92
+ if (_toolCallNames.size > 500) {
93
+ _toolCallNames.clear();
94
+ }
95
+ _toolCallNames.set(callId, toolName);
96
+ }
97
+ // Look up reasoning from the preceding assistant.message toolRequests
98
+ const reasoning = callId ? (_toolCallIntentions.get(callId) ?? null) : null;
99
+ if (callId) {
100
+ _toolCallIntentions.delete(callId);
101
+ }
102
+ return {
103
+ ...base,
104
+ hook_event_name: 'PreToolUse',
105
+ provider,
106
+ tool_name: toolName ?? 'unknown',
107
+ tool_input: safeObj(d['arguments']),
108
+ session_id: callId,
109
+ reasoning,
110
+ };
111
+ }
112
+ case 'tool.execution_complete': {
113
+ const success = d['success'];
114
+ const result = d['result'];
115
+ const err = d['error'];
116
+ const outRaw = success === false
117
+ ? (err?.['message'])
118
+ : (result?.['content'] ?? result?.['detailedContent']);
119
+ // tool name: prefer explicit field, then the start-event cache by toolCallId,
120
+ // then telemetry properties.command (present on failures), else 'unknown'.
121
+ const callId2 = safeStr(d['toolCallId']);
122
+ const telemetry = d['toolTelemetry'];
123
+ const telProps = telemetry?.['properties'];
124
+ const resolvedToolName = toolName
125
+ ?? (callId2 ? _toolCallNames.get(callId2) : undefined)
126
+ ?? safeStr(telProps?.['command'])
127
+ ?? 'unknown';
128
+ if (callId2) {
129
+ _toolCallNames.delete(callId2);
130
+ } // clean up
131
+ // Parse file paths (JSON string in restrictedProperties.filePaths)
132
+ const telRestricted = telemetry?.['restrictedProperties'];
133
+ const fpRaw = telRestricted?.['filePaths'];
134
+ let filePaths = null;
135
+ if (typeof fpRaw === 'string') {
136
+ try {
137
+ const parsed = JSON.parse(fpRaw);
138
+ if (Array.isArray(parsed)) {
139
+ filePaths = parsed.filter((x) => typeof x === 'string');
140
+ }
141
+ }
142
+ catch { /* ignore */ }
143
+ }
144
+ else if (Array.isArray(fpRaw)) {
145
+ filePaths = fpRaw.filter((x) => typeof x === 'string');
146
+ }
147
+ // Lines added/removed from telemetry metrics
148
+ const telMetrics = telemetry?.['metrics'];
149
+ const linesAdded = typeof telMetrics?.['linesAdded'] === 'number' ? telMetrics['linesAdded'] : null;
150
+ const linesRemoved = typeof telMetrics?.['linesRemoved'] === 'number' ? telMetrics['linesRemoved'] : null;
151
+ return {
152
+ ...base,
153
+ hook_event_name: success === false ? 'PostToolUseFailure' : 'PostToolUse',
154
+ provider,
155
+ tool_name: resolvedToolName,
156
+ tool_output: textOut(outRaw),
157
+ success: success ?? true,
158
+ session_id: safeStr(d['toolCallId']),
159
+ model: safeStr(d['model']),
160
+ interaction_id: safeStr(d['interactionId']),
161
+ file_paths: filePaths,
162
+ lines_added: linesAdded,
163
+ lines_removed: linesRemoved,
164
+ };
165
+ }
166
+ case 'subagent.started':
167
+ return {
168
+ ...base,
169
+ hook_event_name: 'SubagentStart',
170
+ provider,
171
+ message: safeStr(d['agentDisplayName'] ?? d['agentName']),
172
+ session_id: safeStr(d['toolCallId']),
173
+ };
174
+ case 'assistant.message': {
175
+ const content = d['content'];
176
+ const tools = d['toolRequests'];
177
+ const outputTokens = typeof d['outputTokens'] === 'number' ? d['outputTokens'] : null;
178
+ const interactionId = safeStr(d['interactionId']);
179
+ if ((!content || content.length === 0) && (!tools || tools.length === 0)) {
180
+ return null;
181
+ }
182
+ // Store intentionSummary per toolCallId so PreToolUse can carry reasoning
183
+ if (tools && tools.length > 0) {
184
+ for (const t of tools) {
185
+ const cid = safeStr(t['toolCallId']);
186
+ const intention = safeStr(t['intentionSummary']);
187
+ if (cid && intention) {
188
+ if (_toolCallIntentions.size > 500) {
189
+ _toolCallIntentions.clear();
190
+ }
191
+ _toolCallIntentions.set(cid, intention);
192
+ }
193
+ }
194
+ }
195
+ // Build message: prefer content text; fall back to intention summaries; then count
196
+ let summary;
197
+ if (content && content.length > 0) {
198
+ summary = content.slice(0, 400);
199
+ }
200
+ else if (tools && tools.length > 0) {
201
+ const intentions = tools
202
+ .map(t => safeStr(t['intentionSummary']))
203
+ .filter((s) => s !== null && s.length > 0)
204
+ .join(' | ');
205
+ summary = intentions || `[${tools.length} tool call(s)]`;
206
+ }
207
+ else {
208
+ summary = '[empty message]';
209
+ }
210
+ return {
211
+ ...base,
212
+ hook_event_name: 'AgentMessage',
213
+ provider,
214
+ message: summary,
215
+ session_id: safeStr(d['messageId'] ?? d['interactionId']),
216
+ interaction_id: interactionId,
217
+ output_tokens: outputTokens,
218
+ };
219
+ }
220
+ case 'session.task_complete':
221
+ return {
222
+ ...base,
223
+ hook_event_name: 'Stop',
224
+ provider,
225
+ message: safeStr(d['summary']),
226
+ };
227
+ case 'user.message':
228
+ return {
229
+ ...base,
230
+ hook_event_name: 'UserPromptSubmit',
231
+ provider,
232
+ message: safeStr(d['content']),
233
+ session_id: safeStr(d['messageId']),
234
+ };
235
+ case 'assistant.turn_start':
236
+ return { ...base, hook_event_name: 'TurnStart', provider, interaction_id: safeStr(d['interactionId']) };
237
+ case 'assistant.turn_end':
238
+ return { ...base, hook_event_name: 'TurnEnd', provider };
239
+ case 'permission.requested':
240
+ return {
241
+ ...base,
242
+ hook_event_name: 'PermissionRequest',
243
+ provider,
244
+ message: safeStr(d['permissionRequest']),
245
+ session_id: safeStr(d['requestId']),
246
+ };
247
+ default:
248
+ return null; // unknown / uninteresting event
249
+ }
250
+ }
251
+ // ---------------------------------------------------------------------------
252
+ // Provider: 'opencode-sdk'
253
+ //
254
+ // Raw event shape: the outer SSE envelope; relevant data in payload.properties.
255
+ // ---------------------------------------------------------------------------
256
+ function normalizeOpencodeSDK(raw, provider) {
257
+ const payload = (raw['payload'] ?? raw);
258
+ const type = payload['type'];
259
+ const props = payload['properties'];
260
+ if (!type) {
261
+ return null;
262
+ }
263
+ const toolName = (props?.['toolID'] ?? props?.['name'] ?? props?.['tool']);
264
+ const sessionId = safeStr(props?.['sessionID'] ?? props?.['session_id']);
265
+ switch (type) {
266
+ case 'tool.execute.before':
267
+ return {
268
+ hook_event_name: 'PreToolUse',
269
+ provider,
270
+ tool_name: toolName ?? 'unknown',
271
+ tool_input: safeObj(props?.['args'] ?? props?.['input']),
272
+ session_id: sessionId,
273
+ };
274
+ case 'tool.execute.after': {
275
+ const rawOut = props?.['output'] ?? props?.['result'] ?? props?.['text'];
276
+ return {
277
+ hook_event_name: 'PostToolUse',
278
+ provider,
279
+ tool_name: toolName ?? 'unknown',
280
+ tool_input: safeObj(props?.['args'] ?? props?.['input']),
281
+ tool_output: textOut(rawOut),
282
+ session_id: sessionId,
283
+ };
284
+ }
285
+ case 'permission.updated': {
286
+ const permTitle = safeStr(props?.['title']);
287
+ return {
288
+ hook_event_name: 'PermissionReplied',
289
+ provider,
290
+ message: permTitle,
291
+ session_id: sessionId,
292
+ };
293
+ }
294
+ case 'session.compacted':
295
+ return {
296
+ hook_event_name: 'PostCompact',
297
+ provider,
298
+ session_id: sessionId,
299
+ };
300
+ case 'session.idle': {
301
+ // Optional _assistantText injected by opencodeSdkProvider for flush
302
+ const assistantText = props?.['_assistantText'];
303
+ if (assistantText) {
304
+ return {
305
+ hook_event_name: 'AgentMessage',
306
+ provider,
307
+ message: assistantText,
308
+ session_id: sessionId,
309
+ };
310
+ }
311
+ return {
312
+ hook_event_name: 'Stop',
313
+ provider,
314
+ session_id: sessionId,
315
+ };
316
+ }
317
+ case 'session.error':
318
+ return {
319
+ hook_event_name: 'StopFailure',
320
+ provider,
321
+ message: safeStr(props?.['error'] ?? props?.['message']),
322
+ session_id: sessionId,
323
+ };
324
+ case 'message.part.delta':
325
+ return null; // streamed text — not forwarded
326
+ default:
327
+ return null;
328
+ }
329
+ }
330
+ // ---------------------------------------------------------------------------
331
+ // Provider: 'claude-cli' / 'copilot-cli'
332
+ //
333
+ // Raw event = the JSON that was already written by the hook script.
334
+ // It already has hook_event_name + provider; we just ensure timestamp + schema.
335
+ // ---------------------------------------------------------------------------
336
+ function normalizeCliHook(raw, provider) {
337
+ const hookName = raw['hook_event_name'] ?? raw['hook'];
338
+ if (!hookName) {
339
+ return null;
340
+ }
341
+ return {
342
+ ...raw,
343
+ hook_event_name: hookName,
344
+ provider: raw['provider'] ?? provider,
345
+ tool_name: raw['tool_name'] ?? raw['tool'],
346
+ session_id: safeStr(raw['session_id'] ?? raw['sessionId']),
347
+ message: safeStr(raw['message'] ?? raw['summary']),
348
+ };
349
+ }
350
+ // ---------------------------------------------------------------------------
351
+ // Public API
352
+ // ---------------------------------------------------------------------------
353
+ /**
354
+ * Normalize a raw provider event into the unified HookEvent schema.
355
+ *
356
+ * @param provider One of: 'copilot-sdk' | 'opencode-sdk' | 'claude-cli' |
357
+ * 'copilot-cli' | or any string for pass-through.
358
+ * @param raw The raw event object from the provider.
359
+ * @returns A HookEvent ready to be JSON-stringified, or null if the
360
+ * event type is not mapped / not interesting.
361
+ */
362
+ function normalizeEvent(provider, raw) {
363
+ let partial = null;
364
+ if (provider === 'copilot-sdk') {
365
+ partial = normalizeCopilotSdk(raw, provider);
366
+ }
367
+ else if (provider === 'opencode-sdk') {
368
+ partial = normalizeOpencodeSDK(raw, provider);
369
+ }
370
+ else {
371
+ // claude-cli, copilot-cli, or any other — treat as already-formatted hook
372
+ partial = normalizeCliHook(raw, provider);
373
+ }
374
+ if (!partial) {
375
+ return null;
376
+ }
377
+ return { ...partial, timestamp: new Date().toISOString() };
378
+ }
379
+ /**
380
+ * Append a normalized event to a JSONL sink file.
381
+ * Creates the directory if it doesn't exist.
382
+ * Silently ignores write errors (non-critical path).
383
+ */
384
+ function appendHookEvent(jsonlPath, provider, raw, fs, path, onError) {
385
+ const ev = normalizeEvent(provider, raw);
386
+ if (!ev) {
387
+ return;
388
+ }
389
+ try {
390
+ fs.mkdirSync(path.dirname(jsonlPath), { recursive: true });
391
+ fs.appendFileSync(jsonlPath, JSON.stringify(ev) + '\n', 'utf8');
392
+ }
393
+ catch (e) {
394
+ onError?.(e);
395
+ }
396
+ }
397
+ //# sourceMappingURL=hookEventNormalizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hookEventNormalizer.js","sourceRoot":"","sources":["../src/hookEventNormalizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Path of the JSONL sink for a given workspace.
3
+ *
4
+ * Per-workspace, NOT homedir. When two VS Code instances run on the same
5
+ * machine, they share `os.homedir()` — so a homedir-scoped sink causes both
6
+ * pollers to see (and forward, attributed to themselves) every hook from
7
+ * every instance. The result was hooks from `tester-1` showing up under
8
+ * `A1` in pixel-office because A1's poller read the line first. Scoping
9
+ * the sink to the workspace avoids the cross-talk entirely.
10
+ */
11
+ export declare function hooksJsonlPath(workspaceRoot: string): string;
12
+ /** Returns a shell command that synthesises a hook event with no stdin payload.
13
+ * Writes the payload to a small temp JSON file in .autodev/scripts/ so that
14
+ * no shell quoting of JSON is required (avoids PowerShell stripping quotes).
15
+ * `workspaceRoot` controls which workspace's JSONL sink the hook writes to. */
16
+ export declare function getManualHookCmd(provider: string, hookEvent: string, workspaceRoot: string, sessionName?: string): string;
17
+ export declare function areClaudeHooksInstalled(workspaceRoot: string): boolean;
18
+ export declare function installClaudeHooks(workspaceRoot: string): void;
19
+ export declare function uninstallClaudeHooks(workspaceRoot: string): void;
20
+ export declare function areCopilotHooksInstalled(workspaceRoot: string): boolean;
21
+ export declare function installCopilotHooks(workspaceRoot: string): void;
22
+ export declare function uninstallCopilotHooks(workspaceRoot: string): void;
23
+ export declare function installHooks(scope: 'project' | 'global', workspaceRoot: string): void;
24
+ export declare function uninstallHooks(scope: 'project' | 'global', workspaceRoot: string): void;
25
+ export declare function areHooksInstalled(scope: 'project' | 'global', workspaceRoot: string): boolean;