@skrr-ai/cli 0.1.122 → 0.1.124

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 (111) hide show
  1. package/dist/commands/agents/chat.d.ts +7 -0
  2. package/dist/commands/agents/chat.js +32 -6
  3. package/dist/commands/agents/delete.d.ts +8 -0
  4. package/dist/commands/agents/delete.js +16 -0
  5. package/dist/commands/context.js +7 -0
  6. package/dist/commands/followups/act.js +3 -0
  7. package/dist/commands/followups/checkin.js +3 -0
  8. package/dist/commands/followups/remind.js +3 -0
  9. package/dist/commands/followups/show.js +1 -1
  10. package/dist/commands/followups/watch.js +3 -0
  11. package/dist/commands/search/workspace.js +1 -1
  12. package/dist/commands/store/gallery-admissions/approve.js +1 -1
  13. package/dist/commands/store/gallery-admissions/preview.js +1 -1
  14. package/dist/commands/store/gallery-admissions/refuse.js +1 -1
  15. package/dist/commands/store/gallery-admissions/show.js +1 -1
  16. package/dist/lib/agentic-stream.d.ts +46 -0
  17. package/dist/lib/agentic-stream.js +135 -14
  18. package/dist/lib/auth-core-init.d.ts +15 -2
  19. package/dist/lib/auth-core-init.js +47 -6
  20. package/dist/lib/auth-failure.js +12 -0
  21. package/dist/lib/command-hygiene.js +30 -1
  22. package/dist/lib/daemonBrokerRefusal.js +5 -1
  23. package/dist/lib/exec-runtime-binary.d.ts +9 -0
  24. package/dist/lib/exec-runtime-binary.js +15 -1
  25. package/dist/lib/followups.d.ts +13 -0
  26. package/dist/lib/followups.js +8 -0
  27. package/dist/lib/keychain.js +41 -4
  28. package/dist/lib/profile-machine-identity-guard.js +2 -1
  29. package/dist/lib/runtime-start-verification.js +6 -1
  30. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/cliHandoffWire.d.ts +5 -1
  31. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/cliHandoffWire.js +1 -1
  32. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/credentialEnvelopeBridge.js +69 -27
  33. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/deviceIdentityBridge.d.ts +135 -4
  34. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/deviceIdentityBridge.js +440 -83
  35. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/deviceKey.d.ts +106 -7
  36. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/deviceKey.js +77 -19
  37. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/deviceKeyHandle.d.ts +33 -0
  38. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/deviceKeyHandle.js +77 -0
  39. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/deviceKeyHardware.d.ts +68 -0
  40. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/deviceKeyHardware.js +264 -0
  41. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/deviceKeyServerSupport.d.ts +31 -0
  42. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/deviceKeyServerSupport.js +90 -0
  43. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/dpop.js +2 -0
  44. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/independentMachineReservation.js +2 -0
  45. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/index.d.ts +7 -3
  46. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/index.js +110 -0
  47. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/kek/index.d.ts +1 -0
  48. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/kek/index.js +13 -0
  49. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/kek/linux.d.ts +18 -0
  50. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/kek/linux.js +11 -2
  51. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/kek/macos.d.ts +22 -0
  52. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/kek/macos.js +14 -2
  53. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/kek/masterKekService.d.ts +69 -0
  54. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/kek/masterKekService.js +67 -0
  55. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/liveState.d.ts +154 -0
  56. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/liveState.js +281 -0
  57. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/machineId.js +6 -3
  58. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/machineUuid.js +8 -5
  59. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/messages.d.ts +1 -1
  60. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/messages.js +1 -0
  61. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/profileStateDir.js +7 -27
  62. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/refresh.d.ts +1 -1
  63. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/refresh.js +24 -16
  64. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/stateFiles.d.ts +31 -0
  65. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/stateFiles.js +89 -0
  66. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/telemetryRedaction.d.ts +3 -0
  67. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/telemetryRedaction.js +41 -3
  68. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/types.d.ts +7 -1
  69. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/cliHandoffWire.d.ts +5 -1
  70. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/cliHandoffWire.js +4 -1
  71. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/credentialEnvelopeBridge.js +122 -38
  72. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/deviceIdentityBridge.d.ts +135 -4
  73. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/deviceIdentityBridge.js +603 -90
  74. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/deviceKey.d.ts +106 -7
  75. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/deviceKey.js +131 -27
  76. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/deviceKeyHandle.d.ts +33 -0
  77. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/deviceKeyHandle.js +81 -0
  78. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/deviceKeyHardware.d.ts +68 -0
  79. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/deviceKeyHardware.js +317 -0
  80. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/deviceKeyServerSupport.d.ts +31 -0
  81. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/deviceKeyServerSupport.js +86 -0
  82. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/dpop.js +4 -0
  83. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/independentMachineReservation.js +4 -0
  84. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/index.d.ts +7 -3
  85. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/index.js +14 -4
  86. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/kek/index.d.ts +1 -0
  87. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/kek/index.js +1 -0
  88. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/kek/linux.d.ts +18 -0
  89. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/kek/linux.js +18 -2
  90. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/kek/macos.d.ts +22 -0
  91. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/kek/macos.js +23 -2
  92. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/kek/masterKekService.d.ts +69 -0
  93. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/kek/masterKekService.js +134 -0
  94. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/liveState.d.ts +154 -0
  95. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/liveState.js +386 -0
  96. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/machineId.js +6 -3
  97. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/machineUuid.js +11 -5
  98. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/messages.d.ts +1 -1
  99. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/messages.js +1 -0
  100. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/profileStateDir.js +6 -35
  101. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/refresh.d.ts +1 -1
  102. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/refresh.js +45 -16
  103. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/stateFiles.d.ts +31 -0
  104. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/stateFiles.js +73 -0
  105. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/telemetryRedaction.d.ts +3 -0
  106. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/telemetryRedaction.js +40 -3
  107. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/types.d.ts +7 -1
  108. package/dist/node_modules/@skrr-ai/auth-core/package.json +21 -1
  109. package/dist/node_modules/@skrr-ai/data-provider/index.js +7349 -7325
  110. package/oclif.manifest.json +11 -2
  111. package/package.json +4 -1
@@ -19,7 +19,9 @@ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "defau
19
19
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
20
  var index_exports = {};
21
21
  __export(index_exports, {
22
+ ALLOW_LIVE_STATE_ENV: () => import_liveState.ALLOW_LIVE_STATE_ENV,
22
23
  ALL_DAEMON_SCOPES: () => import_daemonScopes.ALL_DAEMON_SCOPES,
24
+ AUTH_SERVER_METADATA_PATH: () => import_deviceKeyServerSupport.AUTH_SERVER_METADATA_PATH,
23
25
  AuthHelperUnavailableError: () => import_credentialResolver.AuthHelperUnavailableError,
24
26
  AuthHelperUntrustedError: () => import_credentialResolver.AuthHelperUntrustedError,
25
27
  CI_TOKEN_PREFIX: () => import_credentialResolver.CI_TOKEN_PREFIX,
@@ -28,12 +30,16 @@ __export(index_exports, {
28
30
  CRED_ENVELOPE_MAGIC: () => import_credentialEnvelope.ENVELOPE_MAGIC,
29
31
  CRED_KEY_LEN: () => import_credentialEnvelope.KEY_LEN,
30
32
  CredentialResolver: () => import_credentialResolver.CredentialResolver,
33
+ DAEMON_BYOK_KEYCHAIN_SERVICE_BASE: () => import_liveState.DAEMON_BYOK_KEYCHAIN_SERVICE_BASE,
31
34
  DAEMON_CHILD_ENV: () => import_spawnEnv.DAEMON_CHILD_ENV,
35
+ DAEMON_KEYCHAIN_SERVICE_BASE: () => import_liveState.DAEMON_KEYCHAIN_SERVICE_BASE,
32
36
  DEFAULT_BINARY_NAME: () => import_localIdentity.DEFAULT_BINARY_NAME,
33
37
  DEFAULT_DAEMON_SCOPES: () => import_daemonScopes.DEFAULT_DAEMON_SCOPES,
34
38
  DEFAULT_FIRST_PARTY_HARNESS_CHANNEL: () => import_firstPartyHarnessChannels.DEFAULT_FIRST_PARTY_HARNESS_CHANNEL,
35
39
  DEFAULT_LOGIN_TIMEOUT_MS: () => import_loginLocalhost.DEFAULT_LOGIN_TIMEOUT_MS,
36
40
  DEFAULT_UNREADABLE_CREDENTIAL_HINT: () => import_credentialEnvelopeBridge.DEFAULT_UNREADABLE_CREDENTIAL_HINT,
41
+ DEVICE_KEY_ALGS: () => import_deviceKey.DEVICE_KEY_ALGS,
42
+ DEVICE_KEY_UNREADABLE_CREDENTIAL_HINT: () => import_deviceIdentityBridge.DEVICE_KEY_UNREADABLE_CREDENTIAL_HINT,
37
43
  DPOP_HEADER: () => import_dpop.DPOP_HEADER,
38
44
  DPOP_MAX_AGE_SECONDS: () => import_dpop.DPOP_MAX_AGE_SECONDS,
39
45
  DPOP_PROOF_INVALID: () => import_dpop.DPOP_PROOF_INVALID,
@@ -44,18 +50,25 @@ __export(index_exports, {
44
50
  FIRST_PARTY_HARNESS_CHANNELS: () => import_firstPartyHarnessChannels.FIRST_PARTY_HARNESS_CHANNELS,
45
51
  FIRST_PARTY_HARNESS_PREVIOUS_SUFFIX: () => import_firstPartyHarnessHome.FIRST_PARTY_HARNESS_PREVIOUS_SUFFIX,
46
52
  FIRST_PARTY_HARNESS_PROVENANCE_SUFFIX: () => import_firstPartyHarnessHome.FIRST_PARTY_HARNESS_PROVENANCE_SUFFIX,
53
+ HARDWARE_KEY_HELPER_NAME: () => import_deviceKeyHardware.HARDWARE_KEY_HELPER_NAME,
47
54
  HARNESSES_LOADING_CLAUDE_SKILLS_LAYOUT: () => import_harnessSkillLayout.HARNESSES_LOADING_CLAUDE_SKILLS_LAYOUT,
48
55
  HARNESS_TIERS: () => import_harnessTrust.HARNESS_TIERS,
56
+ HERMETIC_HOME_ENV: () => import_liveState.HERMETIC_HOME_ENV,
49
57
  HOSTED_RUNTIME_MACHINE_SOURCES: () => import_machineUuid.HOSTED_RUNTIME_MACHINE_SOURCES,
58
+ HardwareDeviceKeyError: () => import_deviceKeyHardware.HardwareDeviceKeyError,
50
59
  INDEPENDENT_MACHINE_PROFILE_RE: () => import_independentMachineReservation.INDEPENDENT_MACHINE_PROFILE_RE,
51
60
  INDEPENDENT_MACHINE_RESERVATION_FILE: () => import_independentMachineReservation.INDEPENDENT_MACHINE_RESERVATION_FILE,
52
61
  InMemoryKek: () => import_kek.InMemoryKek,
53
62
  KekUnavailableError: () => import_kek.KekUnavailableError,
54
63
  LEGACY_CONFIG_DIR_NAMES: () => import_localIdentity.LEGACY_CONFIG_DIR_NAMES,
64
+ LEGACY_DAEMON_KEYCHAIN_SERVICE: () => import_liveState.LEGACY_DAEMON_KEYCHAIN_SERVICE,
55
65
  LEGACY_NATIVE_ID_PREFIXES: () => import_localIdentity.LEGACY_NATIVE_ID_PREFIXES,
66
+ LIVE_DEFAULT_PROFILE: () => import_liveState.LIVE_DEFAULT_PROFILE,
67
+ LIVE_STATE_REFUSED_CODE: () => import_liveState.LIVE_STATE_REFUSED_CODE,
56
68
  LOOPBACK_DEFAULT_MAX_BODY_BYTES: () => import_loopbackHttp.LOOPBACK_DEFAULT_MAX_BODY_BYTES,
57
69
  LOOPBACK_NO_PROXY_HOSTS: () => import_spawnEnv.LOOPBACK_NO_PROXY_HOSTS,
58
70
  LinuxKek: () => import_kek.LinuxKek,
71
+ LiveStateRefusedError: () => import_liveState.LiveStateRefusedError,
59
72
  LocalCallbackBindError: () => import_loginLocalhost.LocalCallbackBindError,
60
73
  LocalCallbackDeniedError: () => import_loginLocalhost.LocalCallbackDeniedError,
61
74
  LocalCallbackError: () => import_loginLocalhost.LocalCallbackError,
@@ -66,6 +79,8 @@ __export(index_exports, {
66
79
  LoginInitError: () => import_loginWithLocalhost.LoginInitError,
67
80
  LoopbackTargetRefusedError: () => import_loopbackHttp.LoopbackTargetRefusedError,
68
81
  MACHINE_IDENTITY_FILENAME: () => import_machineUuid.MACHINE_IDENTITY_FILENAME,
82
+ MASTER_KEK_KEYCHAIN_ACCOUNT: () => import_kek.MASTER_KEK_KEYCHAIN_ACCOUNT,
83
+ MASTER_KEK_KEYCHAIN_SERVICE: () => import_kek.MASTER_KEK_KEYCHAIN_SERVICE,
69
84
  MAX_SIGS: () => import_releaseManifest.MAX_SIGS,
70
85
  MAX_TTL_DAYS: () => import_ttlParser.MAX_TTL_DAYS,
71
86
  MIN_TTL_DAYS: () => import_ttlParser.MIN_TTL_DAYS,
@@ -79,6 +94,7 @@ __export(index_exports, {
79
94
  PAIR_NONCE_LEN: () => import_daemonPair.PAIR_NONCE_LEN,
80
95
  PAIR_PUBKEY_LEN: () => import_daemonPair.PAIR_PUBKEY_LEN,
81
96
  PAIR_SECRET_LEN: () => import_daemonPair.PAIR_SECRET_LEN,
97
+ PENDING_HARDWARE_KEY_MAX_AGE_MS: () => import_deviceIdentityBridge.PENDING_HARDWARE_KEY_MAX_AGE_MS,
82
98
  PERSONAL_ACCESS_TOKEN_PREFIX: () => import_credentialResolver.PERSONAL_ACCESS_TOKEN_PREFIX,
83
99
  PROFILES_SEGMENT: () => import_profileStateDir.PROFILES_SEGMENT,
84
100
  PairBundleError: () => import_daemonPair.PairBundleError,
@@ -90,6 +106,7 @@ __export(index_exports, {
90
106
  SENSITIVE_ENV_SUFFIXES: () => import_spawnEnv.SENSITIVE_ENV_SUFFIXES,
91
107
  SENSITIVE_ENV_VARS: () => import_spawnEnv.SENSITIVE_ENV_VARS,
92
108
  SENTINEL_TRIGGERING_FAILURES: () => import_authHelper.SENTINEL_TRIGGERING_FAILURES,
109
+ SERVER_DEVICE_KEY_ALGS_FIELD: () => import_deviceKeyServerSupport.SERVER_DEVICE_KEY_ALGS_FIELD,
93
110
  SUPERSEDED_COPY_SUFFIX: () => import_profileStateDir.SUPERSEDED_COPY_SUFFIX,
94
111
  SUPERSEDED_MARKER_SUFFIX: () => import_profileStateDir.SUPERSEDED_MARKER_SUFFIX,
95
112
  TRUSTED_FEED_ORIGINS: () => import_releaseManifest.TRUSTED_FEED_ORIGINS,
@@ -111,14 +128,20 @@ __export(index_exports, {
111
128
  __resetMachineUuidCacheForTest: () => import_machineUuid.__resetMachineUuidCacheForTest,
112
129
  __resetShutdownGuardForTest: () => import_credentialEnvelopeBridge.__resetShutdownGuardForTest,
113
130
  __resetUnknown401StreaksForTest: () => import_refresh.__resetUnknown401StreaksForTest,
131
+ __setAccountHomeForTest: () => import_liveState.__setAccountHomeForTest,
114
132
  __setCredEnvelopeStateForTest: () => import_credentialEnvelopeBridge.__setStateForTest,
115
133
  __setDeviceIdentityStateForTest: () => import_deviceIdentityBridge.__setStateForTest,
116
134
  __setFdReaderForTest: () => import_fdToken.__setFdReaderForTest,
117
135
  __setKekStrategyForTest: () => import_kek.__setKekStrategyForTest,
136
+ __setUnreadableReloadIntervalForTest: () => import_deviceIdentityBridge.__setUnreadableReloadIntervalForTest,
118
137
  __wrappedDekFilePathForTest: () => import_credentialEnvelopeBridge.__wrappedDekFilePathForTest,
119
138
  accessTokenHash: () => import_dpop.accessTokenHash,
139
+ accountHomeDir: () => import_liveState.accountHomeDir,
140
+ algForJwk: () => import_deviceKey.algForJwk,
120
141
  assemblePairBundleBase64: () => import_daemonPair.assemblePairBundleBase64,
121
142
  assertLoopbackHttpUrl: () => import_loopbackHttp.assertLoopbackHttpUrl,
143
+ assertMayMutateLiveKeychain: () => import_liveState.assertMayMutateLiveKeychain,
144
+ assertMayMutateLiveState: () => import_liveState.assertMayMutateLiveState,
122
145
  buildArtifactMessage: () => import_releaseManifest.buildArtifactMessage,
123
146
  buildCredentialAad: () => import_credentialEnvelope.buildCredentialAad,
124
147
  buildDeviceProof: () => import_deviceKey.buildProof,
@@ -126,14 +149,18 @@ __export(index_exports, {
126
149
  buildPairAad: () => import_daemonPair.buildPairAad,
127
150
  buildPairUrl: () => import_daemonPair.buildPairUrl,
128
151
  challenge: () => import_pkce.challenge,
152
+ classifyDaemonKeychainService: () => import_kek.classifyDaemonKeychainService,
129
153
  classifyRefreshResponse: () => import_refreshClassification.classifyRefreshResponse,
130
154
  classifyTokenKind: () => import_credentialResolver.classifyTokenKind,
131
155
  claudeSkillsLayoutEvidence: () => import_harnessSkillLayout.claudeSkillsLayoutEvidence,
132
156
  clearEnrollmentMarker: () => import_deviceIdentityBridge.clearEnrollmentMarker,
133
157
  clearReauthState: () => import_refresh.clearReauthState,
158
+ commitDeviceKeyCandidate: () => import_deviceIdentityBridge.commitDeviceKeyCandidate,
159
+ commitPendingHardwareKey: () => import_deviceIdentityBridge.commitPendingHardwareKey,
134
160
  compareReleaseVersions: () => import_releaseVersions.compareReleaseVersions,
135
161
  configRootPath: () => import_configRoot.configRootPath,
136
162
  configureAuthCore: () => import_runtime.configureAuthCore,
163
+ configureHardwareDeviceKeyHelper: () => import_deviceKeyHardware.configureHardwareDeviceKeyHelper,
137
164
  consolidateProfileState: () => import_profileStateDir.consolidateProfileState,
138
165
  createDpopKey: () => import_dpop.createDpopKey,
139
166
  createRefreshScheduler: () => import_refreshScheduler.createRefreshScheduler,
@@ -153,6 +180,8 @@ __export(index_exports, {
153
180
  describeDeviceKeySplit: () => import_deviceIdentityBridge.describeDeviceKeySplit,
154
181
  describeLegacyState: () => import_legacyStatePreflight.describeLegacyState,
155
182
  describeMachineIdentity: () => import_machineUuid.describeMachineIdentity,
183
+ describeStoredDeviceKey: () => import_deviceIdentityBridge.describeStoredDeviceKey,
184
+ discardPendingHardwareKey: () => import_deviceIdentityBridge.discardPendingHardwareKey,
156
185
  emitAuthTelemetry: () => import_runtime.emitAuthTelemetry,
157
186
  enrollWithServer: () => import_deviceIdentityBridge.enrollWithServer,
158
187
  ensureMachineDaemonId: () => import_machineId.ensureMachineDaemonId,
@@ -205,17 +234,27 @@ __export(index_exports, {
205
234
  isDaemonChildEnv: () => import_spawnEnv.isDaemonChildEnv,
206
235
  isDaemonScope: () => import_daemonScopes.isDaemonScope,
207
236
  isDeviceIdentityActive: () => import_deviceIdentityBridge.isDeviceIdentityActive,
237
+ isDevicePublicJwk: () => import_deviceKey.isDevicePublicJwk,
208
238
  isFirstPartyHarnessChannel: () => import_firstPartyHarnessChannels.isFirstPartyHarnessChannel,
209
239
  isJwkThumbprint: () => import_dpop.isJwkThumbprint,
240
+ isLiveKeychainService: () => import_liveState.isLiveKeychainService,
241
+ isLiveStateRefusal: () => import_liveState.isLiveStateRefusal,
210
242
  isLoopbackAddress: () => import_loopbackHttp.isLoopbackAddress,
211
243
  isLoopbackHostname: () => import_loopbackHttp.isLoopbackHostname,
244
+ isMasterKekKeychainService: () => import_kek.isMasterKekKeychainService,
245
+ isSessionKeychainService: () => import_kek.isSessionKeychainService,
212
246
  isStaticTokenKind: () => import_credentialResolver.isStaticTokenKind,
247
+ isTestProcess: () => import_liveState.isTestProcess,
213
248
  isTrustedArtifactOrigin: () => import_releaseManifest.isTrustedArtifactOrigin,
249
+ isUserOwnedSecretKeychainService: () => import_kek.isUserOwnedSecretKeychainService,
214
250
  isValidRecoveryCode: () => import_recoveryCode.isValidRecoveryCode,
215
251
  jwkThumbprint: () => import_deviceKey.jwkThumbprint,
252
+ keychainSuffixForDir: () => import_liveState.keychainSuffixForDir,
216
253
  legacyDaemonUuids: () => import_machineId.legacyDaemonUuids,
217
254
  legacyProfileStateDir: () => import_profileStateDir.legacyProfileStateDir,
218
255
  linkFirstPartyHarnessAliases: () => import_firstPartyHarnessHome.linkFirstPartyHarnessAliases,
256
+ liveKeychainServices: () => import_liveState.liveKeychainServices,
257
+ liveStateRoot: () => import_liveState.liveStateRoot,
219
258
  loginWithLocalhost: () => import_loginWithLocalhost.loginWithLocalhost,
220
259
  loopbackFetch: () => import_loopbackHttp.loopbackFetch,
221
260
  maybeDecryptOnRead: () => import_credentialEnvelopeBridge.maybeDecryptOnRead,
@@ -226,6 +265,7 @@ __export(index_exports, {
226
265
  normalizeHtu: () => import_deviceKey.normalizeHtu,
227
266
  normalizeRecoveryCode: () => import_recoveryCode.normalizeRecoveryCode,
228
267
  openPairBundleBase64: () => import_daemonPair.openPairBundleBase64,
268
+ p256PublicJwkFromRaw: () => import_deviceKey.p256PublicJwkFromRaw,
229
269
  pairBase64ToUint8Array: () => import_daemonPair.base64ToUint8Array,
230
270
  pairBase64UrlToUint8Array: () => import_daemonPair.base64UrlToUint8Array,
231
271
  pairUint8ArrayToBase64: () => import_daemonPair.uint8ArrayToBase64,
@@ -235,16 +275,23 @@ __export(index_exports, {
235
275
  parsePairUrl: () => import_daemonPair.parsePairUrl,
236
276
  parseRecoveryCode: () => import_recoveryCode.parseRecoveryCode,
237
277
  parseTtlDays: () => import_ttlParser.parseTtlDays,
278
+ persistPendingHardwareKey: () => import_deviceIdentityBridge.persistPendingHardwareKey,
238
279
  persistReauthState: () => import_refresh.persistReauthState,
280
+ prepareHardwareKeyCandidate: () => import_deviceIdentityBridge.prepareHardwareKeyCandidate,
281
+ probeHardwareDeviceKey: () => import_deviceKeyHardware.probeHardwareDeviceKey,
239
282
  profileStateDir: () => import_profileStateDir.profileStateDir,
240
283
  profileStateFileLocations: () => import_profileStateDir.profileStateFileLocations,
241
284
  profileStateFilePathsToClear: () => import_profileStateDir.profileStateFilePathsToClear,
285
+ proofSigningInput: () => import_deviceKey.proofSigningInput,
242
286
  publicJwkFromX: () => import_deviceKey.publicJwkFromX,
243
287
  qualifyMachineUuid: () => import_machineUuid.qualifyMachineUuid,
244
288
  readAuthFromFd: () => import_fdToken.readAuthFromFd,
245
289
  readIndependentMachineReservation: () => import_independentMachineReservation.readIndependentMachineReservation,
290
+ readServerDeviceKeyAlgs: () => import_deviceKeyServerSupport.readServerDeviceKeyAlgs,
246
291
  reauthCommand: () => import_messages.reauthCommand,
247
292
  refreshDaemonToken: () => import_refresh.refreshDaemonToken,
293
+ refusesLiveKeychainMutation: () => import_liveState.refusesLiveKeychainMutation,
294
+ refusesLiveStateInTest: () => import_liveState.refusesLiveStateInTest,
248
295
  registerZeroizeHook: () => import_kek.registerZeroizeHook,
249
296
  reserveIndependentMachineProfile: () => import_independentMachineReservation.reserveIndependentMachineProfile,
250
297
  resetCredEnvelope: () => import_credentialEnvelopeBridge.resetCredEnvelope,
@@ -252,17 +299,23 @@ __export(index_exports, {
252
299
  resolveChannelManifestUrl: () => import_firstPartyHarnessChannels.resolveChannelManifestUrl,
253
300
  resolveConfigRoot: () => import_configRoot.resolveConfigRoot,
254
301
  resolveFirstPartyHarnessChannel: () => import_firstPartyHarnessChannels.resolveFirstPartyHarnessChannel,
302
+ resolveHardwareDeviceKeyHelper: () => import_deviceKeyHardware.resolveHardwareDeviceKeyHelper,
255
303
  resolveProfileStateDir: () => import_profileStateDir.resolveProfileStateDir,
256
304
  resolveProfileStateFile: () => import_profileStateDir.resolveProfileStateFile,
305
+ rethrowIfLiveStateRefusal: () => import_liveState.rethrowIfLiveStateRefusal,
257
306
  revokeDaemonRefreshSession: () => import_refresh.revokeDaemonRefreshSession,
258
307
  runHeadersHelper: () => import_headers_helper.runHeadersHelper,
259
308
  safeEqual: () => import_pkce.safeEqual,
260
309
  sanitizeSpawnEnv: () => import_spawnEnv.sanitizeSpawnEnv,
261
310
  setMachineUuidProfile: () => import_machineUuid.setMachineUuidProfile,
262
311
  shutdownCredEnvelope: () => import_credentialEnvelopeBridge.shutdownCredEnvelope,
312
+ signProofWith: () => import_deviceKey.signProofWith,
263
313
  signServerRequest: () => import_deviceIdentityBridge.signServerRequest,
314
+ signWithCandidate: () => import_deviceIdentityBridge.signWithCandidate,
315
+ softwareEd25519Handle: () => import_deviceKeyHandle.softwareEd25519Handle,
264
316
  splitKeyConvergencePolicy: () => import_credentialEnvelopeBridge.splitKeyConvergencePolicy,
265
317
  startLocalCallback: () => import_loginLocalhost.startLocalCallback,
318
+ testProcessSignal: () => import_liveState.testProcessSignal,
266
319
  tierPermitsConfiguredAutoMode: () => import_harnessTrust.tierPermitsConfiguredAutoMode,
267
320
  tokenHash: () => import_deviceKey.tokenHash,
268
321
  verifyArtifact: () => import_releaseManifest.verifyArtifact,
@@ -296,7 +349,11 @@ var import_ttlParser = require("./ttlParser.js");
296
349
  var import_recoveryCode = require("./recoveryCode.js");
297
350
  var import_credentialEnvelope = require("./credentialEnvelope.js");
298
351
  var import_kek = require("./kek/index.js");
352
+ var import_liveState = require("./liveState.js");
299
353
  var import_deviceKey = require("./deviceKey.js");
354
+ var import_deviceKeyHandle = require("./deviceKeyHandle.js");
355
+ var import_deviceKeyServerSupport = require("./deviceKeyServerSupport.js");
356
+ var import_deviceKeyHardware = require("./deviceKeyHardware.js");
300
357
  var import_dpop = require("./dpop.js");
301
358
  var import_credentialEnvelopeBridge = require("./credentialEnvelopeBridge.js");
302
359
  var import_deviceIdentityBridge = require("./deviceIdentityBridge.js");
@@ -323,7 +380,9 @@ __reExport(index_exports, require("./desktopWire.js"), module.exports);
323
380
  var import_independentMachineReservation = require("./independentMachineReservation.js");
324
381
  // Annotate the CommonJS export names for ESM import in node:
325
382
  0 && (module.exports = {
383
+ ALLOW_LIVE_STATE_ENV,
326
384
  ALL_DAEMON_SCOPES,
385
+ AUTH_SERVER_METADATA_PATH,
327
386
  AuthHelperUnavailableError,
328
387
  AuthHelperUntrustedError,
329
388
  CI_TOKEN_PREFIX,
@@ -332,12 +391,16 @@ var import_independentMachineReservation = require("./independentMachineReservat
332
391
  CRED_ENVELOPE_MAGIC,
333
392
  CRED_KEY_LEN,
334
393
  CredentialResolver,
394
+ DAEMON_BYOK_KEYCHAIN_SERVICE_BASE,
335
395
  DAEMON_CHILD_ENV,
396
+ DAEMON_KEYCHAIN_SERVICE_BASE,
336
397
  DEFAULT_BINARY_NAME,
337
398
  DEFAULT_DAEMON_SCOPES,
338
399
  DEFAULT_FIRST_PARTY_HARNESS_CHANNEL,
339
400
  DEFAULT_LOGIN_TIMEOUT_MS,
340
401
  DEFAULT_UNREADABLE_CREDENTIAL_HINT,
402
+ DEVICE_KEY_ALGS,
403
+ DEVICE_KEY_UNREADABLE_CREDENTIAL_HINT,
341
404
  DPOP_HEADER,
342
405
  DPOP_MAX_AGE_SECONDS,
343
406
  DPOP_PROOF_INVALID,
@@ -348,18 +411,25 @@ var import_independentMachineReservation = require("./independentMachineReservat
348
411
  FIRST_PARTY_HARNESS_CHANNELS,
349
412
  FIRST_PARTY_HARNESS_PREVIOUS_SUFFIX,
350
413
  FIRST_PARTY_HARNESS_PROVENANCE_SUFFIX,
414
+ HARDWARE_KEY_HELPER_NAME,
351
415
  HARNESSES_LOADING_CLAUDE_SKILLS_LAYOUT,
352
416
  HARNESS_TIERS,
417
+ HERMETIC_HOME_ENV,
353
418
  HOSTED_RUNTIME_MACHINE_SOURCES,
419
+ HardwareDeviceKeyError,
354
420
  INDEPENDENT_MACHINE_PROFILE_RE,
355
421
  INDEPENDENT_MACHINE_RESERVATION_FILE,
356
422
  InMemoryKek,
357
423
  KekUnavailableError,
358
424
  LEGACY_CONFIG_DIR_NAMES,
425
+ LEGACY_DAEMON_KEYCHAIN_SERVICE,
359
426
  LEGACY_NATIVE_ID_PREFIXES,
427
+ LIVE_DEFAULT_PROFILE,
428
+ LIVE_STATE_REFUSED_CODE,
360
429
  LOOPBACK_DEFAULT_MAX_BODY_BYTES,
361
430
  LOOPBACK_NO_PROXY_HOSTS,
362
431
  LinuxKek,
432
+ LiveStateRefusedError,
363
433
  LocalCallbackBindError,
364
434
  LocalCallbackDeniedError,
365
435
  LocalCallbackError,
@@ -370,6 +440,8 @@ var import_independentMachineReservation = require("./independentMachineReservat
370
440
  LoginInitError,
371
441
  LoopbackTargetRefusedError,
372
442
  MACHINE_IDENTITY_FILENAME,
443
+ MASTER_KEK_KEYCHAIN_ACCOUNT,
444
+ MASTER_KEK_KEYCHAIN_SERVICE,
373
445
  MAX_SIGS,
374
446
  MAX_TTL_DAYS,
375
447
  MIN_TTL_DAYS,
@@ -383,6 +455,7 @@ var import_independentMachineReservation = require("./independentMachineReservat
383
455
  PAIR_NONCE_LEN,
384
456
  PAIR_PUBKEY_LEN,
385
457
  PAIR_SECRET_LEN,
458
+ PENDING_HARDWARE_KEY_MAX_AGE_MS,
386
459
  PERSONAL_ACCESS_TOKEN_PREFIX,
387
460
  PROFILES_SEGMENT,
388
461
  PairBundleError,
@@ -394,6 +467,7 @@ var import_independentMachineReservation = require("./independentMachineReservat
394
467
  SENSITIVE_ENV_SUFFIXES,
395
468
  SENSITIVE_ENV_VARS,
396
469
  SENTINEL_TRIGGERING_FAILURES,
470
+ SERVER_DEVICE_KEY_ALGS_FIELD,
397
471
  SUPERSEDED_COPY_SUFFIX,
398
472
  SUPERSEDED_MARKER_SUFFIX,
399
473
  TRUSTED_FEED_ORIGINS,
@@ -415,14 +489,20 @@ var import_independentMachineReservation = require("./independentMachineReservat
415
489
  __resetMachineUuidCacheForTest,
416
490
  __resetShutdownGuardForTest,
417
491
  __resetUnknown401StreaksForTest,
492
+ __setAccountHomeForTest,
418
493
  __setCredEnvelopeStateForTest,
419
494
  __setDeviceIdentityStateForTest,
420
495
  __setFdReaderForTest,
421
496
  __setKekStrategyForTest,
497
+ __setUnreadableReloadIntervalForTest,
422
498
  __wrappedDekFilePathForTest,
423
499
  accessTokenHash,
500
+ accountHomeDir,
501
+ algForJwk,
424
502
  assemblePairBundleBase64,
425
503
  assertLoopbackHttpUrl,
504
+ assertMayMutateLiveKeychain,
505
+ assertMayMutateLiveState,
426
506
  buildArtifactMessage,
427
507
  buildCredentialAad,
428
508
  buildDeviceProof,
@@ -430,14 +510,18 @@ var import_independentMachineReservation = require("./independentMachineReservat
430
510
  buildPairAad,
431
511
  buildPairUrl,
432
512
  challenge,
513
+ classifyDaemonKeychainService,
433
514
  classifyRefreshResponse,
434
515
  classifyTokenKind,
435
516
  claudeSkillsLayoutEvidence,
436
517
  clearEnrollmentMarker,
437
518
  clearReauthState,
519
+ commitDeviceKeyCandidate,
520
+ commitPendingHardwareKey,
438
521
  compareReleaseVersions,
439
522
  configRootPath,
440
523
  configureAuthCore,
524
+ configureHardwareDeviceKeyHelper,
441
525
  consolidateProfileState,
442
526
  createDpopKey,
443
527
  createRefreshScheduler,
@@ -457,6 +541,8 @@ var import_independentMachineReservation = require("./independentMachineReservat
457
541
  describeDeviceKeySplit,
458
542
  describeLegacyState,
459
543
  describeMachineIdentity,
544
+ describeStoredDeviceKey,
545
+ discardPendingHardwareKey,
460
546
  emitAuthTelemetry,
461
547
  enrollWithServer,
462
548
  ensureMachineDaemonId,
@@ -509,17 +595,27 @@ var import_independentMachineReservation = require("./independentMachineReservat
509
595
  isDaemonChildEnv,
510
596
  isDaemonScope,
511
597
  isDeviceIdentityActive,
598
+ isDevicePublicJwk,
512
599
  isFirstPartyHarnessChannel,
513
600
  isJwkThumbprint,
601
+ isLiveKeychainService,
602
+ isLiveStateRefusal,
514
603
  isLoopbackAddress,
515
604
  isLoopbackHostname,
605
+ isMasterKekKeychainService,
606
+ isSessionKeychainService,
516
607
  isStaticTokenKind,
608
+ isTestProcess,
517
609
  isTrustedArtifactOrigin,
610
+ isUserOwnedSecretKeychainService,
518
611
  isValidRecoveryCode,
519
612
  jwkThumbprint,
613
+ keychainSuffixForDir,
520
614
  legacyDaemonUuids,
521
615
  legacyProfileStateDir,
522
616
  linkFirstPartyHarnessAliases,
617
+ liveKeychainServices,
618
+ liveStateRoot,
523
619
  loginWithLocalhost,
524
620
  loopbackFetch,
525
621
  maybeDecryptOnRead,
@@ -530,6 +626,7 @@ var import_independentMachineReservation = require("./independentMachineReservat
530
626
  normalizeHtu,
531
627
  normalizeRecoveryCode,
532
628
  openPairBundleBase64,
629
+ p256PublicJwkFromRaw,
533
630
  pairBase64ToUint8Array,
534
631
  pairBase64UrlToUint8Array,
535
632
  pairUint8ArrayToBase64,
@@ -539,16 +636,23 @@ var import_independentMachineReservation = require("./independentMachineReservat
539
636
  parsePairUrl,
540
637
  parseRecoveryCode,
541
638
  parseTtlDays,
639
+ persistPendingHardwareKey,
542
640
  persistReauthState,
641
+ prepareHardwareKeyCandidate,
642
+ probeHardwareDeviceKey,
543
643
  profileStateDir,
544
644
  profileStateFileLocations,
545
645
  profileStateFilePathsToClear,
646
+ proofSigningInput,
546
647
  publicJwkFromX,
547
648
  qualifyMachineUuid,
548
649
  readAuthFromFd,
549
650
  readIndependentMachineReservation,
651
+ readServerDeviceKeyAlgs,
550
652
  reauthCommand,
551
653
  refreshDaemonToken,
654
+ refusesLiveKeychainMutation,
655
+ refusesLiveStateInTest,
552
656
  registerZeroizeHook,
553
657
  reserveIndependentMachineProfile,
554
658
  resetCredEnvelope,
@@ -556,17 +660,23 @@ var import_independentMachineReservation = require("./independentMachineReservat
556
660
  resolveChannelManifestUrl,
557
661
  resolveConfigRoot,
558
662
  resolveFirstPartyHarnessChannel,
663
+ resolveHardwareDeviceKeyHelper,
559
664
  resolveProfileStateDir,
560
665
  resolveProfileStateFile,
666
+ rethrowIfLiveStateRefusal,
561
667
  revokeDaemonRefreshSession,
562
668
  runHeadersHelper,
563
669
  safeEqual,
564
670
  sanitizeSpawnEnv,
565
671
  setMachineUuidProfile,
566
672
  shutdownCredEnvelope,
673
+ signProofWith,
567
674
  signServerRequest,
675
+ signWithCandidate,
676
+ softwareEd25519Handle,
568
677
  splitKeyConvergencePolicy,
569
678
  startLocalCallback,
679
+ testProcessSignal,
570
680
  tierPermitsConfiguredAutoMode,
571
681
  tokenHash,
572
682
  verifyArtifact,
@@ -19,6 +19,7 @@ export { MacosKek } from './macos.js';
19
19
  export { LinuxKek } from './linux.js';
20
20
  export { WindowsKek } from './windows.js';
21
21
  export { zeroizeKekCaches, registerZeroizeHook } from './zeroize-registry.js';
22
+ export { classifyDaemonKeychainService, isMasterKekKeychainService, isSessionKeychainService, isUserOwnedSecretKeychainService, MASTER_KEK_KEYCHAIN_ACCOUNT, MASTER_KEK_KEYCHAIN_SERVICE, type DaemonKeychainServiceClass, } from './masterKekService.js';
22
23
  /**
23
24
  * @internal Test-only seam — inject a synthetic KEK strategy that wraps
24
25
  * with a fixed in-memory key. Resets to platform default when called
@@ -31,11 +31,17 @@ __export(index_exports, {
31
31
  InMemoryKek: () => InMemoryKek,
32
32
  KekUnavailableError: () => import_types2.KekUnavailableError,
33
33
  LinuxKek: () => import_linux2.LinuxKek,
34
+ MASTER_KEK_KEYCHAIN_ACCOUNT: () => import_masterKekService.MASTER_KEK_KEYCHAIN_ACCOUNT,
35
+ MASTER_KEK_KEYCHAIN_SERVICE: () => import_masterKekService.MASTER_KEK_KEYCHAIN_SERVICE,
34
36
  MacosKek: () => import_macos2.MacosKek,
35
37
  UnavailableKek: () => UnavailableKek,
36
38
  WindowsKek: () => import_windows2.WindowsKek,
37
39
  __setKekStrategyForTest: () => __setKekStrategyForTest,
40
+ classifyDaemonKeychainService: () => import_masterKekService.classifyDaemonKeychainService,
38
41
  getKekStrategy: () => getKekStrategy,
42
+ isMasterKekKeychainService: () => import_masterKekService.isMasterKekKeychainService,
43
+ isSessionKeychainService: () => import_masterKekService.isSessionKeychainService,
44
+ isUserOwnedSecretKeychainService: () => import_masterKekService.isUserOwnedSecretKeychainService,
39
45
  registerZeroizeHook: () => import_zeroize_registry.registerZeroizeHook,
40
46
  zeroizeKekCaches: () => import_zeroize_registry.zeroizeKekCaches
41
47
  });
@@ -49,6 +55,7 @@ var import_macos2 = require("./macos.js");
49
55
  var import_linux2 = require("./linux.js");
50
56
  var import_windows2 = require("./windows.js");
51
57
  var import_zeroize_registry = require("./zeroize-registry.js");
58
+ var import_masterKekService = require("./masterKekService.js");
52
59
  class UnsupportedPlatformKek {
53
60
  id;
54
61
  platform;
@@ -148,11 +155,17 @@ class UnavailableKek {
148
155
  InMemoryKek,
149
156
  KekUnavailableError,
150
157
  LinuxKek,
158
+ MASTER_KEK_KEYCHAIN_ACCOUNT,
159
+ MASTER_KEK_KEYCHAIN_SERVICE,
151
160
  MacosKek,
152
161
  UnavailableKek,
153
162
  WindowsKek,
154
163
  __setKekStrategyForTest,
164
+ classifyDaemonKeychainService,
155
165
  getKekStrategy,
166
+ isMasterKekKeychainService,
167
+ isSessionKeychainService,
168
+ isUserOwnedSecretKeychainService,
156
169
  registerZeroizeHook,
157
170
  zeroizeKekCaches
158
171
  });
@@ -27,6 +27,24 @@ type ReadFileSyncLike = (path: string, encoding: BufferEncoding) => string;
27
27
  * also clear the tier selection + KEK cache so the next call re-probes.
28
28
  */
29
29
  export declare function __setFsForTest(fn: ReadFileSyncLike | null): void;
30
+ /**
31
+ * Write the master KEK to the Secret Service. Uses stdin (base64-encoded)
32
+ * as required by `secret-tool store`. Idempotent — `secret-tool store`
33
+ * overwrites an existing item silently.
34
+ *
35
+ * `service` and `account` are passed in (rather than read from the
36
+ * module-level constants) so a `LinuxKek` instance constructed with an
37
+ * override stores under a unique Secret Service entry.
38
+ *
39
+ * Race note: see module-level comment above.
40
+ */
41
+ declare function writeKekToSecretService(kek: Buffer, service: string, account: string): Promise<void>;
42
+ /**
43
+ * @internal Test seam — the Secret Service write on its own, so a spec can reach the live-state
44
+ * guard without the tier probe getting in the way. A spec using it empties `PATH`, so that a
45
+ * guard which stopped firing reaches no `secret-tool` binary.
46
+ */
47
+ export declare const __writeKekToSecretServiceForTest: typeof writeKekToSecretService;
30
48
  /**
31
49
  * Zero out and drop every in-process master-KEK cache buffer (both the
32
50
  * Tier-2 by-service map and the Tier-3 single buffer).
@@ -32,6 +32,7 @@ __export(linux_exports, {
32
32
  __resetKekCacheForTest: () => __resetKekCacheForTest,
33
33
  __setExecFileForTest: () => __setExecFileForTest,
34
34
  __setFsForTest: () => __setFsForTest,
35
+ __writeKekToSecretServiceForTest: () => __writeKekToSecretServiceForTest,
35
36
  zeroizeLinuxKekCache: () => zeroizeLinuxKekCache
36
37
  });
37
38
  module.exports = __toCommonJS(linux_exports);
@@ -42,10 +43,12 @@ var import_node_fs = __toESM(require("node:fs"), 1);
42
43
  var import_credentialEnvelope = require("../credentialEnvelope.js");
43
44
  var import_types = require("./types.js");
44
45
  var import_zeroize_registry = require("./zeroize-registry.js");
46
+ var import_masterKekService = require("./masterKekService.js");
47
+ var import_liveState = require("../liveState.js");
45
48
  const KIND_LIBSECRET = "linux-libsecret-shellout";
46
49
  const KIND_HKDF = "linux-machineid-hkdf";
47
- const SS_SERVICE = "ai.skrr.daemon.kek";
48
- const SS_ACCOUNT = "master-kek-v1";
50
+ const SS_SERVICE = import_masterKekService.MASTER_KEK_KEYCHAIN_SERVICE;
51
+ const SS_ACCOUNT = import_masterKekService.MASTER_KEK_KEYCHAIN_ACCOUNT;
49
52
  const DBUS_TRANSPORT_ERRORS = [
50
53
  "D-Bus",
51
54
  "org.freedesktop.secrets",
@@ -198,6 +201,9 @@ async function writeKekToSecretService(kek, service, account) {
198
201
  if (kek.length !== import_credentialEnvelope.KEY_LEN) {
199
202
  throw new import_types.KekUnavailableError(KIND_LIBSECRET, `writeKekToSecretService: expected ${import_credentialEnvelope.KEY_LEN}-byte buffer, got ${kek.length}`);
200
203
  }
204
+ if (_execFileForTest === null) {
205
+ (0, import_liveState.assertMayMutateLiveKeychain)(service, `store the Secret Service item ${account} (a master KEK)`);
206
+ }
201
207
  const b64 = kek.toString("base64");
202
208
  try {
203
209
  await exec("secret-tool", ["store", "--label=skrr daemon master KEK", "service", service, "account", account], { input: b64 });
@@ -205,6 +211,7 @@ async function writeKekToSecretService(kek, service, account) {
205
211
  throw new import_types.KekUnavailableError(KIND_LIBSECRET, "secret-tool store failed", { cause: err });
206
212
  }
207
213
  }
214
+ const __writeKekToSecretServiceForTest = writeKekToSecretService;
208
215
  const _tier2KekCacheBySvc = /* @__PURE__ */ new Map();
209
216
  let _tier3KekCache = null;
210
217
  let _tierSelection = null;
@@ -367,6 +374,7 @@ class LinuxKek {
367
374
  } catch (err) {
368
375
  if (err instanceof import_types.KekUnavailableError)
369
376
  throw err;
377
+ (0, import_liveState.rethrowIfLiveStateRefusal)(err);
370
378
  throw new import_types.KekUnavailableError(this.id, err?.message ?? "shellout wrap failed", {
371
379
  cause: err
372
380
  });
@@ -420,5 +428,6 @@ class LinuxKek {
420
428
  __resetKekCacheForTest,
421
429
  __setExecFileForTest,
422
430
  __setFsForTest,
431
+ __writeKekToSecretServiceForTest,
423
432
  zeroizeLinuxKekCache
424
433
  });
@@ -21,6 +21,28 @@ export declare function __setExecFileForTest(fn: ExecFileLike | null): void;
21
21
  export declare function __resetSecurityProbeCacheForTest(): void;
22
22
  /** @internal Test seam — clear the resolved-keychain cache. */
23
23
  export declare function __resetResolvedKeychainCacheForTest(): void;
24
+ /**
25
+ * Create a master KEK without replacing an existing item. This key is shared
26
+ * by profiles, so even a first-use race in a different process must not
27
+ * overwrite the key protecting already wrapped credentials.
28
+ *
29
+ * The `service` / `account` parameters are threaded from the calling
30
+ * `MacosKek` instance so each instance keeps its own keychain entry.
31
+ *
32
+ * Explicit-keychain target: the resolved login-keychain path is passed
33
+ * as the trailing positional argument to `add-generic-password` so
34
+ * `security(1)` cannot fall back to a "default keychain" lookup that
35
+ * triggers a system-modal `Keychain Not Found` dialog. If no keychain
36
+ * resolves, throw `KekUnavailableError` immediately rather than
37
+ * shelling out at all.
38
+ */
39
+ declare function writeKekToKeychain(kek: Buffer, service: string, account: string): Promise<void>;
40
+ /**
41
+ * @internal Test seam — the Keychain write on its own, so a spec can reach the live-state
42
+ * guard without `wrap()`'s `security` probe getting in the way. A spec using it empties `PATH`,
43
+ * so that a guard which stopped firing reaches no `security` binary.
44
+ */
45
+ export declare const __writeKekToKeychainForTest: typeof writeKekToKeychain;
24
46
  /**
25
47
  * Zero out and drop every cached master-KEK buffer.
26
48
  *
@@ -34,6 +34,7 @@ __export(macos_exports, {
34
34
  __resetResolvedKeychainCacheForTest: () => __resetResolvedKeychainCacheForTest,
35
35
  __resetSecurityProbeCacheForTest: () => __resetSecurityProbeCacheForTest,
36
36
  __setExecFileForTest: () => __setExecFileForTest,
37
+ __writeKekToKeychainForTest: () => __writeKekToKeychainForTest,
37
38
  zeroizeMacosKekCache: () => zeroizeMacosKekCache
38
39
  });
39
40
  module.exports = __toCommonJS(macos_exports);
@@ -46,9 +47,11 @@ var import_node_fs = __toESM(require("node:fs"), 1);
46
47
  var import_credentialEnvelope = require("../credentialEnvelope.js");
47
48
  var import_types = require("./types.js");
48
49
  var import_zeroize_registry = require("./zeroize-registry.js");
50
+ var import_masterKekService = require("./masterKekService.js");
51
+ var import_liveState = require("../liveState.js");
49
52
  const KIND_SHELLOUT = "macos-keychain-shellout";
50
- const KEYCHAIN_SERVICE = "ai.skrr.daemon.kek";
51
- const KEYCHAIN_ACCOUNT = "master-kek-v1";
53
+ const KEYCHAIN_SERVICE = import_masterKekService.MASTER_KEK_KEYCHAIN_SERVICE;
54
+ const KEYCHAIN_ACCOUNT = import_masterKekService.MASTER_KEK_KEYCHAIN_ACCOUNT;
52
55
  const SECURITY_ITEM_NOT_FOUND = 44;
53
56
  const execFileAsync = (0, import_node_util.promisify)(import_node_child_process.execFile);
54
57
  let _execFileForTest = null;
@@ -168,6 +171,11 @@ async function writeKekToKeychain(kek, service, account) {
168
171
  if (keychainPath === null) {
169
172
  throw new import_types.KekUnavailableError(KIND_SHELLOUT, "no user login keychain resolvable; cannot write master KEK");
170
173
  }
174
+ if (_execFileForTest === null) {
175
+ (0, import_liveState.assertMayMutateLiveKeychain)(service, `add the Keychain item ${account} (a master KEK)`, {
176
+ keychainFile: keychainPath
177
+ });
178
+ }
171
179
  const b64 = kek.toString("base64");
172
180
  try {
173
181
  await exec("security", [
@@ -193,6 +201,7 @@ async function writeKekToKeychain(kek, service, account) {
193
201
  });
194
202
  }
195
203
  }
204
+ const __writeKekToKeychainForTest = writeKekToKeychain;
196
205
  const _kekCacheBySvc = /* @__PURE__ */ new Map();
197
206
  (0, import_zeroize_registry.registerZeroizeHook)(() => zeroizeMacosKekCache());
198
207
  function zeroizeMacosKekCache() {
@@ -222,6 +231,7 @@ async function resolveOrCreateKek(service, account) {
222
231
  try {
223
232
  await writeKekToKeychain(fresh, service, account);
224
233
  } catch (error) {
234
+ (0, import_liveState.rethrowIfLiveStateRefusal)(error);
225
235
  const winner = await readKekFromKeychain(service, account).catch(() => null);
226
236
  if (!winner)
227
237
  throw error;
@@ -341,6 +351,7 @@ class MacosKek {
341
351
  } catch (err) {
342
352
  if (err instanceof import_types.KekUnavailableError)
343
353
  throw err;
354
+ (0, import_liveState.rethrowIfLiveStateRefusal)(err);
344
355
  throw new import_types.KekUnavailableError(this.id, err?.message ?? "shellout wrap failed", {
345
356
  cause: err
346
357
  });
@@ -397,5 +408,6 @@ class MacosKek {
397
408
  __resetResolvedKeychainCacheForTest,
398
409
  __resetSecurityProbeCacheForTest,
399
410
  __setExecFileForTest,
411
+ __writeKekToKeychainForTest,
400
412
  zeroizeMacosKekCache
401
413
  });