@claudexor/cli 3.19.0 → 3.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/account-catalog.d.ts +5 -6
- package/dist/account-catalog.d.ts.map +1 -1
- package/dist/account-catalog.js +24 -9
- package/dist/account-catalog.js.map +1 -1
- package/dist/account-observations.d.ts +31 -0
- package/dist/account-observations.d.ts.map +1 -0
- package/dist/account-observations.js +135 -0
- package/dist/account-observations.js.map +1 -0
- package/dist/accounts-projection.d.ts +5 -9
- package/dist/accounts-projection.d.ts.map +1 -1
- package/dist/accounts-projection.js +22 -41
- package/dist/accounts-projection.js.map +1 -1
- package/dist/accounts-services.d.ts +10 -1
- package/dist/accounts-services.d.ts.map +1 -1
- package/dist/accounts-services.js +50 -34
- package/dist/accounts-services.js.map +1 -1
- package/dist/acp-surface-runner.d.ts.map +1 -1
- package/dist/acp-surface-runner.js +2 -0
- package/dist/acp-surface-runner.js.map +1 -1
- package/dist/agy-quota-source.d.ts.map +1 -1
- package/dist/agy-quota-source.js +19 -33
- package/dist/agy-quota-source.js.map +1 -1
- package/dist/claude-oauth-credential.d.ts +16 -0
- package/dist/claude-oauth-credential.d.ts.map +1 -0
- package/dist/claude-oauth-credential.js +82 -0
- package/dist/claude-oauth-credential.js.map +1 -0
- package/dist/claude-oauth-fetch.d.ts +9 -0
- package/dist/claude-oauth-fetch.d.ts.map +1 -0
- package/dist/claude-oauth-fetch.js +67 -0
- package/dist/claude-oauth-fetch.js.map +1 -0
- package/dist/claude-oauth-usage.d.ts +7 -38
- package/dist/claude-oauth-usage.d.ts.map +1 -1
- package/dist/claude-oauth-usage.js +166 -180
- package/dist/claude-oauth-usage.js.map +1 -1
- package/dist/claudexord.d.ts.map +1 -1
- package/dist/claudexord.js +2 -2
- package/dist/claudexord.js.map +1 -1
- package/dist/cli-io.d.ts +2 -0
- package/dist/cli-io.d.ts.map +1 -1
- package/dist/cli-io.js +6 -5
- package/dist/cli-io.js.map +1 -1
- package/dist/codex-quota-source.d.ts +6 -2
- package/dist/codex-quota-source.d.ts.map +1 -1
- package/dist/codex-quota-source.js +62 -95
- package/dist/codex-quota-source.js.map +1 -1
- package/dist/continue-from-run.d.ts +27 -0
- package/dist/continue-from-run.d.ts.map +1 -0
- package/dist/continue-from-run.js +77 -0
- package/dist/continue-from-run.js.map +1 -0
- package/dist/control-services.d.ts +36 -3
- package/dist/control-services.d.ts.map +1 -1
- package/dist/control-services.js +15 -20
- package/dist/control-services.js.map +1 -1
- package/dist/credential-commands.d.ts.map +1 -1
- package/dist/credential-commands.js +12 -6
- package/dist/credential-commands.js.map +1 -1
- package/dist/daemon-agent-runner.d.ts.map +1 -1
- package/dist/daemon-agent-runner.js +4 -6
- package/dist/daemon-agent-runner.js.map +1 -1
- package/dist/gc-receipt-notes.d.ts +14 -0
- package/dist/gc-receipt-notes.d.ts.map +1 -0
- package/dist/gc-receipt-notes.js +28 -0
- package/dist/gc-receipt-notes.js.map +1 -0
- package/dist/harness-command-specs.d.ts +1 -1
- package/dist/harness-command-specs.d.ts.map +1 -1
- package/dist/harness-command-specs.js +8 -1
- package/dist/harness-command-specs.js.map +1 -1
- package/dist/harness-install-proof.d.ts.map +1 -1
- package/dist/harness-install-proof.js +14 -18
- package/dist/harness-install-proof.js.map +1 -1
- package/dist/harness-install-recipes.d.ts +2 -1
- package/dist/harness-install-recipes.d.ts.map +1 -1
- package/dist/harness-install-recipes.js +12 -9
- package/dist/harness-install-recipes.js.map +1 -1
- package/dist/harness-installer.d.ts +1 -1
- package/dist/harness-installer.d.ts.map +1 -1
- package/dist/harness-installer.js +8 -9
- package/dist/harness-installer.js.map +1 -1
- package/dist/live.d.ts.map +1 -1
- package/dist/live.js +8 -7
- package/dist/live.js.map +1 -1
- package/dist/mcp-catalog-query.js +3 -3
- package/dist/mcp-catalog-query.js.map +1 -1
- package/dist/mcp-run-projections.d.ts +17 -1
- package/dist/mcp-run-projections.d.ts.map +1 -1
- package/dist/mcp-run-projections.js +27 -1
- package/dist/mcp-run-projections.js.map +1 -1
- package/dist/model-account-evidence.d.ts +18 -0
- package/dist/model-account-evidence.d.ts.map +1 -0
- package/dist/model-account-evidence.js +71 -0
- package/dist/model-account-evidence.js.map +1 -0
- package/dist/model-services.d.ts.map +1 -1
- package/dist/model-services.js +78 -83
- package/dist/model-services.js.map +1 -1
- package/dist/native-login.d.ts +5 -0
- package/dist/native-login.d.ts.map +1 -1
- package/dist/native-login.js +18 -2
- package/dist/native-login.js.map +1 -1
- package/dist/ops-commands.d.ts.map +1 -1
- package/dist/ops-commands.js +22 -25
- package/dist/ops-commands.js.map +1 -1
- package/dist/orphan-sweeper.d.ts.map +1 -1
- package/dist/orphan-sweeper.js +11 -1
- package/dist/orphan-sweeper.js.map +1 -1
- package/dist/plugins.js +1 -1
- package/dist/plugins.js.map +1 -1
- package/dist/quota-command.js +3 -4
- package/dist/quota-command.js.map +1 -1
- package/dist/quota-refresh-diagnostics.d.ts +33 -0
- package/dist/quota-refresh-diagnostics.d.ts.map +1 -0
- package/dist/quota-refresh-diagnostics.js +9 -0
- package/dist/quota-refresh-diagnostics.js.map +1 -0
- package/dist/quota-refreshers.d.ts +5 -4
- package/dist/quota-refreshers.d.ts.map +1 -1
- package/dist/quota-refreshers.js +11 -4
- package/dist/quota-refreshers.js.map +1 -1
- package/dist/quota-services.d.ts +20 -2
- package/dist/quota-services.d.ts.map +1 -1
- package/dist/registry.d.ts +1 -1
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +6 -2
- package/dist/registry.js.map +1 -1
- package/dist/retention-service.d.ts +7 -1
- package/dist/retention-service.d.ts.map +1 -1
- package/dist/retention-service.js +84 -5
- package/dist/retention-service.js.map +1 -1
- package/dist/run-orchestrator.d.ts +0 -6
- package/dist/run-orchestrator.d.ts.map +1 -1
- package/dist/run-orchestrator.js +41 -10
- package/dist/run-orchestrator.js.map +1 -1
- package/dist/settings-service.d.ts +14 -6
- package/dist/settings-service.d.ts.map +1 -1
- package/dist/settings-service.js +11 -5
- package/dist/settings-service.js.map +1 -1
- package/dist/setup-jobs.js +6 -6
- package/dist/setup-jobs.js.map +1 -1
- package/dist/setup-login-capability.d.ts.map +1 -1
- package/dist/setup-login-capability.js +6 -2
- package/dist/setup-login-capability.js.map +1 -1
- package/dist/setup-login-child-lifecycle.d.ts.map +1 -1
- package/dist/setup-login-child-lifecycle.js +16 -4
- package/dist/setup-login-child-lifecycle.js.map +1 -1
- package/dist/setup-login-fallback.d.ts +54 -0
- package/dist/setup-login-fallback.d.ts.map +1 -0
- package/dist/setup-login-fallback.js +95 -0
- package/dist/setup-login-fallback.js.map +1 -0
- package/dist/setup-login-inline.d.ts +8 -46
- package/dist/setup-login-inline.d.ts.map +1 -1
- package/dist/setup-login-inline.js +79 -104
- package/dist/setup-login-inline.js.map +1 -1
- package/dist/setup-login-input-prompt.d.ts +7 -0
- package/dist/setup-login-input-prompt.d.ts.map +1 -0
- package/dist/setup-login-input-prompt.js +27 -0
- package/dist/setup-login-input-prompt.js.map +1 -0
- package/dist/setup-login-runner.d.ts.map +1 -1
- package/dist/setup-login-runner.js +15 -11
- package/dist/setup-login-runner.js.map +1 -1
- package/dist/status-projection-cache.d.ts +3 -0
- package/dist/status-projection-cache.d.ts.map +1 -1
- package/dist/status-projection-cache.js +4 -1
- package/dist/status-projection-cache.js.map +1 -1
- package/dist/thread-delivery.d.ts.map +1 -1
- package/dist/thread-delivery.js +14 -13
- package/dist/thread-delivery.js.map +1 -1
- package/dist/thread-purge.d.ts +52 -0
- package/dist/thread-purge.d.ts.map +1 -0
- package/dist/thread-purge.js +27 -0
- package/dist/thread-purge.js.map +1 -0
- package/package.json +25 -24
|
@@ -1,21 +1,20 @@
|
|
|
1
1
|
import { type HarnessAdapter } from "@claudexor/core";
|
|
2
|
-
import { type
|
|
2
|
+
import { type VendorQuotaObservations } from "@claudexor/orchestrator";
|
|
3
|
+
import { type AccountCatalogAvailability, type CredentialProfile, type CredentialUnusableObservation, type GlobalConfig } from "@claudexor/schema";
|
|
3
4
|
export interface AccountCatalogContext {
|
|
4
5
|
config: GlobalConfig;
|
|
5
|
-
quota:
|
|
6
|
-
snapshots: readonly QuotaSnapshot[];
|
|
7
|
-
absences: readonly QuotaAbsence[];
|
|
8
|
-
};
|
|
6
|
+
quota: VendorQuotaObservations;
|
|
9
7
|
unusable?: readonly CredentialUnusableObservation[];
|
|
10
8
|
}
|
|
11
9
|
/** Display membership uses the durable enabled registry, never the inference pool selector. */
|
|
12
10
|
export declare function catalogProfiles(context: AccountCatalogContext, harnessId: string, credentialProfileId?: string, managedLoginOnly?: boolean): CredentialProfile[];
|
|
13
|
-
/** Each account
|
|
11
|
+
/** Each account retains its own cold display acquisition, including failure. */
|
|
14
12
|
export declare function enumerateAccountCatalogs<T>(input: {
|
|
15
13
|
context: AccountCatalogContext;
|
|
16
14
|
adapter: HarnessAdapter | undefined;
|
|
17
15
|
profiles: readonly CredentialProfile[];
|
|
18
16
|
read(profile: CredentialProfile, canReadCatalog: boolean): Promise<T | null>;
|
|
17
|
+
observationKey: string;
|
|
19
18
|
}): Promise<Array<AccountCatalogAvailability & {
|
|
20
19
|
catalog: T | null;
|
|
21
20
|
}>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account-catalog.d.ts","sourceRoot":"","sources":["../src/account-catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"account-catalog.d.ts","sourceRoot":"","sources":["../src/account-catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACpF,OAAO,EAML,KAAK,uBAAuB,EAC7B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAEL,KAAK,0BAA0B,EAC/B,KAAK,iBAAiB,EACtB,KAAK,6BAA6B,EAClC,KAAK,YAAY,EAClB,MAAM,mBAAmB,CAAC;AAI3B,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,EAAE,uBAAuB,CAAC;IAC/B,QAAQ,CAAC,EAAE,SAAS,6BAA6B,EAAE,CAAC;CACrD;AAMD,+FAA+F;AAC/F,wBAAgB,eAAe,CAC7B,OAAO,EAAE,qBAAqB,EAC9B,SAAS,EAAE,MAAM,EACjB,mBAAmB,CAAC,EAAE,MAAM,EAC5B,gBAAgB,UAAQ,GACvB,iBAAiB,EAAE,CAmBrB;AAoFD,gFAAgF;AAChF,wBAAsB,wBAAwB,CAAC,CAAC,EAAE,KAAK,EAAE;IACvD,OAAO,EAAE,qBAAqB,CAAC;IAC/B,OAAO,EAAE,cAAc,GAAG,SAAS,CAAC;IACpC,QAAQ,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACvC,IAAI,CAAC,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC7E,cAAc,EAAE,MAAM,CAAC;CACxB,GAAG,OAAO,CAAC,KAAK,CAAC,0BAA0B,GAAG;IAAE,OAAO,EAAE,CAAC,GAAG,IAAI,CAAA;CAAE,CAAC,CAAC,CAgDrE"}
|
package/dist/account-catalog.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { credentialProfilePolicyState } from "@claudexor/core";
|
|
2
|
-
import {
|
|
2
|
+
import { composeCredentialProfileEvidence, applicableCredentialUnusable, profileQuotaBlock, profileStatusAdmits, resolveCredentialProfile, } from "@claudexor/orchestrator";
|
|
3
3
|
import { ControlProblem, } from "@claudexor/schema";
|
|
4
4
|
import { redactSecrets } from "@claudexor/util";
|
|
5
|
+
import { accountObservations, displayAccountObservation } from "./account-observations.js";
|
|
5
6
|
function catalogProblem(code, message, context = {}) {
|
|
6
7
|
return ControlProblem.parse({ code, message, retryable: false, context });
|
|
7
8
|
}
|
|
@@ -38,17 +39,31 @@ async function accountAvailability(context, adapter, profile) {
|
|
|
38
39
|
});
|
|
39
40
|
if (cardinality.ambiguous && profile.credential_kind !== "api_key")
|
|
40
41
|
return unavailable(catalogProblem("credential_profile_ambiguous", "The enabled profile set exceeds this platform's credential policy"));
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
42
|
+
const evidence = {
|
|
43
|
+
quota: context.quota,
|
|
44
|
+
unusable: context.unusable ?? [],
|
|
45
|
+
model: null,
|
|
46
|
+
route: profile.credential_kind === "api_key"
|
|
47
|
+
? "managed_api_key"
|
|
48
|
+
: "vendor_native",
|
|
49
|
+
};
|
|
50
|
+
const status = composeCredentialProfileEvidence((await displayAccountObservation(profile, adapter)).status, evidence);
|
|
45
51
|
if (!profileStatusAdmits(profile, status)) {
|
|
46
|
-
const
|
|
52
|
+
const refusal = applicableCredentialUnusable(status, evidence);
|
|
53
|
+
const revoked = refusal
|
|
54
|
+
? refusal.code === "auth_revoked"
|
|
55
|
+
: status.verification_source === "vendor" && status.verification === "failed";
|
|
47
56
|
const unknown = !revoked && (status.availability === "unknown" || status.stale === true);
|
|
48
57
|
return {
|
|
49
58
|
...row,
|
|
50
59
|
availability: unknown ? "unknown" : "unavailable",
|
|
51
|
-
problem: catalogProblem(unknown
|
|
60
|
+
problem: catalogProblem(unknown
|
|
61
|
+
? "catalog_account_status_unknown"
|
|
62
|
+
: revoked
|
|
63
|
+
? "auth_required"
|
|
64
|
+
: refusal
|
|
65
|
+
? "credential_unusable"
|
|
66
|
+
: "auth_unavailable", "The account has no verified current catalog credential", { observedAt: status.last_verified_at }),
|
|
52
67
|
canReadCatalog: false,
|
|
53
68
|
};
|
|
54
69
|
}
|
|
@@ -65,12 +80,12 @@ async function accountAvailability(context, adapter, profile) {
|
|
|
65
80
|
canReadCatalog: true,
|
|
66
81
|
};
|
|
67
82
|
}
|
|
68
|
-
/** Each account
|
|
83
|
+
/** Each account retains its own cold display acquisition, including failure. */
|
|
69
84
|
export async function enumerateAccountCatalogs(input) {
|
|
70
85
|
return Promise.all(input.profiles.map(async (profile) => {
|
|
71
86
|
const { canReadCatalog, ...facts } = await accountAvailability(input.context, input.adapter, profile);
|
|
72
87
|
try {
|
|
73
|
-
const catalog = await input.read(profile, canReadCatalog);
|
|
88
|
+
const { value: catalog } = await accountObservations.read(input.observationKey, profile, () => input.read(profile, canReadCatalog));
|
|
74
89
|
return catalog === null && facts.problem === null
|
|
75
90
|
? {
|
|
76
91
|
...facts,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account-catalog.js","sourceRoot":"","sources":["../src/account-catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAuB,MAAM,iBAAiB,CAAC;AACpF,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"account-catalog.js","sourceRoot":"","sources":["../src/account-catalog.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { CredentialAccountProbeReceipt, HarnessAdapter } from "@claudexor/core";
|
|
2
|
+
import { type CredentialProfile } from "@claudexor/schema";
|
|
3
|
+
interface Observation<T> {
|
|
4
|
+
value: T;
|
|
5
|
+
at: number;
|
|
6
|
+
}
|
|
7
|
+
/** Display acquisition is cold-once, including failure. TTL ages evidence; it
|
|
8
|
+
* never schedules another vendor call. Credential invalidation and explicit
|
|
9
|
+
* Refresh discard it. Run admission does not read this display cache. */
|
|
10
|
+
declare class AccountObservations {
|
|
11
|
+
private entries;
|
|
12
|
+
generation: number;
|
|
13
|
+
constructor();
|
|
14
|
+
invalidate(): void;
|
|
15
|
+
invalidateCatalogs(): void;
|
|
16
|
+
observeProfile(profile: CredentialProfile, receipt: CredentialAccountProbeReceipt, generation: number): void;
|
|
17
|
+
read<T>(kind: string, profile: CredentialProfile, acquire: () => Promise<T>, fresh?: boolean): Promise<Observation<T>>;
|
|
18
|
+
}
|
|
19
|
+
export declare const accountObservations: AccountObservations;
|
|
20
|
+
/** Non-secret identity from this binding's owned store, never an ambient login. */
|
|
21
|
+
export declare function profileAccountIdentity(profile: CredentialProfile): {
|
|
22
|
+
email?: string | undefined;
|
|
23
|
+
plan?: string | undefined;
|
|
24
|
+
} | null;
|
|
25
|
+
/** One acquisition shared by profile hydration and account-catalog display. */
|
|
26
|
+
export declare function displayAccountObservation(profile: CredentialProfile, adapter?: HarnessAdapter, fresh?: boolean): Promise<CredentialAccountProbeReceipt>;
|
|
27
|
+
/** Existing necessary probes feed the same display owner; observing a run
|
|
28
|
+
* never starts an extra probe. A credential mutation rejects late receipts. */
|
|
29
|
+
export declare function retainAccountProbeObservations(adapter: HarnessAdapter): HarnessAdapter;
|
|
30
|
+
export {};
|
|
31
|
+
//# sourceMappingURL=account-observations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account-observations.d.ts","sourceRoot":"","sources":["../src/account-observations.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,6BAA6B,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAErF,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,mBAAmB,CAAC;AAK3B,UAAU,WAAW,CAAC,CAAC;IACrB,KAAK,EAAE,CAAC,CAAC;IACT,EAAE,EAAE,MAAM,CAAC;CACZ;AAOD;;yEAEyE;AACzE,cAAM,mBAAmB;IACvB,OAAO,CAAC,OAAO,CAA4B;IAC3C,UAAU,SAAK;IAEf,cAEC;IAED,UAAU,IAAI,IAAI,CAGjB;IAED,kBAAkB,IAAI,IAAI,CAGzB;IAED,cAAc,CACZ,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,6BAA6B,EACtC,UAAU,EAAE,MAAM,GACjB,IAAI,CAiBN;IAED,IAAI,CAAC,CAAC,EACJ,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACzB,KAAK,UAAQ,GACZ,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAmBzB;CACF;AAED,eAAO,MAAM,mBAAmB,qBAA4B,CAAC;AAE7D,mFAAmF;AACnF,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,iBAAiB;;;SAKhE;AAED,+EAA+E;AAC/E,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,iBAAiB,EAC1B,OAAO,CAAC,EAAE,cAAc,EACxB,KAAK,UAAQ,GACZ,OAAO,CAAC,6BAA6B,CAAC,CAuCxC;AAED;+EAC+E;AAC/E,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,cAAc,GAAG,cAAc,CAkCtF"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { globalConfigPath } from "@claudexor/config";
|
|
2
|
+
import { probeCredentialProfileStatus } from "@claudexor/orchestrator";
|
|
3
|
+
import { AccountIdentity as AccountIdentitySchema, CredentialProfileStatus as ProfileStatusSchema, } from "@claudexor/schema";
|
|
4
|
+
import { claudeAccountIdentity } from "@claudexor/harness-claude";
|
|
5
|
+
import { codexAccountIdentity } from "@claudexor/harness-codex";
|
|
6
|
+
import { registerStatusProjection, STATUS_PROJECTION_TTL_MS } from "./status-projection-cache.js";
|
|
7
|
+
/** Display acquisition is cold-once, including failure. TTL ages evidence; it
|
|
8
|
+
* never schedules another vendor call. Credential invalidation and explicit
|
|
9
|
+
* Refresh discard it. Run admission does not read this display cache. */
|
|
10
|
+
class AccountObservations {
|
|
11
|
+
entries = new Map();
|
|
12
|
+
generation = 0;
|
|
13
|
+
constructor() {
|
|
14
|
+
registerStatusProjection(this);
|
|
15
|
+
}
|
|
16
|
+
invalidate() {
|
|
17
|
+
this.entries.clear();
|
|
18
|
+
this.generation += 1;
|
|
19
|
+
}
|
|
20
|
+
invalidateCatalogs() {
|
|
21
|
+
for (const key of this.entries.keys())
|
|
22
|
+
if (key.split("\0")[1] !== "profile")
|
|
23
|
+
this.entries.delete(key);
|
|
24
|
+
}
|
|
25
|
+
observeProfile(profile, receipt, generation) {
|
|
26
|
+
if (generation !== this.generation)
|
|
27
|
+
return;
|
|
28
|
+
const key = [globalConfigPath(), "profile", profile.harness_id, profile.profile_id].join("\0");
|
|
29
|
+
// The display acquisition already receives this same adapter response.
|
|
30
|
+
if (this.entries.get(key)?.pending)
|
|
31
|
+
return;
|
|
32
|
+
const status = ProfileStatusSchema.safeParse(receipt.status);
|
|
33
|
+
if (!status.success ||
|
|
34
|
+
status.data.profile_id !== profile.profile_id ||
|
|
35
|
+
status.data.harness_id !== profile.harness_id)
|
|
36
|
+
return;
|
|
37
|
+
this.entries.set(key, {
|
|
38
|
+
fingerprint: JSON.stringify(profile),
|
|
39
|
+
pending: false,
|
|
40
|
+
promise: Promise.resolve({ value: { ...receipt, status: status.data }, at: Date.now() }),
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
read(kind, profile, acquire, fresh = false) {
|
|
44
|
+
const key = [globalConfigPath(), kind, profile.harness_id, profile.profile_id].join("\0");
|
|
45
|
+
const fingerprint = JSON.stringify(profile);
|
|
46
|
+
const current = this.entries.get(key);
|
|
47
|
+
if (current?.fingerprint === fingerprint && (!fresh || current.pending))
|
|
48
|
+
return current.promise;
|
|
49
|
+
const entry = { fingerprint, pending: true, promise: Promise.resolve(null) };
|
|
50
|
+
entry.promise = Promise.resolve()
|
|
51
|
+
.then(acquire)
|
|
52
|
+
.then((value) => {
|
|
53
|
+
if (this.entries.get(key) !== entry)
|
|
54
|
+
throw new Error("Account observation changed during acquisition; refresh again");
|
|
55
|
+
return { value, at: Date.now() };
|
|
56
|
+
})
|
|
57
|
+
.finally(() => {
|
|
58
|
+
entry.pending = false;
|
|
59
|
+
});
|
|
60
|
+
this.entries.set(key, entry);
|
|
61
|
+
return entry.promise;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
export const accountObservations = new AccountObservations();
|
|
65
|
+
/** Non-secret identity from this binding's owned store, never an ambient login. */
|
|
66
|
+
export function profileAccountIdentity(profile) {
|
|
67
|
+
if (!profile.isolation_locator)
|
|
68
|
+
return null;
|
|
69
|
+
if (profile.harness_id === "codex")
|
|
70
|
+
return codexAccountIdentity(profile.isolation_locator);
|
|
71
|
+
if (profile.harness_id === "claude")
|
|
72
|
+
return claudeAccountIdentity(profile.isolation_locator);
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
/** One acquisition shared by profile hydration and account-catalog display. */
|
|
76
|
+
export async function displayAccountObservation(profile, adapter, fresh = false) {
|
|
77
|
+
const observed = await accountObservations.read("profile", profile, async () => {
|
|
78
|
+
let identity = profileAccountIdentity(profile);
|
|
79
|
+
const status = await probeCredentialProfileStatus(profile, adapter?.probeCredentialAccount
|
|
80
|
+
? async (candidate) => {
|
|
81
|
+
const receipt = await adapter.probeCredentialAccount(candidate);
|
|
82
|
+
if (receipt.status.profile_id !== candidate.profile_id ||
|
|
83
|
+
receipt.status.harness_id !== candidate.harness_id)
|
|
84
|
+
throw new Error("Account probe returned a different profile");
|
|
85
|
+
identity =
|
|
86
|
+
receipt.identity === null ? null : AccountIdentitySchema.parse(receipt.identity);
|
|
87
|
+
return receipt.status;
|
|
88
|
+
}
|
|
89
|
+
: adapter?.probeCredentialProfile?.bind(adapter));
|
|
90
|
+
return { status, identity };
|
|
91
|
+
}, fresh);
|
|
92
|
+
const age = Math.max(0, Date.now() - observed.at);
|
|
93
|
+
if (age <= STATUS_PROJECTION_TTL_MS)
|
|
94
|
+
return observed.value;
|
|
95
|
+
return {
|
|
96
|
+
...observed.value,
|
|
97
|
+
status: {
|
|
98
|
+
...observed.value.status,
|
|
99
|
+
// Retain what the probe observed. Display age does not revoke that fact
|
|
100
|
+
// or decide whether the binding may make its first catalog read. Actual
|
|
101
|
+
// run admission performs its own probe outside this display cache.
|
|
102
|
+
detail: `Last checked ${new Date(observed.at).toISOString()}; refresh to verify current readiness. ${observed.value.status.detail ?? ""}`.trim(),
|
|
103
|
+
},
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
/** Existing necessary probes feed the same display owner; observing a run
|
|
107
|
+
* never starts an extra probe. A credential mutation rejects late receipts. */
|
|
108
|
+
export function retainAccountProbeObservations(adapter) {
|
|
109
|
+
const profileProbe = adapter.probeCredentialProfile?.bind(adapter);
|
|
110
|
+
const accountProbe = adapter.probeCredentialAccount?.bind(adapter);
|
|
111
|
+
return {
|
|
112
|
+
...adapter,
|
|
113
|
+
...(profileProbe
|
|
114
|
+
? {
|
|
115
|
+
probeCredentialProfile: async (...args) => {
|
|
116
|
+
const generation = accountObservations.generation;
|
|
117
|
+
const status = await profileProbe(...args);
|
|
118
|
+
accountObservations.observeProfile(args[0], { status, identity: profileAccountIdentity(args[0]) }, generation);
|
|
119
|
+
return status;
|
|
120
|
+
},
|
|
121
|
+
}
|
|
122
|
+
: {}),
|
|
123
|
+
...(accountProbe
|
|
124
|
+
? {
|
|
125
|
+
probeCredentialAccount: async (...args) => {
|
|
126
|
+
const generation = accountObservations.generation;
|
|
127
|
+
const receipt = await accountProbe(...args);
|
|
128
|
+
accountObservations.observeProfile(args[0], receipt, generation);
|
|
129
|
+
return receipt;
|
|
130
|
+
},
|
|
131
|
+
}
|
|
132
|
+
: {}),
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=account-observations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account-observations.js","sourceRoot":"","sources":["../src/account-observations.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,16 +8,10 @@
|
|
|
8
8
|
* detected default-store logins are auto-registered as ordinary rows at
|
|
9
9
|
* daemon start.
|
|
10
10
|
*/
|
|
11
|
-
import type { AccountIdentity, ControlHarnessAccountPool, CredentialProfile, CredentialProfileStatus, QuotaSnapshot } from "@claudexor/schema";
|
|
11
|
+
import type { AccountIdentity, ControlHarnessAccountPool, CredentialProfile, CredentialProfileStatus, CredentialUnusableObservation, QuotaSnapshot } from "@claudexor/schema";
|
|
12
|
+
import { type VendorQuotaObservations } from "@claudexor/orchestrator";
|
|
12
13
|
import type { HarnessStatus } from "@claudexor/gateway";
|
|
13
14
|
import { credentialProfilePolicyState } from "@claudexor/core";
|
|
14
|
-
/**
|
|
15
|
-
* Non-secret {email, plan} of a config_dir_login PROFILE, read daemon-side from
|
|
16
|
-
* the profile's OWN isolation-locator store (INV-067) — never the ordinary
|
|
17
|
-
* vendor home. Secret-ref profiles (no isolation_locator) and non-config_dir
|
|
18
|
-
* families project no identity.
|
|
19
|
-
*/
|
|
20
|
-
export declare function profileAccountIdentity(profile: CredentialProfile): AccountIdentity | null;
|
|
21
15
|
/**
|
|
22
16
|
* Doctor readiness projection for one credential profile (INV-135) — the ONE
|
|
23
17
|
* live probe the accounts response and the profile mutation receipts share.
|
|
@@ -31,7 +25,7 @@ export declare function disabledProfileSharesOsUserCredential(state: ReturnType<
|
|
|
31
25
|
* store identity path. A malformed rich receipt loses identity and fails
|
|
32
26
|
* closed through the shared readiness wrapper.
|
|
33
27
|
*/
|
|
34
|
-
export declare function profileAccountProjection(profile: CredentialProfile, registry?: readonly CredentialProfile[], platform?: NodeJS.Platform): Promise<{
|
|
28
|
+
export declare function profileAccountProjection(profile: CredentialProfile, registry?: readonly CredentialProfile[], platform?: NodeJS.Platform, fresh?: boolean): Promise<{
|
|
35
29
|
profile: CredentialProfile;
|
|
36
30
|
status: CredentialProfileStatus;
|
|
37
31
|
identity: AccountIdentity | null;
|
|
@@ -49,5 +43,7 @@ export declare function accountPoolsProjection(repoRoot: string, quotaSnapshots?
|
|
|
49
43
|
profile: CredentialProfile;
|
|
50
44
|
status: CredentialProfileStatus;
|
|
51
45
|
}[];
|
|
46
|
+
quota?: VendorQuotaObservations;
|
|
47
|
+
unusable?: readonly CredentialUnusableObservation[];
|
|
52
48
|
}): Promise<ControlHarnessAccountPool[]>;
|
|
53
49
|
//# sourceMappingURL=accounts-projection.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accounts-projection.d.ts","sourceRoot":"","sources":["../src/accounts-projection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EACV,eAAe,EACf,yBAAyB,EACzB,iBAAiB,EACjB,uBAAuB,EACvB,aAAa,EACd,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"accounts-projection.d.ts","sourceRoot":"","sources":["../src/accounts-projection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EACV,eAAe,EACf,yBAAyB,EACzB,iBAAiB,EACjB,uBAAuB,EACvB,6BAA6B,EAC7B,aAAa,EACd,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAML,KAAK,uBAAuB,EAC7B,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;AAK/D;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,iBAAiB,EAC1B,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAC3C,OAAO,CAAC,uBAAuB,CAAC,CAOlC;AAiBD,wBAAgB,qCAAqC,CACnD,KAAK,EAAE,UAAU,CAAC,OAAO,4BAA4B,CAAC,GACrD,OAAO,CAET;AAED;;;;;GAKG;AACH,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,iBAAiB,EAC1B,QAAQ,GAAE,SAAS,iBAAiB,EAAc,EAClD,QAAQ,GAAE,MAAM,CAAC,QAA2B,EAC5C,KAAK,UAAQ,GACZ,OAAO,CAAC;IACT,OAAO,EAAE,iBAAiB,CAAC;IAC3B,MAAM,EAAE,uBAAuB,CAAC;IAChC,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAC;CAClC,CAAC,CAqBD;AAED;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,MAAM,EAChB,cAAc,GAAE,SAAS,aAAa,EAAO,EAC7C,QAAQ,CAAC,EAAE;IACT,QAAQ,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IACpC,QAAQ,CAAC,EAAE,SAAS;QAAE,OAAO,EAAE,iBAAiB,CAAC;QAAC,MAAM,EAAE,uBAAuB,CAAA;KAAE,EAAE,CAAC;IACtF,KAAK,CAAC,EAAE,uBAAuB,CAAC;IAChC,QAAQ,CAAC,EAAE,SAAS,6BAA6B,EAAE,CAAC;CACrD,GACA,OAAO,CAAC,yBAAyB,EAAE,CAAC,CAmItC"}
|
|
@@ -1,26 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { estimateEffectiveAuthRoute } from "@claudexor/schema";
|
|
2
2
|
import { loadConfig } from "@claudexor/config";
|
|
3
|
-
import { effectiveAuthPreference, probeCredentialProfileStatus, profileStatusAdmits, selectFromAccountPool, } from "@claudexor/orchestrator";
|
|
3
|
+
import { effectiveAuthPreference, composeCredentialProfileEvidence, probeCredentialProfileStatus, profileStatusAdmits, selectFromAccountPool, } from "@claudexor/orchestrator";
|
|
4
4
|
import { credentialProfilePolicyState } from "@claudexor/core";
|
|
5
|
-
import {
|
|
6
|
-
import { claudeAccountIdentity } from "@claudexor/harness-claude";
|
|
5
|
+
import { displayAccountObservation, profileAccountIdentity } from "./account-observations.js";
|
|
7
6
|
import { buildGateway, buildRegistry } from "./registry.js";
|
|
8
|
-
import { preProgressRefusalLedger } from "./run-orchestrator.js";
|
|
9
|
-
/**
|
|
10
|
-
* Non-secret {email, plan} of a config_dir_login PROFILE, read daemon-side from
|
|
11
|
-
* the profile's OWN isolation-locator store (INV-067) — never the ordinary
|
|
12
|
-
* vendor home. Secret-ref profiles (no isolation_locator) and non-config_dir
|
|
13
|
-
* families project no identity.
|
|
14
|
-
*/
|
|
15
|
-
export function profileAccountIdentity(profile) {
|
|
16
|
-
if (!profile.isolation_locator)
|
|
17
|
-
return null;
|
|
18
|
-
if (profile.harness_id === "codex")
|
|
19
|
-
return codexAccountIdentity(profile.isolation_locator);
|
|
20
|
-
if (profile.harness_id === "claude")
|
|
21
|
-
return claudeAccountIdentity(profile.isolation_locator);
|
|
22
|
-
return null;
|
|
23
|
-
}
|
|
7
|
+
import { credentialUnusableLedger, preProgressRefusalLedger } from "./run-orchestrator.js";
|
|
24
8
|
/**
|
|
25
9
|
* Doctor readiness projection for one credential profile (INV-135) — the ONE
|
|
26
10
|
* live probe the accounts response and the profile mutation receipts share.
|
|
@@ -54,7 +38,7 @@ export function disabledProfileSharesOsUserCredential(state) {
|
|
|
54
38
|
* store identity path. A malformed rich receipt loses identity and fails
|
|
55
39
|
* closed through the shared readiness wrapper.
|
|
56
40
|
*/
|
|
57
|
-
export async function profileAccountProjection(profile, registry = [profile], platform = process.platform) {
|
|
41
|
+
export async function profileAccountProjection(profile, registry = [profile], platform = process.platform, fresh = false) {
|
|
58
42
|
const adapter = buildRegistry().get(profile.harness_id);
|
|
59
43
|
const cardinality = credentialProfilePolicyState({ adapter, registry, platform });
|
|
60
44
|
if (!profile.enabled && disabledProfileSharesOsUserCredential(cardinality)) {
|
|
@@ -71,24 +55,7 @@ export async function profileAccountProjection(profile, registry = [profile], pl
|
|
|
71
55
|
identity: profileAccountIdentity(profile),
|
|
72
56
|
};
|
|
73
57
|
}
|
|
74
|
-
|
|
75
|
-
return {
|
|
76
|
-
profile,
|
|
77
|
-
status: await probeCredentialProfileStatus(profile, adapter?.probeCredentialProfile?.bind(adapter)),
|
|
78
|
-
identity: profileAccountIdentity(profile),
|
|
79
|
-
};
|
|
80
|
-
}
|
|
81
|
-
let identity = null;
|
|
82
|
-
const status = await probeCredentialProfileStatus(profile, async (candidate) => {
|
|
83
|
-
const receipt = await adapter.probeCredentialAccount(candidate);
|
|
84
|
-
if (receipt.status.profile_id !== candidate.profile_id ||
|
|
85
|
-
receipt.status.harness_id !== candidate.harness_id) {
|
|
86
|
-
throw new Error("profile account probe returned a receipt for a different profile");
|
|
87
|
-
}
|
|
88
|
-
identity = receipt.identity === null ? null : AccountIdentitySchema.parse(receipt.identity);
|
|
89
|
-
return receipt.status;
|
|
90
|
-
});
|
|
91
|
-
return { profile, status, identity };
|
|
58
|
+
return { profile, ...(await displayAccountObservation(profile, adapter, fresh)) };
|
|
92
59
|
}
|
|
93
60
|
/**
|
|
94
61
|
* The per-harness pool routing verdict (`GET /v2/account-pools` and the
|
|
@@ -110,8 +77,22 @@ export async function accountPoolsProjection(repoRoot, quotaSnapshots = [], snap
|
|
|
110
77
|
}
|
|
111
78
|
}
|
|
112
79
|
const statusById = new Map(statuses.map((status) => [status.id, status]));
|
|
80
|
+
const unusable = snapshot?.unusable ?? credentialUnusableLedger.live();
|
|
81
|
+
const profiles = (snapshot?.profiles ?? []).map((entry) => ({
|
|
82
|
+
...entry,
|
|
83
|
+
status: composeCredentialProfileEvidence(entry.status, {
|
|
84
|
+
quota: snapshot?.quota ?? {
|
|
85
|
+
snapshots: quotaSnapshots,
|
|
86
|
+
absences: [],
|
|
87
|
+
honored: credentialUnusableLedger.honored(),
|
|
88
|
+
},
|
|
89
|
+
unusable,
|
|
90
|
+
model: cfg.harnesses[entry.profile.harness_id]?.default_model ?? null,
|
|
91
|
+
route: entry.profile.credential_kind === "api_key" ? "managed_api_key" : "vendor_native",
|
|
92
|
+
}),
|
|
93
|
+
}));
|
|
113
94
|
const readyProfiles = new Map();
|
|
114
|
-
for (const entry of
|
|
95
|
+
for (const entry of profiles) {
|
|
115
96
|
// next_up is an unpinned pool verdict: the same admission as pool routing.
|
|
116
97
|
if (!entry.profile.enabled ||
|
|
117
98
|
!profileStatusAdmits(entry.profile, entry.status, { unpinned: true }))
|
|
@@ -183,7 +164,7 @@ export async function accountPoolsProjection(repoRoot, quotaSnapshots = [], snap
|
|
|
183
164
|
}
|
|
184
165
|
// Enabled rows that are registered but not ready are named with what their
|
|
185
166
|
// probe observed: an unanswered probe is unknown, never "not signed in".
|
|
186
|
-
const unready =
|
|
167
|
+
const unready = profiles.filter((entry) => entry.profile.harness_id === harnessId &&
|
|
187
168
|
entry.profile.enabled &&
|
|
188
169
|
entry.profile.credential_kind !== "api_key" &&
|
|
189
170
|
!profileStatusAdmits(entry.profile, entry.status, { unpinned: true }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accounts-projection.js","sourceRoot":"","sources":["../src/accounts-projection.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"accounts-projection.js","sourceRoot":"","sources":["../src/accounts-projection.ts"],"names":[],"mappings":"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"}
|
|
@@ -130,15 +130,17 @@ export declare function createCredentialProfilesService(quotaRegistry: () => Quo
|
|
|
130
130
|
id: string;
|
|
131
131
|
label: string;
|
|
132
132
|
applies_to_models?: string[] | null | undefined;
|
|
133
|
+
applies_to_model_prefixes?: string[] | undefined;
|
|
133
134
|
applies_to_unspecified_model?: boolean | undefined;
|
|
134
135
|
used_ratio: number | null;
|
|
135
136
|
window_seconds: number | null;
|
|
136
137
|
resets_at: string | null;
|
|
137
138
|
cooldown_until: string | null;
|
|
138
139
|
}[];
|
|
139
|
-
source: "agy_command_usage" | "claude_api_retry" | "claude_oauth_usage" | "claude_statusline" | "codex_app_server" | "codex_rollout" | "cursor_rate_limit";
|
|
140
|
+
source: "agy_command_usage" | "claude_api_retry" | "claude_oauth_usage" | "claude_rate_limit_event" | "claude_statusline" | "codex_app_server" | "codex_app_server_event" | "codex_rollout" | "cursor_rate_limit";
|
|
140
141
|
observed_at: string;
|
|
141
142
|
freshness: "fresh" | "stale" | "unknown";
|
|
143
|
+
snapshot_id?: string | undefined;
|
|
142
144
|
availability?: {
|
|
143
145
|
state: "available" | "cooldown" | "exhausted";
|
|
144
146
|
blocking_constraints: string[];
|
|
@@ -146,6 +148,7 @@ export declare function createCredentialProfilesService(quotaRegistry: () => Quo
|
|
|
146
148
|
model_scoped_exhaustions: {
|
|
147
149
|
constraint_id: string;
|
|
148
150
|
applies_to_models: string[];
|
|
151
|
+
applies_to_model_prefixes?: string[] | undefined;
|
|
149
152
|
resets_at: string | null;
|
|
150
153
|
}[];
|
|
151
154
|
} | undefined;
|
|
@@ -165,6 +168,12 @@ export declare function createCredentialProfilesService(quotaRegistry: () => Quo
|
|
|
165
168
|
refreshed_at: string | null;
|
|
166
169
|
refresh_skipped?: {
|
|
167
170
|
vendor: string;
|
|
171
|
+
subject?: {
|
|
172
|
+
harness: string;
|
|
173
|
+
credential_route: "local" | "managed_api_key" | "vendor_native";
|
|
174
|
+
plan_label: string | null;
|
|
175
|
+
subject_id: string | null;
|
|
176
|
+
} | undefined;
|
|
168
177
|
not_before: string;
|
|
169
178
|
}[] | undefined;
|
|
170
179
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accounts-services.d.ts","sourceRoot":"","sources":["../src/accounts-services.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,EAAsB,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAG5E,OAAO,KAAK,EACV,iBAAiB,EACjB,uBAAuB,
|
|
1
|
+
{"version":3,"file":"accounts-services.d.ts","sourceRoot":"","sources":["../src/accounts-services.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,EAAsB,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAG5E,OAAO,KAAK,EACV,iBAAiB,EACjB,uBAAuB,EAExB,MAAM,mBAAmB,CAAC;AAe3B,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB,CAAC;AAEF,wBAAsB,sBAAsB,CAAC,QAAQ,EAAE,SAAS,aAAa,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA6B9E;AAED;;;;oEAIoE;AACpE,wBAAgB,+BAA+B,CAAC,aAAa,EAAE,MAAM,aAAa;iCAmDtC;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmCjE"}
|