@newrelic/preflight 1.39.0 → 1.41.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 (31) hide show
  1. package/README.md +4 -1
  2. package/dist/data/dashboards/ai-coding-assistant-adoption-cost.json +1948 -0
  3. package/dist/deploy/data-paths.d.ts +3 -2
  4. package/dist/deploy/data-paths.d.ts.map +1 -1
  5. package/dist/deploy/data-paths.js +2 -1
  6. package/dist/deploy/data-paths.js.map +1 -1
  7. package/dist/install/cli.d.ts.map +1 -1
  8. package/dist/install/cli.js +302 -4
  9. package/dist/install/cli.js.map +1 -1
  10. package/dist/install/copilot-install-helper.d.ts +84 -0
  11. package/dist/install/copilot-install-helper.d.ts.map +1 -0
  12. package/dist/install/copilot-install-helper.js +385 -0
  13. package/dist/install/copilot-install-helper.js.map +1 -0
  14. package/dist/install/schedule.d.ts +1 -0
  15. package/dist/install/schedule.d.ts.map +1 -1
  16. package/dist/install/schedule.js +9 -6
  17. package/dist/install/schedule.js.map +1 -1
  18. package/dist/install/setup-wizard.d.ts.map +1 -1
  19. package/dist/install/setup-wizard.js +30 -0
  20. package/dist/install/setup-wizard.js.map +1 -1
  21. package/dist/metrics/local-session-aggregator.d.ts +11 -0
  22. package/dist/metrics/local-session-aggregator.d.ts.map +1 -1
  23. package/dist/metrics/local-session-aggregator.js +7 -1
  24. package/dist/metrics/local-session-aggregator.js.map +1 -1
  25. package/dist/platforms/copilot-adapter.d.ts.map +1 -1
  26. package/dist/platforms/copilot-adapter.js +12 -4
  27. package/dist/platforms/copilot-adapter.js.map +1 -1
  28. package/dist/platforms/copilot-sdk-adapter.d.ts.map +1 -1
  29. package/dist/platforms/copilot-sdk-adapter.js +9 -2
  30. package/dist/platforms/copilot-sdk-adapter.js.map +1 -1
  31. package/package.json +1 -1
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Logic for generating and merging GitHub Copilot hook/MCP settings — the
3
+ * Copilot analog of `install-helper.ts`. Covers three separate files:
4
+ *
5
+ * - `~/.copilot/hooks/preflight.json` (or `.github/hooks/preflight.json`) —
6
+ * shared by both the Copilot CLI and VS Code Copilot Chat.
7
+ * - VS Code's own `Code/User/mcp.json` — makes nr_observe_* tools available
8
+ * inside a VS Code Copilot Chat session.
9
+ * - VS Code's own `Code/User/settings.json` — the token-exact-cost debug
10
+ * log setting, and the fix for VS Code reading hook files from multiple
11
+ * locations at once (see `applyHookCollisionFix`).
12
+ *
13
+ * Most functions are pure/side-effect-free, with file I/O happening in the
14
+ * CLI layer (cli.ts). `applyHookCollisionFix` is the one exception that reads
15
+ * settings files directly, mirroring `readAndCheckHooks`'s documented
16
+ * exception in `install-helper.ts`.
17
+ *
18
+ * The hooks file's commands embed the resolved platform tag directly
19
+ * (`NEW_RELIC_AI_PLATFORM=copilot ...`) rather than relying on inherited
20
+ * environment: Copilot's hooks-runner executes these commands with a plain
21
+ * environment that does NOT include any `--env` vars set on a `copilot mcp
22
+ * add` MCP-server registration — verified live against a real New Relic
23
+ * account. Every hook-sourced Copilot event (CLI and VS Code Copilot Chat
24
+ * both, since they share this one file) is tagged simply `'copilot'`.
25
+ */
26
+ export declare const COPILOT_MCP_SERVER_KEY = "newrelic-preflight";
27
+ export declare const AGENT_DEBUG_LOG_SETTING = "github.copilot.chat.agentDebugLog.fileLogging.enabled";
28
+ export interface CopilotHookCommand {
29
+ type: 'command';
30
+ command: string;
31
+ }
32
+ export interface CopilotHooksFile {
33
+ version: 1;
34
+ hooks: {
35
+ PreToolUse: CopilotHookCommand[];
36
+ PostToolUse: CopilotHookCommand[];
37
+ };
38
+ }
39
+ export interface VsCodeMcpServerConfig {
40
+ type: 'stdio';
41
+ command: string;
42
+ args: string[];
43
+ env: Record<string, string>;
44
+ }
45
+ export declare function generateCopilotHooksFile(binPath?: string | null): CopilotHooksFile;
46
+ export declare function generateVsCodeMcpEntry(binPath?: string | null, creds?: {
47
+ licenseKey?: string;
48
+ accountId?: string;
49
+ }): Record<string, VsCodeMcpServerConfig>;
50
+ export declare function generateHookFilesLocationsPatch(claudeSettingsPath: string): Record<string, Record<string, boolean>>;
51
+ export declare function detectCopilotHooksPath(scope?: 'user' | 'project'): string;
52
+ export declare function detectVsCodeMcpPath(): string | null;
53
+ export declare function detectVsCodeSettingsPath(): string | null;
54
+ export declare function mergeCopilotHooksFile(existing: Record<string, unknown>, binPath?: string | null): Record<string, unknown>;
55
+ export declare function removeCopilotHooksFile(existing: Record<string, unknown>): Record<string, unknown>;
56
+ export declare function mergeVsCodeMcpConfig(existing: Record<string, unknown>, binPath?: string | null, creds?: {
57
+ licenseKey?: string;
58
+ accountId?: string;
59
+ }): Record<string, unknown>;
60
+ export declare function removeVsCodeMcpConfig(existing: Record<string, unknown>): Record<string, unknown>;
61
+ export declare function mergeVsCodeSettings(existing: Record<string, unknown>, patch: {
62
+ hookFilesLocationsPatch?: Record<string, boolean>;
63
+ enableAgentDebugLog?: boolean;
64
+ }): Record<string, unknown>;
65
+ export declare function removeVsCodeHookFilesLocationsEntry(existing: Record<string, unknown>, claudeSettingsPath: string): Record<string, unknown>;
66
+ export interface HookCollisionFixResult {
67
+ applied: boolean;
68
+ reason?: 'vscode-settings-not-found' | 'claude-hooks-absent' | 'copilot-hooks-absent' | 'error';
69
+ }
70
+ export declare function applyHookCollisionFix(opts: {
71
+ claudeSettingsPath: string;
72
+ copilotHooksPath: string;
73
+ vsCodeSettingsPath: string | null;
74
+ claudeHooksJustInstalled?: boolean;
75
+ copilotHooksJustInstalled?: boolean;
76
+ /** Forwarded to writeJsonFile's symlink guard — lets tests use a temp dir. */
77
+ additionalAllowedBase?: string;
78
+ }): HookCollisionFixResult;
79
+ export interface SdkExtensionInstallResult {
80
+ copied: boolean;
81
+ reason?: string;
82
+ }
83
+ export declare function installCopilotSdkExtension(): SdkExtensionInstallResult;
84
+ //# sourceMappingURL=copilot-install-helper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copilot-install-helper.d.ts","sourceRoot":"","sources":["../../src/install/copilot-install-helper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,385 @@
1
+ /**
2
+ * Logic for generating and merging GitHub Copilot hook/MCP settings — the
3
+ * Copilot analog of `install-helper.ts`. Covers three separate files:
4
+ *
5
+ * - `~/.copilot/hooks/preflight.json` (or `.github/hooks/preflight.json`) —
6
+ * shared by both the Copilot CLI and VS Code Copilot Chat.
7
+ * - VS Code's own `Code/User/mcp.json` — makes nr_observe_* tools available
8
+ * inside a VS Code Copilot Chat session.
9
+ * - VS Code's own `Code/User/settings.json` — the token-exact-cost debug
10
+ * log setting, and the fix for VS Code reading hook files from multiple
11
+ * locations at once (see `applyHookCollisionFix`).
12
+ *
13
+ * Most functions are pure/side-effect-free, with file I/O happening in the
14
+ * CLI layer (cli.ts). `applyHookCollisionFix` is the one exception that reads
15
+ * settings files directly, mirroring `readAndCheckHooks`'s documented
16
+ * exception in `install-helper.ts`.
17
+ *
18
+ * The hooks file's commands embed the resolved platform tag directly
19
+ * (`NEW_RELIC_AI_PLATFORM=copilot ...`) rather than relying on inherited
20
+ * environment: Copilot's hooks-runner executes these commands with a plain
21
+ * environment that does NOT include any `--env` vars set on a `copilot mcp
22
+ * add` MCP-server registration — verified live against a real New Relic
23
+ * account. Every hook-sourced Copilot event (CLI and VS Code Copilot Chat
24
+ * both, since they share this one file) is tagged simply `'copilot'`.
25
+ */
26
+ import { dirname, join, resolve } from 'node:path';
27
+ import { homedir } from 'node:os';
28
+ import { existsSync, mkdirSync, copyFileSync } from 'node:fs';
29
+ import { z } from 'zod';
30
+ import { readJsonFileStrict, writeJsonFile, errMsg } from './json-utils.js';
31
+ import { entryContainsNrObserve } from './install-helper.js';
32
+ import { resolveDataDir } from '../deploy/data-paths.js';
33
+ import { copilotSdkExtensionInstallPath } from '../hooks/copilot-sdk-extension-health.js';
34
+ // ---------------------------------------------------------------------------
35
+ // Constants
36
+ // ---------------------------------------------------------------------------
37
+ const COLLECTOR_COMMAND = 'preflight-collector';
38
+ const MCP_SERVER_COMMAND = 'preflight';
39
+ export const COPILOT_MCP_SERVER_KEY = 'newrelic-preflight';
40
+ export const AGENT_DEBUG_LOG_SETTING = 'github.copilot.chat.agentDebugLog.fileLogging.enabled';
41
+ const HOOK_FILE_LOCATIONS_SETTING = 'chat.hookFilesLocations';
42
+ // ---------------------------------------------------------------------------
43
+ // Generators
44
+ // ---------------------------------------------------------------------------
45
+ export function generateCopilotHooksFile(binPath) {
46
+ // Quote the path so shells with sh -c don't split on spaces, matching
47
+ // install-helper.ts's generateHookEntries() for Claude.
48
+ const bin = binPath
49
+ ? `"${join(dirname(binPath), COLLECTOR_COMMAND).replace(/\\/g, '\\\\').replace(/"/g, '\\"')}"`
50
+ : COLLECTOR_COMMAND;
51
+ const pre = `NEW_RELIC_AI_PLATFORM=copilot ${bin} pre-tool`;
52
+ const post = `NEW_RELIC_AI_PLATFORM=copilot ${bin} post-tool`;
53
+ // Flat shape per GitHub's own Copilot hooks reference — each PreToolUse/
54
+ // PostToolUse array entry is a command hook directly ({type, command}),
55
+ // unlike Claude Code's settings.json which nests it one level deeper under
56
+ // {matcher, hooks: [...]}. Wrapping it in Claude's shape here previously
57
+ // made Copilot's hooks-runner silently fail to execute these commands at
58
+ // all (confirmed live: zero hook events reached the collector after this
59
+ // was written in the wrong shape, despite the file existing and validating
60
+ // as JSON) — see docs/ADAPTERS.md and the adapters' own
61
+ // getHookInstallInstructions() for the same flat shape.
62
+ return {
63
+ version: 1,
64
+ hooks: {
65
+ PreToolUse: [{ type: 'command', command: pre }],
66
+ PostToolUse: [{ type: 'command', command: post }],
67
+ },
68
+ };
69
+ }
70
+ // MCP_CLIENT=copilot here is deliberately independent of the Copilot CLI's
71
+ // own `copilot mcp add --env MCP_CLIENT=copilot-sdk` registration (see
72
+ // registerCopilotMcpServer in cli.ts) — this env var only affects the MCP
73
+ // *server* process's own platform self-detection (session-level dashboard
74
+ // summaries, CopilotSdkAdapter's tool-name normalization for CLI sessions),
75
+ // not the hooks file's per-event NR tagging, which is controlled entirely by
76
+ // generateCopilotHooksFile's embedded NEW_RELIC_AI_PLATFORM=copilot above.
77
+ export function generateVsCodeMcpEntry(binPath, creds) {
78
+ const command = binPath ? join(dirname(binPath), MCP_SERVER_COMMAND) : MCP_SERVER_COMMAND;
79
+ const env = { MCP_CLIENT: 'copilot' };
80
+ if (creds?.licenseKey)
81
+ env.NEW_RELIC_LICENSE_KEY = creds.licenseKey;
82
+ if (creds?.accountId)
83
+ env.NEW_RELIC_ACCOUNT_ID = creds.accountId;
84
+ return { [COPILOT_MCP_SERVER_KEY]: { type: 'stdio', command, args: ['--stdio'], env } };
85
+ }
86
+ export function generateHookFilesLocationsPatch(claudeSettingsPath) {
87
+ return { [HOOK_FILE_LOCATIONS_SETTING]: { [claudeSettingsPath]: false } };
88
+ }
89
+ // ---------------------------------------------------------------------------
90
+ // Path detection
91
+ // ---------------------------------------------------------------------------
92
+ export function detectCopilotHooksPath(scope = 'user') {
93
+ if (scope === 'user')
94
+ return resolve(homedir(), '.copilot', 'hooks', 'preflight.json');
95
+ return resolve(process.cwd(), '.github', 'hooks', 'preflight.json');
96
+ }
97
+ // Resolves VS Code's "Code/User" user-data directory. macOS/Linux paths are
98
+ // confirmed only by strong analogy to settings.json's documented location
99
+ // (same "user profile folder" language VS Code's own docs use for both
100
+ // files); the Windows path is independently confirmed via a real user
101
+ // report. Callers must still check the resolved directory actually exists
102
+ // on disk before treating VS Code as present — this function only computes
103
+ // where the file *would* be.
104
+ function vsCodeUserDir() {
105
+ if (process.platform === 'darwin') {
106
+ return resolve(homedir(), 'Library', 'Application Support', 'Code', 'User');
107
+ }
108
+ if (process.platform === 'linux') {
109
+ const xdgConfig = process.env.XDG_CONFIG_HOME?.trim();
110
+ const configBase = xdgConfig && xdgConfig.length > 0 ? xdgConfig : resolve(homedir(), '.config');
111
+ return resolve(configBase, 'Code', 'User');
112
+ }
113
+ if (process.platform === 'win32') {
114
+ const appData = process.env.APPDATA?.trim();
115
+ if (!appData)
116
+ return null;
117
+ return resolve(appData, 'Code', 'User');
118
+ }
119
+ return null;
120
+ }
121
+ export function detectVsCodeMcpPath() {
122
+ const dir = vsCodeUserDir();
123
+ return dir ? resolve(dir, 'mcp.json') : null;
124
+ }
125
+ export function detectVsCodeSettingsPath() {
126
+ const dir = vsCodeUserDir();
127
+ return dir ? resolve(dir, 'settings.json') : null;
128
+ }
129
+ // ---------------------------------------------------------------------------
130
+ // Zod schemas — validate existing file shapes before merging
131
+ // ---------------------------------------------------------------------------
132
+ const HooksFieldSchema = z
133
+ .object({
134
+ PreToolUse: z.array(z.unknown()).optional(),
135
+ PostToolUse: z.array(z.unknown()).optional(),
136
+ })
137
+ .passthrough();
138
+ const CopilotHooksSchema = z
139
+ .object({ version: z.number().optional(), hooks: HooksFieldSchema.optional() })
140
+ .passthrough();
141
+ const VsCodeMcpConfigSchema = z
142
+ .object({ servers: z.record(z.string(), z.unknown()).optional() })
143
+ .passthrough();
144
+ // ---------------------------------------------------------------------------
145
+ // mergeCopilotHooksFile / removeCopilotHooksFile
146
+ // ---------------------------------------------------------------------------
147
+ export function mergeCopilotHooksFile(existing, binPath) {
148
+ const parsed = CopilotHooksSchema.safeParse(existing);
149
+ if (!parsed.success) {
150
+ throw new Error(`Existing Copilot hooks file has unexpected shape — fix manually before running install.\n${parsed.error.message}`);
151
+ }
152
+ const result = { ...existing, version: 1 };
153
+ const hookEntries = generateCopilotHooksFile(binPath).hooks;
154
+ const hooks = typeof result.hooks === 'object' && result.hooks !== null
155
+ ? { ...result.hooks }
156
+ : {};
157
+ for (const hookType of ['PreToolUse', 'PostToolUse']) {
158
+ const existingArr = Array.isArray(hooks[hookType]) ? [...hooks[hookType]] : [];
159
+ if (binPath !== null && binPath !== undefined) {
160
+ // Resolved path available: remove stale entry and re-add with the
161
+ // current absolute path so re-install always upgrades a bare-name or
162
+ // outdated entry (matches mergeSettings's behavior for Claude).
163
+ const withoutNr = existingArr.filter((e) => !entryContainsNrObserve(e));
164
+ hooks[hookType] = [...withoutNr, ...hookEntries[hookType]];
165
+ }
166
+ else {
167
+ // No path resolved: leave any existing entry untouched so a working
168
+ // absolute-path hook is not downgraded to a bare name.
169
+ if (!existingArr.some(entryContainsNrObserve)) {
170
+ existingArr.push(...hookEntries[hookType]);
171
+ }
172
+ hooks[hookType] = existingArr;
173
+ }
174
+ }
175
+ result.hooks = hooks;
176
+ return result;
177
+ }
178
+ export function removeCopilotHooksFile(existing) {
179
+ const result = { ...existing };
180
+ if (typeof result.hooks === 'object' && result.hooks !== null) {
181
+ const hooks = { ...result.hooks };
182
+ for (const hookType of ['PreToolUse', 'PostToolUse']) {
183
+ if (Array.isArray(hooks[hookType])) {
184
+ const filtered = hooks[hookType].filter((e) => !entryContainsNrObserve(e));
185
+ if (filtered.length > 0) {
186
+ hooks[hookType] = filtered;
187
+ }
188
+ else {
189
+ delete hooks[hookType];
190
+ }
191
+ }
192
+ }
193
+ if (Object.keys(hooks).length > 0) {
194
+ result.hooks = hooks;
195
+ }
196
+ else {
197
+ delete result.hooks;
198
+ }
199
+ }
200
+ return result;
201
+ }
202
+ // ---------------------------------------------------------------------------
203
+ // mergeVsCodeMcpConfig / removeVsCodeMcpConfig — operates on VS Code's own
204
+ // Code/User/mcp.json (top-level key is `servers`, not `mcpServers` — a real
205
+ // shape difference from Claude's .mcp.json).
206
+ // ---------------------------------------------------------------------------
207
+ export function mergeVsCodeMcpConfig(existing, binPath, creds) {
208
+ const parsed = VsCodeMcpConfigSchema.safeParse(existing);
209
+ if (!parsed.success) {
210
+ throw new Error(`Existing VS Code MCP config file has unexpected shape — fix manually before running install.\n${parsed.error.message}`);
211
+ }
212
+ const result = { ...existing };
213
+ const servers = typeof result.servers === 'object' && result.servers !== null
214
+ ? { ...result.servers }
215
+ : {};
216
+ if (binPath !== null && binPath !== undefined) {
217
+ const newEntry = generateVsCodeMcpEntry(binPath, creds);
218
+ const existingEntry = typeof servers[COPILOT_MCP_SERVER_KEY] === 'object' &&
219
+ servers[COPILOT_MCP_SERVER_KEY] !== null
220
+ ? servers[COPILOT_MCP_SERVER_KEY]
221
+ : {};
222
+ servers[COPILOT_MCP_SERVER_KEY] = { ...existingEntry, ...newEntry[COPILOT_MCP_SERVER_KEY] };
223
+ }
224
+ else if (!(COPILOT_MCP_SERVER_KEY in servers)) {
225
+ servers[COPILOT_MCP_SERVER_KEY] = generateVsCodeMcpEntry(null, creds)[COPILOT_MCP_SERVER_KEY];
226
+ }
227
+ result.servers = servers;
228
+ return result;
229
+ }
230
+ export function removeVsCodeMcpConfig(existing) {
231
+ const result = { ...existing };
232
+ if (typeof result.servers === 'object' && result.servers !== null) {
233
+ const servers = { ...result.servers };
234
+ delete servers[COPILOT_MCP_SERVER_KEY];
235
+ if (Object.keys(servers).length > 0) {
236
+ result.servers = servers;
237
+ }
238
+ else {
239
+ delete result.servers;
240
+ }
241
+ }
242
+ return result;
243
+ }
244
+ // ---------------------------------------------------------------------------
245
+ // mergeVsCodeSettings / removeVsCodeHookFilesLocationsEntry — operates on VS
246
+ // Code's own Code/User/settings.json. No Zod schema here: settings.json
247
+ // legitimately holds arbitrary keys of arbitrary shape from many extensions,
248
+ // so there's no meaningful sub-shape to validate beyond "it's an object",
249
+ // which readJsonFileStrict's contract already guarantees.
250
+ // ---------------------------------------------------------------------------
251
+ export function mergeVsCodeSettings(existing, patch) {
252
+ const result = { ...existing };
253
+ if (patch.hookFilesLocationsPatch) {
254
+ const existingLocations = typeof result[HOOK_FILE_LOCATIONS_SETTING] === 'object' &&
255
+ result[HOOK_FILE_LOCATIONS_SETTING] !== null
256
+ ? result[HOOK_FILE_LOCATIONS_SETTING]
257
+ : {};
258
+ result[HOOK_FILE_LOCATIONS_SETTING] = {
259
+ ...existingLocations,
260
+ ...patch.hookFilesLocationsPatch,
261
+ };
262
+ }
263
+ if (patch.enableAgentDebugLog) {
264
+ result[AGENT_DEBUG_LOG_SETTING] = true;
265
+ }
266
+ return result;
267
+ }
268
+ // Uninstall only removes the specific claudeSettingsPath entry this
269
+ // installer added, and only if it's still exactly `false` (our fix) — never
270
+ // the whole chat.hookFilesLocations object, in case the user has unrelated
271
+ // entries there. The debug-log setting is deliberately left alone on
272
+ // uninstall — it's a user-facing preference, not exclusively ours.
273
+ export function removeVsCodeHookFilesLocationsEntry(existing, claudeSettingsPath) {
274
+ const result = { ...existing };
275
+ if (typeof result[HOOK_FILE_LOCATIONS_SETTING] === 'object' &&
276
+ result[HOOK_FILE_LOCATIONS_SETTING] !== null) {
277
+ const locations = { ...result[HOOK_FILE_LOCATIONS_SETTING] };
278
+ if (locations[claudeSettingsPath] === false) {
279
+ delete locations[claudeSettingsPath];
280
+ }
281
+ if (Object.keys(locations).length > 0) {
282
+ result[HOOK_FILE_LOCATIONS_SETTING] = locations;
283
+ }
284
+ else {
285
+ delete result[HOOK_FILE_LOCATIONS_SETTING];
286
+ }
287
+ }
288
+ return result;
289
+ }
290
+ /**
291
+ * VS Code Copilot Chat reads hook files from both ~/.claude/settings.json
292
+ * (Claude-format, read by default via chat.hookFilesLocations) and the
293
+ * Copilot hooks file at the same time, with no dedup — verified live, every
294
+ * tool call double-executes ("Executing 2 hook(s)") whenever both are
295
+ * present, silently doubling toolCallCount and estimated cost. This patches
296
+ * VS Code's settings.json to disable the Claude-format location so only the
297
+ * Copilot hooks file fires.
298
+ *
299
+ * Called from BOTH the Claude-hooks install flow and the Copilot-hooks
300
+ * install flow so the fix applies correctly regardless of install order —
301
+ * pass `claudeHooksJustInstalled`/`copilotHooksJustInstalled` when the
302
+ * caller just wrote that file this run (so this function doesn't need to
303
+ * re-read a file its own caller already knows the state of).
304
+ */
305
+ /**
306
+ * Whether a hooks file has NR-pattern PreToolUse AND PostToolUse entries —
307
+ * the two event types VS Code actually double-fires when it reads hooks from
308
+ * both a Claude-format file and a Copilot-format file at once. Deliberately
309
+ * narrower than install-helper.ts's own `areHooksInstalled` (which also
310
+ * requires PermissionRequest/PermissionDenied, added for Claude's own
311
+ * upgrade-detection): Copilot's hooks file never defines those two event
312
+ * types at all (see generateCopilotHooksFile), so reusing that broader check
313
+ * here would make this fix permanently unable to detect Copilot hooks as
314
+ * present, and would also stop detecting older/partial Claude installs that
315
+ * still double-fire.
316
+ */
317
+ function hasNrToolUseHooks(content) {
318
+ const hooks = content.hooks;
319
+ if (typeof hooks !== 'object' || hooks === null)
320
+ return false;
321
+ const h = hooks;
322
+ return ['PreToolUse', 'PostToolUse'].every((hookType) => {
323
+ const arr = h[hookType];
324
+ return Array.isArray(arr) && arr.some(entryContainsNrObserve);
325
+ });
326
+ }
327
+ export function applyHookCollisionFix(opts) {
328
+ if (!opts.vsCodeSettingsPath || !existsSync(dirname(opts.vsCodeSettingsPath))) {
329
+ return { applied: false, reason: 'vscode-settings-not-found' };
330
+ }
331
+ const claudeHooksPresent = opts.claudeHooksJustInstalled ??
332
+ (() => {
333
+ try {
334
+ return hasNrToolUseHooks(readJsonFileStrict(opts.claudeSettingsPath));
335
+ }
336
+ catch {
337
+ return false;
338
+ }
339
+ })();
340
+ if (!claudeHooksPresent)
341
+ return { applied: false, reason: 'claude-hooks-absent' };
342
+ const copilotHooksPresent = opts.copilotHooksJustInstalled ??
343
+ (() => {
344
+ try {
345
+ return hasNrToolUseHooks(readJsonFileStrict(opts.copilotHooksPath));
346
+ }
347
+ catch {
348
+ return false;
349
+ }
350
+ })();
351
+ if (!copilotHooksPresent)
352
+ return { applied: false, reason: 'copilot-hooks-absent' };
353
+ try {
354
+ const existing = readJsonFileStrict(opts.vsCodeSettingsPath);
355
+ const merged = mergeVsCodeSettings(existing, {
356
+ hookFilesLocationsPatch: generateHookFilesLocationsPatch(opts.claudeSettingsPath)[HOOK_FILE_LOCATIONS_SETTING],
357
+ });
358
+ writeJsonFile(opts.vsCodeSettingsPath, merged, opts.additionalAllowedBase);
359
+ return { applied: true };
360
+ }
361
+ catch {
362
+ return { applied: false, reason: 'error' };
363
+ }
364
+ }
365
+ export function installCopilotSdkExtension() {
366
+ const destPath = copilotSdkExtensionInstallPath();
367
+ if (existsSync(destPath))
368
+ return { copied: false, reason: 'exists' };
369
+ let sourceDir;
370
+ try {
371
+ sourceDir = resolveDataDir('copilot-sdk-extension');
372
+ }
373
+ catch (err) {
374
+ return { copied: false, reason: errMsg(err) };
375
+ }
376
+ try {
377
+ mkdirSync(dirname(destPath), { recursive: true, mode: 0o700 });
378
+ copyFileSync(resolve(sourceDir, 'extension.mjs'), destPath);
379
+ return { copied: true };
380
+ }
381
+ catch (err) {
382
+ return { copied: false, reason: errMsg(err) };
383
+ }
384
+ }
385
+ //# sourceMappingURL=copilot-install-helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copilot-install-helper.js","sourceRoot":"","sources":["../../src/install/copilot-install-helper.ts"],"names":[],"mappings":"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"}
@@ -28,5 +28,6 @@ export interface DashboardDaemonStatus {
28
28
  export declare function installDashboardDaemon(binaryPath: string): void;
29
29
  export declare function removeDashboardDaemon(): boolean;
30
30
  export declare function getDashboardDaemonStatus(): DashboardDaemonStatus;
31
+ export declare function resolveNamedBinaryOnPath(name: string): string | null;
31
32
  export declare function resolveBinaryPath(): string | null;
32
33
  //# sourceMappingURL=schedule.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schedule.d.ts","sourceRoot":"","sources":["../../src/install/schedule.ts"],"names":[],"mappings":"AA4BA,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAO7C;AAKD,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAUD,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,0FAA0F;IAC1F,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;CACpC;AAMD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,2BAA2B,CA0BjF;AAcD,wBAAgB,cAAc,IAAI,MAAM,CAiBvC;AAoCD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAetF;AAED,wBAAgB,cAAc,IAAI,OAAO,CAuBxC;AAED,wBAAgB,iBAAiB,IAAI,cAAc,CAoBlD;AAiCD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,uHAAuH;IACvH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAe/D;AAED,wBAAgB,qBAAqB,IAAI,OAAO,CAuB/C;AAED,wBAAgB,wBAAwB,IAAI,qBAAqB,CAkBhE;AAID,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,IAAI,CAsBjD"}
1
+ {"version":3,"file":"schedule.d.ts","sourceRoot":"","sources":["../../src/install/schedule.ts"],"names":[],"mappings":"AA4BA,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAO7C;AAKD,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAUD,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,0FAA0F;IAC1F,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;CACpC;AAMD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,2BAA2B,CA0BjF;AAcD,wBAAgB,cAAc,IAAI,MAAM,CAiBvC;AAoCD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAetF;AAED,wBAAgB,cAAc,IAAI,OAAO,CAuBxC;AAED,wBAAgB,iBAAiB,IAAI,cAAc,CAoBlD;AAiCD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,uHAAuH;IACvH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAe/D;AAED,wBAAgB,qBAAqB,IAAI,OAAO,CAuB/C;AAED,wBAAgB,wBAAwB,IAAI,qBAAqB,CAkBhE;AAQD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAkBpE;AAED,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,IAAI,CAEjD"}
@@ -290,17 +290,17 @@ export function getDashboardDaemonStatus() {
290
290
  }
291
291
  }
292
292
  const WINDOWS_BINARY_SUFFIXES = ['.cmd', '.ps1', ''];
293
- export function resolveBinaryPath() {
294
- // Walk PATH directly — avoids hardcoding the `which` location and is safe
295
- // for Nix/Homebrew installs where binaries live outside /usr/bin.
296
- // PATH is ':'-delimited on POSIX and ';'-delimited on Windows (whose
297
- // entries themselves contain drive-letter colons, e.g. "C:\foo").
293
+ // Walk PATH directly — avoids hardcoding the `which` location and is safe
294
+ // for Nix/Homebrew installs where binaries live outside /usr/bin.
295
+ // PATH is ':'-delimited on POSIX and ';'-delimited on Windows (whose
296
+ // entries themselves contain drive-letter colons, e.g. "C:\foo").
297
+ export function resolveNamedBinaryOnPath(name) {
298
298
  const delimiter = process.platform === 'win32' ? ';' : ':';
299
299
  const pathDirs = (process.env.PATH ?? '').split(delimiter).filter(Boolean);
300
300
  const suffixes = process.platform === 'win32' ? WINDOWS_BINARY_SUFFIXES : [''];
301
301
  for (const dir of pathDirs) {
302
302
  for (const suffix of suffixes) {
303
- const candidate = join(dir, `preflight${suffix}`);
303
+ const candidate = join(dir, `${name}${suffix}`);
304
304
  try {
305
305
  if (statSync(candidate).isFile()) {
306
306
  accessSync(candidate, constants.X_OK);
@@ -314,4 +314,7 @@ export function resolveBinaryPath() {
314
314
  }
315
315
  return null;
316
316
  }
317
+ export function resolveBinaryPath() {
318
+ return resolveNamedBinaryOnPath('preflight');
319
+ }
317
320
  //# sourceMappingURL=schedule.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schedule.js","sourceRoot":"","sources":["../../src/install/schedule.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schedule.js","sourceRoot":"","sources":["../../src/install/schedule.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"setup-wizard.d.ts","sourceRoot":"","sources":["../../src/install/setup-wizard.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAA0B,gBAAgB,EAAwB,MAAM,cAAc,CAAC;AAC9F,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAkBzC,UAAU,YAAY;IACpB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxC;AAkBD,MAAM,WAAW,4BAA4B;IAC3C,0DAA0D;IAC1D,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,2EAA2E;IAC3E,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,wCAAwC;IACxC,QAAQ,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC;CAChC;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,4BAA4B,GACjC,2BAA2B,CA6B7B;AA2CD,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC;AAE9B,wBAAgB,WAAW,CACzB,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC,EACnD,MAAM,EAAE;IACN,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,cAAc,EAAE,OAAO,CAAC;IACxB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B,GACA,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC,CAkB3C;AAcD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAOnF;AAED,wBAAsB,cAAc,CAAC,IAAI,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA2iBpF"}
1
+ {"version":3,"file":"setup-wizard.d.ts","sourceRoot":"","sources":["../../src/install/setup-wizard.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAA0B,gBAAgB,EAAwB,MAAM,cAAc,CAAC;AAC9F,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAkBzC,UAAU,YAAY;IACpB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxC;AAkBD,MAAM,WAAW,4BAA4B;IAC3C,0DAA0D;IAC1D,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,2EAA2E;IAC3E,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,wCAAwC;IACxC,QAAQ,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC;CAChC;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,4BAA4B,GACjC,2BAA2B,CA6B7B;AA2CD,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC;AAE9B,wBAAgB,WAAW,CACzB,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC,EACnD,MAAM,EAAE;IACN,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,cAAc,EAAE,OAAO,CAAC;IACxB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B,GACA,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC,CAkB3C;AAcD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAOnF;AAED,wBAAsB,cAAc,CAAC,IAAI,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA6kBpF"}
@@ -495,6 +495,36 @@ export async function runSetupWizard(opts = {}) {
495
495
  }
496
496
  }
497
497
  }
498
+ // Step 6c: Copilot hook install (GitHub Copilot CLI + VS Code Copilot Chat)
499
+ // Always asked, unconditionally — mirrors the Claude Code hooks question
500
+ // above exactly. Independent of mode, matching that question's own
501
+ // independence from mode: hook-based tool-call capture works the same
502
+ // regardless of where telemetry ships.
503
+ //
504
+ // Unlike the Claude step above, credentials ARE passed here even though
505
+ // config.json already has them — the Copilot CLI's own `copilot mcp add`
506
+ // bakes the literal license key/account ID into Copilot's own MCP
507
+ // config, which is separate from and doesn't read our config.json.
508
+ const installCopilotHooks = (await rl.question('\nInstall GitHub Copilot hooks now? Configures both the Copilot CLI and VS Code Copilot Chat [Y/n]: '))
509
+ .trim()
510
+ .toLowerCase();
511
+ if (installCopilotHooks !== 'n' && installCopilotHooks !== 'no') {
512
+ print('\nRunning Copilot installer...');
513
+ const copilotInstallArgs = ['install', '--copilot'];
514
+ if (mode !== 'local' && licenseKey && accountId) {
515
+ copilotInstallArgs.push('--license-key', licenseKey, '--account-id', accountId);
516
+ }
517
+ try {
518
+ await runInstallCli(copilotInstallArgs);
519
+ print('Copilot hooks installed.');
520
+ }
521
+ catch {
522
+ // handleCopilotInstall already printed the specific error. Set exit
523
+ // code and continue — daemon, schedule, and dashboard steps do not
524
+ // depend on Copilot hook installation.
525
+ process.exitCode = 1;
526
+ }
527
+ }
498
528
  // Step 6b: Always-on background dashboard daemon
499
529
  if ((mode === 'local' || mode === 'both') && process.platform === 'darwin') {
500
530
  const binaryPath = resolveBinaryPath();