@newrelic/preflight 1.67.3 → 1.69.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 (183) hide show
  1. package/README.md +2 -2
  2. package/dist/config.d.ts +75 -2
  3. package/dist/config.d.ts.map +1 -1
  4. package/dist/config.js +201 -22
  5. package/dist/config.js.map +1 -1
  6. package/dist/dashboard/routes/api-handler.d.ts +1 -0
  7. package/dist/dashboard/routes/api-handler.d.ts.map +1 -1
  8. package/dist/dashboard/routes/api-handler.js +120 -94
  9. package/dist/dashboard/routes/api-handler.js.map +1 -1
  10. package/dist/data/dashboards/ai-coding-assistant-adoption-cost.json +291 -1
  11. package/dist/data/dashboards/ai-coding-assistant-team-view.json +6 -6
  12. package/dist/hooks/billed-turn-ledger.d.ts +46 -0
  13. package/dist/hooks/billed-turn-ledger.d.ts.map +1 -0
  14. package/dist/hooks/billed-turn-ledger.js +274 -0
  15. package/dist/hooks/billed-turn-ledger.js.map +1 -0
  16. package/dist/hooks/collector-script.d.ts.map +1 -1
  17. package/dist/hooks/collector-script.js +5 -1
  18. package/dist/hooks/collector-script.js.map +1 -1
  19. package/dist/hooks/event-processor.d.ts +3 -7
  20. package/dist/hooks/event-processor.d.ts.map +1 -1
  21. package/dist/hooks/event-processor.js +21 -7
  22. package/dist/hooks/event-processor.js.map +1 -1
  23. package/dist/hooks/parent-transcript-watcher.d.ts +6 -5
  24. package/dist/hooks/parent-transcript-watcher.d.ts.map +1 -1
  25. package/dist/hooks/parent-transcript-watcher.js +64 -62
  26. package/dist/hooks/parent-transcript-watcher.js.map +1 -1
  27. package/dist/hooks/throttled-warning.d.ts +16 -0
  28. package/dist/hooks/throttled-warning.d.ts.map +1 -0
  29. package/dist/hooks/throttled-warning.js +32 -0
  30. package/dist/hooks/throttled-warning.js.map +1 -0
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +90 -83
  33. package/dist/index.js.map +1 -1
  34. package/dist/install/cli.d.ts.map +1 -1
  35. package/dist/install/cli.js +69 -1
  36. package/dist/install/cli.js.map +1 -1
  37. package/dist/install/dashboard-health.js +1 -1
  38. package/dist/install/dashboard-health.js.map +1 -1
  39. package/dist/install/diagnostics.d.ts +2 -0
  40. package/dist/install/diagnostics.d.ts.map +1 -1
  41. package/dist/install/diagnostics.js +132 -28
  42. package/dist/install/diagnostics.js.map +1 -1
  43. package/dist/install/headless-install.d.ts +26 -0
  44. package/dist/install/headless-install.d.ts.map +1 -1
  45. package/dist/install/headless-install.js +44 -1
  46. package/dist/install/headless-install.js.map +1 -1
  47. package/dist/install/install-helper.d.ts +2 -0
  48. package/dist/install/install-helper.d.ts.map +1 -1
  49. package/dist/install/install-helper.js +5 -0
  50. package/dist/install/install-helper.js.map +1 -1
  51. package/dist/install/keychain.d.ts +18 -0
  52. package/dist/install/keychain.d.ts.map +1 -0
  53. package/dist/install/keychain.js +60 -0
  54. package/dist/install/keychain.js.map +1 -0
  55. package/dist/install/kiro-install-helper.d.ts +27 -0
  56. package/dist/install/kiro-install-helper.d.ts.map +1 -0
  57. package/dist/install/kiro-install-helper.js +53 -0
  58. package/dist/install/kiro-install-helper.js.map +1 -0
  59. package/dist/install/setup-wizard.d.ts +4 -0
  60. package/dist/install/setup-wizard.d.ts.map +1 -1
  61. package/dist/install/setup-wizard.js +94 -9
  62. package/dist/install/setup-wizard.js.map +1 -1
  63. package/dist/lib/child-env.d.ts +11 -0
  64. package/dist/lib/child-env.d.ts.map +1 -0
  65. package/dist/lib/child-env.js +35 -0
  66. package/dist/lib/child-env.js.map +1 -0
  67. package/dist/lib/git-remote.d.ts +7 -0
  68. package/dist/lib/git-remote.d.ts.map +1 -1
  69. package/dist/lib/git-remote.js +13 -0
  70. package/dist/lib/git-remote.js.map +1 -1
  71. package/dist/metrics/cost-tracker-seed.d.ts +16 -0
  72. package/dist/metrics/cost-tracker-seed.d.ts.map +1 -1
  73. package/dist/metrics/cost-tracker-seed.js +42 -7
  74. package/dist/metrics/cost-tracker-seed.js.map +1 -1
  75. package/dist/metrics/cost-tracker.d.ts +11 -3
  76. package/dist/metrics/cost-tracker.d.ts.map +1 -1
  77. package/dist/metrics/cost-tracker.js +4 -1
  78. package/dist/metrics/cost-tracker.js.map +1 -1
  79. package/dist/metrics/git-activity-recorder.d.ts +3 -3
  80. package/dist/metrics/git-activity-recorder.d.ts.map +1 -1
  81. package/dist/metrics/git-activity-recorder.js +3 -3
  82. package/dist/metrics/git-activity-recorder.js.map +1 -1
  83. package/dist/metrics/git-workspace-identity.d.ts +6 -1
  84. package/dist/metrics/git-workspace-identity.d.ts.map +1 -1
  85. package/dist/metrics/git-workspace-identity.js +56 -32
  86. package/dist/metrics/git-workspace-identity.js.map +1 -1
  87. package/dist/metrics/git-workspace-reporter.d.ts +4 -3
  88. package/dist/metrics/git-workspace-reporter.d.ts.map +1 -1
  89. package/dist/metrics/git-workspace-reporter.js +4 -3
  90. package/dist/metrics/git-workspace-reporter.js.map +1 -1
  91. package/dist/metrics/pricing-init.d.ts +13 -0
  92. package/dist/metrics/pricing-init.d.ts.map +1 -0
  93. package/dist/metrics/pricing-init.js +19 -0
  94. package/dist/metrics/pricing-init.js.map +1 -0
  95. package/dist/metrics/skill-activation-tracker.d.ts +27 -0
  96. package/dist/metrics/skill-activation-tracker.d.ts.map +1 -0
  97. package/dist/metrics/skill-activation-tracker.js +92 -0
  98. package/dist/metrics/skill-activation-tracker.js.map +1 -0
  99. package/dist/metrics/turn-cost-attributor.d.ts +34 -16
  100. package/dist/metrics/turn-cost-attributor.d.ts.map +1 -1
  101. package/dist/metrics/turn-cost-attributor.js +95 -60
  102. package/dist/metrics/turn-cost-attributor.js.map +1 -1
  103. package/dist/proxy/proxy-manager.d.ts +3 -0
  104. package/dist/proxy/proxy-manager.d.ts.map +1 -1
  105. package/dist/proxy/proxy-manager.js +43 -3
  106. package/dist/proxy/proxy-manager.js.map +1 -1
  107. package/dist/proxy/types.d.ts +7 -0
  108. package/dist/proxy/types.d.ts.map +1 -1
  109. package/dist/proxy/types.js.map +1 -1
  110. package/dist/proxy/upstream-http.d.ts.map +1 -1
  111. package/dist/proxy/upstream-http.js +44 -1
  112. package/dist/proxy/upstream-http.js.map +1 -1
  113. package/dist/proxy/upstream-stdio.d.ts +0 -1
  114. package/dist/proxy/upstream-stdio.d.ts.map +1 -1
  115. package/dist/proxy/upstream-stdio.js +2 -26
  116. package/dist/proxy/upstream-stdio.js.map +1 -1
  117. package/dist/redaction-patterns.d.ts.map +1 -1
  118. package/dist/redaction-patterns.js +1 -0
  119. package/dist/redaction-patterns.js.map +1 -1
  120. package/dist/secret-command.d.ts +59 -0
  121. package/dist/secret-command.d.ts.map +1 -0
  122. package/dist/secret-command.js +123 -0
  123. package/dist/secret-command.js.map +1 -0
  124. package/dist/security/audit-trail.d.ts +7 -1
  125. package/dist/security/audit-trail.d.ts.map +1 -1
  126. package/dist/security/audit-trail.js +24 -0
  127. package/dist/security/audit-trail.js.map +1 -1
  128. package/dist/server.d.ts.map +1 -1
  129. package/dist/server.js +9 -4
  130. package/dist/server.js.map +1 -1
  131. package/dist/shared/pricing-data.d.ts.map +1 -1
  132. package/dist/shared/pricing-data.js +223 -32
  133. package/dist/shared/pricing-data.js.map +1 -1
  134. package/dist/shared/pricing.d.ts +25 -3
  135. package/dist/shared/pricing.d.ts.map +1 -1
  136. package/dist/shared/pricing.js +46 -9
  137. package/dist/shared/pricing.js.map +1 -1
  138. package/dist/shared/tokens.d.ts +16 -0
  139. package/dist/shared/tokens.d.ts.map +1 -1
  140. package/dist/shared/tokens.js +18 -0
  141. package/dist/shared/tokens.js.map +1 -1
  142. package/dist/shared/transport/otlp-shared.d.ts.map +1 -1
  143. package/dist/shared/transport/otlp-shared.js +7 -14
  144. package/dist/shared/transport/otlp-shared.js.map +1 -1
  145. package/dist/storage/local-store.d.ts +6 -4
  146. package/dist/storage/local-store.d.ts.map +1 -1
  147. package/dist/storage/local-store.js +21 -7
  148. package/dist/storage/local-store.js.map +1 -1
  149. package/dist/storage/session-store.d.ts +24 -1
  150. package/dist/storage/session-store.d.ts.map +1 -1
  151. package/dist/storage/session-store.js +38 -7
  152. package/dist/storage/session-store.js.map +1 -1
  153. package/dist/storage/types.d.ts +13 -0
  154. package/dist/storage/types.d.ts.map +1 -1
  155. package/dist/storage/types.js.map +1 -1
  156. package/dist/tools/cross-session-tools.d.ts +7 -1
  157. package/dist/tools/cross-session-tools.d.ts.map +1 -1
  158. package/dist/tools/cross-session-tools.js +47 -14
  159. package/dist/tools/cross-session-tools.js.map +1 -1
  160. package/dist/tools/session-stats.d.ts +6 -0
  161. package/dist/tools/session-stats.d.ts.map +1 -1
  162. package/dist/tools/session-stats.js +3 -2
  163. package/dist/tools/session-stats.js.map +1 -1
  164. package/dist/transport/audit-record-sender.d.ts +20 -0
  165. package/dist/transport/audit-record-sender.d.ts.map +1 -0
  166. package/dist/transport/audit-record-sender.js +54 -0
  167. package/dist/transport/audit-record-sender.js.map +1 -0
  168. package/dist/transport/nr-ingest.d.ts +7 -0
  169. package/dist/transport/nr-ingest.d.ts.map +1 -1
  170. package/dist/transport/nr-ingest.js +64 -27
  171. package/dist/transport/nr-ingest.js.map +1 -1
  172. package/dist/transport/tier-types.d.ts +11 -1
  173. package/dist/transport/tier-types.d.ts.map +1 -1
  174. package/dist/transport/tier-types.js +28 -6
  175. package/dist/transport/tier-types.js.map +1 -1
  176. package/dist/transport/unforwarded-session-monitor.d.ts +12 -6
  177. package/dist/transport/unforwarded-session-monitor.d.ts.map +1 -1
  178. package/dist/transport/unforwarded-session-monitor.js +24 -5
  179. package/dist/transport/unforwarded-session-monitor.js.map +1 -1
  180. package/dist/web/assets/{index-lvdXUntr.js → index-U9DPZ-Tb.js} +3 -3
  181. package/dist/web/index.html +1 -1
  182. package/examples/local-alert-rules.json +28 -0
  183. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"headless-install.d.ts","sourceRoot":"","sources":["../../src/install/headless-install.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,qBAAqB,GAC7B;IAAE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GAC/D;IAAE,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;IAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GACvE;IAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3D;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,qBAAqB,CAAC,EAAE,MAAM,CAAA;CAAO,GAC3E,qBAAqB,CAkBvB"}
1
+ {"version":3,"file":"headless-install.d.ts","sourceRoot":"","sources":["../../src/install/headless-install.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAYjF,MAAM,MAAM,qBAAqB,GAC7B;IAAE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GAC/D;IAAE,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;IAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GACvE;IAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACzD;IAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3D,eAAO,MAAM,iCAAiC,2QAC0N,CAAC;AAEzQ;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,GAAE;IACP,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,4BAA4B,CAAC,EAAE,MAAM,CAAC;CAClC,GACL,qBAAqB,CA0BvB;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE;IAC/C,oBAAoB,EAAE,OAAO,CAAC;IAC9B,aAAa,EAAE,MAAM,iBAAiB,GAAG,SAAS,CAAC;IACnD,2EAA2E;IAC3E,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;IAC9C,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,4BAA4B,CAAC,EAAE,MAAM,CAAC;CACvC,GAAG,MAAM,qBAAqB,CAmB9B"}
@@ -1,18 +1,33 @@
1
1
  import { dirname } from 'node:path';
2
- import { areHooksInstalled, mergeSettings, detectSettingsPath } from './install-helper.js';
2
+ import { createLogger } from '../shared/index.js';
3
+ import { areHooksInstalled, mergeSettings, detectSettingsPath, readAndCheckHooks, } from './install-helper.js';
3
4
  import { readJsonFileStrict, writeJsonFile, errMsg } from './json-utils.js';
4
5
  import { resolveBinaryPath } from './schedule.js';
6
+ const logger = createLogger('headless-install');
7
+ export const HEADLESS_INSTALL_DISABLED_MESSAGE = 'nr_observe_install_hooks is disabled, so no changes were made. Run `preflight install` in a terminal to install the hooks, or set "allowHeadlessInstall": true in your Preflight config (or NEW_RELIC_AI_ALLOW_HEADLESS_INSTALL=true) to let this tool install them.';
5
8
  /**
6
9
  * Installs the preflight hook entries (PreToolUse, PostToolUse,
7
10
  * PermissionRequest, PermissionDenied) into ~/.claude/settings.json (or
8
11
  * the project-level equivalent) without a TTY. Does NOT touch ~/.mcp.json —
9
12
  * Smithery handles MCP server registration separately.
10
13
  *
14
+ * Refuses unless `allowHeadlessInstall` is true. Any connected MCP client can
15
+ * call the tool, so rewriting the user's agent hook config is opt-in. A refusal
16
+ * reads and writes nothing. Hooks already present at project scope count as
17
+ * installed, since Claude Code would run a second user-scope set as well.
18
+ *
11
19
  * Returns a typed result so MCP tool callers can format a user-facing message.
12
20
  */
13
21
  export function installHooksHeadless(options = {}) {
22
+ if (options.allowHeadlessInstall !== true) {
23
+ return { status: 'disabled', message: HEADLESS_INSTALL_DISABLED_MESSAGE };
24
+ }
14
25
  const scope = options.scope ?? 'user';
15
26
  const settingsPath = options._settingsPathOverride ?? detectSettingsPath(scope, null);
27
+ const projectSettingsPath = options._projectSettingsPathOverride ?? detectSettingsPath('project', null);
28
+ if (projectSettingsPath !== settingsPath && readAndCheckHooks(projectSettingsPath)) {
29
+ return { status: 'already_installed', settingsPath: projectSettingsPath };
30
+ }
16
31
  const binPath = resolveBinaryPath();
17
32
  try {
18
33
  const existing = readJsonFileStrict(settingsPath);
@@ -27,4 +42,32 @@ export function installHooksHeadless(options = {}) {
27
42
  return { status: 'error', message: errMsg(err) };
28
43
  }
29
44
  }
45
+ /**
46
+ * Builds the `headlessInstaller` the MCP tool calls. `allowHeadlessInstall` is
47
+ * captured by value, so callers rebuild the installer once config has loaded.
48
+ * The audit trail is read at call time via `getAuditTrail`. An audit entry is written only when hooks were
49
+ * actually changed, so a refusal or an already-installed no-op leaves no entry.
50
+ */
51
+ export function createHeadlessInstaller(options) {
52
+ return () => {
53
+ const result = installHooksHeadless({
54
+ allowHeadlessInstall: options.allowHeadlessInstall,
55
+ _settingsPathOverride: options._settingsPathOverride,
56
+ _projectSettingsPathOverride: options._projectSettingsPathOverride,
57
+ });
58
+ if (result.status === 'installed') {
59
+ // The hooks are already on disk, so a failed audit step must not turn
60
+ // the call into an error the client would retry.
61
+ try {
62
+ const record = options.getAuditTrail()?.recordHeadlessHookInstall(result.settingsPath);
63
+ if (record)
64
+ options.onAuditRecord?.(record);
65
+ }
66
+ catch (err) {
67
+ logger.warn('Hook install succeeded but its audit record failed', { error: errMsg(err) });
68
+ }
69
+ }
70
+ return result;
71
+ };
72
+ }
30
73
  //# sourceMappingURL=headless-install.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"headless-install.js","sourceRoot":"","sources":["../../src/install/headless-install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC3F,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAOlD;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAClC,UAA0E,EAAE;IAE5E,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC;IACtC,MAAM,YAAY,GAAG,OAAO,CAAC,qBAAqB,IAAI,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACtF,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;IAEpC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,kBAAkB,CAAC,YAAY,CAAC,CAAC;QAElD,IAAI,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC;YAChC,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,YAAY,EAAE,CAAC;QACvD,CAAC;QAED,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChD,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;QAC3D,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC;IAC/C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;IACnD,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"headless-install.js","sourceRoot":"","sources":["../../src/install/headless-install.ts"],"names":[],"mappings":"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"}
@@ -75,6 +75,8 @@ export declare function areHooksInstalled(settingsContent: Record<string, unknow
75
75
  * whether NR hooks are installed. Returns false on any I/O error.
76
76
  */
77
77
  export declare function readAndCheckHooks(settingsPath?: string): boolean;
78
+ /** Whether NR hooks are installed in user-scope or project-scope Claude Code settings. */
79
+ export declare function areHooksInstalledAtAnyScope(home?: string | null): boolean;
78
80
  export declare function mergeSettings(existing: Record<string, unknown>, binPath?: string | null, options?: {
79
81
  platform?: PlatformTarget;
80
82
  }): Record<string, unknown>;
@@ -1 +1 @@
1
- {"version":3,"file":"install-helper.d.ts","sourceRoot":"","sources":["../../src/install/install-helper.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install-helper.d.ts","sourceRoot":"","sources":["../../src/install/install-helper.ts"],"names":[],"mappings":"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"}
@@ -269,6 +269,11 @@ export function readAndCheckHooks(settingsPath) {
269
269
  return false;
270
270
  }
271
271
  }
272
+ /** Whether NR hooks are installed in user-scope or project-scope Claude Code settings. */
273
+ export function areHooksInstalledAtAnyScope(home) {
274
+ return (readAndCheckHooks(detectSettingsPath('user', home)) ||
275
+ readAndCheckHooks(detectSettingsPath('project', null)));
276
+ }
272
277
  // ---------------------------------------------------------------------------
273
278
  // Zod schemas — validate existing file shapes before merging
274
279
  // ---------------------------------------------------------------------------
@@ -1 +1 @@
1
- {"version":3,"file":"install-helper.js","sourceRoot":"","sources":["../../src/install/install-helper.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install-helper.js","sourceRoot":"","sources":["../../src/install/install-helper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { SecretField } from '../secret-command.js';
2
+ export declare const SECURITY_BIN = "/usr/bin/security";
3
+ export type KeychainField = Extract<SecretField, 'licenseKey' | 'nrApiKey'>;
4
+ export interface KeychainDeps {
5
+ readonly add: (service: string, account: string, secret: string) => void;
6
+ readonly read: (field: KeychainField, argv: readonly string[]) => string;
7
+ }
8
+ export declare function isKeychainSupported(): boolean;
9
+ export declare function keychainAccount(): string;
10
+ /** The argv for the `*Command` config field that reads the secret back. */
11
+ export declare function keychainReadCommand(field: KeychainField, account?: string): string[];
12
+ /**
13
+ * Stores `secret` in the login Keychain and reads it back through the same
14
+ * argv the config will use, so the returned command is known to work.
15
+ * Throws without the secret in the message.
16
+ */
17
+ export declare function storeInKeychain(field: KeychainField, secret: string, deps?: KeychainDeps): string[];
18
+ //# sourceMappingURL=keychain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keychain.d.ts","sourceRoot":"","sources":["../../src/install/keychain.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,eAAO,MAAM,YAAY,sBAAsB,CAAC;AAEhD,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC,WAAW,EAAE,YAAY,GAAG,UAAU,CAAC,CAAC;AAO5E,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACzE,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,KAAK,MAAM,CAAC;CAC1E;AAED,wBAAgB,mBAAmB,IAAI,OAAO,CAE7C;AAED,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,2EAA2E;AAC3E,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,aAAa,EAAE,OAAO,SAAoB,GAAG,MAAM,EAAE,CAE/F;AA2BD;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,MAAM,EACd,IAAI,GAAE,YAA2B,GAChC,MAAM,EAAE,CAQV"}
@@ -0,0 +1,60 @@
1
+ import { spawnSync } from 'node:child_process';
2
+ import { existsSync } from 'node:fs';
3
+ import { userInfo } from 'node:os';
4
+ import { stripDangerousEnv } from '../lib/child-env.js';
5
+ import { resolveSecretCommand } from '../secret-command.js';
6
+ export const SECURITY_BIN = '/usr/bin/security';
7
+ const SERVICES = {
8
+ licenseKey: 'preflight-license-key',
9
+ nrApiKey: 'preflight-nr-api-key',
10
+ };
11
+ export function isKeychainSupported() {
12
+ return process.platform === 'darwin' && existsSync(SECURITY_BIN);
13
+ }
14
+ export function keychainAccount() {
15
+ return userInfo().username;
16
+ }
17
+ /** The argv for the `*Command` config field that reads the secret back. */
18
+ export function keychainReadCommand(field, account = keychainAccount()) {
19
+ return [SECURITY_BIN, 'find-generic-password', '-s', SERVICES[field], '-a', account, '-w'];
20
+ }
21
+ function quote(value) {
22
+ return `"${value.replace(/\\/g, '\\\\').replace(/"/g, '\\"')}"`;
23
+ }
24
+ // The secret goes to `security -i` on stdin so it never appears in `ps` argv.
25
+ function addViaSecurityStdin(service, account, secret) {
26
+ if (/[\r\n\0]/.test(secret))
27
+ throw new Error('the secret contains a line break');
28
+ const command = `add-generic-password -U -s ${quote(service)} -a ${quote(account)} -w ${quote(secret)}\n`;
29
+ const result = spawnSync(SECURITY_BIN, ['-i'], {
30
+ input: command,
31
+ encoding: 'utf8',
32
+ shell: false,
33
+ env: stripDangerousEnv(process.env).env,
34
+ timeout: 20_000,
35
+ stdio: ['pipe', 'ignore', 'ignore'],
36
+ });
37
+ if (result.error)
38
+ throw new Error('could not run /usr/bin/security');
39
+ if (result.status !== 0)
40
+ throw new Error('security add-generic-password failed');
41
+ }
42
+ const DEFAULT_DEPS = {
43
+ add: addViaSecurityStdin,
44
+ read: (field, argv) => resolveSecretCommand(field, argv),
45
+ };
46
+ /**
47
+ * Stores `secret` in the login Keychain and reads it back through the same
48
+ * argv the config will use, so the returned command is known to work.
49
+ * Throws without the secret in the message.
50
+ */
51
+ export function storeInKeychain(field, secret, deps = DEFAULT_DEPS) {
52
+ const account = keychainAccount();
53
+ const argv = keychainReadCommand(field, account);
54
+ deps.add(SERVICES[field], account, secret);
55
+ if (deps.read(field, argv) !== secret) {
56
+ throw new Error('the Keychain returned a different value than was stored');
57
+ }
58
+ return argv;
59
+ }
60
+ //# sourceMappingURL=keychain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keychain.js","sourceRoot":"","sources":["../../src/install/keychain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAG5D,MAAM,CAAC,MAAM,YAAY,GAAG,mBAAmB,CAAC;AAIhD,MAAM,QAAQ,GAA4C;IACxD,UAAU,EAAE,uBAAuB;IACnC,QAAQ,EAAE,sBAAsB;CACjC,CAAC;AAOF,MAAM,UAAU,mBAAmB;IACjC,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ,IAAI,UAAU,CAAC,YAAY,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,QAAQ,EAAE,CAAC,QAAQ,CAAC;AAC7B,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,mBAAmB,CAAC,KAAoB,EAAE,OAAO,GAAG,eAAe,EAAE;IACnF,OAAO,CAAC,YAAY,EAAE,uBAAuB,EAAE,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AAC7F,CAAC;AAED,SAAS,KAAK,CAAC,KAAa;IAC1B,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC;AAClE,CAAC;AAED,8EAA8E;AAC9E,SAAS,mBAAmB,CAAC,OAAe,EAAE,OAAe,EAAE,MAAc;IAC3E,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACjF,MAAM,OAAO,GAAG,8BAA8B,KAAK,CAAC,OAAO,CAAC,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;IAC1G,MAAM,MAAM,GAAG,SAAS,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,EAAE;QAC7C,KAAK,EAAE,OAAO;QACd,QAAQ,EAAE,MAAM;QAChB,KAAK,EAAE,KAAK;QACZ,GAAG,EAAE,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG;QACvC,OAAO,EAAE,MAAM;QACf,KAAK,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC;KACpC,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACrE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;AACnF,CAAC;AAED,MAAM,YAAY,GAAiB;IACjC,GAAG,EAAE,mBAAmB;IACxB,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,oBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC;CACzD,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAC7B,KAAoB,EACpB,MAAc,EACd,OAAqB,YAAY;IAEjC,MAAM,OAAO,GAAG,eAAe,EAAE,CAAC;IAClC,MAAM,IAAI,GAAG,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACjD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAC3C,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,MAAM,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Generates and merges the Kiro hook file. Kiro hooks are workspace-scoped
3
+ * (`.kiro/hooks/`, see docs/KIRO_POWER.md), so the file is written relative
4
+ * to a project directory, never to the home directory.
5
+ *
6
+ * The command carries `MCP_CLIENT=kiro` itself: Kiro runs hook commands as a
7
+ * process separate from the MCP server and does not pass them the server's
8
+ * `env` block.
9
+ */
10
+ export declare const KIRO_HOOKS_FILE = "preflight-observability.json";
11
+ interface KiroHook {
12
+ readonly name: string;
13
+ readonly trigger: string;
14
+ readonly action: {
15
+ readonly type: 'command';
16
+ readonly command: string;
17
+ };
18
+ readonly timeout: number;
19
+ }
20
+ export declare function kiroHooksPath(projectDir: string): string;
21
+ export declare function generateKiroHooks(): readonly KiroHook[];
22
+ /** Replaces Preflight's own entries and keeps every other hook in the file. */
23
+ export declare function mergeKiroHooksFile(existing: Record<string, unknown>): Record<string, unknown>;
24
+ /** Drops Preflight's own entries and keeps every other hook in the file. */
25
+ export declare function removeKiroHooksFile(existing: Record<string, unknown>): Record<string, unknown>;
26
+ export {};
27
+ //# sourceMappingURL=kiro-install-helper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kiro-install-helper.d.ts","sourceRoot":"","sources":["../../src/install/kiro-install-helper.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,eAAO,MAAM,eAAe,iCAAiC,CAAC;AAK9D,UAAU,QAAQ;IAChB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACxE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,wBAAgB,iBAAiB,IAAI,SAAS,QAAQ,EAAE,CAevD;AAUD,+EAA+E;AAC/E,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAM7F;AAED,4EAA4E;AAC5E,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAE9F"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Generates and merges the Kiro hook file. Kiro hooks are workspace-scoped
3
+ * (`.kiro/hooks/`, see docs/KIRO_POWER.md), so the file is written relative
4
+ * to a project directory, never to the home directory.
5
+ *
6
+ * The command carries `MCP_CLIENT=kiro` itself: Kiro runs hook commands as a
7
+ * process separate from the MCP server and does not pass them the server's
8
+ * `env` block.
9
+ */
10
+ import { join } from 'node:path';
11
+ export const KIRO_HOOKS_FILE = 'preflight-observability.json';
12
+ const KIRO_HOOK_NAME_PREFIX = 'Preflight:';
13
+ const KIRO_HOOK_COMMAND = 'MCP_CLIENT=kiro preflight-collector';
14
+ const KIRO_HOOK_TIMEOUT_SECONDS = 10;
15
+ export function kiroHooksPath(projectDir) {
16
+ return join(projectDir, '.kiro', 'hooks', KIRO_HOOKS_FILE);
17
+ }
18
+ export function generateKiroHooks() {
19
+ return [
20
+ {
21
+ name: 'Preflight: pre tool call',
22
+ trigger: 'PreToolUse',
23
+ action: { type: 'command', command: KIRO_HOOK_COMMAND },
24
+ timeout: KIRO_HOOK_TIMEOUT_SECONDS,
25
+ },
26
+ {
27
+ name: 'Preflight: post tool call',
28
+ trigger: 'PostToolUse',
29
+ action: { type: 'command', command: KIRO_HOOK_COMMAND },
30
+ timeout: KIRO_HOOK_TIMEOUT_SECONDS,
31
+ },
32
+ ];
33
+ }
34
+ function withoutPreflightHooks(existing) {
35
+ const current = Array.isArray(existing.hooks) ? existing.hooks : [];
36
+ return current.filter((h) => {
37
+ const name = h?.name;
38
+ return !(typeof name === 'string' && name.startsWith(KIRO_HOOK_NAME_PREFIX));
39
+ });
40
+ }
41
+ /** Replaces Preflight's own entries and keeps every other hook in the file. */
42
+ export function mergeKiroHooksFile(existing) {
43
+ return {
44
+ version: 'v1',
45
+ ...existing,
46
+ hooks: [...withoutPreflightHooks(existing), ...generateKiroHooks()],
47
+ };
48
+ }
49
+ /** Drops Preflight's own entries and keeps every other hook in the file. */
50
+ export function removeKiroHooksFile(existing) {
51
+ return { ...existing, hooks: withoutPreflightHooks(existing) };
52
+ }
53
+ //# sourceMappingURL=kiro-install-helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kiro-install-helper.js","sourceRoot":"","sources":["../../src/install/kiro-install-helper.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,CAAC,MAAM,eAAe,GAAG,8BAA8B,CAAC;AAC9D,MAAM,qBAAqB,GAAG,YAAY,CAAC;AAC3C,MAAM,iBAAiB,GAAG,qCAAqC,CAAC;AAChE,MAAM,yBAAyB,GAAG,EAAE,CAAC;AASrC,MAAM,UAAU,aAAa,CAAC,UAAkB;IAC9C,OAAO,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO;QACL;YACE,IAAI,EAAE,0BAA0B;YAChC,OAAO,EAAE,YAAY;YACrB,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,iBAAiB,EAAE;YACvD,OAAO,EAAE,yBAAyB;SACnC;QACD;YACE,IAAI,EAAE,2BAA2B;YACjC,OAAO,EAAE,aAAa;YACtB,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,iBAAiB,EAAE;YACvD,OAAO,EAAE,yBAAyB;SACnC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,QAAiC;IAC9D,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAE,QAAQ,CAAC,KAAmB,CAAC,CAAC,CAAC,EAAE,CAAC;IACnF,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QAC1B,MAAM,IAAI,GAAI,CAA+B,EAAE,IAAI,CAAC;QACpD,OAAO,CAAC,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;AACL,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,kBAAkB,CAAC,QAAiC;IAClE,OAAO;QACL,OAAO,EAAE,IAAI;QACb,GAAG,QAAQ;QACX,KAAK,EAAE,CAAC,GAAG,qBAAqB,CAAC,QAAQ,CAAC,EAAE,GAAG,iBAAiB,EAAE,CAAC;KACpE,CAAC;AACJ,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,mBAAmB,CAAC,QAAiC;IACnE,OAAO,EAAE,GAAG,QAAQ,EAAE,KAAK,EAAE,qBAAqB,CAAC,QAAQ,CAAC,EAAE,CAAC;AACjE,CAAC"}
@@ -38,6 +38,10 @@ export declare function buildConfig(existing: Partial<z.infer<typeof ConfigFileS
38
38
  dashboardPort?: number | null;
39
39
  nrApiKey?: string | null;
40
40
  collectorHost?: string | null;
41
+ /** Written instead of the plaintext `licenseKey`, which is then dropped from the file. */
42
+ licenseKeyCommand?: readonly string[] | null;
43
+ /** Written instead of the plaintext `nrApiKey`, which is then dropped from the file. */
44
+ nrApiKeyCommand?: readonly string[] | null;
41
45
  }): Partial<z.infer<typeof ConfigFileSchema>>;
42
46
  export declare function resolveEnvironmentChoice(envRaw: string, defaultEnv: string): string;
43
47
  export declare function runSetupWizard(opts?: {
@@ -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;AAmBzC,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,CAolBpF"}
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;AAsBzC,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;AAwED,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;IAC9B,0FAA0F;IAC1F,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;IAC7C,wFAAwF;IACxF,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;CAC5C,GACA,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC,CAoC3C;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,CA+nBpF"}
@@ -9,6 +9,8 @@ import { writeJsonFile } from './json-utils.js';
9
9
  import { installSchedule, installDashboardDaemon, resolveBinaryPath } from './schedule.js';
10
10
  import { isWsl, resolveWindowsHome } from './platform.js';
11
11
  import { validateLicenseKey, validateApiKey } from './key-validator.js';
12
+ import { isKeychainSupported, storeInKeychain } from './keychain.js';
13
+ import { resolveSecretCommand } from '../secret-command.js';
12
14
  import { getDashboardAddress, waitForHealthyDashboard } from './dashboard-health.js';
13
15
  import { REGIONS, getRegion, suggestRegionFromLicenseKey, detectRegionFromLicenseKeyStrict, } from './regions.js';
14
16
  const CONFIG_PATH = resolve(DEFAULT_STORAGE_PATH, 'config.json');
@@ -72,6 +74,25 @@ export function copyStarterAlertRules(opts) {
72
74
  function print(msg = '') {
73
75
  process.stdout.write(msg + '\n');
74
76
  }
77
+ async function offerKeychain(rl, label) {
78
+ const answer = (await rl.question(`Store the ${label} in the macOS Keychain instead of config.json? Preflight reads it back at startup [y/N]: `))
79
+ .trim()
80
+ .toLowerCase();
81
+ return answer === 'y' || answer === 'yes';
82
+ }
83
+ // Falls back to a plaintext value (the caller keeps it) when the Keychain write fails.
84
+ function storeOrWarn(field, secret, label) {
85
+ try {
86
+ const argv = storeInKeychain(field, secret);
87
+ print(` ✓ ${label} stored in the macOS Keychain`);
88
+ return argv;
89
+ }
90
+ catch (err) {
91
+ const reason = err instanceof Error ? err.message : String(err);
92
+ print(` ⚠ Could not store the ${label} in the Keychain (${reason}). It will be written to config.json instead.`);
93
+ return null;
94
+ }
95
+ }
75
96
  function loadExisting() {
76
97
  let parsed;
77
98
  try {
@@ -110,7 +131,7 @@ function loadExisting() {
110
131
  export function buildConfig(existing, inputs) {
111
132
  const mode = inputs.mode ?? 'cloud';
112
133
  const includeNrCreds = mode !== 'local';
113
- return {
134
+ const config = {
114
135
  ...existing,
115
136
  mode,
116
137
  ...(includeNrCreds ? { accountId: inputs.accountId, licenseKey: inputs.licenseKey } : {}),
@@ -125,6 +146,26 @@ export function buildConfig(existing, inputs) {
125
146
  ...(inputs.nrApiKey ? { nrApiKey: inputs.nrApiKey } : {}),
126
147
  ...(inputs.collectorHost ? { collectorHost: inputs.collectorHost } : {}),
127
148
  };
149
+ // The command always outranks the file value at load, so exactly one of the
150
+ // pair is written: a new plaintext key replaces a stale command, and a
151
+ // command replaces any plaintext key.
152
+ if (includeNrCreds) {
153
+ if (inputs.licenseKeyCommand) {
154
+ config.licenseKeyCommand = [...inputs.licenseKeyCommand];
155
+ delete config.licenseKey;
156
+ }
157
+ else {
158
+ delete config.licenseKeyCommand;
159
+ }
160
+ }
161
+ if (inputs.nrApiKeyCommand) {
162
+ config.nrApiKeyCommand = [...inputs.nrApiKeyCommand];
163
+ delete config.nrApiKey;
164
+ }
165
+ else if (inputs.nrApiKey) {
166
+ delete config.nrApiKeyCommand;
167
+ }
168
+ return config;
128
169
  }
129
170
  function parseModeAnswer(raw, fallback) {
130
171
  const trimmed = raw.trim().toLowerCase();
@@ -186,6 +227,10 @@ export async function runSetupWizard(opts = {}) {
186
227
  let licenseKey = '';
187
228
  let collectorHost = null;
188
229
  let nrApiKey = null;
230
+ let licenseKeyCommand = null;
231
+ let keychainLicenseKey = false;
232
+ let keychainNrApiKey = false;
233
+ let nrApiKeyCommand = null;
189
234
  let validatedEmail = null;
190
235
  if (mode !== 'local') {
191
236
  const envAccountId = process.env.NEW_RELIC_ACCOUNT_ID?.trim() ?? '';
@@ -213,13 +258,27 @@ export async function runSetupWizard(opts = {}) {
213
258
  const envLicenseKey = process.env.NEW_RELIC_LICENSE_KEY?.trim() ?? '';
214
259
  const existingKey = typeof existing.licenseKey === 'string' ? existing.licenseKey : '';
215
260
  const defaultKey = existingKey || envLicenseKey;
261
+ const existingKeyCommand = existing.licenseKeyCommand ?? null;
216
262
  const keyHint = existingKey
217
263
  ? '(already set)'
218
- : envLicenseKey
219
- ? '$NEW_RELIC_LICENSE_KEY'
220
- : 'required';
264
+ : existingKeyCommand
265
+ ? '(set by licenseKeyCommand)'
266
+ : envLicenseKey
267
+ ? '$NEW_RELIC_LICENSE_KEY'
268
+ : 'required';
221
269
  const keyPrompt = `License Key — authenticates telemetry ingest to your NR account [${keyHint}]: `;
222
270
  licenseKey = (await rl.question(keyPrompt)).trim();
271
+ if (!licenseKey && existingKeyCommand) {
272
+ try {
273
+ licenseKey = resolveSecretCommand('licenseKey', existingKeyCommand);
274
+ licenseKeyCommand = existingKeyCommand;
275
+ }
276
+ catch (err) {
277
+ console.error(err instanceof Error ? err.message : String(err));
278
+ rl.close();
279
+ process.exit(1);
280
+ }
281
+ }
223
282
  if (!licenseKey)
224
283
  licenseKey = defaultKey;
225
284
  if (!licenseKey) {
@@ -227,6 +286,9 @@ export async function runSetupWizard(opts = {}) {
227
286
  rl.close();
228
287
  process.exit(1);
229
288
  }
289
+ if (!licenseKeyCommand && isKeychainSupported()) {
290
+ keychainLicenseKey = await offerKeychain(rl, 'license key');
291
+ }
230
292
  // Step 2b: Environment / region. --staging pre-selects the region and
231
293
  // skips this question entirely — staging is never shown in the menu
232
294
  // or matched against typed input; it's reachable only via the flag.
@@ -259,18 +321,33 @@ export async function runSetupWizard(opts = {}) {
259
321
  const envApiKey = process.env.NEW_RELIC_API_KEY?.trim() ?? '';
260
322
  const existingApiKey = typeof existing.nrApiKey === 'string' ? existing.nrApiKey : null;
261
323
  const defaultApiKey = existingApiKey ?? (envApiKey || null);
262
- const apiKeyHint = existingApiKey
263
- ? '(already set)'
264
- : envApiKey
265
- ? '$NEW_RELIC_API_KEY'
266
- : 'optional';
324
+ const existingApiKeyCommand = existing.nrApiKeyCommand ?? null;
325
+ const apiKeyHint = existingApiKeyCommand
326
+ ? '(set by nrApiKeyCommand)'
327
+ : existingApiKey
328
+ ? '(already set)'
329
+ : envApiKey
330
+ ? '$NEW_RELIC_API_KEY'
331
+ : 'optional';
267
332
  const apiKeyRaw = (await rl.question(`API Key (NRAK-...) — for team queries and deploying dashboards/alerts [${apiKeyHint}]: `)).trim();
268
333
  if (apiKeyRaw) {
269
334
  nrApiKey = apiKeyRaw;
270
335
  }
336
+ else if (existingApiKeyCommand) {
337
+ nrApiKeyCommand = existingApiKeyCommand;
338
+ try {
339
+ nrApiKey = resolveSecretCommand('nrApiKey', existingApiKeyCommand);
340
+ }
341
+ catch (err) {
342
+ print(` ⚠ ${err instanceof Error ? err.message : String(err)} — keeping nrApiKeyCommand without validating it`);
343
+ }
344
+ }
271
345
  else if (defaultApiKey) {
272
346
  nrApiKey = defaultApiKey;
273
347
  }
348
+ if (nrApiKey && !nrApiKeyCommand && isKeychainSupported()) {
349
+ keychainNrApiKey = await offerKeychain(rl, 'API key');
350
+ }
274
351
  // Step 2d: Validate credentials
275
352
  print('\nValidating credentials...');
276
353
  const licenseResult = await validateLicenseKey({ licenseKey, accountId, collectorHost });
@@ -375,6 +452,12 @@ export async function runSetupWizard(opts = {}) {
375
452
  // (runInstallCli) should own this field. Preserving a stale value here would silently
376
453
  // drive the next bare install toward the wrong platform if the user declines hooks.
377
454
  const { platformTarget: _platformTarget, ...existingForWizard } = existing;
455
+ if (keychainLicenseKey) {
456
+ licenseKeyCommand = storeOrWarn('licenseKey', licenseKey, 'license key');
457
+ }
458
+ if (keychainNrApiKey && nrApiKey) {
459
+ nrApiKeyCommand = storeOrWarn('nrApiKey', nrApiKey, 'API key');
460
+ }
378
461
  const config = buildConfig(existingForWizard, {
379
462
  accountId,
380
463
  licenseKey,
@@ -387,6 +470,8 @@ export async function runSetupWizard(opts = {}) {
387
470
  dashboardPort,
388
471
  nrApiKey,
389
472
  collectorHost,
473
+ licenseKeyCommand,
474
+ nrApiKeyCommand,
390
475
  });
391
476
  writeJsonFile(CONFIG_PATH, config, DEFAULT_STORAGE_PATH);
392
477
  print(`\nConfig written to ${CONFIG_PATH}`);