@cleocode/core 2026.9.25 → 2026.10.1

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 (236) hide show
  1. package/dist/admin/import-tasks.d.ts.map +1 -1
  2. package/dist/admin/import-tasks.js +5 -2
  3. package/dist/admin/import-tasks.js.map +1 -1
  4. package/dist/admin/import.d.ts.map +1 -1
  5. package/dist/admin/import.js +7 -2
  6. package/dist/admin/import.js.map +1 -1
  7. package/dist/build-provenance.json +2 -2
  8. package/dist/cloud/index.d.ts +1 -0
  9. package/dist/cloud/index.d.ts.map +1 -1
  10. package/dist/cloud/index.js +1 -0
  11. package/dist/cloud/index.js.map +1 -1
  12. package/dist/cloud/nexus-attach.d.ts +94 -0
  13. package/dist/cloud/nexus-attach.d.ts.map +1 -0
  14. package/dist/cloud/nexus-attach.js +192 -0
  15. package/dist/cloud/nexus-attach.js.map +1 -0
  16. package/dist/cloud/nexus-auth.d.ts +41 -4
  17. package/dist/cloud/nexus-auth.d.ts.map +1 -1
  18. package/dist/cloud/nexus-auth.js +151 -38
  19. package/dist/cloud/nexus-auth.js.map +1 -1
  20. package/dist/cloud/nexus-cloud-status.d.ts +132 -0
  21. package/dist/cloud/nexus-cloud-status.d.ts.map +1 -0
  22. package/dist/cloud/nexus-cloud-status.js +440 -0
  23. package/dist/cloud/nexus-cloud-status.js.map +1 -0
  24. package/dist/cloud/nexus-cloud.d.ts +179 -0
  25. package/dist/cloud/nexus-cloud.d.ts.map +1 -0
  26. package/dist/cloud/nexus-cloud.js +296 -0
  27. package/dist/cloud/nexus-cloud.js.map +1 -0
  28. package/dist/cloud/nexus-credentials.js +2 -2
  29. package/dist/cloud/nexus-credentials.js.map +1 -1
  30. package/dist/cloud/nexus-device.d.ts +834 -0
  31. package/dist/cloud/nexus-device.d.ts.map +1 -0
  32. package/dist/cloud/nexus-device.js +1727 -0
  33. package/dist/cloud/nexus-device.js.map +1 -0
  34. package/dist/cloud/nexus-enrol.d.ts +241 -0
  35. package/dist/cloud/nexus-enrol.d.ts.map +1 -0
  36. package/dist/cloud/nexus-enrol.js +1163 -0
  37. package/dist/cloud/nexus-enrol.js.map +1 -0
  38. package/dist/cloud/nexus-link.d.ts +10 -0
  39. package/dist/cloud/nexus-link.d.ts.map +1 -1
  40. package/dist/cloud/nexus-link.js +172 -11
  41. package/dist/cloud/nexus-link.js.map +1 -1
  42. package/dist/cloud/nexus-logout.d.ts +114 -0
  43. package/dist/cloud/nexus-logout.d.ts.map +1 -0
  44. package/dist/cloud/nexus-logout.js +429 -0
  45. package/dist/cloud/nexus-logout.js.map +1 -0
  46. package/dist/cloud/signing.d.ts +20 -0
  47. package/dist/cloud/signing.d.ts.map +1 -1
  48. package/dist/cloud/signing.js +14 -0
  49. package/dist/cloud/signing.js.map +1 -1
  50. package/dist/crypto/credentials.d.ts +61 -0
  51. package/dist/crypto/credentials.d.ts.map +1 -1
  52. package/dist/crypto/credentials.js +154 -58
  53. package/dist/crypto/credentials.js.map +1 -1
  54. package/dist/docs/export-document.js +1072 -227
  55. package/dist/docs/export-document.js.map +3 -3
  56. package/dist/doctor/dependency-cycles.d.ts +41 -0
  57. package/dist/doctor/dependency-cycles.d.ts.map +1 -0
  58. package/dist/doctor/dependency-cycles.js +39 -0
  59. package/dist/doctor/dependency-cycles.js.map +1 -0
  60. package/dist/doctor/index.d.ts +2 -0
  61. package/dist/doctor/index.d.ts.map +1 -1
  62. package/dist/doctor/index.js +1 -0
  63. package/dist/doctor/index.js.map +1 -1
  64. package/dist/doctor/row-identity.d.ts +11 -0
  65. package/dist/doctor/row-identity.d.ts.map +1 -1
  66. package/dist/doctor/row-identity.js +67 -9
  67. package/dist/doctor/row-identity.js.map +1 -1
  68. package/dist/error-catalog.d.ts.map +1 -1
  69. package/dist/error-catalog.js +4 -0
  70. package/dist/error-catalog.js.map +1 -1
  71. package/dist/error-registry.d.ts.map +1 -1
  72. package/dist/error-registry.js +8 -0
  73. package/dist/error-registry.js.map +1 -1
  74. package/dist/llm/plugin-facade.js +1200 -355
  75. package/dist/llm/plugin-facade.js.map +3 -3
  76. package/dist/nexus/workspace.d.ts.map +1 -1
  77. package/dist/nexus/workspace.js +54 -4
  78. package/dist/nexus/workspace.js.map +1 -1
  79. package/dist/orchestrate/lifecycle-ops.js +1 -1
  80. package/dist/orchestrate/lifecycle-ops.js.map +1 -1
  81. package/dist/orchestrate/pivot.d.ts.map +1 -1
  82. package/dist/orchestrate/pivot.js +4 -2
  83. package/dist/orchestrate/pivot.js.map +1 -1
  84. package/dist/orchestrate/query-ops.d.ts.map +1 -1
  85. package/dist/orchestrate/query-ops.js +3 -3
  86. package/dist/orchestrate/query-ops.js.map +1 -1
  87. package/dist/orchestrate/spawn-ops.js +1 -1
  88. package/dist/orchestrate/spawn-ops.js.map +1 -1
  89. package/dist/orchestration/index.js +1 -1
  90. package/dist/orchestration/index.js.map +1 -1
  91. package/dist/orchestration/lead-rollup.d.ts.map +1 -1
  92. package/dist/orchestration/lead-rollup.js +3 -3
  93. package/dist/orchestration/lead-rollup.js.map +1 -1
  94. package/dist/orchestration/parallel.js +1 -1
  95. package/dist/orchestration/parallel.js.map +1 -1
  96. package/dist/orchestration/wave-topic.d.ts +4 -2
  97. package/dist/orchestration/wave-topic.d.ts.map +1 -1
  98. package/dist/orchestration/wave-topic.js +6 -4
  99. package/dist/orchestration/wave-topic.js.map +1 -1
  100. package/dist/orchestration/waves.d.ts +2 -1
  101. package/dist/orchestration/waves.d.ts.map +1 -1
  102. package/dist/orchestration/waves.js +4 -3
  103. package/dist/orchestration/waves.js.map +1 -1
  104. package/dist/phases/index.d.ts.map +1 -1
  105. package/dist/phases/index.js +4 -2
  106. package/dist/phases/index.js.map +1 -1
  107. package/dist/selfimprove/fix-gen.js +1203 -358
  108. package/dist/selfimprove/fix-gen.js.map +3 -3
  109. package/dist/session/engine-ops.d.ts.map +1 -1
  110. package/dist/session/engine-ops.js +77 -49
  111. package/dist/session/engine-ops.js.map +1 -1
  112. package/dist/sessions/focus-state-store.d.ts +69 -23
  113. package/dist/sessions/focus-state-store.d.ts.map +1 -1
  114. package/dist/sessions/focus-state-store.js +113 -27
  115. package/dist/sessions/focus-state-store.js.map +1 -1
  116. package/dist/sessions/handoff.js +1 -1
  117. package/dist/sessions/handoff.js.map +1 -1
  118. package/dist/sessions/index.d.ts.map +1 -1
  119. package/dist/sessions/index.js +24 -13
  120. package/dist/sessions/index.js.map +1 -1
  121. package/dist/sessions/terminal-identity.d.ts +165 -17
  122. package/dist/sessions/terminal-identity.d.ts.map +1 -1
  123. package/dist/sessions/terminal-identity.js +341 -32
  124. package/dist/sessions/terminal-identity.js.map +1 -1
  125. package/dist/setup/sections/nexus-account.d.ts +8 -6
  126. package/dist/setup/sections/nexus-account.d.ts.map +1 -1
  127. package/dist/setup/sections/nexus-account.js +53 -9
  128. package/dist/setup/sections/nexus-account.js.map +1 -1
  129. package/dist/skills/orchestrator/startup.js +2 -2
  130. package/dist/skills/orchestrator/startup.js.map +1 -1
  131. package/dist/snapshot/index.d.ts +4 -0
  132. package/dist/snapshot/index.d.ts.map +1 -1
  133. package/dist/snapshot/index.js +50 -3
  134. package/dist/snapshot/index.js.map +1 -1
  135. package/dist/store/db-helpers.d.ts +15 -2
  136. package/dist/store/db-helpers.d.ts.map +1 -1
  137. package/dist/store/db-helpers.js +84 -3
  138. package/dist/store/db-helpers.js.map +1 -1
  139. package/dist/store/dependency-cycles.d.ts +164 -0
  140. package/dist/store/dependency-cycles.d.ts.map +1 -0
  141. package/dist/store/dependency-cycles.js +360 -0
  142. package/dist/store/dependency-cycles.js.map +1 -0
  143. package/dist/store/display-id-alias.d.ts +93 -37
  144. package/dist/store/display-id-alias.d.ts.map +1 -1
  145. package/dist/store/display-id-alias.js +590 -115
  146. package/dist/store/display-id-alias.js.map +1 -1
  147. package/dist/store/dual-scope-db.d.ts.map +1 -1
  148. package/dist/store/dual-scope-db.js +34 -7
  149. package/dist/store/dual-scope-db.js.map +1 -1
  150. package/dist/store/exodus/migrate.d.ts.map +1 -1
  151. package/dist/store/exodus/migrate.js +8 -1
  152. package/dist/store/exodus/migrate.js.map +1 -1
  153. package/dist/store/global-salt.d.ts +35 -0
  154. package/dist/store/global-salt.d.ts.map +1 -1
  155. package/dist/store/global-salt.js +136 -16
  156. package/dist/store/global-salt.js.map +1 -1
  157. package/dist/store/migration-sqlite.d.ts.map +1 -1
  158. package/dist/store/migration-sqlite.js +19 -11
  159. package/dist/store/migration-sqlite.js.map +1 -1
  160. package/dist/store/portable-bundle-scan.d.ts.map +1 -1
  161. package/dist/store/portable-bundle-scan.js +6 -0
  162. package/dist/store/portable-bundle-scan.js.map +1 -1
  163. package/dist/store/row-identity-registry.d.ts.map +1 -1
  164. package/dist/store/row-identity-registry.js +11 -3
  165. package/dist/store/row-identity-registry.js.map +1 -1
  166. package/dist/store/row-identity.d.ts +91 -1
  167. package/dist/store/row-identity.d.ts.map +1 -1
  168. package/dist/store/row-identity.js +276 -7
  169. package/dist/store/row-identity.js.map +1 -1
  170. package/dist/store/safety-data-accessor.d.ts +3 -2
  171. package/dist/store/safety-data-accessor.d.ts.map +1 -1
  172. package/dist/store/safety-data-accessor.js +5 -2
  173. package/dist/store/safety-data-accessor.js.map +1 -1
  174. package/dist/store/session-store.d.ts +63 -3
  175. package/dist/store/session-store.d.ts.map +1 -1
  176. package/dist/store/session-store.js +121 -8
  177. package/dist/store/session-store.js.map +1 -1
  178. package/dist/store/split-brain-import.d.ts.map +1 -1
  179. package/dist/store/split-brain-import.js +36 -0
  180. package/dist/store/split-brain-import.js.map +1 -1
  181. package/dist/store/sqlite-data-accessor.d.ts +50 -3
  182. package/dist/store/sqlite-data-accessor.d.ts.map +1 -1
  183. package/dist/store/sqlite-data-accessor.js +246 -13
  184. package/dist/store/sqlite-data-accessor.js.map +1 -1
  185. package/dist/store/sync/replica.d.ts +34 -3
  186. package/dist/store/sync/replica.d.ts.map +1 -1
  187. package/dist/store/sync/replica.js +39 -2
  188. package/dist/store/sync/replica.js.map +1 -1
  189. package/dist/store/sync/schema.d.ts +6 -3
  190. package/dist/store/sync/schema.d.ts.map +1 -1
  191. package/dist/store/sync/schema.js +6 -3
  192. package/dist/store/sync/schema.js.map +1 -1
  193. package/dist/store/tasks-sqlite.d.ts.map +1 -1
  194. package/dist/store/tasks-sqlite.js +14 -2
  195. package/dist/store/tasks-sqlite.js.map +1 -1
  196. package/dist/store/umbrella-data-accessor.d.ts +3 -2
  197. package/dist/store/umbrella-data-accessor.d.ts.map +1 -1
  198. package/dist/store/umbrella-data-accessor.js +5 -2
  199. package/dist/store/umbrella-data-accessor.js.map +1 -1
  200. package/dist/system/health.d.ts +2 -0
  201. package/dist/system/health.d.ts.map +1 -1
  202. package/dist/system/health.js +54 -0
  203. package/dist/system/health.js.map +1 -1
  204. package/dist/task-work/index.d.ts.map +1 -1
  205. package/dist/task-work/index.js +9 -6
  206. package/dist/task-work/index.js.map +1 -1
  207. package/dist/tasks/analyze.d.ts.map +1 -1
  208. package/dist/tasks/analyze.js +3 -2
  209. package/dist/tasks/analyze.js.map +1 -1
  210. package/dist/tasks/evidence.d.ts +19 -1
  211. package/dist/tasks/evidence.d.ts.map +1 -1
  212. package/dist/tasks/evidence.js +79 -18
  213. package/dist/tasks/evidence.js.map +1 -1
  214. package/dist/tasks/infer-add-params.js +1 -1
  215. package/dist/tasks/infer-add-params.js.map +1 -1
  216. package/dist/tasks/task-context.d.ts.map +1 -1
  217. package/dist/tasks/task-context.js +3 -1
  218. package/dist/tasks/task-context.js.map +1 -1
  219. package/dist/tasks/task-import.d.ts.map +1 -1
  220. package/dist/tasks/task-import.js +11 -3
  221. package/dist/tasks/task-import.js.map +1 -1
  222. package/dist/tasks/task-next.d.ts +5 -1
  223. package/dist/tasks/task-next.d.ts.map +1 -1
  224. package/dist/tasks/task-next.js +7 -2
  225. package/dist/tasks/task-next.js.map +1 -1
  226. package/dist/validation/engine-ops.d.ts.map +1 -1
  227. package/dist/validation/engine-ops.js +3 -2
  228. package/dist/validation/engine-ops.js.map +1 -1
  229. package/dist/workgraph/scaffold-apply.d.ts.map +1 -1
  230. package/dist/workgraph/scaffold-apply.js +14 -5
  231. package/dist/workgraph/scaffold-apply.js.map +1 -1
  232. package/migrations/drizzle-cleo-project/20260930160000_t12886-dependency-cycle-guard/migration.sql +76 -0
  233. package/migrations/drizzle-cleo-project/20260930160000_t12886-dependency-cycle-guard/revert.sql +7 -0
  234. package/package.json +13 -13
  235. package/templates/CLEO-INJECTION.md +2 -2
  236. package/templates/CLEO-REFERENCE.md +1 -1
@@ -28,6 +28,7 @@ import { NEXUS_CLI_CLIENT_ID, NEXUS_DEFAULT_API_URL, nexusAccountMeSchema, } fro
28
28
  import { DeviceCodeAuthError, DeviceCodeTimeoutError, pollForToken, startDeviceCodeFlow, } from '../llm/oauth/device-code.js';
29
29
  import { Http, isSecureUrl, NexusError } from './http.js';
30
30
  import { FileNexusTokenStore, } from './nexus-credentials.js';
31
+ import { NexusDeviceStore, SealedNexusDevice } from './nexus-device.js';
31
32
  /** Environment override for the default API origin (e.g. staging). */
32
33
  export const NEXUS_API_URL_ENV = 'CLEO_NEXUS_API_URL';
33
34
  /** Default time budget for the server-side revocation at logout. */
@@ -185,7 +186,52 @@ function toLoginError(err) {
185
186
  export async function loginToNexus(opts = {}) {
186
187
  const apiUrl = resolveNexusApiUrl(opts.apiUrl);
187
188
  const store = opts.store ?? new FileNexusTokenStore();
188
- const cfg = nexusDeviceCodeConfig(apiUrl, opts.fetch);
189
+ const token = await runNexusDeviceCode(apiUrl, opts);
190
+ const warnings = [];
191
+ let me = null;
192
+ try {
193
+ me = await fetchAccountMe(apiUrl, token.accessToken, opts.fetch ? { fetch: opts.fetch } : {});
194
+ }
195
+ catch (err) {
196
+ warnings.push(`signed in, but the account lookup failed: ${err instanceof Error ? err.message : String(err)}`);
197
+ }
198
+ const organization = me ? primaryNexusOrganization(me) : null;
199
+ const expiresAt = typeof token.expiresIn === 'number'
200
+ ? new Date(Date.now() + token.expiresIn * 1000).toISOString()
201
+ : null;
202
+ await store.put(apiUrl, {
203
+ token: token.accessToken,
204
+ tokenType: token.tokenType,
205
+ expiresAt,
206
+ user: me?.user ?? null,
207
+ organization,
208
+ });
209
+ return {
210
+ apiUrl,
211
+ user: me?.user ?? null,
212
+ organization,
213
+ expiresAt,
214
+ credentialsPath: store.location,
215
+ warnings,
216
+ };
217
+ }
218
+ /**
219
+ * The device-code grant against a Nexus origin (contract §3.3 steps 1 to 3):
220
+ * start, validate and show the verification URL, then poll until the user
221
+ * approves. The session token it returns is held in memory only; the caller
222
+ * decides whether to store it (9.24 behaviour) or enrol a device with it.
223
+ *
224
+ * @param apiUrl - Resolved API origin.
225
+ * @param opts - UI hooks and test overrides.
226
+ * @param scope - Optional OAuth `scope` for `/device/code` (`cleo:device` or `cleo:read-only`).
227
+ * @returns The token response (the session token is its only secret).
228
+ * @throws {NexusAccountError} On a start, poll, denial or expiry failure.
229
+ */
230
+ export async function runNexusDeviceCode(apiUrl, opts, scope) {
231
+ const cfg = {
232
+ ...nexusDeviceCodeConfig(apiUrl, opts.fetch),
233
+ ...(scope !== undefined ? { scope } : {}),
234
+ };
189
235
  let start;
190
236
  try {
191
237
  start = await startDeviceCodeFlow(cfg);
@@ -215,33 +261,7 @@ export async function loginToNexus(opts = {}) {
215
261
  catch (err) {
216
262
  throw toLoginError(err);
217
263
  }
218
- const warnings = [];
219
- let me = null;
220
- try {
221
- me = await fetchAccountMe(apiUrl, token.accessToken, opts.fetch ? { fetch: opts.fetch } : {});
222
- }
223
- catch (err) {
224
- warnings.push(`signed in, but the account lookup failed: ${err instanceof Error ? err.message : String(err)}`);
225
- }
226
- const organization = me ? primaryNexusOrganization(me) : null;
227
- const expiresAt = typeof token.expiresIn === 'number'
228
- ? new Date(Date.now() + token.expiresIn * 1000).toISOString()
229
- : null;
230
- await store.put(apiUrl, {
231
- token: token.accessToken,
232
- tokenType: token.tokenType,
233
- expiresAt,
234
- user: me?.user ?? null,
235
- organization,
236
- });
237
- return {
238
- apiUrl,
239
- user: me?.user ?? null,
240
- organization,
241
- expiresAt,
242
- credentialsPath: store.location,
243
- warnings,
244
- };
264
+ return token;
245
265
  }
246
266
  /**
247
267
  * Sign out: delete the session locally FIRST, then revoke it server-side
@@ -265,7 +285,7 @@ export async function logoutFromNexus(opts = {}) {
265
285
  const warnings = [];
266
286
  let revocation;
267
287
  try {
268
- revocation = await revokeSession(apiUrl, session, opts.revokeTimeoutMs ?? NEXUS_REVOKE_TIMEOUT_MS, opts.fetch);
288
+ revocation = await signOutNexusSessionToken(apiUrl, session.bearer(), opts.revokeTimeoutMs ?? NEXUS_REVOKE_TIMEOUT_MS, opts.fetch);
269
289
  }
270
290
  catch (err) {
271
291
  revocation = 'failed';
@@ -273,13 +293,23 @@ export async function logoutFromNexus(opts = {}) {
273
293
  }
274
294
  return { apiUrl, removedLocally, revocation, warnings };
275
295
  }
276
- /** `POST /api/auth/sign-out` with the bearer token, within `timeoutMs`. Never follows redirects. */
277
- async function revokeSession(apiUrl, session, timeoutMs, fetchImpl) {
296
+ /**
297
+ * `POST /api/auth/sign-out` with a bearer session token, within `timeoutMs`,
298
+ * which deletes the session server-side. Never follows redirects.
299
+ *
300
+ * @param apiUrl - Resolved API origin.
301
+ * @param bearer - The session token (never logged).
302
+ * @param timeoutMs - Time budget for the call.
303
+ * @param fetchImpl - Optional `fetch` override.
304
+ * @returns `revoked`, or `already-invalid` on a 401.
305
+ * @throws On a network error, a timeout or a non-2xx, non-401 answer.
306
+ */
307
+ export async function signOutNexusSessionToken(apiUrl, bearer, timeoutMs, fetchImpl) {
278
308
  const doFetch = fetchImpl ?? ((input, init) => fetch(input, init));
279
309
  const res = await doFetch(`${apiUrl}/api/auth/sign-out`, {
280
310
  method: 'POST',
281
311
  headers: {
282
- authorization: `Bearer ${session.bearer()}`,
312
+ authorization: `Bearer ${bearer}`,
283
313
  'content-type': 'application/json',
284
314
  accept: 'application/json',
285
315
  },
@@ -335,22 +365,105 @@ async function checkSession(session, opts) {
335
365
  return statusRow(session.apiUrl, 'unverified', session, null);
336
366
  }
337
367
  }
368
+ /**
369
+ * Check one device credential against the API (E2 `GET /v1/whoami`, the call
370
+ * the device contract prefers for status). A 401 (signed out, revoked or
371
+ * expired) reads as `expired`; no answer reads as `unverified`.
372
+ */
373
+ async function checkDevice(device, bearer, opts) {
374
+ if (opts.live === false)
375
+ return statusRow(device.origin, 'unverified', null, null);
376
+ const timeoutMs = opts.timeoutMs ?? NEXUS_STATUS_TIMEOUT_MS;
377
+ const base = opts.fetch ?? ((input, init) => fetch(input, init));
378
+ const http = new Http({
379
+ baseUrl: device.origin,
380
+ token: bearer,
381
+ fetch: (input, init) => base(input, { ...init, signal: AbortSignal.timeout(timeoutMs) }),
382
+ maxAttempts: 1,
383
+ });
384
+ try {
385
+ const me = await http.request('GET', '/v1/whoami', nexusAccountMeSchema);
386
+ return statusRow(device.origin, 'signed-in', null, me);
387
+ }
388
+ catch (err) {
389
+ if (err instanceof NexusError && err.status === 401) {
390
+ return statusRow(device.origin, 'expired', null, null);
391
+ }
392
+ return statusRow(device.origin, 'unverified', null, null);
393
+ }
394
+ }
338
395
  /**
339
396
  * Secret-free status rows for `cleo status` and `cleo auth list`: one per
340
- * stored session, or one "not signed in" row for the default origin. Makes a
341
- * network call only when a token is stored.
397
+ * device credential (when device credentials are on) and one per stored 9.24
398
+ * session on an origin no device credential covers, or one "not signed in"
399
+ * row for the default origin. Makes a network call only when a credential is
400
+ * stored. A device that is signed out locally (no current credential) is not
401
+ * signed in.
342
402
  *
343
- * @param opts - Origin filter, store, liveness and test overrides.
403
+ * @param opts - Origin filter, stores, liveness and test overrides.
344
404
  * @returns Status rows, sorted by origin.
345
405
  */
346
406
  export async function getNexusAccountStatus(opts = {}) {
347
407
  const store = opts.store ?? new FileNexusTokenStore();
348
408
  const only = opts.apiUrl !== undefined ? resolveNexusApiUrl(opts.apiUrl) : null;
349
- const sessions = (await store.list()).filter((s) => only === null || s.apiUrl === only);
350
- if (sessions.length === 0) {
409
+ const checks = [];
410
+ const extra = [];
411
+ /** `origin\u0000userId` pairs a device credential covers; a session of the same user is a leftover. */
412
+ const covered = new Set();
413
+ // Device credentials are always reported, whatever CLEO_NEXUS_DEVICE says:
414
+ // the switch picks the login flow, and hiding a live credential would let
415
+ // `CLEO_NEXUS_DEVICE=0` users believe they are signed out (review M2).
416
+ if (opts.devices ?? true) {
417
+ try {
418
+ for (const d of await (opts.deviceStore ?? new NexusDeviceStore()).list()) {
419
+ if (only !== null && d.origin !== only)
420
+ continue;
421
+ if (!(d instanceof SealedNexusDevice)) {
422
+ extra.push({
423
+ apiUrl: d.origin,
424
+ state: 'unverified',
425
+ email: null,
426
+ organization: null,
427
+ expiresAt: null,
428
+ summary: `device entry for user ${d.userId} cannot be opened on this machine (${d.reason}); run \`cleo login nexus\` to enrol this machine`,
429
+ });
430
+ continue;
431
+ }
432
+ // Status reads only the current credential: probing a pending
433
+ // rotation credential would be its first use (§2.5), a write.
434
+ const bearer = d.currentBearer();
435
+ if (bearer === null)
436
+ continue;
437
+ covered.add(`${d.origin}\u0000${d.userId}`);
438
+ checks.push(checkDevice(d, bearer, opts));
439
+ }
440
+ }
441
+ catch (err) {
442
+ // A device file that cannot be read never hides the session rows (review M1).
443
+ extra.push({
444
+ apiUrl: only ?? resolveNexusApiUrl(),
445
+ state: 'unverified',
446
+ email: null,
447
+ organization: null,
448
+ expiresAt: null,
449
+ summary: `device credentials unreadable: ${err instanceof Error ? err.message : String(err)}`,
450
+ });
451
+ }
452
+ }
453
+ for (const s of await store.list()) {
454
+ if (only !== null && s.apiUrl !== only)
455
+ continue;
456
+ // A leftover 9.24 session of the user a device credential already covers
457
+ // is not shown twice; a session of any other user is (review L3).
458
+ if (s.user !== null && covered.has(`${s.apiUrl}\u0000${s.user.id}`))
459
+ continue;
460
+ checks.push(checkSession(s, opts));
461
+ }
462
+ const rows = [...(await Promise.all(checks)), ...extra];
463
+ if (rows.length === 0) {
351
464
  return [statusRow(only ?? resolveNexusApiUrl(), 'not-signed-in', null, null)];
352
465
  }
353
- return Promise.all(sessions.map((s) => checkSession(s, opts)));
466
+ return rows.sort((a, b) => a.apiUrl.localeCompare(b.apiUrl));
354
467
  }
355
468
  /**
356
469
  * The stored session for an origin, or a `E_NEXUS_NOT_SIGNED_IN` error.
@@ -1 +1 @@
1
- {"version":3,"file":"nexus-auth.js","sourceRoot":"","sources":["../../src/cloud/nexus-auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"nexus-auth.js","sourceRoot":"","sources":["../../src/cloud/nexus-auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,132 @@
1
+ /**
2
+ * `cleo cloud status`: the agent's single verification call (cleo-nexus
3
+ * device contract v2.15, §4.4, E3 `GET /v1/status`, §3.7).
4
+ *
5
+ * It reads local facts first (the device credential, the project, its
6
+ * `.cleo/nexus-link.json` entry, the store's replica id), then asks E3, and
7
+ * returns `{ verdict, summary, local, remote, warnings }`:
8
+ *
9
+ * - no credential: verdict `not-signed-in`, and no network call is made;
10
+ * - the server's verdict is downgraded to `not-linked` when the current
11
+ * project has no local link entry or no bound replica;
12
+ * - unreachable: `E_NEXUS_UNREACHABLE`, its `publicDetails` (the envelope's `error.details`) carrying `local` and a
13
+ * summary whose remote fields are null ({@link NexusCloudOfflineError});
14
+ * - outside a project (or `--project` naming an unknown id) the device and
15
+ * account parts are still reported and the verdict comes from the device
16
+ * checks only.
17
+ *
18
+ * Every request is a GET. Getting the credential may still upgrade a 9.24
19
+ * session (E1) and retry unsettled logouts (E9/E10), as every device-credential
20
+ * command does (§3.4, §3.5). The replica id is read through
21
+ * `activeReplica(db, 'project')` on a read-only snapshot handle
22
+ * (`openCleoDbSnapshot`, no migrations, no pragmas): this command never binds
23
+ * a replica or writes `cleo.db`. When the store cannot be read that way,
24
+ * `replicaId` is `null` with `W_NEXUS_REPLICA_UNREADABLE` and the verdict is
25
+ * `attention`, never `not-linked`: unknown is not unbound.
26
+ *
27
+ * A server without E3 (404 `E_NOT_FOUND` on `/v1/status`) gets the same
28
+ * `NexusStatus` shape composed client-side from E2, E14 and E15 with the
29
+ * contract's check and verdict rules, plus a `W_NEXUS_STATUS_COMPOSED`
30
+ * warning.
31
+ *
32
+ * TODO(T12905): `cleo cloud status --report` (send presence before E3) is not
33
+ * implemented here; it is the one write this command will gain.
34
+ *
35
+ * @task T12871
36
+ * @epic T12323
37
+ */
38
+ import { type CloudStatusOfflineDetails, type CloudStatusResult, type CloudWarning, type NexusCloudStatus, type NexusCloudStatusCheck } from '@cleocode/contracts';
39
+ import { NexusAccountError } from './nexus-auth.js';
40
+ import { type NexusCloudConnection, type NexusCloudOptions } from './nexus-cloud.js';
41
+ /** Warning: the server has no E3, so the status was composed from E2, E14 and E15. */
42
+ export declare const W_NEXUS_STATUS_COMPOSED = "W_NEXUS_STATUS_COMPOSED";
43
+ /** Warning: the current project has no `.cleo/nexus-link.json` entry for the origin. */
44
+ export declare const W_NEXUS_NOT_LINKED_LOCALLY = "W_NEXUS_NOT_LINKED_LOCALLY";
45
+ /** Warning: the current project's store has no bound replica (or none could be read). */
46
+ export declare const W_NEXUS_NO_REPLICA = "W_NEXUS_NO_REPLICA";
47
+ /** Warning: the store exists but could not be read read-only, so `replicaId` is null. */
48
+ export declare const W_NEXUS_REPLICA_UNREADABLE = "W_NEXUS_REPLICA_UNREADABLE";
49
+ /** Warning: `--project` names an id the server does not show; only the device was checked. */
50
+ export declare const W_NEXUS_PROJECT_UNKNOWN = "W_NEXUS_PROJECT_UNKNOWN";
51
+ /** Options for {@link getNexusCloudStatus}. */
52
+ export interface NexusCloudStatusOptions extends NexusCloudOptions {
53
+ /** `--project`: the project to check; defaults to the current project. */
54
+ projectId?: string;
55
+ /** Clock for presence freshness when the status is composed (tests). */
56
+ now?: () => Date;
57
+ }
58
+ /**
59
+ * `E_NEXUS_UNREACHABLE` from `cleo cloud status`, carrying the local facts
60
+ * (§4.4 "Offline"). Holds no secret.
61
+ */
62
+ export declare class NexusCloudOfflineError extends NexusAccountError {
63
+ /**
64
+ * Local state, a summary with every remote field null, and the warnings
65
+ * collected so far. Named `publicDetails`: the CLI forwards only this
66
+ * explicitly secret-free field into the error envelope.
67
+ */
68
+ readonly publicDetails: CloudStatusOfflineDetails;
69
+ /**
70
+ * @param message - Human message.
71
+ * @param publicDetails - Local state, summary and warnings.
72
+ * @param fix - Remedy.
73
+ */
74
+ constructor(message: string, publicDetails: CloudStatusOfflineDetails, fix?: string);
75
+ }
76
+ /**
77
+ * The verdict of a set of checks (E3 rules, §4.2): the first matching rule wins.
78
+ *
79
+ * @param checks - The checks that apply.
80
+ * @returns `not-registered`, `not-linked`, `attention` or `ok`.
81
+ */
82
+ export declare function nexusStatusVerdict(checks: readonly NexusCloudStatusCheck[]): NexusCloudStatus['verdict'];
83
+ /** What {@link readNexusLocalReplicaId} learned about the store's replica. */
84
+ export interface NexusLocalReplicaRead {
85
+ /** The active replica id, or `null` (no store, no bound replica, or unreadable). */
86
+ readonly replicaId: string | null;
87
+ /**
88
+ * `true` when the store exists but could not be read: `replicaId: null` then
89
+ * means "unknown", not "unbound", so the caller must not conclude not-linked.
90
+ */
91
+ readonly unreadable: boolean;
92
+ /** `W_NEXUS_REPLICA_UNREADABLE` when `unreadable`. */
93
+ readonly warning: CloudWarning | null;
94
+ }
95
+ /**
96
+ * The active replica id of a project store, read-only: a snapshot handle with
97
+ * no migrations and no pragmas, closed before returning. Never binds and never
98
+ * writes a row.
99
+ *
100
+ * SQLite side effect: a read-only open of a WAL-mode store needs the `-wal`
101
+ * and `-shm` sidecars, and SQLite creates them (empty) when they are missing
102
+ * and the directory is writable. Run as another user (for example under
103
+ * `sudo`), those sidecars would be left owned by that user, so when the store
104
+ * has no `-wal` and the directory is not writable by the caller the open is
105
+ * skipped and the store reported unreadable instead.
106
+ *
107
+ * @param projectRoot - Project root.
108
+ * @returns The replica id, whether the store was unreadable, and a warning.
109
+ */
110
+ export declare function readNexusLocalReplicaId(projectRoot: string): Promise<NexusLocalReplicaRead>;
111
+ /**
112
+ * The `NexusStatus` of E3, composed from E2, E14 and E15 with the contract's
113
+ * check rules (§4.2 E3), for a server without E3.
114
+ *
115
+ * @param conn - Connection.
116
+ * @param projectId - Project to check, or `null`.
117
+ * @param replicaId - Replica to check, or `null`.
118
+ * @param now - Clock for presence freshness.
119
+ * @returns The composed status.
120
+ */
121
+ export declare function composeNexusStatus(conn: NexusCloudConnection, projectId: string | null, replicaId: string | null, now?: () => Date): Promise<NexusCloudStatus>;
122
+ /**
123
+ * `cleo cloud status [--project <id>]`.
124
+ *
125
+ * @param opts - Project, API URL, stores and test overrides.
126
+ * @returns The verdict, summary, local and remote facts, and warnings.
127
+ * @throws {NexusCloudOfflineError} `E_NEXUS_UNREACHABLE` when the server does not answer.
128
+ * @throws {NexusAccountError} `E_NEXUS_DEVICE_REQUIRED`, `E_NEXUS_ACCOUNT_AMBIGUOUS`,
129
+ * or a mapped API refusal (§4.0.4).
130
+ */
131
+ export declare function getNexusCloudStatus(opts?: NexusCloudStatusOptions): Promise<CloudStatusResult>;
132
+ //# sourceMappingURL=nexus-cloud-status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nexus-cloud-status.d.ts","sourceRoot":"","sources":["../../src/cloud/nexus-cloud-status.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAIH,OAAO,EAEL,KAAK,yBAAyB,EAC9B,KAAK,iBAAiB,EAGtB,KAAK,YAAY,EAGjB,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAK3B,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,iBAAiB,EAAsB,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAKL,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EAGvB,MAAM,kBAAkB,CAAC;AAI1B,sFAAsF;AACtF,eAAO,MAAM,uBAAuB,4BAA4B,CAAC;AAEjE,wFAAwF;AACxF,eAAO,MAAM,0BAA0B,+BAA+B,CAAC;AAEvE,yFAAyF;AACzF,eAAO,MAAM,kBAAkB,uBAAuB,CAAC;AAEvD,yFAAyF;AACzF,eAAO,MAAM,0BAA0B,+BAA+B,CAAC;AAEvE,8FAA8F;AAC9F,eAAO,MAAM,uBAAuB,4BAA4B,CAAC;AAEjE,+CAA+C;AAC/C,MAAM,WAAW,uBAAwB,SAAQ,iBAAiB;IAChE,0EAA0E;IAC1E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wEAAwE;IACxE,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB;AAED;;;GAGG;AACH,qBAAa,sBAAuB,SAAQ,iBAAiB;IAC3D;;;;OAIG;IACH,QAAQ,CAAC,aAAa,EAAE,yBAAyB,CAAC;IAElD;;;;OAIG;gBACS,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,yBAAyB,EAAE,GAAG,CAAC,EAAE,MAAM;CAKpF;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,SAAS,qBAAqB,EAAE,GACvC,gBAAgB,CAAC,SAAS,CAAC,CAO7B;AAOD,8EAA8E;AAC9E,MAAM,WAAW,qBAAqB;IACpC,oFAAoF;IACpF,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC;;;OAGG;IACH,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,sDAAsD;IACtD,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;CACvC;AAcD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAsBjG;AAgFD;;;;;;;;;GASG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,oBAAoB,EAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,GAAG,GAAE,MAAM,IAAuB,GACjC,OAAO,CAAC,gBAAgB,CAAC,CA8F3B;AA0FD;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,GAAE,uBAA4B,GACjC,OAAO,CAAC,iBAAiB,CAAC,CA6E5B"}