@phnx-labs/agents-cli 1.22.84 → 1.22.85

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 (257) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/README.md +80 -53
  3. package/dist/bootstrap.d.ts +7 -6
  4. package/dist/bootstrap.js +20 -27
  5. package/dist/cli/command-registry.js +5 -1
  6. package/dist/commands/accounts.d.ts +6 -13
  7. package/dist/commands/accounts.js +330 -143
  8. package/dist/commands/apply.js +1 -1
  9. package/dist/commands/auth-mint.d.ts +7 -3
  10. package/dist/commands/auth-mint.js +21 -9
  11. package/dist/commands/auth.js +2 -3
  12. package/dist/commands/browser.js +10 -10
  13. package/dist/commands/daemon.d.ts +7 -3
  14. package/dist/commands/daemon.js +40 -25
  15. package/dist/commands/doctor.js +28 -2
  16. package/dist/commands/exec.js +87 -39
  17. package/dist/commands/fleet-capture.js +21 -2
  18. package/dist/commands/harness-wizard.js +2 -2
  19. package/dist/commands/lease.js +7 -12
  20. package/dist/commands/profiles.d.ts +2 -2
  21. package/dist/commands/profiles.js +20 -13
  22. package/dist/commands/repo.js +3 -3
  23. package/dist/commands/run-account-picker.d.ts +3 -3
  24. package/dist/commands/run-account-picker.js +29 -30
  25. package/dist/commands/secrets-passthrough.d.ts +20 -0
  26. package/dist/commands/secrets-passthrough.js +43 -0
  27. package/dist/commands/setup-accounts.d.ts +3 -2
  28. package/dist/commands/setup-accounts.js +4 -4
  29. package/dist/commands/setup-secrets.d.ts +16 -21
  30. package/dist/commands/setup-secrets.js +43 -224
  31. package/dist/commands/ssh.js +2 -2
  32. package/dist/commands/sync.js +1 -1
  33. package/dist/commands/update.d.ts +10 -0
  34. package/dist/commands/update.js +43 -40
  35. package/dist/commands/versions.d.ts +11 -11
  36. package/dist/commands/versions.js +131 -83
  37. package/dist/commands/view.d.ts +1 -9
  38. package/dist/commands/view.js +41 -55
  39. package/dist/commands/webhook.js +5 -5
  40. package/dist/commands/workflows.js +2 -1
  41. package/dist/index.d.ts +12 -12
  42. package/dist/index.js +13 -42
  43. package/dist/lib/account-capabilities.d.ts +1 -1
  44. package/dist/lib/account-capabilities.js +1 -1
  45. package/dist/lib/account-catalog.d.ts +121 -6
  46. package/dist/lib/account-catalog.js +421 -7
  47. package/dist/lib/account-registry.d.ts +8 -30
  48. package/dist/lib/account-registry.js +36 -79
  49. package/dist/lib/account-schema.d.ts +1 -1
  50. package/dist/lib/account-schema.js +1 -1
  51. package/dist/lib/accounting/account-pool-collect.js +16 -4
  52. package/dist/lib/accounting/rotate.d.ts +20 -7
  53. package/dist/lib/accounting/rotate.js +89 -13
  54. package/dist/lib/accounting/usage.js +11 -16
  55. package/dist/lib/accounts/add.d.ts +138 -0
  56. package/dist/lib/accounts/add.js +651 -0
  57. package/dist/lib/accounts/migrate.d.ts +117 -0
  58. package/dist/lib/accounts/migrate.js +536 -0
  59. package/dist/lib/accounts/slots.d.ts +13 -0
  60. package/dist/lib/accounts/slots.js +100 -0
  61. package/dist/lib/agent-spec/agents.d.ts +16 -0
  62. package/dist/lib/agent-spec/agents.js +32 -4
  63. package/dist/lib/app-bundle-install.js +5 -4
  64. package/dist/lib/auth-health.d.ts +3 -0
  65. package/dist/lib/auth-health.js +11 -0
  66. package/dist/lib/auth-mint.d.ts +52 -16
  67. package/dist/lib/auth-mint.js +117 -39
  68. package/dist/lib/browser/chrome.d.ts +1 -1
  69. package/dist/lib/browser/chrome.js +5 -5
  70. package/dist/lib/byok-usage.js +3 -3
  71. package/dist/lib/claude-account-token.d.ts +47 -3
  72. package/dist/lib/claude-account-token.js +172 -50
  73. package/dist/lib/cloud/antigravity.js +4 -4
  74. package/dist/lib/cloud/cursor.js +4 -4
  75. package/dist/lib/crabbox/cli.d.ts +1 -1
  76. package/dist/lib/crabbox/cli.js +6 -6
  77. package/dist/lib/crabbox/runtimes.d.ts +3 -3
  78. package/dist/lib/crabbox/runtimes.js +5 -5
  79. package/dist/lib/daemon/account-state-daemon-service.d.ts +37 -1
  80. package/dist/lib/daemon/account-state-daemon-service.js +199 -3
  81. package/dist/lib/daemon/auth-sync-service.js +28 -1
  82. package/dist/lib/daemon/daemon.d.ts +6 -16
  83. package/dist/lib/daemon/daemon.js +52 -97
  84. package/dist/lib/daemon/daemon.test-fixture.d.ts +7 -9
  85. package/dist/lib/daemon/daemon.test-fixture.js +22 -40
  86. package/dist/lib/daemon/harness-update-service.d.ts +1 -1
  87. package/dist/lib/daemon/harness-update-service.js +1 -1
  88. package/dist/lib/daemon/runner.d.ts +15 -3
  89. package/dist/lib/daemon/runner.js +49 -24
  90. package/dist/lib/daemon-health.d.ts +1 -2
  91. package/dist/lib/daemon-health.js +7 -6
  92. package/dist/lib/daemon-services.d.ts +1 -1
  93. package/dist/lib/daemon-services.js +1 -11
  94. package/dist/lib/daemon-webhooks.d.ts +8 -7
  95. package/dist/lib/daemon-webhooks.js +10 -9
  96. package/dist/lib/device-config.js +1 -1
  97. package/dist/lib/devices/doctor-findings.d.ts +1 -1
  98. package/dist/lib/devices/harness-inventory.d.ts +39 -0
  99. package/dist/lib/devices/harness-inventory.js +126 -4
  100. package/dist/lib/doctor-diff.js +2 -1
  101. package/dist/lib/exec-account-home.d.ts +38 -0
  102. package/dist/lib/exec-account-home.js +164 -0
  103. package/dist/lib/exec.d.ts +30 -0
  104. package/dist/lib/exec.js +101 -31
  105. package/dist/lib/fleet/apply.d.ts +2 -2
  106. package/dist/lib/fleet/apply.js +4 -4
  107. package/dist/lib/fleet/auth-sync.js +4 -3
  108. package/dist/lib/fleet-shared-repo-sync.js +6 -9
  109. package/dist/lib/harness/adapter.d.ts +7 -7
  110. package/dist/lib/harness/adapter.js +10 -6
  111. package/dist/lib/harness/adapters/grok.js +8 -3
  112. package/dist/lib/harness/adapters/muse.js +1 -1
  113. package/dist/lib/harness/adapters/opencode.js +12 -3
  114. package/dist/lib/harness-auth-capabilities.d.ts +61 -0
  115. package/dist/lib/harness-auth-capabilities.js +52 -0
  116. package/dist/lib/helper-versions.d.ts +6 -4
  117. package/dist/lib/helper-versions.js +5 -4
  118. package/dist/lib/hosts/credential-transport.d.ts +10 -0
  119. package/dist/lib/hosts/credential-transport.js +37 -0
  120. package/dist/lib/hosts/dispatch.d.ts +7 -0
  121. package/dist/lib/hosts/dispatch.js +13 -6
  122. package/dist/lib/identity/client.d.ts +3 -3
  123. package/dist/lib/identity/client.js +3 -3
  124. package/dist/lib/installations/index.d.ts +1 -1
  125. package/dist/lib/installations/index.js +1 -1
  126. package/dist/lib/installations/migrate.js +9 -0
  127. package/dist/lib/installations/resolve.js +1 -1
  128. package/dist/lib/installations/shims.d.ts +15 -0
  129. package/dist/lib/installations/shims.js +69 -0
  130. package/dist/lib/installations/store.d.ts +43 -0
  131. package/dist/lib/installations/store.js +75 -7
  132. package/dist/lib/installations/versions.js +1 -1
  133. package/dist/lib/menubar/install-menubar.d.ts +3 -3
  134. package/dist/lib/menubar/install-menubar.js +3 -3
  135. package/dist/lib/native-accounts.d.ts +35 -0
  136. package/dist/lib/native-accounts.js +41 -0
  137. package/dist/lib/net-close.d.ts +11 -0
  138. package/dist/lib/net-close.js +25 -0
  139. package/dist/lib/openclaw-keychain.js +27 -1
  140. package/dist/lib/profiles.js +22 -9
  141. package/dist/lib/project-resources.js +1 -1
  142. package/dist/lib/reserved-stores.d.ts +53 -0
  143. package/dist/lib/reserved-stores.js +120 -0
  144. package/dist/lib/secrets-client.d.ts +191 -0
  145. package/dist/lib/secrets-client.js +710 -0
  146. package/dist/lib/secrets-policy.d.ts +222 -0
  147. package/dist/lib/secrets-policy.js +483 -0
  148. package/dist/lib/secrets-types.d.ts +188 -0
  149. package/dist/lib/secrets-types.js +24 -0
  150. package/dist/lib/service-manifest.js +3 -4
  151. package/dist/lib/session/db.d.ts +18 -0
  152. package/dist/lib/session/db.js +47 -14
  153. package/dist/lib/session/sync/config.js +2 -2
  154. package/dist/lib/sha256-asset.d.ts +11 -16
  155. package/dist/lib/sha256-asset.js +11 -16
  156. package/dist/lib/share/config.js +14 -5
  157. package/dist/lib/signin-badge.d.ts +26 -0
  158. package/dist/lib/signin-badge.js +42 -0
  159. package/dist/lib/staleness/detectors/workflows.js +3 -105
  160. package/dist/lib/staleness/writers/workflows.js +2 -1
  161. package/dist/lib/state.d.ts +7 -4
  162. package/dist/lib/state.js +18 -7
  163. package/dist/lib/sync-umbrella.js +2 -2
  164. package/dist/lib/teams/agents.js +1 -1
  165. package/dist/lib/types.d.ts +74 -33
  166. package/dist/lib/view-types.d.ts +6 -3
  167. package/dist/lib/workflows-registry.d.ts +71 -0
  168. package/dist/lib/workflows-registry.js +280 -0
  169. package/dist/lib/workflows.d.ts +21 -21
  170. package/dist/lib/workflows.js +12 -327
  171. package/package.json +2 -3
  172. package/scripts/postinstall.js +4 -29
  173. package/dist/commands/secrets-import.d.ts +0 -18
  174. package/dist/commands/secrets-import.js +0 -74
  175. package/dist/commands/secrets-migrate.d.ts +0 -25
  176. package/dist/commands/secrets-migrate.js +0 -334
  177. package/dist/commands/secrets-rotate-passphrase.d.ts +0 -17
  178. package/dist/commands/secrets-rotate-passphrase.js +0 -96
  179. package/dist/commands/secrets-sync.d.ts +0 -11
  180. package/dist/commands/secrets-sync.js +0 -153
  181. package/dist/commands/secrets-vault.d.ts +0 -10
  182. package/dist/commands/secrets-vault.js +0 -130
  183. package/dist/commands/secrets.d.ts +0 -212
  184. package/dist/commands/secrets.js +0 -3030
  185. package/dist/lib/accounts/connect.d.ts +0 -176
  186. package/dist/lib/accounts/connect.js +0 -453
  187. package/dist/lib/daemon/keychain-reap-service.d.ts +0 -17
  188. package/dist/lib/daemon/keychain-reap-service.js +0 -32
  189. package/dist/lib/daemon/secrets-broker-service.d.ts +0 -21
  190. package/dist/lib/daemon/secrets-broker-service.js +0 -51
  191. package/dist/lib/secrets/agent.d.ts +0 -358
  192. package/dist/lib/secrets/agent.js +0 -1291
  193. package/dist/lib/secrets/audit.d.ts +0 -46
  194. package/dist/lib/secrets/audit.js +0 -101
  195. package/dist/lib/secrets/bundles.d.ts +0 -290
  196. package/dist/lib/secrets/bundles.js +0 -1547
  197. package/dist/lib/secrets/download-keychain.d.ts +0 -47
  198. package/dist/lib/secrets/download-keychain.js +0 -70
  199. package/dist/lib/secrets/drivers/rush.d.ts +0 -14
  200. package/dist/lib/secrets/drivers/rush.js +0 -90
  201. package/dist/lib/secrets/fallback.d.ts +0 -48
  202. package/dist/lib/secrets/fallback.js +0 -48
  203. package/dist/lib/secrets/filestore.d.ts +0 -222
  204. package/dist/lib/secrets/filestore.js +0 -1099
  205. package/dist/lib/secrets/headless.d.ts +0 -43
  206. package/dist/lib/secrets/headless.js +0 -56
  207. package/dist/lib/secrets/icloud-import.d.ts +0 -79
  208. package/dist/lib/secrets/icloud-import.js +0 -206
  209. package/dist/lib/secrets/index.d.ts +0 -451
  210. package/dist/lib/secrets/index.js +0 -1568
  211. package/dist/lib/secrets/install-helper.d.ts +0 -72
  212. package/dist/lib/secrets/install-helper.js +0 -245
  213. package/dist/lib/secrets/lease.d.ts +0 -25
  214. package/dist/lib/secrets/lease.js +0 -44
  215. package/dist/lib/secrets/linux.d.ts +0 -77
  216. package/dist/lib/secrets/linux.js +0 -393
  217. package/dist/lib/secrets/list-filter.d.ts +0 -109
  218. package/dist/lib/secrets/list-filter.js +0 -261
  219. package/dist/lib/secrets/mcp.d.ts +0 -93
  220. package/dist/lib/secrets/mcp.js +0 -211
  221. package/dist/lib/secrets/profiles.d.ts +0 -10
  222. package/dist/lib/secrets/profiles.js +0 -13
  223. package/dist/lib/secrets/push.d.ts +0 -133
  224. package/dist/lib/secrets/push.js +0 -273
  225. package/dist/lib/secrets/rc-hygiene.d.ts +0 -63
  226. package/dist/lib/secrets/rc-hygiene.js +0 -143
  227. package/dist/lib/secrets/read-backoff.d.ts +0 -27
  228. package/dist/lib/secrets/read-backoff.js +0 -64
  229. package/dist/lib/secrets/reaper.d.ts +0 -90
  230. package/dist/lib/secrets/reaper.js +0 -243
  231. package/dist/lib/secrets/remote.d.ts +0 -152
  232. package/dist/lib/secrets/remote.js +0 -344
  233. package/dist/lib/secrets/reserved-sync.d.ts +0 -66
  234. package/dist/lib/secrets/reserved-sync.js +0 -147
  235. package/dist/lib/secrets/scope.d.ts +0 -26
  236. package/dist/lib/secrets/scope.js +0 -29
  237. package/dist/lib/secrets/session-store.d.ts +0 -107
  238. package/dist/lib/secrets/session-store.js +0 -342
  239. package/dist/lib/secrets/sync-backend.d.ts +0 -48
  240. package/dist/lib/secrets/sync-backend.js +0 -13
  241. package/dist/lib/secrets/sync-commands.d.ts +0 -21
  242. package/dist/lib/secrets/sync-commands.js +0 -21
  243. package/dist/lib/secrets/sync.d.ts +0 -48
  244. package/dist/lib/secrets/sync.js +0 -237
  245. package/dist/lib/secrets/unlock-hints.d.ts +0 -27
  246. package/dist/lib/secrets/unlock-hints.js +0 -36
  247. package/dist/lib/secrets/usage-db.d.ts +0 -46
  248. package/dist/lib/secrets/usage-db.js +0 -96
  249. package/dist/lib/secrets/vault-age-helper.d.ts +0 -1
  250. package/dist/lib/secrets/vault-age-helper.js +0 -34
  251. package/dist/lib/secrets/vault.d.ts +0 -49
  252. package/dist/lib/secrets/vault.js +0 -399
  253. package/dist/lib/secrets/windows.d.ts +0 -81
  254. package/dist/lib/secrets/windows.js +0 -556
  255. package/scripts/install-helper.js +0 -97
  256. /package/dist/lib/{secrets/sync-passphrase.d.ts → sync-passphrase.d.ts} +0 -0
  257. /package/dist/lib/{secrets/sync-passphrase.js → sync-passphrase.js} +0 -0
@@ -0,0 +1,222 @@
1
+ import { type SecretsContext } from './secrets-client.js';
2
+ import type { PushBundleResult } from './secrets-types.js';
3
+ import type { AgentId, Meta, NativeAccountRecord } from './types.js';
4
+ import { type DeviceProfile } from './devices/registry.js';
5
+ import { type SharedAuthStatus } from './fleet-shared-state.js';
6
+ import { selfConfiguredDeviceRole } from './device-config.js';
7
+ import { AUTH_STORE_ALIAS, AUTH_BUNDLE_NAME, AUTH_BUNDLE_BACKEND, RESERVED_BUNDLE_NAMES, isReservedBundleName, ReservedBundleWrongBackendError, assertReservedAuthBackend, isReservedBundleBackendError, RESERVED_STORES, reservedStoreName, isReservedStoreName, assertStorableCredentialKind, inspectReservedAuthBundle, type StorableCredentialKind } from './reserved-stores.js';
8
+ export { AUTH_STORE_ALIAS, AUTH_BUNDLE_NAME, AUTH_BUNDLE_BACKEND, RESERVED_BUNDLE_NAMES, isReservedBundleName, ReservedBundleWrongBackendError, assertReservedAuthBackend, isReservedBundleBackendError, RESERVED_STORES, reservedStoreName, isReservedStoreName, assertStorableCredentialKind, inspectReservedAuthBundle, type StorableCredentialKind, };
9
+ /** Filter `names` down to the ones the active resource profile allows for `secrets`. */
10
+ export declare function filterBundleNamesForActiveProfile(names: string[]): string[];
11
+ /**
12
+ * `SecretsContext.allowedBundles` for the active resource profile, or
13
+ * `undefined` when no profile is active (full trust — the client's default).
14
+ * `allNames` is the caller's already-fetched full bundle listing (e.g. from
15
+ * `listBundlesSync()`), so this stays a pure filter with no extra round trip.
16
+ */
17
+ export declare function resolveAllowedBundlesForActiveProfile(allNames: string[]): string[] | undefined;
18
+ /**
19
+ * The `SecretsContext` a run should pass to every bundle resolution it makes:
20
+ * the run's harness as the opaque `scope`, plus `allowedBundles` computed from
21
+ * a fresh full bundle listing when a resource profile is active (a stale
22
+ * listing could exclude a bundle created after the profile was set). No
23
+ * profile active means full trust and no extra round trip.
24
+ */
25
+ export declare function resolveSecretsContextForRun(scope?: string): Promise<SecretsContext | undefined>;
26
+ /** Parse a `--secrets` flag value into its bundle name and optional `@host`. */
27
+ export declare function splitBundleRef(ref: string): {
28
+ bundle: string;
29
+ host?: string;
30
+ };
31
+ /** A remote (bundle@host) reference does not yet support key-subset or expiry overrides. */
32
+ export declare function assertRemoteBundleFlagsUnsupported(bundleName: string, host: string, opts: {
33
+ keys?: string[];
34
+ allowExpired?: boolean;
35
+ }, flagLabels: {
36
+ keysFlag: string;
37
+ allowExpiredFlag: string;
38
+ }): void;
39
+ /** Each import/read-back SSH operation gets this deadline plus the SSH hard-kill grace. */
40
+ export declare const AUTH_SYNC_PUSH_DEADLINE_MS = 20000;
41
+ export interface AuthSyncDevice {
42
+ name: string;
43
+ reachable: boolean;
44
+ pinned: boolean;
45
+ remoteAuth: SharedAuthStatus | 'unknown';
46
+ }
47
+ export type AuthSyncPlanItem = {
48
+ action: 'push';
49
+ device: string;
50
+ } | {
51
+ action: 'skip';
52
+ device: string;
53
+ reason: string;
54
+ };
55
+ export declare function planAuthBundlePush(localAuthOk: boolean, localIsPublisher: boolean, devices: AuthSyncDevice[]): AuthSyncPlanItem[];
56
+ export interface AuthSyncResult {
57
+ publisher: string | null;
58
+ stateChanged: boolean;
59
+ pushed: string[];
60
+ skipped: Array<{
61
+ device: string;
62
+ reason: string;
63
+ }>;
64
+ errors: Array<{
65
+ device: string;
66
+ message: string;
67
+ }>;
68
+ }
69
+ export interface AuthSyncDeps {
70
+ inspectLocal?: () => {
71
+ exists: boolean;
72
+ ok: boolean;
73
+ };
74
+ listDevices?: () => DeviceProfile[];
75
+ localName?: string;
76
+ userAgentsDir?: string;
77
+ isPinned?: (name: string) => boolean;
78
+ push?: (bundle: string, host: string) => Promise<PushBundleResult>;
79
+ sshTarget?: (device: DeviceProfile) => string;
80
+ }
81
+ export interface PublishAuthVerdictOptions {
82
+ inspectLocal?: () => {
83
+ exists: boolean;
84
+ ok: boolean;
85
+ };
86
+ localName?: string;
87
+ userAgentsDir?: string;
88
+ }
89
+ export interface PublishAuthVerdictResult {
90
+ device: string;
91
+ status: SharedAuthStatus;
92
+ changed: boolean;
93
+ error: string | null;
94
+ }
95
+ /** Publish only safe readiness metadata; useful immediately before a repo push. */
96
+ export declare function publishReservedAuthVerdict(options?: PublishAuthVerdictOptions): Promise<PublishAuthVerdictResult>;
97
+ /**
98
+ * Publish local readiness, elect one ready source, then asynchronously provision
99
+ * only peers whose shared verdict says the bundle is missing.
100
+ */
101
+ export declare function syncReservedAuthBundle(deps?: AuthSyncDeps): Promise<AuthSyncResult>;
102
+ /** One account's durable worker credential, resolved to (bundle, key). */
103
+ export interface ReservedSyncAccount {
104
+ accountId: string;
105
+ harness: AgentId;
106
+ /** Reserved store `__<harness>__`, or the legacy `auth` alias for a pre-T1 claude row. */
107
+ bundle: string;
108
+ /** Storage key `<ENV>_<accountId>` (or the legacy email-keyed claude key). */
109
+ key: string;
110
+ /**
111
+ * `workerCredential.mintedAt` -- a re-mint bumps it, so a delivered-memo hit on
112
+ * the old value re-pushes. `'legacy'` for a pre-T1 claude row with no field.
113
+ */
114
+ fingerprint: string;
115
+ }
116
+ /** A peer as the plan sees it: its role, reachability, and the keys it is KNOWN to hold. */
117
+ export interface ReservedSyncPeer {
118
+ name: string;
119
+ /** `personal`/`desktop` -- receives the account row, never a durable key. */
120
+ headed: boolean;
121
+ reachable: boolean;
122
+ pinned: boolean;
123
+ /** bundle -> keys the peer already holds at the current fingerprint. Absent ⇒ none known. */
124
+ presentKeys: Record<string, ReadonlySet<string>>;
125
+ }
126
+ export type ReservedSyncPlanItem = {
127
+ action: 'push';
128
+ device: string;
129
+ bundle: string;
130
+ keys: string[];
131
+ } | {
132
+ action: 'skip';
133
+ device: string;
134
+ reason: string;
135
+ };
136
+ /**
137
+ * Pure plan: for each worker peer, push each bundle it is missing at least one
138
+ * key of. Deterministic (peers and bundles sorted) so it pins exactly in tests.
139
+ * A headed peer is skipped BEFORE any key comparison -- it never receives a key.
140
+ */
141
+ export declare function planReservedStoreSync(accounts: ReservedSyncAccount[], peers: ReservedSyncPeer[]): ReservedSyncPlanItem[];
142
+ /**
143
+ * Every portable account's durable worker credential, resolved to (bundle, key).
144
+ * A T1 row carries `workerCredential`; a claude row predating T1 has none, so it
145
+ * falls back to the legacy `auth` bundle keyed by the account email -- the
146
+ * legacy fallback for claude rows that predate T1. An account with no derivable
147
+ * durable credential (per-device harness, or a non-claude row with no
148
+ * `workerCredential`) is not a sync target.
149
+ */
150
+ export declare function reservedSyncTargets(meta: Pick<Meta, 'accounts' | 'deviceAccounts'>): ReservedSyncAccount[];
151
+ export declare function readDeliveryMemo(root?: string): Record<string, string>;
152
+ /**
153
+ * The keys a peer is KNOWN to hold, per bundle, from what we have delivered to it
154
+ * (memo, matched by fingerprint) plus the coarse legacy-`auth` verdict: a peer
155
+ * reporting `auth.status === 'ready'` is known to hold every legacy `auth` key.
156
+ * Reserved `__<harness>__` bundles have no coarse verdict, so their presence comes
157
+ * from the memo alone -- which is what makes a newly-added reserved account push.
158
+ */
159
+ export declare function peerPresentKeys(peer: string, accounts: ReservedSyncAccount[], memo: Record<string, string>, legacyAuthReady: boolean): Record<string, ReadonlySet<string>>;
160
+ export interface ReservedStoreSyncResult {
161
+ publisher: string | null;
162
+ pushed: Array<{
163
+ device: string;
164
+ bundle: string;
165
+ keys: string[];
166
+ }>;
167
+ skipped: Array<{
168
+ device: string;
169
+ reason: string;
170
+ }>;
171
+ errors: Array<{
172
+ device: string;
173
+ message: string;
174
+ }>;
175
+ }
176
+ export interface ReservedStoreSyncDeps {
177
+ listDevices?: () => DeviceProfile[];
178
+ localName?: string;
179
+ userAgentsDir?: string;
180
+ cacheDir?: string;
181
+ readMetaFn?: () => Pick<Meta, 'accounts' | 'deviceAccounts'>;
182
+ isPinned?: (name: string) => boolean;
183
+ peerRole?: (name: string) => ReturnType<typeof selfConfiguredDeviceRole>;
184
+ localReady?: boolean;
185
+ /** Does THIS publisher hold (bundle, key) to push? Defaults to a local bundle read. */
186
+ hasLocalKey?: (bundle: string, key: string) => boolean;
187
+ push?: (bundle: string, host: string) => Promise<PushBundleResult>;
188
+ sshTarget?: (device: DeviceProfile) => string;
189
+ }
190
+ /**
191
+ * Push every portable account's reserved store to the worker peers that are
192
+ * missing it, per key and per role. Reuses the same election as
193
+ * {@link syncReservedAuthBundle} (one deterministic ready publisher pushes) so
194
+ * there is no second scheduler. The daemon runs this each tick.
195
+ */
196
+ export declare function syncReservedStores(deps?: ReservedStoreSyncDeps): Promise<ReservedStoreSyncResult>;
197
+ export interface ReconcileWorkerSlotsResult {
198
+ provisioned: string[];
199
+ skipped: Array<{
200
+ accountId: string;
201
+ reason: string;
202
+ }>;
203
+ errors: Array<{
204
+ accountId: string;
205
+ message: string;
206
+ }>;
207
+ }
208
+ export interface ReconcileWorkerSlotsDeps {
209
+ selfRole?: ReturnType<typeof selfConfiguredDeviceRole>;
210
+ readMetaFn?: () => Pick<Meta, 'accounts' | 'deviceAccounts'>;
211
+ hasLocalKey?: (bundle: string, key: string) => boolean;
212
+ provision?: (account: NativeAccountRecord) => void;
213
+ }
214
+ /**
215
+ * Worker-side: after a durable key lands, materialize a slot for each portable
216
+ * account whose credential is now present locally. Runs only on a NON-headed
217
+ * (worker or unmarked) device -- a headed device provisions its slots from an
218
+ * interactive native login (`accounts add`), never from an injected durable key
219
+ * (invariant 7). Idempotent: an account already backed by a `durable` slot is
220
+ * skipped.
221
+ */
222
+ export declare function reconcileLocalWorkerSlots(deps?: ReconcileWorkerSlotsDeps): ReconcileWorkerSlotsResult;