@cleocode/core 2026.9.26 → 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 (52) hide show
  1. package/dist/build-provenance.json +2 -2
  2. package/dist/cloud/nexus-attach.d.ts +94 -0
  3. package/dist/cloud/nexus-attach.d.ts.map +1 -0
  4. package/dist/cloud/nexus-attach.js +192 -0
  5. package/dist/cloud/nexus-attach.js.map +1 -0
  6. package/dist/cloud/nexus-auth.d.ts +15 -3
  7. package/dist/cloud/nexus-auth.d.ts.map +1 -1
  8. package/dist/cloud/nexus-auth.js +90 -6
  9. package/dist/cloud/nexus-auth.js.map +1 -1
  10. package/dist/cloud/nexus-cloud-status.d.ts +132 -0
  11. package/dist/cloud/nexus-cloud-status.d.ts.map +1 -0
  12. package/dist/cloud/nexus-cloud-status.js +440 -0
  13. package/dist/cloud/nexus-cloud-status.js.map +1 -0
  14. package/dist/cloud/nexus-cloud.d.ts +179 -0
  15. package/dist/cloud/nexus-cloud.d.ts.map +1 -0
  16. package/dist/cloud/nexus-cloud.js +296 -0
  17. package/dist/cloud/nexus-cloud.js.map +1 -0
  18. package/dist/cloud/nexus-device.d.ts +31 -6
  19. package/dist/cloud/nexus-device.d.ts.map +1 -1
  20. package/dist/cloud/nexus-device.js +54 -7
  21. package/dist/cloud/nexus-device.js.map +1 -1
  22. package/dist/cloud/nexus-enrol.d.ts +35 -4
  23. package/dist/cloud/nexus-enrol.d.ts.map +1 -1
  24. package/dist/cloud/nexus-enrol.js +187 -47
  25. package/dist/cloud/nexus-enrol.js.map +1 -1
  26. package/dist/cloud/nexus-link.d.ts +8 -1
  27. package/dist/cloud/nexus-link.d.ts.map +1 -1
  28. package/dist/cloud/nexus-link.js +138 -11
  29. package/dist/cloud/nexus-link.js.map +1 -1
  30. package/dist/cloud/nexus-logout.d.ts +114 -0
  31. package/dist/cloud/nexus-logout.d.ts.map +1 -0
  32. package/dist/cloud/nexus-logout.js +429 -0
  33. package/dist/cloud/nexus-logout.js.map +1 -0
  34. package/dist/docs/export-document.js +242 -37
  35. package/dist/docs/export-document.js.map +3 -3
  36. package/dist/llm/plugin-facade.js +343 -138
  37. package/dist/llm/plugin-facade.js.map +3 -3
  38. package/dist/selfimprove/fix-gen.js +347 -142
  39. package/dist/selfimprove/fix-gen.js.map +3 -3
  40. package/dist/setup/sections/nexus-account.d.ts +8 -6
  41. package/dist/setup/sections/nexus-account.d.ts.map +1 -1
  42. package/dist/setup/sections/nexus-account.js +53 -9
  43. package/dist/setup/sections/nexus-account.js.map +1 -1
  44. package/dist/store/sync/replica.d.ts +34 -3
  45. package/dist/store/sync/replica.d.ts.map +1 -1
  46. package/dist/store/sync/replica.js +39 -2
  47. package/dist/store/sync/replica.js.map +1 -1
  48. package/dist/store/sync/schema.d.ts +6 -3
  49. package/dist/store/sync/schema.d.ts.map +1 -1
  50. package/dist/store/sync/schema.js +6 -3
  51. package/dist/store/sync/schema.js.map +1 -1
  52. package/package.json +13 -13
@@ -42,6 +42,7 @@ import { getCleoDirAbsolute, resolveOrCwd } from '../paths.js';
42
42
  import { getProjectDisplayName } from '../project-info.js';
43
43
  import { withLock } from '../store/file-utils.js';
44
44
  import { Http, NexusError } from './http.js';
45
+ import { attachProjectReplica } from './nexus-attach.js';
45
46
  import { NexusAccountError, requireNexusSession, resolveNexusApiUrl, } from './nexus-auth.js';
46
47
  import { FileNexusTokenStore } from './nexus-credentials.js';
47
48
  import { isNexusDeviceEnabled } from './nexus-device.js';
@@ -51,7 +52,7 @@ import { registerProject } from './projects.js';
51
52
  export const NEXUS_LINK_FILE = 'nexus-link.json';
52
53
  /** Longest label the server accepts (`RegisterProjectRequest.label`). */
53
54
  export const NEXUS_LABEL_MAX = 120;
54
- const linkSchema = z.object({
55
+ const linkSchema = z.looseObject({
55
56
  apiUrl: z.string(),
56
57
  localProjectId: z.string(),
57
58
  remoteProjectId: z.string(),
@@ -59,11 +60,65 @@ const linkSchema = z.object({
59
60
  label: z.string().nullable(),
60
61
  streamId: z.string(),
61
62
  linkedAt: z.string(),
63
+ replicaId: z.string().nullish(),
64
+ nexusDeviceId: z.string().nullish(),
65
+ attachedAt: z.string().nullish(),
62
66
  });
63
- const linkFileSchema = z.object({
67
+ /**
68
+ * The file envelope. Entries are kept as raw records and parsed one by one
69
+ * ({@link mergeLinkEntry}), so an entry this version cannot read (written by
70
+ * a newer CLI) is carried through unchanged instead of dropping the file.
71
+ */
72
+ const linkFileSchema = z.looseObject({
64
73
  version: z.literal(1),
65
- links: z.record(z.string(), linkSchema),
74
+ links: z.record(z.string(), z.record(z.string(), z.json())),
66
75
  });
76
+ /** One parsed entry as the contract type, or `null` when this version cannot read it. */
77
+ function toLink(raw) {
78
+ if (raw === undefined)
79
+ return null;
80
+ const parsed = linkSchema.safeParse(raw);
81
+ if (!parsed.success)
82
+ return null;
83
+ const e = parsed.data;
84
+ return {
85
+ apiUrl: e.apiUrl,
86
+ localProjectId: e.localProjectId,
87
+ remoteProjectId: e.remoteProjectId,
88
+ organizationId: e.organizationId,
89
+ label: e.label,
90
+ streamId: e.streamId,
91
+ linkedAt: e.linkedAt,
92
+ ...(e.replicaId ? { replicaId: e.replicaId } : {}),
93
+ ...(e.nexusDeviceId ? { nexusDeviceId: e.nexusDeviceId } : {}),
94
+ ...(e.attachedAt ? { attachedAt: e.attachedAt } : {}),
95
+ };
96
+ }
97
+ /**
98
+ * The entry to store for this link: the new values over the old entry, so a
99
+ * relink that attached nothing keeps the cached replica fields, and fields a
100
+ * newer CLI wrote survive.
101
+ */
102
+ function mergeLinkEntry(old, link, clearReplica) {
103
+ const fresh = {
104
+ apiUrl: link.apiUrl,
105
+ localProjectId: link.localProjectId,
106
+ remoteProjectId: link.remoteProjectId,
107
+ organizationId: link.organizationId,
108
+ label: link.label,
109
+ streamId: link.streamId,
110
+ linkedAt: link.linkedAt,
111
+ ...(link.replicaId ? { replicaId: link.replicaId } : {}),
112
+ ...(link.nexusDeviceId ? { nexusDeviceId: link.nexusDeviceId } : {}),
113
+ ...(link.attachedAt ? { attachedAt: link.attachedAt } : {}),
114
+ };
115
+ // A device-mode attach that failed must not leave the old replica and
116
+ // device ids looking current (review N1): they are cleared.
117
+ const cleared = clearReplica
118
+ ? { replicaId: null, nexusDeviceId: null, attachedAt: null }
119
+ : {};
120
+ return { ...(old ?? {}), ...cleared, ...fresh };
121
+ }
67
122
  /**
68
123
  * Path separators and their look-alikes: `/`, `\`, fullwidth / \, division
69
124
  * slash ∕, set minus ∖, fraction slash ⁄, big solidi ⧸ ⧹, small reverse
@@ -143,7 +198,7 @@ function readLinkFile(path) {
143
198
  * @returns The binding, or `null`.
144
199
  */
145
200
  export function readNexusProjectLink(projectRoot, apiUrl) {
146
- return readLinkFile(nexusLinkPath(projectRoot)).links[new URL(apiUrl).origin] ?? null;
201
+ return toLink(readLinkFile(nexusLinkPath(projectRoot)).links[new URL(apiUrl).origin]);
147
202
  }
148
203
  /** Map an API failure to a Nexus error; a 401 means the session expired. */
149
204
  function toLinkError(err) {
@@ -188,15 +243,18 @@ export async function linkProjectToNexus(opts = {}) {
188
243
  const apiUrl = resolveNexusApiUrl(opts.apiUrl);
189
244
  const store = opts.store ?? new FileNexusTokenStore();
190
245
  const deviceMode = isNexusDeviceEnabled();
191
- // With CLEO_NEXUS_DEVICE=1 the device credential is used, upgrading a 9.24
246
+ // With device credentials (the default) the device credential is used, upgrading a 9.24
192
247
  // session first (contract §3.4); otherwise the 9.24 session, as before.
193
- const bearer = deviceMode
194
- ? (await ensureNexusDeviceCredential({
248
+ const handle = deviceMode
249
+ ? await ensureNexusDeviceCredential({
195
250
  apiUrl,
196
251
  store,
197
252
  ...(opts.fetch ? { fetch: opts.fetch } : {}),
198
253
  ...(opts.deviceStore ? { deviceStore: opts.deviceStore } : {}),
199
- })).device.currentBearer()
254
+ })
255
+ : null;
256
+ const bearer = handle
257
+ ? handle.device.currentBearer()
200
258
  : (await requireNexusSession(apiUrl, store)).bearer();
201
259
  if (bearer === null) {
202
260
  throw new NexusAccountError('E_NEXUS_NOT_SIGNED_IN', `not signed in to Cleo Nexus at ${apiUrl}`, 'run `cleo login nexus`');
@@ -226,6 +284,46 @@ export async function linkProjectToNexus(opts = {}) {
226
284
  catch (err) {
227
285
  throw deviceMode ? nexusApiErrorToAccountError(err) : toLinkError(err);
228
286
  }
287
+ // Steps 3 to 5 of §3.6: attach this store's replica to the device and
288
+ // report presence. A 9.24 session cannot attach (the route needs a device).
289
+ // An attach failure never fails the link: the project is registered, the
290
+ // binding below is still written, and the warning names the remedy.
291
+ const warnings = handle ? [...handle.warnings] : [];
292
+ let replica = null;
293
+ let attachError = null;
294
+ if (handle === null && opts.rebind === true) {
295
+ warnings.push('--rebind needs device credentials (CLEO_NEXUS_DEVICE turns them off), so nothing was attached or rebound');
296
+ }
297
+ if (handle) {
298
+ try {
299
+ const attached = await attachProjectReplica({
300
+ apiUrl,
301
+ bearer,
302
+ deviceId: handle.device.deviceId,
303
+ projectId: registered.project.projectId,
304
+ projectRoot,
305
+ cliVersion: opts.cliVersion ?? (await installedCleoVersion()),
306
+ ...(opts.rebind === true ? { rebind: true } : {}),
307
+ ...(opts.replicaBinder ? { binder: opts.replicaBinder } : {}),
308
+ ...(opts.fetch ? { fetch: opts.fetch } : {}),
309
+ });
310
+ replica = attached.replica;
311
+ warnings.push(...attached.warnings);
312
+ }
313
+ catch (err) {
314
+ const mapped = nexusApiErrorToAccountError(err);
315
+ const code = mapped instanceof NexusAccountError ? mapped.code : 'E_NEXUS_REQUEST_FAILED';
316
+ const fix = mapped instanceof NexusAccountError && mapped.fix
317
+ ? mapped.fix
318
+ : 're-run `cleo project link`';
319
+ attachError = {
320
+ code,
321
+ message: mapped.message,
322
+ fix: mapped instanceof NexusAccountError && mapped.fix ? mapped.fix : null,
323
+ };
324
+ warnings.push(`the project is linked, but this machine's copy was not attached to it (${code}: ${mapped.message}); ${fix}`);
325
+ }
326
+ }
229
327
  const linkPath = nexusLinkPath(projectRoot);
230
328
  const link = {
231
329
  apiUrl,
@@ -235,6 +333,13 @@ export async function linkProjectToNexus(opts = {}) {
235
333
  label: registered.project.label,
236
334
  streamId: registered.streamId,
237
335
  linkedAt: new Date().toISOString(),
336
+ ...(replica
337
+ ? {
338
+ replicaId: replica.replicaId,
339
+ nexusDeviceId: replica.deviceId,
340
+ attachedAt: new Date().toISOString(),
341
+ }
342
+ : {}),
238
343
  };
239
344
  // Locked read-modify-write: concurrent links (other origins, other shells)
240
345
  // never drop each other's entries. withLock needs a parseable file to read,
@@ -248,13 +353,35 @@ export async function linkProjectToNexus(opts = {}) {
248
353
  }
249
354
  await withLock(linkPath, (current) => {
250
355
  const parsed = linkFileSchema.safeParse(current);
251
- const links = parsed.success ? parsed.data.links : {};
252
- return { version: 1, links: { ...links, [apiUrl]: link } };
356
+ if (!parsed.success) {
357
+ // Never overwrite a file this version cannot read (a newer format):
358
+ // that would drop every other origin's binding.
359
+ throw new NexusAccountError('E_NEXUS_LINK_FILE_UNSUPPORTED', `${linkPath} is not a version 1 link file this CLEO can update`, 'upgrade CLEO, or move the file aside and run `cleo project link` again');
360
+ }
361
+ const links = parsed.data.links;
362
+ return {
363
+ ...parsed.data,
364
+ version: 1,
365
+ links: {
366
+ ...links,
367
+ [apiUrl]: mergeLinkEntry(links[apiUrl], link, handle !== null && replica === null),
368
+ },
369
+ };
253
370
  });
371
+ // The envelope reports what is stored, cached replica fields included.
372
+ const stored = readNexusProjectLink(projectRoot, apiUrl) ?? link;
254
373
  return {
255
- link,
374
+ link: stored,
256
375
  alreadyLinked: !registered.created,
257
376
  linkPath,
377
+ replica,
378
+ attachError,
379
+ warnings,
258
380
  };
259
381
  }
382
+ /** The installed CLEO version, for presence. */
383
+ async function installedCleoVersion() {
384
+ const { getCleoVersion } = await import('../scaffold/ensure-config.js');
385
+ return getCleoVersion();
386
+ }
260
387
  //# sourceMappingURL=nexus-link.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"nexus-link.js","sourceRoot":"","sources":["../../src/cloud/nexus-link.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"nexus-link.js","sourceRoot":"","sources":["../../src/cloud/nexus-link.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * Cleo Nexus device logout: `cleo logout nexus [--revoke]` with device
3
+ * credentials (cleo-nexus device contract §3.5, review M3, T12844).
4
+ *
5
+ * A logout never reports success while a credential may still be live:
6
+ *
7
+ * 1. Under the lock, the live credentials move into `pendingSignOut`
8
+ * (`--revoke`: `pendingRevoke`), newest first: `pending`, then `current`
9
+ * ({@link applyBeginSignOut}, {@link applyBeginRevoke}). From then on they
10
+ * are used for nothing but that request. The lock is released.
11
+ * 2. E9 (`POST /v1/devices/self/sign-out`) or E10 (`DELETE /v1/devices/self`)
12
+ * is sent with each credential in turn, newest first, with one attempt and
13
+ * a {@link NEXUS_REVOKE_TIMEOUT_MS} timeout.
14
+ * 3. Done means proved: 200, or a 401 whose reason proves the device state
15
+ * (`device-signed-out`, `device-revoked`, or `credential-revoked` with
16
+ * `revokedReason` `signed-out` / `revoked`). A revoke needs proof of a
17
+ * revoke; a signed-out device is not a revoked one. Any other 401 means
18
+ * that credential is dead, so the next one is tried. A network error,
19
+ * timeout, 429, 5xx or a route the server does not have yet stops the run:
20
+ * the slot is kept and every remaining request is left for the next run
21
+ * without another call.
22
+ * 4. The lock is re-taken and the slot is changed only if it still holds the
23
+ * credential that was answered (compare-and-swap):
24
+ * - a sign-out (confirmed, or every credential dead) clears
25
+ * `pendingSignOut` and keeps the device keys for the next login;
26
+ * - a revoke that ended (confirmed, found the device signed out, or every
27
+ * credential dead) forgets the device locally ({@link applyForgetDevice}),
28
+ * so no later login re-activates the id the user asked to burn. The
29
+ * entry is deleted, or kept stripped while `retired` requests of other
30
+ * devices remain; the store keeps the file while other entries remain.
31
+ * Only a confirmed request is reported `confirmed`; the others name the
32
+ * web remedy.
33
+ *
34
+ * Unsettled slots, and the `retired` requests of replaced devices, are
35
+ * retried by every later logout and, best effort with a shorter timeout, by
36
+ * `cleo login nexus` and `cleo project link` ({@link retryNexusDeviceEnds}).
37
+ * Retired requests are sent before the entry's own request.
38
+ *
39
+ * No function here logs, and no result or error carries a token.
40
+ *
41
+ * @task T12870
42
+ * @epic T12323
43
+ */
44
+ import type { NexusDeviceLogoutResult, NexusDeviceLogoutRow } from '@cleocode/contracts';
45
+ import { type FetchLike } from './http.js';
46
+ import { type NexusTokenStore } from './nexus-credentials.js';
47
+ import { NexusDeviceStore } from './nexus-device.js';
48
+ /**
49
+ * Timeout of each E9/E10 call when a login or a link only retries on the way
50
+ * ({@link retryNexusDeviceEnds}); an explicit logout uses {@link NEXUS_REVOKE_TIMEOUT_MS}.
51
+ */
52
+ export declare const NEXUS_END_RETRY_TIMEOUT_MS = 2000;
53
+ /** Options for {@link logoutNexusDevice} and {@link settleNexusDeviceEnds}. */
54
+ export interface NexusDeviceLogoutOptions {
55
+ /** API URL; defaults to `$CLEO_NEXUS_API_URL`, then production. */
56
+ apiUrl?: string;
57
+ /** `fetch` override. */
58
+ fetch?: FetchLike;
59
+ /** The device store; defaults to `<cleoHome>/nexus-device.json`. */
60
+ deviceStore?: NexusDeviceStore;
61
+ /** The 9.24 session store (`nexus-credentials.json`). */
62
+ store?: NexusTokenStore;
63
+ /** Clock, for a slot's `requestedAt`. */
64
+ now?: () => Date;
65
+ /** Timeout of each E9 or E10 call; default {@link NEXUS_REVOKE_TIMEOUT_MS}. */
66
+ timeoutMs?: number;
67
+ }
68
+ /** Options for {@link logoutNexusDevice}. */
69
+ export interface NexusDeviceLogoutRunOptions extends NexusDeviceLogoutOptions {
70
+ /** `--revoke`: hard-revoke the device (E10) instead of signing it out (E9). */
71
+ revoke?: boolean;
72
+ }
73
+ /**
74
+ * Retry every unsettled sign-out and revoke on the origin (contract §3.5,
75
+ * L2): each entry's `pendingSignOut` or `pendingRevoke`, and the `retired`
76
+ * requests of devices it replaced. Never throws for a server that cannot be
77
+ * reached; the rows and warnings say what is still open.
78
+ *
79
+ * @param opts - API URL, stores and test overrides.
80
+ * @returns One row per request tried, and the warnings.
81
+ */
82
+ export declare function settleNexusDeviceEnds(opts?: NexusDeviceLogoutOptions & {
83
+ warnUnreadable?: boolean;
84
+ }): Promise<{
85
+ devices: NexusDeviceLogoutRow[];
86
+ warnings: string[];
87
+ }>;
88
+ /**
89
+ * Best-effort {@link settleNexusDeviceEnds} for flows that only retry on the
90
+ * way (login, commands that need a credential): a store or network failure
91
+ * becomes a warning and never fails the caller.
92
+ *
93
+ * @param opts - API URL, stores and test overrides.
94
+ * @param warnings - Receives the warnings.
95
+ */
96
+ export declare function retryNexusDeviceEnds(opts: NexusDeviceLogoutOptions, warnings: string[]): Promise<void>;
97
+ /**
98
+ * `cleo logout nexus [--revoke]` with device credentials (contract §3.5, M3).
99
+ *
100
+ * Every readable entry on the origin is moved to `pendingSignOut` (or
101
+ * `pendingRevoke`), then every unsettled request on the origin is sent,
102
+ * including ones left by earlier runs. A leftover 9.24 session for the origin
103
+ * is signed out too. The device keys stay after a sign-out, so a later login
104
+ * reuses the device id; a confirmed revoke removes the entry.
105
+ *
106
+ * @param opts - API URL, `revoke`, stores and test overrides.
107
+ * @returns The per-device outcomes. A row that is not `confirmed` is also
108
+ * named in `warnings`; the result never claims a sign-out the server did
109
+ * not confirm.
110
+ * A device file that cannot be read or locked is reported as a warning, and
111
+ * the 9.24 session is still signed out.
112
+ */
113
+ export declare function logoutNexusDevice(opts?: NexusDeviceLogoutRunOptions): Promise<NexusDeviceLogoutResult>;
114
+ //# sourceMappingURL=nexus-logout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nexus-logout.d.ts","sourceRoot":"","sources":["../../src/cloud/nexus-logout.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAEH,OAAO,KAAK,EAEV,uBAAuB,EACvB,oBAAoB,EAErB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,KAAK,SAAS,EAAoB,MAAM,WAAW,CAAC;AAE7D,OAAO,EAAuB,KAAK,eAAe,EAAkB,MAAM,wBAAwB,CAAC;AACnG,OAAO,EASL,gBAAgB,EAEjB,MAAM,mBAAmB,CAAC;AAE3B;;;GAGG;AACH,eAAO,MAAM,0BAA0B,OAAQ,CAAC;AAEhD,+EAA+E;AAC/E,MAAM,WAAW,wBAAwB;IACvC,mEAAmE;IACnE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wBAAwB;IACxB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,oEAAoE;IACpE,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,yDAAyD;IACzD,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,yCAAyC;IACzC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB,+EAA+E;IAC/E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,6CAA6C;AAC7C,MAAM,WAAW,2BAA4B,SAAQ,wBAAwB;IAC3E,+EAA+E;IAC/E,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAyRD;;;;;;;;GAQG;AACH,wBAAsB,qBAAqB,CACzC,IAAI,GAAE,wBAAwB,GAAG;IAAE,cAAc,CAAC,EAAE,OAAO,CAAA;CAAO,GACjE,OAAO,CAAC;IAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAiDlE;AAED;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,wBAAwB,EAC9B,QAAQ,EAAE,MAAM,EAAE,GACjB,OAAO,CAAC,IAAI,CAAC,CAaf;AAqCD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,GAAE,2BAAgC,GACrC,OAAO,CAAC,uBAAuB,CAAC,CAqClC"}