@kortix/sdk 0.9.98
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 +313 -0
- package/dist/files/client.d.ts +96 -0
- package/dist/files/client.d.ts.map +1 -0
- package/dist/files/client.js +346 -0
- package/dist/files/client.js.map +1 -0
- package/dist/files/types.d.ts +82 -0
- package/dist/files/types.d.ts.map +1 -0
- package/dist/files/types.js +6 -0
- package/dist/files/types.js.map +1 -0
- package/dist/index.d.ts +119 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +93 -0
- package/dist/index.js.map +1 -0
- package/dist/kortix.d.ts +897 -0
- package/dist/kortix.d.ts.map +1 -0
- package/dist/kortix.js +772 -0
- package/dist/kortix.js.map +1 -0
- package/dist/opencode/client.d.ts +89 -0
- package/dist/opencode/client.d.ts.map +1 -0
- package/dist/opencode/client.js +191 -0
- package/dist/opencode/client.js.map +1 -0
- package/dist/opencode/env.d.ts +13 -0
- package/dist/opencode/env.d.ts.map +1 -0
- package/dist/opencode/env.js +63 -0
- package/dist/opencode/env.js.map +1 -0
- package/dist/opencode/kortix-master.d.ts +487 -0
- package/dist/opencode/kortix-master.d.ts.map +1 -0
- package/dist/opencode/kortix-master.js +313 -0
- package/dist/opencode/kortix-master.js.map +1 -0
- package/dist/opencode/triggers.d.ts +6 -0
- package/dist/opencode/triggers.d.ts.map +1 -0
- package/dist/opencode/triggers.js +34 -0
- package/dist/opencode/triggers.js.map +1 -0
- package/dist/platform/api/errors.d.ts +106 -0
- package/dist/platform/api/errors.d.ts.map +1 -0
- package/dist/platform/api/errors.js +137 -0
- package/dist/platform/api/errors.js.map +1 -0
- package/dist/platform/api-client.d.ts +35 -0
- package/dist/platform/api-client.d.ts.map +1 -0
- package/dist/platform/api-client.js +279 -0
- package/dist/platform/api-client.js.map +1 -0
- package/dist/platform/auth-core.d.ts +60 -0
- package/dist/platform/auth-core.d.ts.map +1 -0
- package/dist/platform/auth-core.js +104 -0
- package/dist/platform/auth-core.js.map +1 -0
- package/dist/platform/auth.d.ts +88 -0
- package/dist/platform/auth.d.ts.map +1 -0
- package/dist/platform/auth.js +161 -0
- package/dist/platform/auth.js.map +1 -0
- package/dist/platform/config-node.d.ts +33 -0
- package/dist/platform/config-node.d.ts.map +1 -0
- package/dist/platform/config-node.js +63 -0
- package/dist/platform/config-node.js.map +1 -0
- package/dist/platform/config.d.ts +77 -0
- package/dist/platform/config.d.ts.map +1 -0
- package/dist/platform/config.js +62 -0
- package/dist/platform/config.js.map +1 -0
- package/dist/platform/feature-flags.d.ts +25 -0
- package/dist/platform/feature-flags.d.ts.map +1 -0
- package/dist/platform/feature-flags.js +114 -0
- package/dist/platform/feature-flags.js.map +1 -0
- package/dist/platform/fresh-sessions.d.ts +4 -0
- package/dist/platform/fresh-sessions.d.ts.map +1 -0
- package/dist/platform/fresh-sessions.js +22 -0
- package/dist/platform/fresh-sessions.js.map +1 -0
- package/dist/platform/instance-routes.d.ts +17 -0
- package/dist/platform/instance-routes.d.ts.map +1 -0
- package/dist/platform/instance-routes.js +105 -0
- package/dist/platform/instance-routes.js.map +1 -0
- package/dist/platform/logger.d.ts +20 -0
- package/dist/platform/logger.d.ts.map +1 -0
- package/dist/platform/logger.js +44 -0
- package/dist/platform/logger.js.map +1 -0
- package/dist/platform/opencode-errors.d.ts +20 -0
- package/dist/platform/opencode-errors.d.ts.map +1 -0
- package/dist/platform/opencode-errors.js +71 -0
- package/dist/platform/opencode-errors.js.map +1 -0
- package/dist/platform/platform-client/backups.d.ts +22 -0
- package/dist/platform/platform-client/backups.d.ts.map +1 -0
- package/dist/platform/platform-client/backups.js +16 -0
- package/dist/platform/platform-client/backups.js.map +1 -0
- package/dist/platform/platform-client/index.d.ts +21 -0
- package/dist/platform/platform-client/index.d.ts.map +1 -0
- package/dist/platform/platform-client/index.js +21 -0
- package/dist/platform/platform-client/index.js.map +1 -0
- package/dist/platform/platform-client/instance-admin.d.ts +67 -0
- package/dist/platform/platform-client/instance-admin.d.ts.map +1 -0
- package/dist/platform/platform-client/instance-admin.js +59 -0
- package/dist/platform/platform-client/instance-admin.js.map +1 -0
- package/dist/platform/platform-client/invites.d.ts +35 -0
- package/dist/platform/platform-client/invites.d.ts.map +1 -0
- package/dist/platform/platform-client/invites.js +25 -0
- package/dist/platform/platform-client/invites.js.map +1 -0
- package/dist/platform/platform-client/lifecycle.d.ts +78 -0
- package/dist/platform/platform-client/lifecycle.d.ts.map +1 -0
- package/dist/platform/platform-client/lifecycle.js +151 -0
- package/dist/platform/platform-client/lifecycle.js.map +1 -0
- package/dist/platform/platform-client/members.d.ts +81 -0
- package/dist/platform/platform-client/members.d.ts.map +1 -0
- package/dist/platform/platform-client/members.js +59 -0
- package/dist/platform/platform-client/members.js.map +1 -0
- package/dist/platform/platform-client/shared.d.ts +44 -0
- package/dist/platform/platform-client/shared.d.ts.map +1 -0
- package/dist/platform/platform-client/shared.js +177 -0
- package/dist/platform/platform-client/shared.js.map +1 -0
- package/dist/platform/platform-client/ssh.d.ts +29 -0
- package/dist/platform/platform-client/ssh.d.ts.map +1 -0
- package/dist/platform/platform-client/ssh.js +14 -0
- package/dist/platform/platform-client/ssh.js.map +1 -0
- package/dist/platform/platform-client/types.d.ts +56 -0
- package/dist/platform/platform-client/types.d.ts.map +1 -0
- package/dist/platform/platform-client/types.js +19 -0
- package/dist/platform/platform-client/types.js.map +1 -0
- package/dist/platform/platform-client/updates.d.ts +117 -0
- package/dist/platform/platform-client/updates.d.ts.map +1 -0
- package/dist/platform/platform-client/updates.js +97 -0
- package/dist/platform/platform-client/updates.js.map +1 -0
- package/dist/platform/platform-client/urls.d.ts +18 -0
- package/dist/platform/platform-client/urls.d.ts.map +1 -0
- package/dist/platform/platform-client/urls.js +31 -0
- package/dist/platform/platform-client/urls.js.map +1 -0
- package/dist/platform/projects-client/access.d.ts +273 -0
- package/dist/platform/projects-client/access.d.ts.map +1 -0
- package/dist/platform/projects-client/access.js +89 -0
- package/dist/platform/projects-client/access.js.map +1 -0
- package/dist/platform/projects-client/accounts.d.ts +184 -0
- package/dist/platform/projects-client/accounts.d.ts.map +1 -0
- package/dist/platform/projects-client/accounts.js +78 -0
- package/dist/platform/projects-client/accounts.js.map +1 -0
- package/dist/platform/projects-client/agent-config.d.ts +58 -0
- package/dist/platform/projects-client/agent-config.d.ts.map +1 -0
- package/dist/platform/projects-client/agent-config.js +9 -0
- package/dist/platform/projects-client/agent-config.js.map +1 -0
- package/dist/platform/projects-client/agent-scope.d.ts +12 -0
- package/dist/platform/projects-client/agent-scope.d.ts.map +1 -0
- package/dist/platform/projects-client/agent-scope.js +6 -0
- package/dist/platform/projects-client/agent-scope.js.map +1 -0
- package/dist/platform/projects-client/apps.d.ts +98 -0
- package/dist/platform/projects-client/apps.d.ts.map +1 -0
- package/dist/platform/projects-client/apps.js +29 -0
- package/dist/platform/projects-client/apps.js.map +1 -0
- package/dist/platform/projects-client/audit.d.ts +85 -0
- package/dist/platform/projects-client/audit.d.ts.map +1 -0
- package/dist/platform/projects-client/audit.js +51 -0
- package/dist/platform/projects-client/audit.js.map +1 -0
- package/dist/platform/projects-client/billing.d.ts +336 -0
- package/dist/platform/projects-client/billing.d.ts.map +1 -0
- package/dist/platform/projects-client/billing.js +260 -0
- package/dist/platform/projects-client/billing.js.map +1 -0
- package/dist/platform/projects-client/change-requests.d.ts +119 -0
- package/dist/platform/projects-client/change-requests.d.ts.map +1 -0
- package/dist/platform/projects-client/change-requests.js +56 -0
- package/dist/platform/projects-client/change-requests.js.map +1 -0
- package/dist/platform/projects-client/channels.d.ts +135 -0
- package/dist/platform/projects-client/channels.d.ts.map +1 -0
- package/dist/platform/projects-client/channels.js +103 -0
- package/dist/platform/projects-client/channels.js.map +1 -0
- package/dist/platform/projects-client/connectors.d.ts +148 -0
- package/dist/platform/projects-client/connectors.d.ts.map +1 -0
- package/dist/platform/projects-client/connectors.js +66 -0
- package/dist/platform/projects-client/connectors.js.map +1 -0
- package/dist/platform/projects-client/files.d.ts +37 -0
- package/dist/platform/projects-client/files.d.ts.map +1 -0
- package/dist/platform/projects-client/files.js +58 -0
- package/dist/platform/projects-client/files.js.map +1 -0
- package/dist/platform/projects-client/gateway.d.ts +177 -0
- package/dist/platform/projects-client/gateway.d.ts.map +1 -0
- package/dist/platform/projects-client/gateway.js +59 -0
- package/dist/platform/projects-client/gateway.js.map +1 -0
- package/dist/platform/projects-client/git-history.d.ts +74 -0
- package/dist/platform/projects-client/git-history.d.ts.map +1 -0
- package/dist/platform/projects-client/git-history.js +40 -0
- package/dist/platform/projects-client/git-history.js.map +1 -0
- package/dist/platform/projects-client/github.d.ts +62 -0
- package/dist/platform/projects-client/github.d.ts.map +1 -0
- package/dist/platform/projects-client/github.js +30 -0
- package/dist/platform/projects-client/github.js.map +1 -0
- package/dist/platform/projects-client/index.d.ts +32 -0
- package/dist/platform/projects-client/index.d.ts.map +1 -0
- package/dist/platform/projects-client/index.js +34 -0
- package/dist/platform/projects-client/index.js.map +1 -0
- package/dist/platform/projects-client/marketplace-catalog.d.ts +76 -0
- package/dist/platform/projects-client/marketplace-catalog.d.ts.map +1 -0
- package/dist/platform/projects-client/marketplace-catalog.js +48 -0
- package/dist/platform/projects-client/marketplace-catalog.js.map +1 -0
- package/dist/platform/projects-client/marketplace.d.ts +80 -0
- package/dist/platform/projects-client/marketplace.d.ts.map +1 -0
- package/dist/platform/projects-client/marketplace.js +52 -0
- package/dist/platform/projects-client/marketplace.js.map +1 -0
- package/dist/platform/projects-client/model-defaults.d.ts +36 -0
- package/dist/platform/projects-client/model-defaults.d.ts.map +1 -0
- package/dist/platform/projects-client/model-defaults.js +16 -0
- package/dist/platform/projects-client/model-defaults.js.map +1 -0
- package/dist/platform/projects-client/policies.d.ts +21 -0
- package/dist/platform/projects-client/policies.d.ts.map +1 -0
- package/dist/platform/projects-client/policies.js +10 -0
- package/dist/platform/projects-client/policies.js.map +1 -0
- package/dist/platform/projects-client/projects.d.ts +235 -0
- package/dist/platform/projects-client/projects.d.ts.map +1 -0
- package/dist/platform/projects-client/projects.js +161 -0
- package/dist/platform/projects-client/projects.js.map +1 -0
- package/dist/platform/projects-client/public-session-shares.d.ts +52 -0
- package/dist/platform/projects-client/public-session-shares.d.ts.map +1 -0
- package/dist/platform/projects-client/public-session-shares.js +54 -0
- package/dist/platform/projects-client/public-session-shares.js.map +1 -0
- package/dist/platform/projects-client/review.d.ts +57 -0
- package/dist/platform/projects-client/review.d.ts.map +1 -0
- package/dist/platform/projects-client/review.js +28 -0
- package/dist/platform/projects-client/review.js.map +1 -0
- package/dist/platform/projects-client/sandbox-shares.d.ts +25 -0
- package/dist/platform/projects-client/sandbox-shares.d.ts.map +1 -0
- package/dist/platform/projects-client/sandbox-shares.js +29 -0
- package/dist/platform/projects-client/sandbox-shares.js.map +1 -0
- package/dist/platform/projects-client/sandbox.d.ts +123 -0
- package/dist/platform/projects-client/sandbox.d.ts.map +1 -0
- package/dist/platform/projects-client/sandbox.js +45 -0
- package/dist/platform/projects-client/sandbox.js.map +1 -0
- package/dist/platform/projects-client/secrets.d.ts +122 -0
- package/dist/platform/projects-client/secrets.d.ts.map +1 -0
- package/dist/platform/projects-client/secrets.js +34 -0
- package/dist/platform/projects-client/secrets.js.map +1 -0
- package/dist/platform/projects-client/session-sandbox.d.ts +61 -0
- package/dist/platform/projects-client/session-sandbox.d.ts.map +1 -0
- package/dist/platform/projects-client/session-sandbox.js +82 -0
- package/dist/platform/projects-client/session-sandbox.js.map +1 -0
- package/dist/platform/projects-client/sessions.d.ts +216 -0
- package/dist/platform/projects-client/sessions.d.ts.map +1 -0
- package/dist/platform/projects-client/sessions.js +74 -0
- package/dist/platform/projects-client/sessions.js.map +1 -0
- package/dist/platform/projects-client/setup-links.d.ts +35 -0
- package/dist/platform/projects-client/setup-links.d.ts.map +1 -0
- package/dist/platform/projects-client/setup-links.js +24 -0
- package/dist/platform/projects-client/setup-links.js.map +1 -0
- package/dist/platform/projects-client/shared.d.ts +66 -0
- package/dist/platform/projects-client/shared.d.ts.map +1 -0
- package/dist/platform/projects-client/shared.js +44 -0
- package/dist/platform/projects-client/shared.js.map +1 -0
- package/dist/platform/projects-client/tokens.d.ts +77 -0
- package/dist/platform/projects-client/tokens.d.ts.map +1 -0
- package/dist/platform/projects-client/tokens.js +43 -0
- package/dist/platform/projects-client/tokens.js.map +1 -0
- package/dist/platform/projects-client/transcription.d.ts +5 -0
- package/dist/platform/projects-client/transcription.d.ts.map +1 -0
- package/dist/platform/projects-client/transcription.js +14 -0
- package/dist/platform/projects-client/transcription.js.map +1 -0
- package/dist/platform/projects-client/triggers.d.ts +102 -0
- package/dist/platform/projects-client/triggers.d.ts.map +1 -0
- package/dist/platform/projects-client/triggers.js +27 -0
- package/dist/platform/projects-client/triggers.js.map +1 -0
- package/dist/platform/session-id.d.ts +9 -0
- package/dist/platform/session-id.d.ts.map +1 -0
- package/dist/platform/session-id.js +23 -0
- package/dist/platform/session-id.js.map +1 -0
- package/dist/platform/storage/managed-storage.d.ts +97 -0
- package/dist/platform/storage/managed-storage.d.ts.map +1 -0
- package/dist/platform/storage/managed-storage.js +271 -0
- package/dist/platform/storage/managed-storage.js.map +1 -0
- package/dist/platform/strings.d.ts +12 -0
- package/dist/platform/strings.d.ts.map +1 -0
- package/dist/platform/strings.js +17 -0
- package/dist/platform/strings.js.map +1 -0
- package/dist/platform/ui.d.ts +11 -0
- package/dist/platform/ui.d.ts.map +1 -0
- package/dist/platform/ui.js +22 -0
- package/dist/platform/ui.js.map +1 -0
- package/dist/react/chat/index.d.ts +3 -0
- package/dist/react/chat/index.d.ts.map +1 -0
- package/dist/react/chat/index.js +7 -0
- package/dist/react/chat/index.js.map +1 -0
- package/dist/react/chat/render-parts.d.ts +39 -0
- package/dist/react/chat/render-parts.d.ts.map +1 -0
- package/dist/react/chat/render-parts.js +34 -0
- package/dist/react/chat/render-parts.js.map +1 -0
- package/dist/react/chat/use-chat-turns.d.ts +19 -0
- package/dist/react/chat/use-chat-turns.d.ts.map +1 -0
- package/dist/react/chat/use-chat-turns.js +27 -0
- package/dist/react/chat/use-chat-turns.js.map +1 -0
- package/dist/react/file-keys.d.ts +18 -0
- package/dist/react/file-keys.d.ts.map +1 -0
- package/dist/react/file-keys.js +18 -0
- package/dist/react/file-keys.js.map +1 -0
- package/dist/react/index.d.ts +12 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.js +49 -0
- package/dist/react/index.js.map +1 -0
- package/dist/react/model-flatten.d.ts +33 -0
- package/dist/react/model-flatten.d.ts.map +1 -0
- package/dist/react/model-flatten.js +59 -0
- package/dist/react/model-flatten.js.map +1 -0
- package/dist/react/opencode.d.ts +43 -0
- package/dist/react/opencode.d.ts.map +1 -0
- package/dist/react/opencode.js +100 -0
- package/dist/react/opencode.js.map +1 -0
- package/dist/react/prefetch-session-start.d.ts +10 -0
- package/dist/react/prefetch-session-start.d.ts.map +1 -0
- package/dist/react/prefetch-session-start.js +17 -0
- package/dist/react/prefetch-session-start.js.map +1 -0
- package/dist/react/provider-refresh.d.ts +7 -0
- package/dist/react/provider-refresh.d.ts.map +1 -0
- package/dist/react/provider-refresh.js +28 -0
- package/dist/react/provider-refresh.js.map +1 -0
- package/dist/react/provider-selection.d.ts +31 -0
- package/dist/react/provider-selection.d.ts.map +1 -0
- package/dist/react/provider-selection.js +135 -0
- package/dist/react/provider-selection.js.map +1 -0
- package/dist/react/route-project.d.ts +7 -0
- package/dist/react/route-project.d.ts.map +1 -0
- package/dist/react/route-project.js +19 -0
- package/dist/react/route-project.js.map +1 -0
- package/dist/react/session-start-stash.d.ts +56 -0
- package/dist/react/session-start-stash.d.ts.map +1 -0
- package/dist/react/session-start-stash.js +202 -0
- package/dist/react/session-start-stash.js.map +1 -0
- package/dist/react/use-canonical-opencode-session.d.ts +35 -0
- package/dist/react/use-canonical-opencode-session.d.ts.map +1 -0
- package/dist/react/use-canonical-opencode-session.js +52 -0
- package/dist/react/use-canonical-opencode-session.js.map +1 -0
- package/dist/react/use-change-requests.d.ts +321 -0
- package/dist/react/use-change-requests.d.ts.map +1 -0
- package/dist/react/use-change-requests.js +43 -0
- package/dist/react/use-change-requests.js.map +1 -0
- package/dist/react/use-current-runtime.d.ts +8 -0
- package/dist/react/use-current-runtime.d.ts.map +1 -0
- package/dist/react/use-current-runtime.js +12 -0
- package/dist/react/use-current-runtime.js.map +1 -0
- package/dist/react/use-gateway-catalog-sync.d.ts +2 -0
- package/dist/react/use-gateway-catalog-sync.d.ts.map +1 -0
- package/dist/react/use-gateway-catalog-sync.js +39 -0
- package/dist/react/use-gateway-catalog-sync.js.map +1 -0
- package/dist/react/use-kortix-master.d.ts +384 -0
- package/dist/react/use-kortix-master.d.ts.map +1 -0
- package/dist/react/use-kortix-master.js +958 -0
- package/dist/react/use-kortix-master.js.map +1 -0
- package/dist/react/use-model-store.d.ts +71 -0
- package/dist/react/use-model-store.d.ts.map +1 -0
- package/dist/react/use-model-store.js +411 -0
- package/dist/react/use-model-store.js.map +1 -0
- package/dist/react/use-opencode-config.d.ts +15 -0
- package/dist/react/use-opencode-config.d.ts.map +1 -0
- package/dist/react/use-opencode-config.js +79 -0
- package/dist/react/use-opencode-config.js.map +1 -0
- package/dist/react/use-opencode-events/diagnostics.d.ts +11 -0
- package/dist/react/use-opencode-events/diagnostics.d.ts.map +1 -0
- package/dist/react/use-opencode-events/diagnostics.js +58 -0
- package/dist/react/use-opencode-events/diagnostics.js.map +1 -0
- package/dist/react/use-opencode-events/handle-event.d.ts +20 -0
- package/dist/react/use-opencode-events/handle-event.d.ts.map +1 -0
- package/dist/react/use-opencode-events/handle-event.js +450 -0
- package/dist/react/use-opencode-events/handle-event.js.map +1 -0
- package/dist/react/use-opencode-events/helpers.d.ts +30 -0
- package/dist/react/use-opencode-events/helpers.d.ts.map +1 -0
- package/dist/react/use-opencode-events/helpers.js +93 -0
- package/dist/react/use-opencode-events/helpers.js.map +1 -0
- package/dist/react/use-opencode-events/index.d.ts +25 -0
- package/dist/react/use-opencode-events/index.d.ts.map +1 -0
- package/dist/react/use-opencode-events/index.js +242 -0
- package/dist/react/use-opencode-events/index.js.map +1 -0
- package/dist/react/use-opencode-events/types.d.ts +10 -0
- package/dist/react/use-opencode-events/types.d.ts.map +1 -0
- package/dist/react/use-opencode-events/types.js +2 -0
- package/dist/react/use-opencode-events/types.js.map +1 -0
- package/dist/react/use-opencode-events/use-event-stream-refs.d.ts +22 -0
- package/dist/react/use-opencode-events/use-event-stream-refs.d.ts.map +1 -0
- package/dist/react/use-opencode-events/use-event-stream-refs.js +158 -0
- package/dist/react/use-opencode-events/use-event-stream-refs.js.map +1 -0
- package/dist/react/use-opencode-local.d.ts +139 -0
- package/dist/react/use-opencode-local.d.ts.map +1 -0
- package/dist/react/use-opencode-local.js +484 -0
- package/dist/react/use-opencode-local.js.map +1 -0
- package/dist/react/use-opencode-mcp.d.ts +34 -0
- package/dist/react/use-opencode-mcp.d.ts.map +1 -0
- package/dist/react/use-opencode-mcp.js +190 -0
- package/dist/react/use-opencode-mcp.js.map +1 -0
- package/dist/react/use-opencode-pty.d.ts +30 -0
- package/dist/react/use-opencode-pty.d.ts.map +1 -0
- package/dist/react/use-opencode-pty.js +126 -0
- package/dist/react/use-opencode-pty.js.map +1 -0
- package/dist/react/use-opencode-sessions/agents.d.ts +14 -0
- package/dist/react/use-opencode-sessions/agents.d.ts.map +1 -0
- package/dist/react/use-opencode-sessions/agents.js +82 -0
- package/dist/react/use-opencode-sessions/agents.js.map +1 -0
- package/dist/react/use-opencode-sessions/commands.d.ts +8 -0
- package/dist/react/use-opencode-sessions/commands.d.ts.map +1 -0
- package/dist/react/use-opencode-sessions/commands.js +46 -0
- package/dist/react/use-opencode-sessions/commands.js.map +1 -0
- package/dist/react/use-opencode-sessions/files.d.ts +2 -0
- package/dist/react/use-opencode-sessions/files.d.ts.map +1 -0
- package/dist/react/use-opencode-sessions/files.js +181 -0
- package/dist/react/use-opencode-sessions/files.js.map +1 -0
- package/dist/react/use-opencode-sessions/index.d.ts +15 -0
- package/dist/react/use-opencode-sessions/index.d.ts.map +1 -0
- package/dist/react/use-opencode-sessions/index.js +21 -0
- package/dist/react/use-opencode-sessions/index.js.map +1 -0
- package/dist/react/use-opencode-sessions/keys.d.ts +94 -0
- package/dist/react/use-opencode-sessions/keys.d.ts.map +1 -0
- package/dist/react/use-opencode-sessions/keys.js +39 -0
- package/dist/react/use-opencode-sessions/keys.js.map +1 -0
- package/dist/react/use-opencode-sessions/mcp.d.ts +3 -0
- package/dist/react/use-opencode-sessions/mcp.d.ts.map +1 -0
- package/dist/react/use-opencode-sessions/mcp.js +23 -0
- package/dist/react/use-opencode-sessions/mcp.js.map +1 -0
- package/dist/react/use-opencode-sessions/messages.d.ts +75 -0
- package/dist/react/use-opencode-sessions/messages.d.ts.map +1 -0
- package/dist/react/use-opencode-sessions/messages.js +319 -0
- package/dist/react/use-opencode-sessions/messages.js.map +1 -0
- package/dist/react/use-opencode-sessions/parts.d.ts +23 -0
- package/dist/react/use-opencode-sessions/parts.d.ts.map +1 -0
- package/dist/react/use-opencode-sessions/parts.js +49 -0
- package/dist/react/use-opencode-sessions/parts.js.map +1 -0
- package/dist/react/use-opencode-sessions/permissions.d.ts +17 -0
- package/dist/react/use-opencode-sessions/permissions.d.ts.map +1 -0
- package/dist/react/use-opencode-sessions/permissions.js +66 -0
- package/dist/react/use-opencode-sessions/permissions.js.map +1 -0
- package/dist/react/use-opencode-sessions/projects.d.ts +5 -0
- package/dist/react/use-opencode-sessions/projects.d.ts.map +1 -0
- package/dist/react/use-opencode-sessions/projects.js +54 -0
- package/dist/react/use-opencode-sessions/projects.js.map +1 -0
- package/dist/react/use-opencode-sessions/providers.d.ts +10 -0
- package/dist/react/use-opencode-sessions/providers.d.ts.map +1 -0
- package/dist/react/use-opencode-sessions/providers.js +98 -0
- package/dist/react/use-opencode-sessions/providers.js.map +1 -0
- package/dist/react/use-opencode-sessions/sessions.d.ts +35 -0
- package/dist/react/use-opencode-sessions/sessions.d.ts.map +1 -0
- package/dist/react/use-opencode-sessions/sessions.js +380 -0
- package/dist/react/use-opencode-sessions/sessions.js.map +1 -0
- package/dist/react/use-opencode-sessions/shared.d.ts +43 -0
- package/dist/react/use-opencode-sessions/shared.d.ts.map +1 -0
- package/dist/react/use-opencode-sessions/shared.js +109 -0
- package/dist/react/use-opencode-sessions/shared.js.map +1 -0
- package/dist/react/use-opencode-sessions/sharing.d.ts +4 -0
- package/dist/react/use-opencode-sessions/sharing.d.ts.map +1 -0
- package/dist/react/use-opencode-sessions/sharing.js +57 -0
- package/dist/react/use-opencode-sessions/sharing.js.map +1 -0
- package/dist/react/use-opencode-sessions/tools.d.ts +5 -0
- package/dist/react/use-opencode-sessions/tools.d.ts.map +1 -0
- package/dist/react/use-opencode-sessions/tools.js +54 -0
- package/dist/react/use-opencode-sessions/tools.js.map +1 -0
- package/dist/react/use-permission-self-heal.d.ts +45 -0
- package/dist/react/use-permission-self-heal.d.ts.map +1 -0
- package/dist/react/use-permission-self-heal.js +144 -0
- package/dist/react/use-permission-self-heal.js.map +1 -0
- package/dist/react/use-project-config.d.ts +11 -0
- package/dist/react/use-project-config.d.ts.map +1 -0
- package/dist/react/use-project-config.js +22 -0
- package/dist/react/use-project-config.js.map +1 -0
- package/dist/react/use-project-models.d.ts +11 -0
- package/dist/react/use-project-models.d.ts.map +1 -0
- package/dist/react/use-project-models.js +25 -0
- package/dist/react/use-project-models.js.map +1 -0
- package/dist/react/use-project-secrets.d.ts +265 -0
- package/dist/react/use-project-secrets.d.ts.map +1 -0
- package/dist/react/use-project-secrets.js +41 -0
- package/dist/react/use-project-secrets.js.map +1 -0
- package/dist/react/use-project-triggers.d.ts +228 -0
- package/dist/react/use-project-triggers.d.ts.map +1 -0
- package/dist/react/use-project-triggers.js +42 -0
- package/dist/react/use-project-triggers.js.map +1 -0
- package/dist/react/use-question-self-heal.d.ts +36 -0
- package/dist/react/use-question-self-heal.d.ts.map +1 -0
- package/dist/react/use-question-self-heal.js +95 -0
- package/dist/react/use-question-self-heal.js.map +1 -0
- package/dist/react/use-runtime-phase.d.ts +9 -0
- package/dist/react/use-runtime-phase.d.ts.map +1 -0
- package/dist/react/use-runtime-phase.js +20 -0
- package/dist/react/use-runtime-phase.js.map +1 -0
- package/dist/react/use-runtime-reconnect.d.ts +90 -0
- package/dist/react/use-runtime-reconnect.d.ts.map +1 -0
- package/dist/react/use-runtime-reconnect.js +234 -0
- package/dist/react/use-runtime-reconnect.js.map +1 -0
- package/dist/react/use-session-picks.d.ts +17 -0
- package/dist/react/use-session-picks.d.ts.map +1 -0
- package/dist/react/use-session-picks.js +36 -0
- package/dist/react/use-session-picks.js.map +1 -0
- package/dist/react/use-session-prefetch.d.ts +18 -0
- package/dist/react/use-session-prefetch.d.ts.map +1 -0
- package/dist/react/use-session-prefetch.js +84 -0
- package/dist/react/use-session-prefetch.js.map +1 -0
- package/dist/react/use-session-send.d.ts +183 -0
- package/dist/react/use-session-send.d.ts.map +1 -0
- package/dist/react/use-session-send.js +287 -0
- package/dist/react/use-session-send.js.map +1 -0
- package/dist/react/use-session-sync.d.ts +24 -0
- package/dist/react/use-session-sync.d.ts.map +1 -0
- package/dist/react/use-session-sync.js +375 -0
- package/dist/react/use-session-sync.js.map +1 -0
- package/dist/react/use-session.d.ts +171 -0
- package/dist/react/use-session.d.ts.map +1 -0
- package/dist/react/use-session.js +396 -0
- package/dist/react/use-session.js.map +1 -0
- package/dist/react/use-visible-agents.d.ts +22 -0
- package/dist/react/use-visible-agents.d.ts.map +1 -0
- package/dist/react/use-visible-agents.js +45 -0
- package/dist/react/use-visible-agents.js.map +1 -0
- package/dist/server.d.ts +55 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +122 -0
- package/dist/server.js.map +1 -0
- package/dist/session/health.d.ts +49 -0
- package/dist/session/health.d.ts.map +1 -0
- package/dist/session/health.js +57 -0
- package/dist/session/health.js.map +1 -0
- package/dist/session/index.d.ts +19 -0
- package/dist/session/index.d.ts.map +1 -0
- package/dist/session/index.js +19 -0
- package/dist/session/index.js.map +1 -0
- package/dist/session/preview.d.ts +24 -0
- package/dist/session/preview.d.ts.map +1 -0
- package/dist/session/preview.js +85 -0
- package/dist/session/preview.js.map +1 -0
- package/dist/session/url.d.ts +160 -0
- package/dist/session/url.d.ts.map +1 -0
- package/dist/session/url.js +522 -0
- package/dist/session/url.js.map +1 -0
- package/dist/state/chat-events.d.ts +141 -0
- package/dist/state/chat-events.d.ts.map +1 -0
- package/dist/state/chat-events.js +135 -0
- package/dist/state/chat-events.js.map +1 -0
- package/dist/state/current-runtime.d.ts +44 -0
- package/dist/state/current-runtime.d.ts.map +1 -0
- package/dist/state/current-runtime.js +44 -0
- package/dist/state/current-runtime.js.map +1 -0
- package/dist/state/diagnostics-store.d.ts +114 -0
- package/dist/state/diagnostics-store.d.ts.map +1 -0
- package/dist/state/diagnostics-store.js +319 -0
- package/dist/state/diagnostics-store.js.map +1 -0
- package/dist/state/event-stream.d.ts +134 -0
- package/dist/state/event-stream.d.ts.map +1 -0
- package/dist/state/event-stream.js +424 -0
- package/dist/state/event-stream.js.map +1 -0
- package/dist/state/idb-sync-cache.d.ts +18 -0
- package/dist/state/idb-sync-cache.d.ts.map +1 -0
- package/dist/state/idb-sync-cache.js +209 -0
- package/dist/state/idb-sync-cache.js.map +1 -0
- package/dist/state/opencode-compaction-store.d.ts +10 -0
- package/dist/state/opencode-compaction-store.d.ts.map +1 -0
- package/dist/state/opencode-compaction-store.js +32 -0
- package/dist/state/opencode-compaction-store.js.map +1 -0
- package/dist/state/opencode-pending-store.d.ts +19 -0
- package/dist/state/opencode-pending-store.d.ts.map +1 -0
- package/dist/state/opencode-pending-store.js +76 -0
- package/dist/state/opencode-pending-store.js.map +1 -0
- package/dist/state/sandbox-connection-store.d.ts +62 -0
- package/dist/state/sandbox-connection-store.d.ts.map +1 -0
- package/dist/state/sandbox-connection-store.js +290 -0
- package/dist/state/sandbox-connection-store.js.map +1 -0
- package/dist/state/server-store/active.d.ts +49 -0
- package/dist/state/server-store/active.d.ts.map +1 -0
- package/dist/state/server-store/active.js +76 -0
- package/dist/state/server-store/active.js.map +1 -0
- package/dist/state/server-store/types.d.ts +12 -0
- package/dist/state/server-store/types.d.ts.map +1 -0
- package/dist/state/server-store/types.js +2 -0
- package/dist/state/server-store/types.js.map +1 -0
- package/dist/state/server-store/url-helpers.d.ts +33 -0
- package/dist/state/server-store/url-helpers.d.ts.map +1 -0
- package/dist/state/server-store/url-helpers.js +55 -0
- package/dist/state/server-store/url-helpers.js.map +1 -0
- package/dist/state/server-store.d.ts +18 -0
- package/dist/state/server-store.d.ts.map +1 -0
- package/dist/state/server-store.js +23 -0
- package/dist/state/server-store.js.map +1 -0
- package/dist/state/session-runtime-registry.d.ts +49 -0
- package/dist/state/session-runtime-registry.d.ts.map +1 -0
- package/dist/state/session-runtime-registry.js +85 -0
- package/dist/state/session-runtime-registry.js.map +1 -0
- package/dist/state/sync-store/ascending-id.d.ts +2 -0
- package/dist/state/sync-store/ascending-id.d.ts.map +1 -0
- package/dist/state/sync-store/ascending-id.js +21 -0
- package/dist/state/sync-store/ascending-id.js.map +1 -0
- package/dist/state/sync-store/binary.d.ts +7 -0
- package/dist/state/sync-store/binary.d.ts.map +1 -0
- package/dist/state/sync-store/binary.js +21 -0
- package/dist/state/sync-store/binary.js.map +1 -0
- package/dist/state/sync-store/stream-cache.d.ts +2 -0
- package/dist/state/sync-store/stream-cache.d.ts.map +1 -0
- package/dist/state/sync-store/stream-cache.js +29 -0
- package/dist/state/sync-store/stream-cache.js.map +1 -0
- package/dist/state/sync-store/types.d.ts +29 -0
- package/dist/state/sync-store/types.d.ts.map +1 -0
- package/dist/state/sync-store/types.js +2 -0
- package/dist/state/sync-store/types.js.map +1 -0
- package/dist/state/sync-store.d.ts +39 -0
- package/dist/state/sync-store.d.ts.map +1 -0
- package/dist/state/sync-store.js +692 -0
- package/dist/state/sync-store.js.map +1 -0
- package/dist/state/tab-store.d.ts +91 -0
- package/dist/state/tab-store.d.ts.map +1 -0
- package/dist/state/tab-store.js +369 -0
- package/dist/state/tab-store.js.map +1 -0
- package/dist/transcript.d.ts +40 -0
- package/dist/transcript.d.ts.map +1 -0
- package/dist/transcript.js +126 -0
- package/dist/transcript.js.map +1 -0
- package/dist/turns/classify.d.ts +166 -0
- package/dist/turns/classify.d.ts.map +1 -0
- package/dist/turns/classify.js +259 -0
- package/dist/turns/classify.js.map +1 -0
- package/dist/turns/errors.d.ts +11 -0
- package/dist/turns/errors.d.ts.map +1 -0
- package/dist/turns/errors.js +85 -0
- package/dist/turns/errors.js.map +1 -0
- package/dist/turns/index.d.ts +264 -0
- package/dist/turns/index.d.ts.map +1 -0
- package/dist/turns/index.js +1243 -0
- package/dist/turns/index.js.map +1 -0
- package/dist/turns/tool-registry.d.ts +33 -0
- package/dist/turns/tool-registry.d.ts.map +1 -0
- package/dist/turns/tool-registry.js +108 -0
- package/dist/turns/tool-registry.js.map +1 -0
- package/dist/turns/types.d.ts +125 -0
- package/dist/turns/types.d.ts.map +1 -0
- package/dist/turns/types.js +12 -0
- package/dist/turns/types.js.map +1 -0
- package/dist/turns/view-model.d.ts +127 -0
- package/dist/turns/view-model.d.ts.map +1 -0
- package/dist/turns/view-model.js +401 -0
- package/dist/turns/view-model.js.map +1 -0
- package/package.json +155 -0
|
@@ -0,0 +1,424 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Framework-free SSE event-stream machine, extracted verbatim (same constants,
|
|
3
|
+
* same branch order, same semantics) from the connect/reconnect loop that used
|
|
4
|
+
* to live inline inside `react/use-opencode-events/index.ts`'s `useEffect`.
|
|
5
|
+
*
|
|
6
|
+
* Zero imports of `react`, `react-query`, or any `react/*` module — this file
|
|
7
|
+
* can run in any JS host (a worker, a CLI, a non-React UI). Everything that
|
|
8
|
+
* depended on React Query in the original hook (cache writes, toasts, ref
|
|
9
|
+
* lookups) stays in the React wrapper and reaches this module only through the
|
|
10
|
+
* injected `onEvent` / `onGapRehydrate` callbacks.
|
|
11
|
+
*
|
|
12
|
+
* Owns: connecting to the opencode SSE endpoint (with a connect timeout), the
|
|
13
|
+
* idle heartbeat watchdog, event coalescing + 16ms flush batching, gap
|
|
14
|
+
* detection on reconnect, the exponential-backoff reconnect loop (fast 250ms
|
|
15
|
+
* resume after an eventful stream, capped exponential backoff otherwise), and
|
|
16
|
+
* the give-up "parked" terminal state for streams pointed at dead sandboxes
|
|
17
|
+
* (see `maxConsecutiveHardFailures`/`onParked`).
|
|
18
|
+
*/
|
|
19
|
+
import { getSupabaseAccessToken, invalidateTokenCache } from '../platform/auth.js';
|
|
20
|
+
import { logger } from '../platform/logger.js';
|
|
21
|
+
const realTimers = {
|
|
22
|
+
now: () => Date.now(),
|
|
23
|
+
setTimeout: (handler, timeoutMs) => setTimeout(handler, timeoutMs),
|
|
24
|
+
clearTimeout: (handle) => clearTimeout(handle),
|
|
25
|
+
};
|
|
26
|
+
// ---- Tunables ----
|
|
27
|
+
const COALESCE_FLUSH_MS = 16;
|
|
28
|
+
const YIELD_INTERVAL_MS = 8;
|
|
29
|
+
/**
|
|
30
|
+
* Idle watchdog budget for an ESTABLISHED stream. The server currently emits
|
|
31
|
+
* NO idle keepalive frames, so a healthy-but-quiet session produces genuinely
|
|
32
|
+
* long silent stretches — a budget below the real idle gap makes the watchdog
|
|
33
|
+
* kill perfectly healthy connections on a timer (the old 15s value guaranteed
|
|
34
|
+
* a kill every 15s of quiet, by design). 60s keeps the watchdog able to catch
|
|
35
|
+
* genuinely dead sockets while tolerating normal idle. When the server ships
|
|
36
|
+
* `: keepalive` comment frames this can come back down toward 2× the
|
|
37
|
+
* keepalive cadence. Configurable per-stream via
|
|
38
|
+
* `OpenEventStreamOptions.heartbeatTimeoutMs`.
|
|
39
|
+
*/
|
|
40
|
+
const HEARTBEAT_MS = 60_000;
|
|
41
|
+
const GAP_REHYDRATE_MS = 5_000;
|
|
42
|
+
const FAST_RECONNECT_DELAY_MS = 250;
|
|
43
|
+
const BASE_RECONNECT_DELAY_MS = 1000;
|
|
44
|
+
const MAX_RECONNECT_DELAY_MS = 30_000;
|
|
45
|
+
const MAX_BACKOFF_EXPONENT = 5;
|
|
46
|
+
const SSE_DEFAULT_RETRY_DELAY_MS = 3000;
|
|
47
|
+
const SSE_MAX_RETRY_DELAY_MS = 30_000;
|
|
48
|
+
const CONNECT_TIMEOUT_MS = 20_000;
|
|
49
|
+
/** An event-less attempt that dies faster than this is a "hard failure" —
|
|
50
|
+
* the fast-503 signature of a dead sandbox — even when the error carries no
|
|
51
|
+
* HTTP status (edge-generated failures surface as opaque network/CORS
|
|
52
|
+
* errors). See `maxConsecutiveHardFailures`. */
|
|
53
|
+
const HARD_FAILURE_WINDOW_MS = 2_000;
|
|
54
|
+
const MAX_CONSECUTIVE_HARD_FAILURES = 8;
|
|
55
|
+
/**
|
|
56
|
+
* Coalescing keys — determines which events can replace earlier ones in the
|
|
57
|
+
* same 16ms flush batch.
|
|
58
|
+
*
|
|
59
|
+
* NOTE: message.part.updated is intentionally NOT coalesced. While the server
|
|
60
|
+
* sends full part state each time, coalescing can cause a stale snapshot to be
|
|
61
|
+
* the sole survivor of a batch. When that stale snapshot is processed before
|
|
62
|
+
* any deltas, it inserts the part with wrong/partial text (prefix-growth guard
|
|
63
|
+
* can't help — nothing to compare against). The upsertPart prefix-growth guard
|
|
64
|
+
* efficiently rejects stale snapshots with a no-op return, so processing every
|
|
65
|
+
* snapshot has minimal cost.
|
|
66
|
+
*/
|
|
67
|
+
function getCoalesceKey(event) {
|
|
68
|
+
if (event.type === 'session.status') {
|
|
69
|
+
return `session.status:${event.properties.sessionID}`;
|
|
70
|
+
}
|
|
71
|
+
if (event.type === 'lsp.updated')
|
|
72
|
+
return 'lsp.updated';
|
|
73
|
+
return undefined;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* A promise that resolves the moment `signal` fires 'abort' (or immediately,
|
|
77
|
+
* if it's already aborted), plus a `cleanup` to remove the listener when it
|
|
78
|
+
* loses a race. Used to make an in-flight `iterator.next()` read abortable:
|
|
79
|
+
* without this, a parked read (server stops sending, no error, no close)
|
|
80
|
+
* would never let a fired heartbeat/abort be observed, since nothing wakes
|
|
81
|
+
* the pending read.
|
|
82
|
+
*/
|
|
83
|
+
function onceAborted(signal) {
|
|
84
|
+
if (signal.aborted)
|
|
85
|
+
return { promise: Promise.resolve(), cleanup: () => { } };
|
|
86
|
+
let handler = () => { };
|
|
87
|
+
const promise = new Promise((resolve) => {
|
|
88
|
+
handler = () => resolve();
|
|
89
|
+
signal.addEventListener('abort', handler, { once: true });
|
|
90
|
+
});
|
|
91
|
+
return { promise, cleanup: () => signal.removeEventListener('abort', handler) };
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Connects to the opencode SSE event stream and keeps it alive: heartbeat
|
|
95
|
+
* watchdog, event coalescing + batched flush, gap-triggered rehydrate signal,
|
|
96
|
+
* and exponential-backoff reconnect. Framework-free — safe to call from any
|
|
97
|
+
* host (the React wrapper calls this once per effect run; a non-React host can
|
|
98
|
+
* call it directly).
|
|
99
|
+
*/
|
|
100
|
+
export function openEventStream(opts) {
|
|
101
|
+
const { client, onEvent, onGapRehydrate, onParked, signal: externalSignal } = opts;
|
|
102
|
+
const t = opts.timers ?? realTimers;
|
|
103
|
+
const connectTimeoutMs = opts.connectTimeoutMs ?? CONNECT_TIMEOUT_MS;
|
|
104
|
+
const heartbeatTimeoutMs = opts.heartbeatTimeoutMs ?? HEARTBEAT_MS;
|
|
105
|
+
const maxConsecutiveHardFailures = opts.maxConsecutiveHardFailures ?? MAX_CONSECUTIVE_HARD_FAILURES;
|
|
106
|
+
const abortController = new AbortController();
|
|
107
|
+
const onExternalAbort = () => abortController.abort();
|
|
108
|
+
if (externalSignal) {
|
|
109
|
+
if (externalSignal.aborted)
|
|
110
|
+
abortController.abort();
|
|
111
|
+
else
|
|
112
|
+
externalSignal.addEventListener('abort', onExternalAbort, { once: true });
|
|
113
|
+
}
|
|
114
|
+
// Track last stream activity (connect or event) to gate reconnect hydration.
|
|
115
|
+
// Using only "last event" causes hydrate storms when the server rotates
|
|
116
|
+
// idle SSE connections that carried no events.
|
|
117
|
+
let lastStreamActivityTime = t.now();
|
|
118
|
+
// Event coalescing queue (like the SolidJS reference)
|
|
119
|
+
let queue = [];
|
|
120
|
+
let flushTimer;
|
|
121
|
+
let lastFlush = 0;
|
|
122
|
+
// Coalescing map — replaces earlier events of the same key
|
|
123
|
+
const coalesced = new Map();
|
|
124
|
+
const flush = () => {
|
|
125
|
+
if (flushTimer)
|
|
126
|
+
t.clearTimeout(flushTimer);
|
|
127
|
+
flushTimer = undefined;
|
|
128
|
+
if (queue.length === 0)
|
|
129
|
+
return;
|
|
130
|
+
const events = queue;
|
|
131
|
+
queue = [];
|
|
132
|
+
coalesced.clear();
|
|
133
|
+
lastFlush = t.now();
|
|
134
|
+
lastStreamActivityTime = t.now();
|
|
135
|
+
for (const item of events) {
|
|
136
|
+
if (!item)
|
|
137
|
+
continue;
|
|
138
|
+
try {
|
|
139
|
+
onEvent(item.event);
|
|
140
|
+
}
|
|
141
|
+
catch (e) {
|
|
142
|
+
// A single event handler must never break the stream OR crash the
|
|
143
|
+
// host. e.g. a handler calls getClient() before the sandbox URL is
|
|
144
|
+
// pinned (during a session switch) — that throw used to escape to the
|
|
145
|
+
// route error boundary. Swallow + log; the next events + retries
|
|
146
|
+
// recover.
|
|
147
|
+
console.warn('[opencode-events] event handler threw, skipping', e);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
};
|
|
151
|
+
const schedule = () => {
|
|
152
|
+
if (flushTimer)
|
|
153
|
+
return;
|
|
154
|
+
const elapsed = t.now() - lastFlush;
|
|
155
|
+
flushTimer = t.setTimeout(flush, Math.max(0, COALESCE_FLUSH_MS - elapsed));
|
|
156
|
+
};
|
|
157
|
+
// Consume the stream in the background with automatic retry
|
|
158
|
+
(async () => {
|
|
159
|
+
let retryCount = 0;
|
|
160
|
+
// Consecutive hard-failure streak — see `maxConsecutiveHardFailures`.
|
|
161
|
+
// Survives across attempts; reset by any attempt that delivered events
|
|
162
|
+
// or that failed slowly without an HTTP status.
|
|
163
|
+
let consecutiveHardFailures = 0;
|
|
164
|
+
while (!abortController.signal.aborted) {
|
|
165
|
+
let streamHadEvents = false;
|
|
166
|
+
let stableConnection = false;
|
|
167
|
+
let heartbeatTimer;
|
|
168
|
+
let connectTimer;
|
|
169
|
+
// What this attempt died to (null = clean end), plus when it started —
|
|
170
|
+
// both feed the hard-failure classification below the try block.
|
|
171
|
+
let attemptError = null;
|
|
172
|
+
const attemptStartedAt = t.now();
|
|
173
|
+
// Per-attempt controller passed to the SSE client. Aborting it is what
|
|
174
|
+
// actually cancels the underlying network reader — the vendor client
|
|
175
|
+
// only cancels on the signal IT was handed. It aborts when EITHER the
|
|
176
|
+
// heartbeat fires OR the outer controller aborts (linked below), so a
|
|
177
|
+
// heartbeat-forced reconnect tears the old connection down instead of
|
|
178
|
+
// leaving it parked/leaking while a new one opens.
|
|
179
|
+
const attemptAbort = new AbortController();
|
|
180
|
+
const outerLink = onceAborted(abortController.signal);
|
|
181
|
+
outerLink.promise.then(() => attemptAbort.abort());
|
|
182
|
+
try {
|
|
183
|
+
// Race the connect call itself against `connectTimeoutMs`. A
|
|
184
|
+
// black-holed proxy can swallow this request with no error, no data,
|
|
185
|
+
// and no close — the heartbeat watchdog below only starts once this
|
|
186
|
+
// resolves, so it can't rescue a hung connect. On timeout, abort this
|
|
187
|
+
// attempt (cancels the underlying request, same as any other
|
|
188
|
+
// reconnect) and reject so it falls into the catch block below and
|
|
189
|
+
// retries through the normal backoff path, exactly like any other
|
|
190
|
+
// connect failure.
|
|
191
|
+
const result = await new Promise((resolve, reject) => {
|
|
192
|
+
let settled = false;
|
|
193
|
+
connectTimer = t.setTimeout(() => {
|
|
194
|
+
if (settled)
|
|
195
|
+
return;
|
|
196
|
+
settled = true;
|
|
197
|
+
logger.warn('SSE connect timed out, forcing reconnect', { connectTimeoutMs });
|
|
198
|
+
attemptAbort.abort();
|
|
199
|
+
reject(new Error(`SSE connect timed out after ${connectTimeoutMs}ms`));
|
|
200
|
+
}, connectTimeoutMs);
|
|
201
|
+
client.global
|
|
202
|
+
.event({
|
|
203
|
+
signal: attemptAbort.signal,
|
|
204
|
+
sseDefaultRetryDelay: SSE_DEFAULT_RETRY_DELAY_MS,
|
|
205
|
+
sseMaxRetryDelay: SSE_MAX_RETRY_DELAY_MS,
|
|
206
|
+
})
|
|
207
|
+
.then((value) => {
|
|
208
|
+
if (settled)
|
|
209
|
+
return;
|
|
210
|
+
settled = true;
|
|
211
|
+
t.clearTimeout(connectTimer);
|
|
212
|
+
resolve(value);
|
|
213
|
+
}, (err) => {
|
|
214
|
+
if (settled)
|
|
215
|
+
return;
|
|
216
|
+
settled = true;
|
|
217
|
+
t.clearTimeout(connectTimer);
|
|
218
|
+
reject(err);
|
|
219
|
+
});
|
|
220
|
+
});
|
|
221
|
+
const { stream } = result;
|
|
222
|
+
lastStreamActivityTime = t.now();
|
|
223
|
+
// Heartbeat timeout — if no events arrive within the idle budget
|
|
224
|
+
// (default 60s, see HEARTBEAT_MS for why), abort and reconnect. This
|
|
225
|
+
// is the ONLY recovery mechanism we need on an established stream —
|
|
226
|
+
// replaces the stall watchdog, reconciler, and visibility handler.
|
|
227
|
+
const resetHeartbeat = () => {
|
|
228
|
+
t.clearTimeout(heartbeatTimer);
|
|
229
|
+
heartbeatTimer = t.setTimeout(() => {
|
|
230
|
+
logger.warn('SSE heartbeat timeout, forcing reconnect');
|
|
231
|
+
attemptAbort.abort();
|
|
232
|
+
}, heartbeatTimeoutMs);
|
|
233
|
+
};
|
|
234
|
+
resetHeartbeat();
|
|
235
|
+
// Consume stream: queue + coalesce + 16ms flush + yield every 8ms.
|
|
236
|
+
//
|
|
237
|
+
// The read itself has to be abortable, not just checked between
|
|
238
|
+
// reads. If the underlying `.next()` parks (server stops sending, no
|
|
239
|
+
// error, no close), a plain `for await` never yields control back to
|
|
240
|
+
// this loop body, so a heartbeat/abort that fires while parked would
|
|
241
|
+
// never actually be observed. Race each read against the
|
|
242
|
+
// heartbeat/abort signals instead — whichever settles first wins.
|
|
243
|
+
let yieldedAt = t.now();
|
|
244
|
+
const iterator = stream[Symbol.asyncIterator]();
|
|
245
|
+
while (!attemptAbort.signal.aborted) {
|
|
246
|
+
const nextOutcome = iterator.next().then((result) => ({ kind: 'next', result }), (error) => ({ kind: 'error', error }));
|
|
247
|
+
const abortWatch = onceAborted(attemptAbort.signal);
|
|
248
|
+
const outcome = await Promise.race([
|
|
249
|
+
nextOutcome,
|
|
250
|
+
abortWatch.promise.then(() => ({ kind: 'aborted' })),
|
|
251
|
+
]);
|
|
252
|
+
abortWatch.cleanup();
|
|
253
|
+
if (outcome.kind === 'aborted')
|
|
254
|
+
break;
|
|
255
|
+
if (outcome.kind === 'error')
|
|
256
|
+
throw outcome.error;
|
|
257
|
+
if (outcome.result.done)
|
|
258
|
+
break;
|
|
259
|
+
streamHadEvents = true;
|
|
260
|
+
resetHeartbeat();
|
|
261
|
+
const raw = outcome.result.value;
|
|
262
|
+
const e = (raw && typeof raw === 'object' && 'payload' in raw ? raw.payload : raw);
|
|
263
|
+
if (!e?.type)
|
|
264
|
+
continue;
|
|
265
|
+
const ck = getCoalesceKey(e);
|
|
266
|
+
if (ck) {
|
|
267
|
+
const existing = coalesced.get(ck);
|
|
268
|
+
if (existing !== undefined) {
|
|
269
|
+
queue[existing] = undefined;
|
|
270
|
+
}
|
|
271
|
+
coalesced.set(ck, queue.length);
|
|
272
|
+
}
|
|
273
|
+
queue.push({ type: e.type, event: e });
|
|
274
|
+
schedule();
|
|
275
|
+
if (t.now() - yieldedAt < YIELD_INTERVAL_MS)
|
|
276
|
+
continue;
|
|
277
|
+
yieldedAt = t.now();
|
|
278
|
+
await new Promise((resolve) => t.setTimeout(resolve, 0));
|
|
279
|
+
}
|
|
280
|
+
// Healthy stream ONLY if it actually delivered events. There used to
|
|
281
|
+
// be a time-based OR-branch here ("or stayed open >10s") — that was a
|
|
282
|
+
// prod reconnect storm: anything that kills idle connections on a
|
|
283
|
+
// period ABOVE that threshold (our own heartbeat watchdog, an idle
|
|
284
|
+
// proxy timeout, server-side rotation) made every idle disconnect
|
|
285
|
+
// look "stable", which reset retryCount and locked the loop into the
|
|
286
|
+
// 250ms fast-reconnect path forever (~236 reconnects/hour/stream).
|
|
287
|
+
// An idle disconnect — watchdog-triggered or natural — must ride the
|
|
288
|
+
// exponential backoff (1s → 30s cap) instead; the moment a
|
|
289
|
+
// reconnected stream delivers a real event, backoff resets and the
|
|
290
|
+
// fast path returns. Missed-while-waiting events are covered by the
|
|
291
|
+
// gap-rehydrate signal below.
|
|
292
|
+
stableConnection = streamHadEvents;
|
|
293
|
+
}
|
|
294
|
+
catch (err) {
|
|
295
|
+
if (abortController.signal.aborted)
|
|
296
|
+
break;
|
|
297
|
+
attemptError = err;
|
|
298
|
+
const errStr = String(err);
|
|
299
|
+
const isAuthError = errStr.includes('401') ||
|
|
300
|
+
errStr.includes('403') ||
|
|
301
|
+
errStr.includes('Unauthorized') ||
|
|
302
|
+
errStr.includes('Token refresh failed');
|
|
303
|
+
logger.error('SSE event stream error', {
|
|
304
|
+
error: errStr,
|
|
305
|
+
retryCount,
|
|
306
|
+
isAuthError,
|
|
307
|
+
});
|
|
308
|
+
// On auth errors, invalidate the token cache and fetch a fresh token.
|
|
309
|
+
// This ensures all callers (SSE, health check, SDK) immediately use
|
|
310
|
+
// the refreshed token instead of serving stale cached ones for 30s.
|
|
311
|
+
if (isAuthError) {
|
|
312
|
+
try {
|
|
313
|
+
invalidateTokenCache();
|
|
314
|
+
await getSupabaseAccessToken();
|
|
315
|
+
logger.info('SSE: refreshed auth token after auth error');
|
|
316
|
+
}
|
|
317
|
+
catch (refreshErr) {
|
|
318
|
+
logger.error('SSE: failed to refresh auth token', {
|
|
319
|
+
error: String(refreshErr),
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
finally {
|
|
325
|
+
t.clearTimeout(heartbeatTimer);
|
|
326
|
+
t.clearTimeout(connectTimer);
|
|
327
|
+
// Release the reader/connection if we left the loop for any reason
|
|
328
|
+
// other than an already-fired abort (e.g. stream `done`, or a thrown
|
|
329
|
+
// error), and detach the outer-abort listener so it can't accumulate
|
|
330
|
+
// across reconnects.
|
|
331
|
+
attemptAbort.abort();
|
|
332
|
+
outerLink.cleanup();
|
|
333
|
+
flush();
|
|
334
|
+
}
|
|
335
|
+
// Stream ended or errored — reconnect with exponential backoff.
|
|
336
|
+
// ERR_INCOMPLETE_CHUNKED_ENCODING is normal when the server closes the
|
|
337
|
+
// SSE connection between response cycles. Minimum 1s delay even on
|
|
338
|
+
// first retry to avoid reconnection storms when the server is flapping
|
|
339
|
+
// (connect → immediate disconnect loops).
|
|
340
|
+
if (abortController.signal.aborted)
|
|
341
|
+
break;
|
|
342
|
+
// ── Give-up (park) check — the "dead sandbox" terminal state. ────────
|
|
343
|
+
// A stream pointed at an archived/stopped session's sandbox otherwise
|
|
344
|
+
// retries FOREVER: the proxy 503s every `/global/event` connect, and
|
|
345
|
+
// prod showed continuous 503 loops from several dead sandboxes at once.
|
|
346
|
+
// Classify this attempt: a HARD failure delivered zero events AND
|
|
347
|
+
// either carried an HTTP-level status (the vendor client wraps non-2xx
|
|
348
|
+
// as `Error` with `cause: { status }` — see @opencode-ai/sdk's
|
|
349
|
+
// error-interceptor) or died within HARD_FAILURE_WINDOW_MS (edge 503s
|
|
350
|
+
// surface as opaque network/CORS errors with no status attached).
|
|
351
|
+
// Slow failures without a status (a black-holed connect that hit the
|
|
352
|
+
// 20s connect timeout) and anything that streamed a real event reset
|
|
353
|
+
// the streak. After `maxConsecutiveHardFailures` in a row — spread
|
|
354
|
+
// over ~2 minutes by the exponential backoff below — park for good.
|
|
355
|
+
const attemptDurationMs = t.now() - attemptStartedAt;
|
|
356
|
+
const httpStatus = attemptError?.cause?.status;
|
|
357
|
+
const isHardFailure = !streamHadEvents &&
|
|
358
|
+
((typeof httpStatus === 'number' && httpStatus >= 400) ||
|
|
359
|
+
attemptDurationMs < HARD_FAILURE_WINDOW_MS);
|
|
360
|
+
consecutiveHardFailures = isHardFailure ? consecutiveHardFailures + 1 : 0;
|
|
361
|
+
if (consecutiveHardFailures >= maxConsecutiveHardFailures) {
|
|
362
|
+
logger.error('SSE event stream parked — giving up after consecutive hard failures', {
|
|
363
|
+
consecutiveFailures: consecutiveHardFailures,
|
|
364
|
+
lastError: String(attemptError),
|
|
365
|
+
});
|
|
366
|
+
try {
|
|
367
|
+
onParked?.({ consecutiveFailures: consecutiveHardFailures, lastError: attemptError });
|
|
368
|
+
}
|
|
369
|
+
catch (parkedHandlerErr) {
|
|
370
|
+
// A host's park handler must never crash the (already-terminal)
|
|
371
|
+
// stream machine.
|
|
372
|
+
console.warn('[opencode-events] onParked handler threw', parkedHandlerErr);
|
|
373
|
+
}
|
|
374
|
+
break;
|
|
375
|
+
}
|
|
376
|
+
// Re-hydrate messages for loaded sessions when the SSE gap was
|
|
377
|
+
// significant (>5s). Events missed during the gap (e.g. streaming
|
|
378
|
+
// assistant response) would never arrive, leaving the UI stale until
|
|
379
|
+
// the user manually refreshes.
|
|
380
|
+
const gap = t.now() - lastStreamActivityTime;
|
|
381
|
+
if (gap > GAP_REHYDRATE_MS) {
|
|
382
|
+
onGapRehydrate?.(gap);
|
|
383
|
+
}
|
|
384
|
+
if (stableConnection) {
|
|
385
|
+
// Fast reconnect after healthy streams so live streaming resumes
|
|
386
|
+
// immediately.
|
|
387
|
+
retryCount = 0;
|
|
388
|
+
}
|
|
389
|
+
else {
|
|
390
|
+
retryCount++;
|
|
391
|
+
if (retryCount > 1) {
|
|
392
|
+
logger.warn('SSE event stream reconnecting', { retryCount });
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
const delay = stableConnection
|
|
396
|
+
? FAST_RECONNECT_DELAY_MS
|
|
397
|
+
: Math.min(BASE_RECONNECT_DELAY_MS * 2 ** Math.min(retryCount - 1, MAX_BACKOFF_EXPONENT), MAX_RECONNECT_DELAY_MS);
|
|
398
|
+
await new Promise((resolve) => {
|
|
399
|
+
const timer = t.setTimeout(resolve, delay);
|
|
400
|
+
const onAbort = () => {
|
|
401
|
+
t.clearTimeout(timer);
|
|
402
|
+
resolve();
|
|
403
|
+
};
|
|
404
|
+
abortController.signal.addEventListener('abort', onAbort, { once: true });
|
|
405
|
+
});
|
|
406
|
+
}
|
|
407
|
+
})();
|
|
408
|
+
return {
|
|
409
|
+
close: () => {
|
|
410
|
+
abortController.abort();
|
|
411
|
+
if (externalSignal)
|
|
412
|
+
externalSignal.removeEventListener('abort', onExternalAbort);
|
|
413
|
+
if (flushTimer)
|
|
414
|
+
t.clearTimeout(flushTimer);
|
|
415
|
+
},
|
|
416
|
+
};
|
|
417
|
+
}
|
|
418
|
+
// The curated chat-event union built on top of this stream's `OpenCodeEvent` —
|
|
419
|
+
// re-exported here (additive only) so a host that imports the SSE primitive
|
|
420
|
+
// from this subpath (`@kortix/sdk/event-stream`) can reach the chat-narrowing
|
|
421
|
+
// helpers from the same import without a second subpath. Canonical definition
|
|
422
|
+
// lives in `./chat-events.ts`.
|
|
423
|
+
export { heartbeatGapEvent, narrowChatEvent, } from './chat-events.js';
|
|
424
|
+
//# sourceMappingURL=event-stream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-stream.js","sourceRoot":"","sources":["../../src/state/event-stream.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IndexedDB persistence layer for the sync store.
|
|
3
|
+
* Provides instant session data on cold loads (stale-while-revalidate).
|
|
4
|
+
*
|
|
5
|
+
* Schema: one object store "sessions" keyed by cacheKey, each entry holds
|
|
6
|
+
* { cacheKey, userId, sessionId, messages, parts, updatedAt }.
|
|
7
|
+
*/
|
|
8
|
+
export declare function saveSessionToIDB(sessionId: string, messages: any[], parts: Record<string, any[]>): Promise<void>;
|
|
9
|
+
export declare function flushIDBWrites(): Promise<void>;
|
|
10
|
+
export declare function loadSessionFromIDB(sessionId: string): Promise<{
|
|
11
|
+
messages: any[];
|
|
12
|
+
parts: Record<string, any[]>;
|
|
13
|
+
} | null>;
|
|
14
|
+
export declare function loadAllSessionIdsFromIDB(): Promise<string[]>;
|
|
15
|
+
export declare function deleteSessionFromIDB(sessionId: string): Promise<void>;
|
|
16
|
+
export declare function clearSessionIDBCache(): Promise<void>;
|
|
17
|
+
export declare function pruneIDBCache(): Promise<void>;
|
|
18
|
+
//# sourceMappingURL=idb-sync-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idb-sync-cache.d.ts","sourceRoot":"","sources":["../../src/state/idb-sync-cache.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAuGH,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,GAAG,EAAE,EACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,GAC3B,OAAO,CAAC,IAAI,CAAC,CASf;AAED,wBAAgB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAK9C;AAED,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;CAAE,GAAG,IAAI,CAAC,CAuBnE;AAED,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAiBlE;AAED,wBAAsB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAW3E;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAa1D;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CA0BnD"}
|