@sentropic/llm-mesh 0.13.0 → 0.14.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.
Files changed (100) hide show
  1. package/README.md +105 -6
  2. package/dist/account-transports.d.ts +14 -1
  3. package/dist/account-transports.d.ts.map +1 -1
  4. package/dist/account-transports.js +37 -3
  5. package/dist/account-transports.js.map +1 -1
  6. package/dist/codex.d.ts +43 -0
  7. package/dist/codex.d.ts.map +1 -0
  8. package/dist/codex.js +62 -0
  9. package/dist/codex.js.map +1 -0
  10. package/dist/enrollment/cloud-code.d.ts +6 -1
  11. package/dist/enrollment/cloud-code.d.ts.map +1 -1
  12. package/dist/enrollment/cloud-code.js +53 -25
  13. package/dist/enrollment/cloud-code.js.map +1 -1
  14. package/dist/enrollment/codex.d.ts +1 -0
  15. package/dist/enrollment/codex.d.ts.map +1 -1
  16. package/dist/enrollment/codex.js +1 -0
  17. package/dist/enrollment/codex.js.map +1 -1
  18. package/dist/enrollment/contracts.d.ts +10 -0
  19. package/dist/enrollment/contracts.d.ts.map +1 -1
  20. package/dist/equivalence-council.d.ts +61 -0
  21. package/dist/equivalence-council.d.ts.map +1 -0
  22. package/dist/equivalence-council.js +119 -0
  23. package/dist/equivalence-council.js.map +1 -0
  24. package/dist/generated-model-council.d.ts +10 -0
  25. package/dist/generated-model-council.d.ts.map +1 -0
  26. package/dist/generated-model-council.js +32 -0
  27. package/dist/generated-model-council.js.map +1 -0
  28. package/dist/generation.d.ts +3 -0
  29. package/dist/generation.d.ts.map +1 -1
  30. package/dist/index.d.ts +9 -0
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +9 -0
  33. package/dist/index.js.map +1 -1
  34. package/dist/messages.d.ts +8 -1
  35. package/dist/messages.d.ts.map +1 -1
  36. package/dist/node/index.d.ts +1 -0
  37. package/dist/node/index.d.ts.map +1 -1
  38. package/dist/node/index.js +1 -0
  39. package/dist/node/index.js.map +1 -1
  40. package/dist/node/keyring/encrypted-file-keyring.d.ts +13 -0
  41. package/dist/node/keyring/encrypted-file-keyring.d.ts.map +1 -0
  42. package/dist/node/keyring/encrypted-file-keyring.js +134 -0
  43. package/dist/node/keyring/encrypted-file-keyring.js.map +1 -0
  44. package/dist/route-attempt.d.ts +18 -0
  45. package/dist/route-attempt.d.ts.map +1 -0
  46. package/dist/route-attempt.js +70 -0
  47. package/dist/route-attempt.js.map +1 -0
  48. package/dist/route-health.d.ts +14 -0
  49. package/dist/route-health.d.ts.map +1 -0
  50. package/dist/route-health.js +69 -0
  51. package/dist/route-health.js.map +1 -0
  52. package/dist/route-planner-state.d.ts +37 -0
  53. package/dist/route-planner-state.d.ts.map +1 -0
  54. package/dist/route-planner-state.js +27 -0
  55. package/dist/route-planner-state.js.map +1 -0
  56. package/dist/route-planner.d.ts +48 -0
  57. package/dist/route-planner.d.ts.map +1 -0
  58. package/dist/route-planner.js +327 -0
  59. package/dist/route-planner.js.map +1 -0
  60. package/dist/route-selection.d.ts +17 -0
  61. package/dist/route-selection.d.ts.map +1 -0
  62. package/dist/route-selection.js +127 -0
  63. package/dist/route-selection.js.map +1 -0
  64. package/dist/routing-contracts.d.ts +130 -0
  65. package/dist/routing-contracts.d.ts.map +1 -0
  66. package/dist/routing-contracts.js +2 -0
  67. package/dist/routing-contracts.js.map +1 -0
  68. package/dist/routing-policy.d.ts +68 -0
  69. package/dist/routing-policy.d.ts.map +1 -0
  70. package/dist/routing-policy.js +93 -0
  71. package/dist/routing-policy.js.map +1 -0
  72. package/dist/routing-targets.d.ts +25 -0
  73. package/dist/routing-targets.d.ts.map +1 -0
  74. package/dist/routing-targets.js +48 -0
  75. package/dist/routing-targets.js.map +1 -0
  76. package/dist/service/facade.d.ts +31 -0
  77. package/dist/service/facade.d.ts.map +1 -1
  78. package/dist/service/facade.js +11 -2
  79. package/dist/service/facade.js.map +1 -1
  80. package/dist/service/local-account-transport-service.d.ts +15 -2
  81. package/dist/service/local-account-transport-service.d.ts.map +1 -1
  82. package/dist/service/local-account-transport-service.js +279 -17
  83. package/dist/service/local-account-transport-service.js.map +1 -1
  84. package/dist/transport/cloud-code-runtime-client.d.ts +22 -0
  85. package/dist/transport/cloud-code-runtime-client.d.ts.map +1 -0
  86. package/dist/transport/cloud-code-runtime-client.js +306 -0
  87. package/dist/transport/cloud-code-runtime-client.js.map +1 -0
  88. package/dist/transport/cloud-code-transport.d.ts +3 -0
  89. package/dist/transport/cloud-code-transport.d.ts.map +1 -1
  90. package/dist/transport/cloud-code-transport.js +39 -10
  91. package/dist/transport/cloud-code-transport.js.map +1 -1
  92. package/dist/transport/codex-runtime-client.d.ts +17 -0
  93. package/dist/transport/codex-runtime-client.d.ts.map +1 -0
  94. package/dist/transport/codex-runtime-client.js +121 -0
  95. package/dist/transport/codex-runtime-client.js.map +1 -0
  96. package/dist/transport/codex-runtime-wire.d.ts +5 -0
  97. package/dist/transport/codex-runtime-wire.d.ts.map +1 -0
  98. package/dist/transport/codex-runtime-wire.js +144 -0
  99. package/dist/transport/codex-runtime-wire.js.map +1 -0
  100. package/package.json +1 -1
package/README.md CHANGED
@@ -1,15 +1,114 @@
1
1
  # @sentropic/llm-mesh
2
2
 
3
- Provider-agnostic TypeScript contracts for Sentropic model access.
3
+ Provider-agnostic model runtime, enrollment, and routing control plane.
4
4
 
5
- This package boundary is the BR-14c model-access runtime extraction. It defines public provider/model IDs, capability metadata, normalized generation and streaming shapes, tool-use types, structured-output flags, authentication source types, deterministic provider adapter scaffolds, and retryable error metadata. BR-14c also cuts the Sentropic application LLM runtime over to this package and prepares the package for npm publication.
5
+ `@sentropic/llm-mesh` owns provider/model capabilities, enrolled account
6
+ eligibility, credentials, health, routing policy, affinity, and the versioned
7
+ model-equivalence council. It returns opaque route plans and prepared attempts;
8
+ neither a gateway nor another consumer receives provider credentials or raw
9
+ account identifiers.
6
10
 
7
11
  ## Public Scope
8
12
 
9
13
  - Providers: OpenAI, Google Gemini, Anthropic Claude, Mistral, Cohere.
10
- - Auth sources: direct token, user token, workspace token, environment token, Codex account.
11
- - Future account transport extension points: Gemini Code Assist and Claude Code.
14
+ - Auth sources: direct token, user token, workspace token, environment token,
15
+ Codex account, Cloud Code account, and Claude Code account.
12
16
  - Normalized stream events: `reasoning_delta`, `content_delta`, `tool_call_start`, `tool_call_delta`, `tool_call_result`, `status`, `error`, `done`.
13
- - Provider adapters: OpenAI, Gemini, Anthropic Claude, Mistral, and Cohere scaffolds accept injected clients for deterministic tests; they do not perform live SDK calls by default.
17
+ - Provider adapters: OpenAI, Gemini, Anthropic Claude, Mistral, and Cohere.
18
+ - Enrolled runtimes: `CodexRuntimeClient` and `CloudCodeRuntimeClient` execute
19
+ canonical requests without exposing their account tokens.
20
+ - Routing strategies: last successfully enrolled first (default), ordered, or
21
+ round-robin across new affinities only, with per-model/capability/intent rules.
14
22
 
15
- Application wiring, encrypted storage, quotas, retries, UI behavior, and concrete live provider credential storage remain outside this package contract. The application runtime may provide those integrations through the package's resolver and adapter hooks.
23
+ Caller authentication, wire translation, financial metering, and response
24
+ commitment remain outside this package. CLI enrollment uses an encrypted local
25
+ keyring; portal mode remains injection-only. Override the CLI keyring directory
26
+ with `SENTROPIC_LLM_MESH_KEYRING_DIR` when runtime isolation requires it.
27
+
28
+ `CloudCodeRuntimeClient` projects function parameter schemas onto the JSON
29
+ Schema subset accepted by the Cloud Code Gemini wire. Tool names, properties,
30
+ required fields and supported constraints are preserved; unsupported
31
+ validation-only keywords are omitted before dispatch rather than causing an
32
+ upstream 400 for rich Claude Code tool catalogs.
33
+
34
+ ## Routing policy
35
+
36
+ `DEFAULT_ROUTE_POLICY` uses the latest successful enrollment, a strict sticky
37
+ account, same-transport preference, at most three attempts, and a five-minute
38
+ negative-health cache. `retest-preferred` is the default fallback mode: a failed
39
+ preferred route is suppressed until its TTL expires, then tested again.
40
+ `one-way` promotes a successful fallback instead. Override `negativeCacheTtlMs`
41
+ between 1 second and 1 hour.
42
+
43
+ Equivalent-account rotation is disabled by default. Enabling
44
+ `rotateEquivalentAccounts` may move an affinity to another account and lose
45
+ provider-side prompt/session cache continuity; such a move is exposed as an
46
+ audited rebind with `cacheContinuityRisk: true`. Mesh preserves account and
47
+ stable-session affinity, but does not claim or manage a provider prompt cache.
48
+
49
+ The built-in equivalence council fails closed: a model is either covered by
50
+ fresh benchmark evidence or explicitly excluded. Update its pinned source and
51
+ generated artifact together:
52
+
53
+ ```sh
54
+ make refresh-llm-model-equivalences
55
+ make check-llm-model-equivalences
56
+ ```
57
+
58
+ Create the gateway-facing planner from the same facade that owns enrollment:
59
+
60
+ ```ts
61
+ import { createLlmMeshFacade } from '@sentropic/llm-mesh/facade';
62
+
63
+ const facade = createLlmMeshFacade({ mode: 'cli', configResolver });
64
+ const routePlanner = facade.createRoutePlanner(runtime, {
65
+ affinityAudit: (event) => audit.write(event),
66
+ });
67
+ ```
68
+
69
+ Every completed enrollment persists its `ownerScopeRef`. The planner lists and
70
+ prepares only accounts whose owner scope exactly matches the authenticated
71
+ `VerifiedRoutingSubject`; changing a bearer/session principal does not change
72
+ that owner scope or its affinities. Older local keyring records that predate
73
+ owner tagging fail closed unless the host explicitly binds them once:
74
+
75
+ ```ts
76
+ const facade = createLlmMeshFacade({
77
+ mode: 'cli',
78
+ configResolver,
79
+ legacyAccountOwnerScopeRef: stableLocalOwnerRef,
80
+ });
81
+ ```
82
+
83
+ That migration option is only for pre-ownerScope local records. New enrollment
84
+ always takes ownership from `StartEnrollmentInput.ownerScope`.
85
+
86
+ ## Cloud Code OAuth client rotation
87
+
88
+ The embedded Antigravity OAuth client credential is distributable client configuration, not a
89
+ user access or refresh token. Source and npm artifacts are built from the same checked-in value.
90
+
91
+ Rotate it from a protected `0600` file, then bump the package version in the same pull request:
92
+
93
+ ```sh
94
+ make rotate-llm-mesh-cloud-code-oauth \
95
+ CLOUD_CODE_OAUTH_CLIENT_SECRET_FILE=/absolute/path/to/client-secret
96
+ ```
97
+
98
+ Recovery from an official Antigravity binary is fail-closed and requires both the pinned binary
99
+ checksum and the expected credential fingerprint:
100
+
101
+ ```sh
102
+ make rotate-llm-mesh-cloud-code-oauth-from-agy \
103
+ AGY_BINARY=/absolute/path/to/antigravity \
104
+ AGY_BINARY_SHA256=<verified-binary-sha256> \
105
+ CLOUD_CODE_OAUTH_EXPECTED_SHA256=<approved-credential-sha256>
106
+ ```
107
+
108
+ Update the GitHub Actions secret `LLM_MESH_CLOUD_CODE_OAUTH_CLIENT_SECRET` before merging. The
109
+ main-branch publish job rebuilds the package, compares source and `dist` to that protected
110
+ reference, rejects credential fragments outside the intended module (including source maps), and
111
+ only then publishes through npm OIDC provenance. The workflow never writes the value to logs.
112
+
113
+ Published versions are immutable. Keep the previous and replacement clients valid for an agreed
114
+ grace period, or explicitly accept that revocation breaks enrollment for older package versions.
@@ -4,6 +4,7 @@ export type AccountTransportAccountStatus = 'active' | 'cooldown' | 'reauth_requ
4
4
  export type AccountTransportOutcomeStatus = 'success' | 'failed' | 'rate_limited' | 'auth_failed';
5
5
  export interface AccountTransportAccount {
6
6
  accountId: string;
7
+ ownerScopeRef?: string;
7
8
  accountLabel?: string | null;
8
9
  targetProviderId: ProviderId | (string & {});
9
10
  transportProviderId: AccountTransportProviderId | (string & {});
@@ -17,8 +18,12 @@ export interface AccountTransportAccount {
17
18
  cooldownUntil?: Date | string | null;
18
19
  headers?: Record<string, string>;
19
20
  metadata?: Record<string, unknown>;
21
+ enrollmentCompletedAt?: string;
20
22
  }
21
23
  export interface AccountTransportAcquireInput {
24
+ /** Mesh-internal exact candidate binding; never sourced from gateway ingress. */
25
+ accountId?: string;
26
+ ownerScopeRef?: string;
22
27
  targetProviderId: ProviderId | (string & {});
23
28
  transportProviderId: AccountTransportProviderId | (string & {});
24
29
  modelId?: ModelId | (string & {}) | null;
@@ -63,6 +68,8 @@ export interface AccountTransportAcquisition {
63
68
  metadata?: Record<string, unknown>;
64
69
  };
65
70
  recordOutcome(outcome: AccountTransportOutcome): Promise<void>;
71
+ /** Releases an unfinished reservation without changing account health. */
72
+ release?(): Promise<void>;
66
73
  }
67
74
  /**
68
75
  * Coordinator that manages account selection, leasing, and cooldown lifecycle.
@@ -83,7 +90,13 @@ export declare class InMemoryAccountTransportCoordinator implements AccountTrans
83
90
  private leaseSequence;
84
91
  private reservationSequence;
85
92
  constructor(accounts?: readonly AccountTransportAccount[]);
86
- addAccount(account: AccountTransportAccount): void;
93
+ addAccount(account: AccountTransportAccount): AccountTransportAccount;
94
+ /**
95
+ * Advance time-based lifecycle state without acquiring an account.
96
+ * Returns account ids whose cooldown expired so a durable host can persist
97
+ * the transition before exposing route inventory.
98
+ */
99
+ refreshLifecycle(nowInput?: Date | string | number): readonly string[];
87
100
  acquire(input: AccountTransportAcquireInput): Promise<AccountTransportAcquisition>;
88
101
  private getLeasedAccount;
89
102
  private selectAccount;
@@ -1 +1 @@
1
- {"version":3,"file":"account-transports.d.ts","sourceRoot":"","sources":["../src/account-transports.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"account-transports.d.ts","sourceRoot":"","sources":["../src/account-transports.ts"],"names":[],"mappings":"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"}
@@ -26,6 +26,7 @@ const buildLeaseKey = (input) => {
26
26
  return undefined;
27
27
  }
28
28
  return [
29
+ normalizeOptional(input.ownerScopeRef),
29
30
  normalizeOptional(input.workspaceId),
30
31
  input.affinityKey,
31
32
  input.targetProviderId,
@@ -60,13 +61,28 @@ export class InMemoryAccountTransportCoordinator {
60
61
  }
61
62
  }
62
63
  addAccount(account) {
63
- this.accounts.set(account.accountId, {
64
+ const stored = {
64
65
  ...account,
65
66
  status: account.status ?? 'active',
66
67
  priority: account.priority ?? 0,
67
68
  weight: Math.max(account.weight ?? 1, 1),
68
69
  totalAcquisitions: 0,
69
- });
70
+ };
71
+ this.accounts.set(account.accountId, stored);
72
+ // The local account service deliberately retains this exact object. Token
73
+ // refreshes and lifecycle transitions therefore update the executable
74
+ // coordinator state instead of a detached copy.
75
+ return stored;
76
+ }
77
+ /**
78
+ * Advance time-based lifecycle state without acquiring an account.
79
+ * Returns account ids whose cooldown expired so a durable host can persist
80
+ * the transition before exposing route inventory.
81
+ */
82
+ refreshLifecycle(nowInput) {
83
+ const now = toDate(nowInput);
84
+ this.releaseExpiredReservations(now);
85
+ return this.expireCooldowns(now);
70
86
  }
71
87
  async acquire(input) {
72
88
  const now = toDate(input.now);
@@ -132,6 +148,12 @@ export class InMemoryAccountTransportCoordinator {
132
148
  this.reservations.delete(reservation.reservationId);
133
149
  this.applyOutcome(account, outcome);
134
150
  },
151
+ release: async () => {
152
+ if (outcomeRecorded)
153
+ return;
154
+ outcomeRecorded = true;
155
+ this.reservations.delete(reservation.reservationId);
156
+ },
135
157
  };
136
158
  }
137
159
  getLeasedAccount(lease, input, now) {
@@ -145,6 +167,11 @@ export class InMemoryAccountTransportCoordinator {
145
167
  const candidates = [...this.accounts.values()]
146
168
  .filter((account) => this.isEligible(account, input, now))
147
169
  .sort((left, right) => {
170
+ const enrollmentOrder = (Date.parse(right.enrollmentCompletedAt ?? '') || 0)
171
+ - (Date.parse(left.enrollmentCompletedAt ?? '') || 0);
172
+ if (enrollmentOrder !== 0) {
173
+ return enrollmentOrder;
174
+ }
148
175
  if (right.priority !== left.priority) {
149
176
  return right.priority - left.priority;
150
177
  }
@@ -161,7 +188,11 @@ export class InMemoryAccountTransportCoordinator {
161
188
  return candidates[0];
162
189
  }
163
190
  isEligible(account, input, _now) {
164
- return account.targetProviderId === input.targetProviderId
191
+ return (!input.accountId || account.accountId === input.accountId)
192
+ && (input.ownerScopeRef
193
+ ? account.ownerScopeRef === input.ownerScopeRef
194
+ : account.ownerScopeRef === undefined)
195
+ && account.targetProviderId === input.targetProviderId
165
196
  && account.transportProviderId === input.transportProviderId
166
197
  && account.status === 'active'
167
198
  && supportsModel(account, input.modelId);
@@ -215,12 +246,15 @@ export class InMemoryAccountTransportCoordinator {
215
246
  }
216
247
  }
217
248
  expireCooldowns(now) {
249
+ const recovered = [];
218
250
  for (const account of this.accounts.values()) {
219
251
  if (account.status === 'cooldown' && !isCooldownActive(account, now)) {
220
252
  account.status = 'active';
221
253
  account.cooldownUntil = undefined;
254
+ recovered.push(account.accountId);
222
255
  }
223
256
  }
257
+ return recovered;
224
258
  }
225
259
  applyOutcome(account, outcome) {
226
260
  if (outcome.status === 'auth_failed') {
@@ -1 +1 @@
1
- {"version":3,"file":"account-transports.js","sourceRoot":"","sources":["../src/account-transports.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"account-transports.js","sourceRoot":"","sources":["../src/account-transports.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ export declare const CODEX_RESPONSES_URL = "https://chatgpt.com/backend-api/codex/responses";
2
+ export type CodexReasoningEffort = 'none' | 'low' | 'medium' | 'high' | 'xhigh';
3
+ export type CodexContentPart = {
4
+ type: 'text' | 'input_text';
5
+ text?: string;
6
+ } | {
7
+ type: string;
8
+ [key: string]: unknown;
9
+ };
10
+ export interface CodexInstructionsInputMessage {
11
+ readonly role?: string;
12
+ readonly content?: unknown;
13
+ }
14
+ export interface CodexResponsesRequestInput {
15
+ readonly model: string;
16
+ readonly stream?: boolean;
17
+ readonly input?: unknown;
18
+ readonly instructions?: string;
19
+ readonly reasoning?: {
20
+ readonly effort?: CodexReasoningEffort | string;
21
+ readonly [key: string]: unknown;
22
+ };
23
+ readonly max_output_tokens?: number;
24
+ readonly store?: boolean;
25
+ readonly [key: string]: unknown;
26
+ }
27
+ export interface CodexPreparedResponsesRequest {
28
+ readonly url: typeof CODEX_RESPONSES_URL;
29
+ readonly body: CodexResponsesRequestInput;
30
+ }
31
+ export declare const stringifyCodexContent: (value: unknown) => string;
32
+ export declare const codexInstructionsText: (content: unknown) => string;
33
+ export declare const collectCodexInstructions: (messages: readonly CodexInstructionsInputMessage[], fallback?: string) => string;
34
+ export declare const stripCodexInputIds: (body: string) => string;
35
+ export declare const prepareCodexResponsesRequest: (request: CodexResponsesRequestInput) => CodexPreparedResponsesRequest;
36
+ export interface CodexUsageDoneEvent {
37
+ readonly type: 'done';
38
+ readonly data: {
39
+ readonly usage?: unknown;
40
+ };
41
+ }
42
+ export declare const codexDoneEventFromResponseCompleted: (event: unknown) => CodexUsageDoneEvent;
43
+ //# sourceMappingURL=codex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../src/codex.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,oDAAoD,CAAC;AAErF,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;AAChF,MAAM,MAAM,gBAAgB,GACxB;IAAE,IAAI,EAAE,MAAM,GAAG,YAAY,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9C;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC;AAC7C,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B;AACD,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,SAAS,CAAC,EAAE;QACnB,QAAQ,CAAC,MAAM,CAAC,EAAE,oBAAoB,GAAG,MAAM,CAAC;QAChD,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACjC,CAAC;IACF,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACjC;AACD,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,GAAG,EAAE,OAAO,mBAAmB,CAAC;IACzC,QAAQ,CAAC,IAAI,EAAE,0BAA0B,CAAC;CAC3C;AAKD,eAAO,MAAM,qBAAqB,UAAW,OAAO,KAAG,MAGtD,CAAC;AAEF,eAAO,MAAM,qBAAqB,YAAa,OAAO,KAAG,MAQxD,CAAC;AAEF,eAAO,MAAM,wBAAwB,aACzB,SAAS,6BAA6B,EAAE,wBAEjD,MAMF,CAAC;AAWF,eAAO,MAAM,kBAAkB,SAAU,MAAM,KAAG,MAMjD,CAAC;AAEF,eAAO,MAAM,4BAA4B,YAC9B,0BAA0B,KAClC,6BAGF,CAAC;AAEF,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CAC7C;AAED,eAAO,MAAM,mCAAmC,UAAW,OAAO,KAAG,mBAKpE,CAAC"}
package/dist/codex.js ADDED
@@ -0,0 +1,62 @@
1
+ export const CODEX_RESPONSES_URL = 'https://chatgpt.com/backend-api/codex/responses';
2
+ const isRecord = (value) => Boolean(value) && typeof value === 'object' && !Array.isArray(value);
3
+ export const stringifyCodexContent = (value) => {
4
+ if (typeof value === 'string')
5
+ return value;
6
+ try {
7
+ return JSON.stringify(value ?? '');
8
+ }
9
+ catch {
10
+ return String(value ?? '');
11
+ }
12
+ };
13
+ export const codexInstructionsText = (content) => {
14
+ if (typeof content === 'string')
15
+ return content;
16
+ if (!Array.isArray(content))
17
+ return stringifyCodexContent(content);
18
+ const text = content.map((part) => {
19
+ if (!isRecord(part) || (part.type !== 'text' && part.type !== 'input_text'))
20
+ return '';
21
+ return typeof part.text === 'string' ? part.text : '';
22
+ }).filter((part) => part.trim().length > 0).join('\n\n').trim();
23
+ return text || stringifyCodexContent(content);
24
+ };
25
+ export const collectCodexInstructions = (messages, fallback = 'You are a helpful assistant.') => {
26
+ const instructions = messages
27
+ .filter((message) => message.role === 'system' || message.role === 'developer')
28
+ .map((message) => codexInstructionsText(message.content))
29
+ .filter((text) => text.trim().length > 0).join('\n\n').trim();
30
+ return instructions || fallback;
31
+ };
32
+ const stripCodexInputIdsFromValue = (value) => {
33
+ if (!Array.isArray(value))
34
+ return value;
35
+ return value.map((item) => {
36
+ if (!isRecord(item) || !('id' in item))
37
+ return item;
38
+ const { id: _id, ...rest } = item;
39
+ return rest;
40
+ });
41
+ };
42
+ export const stripCodexInputIds = (body) => {
43
+ try {
44
+ const parsed = JSON.parse(body);
45
+ parsed.input = stripCodexInputIdsFromValue(parsed.input);
46
+ return JSON.stringify(parsed);
47
+ }
48
+ catch {
49
+ return body;
50
+ }
51
+ };
52
+ export const prepareCodexResponsesRequest = (request) => {
53
+ const { max_output_tokens: _maxOutputTokens, ...rest } = request;
54
+ return { url: CODEX_RESPONSES_URL, body: { ...rest, store: false } };
55
+ };
56
+ export const codexDoneEventFromResponseCompleted = (event) => {
57
+ const record = isRecord(event) ? event : {};
58
+ const response = isRecord(record.response) ? record.response : undefined;
59
+ const usage = response && isRecord(response.usage) ? response.usage : undefined;
60
+ return { type: 'done', data: usage ? { usage } : {} };
61
+ };
62
+ //# sourceMappingURL=codex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex.js","sourceRoot":"","sources":["../src/codex.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,11 @@
1
1
  import type { ConfigResolver } from '../service/facade.js';
2
2
  import type { CompleteEnrollmentInput, EnrollmentProvider, EnrollmentSession, PreparedCredential, RefreshInput, ResolvedProviderMetadata, StartEnrollmentInput } from './contracts.js';
3
- export declare const CLOUD_CODE_AUTH_URL = "https://accounts.google.com/o/oauth2/v2/auth";
3
+ export declare const CLOUD_CODE_AUTH_URL = "https://accounts.google.com/o/oauth2/auth";
4
4
  export declare const CLOUD_CODE_TOKEN_URL = "https://oauth2.googleapis.com/token";
5
5
  export declare const CLOUD_CODE_LOAD_CODE_ASSIST_URL = "https://daily-cloudcode-pa.googleapis.com/v1internal:loadCodeAssist";
6
6
  export declare const CLOUD_CODE_USER_AGENT = "antigravity/cli/1.1.10 (aidev_client; os_type=linux; arch=amd64; auth_method=consumer)";
7
+ export declare const CLOUD_CODE_CLIENT_ID = "1071006060591-tmhssin2h21lcre235vtolojh4g403ep.apps.googleusercontent.com";
8
+ export declare const CLOUD_CODE_CLIENT_SECRET: string;
7
9
  export interface CloudCodeEnrollmentOptions {
8
10
  clientId?: string;
9
11
  clientSecret?: string;
@@ -23,6 +25,9 @@ export declare class CloudCodeEnrollmentProvider implements EnrollmentProvider {
23
25
  waitForCallback(enrollmentId: string): Promise<{
24
26
  accountId: string;
25
27
  label: string;
28
+ ownerScope: string;
29
+ credential: PreparedCredential;
30
+ metadata: ResolvedProviderMetadata;
26
31
  }>;
27
32
  complete(input: CompleteEnrollmentInput): Promise<PreparedCredential>;
28
33
  resolve(credential: PreparedCredential): Promise<ResolvedProviderMetadata>;
@@ -1 +1 @@
1
- {"version":3,"file":"cloud-code.d.ts","sourceRoot":"","sources":["../../src/enrollment/cloud-code.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EACV,uBAAuB,EACvB,kBAAkB,EAClB,iBAAiB,EAEjB,kBAAkB,EAClB,YAAY,EACZ,wBAAwB,EACxB,oBAAoB,EACrB,MAAM,gBAAgB,CAAC;AAIxB,eAAO,MAAM,mBAAmB,iDAAiD,CAAC;AAClF,eAAO,MAAM,oBAAoB,wCAAwC,CAAC;AAC1E,eAAO,MAAM,+BAA+B,wEAC2B,CAAC;AACxE,eAAO,MAAM,qBAAqB,2FACwD,CAAC;AAE3F,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;CACxB;AAED,qBAAa,2BAA4B,YAAW,kBAAkB;IACpE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAS;IAC7C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAiB;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAGrB;IACJ,OAAO,CAAC,QAAQ,CAAK;gBAET,OAAO,GAAE,0BAA+B;YAatC,UAAU;IAelB,KAAK,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAwD9D,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAmCpF,QAAQ,CAAC,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA8DrE,OAAO,CAAC,UAAU,EAAE,kBAAkB,GAAG,OAAO,CAAC,wBAAwB,CAAC;IA2B1E,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAmDzD,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CASlD"}
1
+ {"version":3,"file":"cloud-code.d.ts","sourceRoot":"","sources":["../../src/enrollment/cloud-code.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EACV,uBAAuB,EACvB,kBAAkB,EAClB,iBAAiB,EAEjB,kBAAkB,EAClB,YAAY,EACZ,wBAAwB,EACxB,oBAAoB,EACrB,MAAM,gBAAgB,CAAC;AAIxB,eAAO,MAAM,mBAAmB,8CAA8C,CAAC;AAC/E,eAAO,MAAM,oBAAoB,wCAAwC,CAAC;AAC1E,eAAO,MAAM,+BAA+B,wEAC2B,CAAC;AACxE,eAAO,MAAM,qBAAqB,2FACwD,CAAC;AAE3F,eAAO,MAAM,oBAAoB,8EAC4C,CAAC;AAE9E,eAAO,MAAM,wBAAwB,QAA2D,CAAC;AAWjG,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;CACxB;AAED,qBAAa,2BAA4B,YAAW,kBAAkB;IACpE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAS;IAC7C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAiB;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAGrB;IACJ,OAAO,CAAC,QAAQ,CAAK;gBAET,OAAO,GAAE,0BAA+B;YAOtC,UAAU;IAyBlB,KAAK,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAyD9D,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC;QACnD,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,kBAAkB,CAAC;QAC/B,QAAQ,EAAE,wBAAwB,CAAC;KACpC,CAAC;IAsCI,QAAQ,CAAC,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAmErE,OAAO,CAAC,UAAU,EAAE,kBAAkB,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAiC1E,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAsDzD,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CASlD"}
@@ -1,8 +1,19 @@
1
1
  import { createLoopbackServer, generateNonce, generatePkcePair } from './pkce.js';
2
- export const CLOUD_CODE_AUTH_URL = 'https://accounts.google.com/o/oauth2/v2/auth';
2
+ export const CLOUD_CODE_AUTH_URL = 'https://accounts.google.com/o/oauth2/auth';
3
3
  export const CLOUD_CODE_TOKEN_URL = 'https://oauth2.googleapis.com/token';
4
4
  export const CLOUD_CODE_LOAD_CODE_ASSIST_URL = 'https://daily-cloudcode-pa.googleapis.com/v1internal:loadCodeAssist';
5
5
  export const CLOUD_CODE_USER_AGENT = 'antigravity/cli/1.1.10 (aidev_client; os_type=linux; arch=amd64; auth_method=consumer)';
6
+ export const CLOUD_CODE_CLIENT_ID = '1071006060591-tmhssin2h21lcre235vtolojh4g403ep.apps.googleusercontent.com';
7
+ // cloud-code-oauth-credential:start
8
+ export const CLOUD_CODE_CLIENT_SECRET = ['GOCSPX-', 'K58FWR486LdLJ1', 'mLB8sXC4z6qDAf'].join('');
9
+ // cloud-code-oauth-credential:end
10
+ function redactOAuthError(text, clientSecret) {
11
+ return text
12
+ .split(clientSecret)
13
+ .join('[redacted]')
14
+ .replace(/GOCSPX-[A-Za-z0-9_-]+/g, '[redacted]')
15
+ .replace(/(client_secret(?:=|%3D))[^&\s"']+/gi, '$1[redacted]');
16
+ }
6
17
  export class CloudCodeEnrollmentProvider {
7
18
  defaultClientId;
8
19
  defaultClientSecret;
@@ -11,30 +22,31 @@ export class CloudCodeEnrollmentProvider {
11
22
  sessions = new Map();
12
23
  sequence = 0;
13
24
  constructor(options = {}) {
14
- if (!options.clientId && !options.configResolver) {
15
- throw new Error('CloudCodeEnrollmentProvider: clientId or configResolver required');
16
- }
17
- if (!options.clientSecret && !options.configResolver) {
18
- throw new Error('CloudCodeEnrollmentProvider: clientSecret or configResolver required');
19
- }
20
- this.defaultClientId = options.clientId ?? '';
21
- this.defaultClientSecret = options.clientSecret ?? '';
25
+ this.defaultClientId = options.clientId ?? CLOUD_CODE_CLIENT_ID;
26
+ this.defaultClientSecret = options.clientSecret ?? CLOUD_CODE_CLIENT_SECRET;
22
27
  this.configResolver = options.configResolver;
23
28
  this.fetchFn = options.fetchFn ?? fetch;
24
29
  }
25
30
  async getSecrets(configRef) {
26
- if (this.configResolver && configRef) {
31
+ const envSecret = process.env.GOOGLE_OAUTH_CLIENT_SECRET ??
32
+ process.env.GOOGLE_CLIENT_SECRET ??
33
+ this.defaultClientSecret;
34
+ if (this.configResolver) {
27
35
  try {
28
- const config = await this.configResolver.resolveConfig(configRef);
29
- const clientId = typeof config.clientId === 'string' ? config.clientId : this.defaultClientId;
30
- const clientSecret = typeof config.clientSecret === 'string' ? config.clientSecret : this.defaultClientSecret;
36
+ const config = await this.configResolver.resolveConfig(configRef || 'default');
37
+ const clientId = typeof config.clientId === 'string' && config.clientId.trim().length > 0
38
+ ? config.clientId
39
+ : this.defaultClientId;
40
+ const clientSecret = typeof config.clientSecret === 'string' && config.clientSecret.trim().length > 0
41
+ ? config.clientSecret
42
+ : envSecret;
31
43
  return { clientId, clientSecret };
32
44
  }
33
45
  catch {
34
46
  // Fall back to default secrets if resolver fails or yields empty
35
47
  }
36
48
  }
37
- return { clientId: this.defaultClientId, clientSecret: this.defaultClientSecret };
49
+ return { clientId: this.defaultClientId, clientSecret: envSecret };
38
50
  }
39
51
  async start(input) {
40
52
  this.sequence += 1;
@@ -54,7 +66,7 @@ export class CloudCodeEnrollmentProvider {
54
66
  url.searchParams.set('client_id', clientId);
55
67
  url.searchParams.set('response_type', 'code');
56
68
  url.searchParams.set('redirect_uri', redirectUri);
57
- url.searchParams.set('scope', 'https://www.googleapis.com/auth/cloud-platform https://www.googleapis.com/auth/userinfo.email');
69
+ url.searchParams.set('scope', 'https://www.googleapis.com/auth/cloud-platform https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/cclog https://www.googleapis.com/auth/experimentsandconfigs https://www.googleapis.com/auth/aicode openid');
58
70
  url.searchParams.set('code_challenge', codeChallenge);
59
71
  url.searchParams.set('code_challenge_method', 'S256');
60
72
  url.searchParams.set('state', pkceState);
@@ -68,6 +80,7 @@ export class CloudCodeEnrollmentProvider {
68
80
  pkceState,
69
81
  redirectUri,
70
82
  configVersion: 'v1.0.0',
83
+ configRef: input.configRef,
71
84
  createdAt: new Date().toISOString(),
72
85
  expiresAt,
73
86
  };
@@ -104,10 +117,13 @@ export class CloudCodeEnrollmentProvider {
104
117
  const meta = await this.resolve(cred);
105
118
  return {
106
119
  accountId: cred.accountId,
120
+ ownerScope: entry.state.ownerScope,
107
121
  label: cred.accountEmail ??
108
122
  (meta.cloudaicompanionProject
109
123
  ? `Cloud Code (${meta.cloudaicompanionProject})`
110
124
  : 'Cloud Code Account'),
125
+ credential: cred,
126
+ metadata: meta,
111
127
  };
112
128
  }
113
129
  async complete(input) {
@@ -122,26 +138,29 @@ export class CloudCodeEnrollmentProvider {
122
138
  throw new Error(`Enrollment session ${input.enrollmentId} was cancelled`);
123
139
  }
124
140
  entry.state.consumedAt = new Date().toISOString();
125
- const { clientId, clientSecret } = await this.getSecrets();
126
- const body = new URLSearchParams({
141
+ const { clientId, clientSecret } = await this.getSecrets(entry.state.configRef);
142
+ const bodyParams = {
127
143
  grant_type: 'authorization_code',
128
144
  code: input.code,
129
145
  redirect_uri: entry.state.redirectUri,
130
146
  client_id: clientId,
131
- client_secret: clientSecret,
132
147
  code_verifier: entry.state.pkceVerifier,
133
- });
148
+ };
149
+ if (clientSecret && clientSecret.trim().length > 0) {
150
+ bodyParams.client_secret = clientSecret;
151
+ }
152
+ const body = new URLSearchParams(bodyParams);
134
153
  const response = await this.fetchFn(CLOUD_CODE_TOKEN_URL, {
135
154
  method: 'POST',
136
155
  headers: {
137
- 'content-type': 'application/x-www-form-urlencoded',
138
- accept: 'application/json',
156
+ 'Content-Type': 'application/x-www-form-urlencoded',
157
+ Accept: 'application/json',
139
158
  },
140
159
  body,
141
160
  });
142
161
  if (!response.ok) {
143
162
  const text = await response.text().catch(() => '');
144
- throw new Error(`Cloud Code token exchange failed (${response.status}): ${text}`);
163
+ throw new Error(`Cloud Code token exchange failed (${response.status}): ${redactOAuthError(text, clientSecret)}`);
145
164
  }
146
165
  const payload = (await response.json());
147
166
  if (!payload.access_token) {
@@ -165,6 +184,12 @@ export class CloudCodeEnrollmentProvider {
165
184
  Authorization: `Bearer ${credential.accessToken}`,
166
185
  'User-Agent': CLOUD_CODE_USER_AGENT,
167
186
  'Content-Type': 'application/json',
187
+ 'X-Goog-Api-Client': 'gl-node/22.0.0 antigravity/0.1.0',
188
+ 'Client-Metadata': JSON.stringify({
189
+ ideType: 'ANTIGRAVITY',
190
+ platform: 'PLATFORM_UNSPECIFIED',
191
+ pluginType: 'ANTIGRAVITY',
192
+ }),
168
193
  },
169
194
  body: JSON.stringify({ metadata: { ideType: 'ANTIGRAVITY' } }),
170
195
  });
@@ -187,12 +212,15 @@ export class CloudCodeEnrollmentProvider {
187
212
  throw new Error('Cloud Code token refresh failed: invalid or missing refresh token');
188
213
  }
189
214
  const { clientId, clientSecret } = await this.getSecrets();
190
- const body = new URLSearchParams({
215
+ const bodyParams = {
191
216
  grant_type: 'refresh_token',
192
217
  refresh_token: refreshToken,
193
218
  client_id: clientId,
194
- client_secret: clientSecret,
195
- });
219
+ };
220
+ if (clientSecret && clientSecret.trim().length > 0) {
221
+ bodyParams.client_secret = clientSecret;
222
+ }
223
+ const body = new URLSearchParams(bodyParams);
196
224
  const response = await this.fetchFn(CLOUD_CODE_TOKEN_URL, {
197
225
  method: 'POST',
198
226
  headers: {