@cortexkit/opencode-antigravity-auth 3.0.4 → 3.0.6
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/README.md +38 -352
- package/dist/cli.js +9199 -8799
- package/dist/cli.js.map +4 -4
- package/dist/cli.meta.json +1286 -1064
- package/dist/index.js +13641 -14559
- package/dist/index.js.map +4 -4
- package/dist/index.meta.json +1333 -1342
- package/dist/server.js +9578 -9987
- package/dist/server.js.map +4 -4
- package/dist/server.meta.json +1 -1
- package/dist/src/auth-method-labels.d.ts +3 -0
- package/dist/src/auth-method-labels.d.ts.map +1 -0
- package/dist/src/auth-method-labels.js +5 -0
- package/dist/src/auth-method-labels.js.map +1 -0
- package/dist/src/cli.d.ts +3 -1
- package/dist/src/cli.d.ts.map +1 -1
- package/dist/src/cli.js +98 -12
- package/dist/src/cli.js.map +1 -1
- package/dist/src/common-auth-embedded/claustrum/consumer.d.ts +33 -3
- package/dist/src/common-auth-embedded/claustrum/consumer.js +96 -1
- package/dist/src/common-auth-embedded/claustrum/custody.d.ts +4 -1
- package/dist/src/common-auth-embedded/claustrum/enrollment.d.ts +6 -1
- package/dist/src/common-auth-embedded/claustrum/enrollment.js +6 -1
- package/dist/src/common-auth-embedded/claustrum/index.d.ts +2 -1
- package/dist/src/common-auth-embedded/claustrum/index.js +5 -3
- package/dist/src/common-auth-embedded/claustrum/insula.d.ts +69 -0
- package/dist/src/common-auth-embedded/claustrum/insula.js +152 -0
- package/dist/src/common-auth-embedded/claustrum/roster.d.ts +13 -0
- package/dist/src/common-auth-embedded/claustrum/roster.js +33 -3
- package/dist/src/common-auth-embedded/fs/refresh-file-lock.js +20 -11
- package/dist/src/common-auth-embedded/quota/codec.d.ts +2 -0
- package/dist/src/common-auth-embedded/quota/codec.js +2 -1
- package/dist/src/common-auth-embedded/quota/format.d.ts +26 -0
- package/dist/src/common-auth-embedded/quota/format.js +78 -42
- package/dist/src/common-auth-embedded/quota/index.d.ts +4 -4
- package/dist/src/common-auth-embedded/quota/index.js +2 -2
- package/dist/src/common-auth-embedded/quota/map.d.ts +11 -0
- package/dist/src/common-auth-embedded/quota/map.js +36 -1
- package/dist/src/common-auth-embedded/quota/merge.d.ts +3 -1
- package/dist/src/common-auth-embedded/quota/merge.js +21 -5
- package/dist/src/common-auth-embedded/quota/projection.d.ts +2 -1
- package/dist/src/common-auth-embedded/quota/projection.js +3 -1
- package/dist/src/common-auth-embedded/setup/command-runner.js +49 -0
- package/dist/src/common-auth-embedded/setup/command.d.ts +3 -0
- package/dist/src/common-auth-embedded/setup/command.js +215 -0
- package/dist/src/common-auth-embedded/setup/config-write.js +60 -0
- package/dist/src/common-auth-embedded/setup/detect.d.ts +6 -0
- package/dist/src/common-auth-embedded/setup/detect.js +224 -0
- package/dist/src/common-auth-embedded/setup/enroll.js +70 -0
- package/dist/src/common-auth-embedded/setup/index.d.ts +5 -0
- package/dist/src/common-auth-embedded/setup/index.js +4 -0
- package/dist/src/common-auth-embedded/setup/paths.js +33 -0
- package/dist/src/common-auth-embedded/setup/process-fence.d.ts +43 -0
- package/dist/src/common-auth-embedded/setup/process-fence.js +270 -0
- package/dist/src/common-auth-embedded/setup/prompts.js +26 -0
- package/dist/src/common-auth-embedded/setup/register.d.ts +11 -0
- package/dist/src/common-auth-embedded/setup/register.js +130 -0
- package/dist/src/common-auth-embedded/setup/types.d.ts +136 -0
- package/dist/src/common-auth-embedded/source-output.json +228 -80
- package/dist/src/common-auth-embedded/store/schema.d.ts +2 -0
- package/dist/src/common-auth-embedded/store/schema.js +3 -2
- package/dist/src/ga/rpc/protocol.d.ts +6 -10
- package/dist/src/ga/rpc/protocol.d.ts.map +1 -1
- package/dist/src/ga/rpc/protocol.js +65 -13
- package/dist/src/ga/rpc/protocol.js.map +1 -1
- package/dist/src/ga/server/auth.d.ts +8 -3
- package/dist/src/ga/server/auth.d.ts.map +1 -1
- package/dist/src/ga/server/auth.js +25 -9
- package/dist/src/ga/server/auth.js.map +1 -1
- package/dist/src/ga/server/index.d.ts +39 -12
- package/dist/src/ga/server/index.d.ts.map +1 -1
- package/dist/src/ga/server/index.js +229 -55
- package/dist/src/ga/server/index.js.map +1 -1
- package/dist/src/ga/server/pool-login.d.ts +22 -0
- package/dist/src/ga/server/pool-login.d.ts.map +1 -0
- package/dist/src/ga/server/pool-login.js +150 -0
- package/dist/src/ga/server/pool-login.js.map +1 -0
- package/dist/src/ga/tui/host-ga.d.ts +2 -5
- package/dist/src/ga/tui/host-ga.d.ts.map +1 -1
- package/dist/src/ga/tui/host-ga.js +17 -49
- package/dist/src/ga/tui/host-ga.js.map +1 -1
- package/dist/src/plugin/accounts.d.ts +1 -1
- package/dist/src/plugin/accounts.d.ts.map +1 -1
- package/dist/src/plugin/accounts.js +1 -0
- package/dist/src/plugin/accounts.js.map +1 -1
- package/dist/src/plugin/background-vault-quota-refresh.d.ts +2 -0
- package/dist/src/plugin/background-vault-quota-refresh.d.ts.map +1 -1
- package/dist/src/plugin/background-vault-quota-refresh.js +125 -10
- package/dist/src/plugin/background-vault-quota-refresh.js.map +1 -1
- package/dist/src/plugin/command-apply.d.ts +2 -2
- package/dist/src/plugin/command-apply.d.ts.map +1 -1
- package/dist/src/plugin/command-apply.js +3 -10
- package/dist/src/plugin/command-apply.js.map +1 -1
- package/dist/src/plugin/commands.d.ts +1 -0
- package/dist/src/plugin/commands.d.ts.map +1 -1
- package/dist/src/plugin/commands.js +2 -2
- package/dist/src/plugin/commands.js.map +1 -1
- package/dist/src/plugin/config/operator-settings-schema.d.ts +0 -4
- package/dist/src/plugin/config/operator-settings-schema.d.ts.map +1 -1
- package/dist/src/plugin/config/operator-settings-schema.js +0 -5
- package/dist/src/plugin/config/operator-settings-schema.js.map +1 -1
- package/dist/src/plugin/config/schema.d.ts +0 -7
- package/dist/src/plugin/config/schema.d.ts.map +1 -1
- package/dist/src/plugin/config/schema.js +0 -43
- package/dist/src/plugin/config/schema.js.map +1 -1
- package/dist/src/plugin/config/writer.d.ts +1 -1
- package/dist/src/plugin/config/writer.js +1 -1
- package/dist/src/plugin/fetch/retry-state.d.ts +19 -3
- package/dist/src/plugin/fetch/retry-state.d.ts.map +1 -1
- package/dist/src/plugin/fetch/retry-state.js +0 -6
- package/dist/src/plugin/fetch/retry-state.js.map +1 -1
- package/dist/src/plugin/fetch-interceptor.d.ts.map +1 -1
- package/dist/src/plugin/fetch-interceptor.js +0 -3
- package/dist/src/plugin/fetch-interceptor.js.map +1 -1
- package/dist/src/plugin/fetch-routing.d.ts +0 -16
- package/dist/src/plugin/fetch-routing.d.ts.map +1 -1
- package/dist/src/plugin/fetch-routing.js +0 -49
- package/dist/src/plugin/fetch-routing.js.map +1 -1
- package/dist/src/plugin/ga-location-services.d.ts +14 -9
- package/dist/src/plugin/ga-location-services.d.ts.map +1 -1
- package/dist/src/plugin/ga-location-services.js +120 -40
- package/dist/src/plugin/ga-location-services.js.map +1 -1
- package/dist/src/plugin/google-origin.d.ts +7 -0
- package/dist/src/plugin/google-origin.d.ts.map +1 -0
- package/dist/src/plugin/google-origin.js +14 -0
- package/dist/src/plugin/google-origin.js.map +1 -0
- package/dist/src/plugin/index.d.ts.map +1 -1
- package/dist/src/plugin/index.js +15 -4
- package/dist/src/plugin/index.js.map +1 -1
- package/dist/src/plugin/oauth-methods.d.ts.map +1 -1
- package/dist/src/plugin/oauth-methods.js +0 -33
- package/dist/src/plugin/oauth-methods.js.map +1 -1
- package/dist/src/plugin/operator-settings.d.ts +1 -1
- package/dist/src/plugin/operator-settings.d.ts.map +1 -1
- package/dist/src/plugin/operator-settings.js +1 -8
- package/dist/src/plugin/operator-settings.js.map +1 -1
- package/dist/src/plugin/quota.d.ts +11 -7
- package/dist/src/plugin/quota.d.ts.map +1 -1
- package/dist/src/plugin/quota.js +128 -102
- package/dist/src/plugin/quota.js.map +1 -1
- package/dist/src/plugin/request.d.ts +5 -3
- package/dist/src/plugin/request.d.ts.map +1 -1
- package/dist/src/plugin/request.js +87 -168
- package/dist/src/plugin/request.js.map +1 -1
- package/dist/src/plugin/server.d.ts.map +1 -1
- package/dist/src/plugin/server.js +60 -53
- package/dist/src/plugin/server.js.map +1 -1
- package/dist/src/plugin/shared/advisory-repository.d.ts +20 -0
- package/dist/src/plugin/shared/advisory-repository.d.ts.map +1 -0
- package/dist/src/plugin/shared/advisory-repository.js +91 -0
- package/dist/src/plugin/shared/advisory-repository.js.map +1 -0
- package/dist/src/plugin/shared/request-services.d.ts +19 -25
- package/dist/src/plugin/shared/request-services.d.ts.map +1 -1
- package/dist/src/plugin/shared/request-services.js +105 -188
- package/dist/src/plugin/shared/request-services.js.map +1 -1
- package/dist/src/plugin/shared/runtime.js +4 -2
- package/dist/src/plugin/shared/runtime.js.map +1 -1
- package/dist/src/plugin/shared/vault-request-credentials.d.ts +4 -1
- package/dist/src/plugin/shared/vault-request-credentials.d.ts.map +1 -1
- package/dist/src/plugin/shared/vault-request-credentials.js +41 -7
- package/dist/src/plugin/shared/vault-request-credentials.js.map +1 -1
- package/dist/src/plugin/storage.d.ts +2 -2
- package/dist/src/plugin/storage.d.ts.map +1 -1
- package/dist/src/plugin/storage.js.map +1 -1
- package/dist/src/plugin/vault-custody.d.ts.map +1 -1
- package/dist/src/plugin/vault-custody.js +147 -35
- package/dist/src/plugin/vault-custody.js.map +1 -1
- package/dist/src/plugin/vault-quota-outcome.d.ts +19 -0
- package/dist/src/plugin/vault-quota-outcome.d.ts.map +1 -0
- package/dist/src/plugin/vault-quota-outcome.js +47 -0
- package/dist/src/plugin/vault-quota-outcome.js.map +1 -0
- package/dist/src/quota-presentation.d.ts +29 -1
- package/dist/src/quota-presentation.d.ts.map +1 -1
- package/dist/src/quota-presentation.js +52 -17
- package/dist/src/quota-presentation.js.map +1 -1
- package/dist/src/setup.d.ts +15 -0
- package/dist/src/setup.d.ts.map +1 -0
- package/dist/src/setup.js +320 -0
- package/dist/src/setup.js.map +1 -0
- package/dist/src/sidebar-projection.d.ts +1 -1
- package/dist/src/sidebar-projection.d.ts.map +1 -1
- package/dist/src/sidebar-state.d.ts +1 -1
- package/dist/src/sidebar-state.d.ts.map +1 -1
- package/dist/src/sidebar-state.js +19 -1
- package/dist/src/sidebar-state.js.map +1 -1
- package/dist/src/tui.d.ts.map +1 -1
- package/dist/src/tui.js +205 -110
- package/dist/src/tui.js.map +1 -1
- package/dist/tui-build-map.json +37 -37
- package/dist/tui-ga-build-map.json +33 -33
- package/dist/types/src/auth-method-labels.d.ts +3 -0
- package/dist/types/src/auth-method-labels.d.ts.map +1 -0
- package/dist/types/src/cli.d.ts +3 -1
- package/dist/types/src/cli.d.ts.map +1 -1
- package/dist/types/src/common-auth-embedded/auth-menu/terminal.d.ts +43 -0
- package/dist/types/src/common-auth-embedded/claustrum/consumer.d.ts +132 -0
- package/dist/types/src/common-auth-embedded/claustrum/custody.d.ts +178 -0
- package/dist/types/src/common-auth-embedded/claustrum/enrollment.d.ts +164 -0
- package/dist/types/src/common-auth-embedded/claustrum/errors.d.ts +16 -0
- package/dist/types/src/common-auth-embedded/claustrum/host-slot.d.ts +39 -0
- package/dist/types/src/common-auth-embedded/claustrum/index.d.ts +19 -0
- package/dist/types/src/common-auth-embedded/claustrum/insula.d.ts +69 -0
- package/dist/types/src/common-auth-embedded/claustrum/interlock.d.ts +27 -0
- package/dist/types/src/common-auth-embedded/claustrum/roster.d.ts +221 -0
- package/dist/types/src/common-auth-embedded/opencode2/errors.d.ts +25 -0
- package/dist/types/src/common-auth-embedded/opencode2/index.d.ts +8 -0
- package/dist/types/src/common-auth-embedded/opencode2/install.d.ts +55 -0
- package/dist/types/src/common-auth-embedded/opencode2/integration.d.ts +112 -0
- package/dist/types/src/common-auth-embedded/opencode2/sse.d.ts +12 -0
- package/dist/types/src/common-auth-embedded/opencode2/types.d.ts +413 -0
- package/dist/types/src/common-auth-embedded/quota/codec.d.ts +2 -0
- package/dist/types/src/common-auth-embedded/quota/format.d.ts +26 -0
- package/dist/types/src/common-auth-embedded/quota/index.d.ts +4 -4
- package/dist/types/src/common-auth-embedded/quota/map.d.ts +11 -0
- package/dist/types/src/common-auth-embedded/quota/merge.d.ts +3 -1
- package/dist/types/src/common-auth-embedded/quota/projection.d.ts +2 -1
- package/dist/types/src/common-auth-embedded/routing/admission.d.ts +93 -0
- package/dist/types/src/common-auth-embedded/routing/index.d.ts +8 -0
- package/dist/types/src/common-auth-embedded/routing/ordered.d.ts +47 -0
- package/dist/types/src/common-auth-embedded/routing/pins.d.ts +22 -0
- package/dist/types/src/common-auth-embedded/routing/sticky.d.ts +158 -0
- package/dist/types/src/common-auth-embedded/setup/command.d.ts +3 -0
- package/dist/types/src/common-auth-embedded/setup/detect.d.ts +6 -0
- package/dist/types/src/common-auth-embedded/setup/index.d.ts +5 -0
- package/dist/types/src/common-auth-embedded/setup/process-fence.d.ts +43 -0
- package/dist/types/src/common-auth-embedded/setup/register.d.ts +11 -0
- package/dist/types/src/common-auth-embedded/setup/types.d.ts +136 -0
- package/dist/types/src/common-auth-embedded/store/schema.d.ts +2 -0
- package/dist/types/src/ga/rpc/protocol.d.ts +6 -10
- package/dist/types/src/ga/rpc/protocol.d.ts.map +1 -1
- package/dist/types/src/ga/server/auth.d.ts +8 -3
- package/dist/types/src/ga/server/auth.d.ts.map +1 -1
- package/dist/types/src/ga/server/index.d.ts +39 -12
- package/dist/types/src/ga/server/index.d.ts.map +1 -1
- package/dist/types/src/ga/server/pool-login.d.ts +22 -0
- package/dist/types/src/ga/server/pool-login.d.ts.map +1 -0
- package/dist/types/src/plugin/accounts.d.ts +1 -1
- package/dist/types/src/plugin/accounts.d.ts.map +1 -1
- package/dist/types/src/plugin/background-vault-quota-refresh.d.ts +2 -0
- package/dist/types/src/plugin/background-vault-quota-refresh.d.ts.map +1 -1
- package/dist/types/src/plugin/command-apply.d.ts +2 -2
- package/dist/types/src/plugin/command-apply.d.ts.map +1 -1
- package/dist/types/src/plugin/commands.d.ts +1 -0
- package/dist/types/src/plugin/commands.d.ts.map +1 -1
- package/dist/types/src/plugin/config/operator-settings-schema.d.ts +0 -4
- package/dist/types/src/plugin/config/operator-settings-schema.d.ts.map +1 -1
- package/dist/types/src/plugin/config/schema.d.ts +0 -7
- package/dist/types/src/plugin/config/schema.d.ts.map +1 -1
- package/dist/types/src/plugin/config/writer.d.ts +1 -1
- package/dist/types/src/plugin/fetch/retry-state.d.ts +19 -3
- package/dist/types/src/plugin/fetch/retry-state.d.ts.map +1 -1
- package/dist/types/src/plugin/fetch-interceptor.d.ts.map +1 -1
- package/dist/types/src/plugin/fetch-routing.d.ts +0 -16
- package/dist/types/src/plugin/fetch-routing.d.ts.map +1 -1
- package/dist/types/src/plugin/ga-location-services.d.ts +14 -9
- package/dist/types/src/plugin/ga-location-services.d.ts.map +1 -1
- package/dist/types/src/plugin/google-origin.d.ts +7 -0
- package/dist/types/src/plugin/google-origin.d.ts.map +1 -0
- package/dist/types/src/plugin/index.d.ts.map +1 -1
- package/dist/types/src/plugin/oauth-methods.d.ts.map +1 -1
- package/dist/types/src/plugin/operator-settings.d.ts +1 -1
- package/dist/types/src/plugin/operator-settings.d.ts.map +1 -1
- package/dist/types/src/plugin/quota.d.ts +11 -7
- package/dist/types/src/plugin/quota.d.ts.map +1 -1
- package/dist/types/src/plugin/request.d.ts +5 -3
- package/dist/types/src/plugin/request.d.ts.map +1 -1
- package/dist/types/src/plugin/server.d.ts.map +1 -1
- package/dist/types/src/plugin/shared/advisory-repository.d.ts +20 -0
- package/dist/types/src/plugin/shared/advisory-repository.d.ts.map +1 -0
- package/dist/types/src/plugin/shared/request-services.d.ts +19 -25
- package/dist/types/src/plugin/shared/request-services.d.ts.map +1 -1
- package/dist/types/src/plugin/shared/vault-request-credentials.d.ts +4 -1
- package/dist/types/src/plugin/shared/vault-request-credentials.d.ts.map +1 -1
- package/dist/types/src/plugin/storage.d.ts +2 -2
- package/dist/types/src/plugin/storage.d.ts.map +1 -1
- package/dist/types/src/plugin/vault-custody.d.ts.map +1 -1
- package/dist/types/src/plugin/vault-quota-outcome.d.ts +19 -0
- package/dist/types/src/plugin/vault-quota-outcome.d.ts.map +1 -0
- package/dist/types/src/setup.d.ts +15 -0
- package/dist/types/src/setup.d.ts.map +1 -0
- package/dist/types/src/sidebar-state.d.ts +1 -1
- package/dist/types/src/sidebar-state.d.ts.map +1 -1
- package/package.json +5 -4
- package/src/common-auth-embedded/claustrum/consumer.d.ts +33 -3
- package/src/common-auth-embedded/claustrum/consumer.js +96 -1
- package/src/common-auth-embedded/claustrum/custody.d.ts +4 -1
- package/src/common-auth-embedded/claustrum/enrollment.d.ts +6 -1
- package/src/common-auth-embedded/claustrum/enrollment.js +6 -1
- package/src/common-auth-embedded/claustrum/index.d.ts +2 -1
- package/src/common-auth-embedded/claustrum/index.js +5 -3
- package/src/common-auth-embedded/claustrum/insula.d.ts +69 -0
- package/src/common-auth-embedded/claustrum/insula.js +152 -0
- package/src/common-auth-embedded/claustrum/roster.d.ts +13 -0
- package/src/common-auth-embedded/claustrum/roster.js +33 -3
- package/src/common-auth-embedded/fs/refresh-file-lock.js +20 -11
- package/src/common-auth-embedded/quota/codec.d.ts +2 -0
- package/src/common-auth-embedded/quota/codec.js +2 -1
- package/src/common-auth-embedded/quota/format.d.ts +26 -0
- package/src/common-auth-embedded/quota/format.js +78 -42
- package/src/common-auth-embedded/quota/index.d.ts +4 -4
- package/src/common-auth-embedded/quota/index.js +2 -2
- package/src/common-auth-embedded/quota/map.d.ts +11 -0
- package/src/common-auth-embedded/quota/map.js +36 -1
- package/src/common-auth-embedded/quota/merge.d.ts +3 -1
- package/src/common-auth-embedded/quota/merge.js +21 -5
- package/src/common-auth-embedded/quota/projection.d.ts +2 -1
- package/src/common-auth-embedded/quota/projection.js +3 -1
- package/src/common-auth-embedded/setup/command-runner.js +49 -0
- package/src/common-auth-embedded/setup/command.d.ts +3 -0
- package/src/common-auth-embedded/setup/command.js +215 -0
- package/src/common-auth-embedded/setup/config-write.js +60 -0
- package/src/common-auth-embedded/setup/detect.d.ts +6 -0
- package/src/common-auth-embedded/setup/detect.js +224 -0
- package/src/common-auth-embedded/setup/enroll.js +70 -0
- package/src/common-auth-embedded/setup/index.d.ts +5 -0
- package/src/common-auth-embedded/setup/index.js +4 -0
- package/src/common-auth-embedded/setup/paths.js +33 -0
- package/src/common-auth-embedded/setup/process-fence.d.ts +43 -0
- package/src/common-auth-embedded/setup/process-fence.js +270 -0
- package/src/common-auth-embedded/setup/prompts.js +26 -0
- package/src/common-auth-embedded/setup/register.d.ts +11 -0
- package/src/common-auth-embedded/setup/register.js +130 -0
- package/src/common-auth-embedded/setup/types.d.ts +136 -0
- package/src/common-auth-embedded/source-output.json +228 -80
- package/src/common-auth-embedded/store/schema.d.ts +2 -0
- package/src/common-auth-embedded/store/schema.js +3 -2
- package/src/sidebar-state.ts +19 -2
- package/src/tui-compiled/common-auth-embedded/quota/codec.js +2 -1
- package/src/tui-compiled/common-auth-embedded/quota/format.js +78 -42
- package/src/tui-compiled/common-auth-embedded/quota/index.js +2 -2
- package/src/tui-compiled/common-auth-embedded/quota/map.js +36 -1
- package/src/tui-compiled/common-auth-embedded/quota/merge.js +21 -5
- package/src/tui-compiled/common-auth-embedded/quota/projection.js +3 -1
- package/src/tui-compiled/quota-presentation.js +42 -9
- package/src/tui-compiled/sidebar-state.js +15 -1
- package/src/tui-compiled/tui.js +516 -334
- package/src/tui-ga-compiled/host-ga.js +11 -38
- package/src/tui-ga-compiled/shared/1ff34afa7c42d196-projection.js +3 -1
- package/src/tui-ga-compiled/shared/77138df80c7ae006-map.js +36 -1
- package/src/tui-ga-compiled/shared/98cc0c186c46c42d-quota-presentation.js +42 -9
- package/src/tui-ga-compiled/shared/aef2402f8fc342f0-format.js +78 -42
- package/src/tui-ga-compiled/shared/bf17cbee28e58197-index.js +2 -2
- package/src/tui-ga-compiled/shared/ca21dc417b36dc5d-codec.js +2 -1
- package/src/tui-ga-compiled/shared/ecc214300932dfb6-merge.js +21 -5
- package/src/tui-ga-raw/host-ga.tsx +31 -62
- package/src/tui-ga-raw/shared/1ff34afa7c42d196-projection.js +3 -1
- package/src/tui-ga-raw/shared/77138df80c7ae006-map.js +36 -1
- package/src/tui-ga-raw/shared/98cc0c186c46c42d-quota-presentation.js +42 -9
- package/src/tui-ga-raw/shared/aef2402f8fc342f0-format.js +78 -42
- package/src/tui-ga-raw/shared/bf17cbee28e58197-index.js +2 -2
- package/src/tui-ga-raw/shared/ca21dc417b36dc5d-codec.js +2 -1
- package/src/tui-ga-raw/shared/ecc214300932dfb6-merge.js +21 -5
- package/src/tui-raw/common-auth-embedded/quota/codec.js +2 -1
- package/src/tui-raw/common-auth-embedded/quota/format.js +78 -42
- package/src/tui-raw/common-auth-embedded/quota/index.js +2 -2
- package/src/tui-raw/common-auth-embedded/quota/map.js +36 -1
- package/src/tui-raw/common-auth-embedded/quota/merge.js +21 -5
- package/src/tui-raw/common-auth-embedded/quota/projection.js +3 -1
- package/src/tui-raw/quota-presentation.js +42 -9
- package/src/tui-raw/sidebar-state.js +15 -1
- package/src/tui-raw/tui.tsx +423 -218
- package/src/tui.tsx +423 -218
- package/dist/src/tui/vault-setup.d.ts +0 -98
- package/dist/src/tui/vault-setup.d.ts.map +0 -1
- package/dist/src/tui/vault-setup.js +0 -198
- package/dist/src/tui/vault-setup.js.map +0 -1
- package/dist/types/src/plugin/transform/model-resolver.d.ts +0 -2
- package/dist/types/src/plugin/transform/model-resolver.d.ts.map +0 -1
- package/dist/types/src/quota-presentation.d.ts +0 -18
- package/dist/types/src/quota-presentation.d.ts.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* OpenCode 2 (2.0.22) server plugin. It sends the host's Google model
|
|
3
|
-
* requests
|
|
3
|
+
* requests carrying the common-auth placeholder to Antigravity accounts through a
|
|
4
4
|
* loopback bridge, and serves the `antigravity-auth` v1 RPC with each
|
|
5
5
|
* location's account state and commands. `createGaAntigravityPlugin` is the
|
|
6
6
|
* plugin the host loads; `createGaPluginFromServices` builds one over a
|
|
@@ -9,12 +9,14 @@
|
|
|
9
9
|
import { randomUUID } from 'node:crypto';
|
|
10
10
|
import { createServer, } from 'node:http';
|
|
11
11
|
import { buildAntigravityHarnessUserAgent, fetchWithAgyCliTransport, getPublicModelDefinitions, isRetiredAgyModel, loadCommonAuthCommands, } from '@cortexkit/antigravity-auth-core';
|
|
12
|
+
import { placeholderSecret } from '../../common-auth-embedded/opencode2/index.js';
|
|
12
13
|
import { createGaLocationServices } from "../../plugin/ga-location-services.js";
|
|
14
|
+
import { isCanonicalGoogleOrigin } from "../../plugin/google-origin.js";
|
|
13
15
|
import { createLocationRuntime, } from "../../plugin/shared/runtime.js";
|
|
14
16
|
import { redactAccountForSidebar, } from "../../sidebar-state.js";
|
|
15
17
|
import { assertLoopbackProxyGuard, } from "../proxy-guard.js";
|
|
16
18
|
import { ANTIGRAVITY_MENU_COMMAND_NAME, ANTIGRAVITY_RPC_DEFINITION, ANTIGRAVITY_RPC_LIMITS, ANTIGRAVITY_RPC_VERSION, AntigravityApplyInputSchema, AntigravityApplyOutputSchema, AntigravityApplyResultSchema, AntigravityNotificationPayloadSchema, AntigravityStateInputSchema, AntigravityStateOutputSchema, } from "../rpc/protocol.js";
|
|
17
|
-
import {
|
|
19
|
+
import { registerGaAuthMethods } from "./auth.js";
|
|
18
20
|
// Raw request sender
|
|
19
21
|
/**
|
|
20
22
|
* How long a response body may stall with no bytes before the raw sender
|
|
@@ -99,23 +101,35 @@ export function gaPreHeaderFailureResponse(error) {
|
|
|
99
101
|
export async function startGaLoopbackBridge(options) {
|
|
100
102
|
const queued = new Map();
|
|
101
103
|
const running = new Set();
|
|
104
|
+
const reads = new Set();
|
|
102
105
|
const sockets = new Set();
|
|
103
|
-
//
|
|
104
|
-
//
|
|
105
|
-
|
|
106
|
-
const
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
106
|
+
// Responses not yet wrapped by adaptResponse stay in this map with a bounded
|
|
107
|
+
// hold after completion. Once wrapped, the body's closure keeps the upstream
|
|
108
|
+
// Error available to slow readers without an expiring global error record.
|
|
109
|
+
const unclaimed = new Map();
|
|
110
|
+
// Weak references let disposal detach its bookkeeping without keeping
|
|
111
|
+
// abandoned response bodies (and their errors) alive.
|
|
112
|
+
const lifetimes = new Set();
|
|
113
|
+
const finalized = new FinalizationRegistry((reference) => lifetimes.delete(reference));
|
|
114
|
+
const release = (state, discardFailure = true) => {
|
|
115
|
+
state.released = true;
|
|
116
|
+
if (discardFailure)
|
|
117
|
+
state.failure = undefined;
|
|
118
|
+
const entry = unclaimed.get(state.id);
|
|
119
|
+
if (entry?.state === state) {
|
|
120
|
+
clearTimeout(entry.timer);
|
|
121
|
+
unclaimed.delete(state.id);
|
|
122
|
+
}
|
|
123
|
+
if (state.reference)
|
|
124
|
+
lifetimes.delete(state.reference);
|
|
125
|
+
finalized.unregister(state);
|
|
110
126
|
};
|
|
111
|
-
const takeFailure = (
|
|
112
|
-
const
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
clearTimeout(entry.timer);
|
|
116
|
-
failures.delete(id);
|
|
117
|
-
return entry.error;
|
|
127
|
+
const takeFailure = (state) => {
|
|
128
|
+
const failure = state.failure;
|
|
129
|
+
release(state);
|
|
130
|
+
return failure;
|
|
118
131
|
};
|
|
132
|
+
let closing = false;
|
|
119
133
|
let disposal = null;
|
|
120
134
|
const report = (message) => {
|
|
121
135
|
try {
|
|
@@ -126,7 +140,7 @@ export async function startGaLoopbackBridge(options) {
|
|
|
126
140
|
}
|
|
127
141
|
};
|
|
128
142
|
const server = createServer((request, response) => {
|
|
129
|
-
|
|
143
|
+
const pending = handle(request, response).catch((error) => {
|
|
130
144
|
report(`bridge request failed: ${errorMessage(error)}`);
|
|
131
145
|
if (!response.headersSent) {
|
|
132
146
|
writeResponseHead(response, 500, 'application/json');
|
|
@@ -136,6 +150,8 @@ export async function startGaLoopbackBridge(options) {
|
|
|
136
150
|
response.destroy();
|
|
137
151
|
}
|
|
138
152
|
});
|
|
153
|
+
reads.add(pending);
|
|
154
|
+
void pending.finally(() => reads.delete(pending));
|
|
139
155
|
});
|
|
140
156
|
server.on('connection', (socket) => {
|
|
141
157
|
sockets.add(socket);
|
|
@@ -148,7 +164,7 @@ export async function startGaLoopbackBridge(options) {
|
|
|
148
164
|
const entry = id ? queued.get(id) : undefined;
|
|
149
165
|
// The body is always `{}`; read and ignore it so the socket stays usable.
|
|
150
166
|
request.resume();
|
|
151
|
-
if (request.method !== 'POST' || !id || !entry ||
|
|
167
|
+
if (request.method !== 'POST' || !id || !entry || closing) {
|
|
152
168
|
writeResponseHead(response, 404, 'application/json');
|
|
153
169
|
response.end(JSON.stringify({ error: { message: 'unknown job' } }));
|
|
154
170
|
return;
|
|
@@ -156,6 +172,17 @@ export async function startGaLoopbackBridge(options) {
|
|
|
156
172
|
// A job runs at most once.
|
|
157
173
|
queued.delete(id);
|
|
158
174
|
clearTimeout(entry.timer);
|
|
175
|
+
const state = {
|
|
176
|
+
id,
|
|
177
|
+
failure: undefined,
|
|
178
|
+
claimed: false,
|
|
179
|
+
released: false,
|
|
180
|
+
};
|
|
181
|
+
const reference = new WeakRef(state);
|
|
182
|
+
state.reference = reference;
|
|
183
|
+
lifetimes.add(reference);
|
|
184
|
+
finalized.register(state, reference, state);
|
|
185
|
+
unclaimed.set(id, { state });
|
|
159
186
|
const controller = new AbortController();
|
|
160
187
|
running.add(controller);
|
|
161
188
|
response.once('close', () => {
|
|
@@ -174,10 +201,22 @@ export async function startGaLoopbackBridge(options) {
|
|
|
174
201
|
catch (error) {
|
|
175
202
|
upstream = gaPreHeaderFailureResponse(error);
|
|
176
203
|
}
|
|
177
|
-
await pipeResponse(upstream, response, (error) =>
|
|
204
|
+
await pipeResponse(upstream, response, (error) => {
|
|
205
|
+
// An adapted body owns its error even while disposal drains its reader.
|
|
206
|
+
// Unadapted jobs must not create retained failures after closing starts.
|
|
207
|
+
if (!state.released && (state.claimed || !closing))
|
|
208
|
+
state.failure = error;
|
|
209
|
+
});
|
|
178
210
|
}
|
|
179
211
|
finally {
|
|
180
212
|
running.delete(controller);
|
|
213
|
+
if (!closing && !state.claimed && !state.released) {
|
|
214
|
+
const entry = unclaimed.get(id);
|
|
215
|
+
if (entry) {
|
|
216
|
+
entry.timer = setTimeout(() => release(state), GA_UNCLAIMED_JOB_TTL_MS);
|
|
217
|
+
entry.timer.unref?.();
|
|
218
|
+
}
|
|
219
|
+
}
|
|
181
220
|
}
|
|
182
221
|
};
|
|
183
222
|
await new Promise((resolve, reject) => {
|
|
@@ -195,7 +234,7 @@ export async function startGaLoopbackBridge(options) {
|
|
|
195
234
|
port: address.port,
|
|
196
235
|
origin,
|
|
197
236
|
rewrite(original, job, env) {
|
|
198
|
-
if (
|
|
237
|
+
if (closing)
|
|
199
238
|
throw new Error('The Antigravity bridge is disposed');
|
|
200
239
|
const id = randomUUID();
|
|
201
240
|
const target = `${origin}/agy/${id}`;
|
|
@@ -230,6 +269,16 @@ export async function startGaLoopbackBridge(options) {
|
|
|
230
269
|
if (!source)
|
|
231
270
|
return null;
|
|
232
271
|
const reader = source.getReader();
|
|
272
|
+
const entry = unclaimed.get(id);
|
|
273
|
+
const state = entry?.state ?? {
|
|
274
|
+
id,
|
|
275
|
+
failure: undefined,
|
|
276
|
+
claimed: false,
|
|
277
|
+
released: true,
|
|
278
|
+
};
|
|
279
|
+
state.claimed = true;
|
|
280
|
+
clearTimeout(entry?.timer);
|
|
281
|
+
unclaimed.delete(id);
|
|
233
282
|
const body = new ReadableStream({
|
|
234
283
|
async pull(controller) {
|
|
235
284
|
try {
|
|
@@ -238,7 +287,8 @@ export async function startGaLoopbackBridge(options) {
|
|
|
238
287
|
// The bridge ends a failed job's loopback body cleanly after
|
|
239
288
|
// its last byte and records the failure first, so the end of
|
|
240
289
|
// the body is where the genuine error is delivered.
|
|
241
|
-
const failure = takeFailure(
|
|
290
|
+
const failure = takeFailure(state);
|
|
291
|
+
reader.releaseLock();
|
|
242
292
|
if (failure)
|
|
243
293
|
controller.error(failure);
|
|
244
294
|
else
|
|
@@ -248,12 +298,18 @@ export async function startGaLoopbackBridge(options) {
|
|
|
248
298
|
controller.enqueue(value);
|
|
249
299
|
}
|
|
250
300
|
catch (error) {
|
|
251
|
-
controller.error(takeFailure(
|
|
301
|
+
controller.error(takeFailure(state) ?? error);
|
|
302
|
+
reader.releaseLock();
|
|
252
303
|
}
|
|
253
304
|
},
|
|
254
|
-
cancel(reason) {
|
|
255
|
-
|
|
256
|
-
|
|
305
|
+
async cancel(reason) {
|
|
306
|
+
release(state);
|
|
307
|
+
try {
|
|
308
|
+
await reader.cancel(reason);
|
|
309
|
+
}
|
|
310
|
+
finally {
|
|
311
|
+
reader.releaseLock();
|
|
312
|
+
}
|
|
257
313
|
},
|
|
258
314
|
});
|
|
259
315
|
return new Response(body, {
|
|
@@ -263,15 +319,32 @@ export async function startGaLoopbackBridge(options) {
|
|
|
263
319
|
});
|
|
264
320
|
},
|
|
265
321
|
pendingJobs: () => queued.size + running.size,
|
|
322
|
+
retainedResponses() {
|
|
323
|
+
let claimed = 0;
|
|
324
|
+
let failures = 0;
|
|
325
|
+
let timers = 0;
|
|
326
|
+
for (const reference of lifetimes) {
|
|
327
|
+
const state = reference.deref();
|
|
328
|
+
if (!state || state.released)
|
|
329
|
+
continue;
|
|
330
|
+
if (state.claimed)
|
|
331
|
+
claimed++;
|
|
332
|
+
if (state.failure)
|
|
333
|
+
failures++;
|
|
334
|
+
}
|
|
335
|
+
for (const entry of unclaimed.values()) {
|
|
336
|
+
if (entry.timer)
|
|
337
|
+
timers++;
|
|
338
|
+
}
|
|
339
|
+
return { unclaimed: unclaimed.size, claimed, failures, timers };
|
|
340
|
+
},
|
|
266
341
|
dispose() {
|
|
267
342
|
if (!disposal) {
|
|
343
|
+
closing = true;
|
|
268
344
|
disposal = (async () => {
|
|
269
345
|
for (const { timer } of queued.values())
|
|
270
346
|
clearTimeout(timer);
|
|
271
347
|
queued.clear();
|
|
272
|
-
for (const { timer } of failures.values())
|
|
273
|
-
clearTimeout(timer);
|
|
274
|
-
failures.clear();
|
|
275
348
|
const closed = new Promise((resolve) => {
|
|
276
349
|
server.close(() => resolve());
|
|
277
350
|
});
|
|
@@ -280,7 +353,17 @@ export async function startGaLoopbackBridge(options) {
|
|
|
280
353
|
}
|
|
281
354
|
for (const socket of sockets)
|
|
282
355
|
socket.destroy();
|
|
356
|
+
await Promise.allSettled([...reads]);
|
|
283
357
|
await closed;
|
|
358
|
+
for (const reference of lifetimes) {
|
|
359
|
+
const state = reference.deref();
|
|
360
|
+
// Detach every bridge owner, but leave an adapted body's terminal
|
|
361
|
+
// error in its own closure until EOF, cancellation or collection.
|
|
362
|
+
if (state)
|
|
363
|
+
release(state, !state.claimed);
|
|
364
|
+
}
|
|
365
|
+
lifetimes.clear();
|
|
366
|
+
unclaimed.clear();
|
|
284
367
|
})();
|
|
285
368
|
}
|
|
286
369
|
return disposal;
|
|
@@ -319,6 +402,10 @@ function writeResponseHead(response, status, contentType) {
|
|
|
319
402
|
*/
|
|
320
403
|
async function pipeResponse(upstream, response, onFailure) {
|
|
321
404
|
const contentType = upstream.headers.get('content-type') ?? 'application/octet-stream';
|
|
405
|
+
if (response.destroyed) {
|
|
406
|
+
await upstream.body?.cancel().catch(() => { });
|
|
407
|
+
return;
|
|
408
|
+
}
|
|
322
409
|
writeResponseHead(response, upstream.status, contentType);
|
|
323
410
|
if (!upstream.body) {
|
|
324
411
|
response.end();
|
|
@@ -339,7 +426,11 @@ async function pipeResponse(upstream, response, onFailure) {
|
|
|
339
426
|
if (eventStream) {
|
|
340
427
|
tail = (tail + Buffer.from(value).toString('latin1')).slice(-2);
|
|
341
428
|
}
|
|
342
|
-
if (
|
|
429
|
+
if (response.destroyed) {
|
|
430
|
+
await reader.cancel().catch(() => { });
|
|
431
|
+
return;
|
|
432
|
+
}
|
|
433
|
+
if (!response.write(value) && !response.destroyed) {
|
|
343
434
|
await new Promise((resolve) => {
|
|
344
435
|
response.once('drain', resolve);
|
|
345
436
|
response.once('close', resolve);
|
|
@@ -360,6 +451,9 @@ async function pipeResponse(upstream, response, onFailure) {
|
|
|
360
451
|
response.end();
|
|
361
452
|
return;
|
|
362
453
|
}
|
|
454
|
+
finally {
|
|
455
|
+
reader.releaseLock();
|
|
456
|
+
}
|
|
363
457
|
if (eventStream && wroteAny && tail !== '\n\n') {
|
|
364
458
|
response.write(tail.endsWith('\n') ? '\n' : '\n\n');
|
|
365
459
|
}
|
|
@@ -470,6 +564,19 @@ function routeDto(entry) {
|
|
|
470
564
|
updatedAt: entry.updatedAt,
|
|
471
565
|
};
|
|
472
566
|
}
|
|
567
|
+
/** Sidebar optionals must be omitted, not sent as own undefined JSON fields. */
|
|
568
|
+
function omitUndefinedFields(value) {
|
|
569
|
+
if (Array.isArray(value))
|
|
570
|
+
return value.map(omitUndefinedFields);
|
|
571
|
+
if (value === null || typeof value !== 'object')
|
|
572
|
+
return value;
|
|
573
|
+
const prototype = Object.getPrototypeOf(value);
|
|
574
|
+
if (prototype !== Object.prototype && prototype !== null)
|
|
575
|
+
return value;
|
|
576
|
+
return Object.fromEntries(Object.entries(value)
|
|
577
|
+
.filter(([, field]) => field !== undefined)
|
|
578
|
+
.map(([key, field]) => [key, omitUndefinedFields(field)]));
|
|
579
|
+
}
|
|
473
580
|
export function createGaRpcActivation(options) {
|
|
474
581
|
const generation = options.generation ?? createGaGeneration();
|
|
475
582
|
const now = options.now ?? Date.now;
|
|
@@ -575,13 +682,13 @@ export function createGaRpcActivation(options) {
|
|
|
575
682
|
};
|
|
576
683
|
const gemini = entry(quota.gemini);
|
|
577
684
|
const nonGemini = entry(quota['non-gemini']);
|
|
578
|
-
return {
|
|
685
|
+
return omitUndefinedFields({
|
|
579
686
|
...rest,
|
|
580
687
|
quota: {
|
|
581
688
|
...(gemini ? { gemini } : {}),
|
|
582
689
|
...(nonGemini ? { 'non-gemini': nonGemini } : {}),
|
|
583
690
|
},
|
|
584
|
-
};
|
|
691
|
+
});
|
|
585
692
|
};
|
|
586
693
|
const state = async (input, signal) => {
|
|
587
694
|
const parsed = AntigravityStateInputSchema.parse(input);
|
|
@@ -744,6 +851,8 @@ export function createGaRpcActivation(options) {
|
|
|
744
851
|
export const GA_PLUGIN_ID = 'cortexkit.antigravity-auth';
|
|
745
852
|
/** The host provider whose requests the hooks handle. */
|
|
746
853
|
export const GA_PROVIDER_ID = 'google';
|
|
854
|
+
// OpenCode 2 uses `default` to mean that no explicit thinking variant is selected.
|
|
855
|
+
const GA_HOST_DEFAULT_VARIANT = 'default';
|
|
747
856
|
const REQUEST_KIND_MATCHES_HOST = true;
|
|
748
857
|
void REQUEST_KIND_MATCHES_HOST;
|
|
749
858
|
/** Session headers the host sets on a model request. */
|
|
@@ -751,21 +860,38 @@ const PARENT_SESSION_HEADERS = [
|
|
|
751
860
|
'x-opencode-parent-session-id',
|
|
752
861
|
'x-parent-session-id',
|
|
753
862
|
];
|
|
863
|
+
/** Ownership follows the host-prepared credential, never the active connection. */
|
|
864
|
+
export function isGaOwnedRequest(event) {
|
|
865
|
+
return (event.request.headers.get('x-goog-api-key') === placeholderSecret('google'));
|
|
866
|
+
}
|
|
867
|
+
export const GA_RETRY_OWNERSHIP_LIMIT = 512;
|
|
868
|
+
export const GA_UNSUPPORTED_REQUEST_MESSAGE = 'This request cannot use Antigravity. Choose a supported Antigravity model.';
|
|
869
|
+
export const GA_CUSTOM_GOOGLE_ORIGIN_MESSAGE = 'Antigravity pool requests need the default Google base URL. Remove the custom baseURL from the Google provider settings.';
|
|
754
870
|
/**
|
|
755
|
-
*
|
|
756
|
-
*
|
|
757
|
-
*
|
|
758
|
-
* admission rather than passing through to the host's Google transport.
|
|
871
|
+
* The retry API has no attempt identity, so only the latest Google transport
|
|
872
|
+
* per session is known. Updating an entry makes it newest; eviction makes
|
|
873
|
+
* ownership unknown rather than assuming a retry belongs to Antigravity.
|
|
759
874
|
*/
|
|
760
|
-
export
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
875
|
+
export class GaRequestOwnership {
|
|
876
|
+
latest = new Map();
|
|
877
|
+
record(sessionID, owned) {
|
|
878
|
+
this.latest.delete(sessionID);
|
|
879
|
+
this.latest.set(sessionID, owned);
|
|
880
|
+
if (this.latest.size > GA_RETRY_OWNERSHIP_LIMIT) {
|
|
881
|
+
const oldest = this.latest.keys().next().value;
|
|
882
|
+
if (oldest !== undefined)
|
|
883
|
+
this.latest.delete(oldest);
|
|
884
|
+
}
|
|
885
|
+
}
|
|
886
|
+
get(sessionID) {
|
|
887
|
+
return this.latest.get(sessionID);
|
|
888
|
+
}
|
|
889
|
+
delete(sessionID) {
|
|
890
|
+
this.latest.delete(sessionID);
|
|
891
|
+
}
|
|
892
|
+
clear() {
|
|
893
|
+
this.latest.clear();
|
|
894
|
+
}
|
|
769
895
|
}
|
|
770
896
|
/**
|
|
771
897
|
* Request hook body: record an owned Google content request as a bridge job
|
|
@@ -775,17 +901,33 @@ export function isGaOwnedRequest(event, isRegisteredModel) {
|
|
|
775
901
|
* then records it as the request's error and dispatches nothing.
|
|
776
902
|
*/
|
|
777
903
|
export async function rewriteGaHttpRequest(event, input) {
|
|
778
|
-
if (
|
|
904
|
+
if (event.model.providerID !== GA_PROVIDER_ID)
|
|
779
905
|
return;
|
|
780
|
-
const
|
|
781
|
-
|
|
906
|
+
const owned = isGaOwnedRequest(event);
|
|
907
|
+
input.ownership.record(event.sessionID, owned);
|
|
908
|
+
if (!owned)
|
|
782
909
|
return;
|
|
910
|
+
const original = event.request;
|
|
911
|
+
if (!isGaGoogleContentRequest(original)) {
|
|
912
|
+
throw new Error(GA_UNSUPPORTED_REQUEST_MESSAGE);
|
|
913
|
+
}
|
|
914
|
+
if (!isCanonicalGoogleOrigin(original.url)) {
|
|
915
|
+
throw new Error(GA_CUSTOM_GOOGLE_ORIGIN_MESSAGE);
|
|
916
|
+
}
|
|
917
|
+
// Titles must reach the engine's title router even for retired or foreign IDs.
|
|
918
|
+
if (event.kind !== 'title' &&
|
|
919
|
+
!input.isRegisteredModel(event.model.id) &&
|
|
920
|
+
!isRetiredAgyModel(event.model.id)) {
|
|
921
|
+
throw new Error(GA_UNSUPPORTED_REQUEST_MESSAGE);
|
|
922
|
+
}
|
|
783
923
|
const job = {
|
|
784
924
|
sessionID: event.sessionID,
|
|
785
925
|
parentSessionID: headerValue(original, PARENT_SESSION_HEADERS),
|
|
786
926
|
kind: event.kind,
|
|
787
927
|
modelID: event.model.id,
|
|
788
|
-
variant: event.model.variant
|
|
928
|
+
variant: event.model.variant === GA_HOST_DEFAULT_VARIANT
|
|
929
|
+
? null
|
|
930
|
+
: (event.model.variant ?? null),
|
|
789
931
|
url: original.url,
|
|
790
932
|
body: await original.clone().text(),
|
|
791
933
|
};
|
|
@@ -800,11 +942,12 @@ export function adaptGaHttpResponse(event, bridge) {
|
|
|
800
942
|
/**
|
|
801
943
|
* Retry hook body. The bridge's job runner rotates accounts and retries
|
|
802
944
|
* endpoints itself; a host retry on top would repeat that whole sequence.
|
|
803
|
-
*
|
|
945
|
+
* Response adaptation cannot clear ownership: the host classifies status and
|
|
946
|
+
* consumes the body only after its response hook has run.
|
|
804
947
|
*/
|
|
805
|
-
export function decideGaRetry(event,
|
|
948
|
+
export function decideGaRetry(event, ownership) {
|
|
806
949
|
if (event.model.providerID === GA_PROVIDER_ID &&
|
|
807
|
-
(
|
|
950
|
+
ownership.get(event.sessionID) === true) {
|
|
808
951
|
event.decision = { retry: false };
|
|
809
952
|
}
|
|
810
953
|
}
|
|
@@ -893,7 +1036,7 @@ function headerValue(request, names) {
|
|
|
893
1036
|
* the location runtime, the RPC activation and the loopback bridge for the
|
|
894
1037
|
* host-owned location directory; registers the `antigravity-auth` RPC, the
|
|
895
1038
|
* public catalog models on the Google provider, the `http.request` rewrite,
|
|
896
|
-
* the `http.response` post-header error adapter and the
|
|
1039
|
+
* the `http.response` post-header error adapter and the latest-owned-session
|
|
897
1040
|
* retry policy (all scoped to the Google provider);
|
|
898
1041
|
* and returns a Cleanup that removes only this activation's hooks and RPC
|
|
899
1042
|
* and stops everything else: producers are stopped and awaited, queued
|
|
@@ -925,9 +1068,9 @@ export async function setupGaActivation(context, factory, overrides = {}) {
|
|
|
925
1068
|
// writes drain and the runtime's files and handles close.
|
|
926
1069
|
try {
|
|
927
1070
|
if (context.integration?.transform) {
|
|
928
|
-
runtime.scope.add(await
|
|
1071
|
+
runtime.scope.add(await registerGaAuthMethods({
|
|
929
1072
|
integration: { transform: context.integration.transform },
|
|
930
|
-
}), 'producer');
|
|
1073
|
+
}, undefined, { local: services.localLogin, oauth: overrides.oauth }), 'producer');
|
|
931
1074
|
}
|
|
932
1075
|
let serving = null;
|
|
933
1076
|
const requireServing = () => {
|
|
@@ -968,6 +1111,36 @@ export async function setupGaActivation(context, factory, overrides = {}) {
|
|
|
968
1111
|
});
|
|
969
1112
|
runtime.scope.add(bridge, 'producer');
|
|
970
1113
|
runtime.scope.add(activation, 'producer');
|
|
1114
|
+
const ownership = new GaRequestOwnership();
|
|
1115
|
+
const events = new AbortController();
|
|
1116
|
+
const eventSurface = context.event;
|
|
1117
|
+
const eventTask = eventSurface
|
|
1118
|
+
? (async () => {
|
|
1119
|
+
try {
|
|
1120
|
+
for await (const event of eventSurface.subscribe({
|
|
1121
|
+
signal: events.signal,
|
|
1122
|
+
})) {
|
|
1123
|
+
if (event.type === 'session.deleted') {
|
|
1124
|
+
ownership.delete(event.data.sessionID);
|
|
1125
|
+
}
|
|
1126
|
+
}
|
|
1127
|
+
}
|
|
1128
|
+
catch {
|
|
1129
|
+
if (!events.signal.aborted) {
|
|
1130
|
+
runtime.logger
|
|
1131
|
+
.createLogger('ownership')
|
|
1132
|
+
.warn('Session cleanup subscription stopped');
|
|
1133
|
+
}
|
|
1134
|
+
}
|
|
1135
|
+
})()
|
|
1136
|
+
: undefined;
|
|
1137
|
+
runtime.scope.add({
|
|
1138
|
+
dispose: async () => {
|
|
1139
|
+
events.abort();
|
|
1140
|
+
await eventTask;
|
|
1141
|
+
ownership.clear();
|
|
1142
|
+
},
|
|
1143
|
+
}, 'producer');
|
|
971
1144
|
const handlers = {
|
|
972
1145
|
state: (input, call) => activation.handlers.state(input, call.signal),
|
|
973
1146
|
apply: (input, call) => activation.handlers.apply(input, call.signal),
|
|
@@ -999,7 +1172,7 @@ export async function setupGaActivation(context, factory, overrides = {}) {
|
|
|
999
1172
|
await context.command.reload();
|
|
1000
1173
|
const responseHook = await context.session.hook('http.response', (event) => adaptGaHttpResponse(event, bridge), { providerID: GA_PROVIDER_ID });
|
|
1001
1174
|
runtime.scope.add(responseHook, 'producer');
|
|
1002
|
-
const retryHook = await context.session.hook('retry', (event) => decideGaRetry(event,
|
|
1175
|
+
const retryHook = await context.session.hook('retry', (event) => decideGaRetry(event, ownership), { providerID: GA_PROVIDER_ID });
|
|
1003
1176
|
runtime.scope.add(retryHook, 'producer');
|
|
1004
1177
|
// The `http.request` hook, which rewrites requests to the bridge, is
|
|
1005
1178
|
// installed last, so every request it rewrites already has the
|
|
@@ -1009,6 +1182,7 @@ export async function setupGaActivation(context, factory, overrides = {}) {
|
|
|
1009
1182
|
bridge,
|
|
1010
1183
|
isRegisteredModel,
|
|
1011
1184
|
env: process.env,
|
|
1185
|
+
ownership,
|
|
1012
1186
|
}), { providerID: GA_PROVIDER_ID });
|
|
1013
1187
|
runtime.scope.add(requestHook, 'producer');
|
|
1014
1188
|
}
|