@cortexkit/opencode-antigravity-auth 1.0.1 → 2.0.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/README.md +225 -553
- package/dist/cli.js +3790 -0
- package/dist/cli.js.map +7 -0
- package/dist/index.d.ts +1 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18951 -13145
- package/dist/index.js.map +4 -4
- package/dist/src/antigravity/oauth.d.ts +1 -1
- package/dist/src/antigravity/oauth.js +1 -1
- package/dist/src/cli.d.ts +21 -0
- package/dist/src/cli.d.ts.map +1 -0
- package/dist/src/cli.js +237 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/constants.d.ts +1 -1
- package/dist/src/constants.js +1 -1
- package/dist/src/hooks/auto-update-checker/cache.d.ts.map +1 -1
- package/dist/src/hooks/auto-update-checker/cache.js +13 -13
- package/dist/src/hooks/auto-update-checker/cache.js.map +1 -1
- package/dist/src/hooks/auto-update-checker/checker.d.ts +1 -1
- package/dist/src/hooks/auto-update-checker/checker.d.ts.map +1 -1
- package/dist/src/hooks/auto-update-checker/checker.js +75 -51
- package/dist/src/hooks/auto-update-checker/checker.js.map +1 -1
- package/dist/src/hooks/auto-update-checker/constants.d.ts.map +1 -1
- package/dist/src/hooks/auto-update-checker/constants.js +12 -12
- package/dist/src/hooks/auto-update-checker/constants.js.map +1 -1
- package/dist/src/hooks/auto-update-checker/index.d.ts +6 -6
- package/dist/src/hooks/auto-update-checker/index.d.ts.map +1 -1
- package/dist/src/hooks/auto-update-checker/index.js +17 -17
- package/dist/src/hooks/auto-update-checker/index.js.map +1 -1
- package/dist/src/hooks/auto-update-checker/logging.js +2 -2
- package/dist/src/hooks/auto-update-checker/logging.js.map +1 -1
- package/dist/src/hooks/auto-update-checker/types.d.ts.map +1 -1
- package/dist/src/plugin/account-access.d.ts +99 -0
- package/dist/src/plugin/account-access.d.ts.map +1 -0
- package/dist/src/plugin/account-access.js +480 -0
- package/dist/src/plugin/account-access.js.map +1 -0
- package/dist/src/plugin/accounts.d.ts +7 -236
- package/dist/src/plugin/accounts.d.ts.map +1 -1
- package/dist/src/plugin/accounts.js +31 -1166
- package/dist/src/plugin/accounts.js.map +1 -1
- package/dist/src/plugin/agy-request-metadata.d.ts +2 -0
- package/dist/src/plugin/agy-request-metadata.d.ts.map +1 -0
- package/dist/src/plugin/agy-request-metadata.js +2 -0
- package/dist/src/plugin/agy-request-metadata.js.map +1 -0
- package/dist/src/plugin/agy-transport.d.ts +1 -1
- package/dist/src/plugin/agy-transport.js +1 -1
- package/dist/src/plugin/auth-doctor.d.ts +6 -6
- package/dist/src/plugin/auth-doctor.d.ts.map +1 -1
- package/dist/src/plugin/auth-doctor.js +79 -62
- package/dist/src/plugin/auth-doctor.js.map +1 -1
- package/dist/src/plugin/auth-drift.d.ts +4 -4
- package/dist/src/plugin/auth-drift.d.ts.map +1 -1
- package/dist/src/plugin/auth-drift.js +15 -15
- package/dist/src/plugin/auth-drift.js.map +1 -1
- package/dist/src/plugin/auth-loader.d.ts +35 -0
- package/dist/src/plugin/auth-loader.d.ts.map +1 -0
- package/dist/src/plugin/auth-loader.js +144 -0
- package/dist/src/plugin/auth-loader.js.map +1 -0
- package/dist/src/plugin/auth.d.ts +1 -1
- package/dist/src/plugin/auth.js +1 -1
- package/dist/src/plugin/cache/index.d.ts +1 -1
- package/dist/src/plugin/cache/index.d.ts.map +1 -1
- package/dist/src/plugin/cache/index.js +1 -1
- package/dist/src/plugin/cache/index.js.map +1 -1
- package/dist/src/plugin/cache/signature-cache.d.ts +1 -1
- package/dist/src/plugin/cache/signature-cache.d.ts.map +1 -1
- package/dist/src/plugin/cache/signature-cache.js +23 -24
- package/dist/src/plugin/cache/signature-cache.js.map +1 -1
- package/dist/src/plugin/cache.d.ts +6 -5
- package/dist/src/plugin/cache.d.ts.map +1 -1
- package/dist/src/plugin/cache.js +21 -7
- package/dist/src/plugin/cache.js.map +1 -1
- package/dist/src/plugin/catalog.d.ts +23 -0
- package/dist/src/plugin/catalog.d.ts.map +1 -0
- package/dist/src/plugin/catalog.js +60 -0
- package/dist/src/plugin/catalog.js.map +1 -0
- package/dist/src/plugin/cli.d.ts +7 -7
- package/dist/src/plugin/cli.d.ts.map +1 -1
- package/dist/src/plugin/cli.js +62 -55
- package/dist/src/plugin/cli.js.map +1 -1
- package/dist/src/plugin/command-data.d.ts +276 -0
- package/dist/src/plugin/command-data.d.ts.map +1 -0
- package/dist/src/plugin/command-data.js +325 -0
- package/dist/src/plugin/command-data.js.map +1 -0
- package/dist/src/plugin/commands.d.ts +151 -0
- package/dist/src/plugin/commands.d.ts.map +1 -0
- package/dist/src/plugin/commands.js +639 -0
- package/dist/src/plugin/commands.js.map +1 -0
- package/dist/src/plugin/config/index.d.ts +2 -2
- package/dist/src/plugin/config/index.d.ts.map +1 -1
- package/dist/src/plugin/config/index.js +2 -2
- package/dist/src/plugin/config/index.js.map +1 -1
- package/dist/src/plugin/config/loader.d.ts +1 -1
- package/dist/src/plugin/config/loader.d.ts.map +1 -1
- package/dist/src/plugin/config/loader.js +18 -16
- package/dist/src/plugin/config/loader.js.map +1 -1
- package/dist/src/plugin/config/models.d.ts +2 -2
- package/dist/src/plugin/config/models.d.ts.map +1 -1
- package/dist/src/plugin/config/models.js +1 -1
- package/dist/src/plugin/config/models.js.map +1 -1
- package/dist/src/plugin/config/operator-settings-schema.d.ts +29 -0
- package/dist/src/plugin/config/operator-settings-schema.d.ts.map +1 -0
- package/dist/src/plugin/config/operator-settings-schema.js +28 -0
- package/dist/src/plugin/config/operator-settings-schema.js.map +1 -0
- package/dist/src/plugin/config/schema.d.ts +21 -2
- package/dist/src/plugin/config/schema.d.ts.map +1 -1
- package/dist/src/plugin/config/schema.js +85 -25
- package/dist/src/plugin/config/schema.js.map +1 -1
- package/dist/src/plugin/config/updater.d.ts.map +1 -1
- package/dist/src/plugin/config/updater.js +15 -15
- package/dist/src/plugin/config/updater.js.map +1 -1
- package/dist/src/plugin/config/writer.d.ts +34 -0
- package/dist/src/plugin/config/writer.d.ts.map +1 -0
- package/dist/src/plugin/config/writer.js +81 -0
- package/dist/src/plugin/config/writer.js.map +1 -0
- package/dist/src/plugin/core/streaming/index.d.ts +1 -1
- package/dist/src/plugin/core/streaming/index.d.ts.map +1 -1
- package/dist/src/plugin/core/streaming/index.js +1 -1
- package/dist/src/plugin/core/streaming/index.js.map +1 -1
- package/dist/src/plugin/core/streaming/transformer.d.ts.map +1 -1
- package/dist/src/plugin/core/streaming/transformer.js +85 -44
- package/dist/src/plugin/core/streaming/transformer.js.map +1 -1
- package/dist/src/plugin/core/streaming/types.d.ts.map +1 -1
- package/dist/src/plugin/debug.d.ts +3 -3
- package/dist/src/plugin/debug.d.ts.map +1 -1
- package/dist/src/plugin/debug.js +85 -47
- package/dist/src/plugin/debug.js.map +1 -1
- package/dist/src/plugin/dependencies.d.ts +129 -0
- package/dist/src/plugin/dependencies.d.ts.map +1 -0
- package/dist/src/plugin/dependencies.js +107 -0
- package/dist/src/plugin/dependencies.js.map +1 -0
- package/dist/src/plugin/errors.d.ts +27 -0
- package/dist/src/plugin/errors.d.ts.map +1 -1
- package/dist/src/plugin/errors.js +29 -3
- package/dist/src/plugin/errors.js.map +1 -1
- package/dist/src/plugin/event-handler.d.ts +53 -0
- package/dist/src/plugin/event-handler.d.ts.map +1 -0
- package/dist/src/plugin/event-handler.js +101 -0
- package/dist/src/plugin/event-handler.js.map +1 -0
- package/dist/src/plugin/fetch/retry-state.d.ts +61 -0
- package/dist/src/plugin/fetch/retry-state.d.ts.map +1 -0
- package/dist/src/plugin/fetch/retry-state.js +248 -0
- package/dist/src/plugin/fetch/retry-state.js.map +1 -0
- package/dist/src/plugin/fetch/warmup.d.ts +30 -0
- package/dist/src/plugin/fetch/warmup.d.ts.map +1 -0
- package/dist/src/plugin/fetch/warmup.js +76 -0
- package/dist/src/plugin/fetch/warmup.js.map +1 -0
- package/dist/src/plugin/fetch-interceptor.d.ts +59 -0
- package/dist/src/plugin/fetch-interceptor.d.ts.map +1 -0
- package/dist/src/plugin/fetch-interceptor.js +1387 -0
- package/dist/src/plugin/fetch-interceptor.js.map +1 -0
- package/dist/src/plugin/fetch-routing.d.ts +26 -0
- package/dist/src/plugin/fetch-routing.d.ts.map +1 -0
- package/dist/src/plugin/fetch-routing.js +99 -0
- package/dist/src/plugin/fetch-routing.js.map +1 -0
- package/dist/src/plugin/fingerprint.d.ts +1 -1
- package/dist/src/plugin/fingerprint.js +1 -1
- package/dist/src/plugin/gemini-dump.d.ts +5 -5
- package/dist/src/plugin/gemini-dump.d.ts.map +1 -1
- package/dist/src/plugin/gemini-dump.js +109 -55
- package/dist/src/plugin/gemini-dump.js.map +1 -1
- package/dist/src/plugin/google-search-tool.d.ts +9 -0
- package/dist/src/plugin/google-search-tool.d.ts.map +1 -0
- package/dist/src/plugin/google-search-tool.js +56 -0
- package/dist/src/plugin/google-search-tool.js.map +1 -0
- package/dist/src/plugin/image-saver.d.ts +2 -21
- package/dist/src/plugin/image-saver.d.ts.map +1 -1
- package/dist/src/plugin/image-saver.js +22 -56
- package/dist/src/plugin/image-saver.js.map +1 -1
- package/dist/src/plugin/index.d.ts +23 -0
- package/dist/src/plugin/index.d.ts.map +1 -0
- package/dist/src/plugin/index.js +308 -0
- package/dist/src/plugin/index.js.map +1 -0
- package/dist/src/plugin/killswitch.d.ts +94 -0
- package/dist/src/plugin/killswitch.d.ts.map +1 -0
- package/dist/src/plugin/killswitch.js +194 -0
- package/dist/src/plugin/killswitch.js.map +1 -0
- package/dist/src/plugin/lifecycle.d.ts +40 -0
- package/dist/src/plugin/lifecycle.d.ts.map +1 -0
- package/dist/src/plugin/lifecycle.js +73 -0
- package/dist/src/plugin/lifecycle.js.map +1 -0
- package/dist/src/plugin/logger.d.ts +10 -1
- package/dist/src/plugin/logger.d.ts.map +1 -1
- package/dist/src/plugin/logger.js +38 -12
- package/dist/src/plugin/logger.js.map +1 -1
- package/dist/src/plugin/logging-utils.d.ts +35 -1
- package/dist/src/plugin/logging-utils.d.ts.map +1 -1
- package/dist/src/plugin/logging-utils.js +98 -15
- package/dist/src/plugin/logging-utils.js.map +1 -1
- package/dist/src/plugin/model-registry.d.ts +1 -1
- package/dist/src/plugin/model-registry.js +1 -1
- package/dist/src/plugin/oauth-login.d.ts +22 -0
- package/dist/src/plugin/oauth-login.d.ts.map +1 -0
- package/dist/src/plugin/oauth-login.js +37 -0
- package/dist/src/plugin/oauth-login.js.map +1 -0
- package/dist/src/plugin/oauth-methods.d.ts +42 -0
- package/dist/src/plugin/oauth-methods.d.ts.map +1 -0
- package/dist/src/plugin/oauth-methods.js +1284 -0
- package/dist/src/plugin/oauth-methods.js.map +1 -0
- package/dist/src/plugin/operator-settings.d.ts +40 -0
- package/dist/src/plugin/operator-settings.d.ts.map +1 -0
- package/dist/src/plugin/operator-settings.js +148 -0
- package/dist/src/plugin/operator-settings.js.map +1 -0
- package/dist/src/plugin/persist-account-pool.d.ts +37 -0
- package/dist/src/plugin/persist-account-pool.d.ts.map +1 -0
- package/dist/src/plugin/persist-account-pool.js +142 -0
- package/dist/src/plugin/persist-account-pool.js.map +1 -0
- package/dist/src/plugin/project.d.ts +1 -1
- package/dist/src/plugin/project.js +1 -1
- package/dist/src/plugin/prompt-context.d.ts.map +1 -1
- package/dist/src/plugin/prompt-context.js +11 -11
- package/dist/src/plugin/prompt-context.js.map +1 -1
- package/dist/src/plugin/quota.d.ts +97 -41
- package/dist/src/plugin/quota.d.ts.map +1 -1
- package/dist/src/plugin/quota.js +273 -285
- package/dist/src/plugin/quota.js.map +1 -1
- package/dist/src/plugin/recovery/constants.d.ts.map +1 -1
- package/dist/src/plugin/recovery/constants.js +24 -15
- package/dist/src/plugin/recovery/constants.js.map +1 -1
- package/dist/src/plugin/recovery/index.d.ts +3 -3
- package/dist/src/plugin/recovery/index.d.ts.map +1 -1
- package/dist/src/plugin/recovery/index.js +3 -3
- package/dist/src/plugin/recovery/index.js.map +1 -1
- package/dist/src/plugin/recovery/storage.d.ts +1 -1
- package/dist/src/plugin/recovery/storage.d.ts.map +1 -1
- package/dist/src/plugin/recovery/storage.js +31 -39
- package/dist/src/plugin/recovery/storage.js.map +1 -1
- package/dist/src/plugin/recovery/types.d.ts +12 -12
- package/dist/src/plugin/recovery/types.d.ts.map +1 -1
- package/dist/src/plugin/recovery.d.ts +3 -3
- package/dist/src/plugin/recovery.d.ts.map +1 -1
- package/dist/src/plugin/recovery.js +62 -58
- package/dist/src/plugin/recovery.js.map +1 -1
- package/dist/src/plugin/refresh-queue.d.ts +5 -2
- package/dist/src/plugin/refresh-queue.d.ts.map +1 -1
- package/dist/src/plugin/refresh-queue.js +37 -15
- package/dist/src/plugin/refresh-queue.js.map +1 -1
- package/dist/src/plugin/request-helpers.d.ts +2 -1
- package/dist/src/plugin/request-helpers.d.ts.map +1 -1
- package/dist/src/plugin/request-helpers.js +458 -354
- package/dist/src/plugin/request-helpers.js.map +1 -1
- package/dist/src/plugin/request.d.ts +12 -6
- package/dist/src/plugin/request.d.ts.map +1 -1
- package/dist/src/plugin/request.js +801 -390
- package/dist/src/plugin/request.js.map +1 -1
- package/dist/src/plugin/rotation.d.ts +1 -168
- package/dist/src/plugin/rotation.d.ts.map +1 -1
- package/dist/src/plugin/rotation.js +1 -327
- package/dist/src/plugin/rotation.js.map +1 -1
- package/dist/src/plugin/search.d.ts.map +1 -1
- package/dist/src/plugin/search.js +39 -35
- package/dist/src/plugin/search.js.map +1 -1
- package/dist/src/plugin/server.d.ts +1 -1
- package/dist/src/plugin/server.d.ts.map +1 -1
- package/dist/src/plugin/server.js +42 -37
- package/dist/src/plugin/server.js.map +1 -1
- package/dist/src/plugin/session-context.d.ts +22 -0
- package/dist/src/plugin/session-context.d.ts.map +1 -0
- package/dist/src/plugin/session-context.js +67 -0
- package/dist/src/plugin/session-context.js.map +1 -0
- package/dist/src/plugin/storage.d.ts +59 -114
- package/dist/src/plugin/storage.d.ts.map +1 -1
- package/dist/src/plugin/storage.js +140 -474
- package/dist/src/plugin/storage.js.map +1 -1
- package/dist/src/plugin/stores/signature-store.d.ts.map +1 -1
- package/dist/src/plugin/stores/signature-store.js.map +1 -1
- package/dist/src/plugin/thinking-recovery.d.ts.map +1 -1
- package/dist/src/plugin/thinking-recovery.js +35 -33
- package/dist/src/plugin/thinking-recovery.js.map +1 -1
- package/dist/src/plugin/token.d.ts +2 -2
- package/dist/src/plugin/token.d.ts.map +1 -1
- package/dist/src/plugin/token.js +30 -21
- package/dist/src/plugin/token.js.map +1 -1
- package/dist/src/plugin/transform/cross-model-sanitizer.d.ts +1 -1
- package/dist/src/plugin/transform/cross-model-sanitizer.js +1 -1
- package/dist/src/plugin/transform/index.d.ts +1 -1
- package/dist/src/plugin/transform/index.js +1 -1
- package/dist/src/plugin/transform/model-resolver.d.ts +1 -1
- package/dist/src/plugin/transform/model-resolver.js +1 -1
- package/dist/src/plugin/transform/types.d.ts +1 -1
- package/dist/src/plugin/transform/types.js +1 -1
- package/dist/src/plugin/types.d.ts +25 -69
- package/dist/src/plugin/types.d.ts.map +1 -1
- package/dist/src/plugin/ui/ansi.d.ts.map +1 -1
- package/dist/src/plugin/ui/ansi.js.map +1 -1
- package/dist/src/plugin/ui/auth-menu.d.ts +2 -2
- package/dist/src/plugin/ui/auth-menu.d.ts.map +1 -1
- package/dist/src/plugin/ui/auth-menu.js +84 -31
- package/dist/src/plugin/ui/auth-menu.js.map +1 -1
- package/dist/src/plugin/ui/confirm.d.ts.map +1 -1
- package/dist/src/plugin/ui/confirm.js.map +1 -1
- package/dist/src/plugin/ui/model-status.d.ts +3 -3
- package/dist/src/plugin/ui/model-status.d.ts.map +1 -1
- package/dist/src/plugin/ui/model-status.js +3 -3
- package/dist/src/plugin/ui/model-status.js.map +1 -1
- package/dist/src/plugin/ui/quota-status.d.ts +4 -4
- package/dist/src/plugin/ui/quota-status.d.ts.map +1 -1
- package/dist/src/plugin/ui/quota-status.js +51 -48
- package/dist/src/plugin/ui/quota-status.js.map +1 -1
- package/dist/src/plugin/ui/select.d.ts.map +1 -1
- package/dist/src/plugin/ui/select.js +22 -12
- package/dist/src/plugin/ui/select.js.map +1 -1
- package/dist/src/plugin/version.d.ts +1 -1
- package/dist/src/plugin/version.js +1 -1
- package/dist/src/rpc/notifications.d.ts +6 -0
- package/dist/src/rpc/notifications.d.ts.map +1 -0
- package/dist/src/rpc/notifications.js +46 -0
- package/dist/src/rpc/notifications.js.map +1 -0
- package/dist/src/rpc/port-file.d.ts +13 -0
- package/dist/src/rpc/port-file.d.ts.map +1 -0
- package/dist/src/rpc/port-file.js +109 -0
- package/dist/src/rpc/port-file.js.map +1 -0
- package/dist/src/rpc/protocol.d.ts +22 -0
- package/dist/src/rpc/protocol.d.ts.map +1 -0
- package/dist/src/rpc/protocol.js +1 -0
- package/dist/src/rpc/protocol.js.map +1 -0
- package/dist/src/rpc/rpc-client.d.ts +10 -0
- package/dist/src/rpc/rpc-client.d.ts.map +1 -0
- package/dist/src/rpc/rpc-client.js +58 -0
- package/dist/src/rpc/rpc-client.js.map +1 -0
- package/dist/src/rpc/rpc-dir.d.ts +4 -0
- package/dist/src/rpc/rpc-dir.d.ts.map +1 -0
- package/dist/src/rpc/rpc-dir.js +19 -0
- package/dist/src/rpc/rpc-dir.js.map +1 -0
- package/dist/src/rpc/rpc-server.d.ts +13 -0
- package/dist/src/rpc/rpc-server.d.ts.map +1 -0
- package/dist/src/rpc/rpc-server.js +231 -0
- package/dist/src/rpc/rpc-server.js.map +1 -0
- package/dist/src/sidebar-state.d.ts +240 -0
- package/dist/src/sidebar-state.d.ts.map +1 -0
- package/dist/src/sidebar-state.js +520 -0
- package/dist/src/sidebar-state.js.map +1 -0
- package/dist/src/tui/command-dialogs.d.ts +61 -0
- package/dist/src/tui/command-dialogs.d.ts.map +1 -0
- package/dist/src/tui/command-dialogs.js +497 -0
- package/dist/src/tui/command-dialogs.js.map +1 -0
- package/dist/src/tui/file-logger.d.ts +41 -0
- package/dist/src/tui/file-logger.d.ts.map +1 -0
- package/dist/src/tui/file-logger.js +114 -0
- package/dist/src/tui/file-logger.js.map +1 -0
- package/dist/src/tui-preferences.d.ts +40 -0
- package/dist/src/tui-preferences.d.ts.map +1 -0
- package/dist/src/tui-preferences.js +328 -0
- package/dist/src/tui-preferences.js.map +1 -0
- package/dist/src/tui.d.ts +68 -0
- package/dist/src/tui.d.ts.map +1 -0
- package/dist/src/tui.js +662 -0
- package/dist/src/tui.js.map +1 -0
- package/package.json +46 -22
- package/src/plugin/command-data.ts +651 -0
- package/src/rpc/port-file.ts +143 -0
- package/src/rpc/protocol.ts +31 -0
- package/src/rpc/rpc-client.ts +102 -0
- package/src/rpc/rpc-dir.ts +24 -0
- package/src/sidebar-state.ts +717 -0
- package/src/tui/command-dialogs.tsx +699 -0
- package/src/tui/entry.mjs +74 -0
- package/src/tui/file-logger.ts +145 -0
- package/src/tui-compiled/plugin/command-data.ts +651 -0
- package/src/tui-compiled/rpc/port-file.ts +143 -0
- package/src/tui-compiled/rpc/protocol.ts +31 -0
- package/src/tui-compiled/rpc/rpc-client.ts +102 -0
- package/src/tui-compiled/rpc/rpc-dir.ts +24 -0
- package/src/tui-compiled/sidebar-state.ts +717 -0
- package/src/tui-compiled/tui/command-dialogs.tsx +659 -0
- package/src/tui-compiled/tui/file-logger.ts +145 -0
- package/src/tui-compiled/tui-preferences.ts +416 -0
- package/src/tui-compiled/tui.tsx +1150 -0
- package/src/tui-preferences.ts +416 -0
- package/src/tui.tsx +1117 -0
- package/dist/src/plugin.d.ts +0 -32
- package/dist/src/plugin.d.ts.map +0 -1
- package/dist/src/plugin.js +0 -3151
- package/dist/src/plugin.js.map +0 -1
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { randomBytes } from 'node:crypto'
|
|
2
|
+
import {
|
|
3
|
+
chmod,
|
|
4
|
+
mkdir,
|
|
5
|
+
readdir,
|
|
6
|
+
readFile,
|
|
7
|
+
rename,
|
|
8
|
+
unlink,
|
|
9
|
+
writeFile,
|
|
10
|
+
} from 'node:fs/promises'
|
|
11
|
+
import { join } from 'node:path'
|
|
12
|
+
|
|
13
|
+
export interface PortFileEntry {
|
|
14
|
+
port: number
|
|
15
|
+
token: string
|
|
16
|
+
pid: number
|
|
17
|
+
startedAt: number
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const PORT_FILE_PATTERN = /^port-(\d+)\.json$/
|
|
21
|
+
const DIR_MODE = 0o700
|
|
22
|
+
const FILE_MODE = 0o600
|
|
23
|
+
|
|
24
|
+
export async function writePortFile(
|
|
25
|
+
dir: string,
|
|
26
|
+
entry: { port: number; token: string; pid: number },
|
|
27
|
+
): Promise<string> {
|
|
28
|
+
assertPortFileEntry({ ...entry, startedAt: 0 }, entry.pid)
|
|
29
|
+
|
|
30
|
+
// mkdir recursive with the private mode on first creation; on a re-run the
|
|
31
|
+
// directory already exists with the right mode. We still re-apply chmod so
|
|
32
|
+
// an operator who widened the directory accidentally gets it repaired
|
|
33
|
+
// back to 0o700 before we drop a token-bearing file inside.
|
|
34
|
+
await mkdir(dir, { recursive: true, mode: DIR_MODE })
|
|
35
|
+
await chmod(dir, DIR_MODE)
|
|
36
|
+
|
|
37
|
+
const full: PortFileEntry = { ...entry, startedAt: Date.now() }
|
|
38
|
+
const target = join(dir, `port-${entry.pid}.json`)
|
|
39
|
+
const temporary = `${target}.${process.pid}.${randomBytes(8).toString('hex')}.tmp`
|
|
40
|
+
|
|
41
|
+
try {
|
|
42
|
+
await writeFile(temporary, JSON.stringify(full), {
|
|
43
|
+
encoding: 'utf8',
|
|
44
|
+
mode: FILE_MODE,
|
|
45
|
+
})
|
|
46
|
+
await chmod(temporary, FILE_MODE)
|
|
47
|
+
await rename(temporary, target)
|
|
48
|
+
} catch (error) {
|
|
49
|
+
try {
|
|
50
|
+
await unlink(temporary)
|
|
51
|
+
} catch {}
|
|
52
|
+
throw error
|
|
53
|
+
}
|
|
54
|
+
return target
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export async function discoverPortFile(
|
|
58
|
+
dir: string,
|
|
59
|
+
expectedPid?: number,
|
|
60
|
+
): Promise<PortFileEntry | null> {
|
|
61
|
+
let names: string[]
|
|
62
|
+
try {
|
|
63
|
+
names = await readdir(dir)
|
|
64
|
+
} catch (error) {
|
|
65
|
+
if (isNodeError(error, 'ENOENT')) return null
|
|
66
|
+
throw error
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const live: PortFileEntry[] = []
|
|
70
|
+
for (const name of names) {
|
|
71
|
+
const match = PORT_FILE_PATTERN.exec(name)
|
|
72
|
+
if (!match) continue
|
|
73
|
+
const path = join(dir, name)
|
|
74
|
+
const filenamePid = Number(match[1])
|
|
75
|
+
|
|
76
|
+
let parsed: PortFileEntry
|
|
77
|
+
try {
|
|
78
|
+
const text = await readFile(path, 'utf8')
|
|
79
|
+
const raw = JSON.parse(text) as unknown
|
|
80
|
+
assertPortFileEntry(raw, filenamePid)
|
|
81
|
+
parsed = raw
|
|
82
|
+
} catch {
|
|
83
|
+
// Malformed or stale — keep the directory clean so future discovers
|
|
84
|
+
// don't trip over the same debris.
|
|
85
|
+
await unlink(path).catch(() => {})
|
|
86
|
+
continue
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
if (!isProcessAlive(parsed.pid)) {
|
|
90
|
+
await unlink(path).catch(() => {})
|
|
91
|
+
continue
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
live.push(parsed)
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
if (expectedPid !== undefined) {
|
|
98
|
+
// antigravity exact-PID safety: a missing expected PID must surface as
|
|
99
|
+
// null so a stale but live entry can't impersonate the requester.
|
|
100
|
+
return live.find(({ pid }) => pid === expectedPid) ?? null
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
if (live.length === 0) return null
|
|
104
|
+
live.sort((left, right) => right.startedAt - left.startedAt)
|
|
105
|
+
return live[0] ?? null
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
function assertPortFileEntry(
|
|
109
|
+
value: unknown,
|
|
110
|
+
filenamePid: number,
|
|
111
|
+
): asserts value is PortFileEntry {
|
|
112
|
+
if (
|
|
113
|
+
typeof value !== 'object' ||
|
|
114
|
+
value === null ||
|
|
115
|
+
!Number.isSafeInteger((value as PortFileEntry).pid) ||
|
|
116
|
+
(value as PortFileEntry).pid <= 0 ||
|
|
117
|
+
(value as PortFileEntry).pid !== filenamePid ||
|
|
118
|
+
!Number.isSafeInteger((value as PortFileEntry).port) ||
|
|
119
|
+
(value as PortFileEntry).port <= 0 ||
|
|
120
|
+
(value as PortFileEntry).port > 65_535 ||
|
|
121
|
+
typeof (value as PortFileEntry).token !== 'string' ||
|
|
122
|
+
(value as PortFileEntry).token.length === 0
|
|
123
|
+
) {
|
|
124
|
+
throw new Error('Invalid RPC port file')
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
function isProcessAlive(pid: number): boolean {
|
|
129
|
+
try {
|
|
130
|
+
process.kill(pid, 0)
|
|
131
|
+
return true
|
|
132
|
+
} catch (error) {
|
|
133
|
+
return isNodeError(error, 'EPERM')
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
function isNodeError(error: unknown, code: string): boolean {
|
|
138
|
+
return (
|
|
139
|
+
error instanceof Error &&
|
|
140
|
+
'code' in error &&
|
|
141
|
+
(error as NodeJS.ErrnoException).code === code
|
|
142
|
+
)
|
|
143
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export type CommandModalName =
|
|
2
|
+
| 'antigravity-quota'
|
|
3
|
+
| 'antigravity-account'
|
|
4
|
+
| 'antigravity-routing'
|
|
5
|
+
| 'antigravity-killswitch'
|
|
6
|
+
| 'antigravity-dump'
|
|
7
|
+
| 'antigravity-logging'
|
|
8
|
+
|
|
9
|
+
export interface OpenDialogPayload {
|
|
10
|
+
command: CommandModalName
|
|
11
|
+
text: string
|
|
12
|
+
knobs: Record<string, unknown>
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface RpcNotification {
|
|
16
|
+
id: number
|
|
17
|
+
type: 'open-dialog'
|
|
18
|
+
payload: OpenDialogPayload
|
|
19
|
+
sessionId?: string
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export interface ApplyRequest {
|
|
23
|
+
command: CommandModalName
|
|
24
|
+
arguments: string
|
|
25
|
+
sessionId?: string
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export interface ApplyResult {
|
|
29
|
+
text: string
|
|
30
|
+
knobs: Record<string, unknown>
|
|
31
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
// Subpath import (not the barrel): this module ships into the TUI's
|
|
2
|
+
// compiled tree, which must not pull the credential-bearing barrel into
|
|
3
|
+
// the host's render path.
|
|
4
|
+
import { fetchWithActiveTimeout } from '@cortexkit/antigravity-auth-core/fetch-timeout'
|
|
5
|
+
|
|
6
|
+
import { discoverPortFile } from './port-file'
|
|
7
|
+
import type { ApplyRequest, ApplyResult, RpcNotification } from './protocol'
|
|
8
|
+
|
|
9
|
+
const DEFAULT_TIMEOUT_MS = 2_000
|
|
10
|
+
|
|
11
|
+
const APPLY_FALLBACK: ApplyResult = { text: 'apply failed', knobs: {} }
|
|
12
|
+
const PENDING_FALLBACK: RpcNotification[] = []
|
|
13
|
+
|
|
14
|
+
export interface RpcRequestOptions {
|
|
15
|
+
timeoutMs?: number
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export interface RpcClient {
|
|
19
|
+
apply(
|
|
20
|
+
request: ApplyRequest,
|
|
21
|
+
options?: RpcRequestOptions,
|
|
22
|
+
): Promise<ApplyResult>
|
|
23
|
+
pendingNotifications(
|
|
24
|
+
lastReceivedId: number,
|
|
25
|
+
sessionId?: string,
|
|
26
|
+
options?: RpcRequestOptions,
|
|
27
|
+
): Promise<RpcNotification[]>
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export function createRpcClient(dir: string, expectedPid?: number): RpcClient {
|
|
31
|
+
return {
|
|
32
|
+
async apply(request, options) {
|
|
33
|
+
const result = await post<ApplyResult>(
|
|
34
|
+
dir,
|
|
35
|
+
expectedPid,
|
|
36
|
+
'/rpc/apply',
|
|
37
|
+
request,
|
|
38
|
+
options,
|
|
39
|
+
)
|
|
40
|
+
return result ?? APPLY_FALLBACK
|
|
41
|
+
},
|
|
42
|
+
async pendingNotifications(lastReceivedId, sessionId, options) {
|
|
43
|
+
const result = await post<{ messages: RpcNotification[] }>(
|
|
44
|
+
dir,
|
|
45
|
+
expectedPid,
|
|
46
|
+
'/rpc/pending-notifications',
|
|
47
|
+
{
|
|
48
|
+
lastReceivedId,
|
|
49
|
+
...(sessionId === undefined ? {} : { sessionId }),
|
|
50
|
+
},
|
|
51
|
+
options,
|
|
52
|
+
)
|
|
53
|
+
return result?.messages ?? PENDING_FALLBACK
|
|
54
|
+
},
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
async function post<T>(
|
|
59
|
+
dir: string,
|
|
60
|
+
expectedPid: number | undefined,
|
|
61
|
+
path: string,
|
|
62
|
+
body: unknown,
|
|
63
|
+
options: RpcRequestOptions | undefined,
|
|
64
|
+
): Promise<T | null> {
|
|
65
|
+
// Internal nullable — every RPC call site (apply, pending) must absorb a
|
|
66
|
+
// missing/unreachable server gracefully. The TUI render path never
|
|
67
|
+
// crashes because the server is dead; the user sees a fallback text and
|
|
68
|
+
// a fresh poll retries the next tick.
|
|
69
|
+
const entry = await discoverPortFileSafe(dir, expectedPid)
|
|
70
|
+
if (!entry) return null
|
|
71
|
+
|
|
72
|
+
const timeoutMs = options?.timeoutMs ?? DEFAULT_TIMEOUT_MS
|
|
73
|
+
try {
|
|
74
|
+
const response = await fetchWithActiveTimeout(
|
|
75
|
+
`http://127.0.0.1:${entry.port}${path}`,
|
|
76
|
+
{
|
|
77
|
+
method: 'POST',
|
|
78
|
+
headers: {
|
|
79
|
+
authorization: `Bearer ${entry.token}`,
|
|
80
|
+
'content-type': 'application/json',
|
|
81
|
+
},
|
|
82
|
+
body: JSON.stringify(body),
|
|
83
|
+
},
|
|
84
|
+
{ timeoutMs },
|
|
85
|
+
)
|
|
86
|
+
if (!response.ok) return null
|
|
87
|
+
return (await response.json()) as T
|
|
88
|
+
} catch {
|
|
89
|
+
return null
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
async function discoverPortFileSafe(
|
|
94
|
+
dir: string,
|
|
95
|
+
expectedPid: number | undefined,
|
|
96
|
+
): Promise<Awaited<ReturnType<typeof discoverPortFile>>> {
|
|
97
|
+
try {
|
|
98
|
+
return await discoverPortFile(dir, expectedPid)
|
|
99
|
+
} catch {
|
|
100
|
+
return null
|
|
101
|
+
}
|
|
102
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto'
|
|
2
|
+
import { homedir, tmpdir } from 'node:os'
|
|
3
|
+
import { isAbsolute, join, resolve } from 'node:path'
|
|
4
|
+
|
|
5
|
+
const RPC_DIR_ENV = 'ANTIGRAVITY_AUTH_RPC_DIR'
|
|
6
|
+
|
|
7
|
+
// Both processes must resolve the SAME dir from the SAME project directory.
|
|
8
|
+
export function getRpcDir(projectDirectory: string): string {
|
|
9
|
+
const override = process.env[RPC_DIR_ENV]?.trim()
|
|
10
|
+
if (override) {
|
|
11
|
+
return isAbsolute(override) ? override : resolve(projectDirectory, override)
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const projectHash = createHash('sha256')
|
|
15
|
+
.update(resolve(projectDirectory))
|
|
16
|
+
.digest('hex')
|
|
17
|
+
.slice(0, 16)
|
|
18
|
+
const stateHome =
|
|
19
|
+
process.env.XDG_STATE_HOME ?? join(homedir(), '.local', 'state')
|
|
20
|
+
|
|
21
|
+
return join(stateHome, 'cortexkit', 'antigravity-auth', 'rpc', projectHash)
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export { tmpdir }
|