akanjs 3.0.0-beta.2 → 3.0.0-beta.20
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/base/base.ts +6 -11
- package/base/baseEnv.ts +17 -11
- package/base/databaseModes.ts +75 -0
- package/base/index.ts +1 -0
- package/base/primitiveRegistry.ts +38 -47
- package/base/symbols.ts +1 -1
- package/base/types.ts +1 -1
- package/base/utils.ts +3 -6
- package/capacitor.base.config.ts +2 -3
- package/client/capacitor.ts +18 -63
- package/client/cn.ts +3 -13
- package/client/cookie.ts +6 -15
- package/client/createFont.ts +0 -2
- package/client/csrTypes.ts +6 -59
- package/client/decorators.ts +1 -1
- package/client/device.ts +52 -44
- package/client/frameConfig.ts +15 -26
- package/client/index.ts +0 -1
- package/client/makePageProto.tsx +3 -4
- package/client/route/RootLayoutDefinition.ts +0 -6
- package/client/route/RouteDefinition.ts +5 -30
- package/client/route/resolveRouteModule.ts +1 -5
- package/client/router.ts +35 -39
- package/client/rscNavigation.ts +4 -5
- package/client/sharedContext.ts +2 -19
- package/client/storage.ts +29 -38
- package/client/translator.ts +5 -6
- package/client/types.ts +0 -3
- package/common/CodeAgentClient.ts +91 -0
- package/common/CodeTranscript.ts +325 -0
- package/common/Logger.ts +9 -34
- package/common/TrustedProxy.ts +6 -34
- package/common/applyMixins.ts +13 -2
- package/common/authToken.ts +0 -11
- package/common/capitalize.ts +3 -4
- package/common/clamp.ts +0 -1
- package/common/clientAddress.ts +1 -15
- package/common/codeAgentProfile.ts +181 -0
- package/common/codeAgentWire.ts +305 -0
- package/{server/routing → common}/eventStream.ts +1 -6
- package/common/fileUpload.ts +1 -12
- package/common/formatNumber.ts +3 -12
- package/common/index.ts +104 -19
- package/common/interpolateTranslation.ts +1 -6
- package/common/isEmail.ts +0 -1
- package/common/isRecord.ts +2 -0
- package/common/isThenable.ts +1 -8
- package/common/isValidDate.ts +3 -5
- package/common/logContext.ts +1 -1
- package/{ui/Agent → common}/markdownBlocks.ts +0 -3
- package/common/markdownSpans.ts +47 -0
- package/{ui/Agent → common}/markdownTable.ts +1 -5
- package/common/mcpExposure.ts +4 -27
- package/common/objectPath.ts +67 -0
- package/common/objectify.ts +52 -0
- package/common/{isPhoneNumber.ts → phone.ts} +7 -1
- package/common/randomPick.ts +13 -0
- package/common/requestOrigin.ts +0 -17
- package/common/restClient.ts +8 -13
- package/common/round.ts +4 -0
- package/common/routeConvention.ts +21 -14
- package/common/sleep.ts +1 -8
- package/common/subRoute.ts +4 -7
- package/common/toError.ts +1 -0
- package/common/tunnelWire.ts +263 -0
- package/common/types.ts +6 -7
- package/common/{splitVersion.ts → version.ts} +3 -6
- package/common/{websocketBinaryFrame.ts → websocketContract.ts} +43 -9
- package/constant/cascadePaths.ts +6 -9
- package/constant/constantRegistry.ts +21 -57
- package/constant/crystalize.ts +2 -12
- package/constant/dateSlot.ts +0 -15
- package/constant/fieldInfo.ts +30 -109
- package/constant/fieldQueryMeta.ts +2 -10
- package/constant/getDefault.ts +16 -8
- package/constant/hydrationPlan.ts +1 -9
- package/constant/index.ts +0 -1
- package/constant/labelOf.ts +1 -6
- package/constant/mask.ts +36 -38
- package/constant/purify.ts +6 -14
- package/constant/serialize.ts +82 -5
- package/constant/textFieldPaths.ts +2 -3
- package/constant/types.ts +2 -6
- package/constant/via.ts +20 -60
- package/dictionary/DictionaryLookup.ts +1 -7
- package/dictionary/agent.dictionary.ts +43 -11
- package/dictionary/base.dictionary.ts +11 -0
- package/dictionary/dictInfo.ts +145 -626
- package/dictionary/dictShape.ts +54 -0
- package/dictionary/dictionary.ts +1 -2
- package/dictionary/dictionaryRegistry.ts +7 -28
- package/dictionary/locale.ts +24 -116
- package/dictionary/trans.ts +18 -56
- package/document/dataLoader.ts +77 -78
- package/document/database.ts +52 -56
- package/document/documentQuery.ts +32 -32
- package/document/documentSchema.ts +21 -26
- package/document/filterMeta.ts +11 -31
- package/document/index.ts +0 -1
- package/document/into.ts +8 -18
- package/document/loaderInfo.ts +28 -7
- package/document/noDocumentError.ts +2 -7
- package/document/queryEvaluator.ts +21 -43
- package/document/types.ts +0 -1
- package/fetch/client/fetchClient.ts +66 -105
- package/fetch/client/fetchHandle.ts +4 -12
- package/fetch/client/httpClient.ts +35 -68
- package/fetch/client/remoteError.ts +2 -8
- package/fetch/client/sliceInitHandle.ts +3 -6
- package/fetch/client/sliceQueryArgs.ts +11 -0
- package/fetch/client/wsClient.ts +75 -64
- package/fetch/fetchType/appliedReturn.type.ts +5 -24
- package/fetch/fetchType/buildFetch.type.ts +28 -1
- package/fetch/fetchType/index.ts +0 -1
- package/fetch/requestStorage.ts +7 -28
- package/fetch/types.ts +0 -1
- package/index.ts +31 -64
- package/package.json +19 -5
- package/server/akanApp.ts +138 -289
- package/server/akanAppHeaders.ts +2 -3
- package/server/akanOption.ts +25 -27
- package/server/akanServer.ts +98 -219
- package/server/animatedImage.ts +2 -11
- package/server/artifact/builderRpc.ts +24 -64
- package/server/artifact/index.ts +0 -1
- package/server/artifact/ipcTypes.ts +27 -30
- package/server/artifact/routeClientCache.ts +18 -37
- package/server/artifact/routeSeedIndexStore.ts +2 -35
- package/server/artifact/routesManifestStore.ts +13 -38
- package/server/binaryPubsub.ts +0 -9
- package/server/cachePolicy.ts +10 -44
- package/server/console.ts +12 -16
- package/server/consoleSession.ts +55 -12
- package/server/contentEncoding.ts +42 -27
- package/server/decorators.ts +4 -70
- package/server/devtools/constantSerializer.ts +2 -14
- package/server/devtools/depsSerializer.ts +14 -46
- package/server/devtools/devtoolsJson.ts +6 -18
- package/server/devtools/devtoolsRouter.ts +2 -12
- package/server/devtools/signalSerializer.ts +5 -44
- package/server/devtools/types.ts +0 -12
- package/server/di/diLifecycle.ts +141 -221
- package/server/di/predefinedAdaptor.ts +11 -5
- package/server/di/resolveHierarchy.ts +114 -5
- package/server/di/utils.ts +13 -29
- package/server/head.tsx +53 -0
- package/server/hmr/clientScript.ts +2 -8
- package/server/hmr/devHmrController.ts +28 -32
- package/server/hmr/wsHub.ts +9 -7
- package/server/imageOptimizer.ts +5 -26
- package/server/index.ts +1 -1
- package/server/lifecycle/portInUse.ts +1 -4
- package/server/lifecycle/runtimeDir.ts +0 -4
- package/server/lifecycle/shutdownManager.ts +4 -29
- package/server/logging/childOutputReader.ts +0 -12
- package/server/logging/hubFileSink.ts +10 -6
- package/server/logging/logControlSocket.ts +13 -7
- package/server/logging/logForwarder.ts +19 -22
- package/server/logging/logHub.ts +0 -0
- package/server/logging/logQuery.ts +4 -7
- package/server/logging/logStdoutWriter.ts +1 -11
- package/server/logging/logStreamRoute.ts +4 -21
- package/server/logging/logTailClient.ts +1 -8
- package/server/logging/rotatingLogWriter.ts +4 -6
- package/server/mcp/McpAuth.ts +5 -79
- package/server/mcp/McpDispatcher.ts +13 -90
- package/server/mcp/McpEventStream.ts +2 -12
- package/server/mcp/McpExecutionContext.ts +1 -42
- package/server/mcp/McpRateLimiter.ts +61 -30
- package/server/mcp/McpRouter.ts +49 -208
- package/server/mcp/PagePromptComposer.ts +7 -29
- package/server/memoryLimit.ts +1 -13
- package/server/oauth/OAuthAuthorize.ts +3 -7
- package/server/oauth/OAuthClientIdMetadata.ts +2 -27
- package/server/oauth/OAuthErrors.ts +0 -13
- package/server/oauth/OAuthMetadata.ts +1 -7
- package/server/oauth/OAuthPkce.ts +0 -2
- package/server/oauth/OAuthRedirect.ts +0 -9
- package/server/oauth/OAuthRegistration.ts +0 -2
- package/server/oauth/OAuthRevocation.ts +1 -11
- package/server/oauth/OAuthToken.ts +3 -14
- package/server/oauth/oauthTypes.ts +1 -2
- package/server/ops/ageEncryption.ts +317 -0
- package/server/ops/appInfo.ts +92 -0
- package/server/ops/opsCommand.ts +116 -0
- package/server/ops/opsRoute.ts +151 -0
- package/server/ops/opsToken.ts +93 -0
- package/server/ops/snapshotJobs.ts +133 -0
- package/server/ops/snapshotRestore.ts +118 -0
- package/server/ops/snapshotTypes.ts +52 -0
- package/server/ops/sqliteFiles.ts +20 -0
- package/server/ops/sqliteSnapshot.ts +149 -0
- package/server/processMetricsCollector.ts +12 -14
- package/server/proxy/hostBasePathWebProxy.ts +20 -13
- package/server/proxy/index.ts +2 -3
- package/server/proxy/localeWebProxy.ts +3 -17
- package/server/proxy/types.ts +14 -0
- package/server/proxy/webProxyRunner.ts +13 -1
- package/server/resolver/CascadeRunner.ts +7 -23
- package/server/resolver/database.resolver.ts +57 -123
- package/server/resolver/service.resolver.ts +9 -161
- package/server/resolver/signal.resolver.ts +73 -98
- package/server/routeElementComposer.tsx +23 -52
- package/server/routeState.ts +15 -34
- package/server/routeTreeBuilder.ts +24 -83
- package/server/routing/apiRouter.ts +17 -49
- package/server/routing/appWsData.ts +4 -28
- package/server/routing/soloAppRoutes.ts +5 -5
- package/server/rscClient.tsx +31 -37
- package/server/rscClientFetch.ts +7 -3
- package/server/rscClientPatch.ts +4 -25
- package/server/rscHttp.ts +1 -1
- package/server/rscNavigationState.ts +10 -25
- package/server/rscPagePrompts.ts +4 -24
- package/server/rscSegmentOutlet.tsx +1 -5
- package/server/rscWorker.tsx +146 -285
- package/server/rscWorkerCache.ts +74 -8
- package/server/rscWorkerHost.ts +45 -192
- package/server/semaphore.ts +1 -1
- package/server/sitemap.ts +1 -3
- package/server/ssrFromRscRenderer.tsx +31 -124
- package/server/ssrTypes.ts +3 -29
- package/server/staticPath.ts +0 -16
- package/server/systemPageDocument.tsx +65 -2
- package/server/systemPages.tsx +4 -2
- package/server/tunnel/TunnelAgent.ts +237 -0
- package/server/tunnel/TunnelDataSocket.ts +146 -0
- package/server/tunnel/TunnelHttpStream.ts +86 -0
- package/server/tunnel/TunnelTcpStream.ts +96 -0
- package/server/tunnel/TunnelWebsocketStream.ts +110 -0
- package/server/tunnel/index.ts +6 -0
- package/server/tunnel/tunnelStream.ts +32 -0
- package/server/types.tsx +2 -9
- package/server/webRouter.ts +88 -306
- package/service/agent.service.ts +66 -35
- package/service/injectInfo.ts +106 -75
- package/service/ipcTypes.ts +4 -1
- package/service/liveSyncHub.ts +4 -34
- package/service/predefinedAdaptor/anthropicLlm.ts +65 -75
- package/service/predefinedAdaptor/cache.adaptor.ts +257 -75
- package/service/predefinedAdaptor/database.adaptor.ts +366 -108
- package/service/predefinedAdaptor/documentTransfer.ts +89 -0
- package/service/predefinedAdaptor/index.ts +2 -1
- package/service/predefinedAdaptor/insightQuery.ts +89 -79
- package/service/predefinedAdaptor/llm.adaptor.ts +64 -54
- package/service/predefinedAdaptor/llmOverflow.ts +63 -0
- package/service/predefinedAdaptor/openaiDialect.ts +56 -64
- package/service/predefinedAdaptor/openaiLlm.ts +24 -27
- package/service/predefinedAdaptor/queue.adaptor.ts +41 -22
- package/service/predefinedAdaptor/schedule.adaptor.ts +69 -9
- package/service/predefinedAdaptor/searchIndex.ts +76 -325
- package/service/predefinedAdaptor/solidCache.adaptor.ts +135 -12
- package/service/predefinedAdaptor/solidPubsub.adaptor.ts +28 -16
- package/service/predefinedAdaptor/solidQueue.adaptor.ts +61 -10
- package/service/predefinedAdaptor/solidSqlite.ts +10 -16
- package/service/predefinedAdaptor/sql/PendingStoreEnsures.ts +1 -0
- package/service/predefinedAdaptor/sql/PostgresInsightSession.ts +113 -0
- package/service/predefinedAdaptor/sql/QueryCompiler.ts +50 -30
- package/service/predefinedAdaptor/sql/SqlDocumentStore.ts +290 -138
- package/service/predefinedAdaptor/sql/SqliteInsightSession.ts +85 -0
- package/service/predefinedAdaptor/sql/UpdateCompiler.ts +1 -7
- package/service/predefinedAdaptor/sql/dialect/postgres.ts +138 -53
- package/service/predefinedAdaptor/sql/dialect/sqlite.ts +18 -15
- package/service/predefinedAdaptor/sql/driver/bunSqlite.ts +31 -4
- package/service/predefinedAdaptor/sql/driver/libsql.ts +20 -12
- package/service/predefinedAdaptor/sql/driver/postgres.ts +13 -7
- package/service/predefinedAdaptor/sql/search/fts5.ts +249 -0
- package/service/predefinedAdaptor/sql/search/mirror.ts +76 -0
- package/service/predefinedAdaptor/sql/search/postgres.ts +453 -0
- package/service/predefinedAdaptor/sql/search/types.ts +50 -0
- package/service/predefinedAdaptor/sql/types.ts +76 -17
- package/service/predefinedAdaptor/sql/values.ts +40 -2
- package/service/predefinedAdaptor/sqlitePath.ts +12 -0
- package/service/predefinedAdaptor/sseData.ts +23 -0
- package/service/predefinedAdaptor/storage.adaptor.ts +19 -7
- package/service/predefinedAdaptor/websocket.adaptor.ts +154 -184
- package/service/serve.ts +1 -2
- package/service/serviceModule.ts +52 -70
- package/service/toolNames.ts +5 -22
- package/service/types.ts +3 -9
- package/signal/CrossSiteGuard.ts +5 -40
- package/signal/SignalFailure.ts +2 -15
- package/signal/agent/AgentCatalogue.ts +9 -55
- package/signal/agent.signal.ts +9 -6
- package/signal/agentMeter.ts +45 -0
- package/signal/agentTurnStream.ts +48 -46
- package/signal/endpoint.ts +12 -2
- package/signal/endpointCache.ts +59 -0
- package/signal/endpointInfo.ts +13 -27
- package/signal/exception.ts +3 -34
- package/signal/guard.ts +4 -21
- package/signal/guards.ts +2 -10
- package/signal/index.ts +1 -0
- package/signal/internal.ts +3 -7
- package/signal/internalArg.ts +10 -13
- package/signal/internalInfo.ts +1 -1
- package/signal/mcp/McpDocument.ts +21 -90
- package/signal/mcp/McpProgress.ts +6 -19
- package/signal/mcp/McpUriTemplate.ts +1 -27
- package/signal/mcp/Msg.ts +13 -122
- package/signal/mcp/mcpProtocol.ts +3 -26
- package/signal/mcp/pagePrompt.ts +3 -9
- package/signal/middleware.ts +15 -65
- package/signal/openapi/openapi.ts +0 -4
- package/signal/schema/JsonSchemaBuilder.ts +32 -46
- package/signal/serializer/fetch.serializer.ts +37 -43
- package/signal/serverSignal.ts +6 -8
- package/signal/signalContext.ts +70 -161
- package/signal/signalRegistry.ts +11 -17
- package/signal/slice.ts +6 -12
- package/signal/sliceInfo.ts +5 -30
- package/signal/trace.ts +11 -84
- package/signal/types.ts +27 -57
- package/store/SliceRequest.ts +1 -11
- package/store/action.ts +153 -395
- package/store/actionTag.ts +1 -10
- package/store/agent/AgentBridge.ts +3 -25
- package/store/agent/AgentContext.ts +2 -9
- package/store/agent/AgentCursor.ts +160 -0
- package/store/agent/AgentPrompts.ts +0 -15
- package/store/agent/AgentVisual.ts +152 -0
- package/store/agent/ScreenFlash.ts +67 -0
- package/store/agent/ScreenReader.ts +3 -52
- package/store/agent/ScreenSettle.ts +1 -13
- package/store/agent/ScreenTarget.ts +15 -32
- package/store/agent/StoreCatalogue.ts +12 -24
- package/store/agent/StoreSurfaceSource.ts +35 -65
- package/store/agent/index.ts +4 -4
- package/store/agentic/AgentValue.ts +9 -26
- package/store/agentic/StExposeBuilder.ts +3 -12
- package/store/agentic/StExposeDraft.ts +0 -6
- package/store/agentic/StStateBuilder.ts +3 -11
- package/store/agentic/StStateDraft.ts +0 -5
- package/store/agentic/StToolBuilder.ts +48 -41
- package/store/agentic/StToolDraft.ts +0 -7
- package/store/agentic/attachAgentic.ts +2 -10
- package/store/agentic/formFields.ts +8 -42
- package/store/agentic/index.ts +1 -1
- package/store/agentic/useAgentReference.ts +31 -0
- package/store/agentic/useFieldTool.ts +176 -58
- package/store/agentic/useFormTools.ts +4 -21
- package/store/agentic/useRelationFieldTool.ts +2 -15
- package/store/databaseStateNames.ts +0 -9
- package/store/draftStore.ts +4 -54
- package/store/formSetterNames.ts +2 -19
- package/store/hooks.ts +1 -1
- package/store/liveInsert.ts +1 -30
- package/store/sliceKeys.ts +37 -0
- package/store/sliceRole.ts +1 -10
- package/store/state.ts +4 -50
- package/store/stateBuilder.ts +1 -23
- package/store/storeInstance.ts +21 -114
- package/store/storeRegistry.ts +1 -8
- package/store/types.ts +1 -1
- package/test/conformance.ts +299 -0
- package/test/index.ts +2 -2
- package/test/sampleOf.ts +52 -28
- package/test/signalTestRuntime.ts +6 -10
- package/test/testServer.ts +66 -31
- package/types/base/base.d.ts +2 -3
- package/types/base/baseEnv.d.ts +7 -10
- package/types/base/databaseModes.d.ts +28 -0
- package/types/base/index.d.ts +1 -0
- package/types/base/primitiveRegistry.d.ts +23 -10
- package/types/base/symbols.d.ts +1 -1
- package/types/capacitor.base.config.d.ts +1 -1
- package/types/client/cn.d.ts +3 -13
- package/types/client/cookie.d.ts +3 -12
- package/types/client/csrTypes.d.ts +6 -57
- package/types/client/decorators.d.ts +1 -1
- package/types/client/device.d.ts +2 -1
- package/types/client/index.d.ts +0 -1
- package/types/client/route/RootLayoutDefinition.d.ts +0 -1
- package/types/client/route/RouteDefinition.d.ts +4 -16
- package/types/client/route/resolveRouteModule.d.ts +1 -5
- package/types/client/router.d.ts +8 -4
- package/types/client/rscNavigation.d.ts +4 -5
- package/types/client/sharedContext.d.ts +2 -19
- package/types/client/storage.d.ts +1 -1
- package/types/client/types.d.ts +0 -3
- package/types/common/CodeAgentClient.d.ts +20 -0
- package/types/common/CodeTranscript.d.ts +72 -0
- package/types/common/Logger.d.ts +4 -20
- package/types/common/TrustedProxy.d.ts +2 -28
- package/types/common/applyMixins.d.ts +3 -0
- package/types/common/authToken.d.ts +0 -11
- package/types/common/capitalize.d.ts +1 -1
- package/types/common/clamp.d.ts +0 -1
- package/types/common/clientAddress.d.ts +1 -15
- package/types/common/codeAgentProfile.d.ts +115 -0
- package/types/common/codeAgentWire.d.ts +279 -0
- package/types/{server/routing → common}/eventStream.d.ts +0 -5
- package/types/common/fileUpload.d.ts +6 -11
- package/types/common/index.d.ts +20 -19
- package/types/common/interpolateTranslation.d.ts +1 -6
- package/types/common/isEmail.d.ts +0 -1
- package/types/common/isRecord.d.ts +1 -0
- package/types/common/isThenable.d.ts +0 -8
- package/types/common/logContext.d.ts +1 -1
- package/types/{ui/Agent → common}/markdownBlocks.d.ts +0 -3
- package/types/common/markdownSpans.d.ts +30 -0
- package/types/{ui/Agent → common}/markdownTable.d.ts +0 -2
- package/types/common/mcpExposure.d.ts +3 -23
- package/types/common/objectPath.d.ts +10 -0
- package/types/common/objectify.d.ts +7 -0
- package/types/common/phone.d.ts +2 -0
- package/types/common/randomPick.d.ts +1 -0
- package/types/common/requestOrigin.d.ts +0 -17
- package/types/common/restClient.d.ts +0 -7
- package/types/common/round.d.ts +1 -0
- package/types/common/routeConvention.d.ts +2 -5
- package/types/common/sleep.d.ts +0 -1
- package/types/common/subRoute.d.ts +4 -6
- package/types/common/toError.d.ts +1 -0
- package/types/common/tunnelWire.d.ts +161 -0
- package/types/common/types.d.ts +7 -7
- package/types/common/version.d.ts +6 -0
- package/types/common/websocketContract.d.ts +41 -0
- package/types/constant/cascadePaths.d.ts +2 -5
- package/types/constant/constantRegistry.d.ts +4 -4
- package/types/constant/dateSlot.d.ts +0 -5
- package/types/constant/fieldInfo.d.ts +2 -21
- package/types/constant/fieldQueryMeta.d.ts +2 -10
- package/types/constant/getDefault.d.ts +5 -7
- package/types/constant/hydrationPlan.d.ts +0 -8
- package/types/constant/index.d.ts +0 -1
- package/types/constant/labelOf.d.ts +1 -6
- package/types/constant/mask.d.ts +11 -36
- package/types/constant/serialize.d.ts +10 -2
- package/types/constant/types.d.ts +2 -6
- package/types/constant/via.d.ts +0 -1
- package/types/dictionary/DictionaryLookup.d.ts +1 -7
- package/types/dictionary/agent.dictionary.d.ts +2 -1
- package/types/dictionary/base.dictionary.d.ts +1 -1
- package/types/dictionary/dictInfo.d.ts +25 -92
- package/types/dictionary/dictShape.d.ts +26 -0
- package/types/dictionary/dictionary.d.ts +9 -9
- package/types/dictionary/dictionaryRegistry.d.ts +1 -15
- package/types/dictionary/locale.d.ts +9 -28
- package/types/dictionary/trans.d.ts +5 -14
- package/types/document/dataLoader.d.ts +2 -2
- package/types/document/database.d.ts +21 -14
- package/types/document/documentQuery.d.ts +6 -1
- package/types/document/documentSchema.d.ts +3 -7
- package/types/document/filterMeta.d.ts +3 -8
- package/types/document/index.d.ts +0 -1
- package/types/document/into.d.ts +3 -2
- package/types/document/loaderInfo.d.ts +9 -4
- package/types/document/noDocumentError.d.ts +2 -7
- package/types/document/queryEvaluator.d.ts +7 -24
- package/types/document/types.d.ts +0 -1
- package/types/fetch/client/fetchClient.d.ts +6 -9
- package/types/fetch/client/fetchHandle.d.ts +3 -11
- package/types/fetch/client/httpClient.d.ts +5 -1
- package/types/fetch/client/remoteError.d.ts +2 -8
- package/types/fetch/client/sliceInitHandle.d.ts +2 -5
- package/types/fetch/client/sliceQueryArgs.d.ts +3 -0
- package/types/fetch/client/wsClient.d.ts +10 -15
- package/types/fetch/fetchType/appliedReturn.type.d.ts +5 -23
- package/types/fetch/fetchType/buildFetch.type.d.ts +15 -1
- package/types/fetch/fetchType/index.d.ts +0 -1
- package/types/fetch/requestStorage.d.ts +3 -16
- package/types/fetch/types.d.ts +0 -1
- package/types/index.d.ts +30 -64
- package/types/server/akanApp.d.ts +5 -28
- package/types/server/akanAppHeaders.d.ts +0 -1
- package/types/server/akanOption.d.ts +12 -24
- package/types/server/akanServer.d.ts +16 -56
- package/types/server/animatedImage.d.ts +0 -6
- package/types/server/artifact/builderRpc.d.ts +7 -30
- package/types/server/artifact/index.d.ts +0 -1
- package/types/server/artifact/ipcTypes.d.ts +22 -29
- package/types/server/artifact/routeClientCache.d.ts +3 -11
- package/types/server/artifact/routeSeedIndexStore.d.ts +0 -16
- package/types/server/artifact/routesManifestStore.d.ts +1 -1
- package/types/server/binaryPubsub.d.ts +0 -8
- package/types/server/cachePolicy.d.ts +2 -21
- package/types/server/console.d.ts +3 -6
- package/types/server/consoleSession.d.ts +2 -2
- package/types/server/contentEncoding.d.ts +6 -14
- package/types/server/decorators.d.ts +0 -12
- package/types/server/devtools/constantSerializer.d.ts +1 -6
- package/types/server/devtools/depsSerializer.d.ts +1 -7
- package/types/server/devtools/devtoolsJson.d.ts +1 -7
- package/types/server/devtools/devtoolsRouter.d.ts +2 -11
- package/types/server/devtools/signalSerializer.d.ts +1 -9
- package/types/server/devtools/types.d.ts +0 -11
- package/types/server/di/diLifecycle.d.ts +0 -36
- package/types/server/di/predefinedAdaptor.d.ts +3 -2
- package/types/server/di/resolveHierarchy.d.ts +22 -5
- package/types/server/di/utils.d.ts +4 -17
- package/types/server/head.d.ts +9 -0
- package/types/server/hmr/devHmrController.d.ts +0 -2
- package/types/server/hmr/wsHub.d.ts +6 -1
- package/types/server/index.d.ts +1 -1
- package/types/server/lifecycle/portInUse.d.ts +1 -4
- package/types/server/lifecycle/runtimeDir.d.ts +0 -4
- package/types/server/lifecycle/shutdownManager.d.ts +0 -9
- package/types/server/logging/childOutputReader.d.ts +0 -12
- package/types/server/logging/hubFileSink.d.ts +1 -5
- package/types/server/logging/logControlSocket.d.ts +2 -7
- package/types/server/logging/logForwarder.d.ts +3 -15
- package/types/server/logging/logHub.d.ts +1 -15
- package/types/server/logging/logQuery.d.ts +3 -6
- package/types/server/logging/logStdoutWriter.d.ts +0 -6
- package/types/server/logging/logStreamRoute.d.ts +0 -9
- package/types/server/logging/logTailClient.d.ts +0 -5
- package/types/server/mcp/McpAuth.d.ts +3 -71
- package/types/server/mcp/McpDispatcher.d.ts +0 -23
- package/types/server/mcp/McpEventStream.d.ts +1 -12
- package/types/server/mcp/McpExecutionContext.d.ts +0 -33
- package/types/server/mcp/McpRateLimiter.d.ts +10 -13
- package/types/server/mcp/McpRouter.d.ts +1 -47
- package/types/server/mcp/PagePromptComposer.d.ts +1 -13
- package/types/server/memoryLimit.d.ts +1 -13
- package/types/server/oauth/OAuthAuthorize.d.ts +1 -6
- package/types/server/oauth/OAuthClientIdMetadata.d.ts +2 -26
- package/types/server/oauth/OAuthErrors.d.ts +0 -13
- package/types/server/oauth/OAuthMetadata.d.ts +1 -7
- package/types/server/oauth/OAuthPkce.d.ts +0 -1
- package/types/server/oauth/OAuthRedirect.d.ts +0 -9
- package/types/server/oauth/OAuthRegistration.d.ts +0 -1
- package/types/server/oauth/OAuthRevocation.d.ts +1 -11
- package/types/server/oauth/OAuthToken.d.ts +1 -13
- package/types/server/oauth/oauthTypes.d.ts +1 -2
- package/types/server/ops/ageEncryption.d.ts +19 -0
- package/types/server/ops/appInfo.d.ts +36 -0
- package/types/server/ops/opsCommand.d.ts +5 -0
- package/types/server/ops/opsRoute.d.ts +24 -0
- package/types/server/ops/opsToken.d.ts +26 -0
- package/types/server/ops/snapshotJobs.d.ts +24 -0
- package/types/server/ops/snapshotRestore.d.ts +24 -0
- package/types/server/ops/snapshotTypes.d.ts +45 -0
- package/types/server/ops/sqliteFiles.d.ts +5 -0
- package/types/server/ops/sqliteSnapshot.d.ts +32 -0
- package/types/server/processMetricsCollector.d.ts +3 -1
- package/types/server/proxy/hostBasePathWebProxy.d.ts +7 -1
- package/types/server/proxy/index.d.ts +2 -3
- package/types/server/proxy/localeWebProxy.d.ts +1 -1
- package/types/server/proxy/types.d.ts +5 -0
- package/types/server/proxy/webProxyRunner.d.ts +1 -0
- package/types/server/resolver/CascadeRunner.d.ts +0 -4
- package/types/server/resolver/database.resolver.d.ts +1 -1
- package/types/server/resolver/service.resolver.d.ts +2 -2
- package/types/server/resolver/signal.resolver.d.ts +1 -15
- package/types/server/routeElementComposer.d.ts +2 -8
- package/types/server/routeState.d.ts +1 -1
- package/types/server/routing/apiRouter.d.ts +2 -20
- package/types/server/routing/appWsData.d.ts +0 -26
- package/types/server/routing/soloAppRoutes.d.ts +2 -6
- package/types/server/rscClient.d.ts +0 -9
- package/types/server/rscClientFetch.d.ts +6 -6
- package/types/server/rscClientPatch.d.ts +1 -1
- package/types/server/rscHttp.d.ts +1 -0
- package/types/server/rscNavigationState.d.ts +3 -2
- package/types/server/rscPagePrompts.d.ts +0 -9
- package/types/server/rscWorkerCache.d.ts +41 -3
- package/types/server/rscWorkerHost.d.ts +5 -61
- package/types/server/ssrFromRscRenderer.d.ts +0 -12
- package/types/server/ssrTypes.d.ts +2 -29
- package/types/server/staticPath.d.ts +0 -16
- package/types/server/systemPageDocument.d.ts +8 -0
- package/types/server/systemPages.d.ts +2 -3
- package/types/server/tunnel/TunnelAgent.d.ts +29 -0
- package/types/server/tunnel/TunnelDataSocket.d.ts +22 -0
- package/types/server/tunnel/TunnelHttpStream.d.ts +10 -0
- package/types/server/tunnel/TunnelTcpStream.d.ts +11 -0
- package/types/server/tunnel/TunnelWebsocketStream.d.ts +10 -0
- package/types/server/tunnel/index.d.ts +6 -0
- package/types/server/tunnel/tunnelStream.d.ts +19 -0
- package/types/server/tunnel.d.ts +1 -0
- package/types/server/types.d.ts +2 -9
- package/types/server/webRouter.d.ts +2 -19
- package/types/service/agent.service.d.ts +16 -29
- package/types/service/injectInfo.d.ts +26 -15
- package/types/service/ipcTypes.d.ts +6 -0
- package/types/service/liveSyncHub.d.ts +4 -22
- package/types/service/predefinedAdaptor/anthropicLlm.d.ts +20 -29
- package/types/service/predefinedAdaptor/cache.adaptor.d.ts +42 -12
- package/types/service/predefinedAdaptor/database.adaptor.d.ts +20 -16
- package/types/service/predefinedAdaptor/documentTransfer.d.ts +15 -0
- package/types/service/predefinedAdaptor/index.d.ts +2 -1
- package/types/service/predefinedAdaptor/insightQuery.d.ts +7 -30
- package/types/service/predefinedAdaptor/llm.adaptor.d.ts +54 -54
- package/types/service/predefinedAdaptor/llmOverflow.d.ts +16 -0
- package/types/service/predefinedAdaptor/openaiDialect.d.ts +19 -29
- package/types/service/predefinedAdaptor/openaiLlm.d.ts +9 -14
- package/types/service/predefinedAdaptor/queue.adaptor.d.ts +12 -7
- package/types/service/predefinedAdaptor/schedule.adaptor.d.ts +7 -2
- package/types/service/predefinedAdaptor/searchIndex.d.ts +17 -47
- package/types/service/predefinedAdaptor/solidCache.adaptor.d.ts +15 -6
- package/types/service/predefinedAdaptor/solidPubsub.adaptor.d.ts +6 -4
- package/types/service/predefinedAdaptor/solidSqlite.d.ts +2 -1
- package/types/service/predefinedAdaptor/sql/PostgresInsightSession.d.ts +20 -0
- package/types/service/predefinedAdaptor/sql/QueryCompiler.d.ts +9 -11
- package/types/service/predefinedAdaptor/sql/SqlDocumentStore.d.ts +11 -25
- package/types/service/predefinedAdaptor/sql/SqliteInsightSession.d.ts +15 -0
- package/types/service/predefinedAdaptor/sql/UpdateCompiler.d.ts +0 -4
- package/types/service/predefinedAdaptor/sql/dialect/postgres.d.ts +18 -10
- package/types/service/predefinedAdaptor/sql/dialect/sqlite.d.ts +5 -2
- package/types/service/predefinedAdaptor/sql/driver/bunSqlite.d.ts +9 -3
- package/types/service/predefinedAdaptor/sql/driver/libsql.d.ts +8 -5
- package/types/service/predefinedAdaptor/sql/driver/postgres.d.ts +4 -4
- package/types/service/predefinedAdaptor/sql/search/fts5.d.ts +28 -0
- package/types/service/predefinedAdaptor/sql/search/mirror.d.ts +20 -0
- package/types/service/predefinedAdaptor/sql/search/postgres.d.ts +53 -0
- package/types/service/predefinedAdaptor/sql/search/types.d.ts +45 -0
- package/types/service/predefinedAdaptor/sql/types.d.ts +69 -15
- package/types/service/predefinedAdaptor/sql/values.d.ts +8 -0
- package/types/service/predefinedAdaptor/sqlitePath.d.ts +1 -0
- package/types/service/predefinedAdaptor/sseData.d.ts +1 -0
- package/types/service/predefinedAdaptor/storage.adaptor.d.ts +3 -2
- package/types/service/predefinedAdaptor/websocket.adaptor.d.ts +26 -26
- package/types/service/serviceModule.d.ts +7 -7
- package/types/service/toolNames.d.ts +4 -21
- package/types/service/types.d.ts +3 -3
- package/types/signal/CrossSiteGuard.d.ts +3 -28
- package/types/signal/SignalFailure.d.ts +1 -15
- package/types/signal/agent/AgentCatalogue.d.ts +8 -54
- package/types/signal/agent.signal.d.ts +4 -1
- package/types/signal/agentMeter.d.ts +24 -0
- package/types/signal/agentTurnStream.d.ts +10 -11
- package/types/signal/endpoint.d.ts +0 -1
- package/types/signal/endpointCache.d.ts +5 -0
- package/types/signal/endpointInfo.d.ts +1 -9
- package/types/signal/exception.d.ts +1 -34
- package/types/signal/guard.d.ts +4 -15
- package/types/signal/guards.d.ts +2 -10
- package/types/signal/index.d.ts +1 -0
- package/types/signal/internal.d.ts +1 -5
- package/types/signal/internalArg.d.ts +7 -13
- package/types/signal/mcp/McpDocument.d.ts +5 -45
- package/types/signal/mcp/McpProgress.d.ts +6 -19
- package/types/signal/mcp/McpUriTemplate.d.ts +1 -19
- package/types/signal/mcp/Msg.d.ts +13 -70
- package/types/signal/mcp/mcpProtocol.d.ts +1 -26
- package/types/signal/mcp/pagePrompt.d.ts +3 -9
- package/types/signal/middleware.d.ts +0 -18
- package/types/signal/schema/JsonSchemaBuilder.d.ts +15 -43
- package/types/signal/serializer/fetch.serializer.d.ts +1 -6
- package/types/signal/serverSignal.d.ts +0 -1
- package/types/signal/signalContext.d.ts +14 -61
- package/types/signal/signalRegistry.d.ts +0 -1
- package/types/signal/slice.d.ts +3 -9
- package/types/signal/sliceInfo.d.ts +5 -30
- package/types/signal/trace.d.ts +2 -30
- package/types/signal/types.d.ts +27 -57
- package/types/store/SliceRequest.d.ts +1 -11
- package/types/store/action.d.ts +2 -6
- package/types/store/actionTag.d.ts +1 -10
- package/types/store/agent/AgentBridge.d.ts +3 -22
- package/types/store/agent/AgentContext.d.ts +1 -7
- package/types/store/agent/AgentCursor.d.ts +24 -0
- package/types/store/agent/AgentPrompts.d.ts +0 -5
- package/types/store/agent/AgentVisual.d.ts +25 -0
- package/types/store/agent/ScreenFlash.d.ts +23 -0
- package/types/store/agent/ScreenReader.d.ts +3 -26
- package/types/store/agent/ScreenSettle.d.ts +1 -12
- package/types/store/agent/ScreenTarget.d.ts +3 -23
- package/types/store/agent/StoreCatalogue.d.ts +12 -16
- package/types/store/agent/StoreSurfaceSource.d.ts +11 -23
- package/types/store/agent/index.d.ts +4 -3
- package/types/store/agentic/AgentValue.d.ts +3 -23
- package/types/store/agentic/StExposeBuilder.d.ts +2 -11
- package/types/store/agentic/StExposeDraft.d.ts +0 -6
- package/types/store/agentic/StStateBuilder.d.ts +1 -7
- package/types/store/agentic/StStateDraft.d.ts +0 -5
- package/types/store/agentic/StToolBuilder.d.ts +14 -37
- package/types/store/agentic/StToolDraft.d.ts +0 -7
- package/types/store/agentic/attachAgentic.d.ts +2 -10
- package/types/store/agentic/formFields.d.ts +5 -41
- package/types/store/agentic/index.d.ts +1 -1
- package/types/store/agentic/useAgentReference.d.ts +14 -0
- package/types/store/agentic/useFieldTool.d.ts +19 -16
- package/types/store/agentic/useFormTools.d.ts +1 -18
- package/types/store/agentic/useRelationFieldTool.d.ts +1 -14
- package/types/store/baseSt.d.ts +2 -2
- package/types/store/databaseStateNames.d.ts +0 -9
- package/types/store/draftStore.d.ts +4 -30
- package/types/store/formSetterNames.d.ts +0 -19
- package/types/store/hooks.d.ts +1 -1
- package/types/store/liveInsert.d.ts +0 -23
- package/types/store/sliceKeys.d.ts +31 -0
- package/types/store/sliceRole.d.ts +1 -10
- package/types/store/state.d.ts +2 -9
- package/types/store/stateBuilder.d.ts +0 -14
- package/types/store/storeInstance.d.ts +6 -20
- package/types/store/storeRegistry.d.ts +0 -2
- package/types/test/conformance.d.ts +73 -0
- package/types/test/index.d.ts +2 -2
- package/types/test/sampleOf.d.ts +17 -2
- package/types/test/signalTestRuntime.d.ts +1 -1
- package/types/test/testServer.d.ts +4 -3
- package/types/ui/Agent/Attach.d.ts +2 -2
- package/types/ui/Agent/Bubble.d.ts +3 -14
- package/types/ui/Agent/Chat.d.ts +31 -64
- package/types/ui/Agent/ChatCommands.d.ts +4 -14
- package/types/ui/Agent/Composer.d.ts +18 -5
- package/types/ui/Agent/Dock.d.ts +38 -10
- package/types/ui/Agent/Guide.d.ts +1 -5
- package/types/ui/Agent/History.d.ts +1 -18
- package/types/ui/Agent/Launcher.d.ts +2 -2
- package/types/ui/Agent/Markdown.d.ts +2 -6
- package/types/ui/Agent/MentionNode.d.ts +18 -0
- package/types/ui/Agent/Menu.d.ts +4 -4
- package/types/ui/Agent/Question.d.ts +1 -6
- package/types/ui/Agent/Queued.d.ts +1 -6
- package/types/ui/Agent/Refer.d.ts +9 -0
- package/types/ui/Agent/RichInput.d.ts +14 -0
- package/types/ui/Agent/Skip.d.ts +3 -15
- package/types/ui/Agent/Steps.d.ts +17 -0
- package/types/ui/Agent/ToolCard.d.ts +9 -0
- package/types/ui/Agent/Zone.d.ts +13 -30
- package/types/ui/Agent/agentSessionOf.d.ts +20 -16
- package/types/ui/Agent/attachment.d.ts +4 -38
- package/types/ui/Agent/fetchRunner.d.ts +1 -8
- package/types/ui/Agent/index.d.ts +2 -6
- package/types/ui/Agent/mentionDraft.d.ts +9 -0
- package/types/ui/Agent/tokenCount.d.ts +1 -5
- package/types/ui/Agent/useChatAttachments.d.ts +0 -5
- package/types/ui/Agent/useChatQueue.d.ts +3 -14
- package/types/ui/Agent/useChatReferences.d.ts +15 -0
- package/types/ui/Agent/useChatVoice.d.ts +0 -12
- package/types/ui/Agent/useDraftRecall.d.ts +0 -8
- package/types/ui/Agent/useKeyboardInset.d.ts +0 -7
- package/types/ui/Agent/useReferenceMenu.d.ts +35 -0
- package/types/ui/Agent/useSlashMenu.d.ts +0 -2
- package/types/ui/Agent/voice.d.ts +8 -42
- package/types/ui/Badge.d.ts +0 -1
- package/types/ui/BottomSheet.d.ts +2 -5
- package/types/ui/Button.d.ts +6 -23
- package/types/ui/ClientSide.d.ts +0 -2
- package/types/ui/Constant/schemaGraph.d.ts +0 -4
- package/types/ui/Copy.d.ts +2 -3
- package/types/ui/CsrImage.d.ts +2 -1
- package/types/ui/Data/Dashboard.d.ts +1 -4
- package/types/ui/Data/Item.d.ts +1 -1
- package/types/ui/Data/ListContainer.d.ts +1 -10
- package/types/ui/Data/Pagination.d.ts +0 -2
- package/types/ui/Data/QueryMaker.d.ts +0 -7
- package/types/ui/Data/RefPicker.d.ts +0 -7
- package/types/ui/DatePicker.d.ts +0 -11
- package/types/ui/Dialog/LegacyModal.d.ts +1 -4
- package/types/ui/Dialog/Provider.d.ts +37 -4
- package/types/ui/Dialog/index.d.ts +4 -4
- package/types/ui/Dropdown.d.ts +1 -9
- package/types/ui/Empty.d.ts +3 -10
- package/types/ui/Field/Collection.d.ts +1 -16
- package/types/ui/Field/Relation.d.ts +10 -37
- package/types/ui/Field/Text.d.ts +9 -66
- package/types/ui/Field/index.d.ts +0 -9
- package/types/ui/Field/lightRefCache.d.ts +11 -0
- package/types/ui/Field/useRelationOptions.d.ts +28 -0
- package/types/ui/Image.d.ts +8 -12
- package/types/ui/InfiniteScroll.d.ts +2 -6
- package/types/ui/Input.d.ts +8 -15
- package/types/ui/Layout/Role.d.ts +23 -0
- package/types/ui/Layout/Sider.d.ts +21 -0
- package/types/ui/Layout/TopInset.d.ts +5 -0
- package/types/ui/Layout/index.d.ts +7 -7
- package/types/ui/LegacyModal.d.ts +1 -12
- package/types/ui/Link/Action.d.ts +11 -0
- package/types/ui/Link/Anchor.d.ts +20 -0
- package/types/ui/Link/index.d.ts +4 -7
- package/types/ui/Load/Edit_Client.d.ts +1 -1
- package/types/ui/Load/Page.d.ts +3 -5
- package/types/ui/Load/Stream.d.ts +0 -12
- package/types/ui/Load/Units.d.ts +1 -1
- package/types/ui/Load/View.d.ts +2 -7
- package/types/ui/Loading/ProgressBar.d.ts +0 -4
- package/types/ui/Loading/Skeleton.d.ts +2 -0
- package/types/ui/Loading/Spin.d.ts +12 -2
- package/types/ui/Loading/index.d.ts +3 -8
- package/types/ui/Loading/index_.d.ts +3 -10
- package/types/ui/Menu.d.ts +0 -5
- package/types/ui/Modal.d.ts +0 -17
- package/types/ui/Model/AdminPanel.d.ts +1 -4
- package/types/ui/Model/DraftBar.d.ts +2 -7
- package/types/ui/Model/EditModal.d.ts +7 -22
- package/types/ui/Model/LoadStore.d.ts +18 -0
- package/types/ui/Model/Remove.d.ts +0 -2
- package/types/ui/Model/SureToRemove.d.ts +0 -3
- package/types/ui/Model/ViewEditModal.d.ts +0 -2
- package/types/ui/Model/draftScope.d.ts +0 -7
- package/types/ui/Model/index.d.ts +2 -2
- package/types/ui/Model/index_.d.ts +2 -2
- package/types/ui/Pagination.d.ts +4 -12
- package/types/ui/Popconfirm.d.ts +3 -17
- package/types/ui/Radio.d.ts +0 -4
- package/types/ui/RecentTime.d.ts +5 -9
- package/types/ui/Reference/Panel.d.ts +44 -6
- package/types/ui/Reference/Segmented.d.ts +0 -3
- package/types/ui/Reference/{style.d.ts → docUi.d.ts} +6 -2
- package/types/ui/Reference/index.d.ts +3 -7
- package/types/ui/Refresh.d.ts +1 -1
- package/types/ui/ScreenNavigator.d.ts +2 -2
- package/types/ui/Select.d.ts +4 -19
- package/types/ui/Signal/Endpoint.d.ts +43 -0
- package/types/ui/Signal/WebSocket.d.ts +23 -0
- package/types/ui/Signal/endpointEntries.d.ts +2 -4
- package/types/ui/Signal/index.d.ts +1 -3
- package/types/ui/Signal/style.d.ts +1 -2
- package/types/ui/Switch.d.ts +1 -5
- package/types/ui/System/CSR.d.ts +2 -2
- package/types/ui/System/Client.d.ts +2 -6
- package/types/ui/System/Common.d.ts +11 -22
- package/types/ui/System/Root.d.ts +1 -4
- package/types/ui/System/SSR.d.ts +2 -2
- package/types/ui/System/ThemeToggle.d.ts +1 -0
- package/types/ui/System/index.d.ts +1 -0
- package/types/ui/Tab/Provider.d.ts +24 -4
- package/types/ui/Tab/index.d.ts +3 -3
- package/types/ui/Table.d.ts +7 -23
- package/types/ui/Toast.d.ts +9 -16
- package/types/ui/ToggleSelect.d.ts +0 -5
- package/types/ui/Tooltip.d.ts +1 -2
- package/types/ui/UiOverride/{context.d.ts → UiOverride.d.ts} +24 -40
- package/types/ui/UiOverride/index.d.ts +2 -5
- package/types/ui/UiOverride/override.d.ts +2 -18
- package/types/ui/Unauthorized.d.ts +0 -6
- package/types/ui/agentAttrs.d.ts +4 -11
- package/types/ui/index.d.ts +9 -5
- package/types/ui/overlayLayer.d.ts +4 -24
- package/types/ui/overlayPosition.d.ts +0 -12
- package/types/ui/recipe/badgeRecipe.d.ts +2 -2
- package/types/ui/recipe/buttonRecipe.d.ts +2 -2
- package/types/ui/recipe/factory.d.ts +1 -21
- package/types/ui/recipe/index.d.ts +0 -14
- package/types/ui/recipe/inputRecipe.d.ts +3 -3
- package/types/ui/sliceNamesOf.d.ts +78 -0
- package/types/ui/triggerSlot.d.ts +2 -12
- package/types/vendor/use-agentic/AgentProgress.d.ts +12 -0
- package/types/vendor/use-agentic/AgentSession.d.ts +94 -2
- package/types/vendor/use-agentic/Compaction.d.ts +42 -5
- package/types/vendor/use-agentic/Reference.d.ts +56 -0
- package/types/vendor/use-agentic/ToolRunner.d.ts +31 -1
- package/types/vendor/use-agentic/Transcript.d.ts +4 -1
- package/types/vendor/use-agentic/index.d.ts +1 -0
- package/types/vendor/use-agentic/types.d.ts +109 -7
- package/types/webkit/RenderLayer.d.ts +11 -0
- package/types/webkit/index.d.ts +1 -2
- package/types/webkit/lazy.d.ts +3 -12
- package/types/webkit/{createRobotPage.d.ts → seoPages.d.ts} +4 -0
- package/types/webkit/useBodyScrollLock.d.ts +0 -1
- package/types/webkit/useCamera.d.ts +1 -1
- package/types/webkit/useContact.d.ts +1 -1
- package/types/webkit/useDebounce.d.ts +0 -1
- package/types/webkit/useEscapeKey.d.ts +1 -4
- package/types/webkit/useFetch.d.ts +1 -6
- package/types/webkit/useFrameRuntime.d.ts +1 -1
- package/types/webkit/useGeoLocation.d.ts +1 -1
- package/types/webkit/usePageTool.d.ts +2 -9
- package/types/webkit/usePurchase.d.ts +1 -4
- package/types/webkit/useScreenScope.d.ts +2 -13
- package/ui/Agent/Attach.tsx +5 -4
- package/ui/Agent/Bubble.tsx +51 -31
- package/ui/Agent/Chat.tsx +114 -102
- package/ui/Agent/ChatCommands.ts +5 -21
- package/ui/Agent/Composer.tsx +110 -28
- package/ui/Agent/Dock.tsx +176 -16
- package/ui/Agent/Guide.tsx +1 -5
- package/ui/Agent/History.tsx +1 -18
- package/ui/Agent/Launcher.tsx +2 -2
- package/ui/Agent/Markdown.tsx +40 -14
- package/ui/Agent/MentionNode.ts +54 -0
- package/ui/Agent/Menu.tsx +8 -5
- package/ui/Agent/Question.tsx +1 -6
- package/ui/Agent/Queued.tsx +3 -6
- package/ui/Agent/Refer.tsx +40 -0
- package/ui/Agent/RichInput.tsx +146 -0
- package/ui/Agent/Skip.tsx +3 -15
- package/ui/Agent/Steps.tsx +33 -0
- package/ui/Agent/ToolCard.tsx +32 -0
- package/ui/Agent/Zone.tsx +15 -31
- package/ui/Agent/agentSessionOf.ts +115 -15
- package/ui/Agent/attachment.ts +5 -42
- package/ui/Agent/fetchRunner.ts +3 -15
- package/ui/Agent/index.ts +1 -6
- package/ui/Agent/mentionDraft.ts +91 -0
- package/ui/Agent/tokenCount.ts +1 -5
- package/ui/Agent/useChatAttachments.ts +2 -9
- package/ui/Agent/useChatQueue.ts +12 -14
- package/ui/Agent/useChatReferences.ts +51 -0
- package/ui/Agent/useChatVoice.ts +2 -23
- package/ui/Agent/useDraftRecall.ts +0 -9
- package/ui/Agent/useKeyboardInset.ts +0 -7
- package/ui/Agent/useReferenceMenu.ts +93 -0
- package/ui/Agent/useSlashMenu.ts +0 -3
- package/ui/Agent/voice.ts +8 -43
- package/ui/Badge.tsx +0 -2
- package/ui/BottomSheet.tsx +2 -5
- package/ui/Button.tsx +9 -45
- package/ui/ClientSide.tsx +0 -2
- package/ui/Clipboard.tsx +0 -1
- package/ui/Constant/Doc.tsx +274 -265
- package/ui/Constant/Graph.tsx +11 -3
- package/ui/Constant/schemaGraph.ts +0 -9
- package/ui/Copy.tsx +2 -3
- package/ui/CsrImage.tsx +9 -9
- package/ui/Data/CardList.tsx +2 -17
- package/ui/Data/Dashboard.tsx +2 -5
- package/ui/Data/Item.tsx +2 -3
- package/ui/Data/ListContainer.tsx +15 -61
- package/ui/Data/Pagination.tsx +3 -22
- package/ui/Data/QueryMaker.tsx +1 -8
- package/ui/Data/RefPicker.tsx +1 -8
- package/ui/Data/TableList.tsx +2 -15
- package/ui/DatePicker.tsx +1 -12
- package/ui/Dialog/LegacyModal.tsx +3 -7
- package/ui/Dialog/Modal.tsx +3 -4
- package/ui/Dialog/Provider.tsx +85 -7
- package/ui/Dialog/index.tsx +1 -5
- package/ui/DraggableList.tsx +1 -4
- package/ui/Dropdown.tsx +4 -17
- package/ui/Empty.tsx +4 -12
- package/ui/Field/Choice.tsx +1 -1
- package/ui/Field/Collection.tsx +7 -29
- package/ui/Field/DateField.tsx +2 -7
- package/ui/Field/Label.tsx +0 -1
- package/ui/Field/NumberField.tsx +0 -1
- package/ui/Field/Relation.tsx +79 -199
- package/ui/Field/Text.tsx +25 -86
- package/ui/Field/index.tsx +0 -9
- package/ui/Field/lightRefCache.ts +61 -0
- package/ui/Field/useRelationOptions.ts +97 -0
- package/ui/Image.tsx +35 -65
- package/ui/InfiniteScroll.tsx +3 -21
- package/ui/Input.tsx +82 -174
- package/ui/Layout/Role.tsx +42 -0
- package/ui/Layout/Sider.tsx +82 -1
- package/ui/Layout/TopInset.tsx +23 -1
- package/ui/Layout/index.ts +3 -9
- package/ui/LegacyModal.tsx +1 -12
- package/ui/Link/Action.tsx +29 -0
- package/ui/Link/Anchor.tsx +118 -0
- package/ui/Link/index.tsx +7 -8
- package/ui/Load/Edit_Client.tsx +2 -37
- package/ui/Load/Page.tsx +3 -6
- package/ui/Load/Pagination.tsx +4 -19
- package/ui/Load/Stream.tsx +0 -12
- package/ui/Load/Units.tsx +13 -86
- package/ui/Load/View.tsx +4 -21
- package/ui/Loading/ProgressBar.tsx +0 -4
- package/ui/Loading/Skeleton.tsx +14 -0
- package/ui/Loading/Spin.tsx +34 -5
- package/ui/Loading/index.ts +0 -5
- package/ui/Loading/index_.tsx +2 -12
- package/ui/Menu.tsx +3 -21
- package/ui/Modal.tsx +0 -17
- package/ui/Model/AdminPanel.tsx +2 -5
- package/ui/Model/DraftBar.tsx +3 -14
- package/ui/Model/EditModal.tsx +11 -48
- package/ui/Model/EditWrapper.tsx +2 -3
- package/ui/Model/LoadStore.tsx +18 -0
- package/ui/Model/NewWrapper_Client.tsx +1 -1
- package/ui/Model/Remove.tsx +4 -12
- package/ui/Model/RemoveWrapper.tsx +2 -3
- package/ui/Model/SureToRemove.tsx +4 -13
- package/ui/Model/ViewEditModal.tsx +0 -6
- package/ui/Model/ViewModal.tsx +1 -5
- package/ui/Model/ViewWrapper.tsx +1 -2
- package/ui/Model/draftScope.ts +0 -7
- package/ui/Model/index_.tsx +2 -22
- package/ui/Pagination.tsx +4 -12
- package/ui/Popconfirm.tsx +3 -18
- package/ui/Portal.tsx +2 -3
- package/ui/Radio.tsx +1 -5
- package/ui/RecentTime.tsx +19 -31
- package/ui/Reference/Panel.tsx +102 -6
- package/ui/Reference/Segmented.tsx +5 -11
- package/ui/Reference/{style.ts → docUi.ts} +10 -2
- package/ui/Reference/index.ts +3 -7
- package/ui/Refresh.tsx +79 -13
- package/ui/ScreenNavigator.tsx +8 -13
- package/ui/Select.tsx +29 -37
- package/ui/Signal/Endpoint.tsx +154 -0
- package/ui/Signal/Listener.tsx +1 -4
- package/ui/Signal/Object.tsx +67 -73
- package/ui/Signal/RestApi.tsx +30 -76
- package/ui/Signal/WebSocket.tsx +253 -2
- package/ui/Signal/endpointEntries.ts +3 -5
- package/ui/Signal/index.ts +1 -3
- package/ui/Signal/style.ts +1 -2
- package/ui/Switch.tsx +1 -5
- package/ui/System/CSR.tsx +29 -109
- package/ui/System/Client.tsx +15 -19
- package/ui/System/Common.tsx +31 -22
- package/ui/System/Messages.tsx +2 -2
- package/ui/System/Reconnect.tsx +1 -6
- package/ui/System/Root.tsx +1 -4
- package/ui/System/SSR.tsx +10 -16
- package/ui/System/ThemeToggle.tsx +15 -0
- package/ui/System/index.tsx +2 -2
- package/ui/Tab/Provider.tsx +115 -7
- package/ui/Tab/index.tsx +1 -4
- package/ui/Table.tsx +7 -23
- package/ui/Toast.tsx +9 -16
- package/ui/ToggleSelect.tsx +10 -24
- package/ui/Tooltip.tsx +2 -8
- package/ui/UiOverride/{context.ts → UiOverride.tsx} +54 -42
- package/ui/UiOverride/index.ts +9 -6
- package/ui/UiOverride/override.ts +2 -18
- package/ui/Unauthorized.tsx +1 -8
- package/ui/agentAttrs.ts +9 -12
- package/ui/index.ts +20 -5
- package/ui/overlayLayer.ts +4 -25
- package/ui/overlayPosition.ts +2 -14
- package/ui/recipe/badgeRecipe.ts +1 -1
- package/ui/recipe/buttonRecipe.ts +4 -4
- package/ui/recipe/factory.ts +1 -22
- package/ui/recipe/index.ts +1 -14
- package/ui/recipe/inputRecipe.ts +2 -2
- package/ui/sliceNamesOf.ts +26 -0
- package/ui/styles.css +195 -1
- package/ui/triggerSlot.tsx +2 -12
- package/vendor/use-agentic/AgentProgress.ts +13 -1
- package/vendor/use-agentic/AgentSession.ts +313 -29
- package/vendor/use-agentic/AgenticSurface.ts +2 -0
- package/vendor/use-agentic/Compaction.ts +91 -9
- package/vendor/use-agentic/Reference.ts +99 -0
- package/vendor/use-agentic/ToolRunner.ts +77 -2
- package/vendor/use-agentic/Transcript.ts +15 -4
- package/vendor/use-agentic/WIRE.md +16 -2
- package/vendor/use-agentic/httpRunner.ts +19 -4
- package/vendor/use-agentic/index.ts +1 -1
- package/vendor/use-agentic/types.ts +121 -10
- package/webkit/RenderLayer.tsx +45 -0
- package/webkit/bootCsr.tsx +4 -57
- package/webkit/index.ts +1 -2
- package/webkit/lazy.tsx +3 -13
- package/webkit/{createRobotPage.ts → seoPages.ts} +5 -0
- package/webkit/useBodyScrollLock.tsx +0 -6
- package/webkit/useCamera.tsx +10 -28
- package/webkit/useCodepush.tsx +8 -31
- package/webkit/useContact.tsx +1 -8
- package/webkit/useCsrValues.ts +203 -428
- package/webkit/useDebounce.ts +0 -3
- package/webkit/useEscapeKey.tsx +1 -12
- package/webkit/useFetch.ts +7 -13
- package/webkit/useFrameRuntime.ts +5 -43
- package/webkit/useGeoLocation.tsx +1 -1
- package/webkit/useLocation.ts +5 -8
- package/webkit/usePageTool.tsx +2 -9
- package/webkit/usePurchase.tsx +17 -33
- package/webkit/useScreenScope.tsx +2 -13
- package/client/fetch.ts +0 -1
- package/client/frameDebug.ts +0 -29
- package/common/deepObjectify.ts +0 -42
- package/common/dynamicRecord.ts +0 -12
- package/common/formatPhone.ts +0 -7
- package/common/getAllPropertyDescriptors.ts +0 -13
- package/common/lowerlize.ts +0 -4
- package/common/mergeVersion.ts +0 -10
- package/common/pathGet.ts +0 -13
- package/common/pathGetLoose.ts +0 -31
- package/common/pathSet.ts +0 -28
- package/common/plainFieldsOf.ts +0 -13
- package/common/randomPicks.ts +0 -12
- package/common/websocketAuth.ts +0 -24
- package/constant/deserialize.ts +0 -98
- package/dictionary/agentTurn.dictionary.ts +0 -33
- package/document/schema.ts +0 -24
- package/fetch/fetchType/clientSignal.type.ts +0 -22
- package/local/apps/akan/akan-local.db +0 -0
- package/local/apps/akan/akan-local.db-shm +0 -0
- package/local/apps/akan/akan-local.db-wal +0 -0
- package/local/apps/akan/akan-local_solid.db +0 -0
- package/local/apps/akan/akan-local_solid.db-shm +0 -0
- package/local/apps/akan/akan-local_solid.db-wal +0 -0
- package/local/apps/serverLifecycle/serverLifecycle-local.db +0 -0
- package/local/apps/serverLifecycle/serverLifecycle-local.db-shm +0 -0
- package/local/apps/serverLifecycle/serverLifecycle-local.db-wal +0 -0
- package/local/apps/serverLifecycle/serverLifecycle-local_solid.db +0 -0
- package/local/apps/serverLifecycle/serverLifecycle-local_solid.db-shm +0 -0
- package/local/apps/serverLifecycle/serverLifecycle-local_solid.db-wal +0 -0
- package/server/artifact/manifestTypes.ts +0 -19
- package/server/assetEncoding.ts +0 -27
- package/server/consoleEvaluator.ts +0 -51
- package/server/di/index.ts +0 -4
- package/server/di/resolveAdaptorHierarchy.ts +0 -91
- package/server/di/resolveServiceHierarchy.ts +0 -47
- package/server/hmr/changeBatch.ts +0 -14
- package/server/hmr/index.ts +0 -4
- package/server/metadata.tsx +0 -198
- package/server/proxy/akanResponse.ts +0 -16
- package/server/proxy/bunRequestFields.ts +0 -12
- package/server/rscPartialCommit.ts +0 -3
- package/server/rscPatchSafety.ts +0 -57
- package/server/rscWorkerReplay.ts +0 -49
- package/server/subRouteIndexDocument.tsx +0 -61
- package/service/predefinedAdaptor/deepseekLlm.ts +0 -82
- package/service/predefinedAdaptor/sqlDescriptor.ts +0 -25
- package/store/agent/storeSurface.ts +0 -28
- package/store/agent/types.ts +0 -16
- package/store/agentic/useFileFieldTool.ts +0 -221
- package/store/stateInfo.ts +0 -66
- package/test/playwright.config.base.ts +0 -48
- package/test/playwright.pageAgent.ts +0 -41
- package/test/sample.ts +0 -19
- package/types/client/fetch.d.ts +0 -1
- package/types/client/frameDebug.d.ts +0 -3
- package/types/common/deepObjectify.d.ts +0 -6
- package/types/common/dynamicRecord.d.ts +0 -14
- package/types/common/formatPhone.d.ts +0 -2
- package/types/common/getAllPropertyDescriptors.d.ts +0 -5
- package/types/common/isPhoneNumber.d.ts +0 -2
- package/types/common/lowerlize.d.ts +0 -2
- package/types/common/mergeVersion.d.ts +0 -10
- package/types/common/pathGet.d.ts +0 -1
- package/types/common/pathGetLoose.d.ts +0 -8
- package/types/common/pathSet.d.ts +0 -3
- package/types/common/plainFieldsOf.d.ts +0 -6
- package/types/common/randomPicks.d.ts +0 -1
- package/types/common/splitVersion.d.ts +0 -11
- package/types/common/websocketAuth.d.ts +0 -19
- package/types/common/websocketBinaryFrame.d.ts +0 -17
- package/types/constant/deserialize.d.ts +0 -10
- package/types/dictionary/agentTurn.dictionary.d.ts +0 -1
- package/types/document/schema.d.ts +0 -5
- package/types/fetch/fetchType/clientSignal.type.d.ts +0 -16
- package/types/server/artifact/manifestTypes.d.ts +0 -16
- package/types/server/assetEncoding.d.ts +0 -7
- package/types/server/consoleEvaluator.d.ts +0 -2
- package/types/server/di/index.d.ts +0 -4
- package/types/server/di/resolveAdaptorHierarchy.d.ts +0 -21
- package/types/server/di/resolveServiceHierarchy.d.ts +0 -13
- package/types/server/di.d.ts +0 -1
- package/types/server/hmr/changeBatch.d.ts +0 -13
- package/types/server/hmr/index.d.ts +0 -4
- package/types/server/hmr.d.ts +0 -1
- package/types/server/metadata.d.ts +0 -22
- package/types/server/proxy/akanResponse.d.ts +0 -7
- package/types/server/proxy/bunRequestFields.d.ts +0 -1
- package/types/server/rscPartialCommit.d.ts +0 -1
- package/types/server/rscPatchSafety.d.ts +0 -8
- package/types/server/rscWorkerReplay.d.ts +0 -32
- package/types/server/subRouteIndexDocument.d.ts +0 -8
- package/types/service/predefinedAdaptor/deepseekLlm.d.ts +0 -19
- package/types/service/predefinedAdaptor/sqlDescriptor.d.ts +0 -5
- package/types/store/agent/storeSurface.d.ts +0 -14
- package/types/store/agent/types.d.ts +0 -15
- package/types/store/agentic/useFileFieldTool.d.ts +0 -41
- package/types/store/stateInfo.d.ts +0 -23
- package/types/test/playwright.config.base.d.ts +0 -9
- package/types/test/playwright.pageAgent.d.ts +0 -12
- package/types/test/sample.d.ts +0 -15
- package/types/ui/Agent/Context.d.ts +0 -13
- package/types/ui/Agent/Mic.d.ts +0 -8
- package/types/ui/Agent/Section.d.ts +0 -10
- package/types/ui/Agent/StateKey.d.ts +0 -16
- package/types/ui/Agent/Tool.d.ts +0 -15
- package/types/ui/Agent/Transcript.d.ts +0 -13
- package/types/ui/Agent/markdownSpans.d.ts +0 -2
- package/types/ui/Agent/sessionHistory.d.ts +0 -14
- package/types/ui/Agent/sessionView.d.ts +0 -15
- package/types/ui/Dialog/Action.d.ts +0 -5
- package/types/ui/Dialog/Close.d.ts +0 -6
- package/types/ui/Dialog/Content.d.ts +0 -6
- package/types/ui/Dialog/Title.d.ts +0 -5
- package/types/ui/Dialog/Trigger.d.ts +0 -6
- package/types/ui/Dialog/context.d.ts +0 -18
- package/types/ui/Layout/LeftSider.d.ts +0 -11
- package/types/ui/Layout/RightSider.d.ts +0 -12
- package/types/ui/Layout/Template.d.ts +0 -7
- package/types/ui/Layout/TopLeftAction.d.ts +0 -6
- package/types/ui/Layout/Unit.d.ts +0 -9
- package/types/ui/Layout/View.d.ts +0 -8
- package/types/ui/Layout/Zone.d.ts +0 -6
- package/types/ui/Link/Back.d.ts +0 -7
- package/types/ui/Link/Close.d.ts +0 -7
- package/types/ui/Link/CsrLink.d.ts +0 -2
- package/types/ui/Link/Lang.d.ts +0 -8
- package/types/ui/Link/SsrLink.d.ts +0 -2
- package/types/ui/Link/types.d.ts +0 -50
- package/types/ui/Loading/Area.d.ts +0 -9
- package/types/ui/Loading/Button.d.ts +0 -7
- package/types/ui/Loading/Input.d.ts +0 -7
- package/types/ui/Model/LoadInit.d.ts +0 -10
- package/types/ui/Model/LoadView.d.ts +0 -10
- package/types/ui/Reference/Collapse.d.ts +0 -11
- package/types/ui/Reference/Summary.d.ts +0 -13
- package/types/ui/Reference/Toolbar.d.ts +0 -21
- package/types/ui/Reference/dictText.d.ts +0 -6
- package/types/ui/Signal/Message.d.ts +0 -23
- package/types/ui/Signal/PubSub.d.ts +0 -24
- package/types/ui/Signal/Request.d.ts +0 -8
- package/types/ui/System/DevModeToggle.d.ts +0 -1
- package/types/ui/System/Gtag.d.ts +0 -4
- package/types/ui/System/frameCssVars.d.ts +0 -5
- package/types/ui/Tab/Menu.d.ts +0 -12
- package/types/ui/Tab/Menus.d.ts +0 -6
- package/types/ui/Tab/Panel.d.ts +0 -8
- package/types/ui/Tab/context.d.ts +0 -11
- package/types/ui/UiOverride/Provider.d.ts +0 -15
- package/types/ui/UiOverride/createOverridable.d.ts +0 -9
- package/types/ui/UiOverride/useUiOverride.d.ts +0 -7
- package/types/ui/UiOverride/useUiRecipe.d.ts +0 -8
- package/types/webkit/createSitemapPage.d.ts +0 -4
- package/ui/Agent/Context.tsx +0 -49
- package/ui/Agent/Mic.tsx +0 -27
- package/ui/Agent/Section.tsx +0 -24
- package/ui/Agent/StateKey.tsx +0 -46
- package/ui/Agent/Tool.tsx +0 -59
- package/ui/Agent/Transcript.tsx +0 -33
- package/ui/Agent/markdownSpans.tsx +0 -49
- package/ui/Agent/sessionHistory.ts +0 -62
- package/ui/Agent/sessionView.ts +0 -38
- package/ui/Dialog/Action.tsx +0 -15
- package/ui/Dialog/Close.tsx +0 -18
- package/ui/Dialog/Content.tsx +0 -11
- package/ui/Dialog/Title.tsx +0 -15
- package/ui/Dialog/Trigger.tsx +0 -18
- package/ui/Dialog/context.ts +0 -32
- package/ui/Layout/LeftSider.tsx +0 -43
- package/ui/Layout/RightSider.tsx +0 -47
- package/ui/Layout/Template.tsx +0 -11
- package/ui/Layout/TopLeftAction.tsx +0 -28
- package/ui/Layout/Unit.tsx +0 -19
- package/ui/Layout/View.tsx +0 -12
- package/ui/Layout/Zone.tsx +0 -10
- package/ui/Link/Back.tsx +0 -15
- package/ui/Link/Close.tsx +0 -20
- package/ui/Link/CsrLink.tsx +0 -46
- package/ui/Link/Lang.tsx +0 -16
- package/ui/Link/SsrLink.tsx +0 -72
- package/ui/Link/types.ts +0 -55
- package/ui/Loading/Area.tsx +0 -27
- package/ui/Loading/Button.tsx +0 -15
- package/ui/Loading/Input.tsx +0 -15
- package/ui/Model/LoadInit.tsx +0 -11
- package/ui/Model/LoadView.tsx +0 -11
- package/ui/Reference/Collapse.tsx +0 -26
- package/ui/Reference/Summary.tsx +0 -25
- package/ui/Reference/Toolbar.tsx +0 -44
- package/ui/Reference/dictText.ts +0 -9
- package/ui/Signal/Message.tsx +0 -215
- package/ui/Signal/PubSub.tsx +0 -201
- package/ui/Signal/Request.tsx +0 -11
- package/ui/System/DevModeToggle.tsx +0 -19
- package/ui/System/Gtag.tsx +0 -69
- package/ui/System/frameCssVars.ts +0 -25
- package/ui/Tab/Menu.tsx +0 -70
- package/ui/Tab/Menus.tsx +0 -13
- package/ui/Tab/Panel.tsx +0 -25
- package/ui/Tab/context.ts +0 -20
- package/ui/UiOverride/Provider.tsx +0 -26
- package/ui/UiOverride/createOverridable.tsx +0 -25
- package/ui/UiOverride/useUiOverride.ts +0 -15
- package/ui/UiOverride/useUiRecipe.ts +0 -15
- package/webkit/createSitemapPage.ts +0 -4
package/server/memoryLimit.ts
CHANGED
|
@@ -1,13 +1,5 @@
|
|
|
1
1
|
import fs from "node:fs";
|
|
2
2
|
|
|
3
|
-
/**
|
|
4
|
-
* Where a process's RSS ceiling comes from, shared by every host that recycles a child to bound it.
|
|
5
|
-
*
|
|
6
|
-
* A budget can be declared explicitly, discovered from the container, or absent altogether, so each
|
|
7
|
-
* host asks for a fraction of whatever limit it can find and supplies its own fallback for the last
|
|
8
|
-
* case. Kept as its own module rather than living on a host class because both `akanjs/server` and
|
|
9
|
-
* the dev host in `@akanjs/devkit` need it, and neither should import the other's stack to get it.
|
|
10
|
-
*/
|
|
11
3
|
export class MemoryLimit {
|
|
12
4
|
static readonly #cgroupLimitFiles = ["/sys/fs/cgroup/memory.max", "/sys/fs/cgroup/memory/memory.limit_in_bytes"];
|
|
13
5
|
/** Host-level cgroup files report effectively-unlimited sentinels; anything this large means "no limit". */
|
|
@@ -47,11 +39,7 @@ export class MemoryLimit {
|
|
|
47
39
|
return null;
|
|
48
40
|
}
|
|
49
41
|
|
|
50
|
-
/**
|
|
51
|
-
* Resolves a ceiling from, in order: an explicit MiB env, an explicit byte env, a fraction of the
|
|
52
|
-
* container's memory limit, and finally the caller's fallback (`null` to leave the process
|
|
53
|
-
* unbounded).
|
|
54
|
-
*/
|
|
42
|
+
/** Order: MiB env, byte env, `limitFraction` of the container limit, then `fallbackBytes` (`null` = unbounded). */
|
|
55
43
|
static resolveMaxRssBytes({
|
|
56
44
|
megabytesEnv,
|
|
57
45
|
bytesEnv,
|
|
@@ -4,7 +4,7 @@ import { OAuthRedirect } from "./OAuthRedirect";
|
|
|
4
4
|
import type { OAuthAuthorizeErrorCode, OAuthAuthorizeParams, OAuthClientRecord } from "./oauthTypes";
|
|
5
5
|
|
|
6
6
|
export interface OAuthAuthorizeContext {
|
|
7
|
-
/**
|
|
7
|
+
/** `null` when the request's `client_id` resolved to no client. */
|
|
8
8
|
client: OAuthClientRecord | null;
|
|
9
9
|
issuer: string;
|
|
10
10
|
/** The one resource this server issues tokens for — the MCP endpoint's canonical URL. */
|
|
@@ -14,11 +14,7 @@ export interface OAuthAuthorizeContext {
|
|
|
14
14
|
export type OAuthAuthorizeResult = { ok: true; params: OAuthAuthorizeParams } | { ok: false; response: Response };
|
|
15
15
|
|
|
16
16
|
export class OAuthAuthorize {
|
|
17
|
-
|
|
18
|
-
* Validates in the order RFC 6749 §4.1.2.1 prescribes: the client and its redirect URI first, answered with a page
|
|
19
|
-
* because nothing may be redirected to an unverified destination; everything after that is answered through the
|
|
20
|
-
* redirect URI the client registered, with `state` and `iss` so the client can match and trust the answer.
|
|
21
|
-
*/
|
|
17
|
+
|
|
22
18
|
static parse(url: URL, { client, issuer, resource }: OAuthAuthorizeContext): OAuthAuthorizeResult {
|
|
23
19
|
const param = (name: string) => url.searchParams.get(name) ?? undefined;
|
|
24
20
|
const clientId = param("client_id");
|
|
@@ -48,7 +44,7 @@ export class OAuthAuthorize {
|
|
|
48
44
|
return fail("unauthorized_client", "This client is not registered for the authorization_code grant.");
|
|
49
45
|
const codeChallenge = param("code_challenge");
|
|
50
46
|
const method = param("code_challenge_method");
|
|
51
|
-
|
|
47
|
+
|
|
52
48
|
if (method !== undefined && method !== OAuthPkce.method)
|
|
53
49
|
return fail("invalid_request", `code_challenge_method "${method}" is not supported; use ${OAuthPkce.method}.`);
|
|
54
50
|
if (!OAuthPkce.isChallenge(codeChallenge)) return fail("invalid_request", "A PKCE code_challenge is required.");
|
|
@@ -5,7 +5,7 @@ import type { OAuthClientRecord, OAuthRedirectPolicy } from "./oauthTypes";
|
|
|
5
5
|
|
|
6
6
|
export interface OAuthClientIdMetadataResult {
|
|
7
7
|
client: OAuthClientRecord;
|
|
8
|
-
/**
|
|
8
|
+
/** From `Cache-Control` max-age (else `defaultTtlMs`), clamped to `minTtlMs`..`maxTtlMs`. */
|
|
9
9
|
ttlMs: number;
|
|
10
10
|
}
|
|
11
11
|
|
|
@@ -15,18 +15,10 @@ export type OAuthDocumentFetch = (input: string | URL | Request, init?: RequestI
|
|
|
15
15
|
|
|
16
16
|
export interface OAuthClientIdMetadataFetchOptions extends OAuthRedirectPolicy {
|
|
17
17
|
fetchImpl?: OAuthDocumentFetch;
|
|
18
|
-
/**
|
|
19
|
-
* Resolves the document's host before it is fetched and refuses one whose addresses are not all public. On by
|
|
20
|
-
* default with the system resolver; `false` trusts the name alone, for a deployment whose egress policy already
|
|
21
|
-
* closes the private range.
|
|
22
|
-
*/
|
|
18
|
+
/** SSRF check: every resolved address must be public. Default: system resolver; `false` trusts the name alone. */
|
|
23
19
|
resolve?: OAuthAddressLookup | false;
|
|
24
20
|
}
|
|
25
21
|
|
|
26
|
-
/**
|
|
27
|
-
* OAuth Client ID Metadata Documents (draft-ietf-oauth-client-id-metadata-document): a client whose `client_id`
|
|
28
|
-
* is an HTTPS URL hosts its own registration there, and the server reads it instead of holding a registry.
|
|
29
|
-
*/
|
|
30
22
|
export class OAuthClientIdMetadata {
|
|
31
23
|
static readonly maxBytes = 64 * 1024;
|
|
32
24
|
static readonly timeoutMs = 5_000;
|
|
@@ -40,13 +32,6 @@ export class OAuthClientIdMetadata {
|
|
|
40
32
|
return !!url && url.protocol === "https:" && url.pathname !== "/" && !url.username && !url.password;
|
|
41
33
|
}
|
|
42
34
|
|
|
43
|
-
/**
|
|
44
|
-
* Whether a document URL may be fetched on the client's say-so. The fetch API never shows the address a name
|
|
45
|
-
* resolved to, so this judges the name: no address literals (a client hosts its document under a name), no
|
|
46
|
-
* single-label or reserved-suffix names, no explicit port. A public name that resolves into the private range is
|
|
47
|
-
* `resolvesPublicly`'s to catch; the rebinding window between that lookup and the fetch is the residual the
|
|
48
|
-
* deployment's egress policy owns — the SSRF section of the draft says as much.
|
|
49
|
-
*/
|
|
50
35
|
static isFetchable(url: URL): boolean {
|
|
51
36
|
const host = url.hostname.toLowerCase();
|
|
52
37
|
if (url.port) return false;
|
|
@@ -55,11 +40,6 @@ export class OAuthClientIdMetadata {
|
|
|
55
40
|
return !/\.(?:localhost|local|internal|lan|home|arpa)$/.test(host);
|
|
56
41
|
}
|
|
57
42
|
|
|
58
|
-
/**
|
|
59
|
-
* Whether every address the name resolves to is public. The resolver is asked separately from the fetch, so a
|
|
60
|
-
* name that flips between the two (DNS rebinding) is the residual; what this closes is the ordinary case of a
|
|
61
|
-
* public name parked on a private address, which `isFetchable` cannot see.
|
|
62
|
-
*/
|
|
63
43
|
static async resolvesPublicly(hostname: string, resolve: OAuthAddressLookup = OAuthClientIdMetadata.#lookup) {
|
|
64
44
|
try {
|
|
65
45
|
const addresses = await resolve(hostname);
|
|
@@ -96,10 +76,6 @@ export class OAuthClientIdMetadata {
|
|
|
96
76
|
return client ? { client, ttlMs: OAuthClientIdMetadata.#ttl(res.headers.get("cache-control")) } : null;
|
|
97
77
|
}
|
|
98
78
|
|
|
99
|
-
/**
|
|
100
|
-
* §4: `client_id` MUST equal the URL the document was fetched from, `client_name` and `redirect_uris` MUST be
|
|
101
|
-
* present. Only public clients are accepted — `private_key_jwt` needs a JWKS the token endpoint does not read.
|
|
102
|
-
*/
|
|
103
79
|
static validate(clientId: string, json: unknown, policy: OAuthRedirectPolicy = {}): OAuthClientRecord | null {
|
|
104
80
|
if (!json || typeof json !== "object" || Array.isArray(json)) return null;
|
|
105
81
|
const doc = json as Record<string, unknown>;
|
|
@@ -122,7 +98,6 @@ export class OAuthClientIdMetadata {
|
|
|
122
98
|
};
|
|
123
99
|
}
|
|
124
100
|
|
|
125
|
-
/** The system resolver, under the same deadline as the fetch: a resolver that hangs is a fetch that hangs. */
|
|
126
101
|
static readonly #lookup: OAuthAddressLookup = async (hostname) =>
|
|
127
102
|
await Promise.race([
|
|
128
103
|
lookup(hostname, { all: true }),
|
|
@@ -15,10 +15,6 @@ export class OAuthErrors {
|
|
|
15
15
|
|
|
16
16
|
static readonly noStore = { "cache-control": "no-store", pragma: "no-cache" } as const;
|
|
17
17
|
|
|
18
|
-
/**
|
|
19
|
-
* RFC 6749 §5.2. `invalid_client` is 401, and when the client authenticated with the `Authorization` header the
|
|
20
|
-
* answer names that scheme back — the one case the RFC requires a `WWW-Authenticate` on a token response.
|
|
21
|
-
*/
|
|
22
18
|
static token(
|
|
23
19
|
error: OAuthTokenErrorCode,
|
|
24
20
|
description: string,
|
|
@@ -37,11 +33,6 @@ export class OAuthErrors {
|
|
|
37
33
|
return Response.json({ error, error_description: description }, { status: 400, headers: OAuthErrors.noStore });
|
|
38
34
|
}
|
|
39
35
|
|
|
40
|
-
/**
|
|
41
|
-
* An authorization error that travels back through the redirect URI (RFC 6749 §4.1.2.1) — legal only once that
|
|
42
|
-
* URI has been matched against the client's registration, which is why `OAuthAuthorize` answers the client and
|
|
43
|
-
* redirect checks with a page instead.
|
|
44
|
-
*/
|
|
45
36
|
static redirect(
|
|
46
37
|
redirectUri: string,
|
|
47
38
|
{ error, description, state, iss }: OAuthRedirectParams & { error: OAuthAuthorizeErrorCode; description?: string },
|
|
@@ -53,10 +44,6 @@ export class OAuthErrors {
|
|
|
53
44
|
return OAuthErrors.#located(redirectUri, { code, state, iss });
|
|
54
45
|
}
|
|
55
46
|
|
|
56
|
-
/**
|
|
57
|
-
* The answer when nothing may be redirected to: an unknown client or an unregistered redirect URI, where the
|
|
58
|
-
* destination the request named is the one thing that cannot be trusted with the user (RFC 6749 §4.1.2.1).
|
|
59
|
-
*/
|
|
60
47
|
static page(status: number, title: string, detail: string) {
|
|
61
48
|
const body = `<!doctype html><meta charset="utf-8"><title>${OAuthErrors.#escape(title)}</title><main style="font:16px system-ui;max-width:32rem;margin:4rem auto"><h1>${OAuthErrors.#escape(title)}</h1><p>${OAuthErrors.#escape(detail)}</p></main>`;
|
|
62
49
|
return new Response(body, {
|
|
@@ -5,19 +5,13 @@ export interface OAuthMetadataProps {
|
|
|
5
5
|
registrationEndpoint?: string;
|
|
6
6
|
revocationEndpoint?: string;
|
|
7
7
|
scopesSupported?: string[];
|
|
8
|
-
/** Whether
|
|
8
|
+
/** Whether an HTTPS `client_id` is read as a metadata document; defaults to `true`. */
|
|
9
9
|
clientIdMetadataDocumentSupported?: boolean;
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
export class OAuthMetadata {
|
|
13
13
|
static readonly wellKnownSuffix = "/.well-known/oauth-authorization-server";
|
|
14
14
|
|
|
15
|
-
/**
|
|
16
|
-
* The RFC 8414 document. Three fixed fields are load-bearing for MCP clients: `code_challenge_methods_supported`
|
|
17
|
-
* (a client MUST refuse to proceed without it), `client_id_metadata_document_supported` (the registration path the
|
|
18
|
-
* spec prefers), and `authorization_response_iss_parameter_supported` (which is what obliges the client to check
|
|
19
|
-
* `iss` on the way back).
|
|
20
|
-
*/
|
|
21
15
|
static document({
|
|
22
16
|
issuer,
|
|
23
17
|
authorizationEndpoint,
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import { createHash, timingSafeEqual } from "node:crypto";
|
|
2
2
|
|
|
3
|
-
/** RFC 7636 with `S256` only: OAuth 2.1 drops `plain`, and an MCP client refuses a server whose metadata offers nothing else. */
|
|
4
3
|
export class OAuthPkce {
|
|
5
4
|
static readonly method = "S256";
|
|
6
|
-
|
|
7
5
|
static readonly #verifier = /^[A-Za-z0-9\-._~]{43,128}$/;
|
|
8
6
|
|
|
9
7
|
static readonly #challenge = /^[A-Za-z0-9\-_]{43}$/;
|
|
@@ -18,11 +18,6 @@ export class OAuthRedirect {
|
|
|
18
18
|
return url.protocol === "http:" && OAuthRedirect.loopbackHosts.has(url.hostname);
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
-
/**
|
|
22
|
-
* What may be registered: HTTPS, loopback HTTP, or a private-use scheme the deployment named. The MCP spec allows
|
|
23
|
-
* only the first two; the third exists because Cursor's desktop client registers `cursor://…/oauth/callback`, and
|
|
24
|
-
* a server that refuses it cannot be used from Cursor at all.
|
|
25
|
-
*/
|
|
26
21
|
static isRegistrable(uri: string, { allowedSchemes = [] }: OAuthRedirectPolicy = {}): boolean {
|
|
27
22
|
const url = OAuthRedirect.parse(uri);
|
|
28
23
|
if (!url) return false;
|
|
@@ -30,10 +25,6 @@ export class OAuthRedirect {
|
|
|
30
25
|
return allowedSchemes.includes(url.protocol.slice(0, -1));
|
|
31
26
|
}
|
|
32
27
|
|
|
33
|
-
/**
|
|
34
|
-
* Exact match against what was registered, except that a loopback redirect may vary its port: a native client
|
|
35
|
-
* binds whichever port is free at the time (RFC 8252 §7.3), and Claude Code picks one at random per session.
|
|
36
|
-
*/
|
|
37
28
|
static matches(registered: readonly string[], presented: string): boolean {
|
|
38
29
|
if (registered.includes(presented)) return true;
|
|
39
30
|
const url = OAuthRedirect.parse(presented);
|
|
@@ -4,7 +4,6 @@ import type { OAuthClientAuthMethod, OAuthClientMetadata, OAuthClientRecord, OAu
|
|
|
4
4
|
|
|
5
5
|
export type OAuthRegistrationResult = { ok: true; client: OAuthClientMetadata } | { ok: false; response: Response };
|
|
6
6
|
|
|
7
|
-
/** RFC 7591 Dynamic Client Registration — the request's validation and the response's shape; the identifier is the caller's. */
|
|
8
7
|
export class OAuthRegistration {
|
|
9
8
|
static readonly authMethods: readonly OAuthClientAuthMethod[] = ["none", "client_secret_post", "client_secret_basic"];
|
|
10
9
|
static readonly grantTypes: readonly string[] = ["authorization_code", "refresh_token"];
|
|
@@ -70,7 +69,6 @@ export class OAuthRegistration {
|
|
|
70
69
|
return Array.isArray(value) && value.every((entry) => typeof entry === "string");
|
|
71
70
|
}
|
|
72
71
|
|
|
73
|
-
/** The list as sent when every entry is allowed, the default when absent, `null` when something else was named. */
|
|
74
72
|
static #subset(value: unknown, allowed: readonly string[], fallback: string[]): string[] | null {
|
|
75
73
|
if (value === undefined) return fallback;
|
|
76
74
|
if (!OAuthRegistration.#strings(value) || !value.length) return null;
|
|
@@ -6,7 +6,7 @@ export type OAuthTokenTypeHint = "access_token" | "refresh_token";
|
|
|
6
6
|
|
|
7
7
|
export interface OAuthRevocationParams {
|
|
8
8
|
token: string;
|
|
9
|
-
/**
|
|
9
|
+
/** Advisory only; an unknown hint reads as none. */
|
|
10
10
|
tokenTypeHint?: OAuthTokenTypeHint;
|
|
11
11
|
client: OAuthClientCredential;
|
|
12
12
|
}
|
|
@@ -15,14 +15,9 @@ export type OAuthRevocationParseResult =
|
|
|
15
15
|
| { ok: true; params: OAuthRevocationParams }
|
|
16
16
|
| { ok: false; response: Response };
|
|
17
17
|
|
|
18
|
-
/**
|
|
19
|
-
* RFC 7009 Token Revocation — the request's shape and the two answers it allows. What a token *is* and whose it
|
|
20
|
-
* is are the issuer's to decide, so the parse hands back the credential and the token and nothing more.
|
|
21
|
-
*/
|
|
22
18
|
export class OAuthRevocation {
|
|
23
19
|
static readonly hints: readonly OAuthTokenTypeHint[] = ["access_token", "refresh_token"];
|
|
24
20
|
|
|
25
|
-
/** §2.1: form-encoded like the token endpoint, with the same client authentication and `token` required. */
|
|
26
21
|
static async parse(req: Request): Promise<OAuthRevocationParseResult> {
|
|
27
22
|
const type = req.headers.get("content-type")?.toLowerCase() ?? "";
|
|
28
23
|
if (!type.startsWith("application/x-www-form-urlencoded"))
|
|
@@ -45,11 +40,6 @@ export class OAuthRevocation {
|
|
|
45
40
|
};
|
|
46
41
|
}
|
|
47
42
|
|
|
48
|
-
/**
|
|
49
|
-
* §2.2: a revoked token and a token the server never knew get the same empty 200, so the endpoint cannot be used
|
|
50
|
-
* to test whether a token exists. The only refusals are a malformed request and a client that failed to
|
|
51
|
-
* authenticate, both answered as the token endpoint would.
|
|
52
|
-
*/
|
|
53
43
|
static success() {
|
|
54
44
|
return new Response(null, { status: 200, headers: OAuthErrors.noStore });
|
|
55
45
|
}
|
|
@@ -12,10 +12,7 @@ export interface OAuthTokenSuccess {
|
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
export class OAuthToken {
|
|
15
|
-
|
|
16
|
-
* RFC 6749 §4.1.3 and §6: the token endpoint speaks form encoding only, and a client authenticates through the
|
|
17
|
-
* `Authorization` header or the body, never both — two credentials on one request is a request nobody can audit.
|
|
18
|
-
*/
|
|
15
|
+
|
|
19
16
|
static async parse(req: Request): Promise<OAuthTokenParseResult> {
|
|
20
17
|
const type = req.headers.get("content-type")?.toLowerCase() ?? "";
|
|
21
18
|
if (!type.startsWith("application/x-www-form-urlencoded"))
|
|
@@ -51,11 +48,6 @@ export class OAuthToken {
|
|
|
51
48
|
return OAuthToken.#fail("unsupported_grant_type", "Only authorization_code and refresh_token are supported.");
|
|
52
49
|
}
|
|
53
50
|
|
|
54
|
-
/**
|
|
55
|
-
* Whether the credential presented is this client's. A public client has none to present, and a secret it sends
|
|
56
|
-
* anyway is ignored rather than refused — OAuth 2.1 §2.3 lets a public client keep naming itself. A confidential
|
|
57
|
-
* client must present its secret, compared as hashes in constant time.
|
|
58
|
-
*/
|
|
59
51
|
static authenticate(
|
|
60
52
|
client: OAuthClientRecord,
|
|
61
53
|
credential: OAuthClientCredential,
|
|
@@ -82,14 +74,11 @@ export class OAuthToken {
|
|
|
82
74
|
);
|
|
83
75
|
}
|
|
84
76
|
|
|
85
|
-
/**
|
|
86
|
-
* `null` when both channels carried a credential. RFC 6749 §2.3.1 form-encodes the two halves of the Basic pair.
|
|
87
|
-
* Shared with the revocation endpoint, which RFC 7009 §2.1 authenticates the same way.
|
|
88
|
-
*/
|
|
77
|
+
/** `null` when both channels carried a credential. Basic halves are form-encoded (RFC 6749 §2.3.1). */
|
|
89
78
|
static credentialOf(req: Request, form: URLSearchParams): OAuthClientCredential | null {
|
|
90
79
|
const header = req.headers.get("authorization");
|
|
91
80
|
const bodySecret = form.get("client_secret") ?? undefined;
|
|
92
|
-
if (header
|
|
81
|
+
if (header && /^Basic /i.test(header)) {
|
|
93
82
|
if (bodySecret !== undefined) return null;
|
|
94
83
|
const decoded = Buffer.from(header.slice("Basic ".length).trim(), "base64").toString("utf8");
|
|
95
84
|
const separator = decoded.indexOf(":");
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export type OAuthClientAuthMethod = "none" | "client_secret_post" | "client_secret_basic";
|
|
2
2
|
|
|
3
|
-
/**
|
|
3
|
+
/** Declared in the app's option, registered over RFC 7591, or read off its `client_id` URL. */
|
|
4
4
|
export type OAuthClientSource = "static" | "dynamic" | "metadataDocument";
|
|
5
5
|
|
|
6
6
|
export interface OAuthClientRecord {
|
|
@@ -13,7 +13,6 @@ export interface OAuthClientRecord {
|
|
|
13
13
|
source: OAuthClientSource;
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
/** The metadata a registration request carries, before the server assigns an identifier to it. */
|
|
17
16
|
export type OAuthClientMetadata = Pick<
|
|
18
17
|
OAuthClientRecord,
|
|
19
18
|
"clientName" | "redirectUris" | "grantTypes" | "tokenEndpointAuthMethod"
|
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createHmac,
|
|
3
|
+
createPrivateKey,
|
|
4
|
+
createPublicKey,
|
|
5
|
+
diffieHellman,
|
|
6
|
+
generateKeyPairSync,
|
|
7
|
+
hkdfSync,
|
|
8
|
+
type KeyObject,
|
|
9
|
+
randomBytes,
|
|
10
|
+
timingSafeEqual,
|
|
11
|
+
} from "node:crypto";
|
|
12
|
+
import { Transform } from "node:stream";
|
|
13
|
+
import type { SnapshotDecryptor } from "./snapshotRestore";
|
|
14
|
+
import type { SnapshotEncryption } from "./snapshotTypes";
|
|
15
|
+
import type { SnapshotEncryptor } from "./sqliteSnapshot";
|
|
16
|
+
|
|
17
|
+
type Aead = (
|
|
18
|
+
key: Uint8Array,
|
|
19
|
+
nonce: Uint8Array,
|
|
20
|
+
) => {
|
|
21
|
+
encrypt(data: Uint8Array): Uint8Array;
|
|
22
|
+
decrypt(data: Uint8Array): Uint8Array;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
export class AgeEncryption {
|
|
26
|
+
static readonly intro = "age-encryption.org/v1";
|
|
27
|
+
static readonly chunkSize = 64 * 1024;
|
|
28
|
+
static readonly tagSize = 16;
|
|
29
|
+
static readonly #x25519Info = "age-encryption.org/v1/X25519";
|
|
30
|
+
static readonly #spkiPrefix = Buffer.from("302a300506032b656e032100", "hex");
|
|
31
|
+
static readonly #pkcs8Prefix = Buffer.from("302e020100300506032b656e04220420", "hex");
|
|
32
|
+
static readonly #bech32Charset = "qpzry9x8gf2tvdw0s3jn54khce6mua7l";
|
|
33
|
+
|
|
34
|
+
static async encryptor(recipients: string[]): Promise<SnapshotEncryptor> {
|
|
35
|
+
const aead = await AgeEncryption.#aead();
|
|
36
|
+
const keys = recipients.map((recipient) => AgeEncryption.parseRecipient(recipient));
|
|
37
|
+
const encryption: SnapshotEncryption = { format: "age", recipients };
|
|
38
|
+
return { encryption, extension: ".age", transform: () => AgeEncryption.#encryptStream(aead, keys) };
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
static async decryptor(identities: string[]): Promise<SnapshotDecryptor> {
|
|
42
|
+
const aead = await AgeEncryption.#aead();
|
|
43
|
+
const keys = identities.map((identity) => AgeEncryption.parseIdentity(identity));
|
|
44
|
+
return { transform: () => AgeEncryption.#decryptStream(aead, keys) };
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
static async fromEnv(): Promise<SnapshotEncryptor | null> {
|
|
48
|
+
const recipients = (process.env.AKAN_BACKUP_RECIPIENT ?? "")
|
|
49
|
+
.split(",")
|
|
50
|
+
.map((value) => value.trim())
|
|
51
|
+
.filter(Boolean);
|
|
52
|
+
return recipients.length ? await AgeEncryption.encryptor(recipients) : null;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
static identitiesIn(text: string) {
|
|
56
|
+
return text
|
|
57
|
+
.split("\n")
|
|
58
|
+
.map((line) => line.trim())
|
|
59
|
+
.filter((line) => line.startsWith("AGE-SECRET-KEY-1"));
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
static generateIdentity() {
|
|
63
|
+
const { privateKey, publicKey } = generateKeyPairSync("x25519");
|
|
64
|
+
const secret = privateKey.export({ format: "der", type: "pkcs8" }).subarray(-32);
|
|
65
|
+
const pub = publicKey.export({ format: "der", type: "spki" }).subarray(-32);
|
|
66
|
+
return {
|
|
67
|
+
identity: AgeEncryption.#bech32Encode("age-secret-key-", secret).toUpperCase(),
|
|
68
|
+
recipient: AgeEncryption.#bech32Encode("age", pub),
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
static parseRecipient(recipient: string): KeyObject {
|
|
73
|
+
const bytes = AgeEncryption.#bech32Decode(recipient.trim(), "age");
|
|
74
|
+
return createPublicKey({ key: Buffer.concat([AgeEncryption.#spkiPrefix, bytes]), format: "der", type: "spki" });
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
static parseIdentity(identity: string): KeyObject {
|
|
78
|
+
const bytes = AgeEncryption.#bech32Decode(identity.trim().toLowerCase(), "age-secret-key-");
|
|
79
|
+
return createPrivateKey({ key: Buffer.concat([AgeEncryption.#pkcs8Prefix, bytes]), format: "der", type: "pkcs8" });
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
static async #aead(): Promise<Aead> {
|
|
83
|
+
const { chacha20poly1305 } = await import("@noble/ciphers/chacha.js");
|
|
84
|
+
return (key, nonce) => chacha20poly1305(key, nonce);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
static #header(aead: Aead, recipients: KeyObject[], fileKey: Buffer) {
|
|
88
|
+
const lines = [AgeEncryption.intro];
|
|
89
|
+
for (const recipient of recipients) {
|
|
90
|
+
const ephemeral = generateKeyPairSync("x25519");
|
|
91
|
+
const share = ephemeral.publicKey.export({ format: "der", type: "spki" }).subarray(-32);
|
|
92
|
+
const recipientRaw = recipient.export({ format: "der", type: "spki" }).subarray(-32);
|
|
93
|
+
const shared = diffieHellman({ privateKey: ephemeral.privateKey, publicKey: recipient });
|
|
94
|
+
const wrapKey = AgeEncryption.#hkdf(shared, Buffer.concat([share, recipientRaw]), AgeEncryption.#x25519Info);
|
|
95
|
+
const body = aead(wrapKey, new Uint8Array(12)).encrypt(fileKey);
|
|
96
|
+
lines.push(`-> X25519 ${AgeEncryption.#b64(share)}`, ...AgeEncryption.#wrap(AgeEncryption.#b64(body)));
|
|
97
|
+
}
|
|
98
|
+
const beforeMac = `${lines.join("\n")}\n---`;
|
|
99
|
+
const mac = createHmac("sha256", AgeEncryption.#hkdf(fileKey, Buffer.alloc(0), "header"))
|
|
100
|
+
.update(beforeMac)
|
|
101
|
+
.digest();
|
|
102
|
+
return Buffer.from(`${beforeMac} ${AgeEncryption.#b64(mac)}\n`);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
static #encryptStream(aead: Aead, recipients: KeyObject[]) {
|
|
106
|
+
const fileKey = randomBytes(16);
|
|
107
|
+
const payloadNonce = randomBytes(16);
|
|
108
|
+
const streamKey = AgeEncryption.#hkdf(fileKey, payloadNonce, "payload");
|
|
109
|
+
let pending: Buffer = Buffer.alloc(0);
|
|
110
|
+
let counter = 0n;
|
|
111
|
+
let started = false;
|
|
112
|
+
const seal = (chunk: Buffer, last: boolean) =>
|
|
113
|
+
aead(streamKey, AgeEncryption.#chunkNonce(counter++, last)).encrypt(chunk);
|
|
114
|
+
return new Transform({
|
|
115
|
+
transform(chunk: Buffer, _encoding, callback) {
|
|
116
|
+
if (!started) {
|
|
117
|
+
this.push(AgeEncryption.#header(aead, recipients, fileKey));
|
|
118
|
+
this.push(payloadNonce);
|
|
119
|
+
started = true;
|
|
120
|
+
}
|
|
121
|
+
pending = pending.length ? Buffer.concat([pending, chunk]) : chunk;
|
|
122
|
+
|
|
123
|
+
while (pending.length > AgeEncryption.chunkSize) {
|
|
124
|
+
this.push(seal(pending.subarray(0, AgeEncryption.chunkSize), false));
|
|
125
|
+
pending = pending.subarray(AgeEncryption.chunkSize);
|
|
126
|
+
}
|
|
127
|
+
callback();
|
|
128
|
+
},
|
|
129
|
+
flush(callback) {
|
|
130
|
+
if (!started) {
|
|
131
|
+
this.push(AgeEncryption.#header(aead, recipients, fileKey));
|
|
132
|
+
this.push(payloadNonce);
|
|
133
|
+
}
|
|
134
|
+
this.push(seal(pending, true));
|
|
135
|
+
callback();
|
|
136
|
+
},
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
static #decryptStream(aead: Aead, identities: KeyObject[]) {
|
|
141
|
+
let buffered: Buffer = Buffer.alloc(0);
|
|
142
|
+
let streamKey: Uint8Array | null = null;
|
|
143
|
+
let counter = 0n;
|
|
144
|
+
const sealedSize = AgeEncryption.chunkSize + AgeEncryption.tagSize;
|
|
145
|
+
const open = (chunk: Buffer, last: boolean) => {
|
|
146
|
+
if (!streamKey) throw new Error("age payload before header");
|
|
147
|
+
return aead(streamKey, AgeEncryption.#chunkNonce(counter++, last)).decrypt(chunk);
|
|
148
|
+
};
|
|
149
|
+
return new Transform({
|
|
150
|
+
transform(chunk: Buffer, _encoding, callback) {
|
|
151
|
+
try {
|
|
152
|
+
buffered = buffered.length ? Buffer.concat([buffered, chunk]) : chunk;
|
|
153
|
+
if (!streamKey) {
|
|
154
|
+
const parsed = AgeEncryption.#readHeader(aead, buffered, identities);
|
|
155
|
+
if (!parsed) return callback();
|
|
156
|
+
streamKey = parsed.streamKey;
|
|
157
|
+
buffered = buffered.subarray(parsed.consumed);
|
|
158
|
+
}
|
|
159
|
+
while (buffered.length > sealedSize) {
|
|
160
|
+
this.push(open(buffered.subarray(0, sealedSize), false));
|
|
161
|
+
buffered = buffered.subarray(sealedSize);
|
|
162
|
+
}
|
|
163
|
+
callback();
|
|
164
|
+
} catch (error) {
|
|
165
|
+
callback(error as Error);
|
|
166
|
+
}
|
|
167
|
+
},
|
|
168
|
+
flush(callback) {
|
|
169
|
+
try {
|
|
170
|
+
if (!streamKey) throw new Error("truncated age header");
|
|
171
|
+
const plain = open(buffered, true);
|
|
172
|
+
if (plain.length === 0 && counter > 1n) throw new Error("age payload ends with an empty chunk");
|
|
173
|
+
this.push(plain);
|
|
174
|
+
callback();
|
|
175
|
+
} catch (error) {
|
|
176
|
+
callback(error as Error);
|
|
177
|
+
}
|
|
178
|
+
},
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
static #readHeader(aead: Aead, data: Buffer, identities: KeyObject[]) {
|
|
183
|
+
const macAt = data.indexOf("\n--- ");
|
|
184
|
+
if (macAt < 0) return null;
|
|
185
|
+
const macEnd = data.indexOf("\n", macAt + 1);
|
|
186
|
+
if (macEnd < 0 || data.length < macEnd + 1 + 16) return null;
|
|
187
|
+
const text = data.subarray(0, macAt).toString("utf8");
|
|
188
|
+
const lines = text.split("\n");
|
|
189
|
+
if (lines[0] !== AgeEncryption.intro) throw new Error("not an age v1 file");
|
|
190
|
+
const stanzas: { args: string[]; body: Buffer }[] = [];
|
|
191
|
+
for (let idx = 1; idx < lines.length; ) {
|
|
192
|
+
const line = lines[idx++] ?? "";
|
|
193
|
+
if (!line.startsWith("-> ")) throw new Error("malformed age stanza");
|
|
194
|
+
let body = "";
|
|
195
|
+
for (;;) {
|
|
196
|
+
const bodyLine = lines[idx++] ?? "";
|
|
197
|
+
body += bodyLine;
|
|
198
|
+
if (bodyLine.length < 64) break;
|
|
199
|
+
}
|
|
200
|
+
stanzas.push({ args: line.slice(3).split(" "), body: Buffer.from(body, "base64") });
|
|
201
|
+
}
|
|
202
|
+
const fileKey = AgeEncryption.#unwrapFileKey(aead, stanzas, identities);
|
|
203
|
+
const macText = data.subarray(0, macAt + 4).toString("utf8");
|
|
204
|
+
const mac = Buffer.from(data.subarray(macAt + 5, macEnd).toString("utf8"), "base64");
|
|
205
|
+
const expected = createHmac("sha256", AgeEncryption.#hkdf(fileKey, Buffer.alloc(0), "header"))
|
|
206
|
+
.update(macText)
|
|
207
|
+
.digest();
|
|
208
|
+
if (mac.length !== expected.length || !timingSafeEqual(mac, expected)) throw new Error("age header MAC mismatch");
|
|
209
|
+
const nonce = data.subarray(macEnd + 1, macEnd + 17);
|
|
210
|
+
return { streamKey: AgeEncryption.#hkdf(fileKey, nonce, "payload"), consumed: macEnd + 17 };
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
static #unwrapFileKey(aead: Aead, stanzas: { args: string[]; body: Buffer }[], identities: KeyObject[]) {
|
|
214
|
+
for (const identity of identities) {
|
|
215
|
+
const ourPublic = createPublicKey(identity).export({ format: "der", type: "spki" }).subarray(-32);
|
|
216
|
+
for (const { args, body } of stanzas) {
|
|
217
|
+
if (args[0] !== "X25519" || !args[1]) continue;
|
|
218
|
+
const share = Buffer.from(args[1], "base64");
|
|
219
|
+
const peer = createPublicKey({
|
|
220
|
+
key: Buffer.concat([AgeEncryption.#spkiPrefix, share]),
|
|
221
|
+
format: "der",
|
|
222
|
+
type: "spki",
|
|
223
|
+
});
|
|
224
|
+
const shared = diffieHellman({ privateKey: identity, publicKey: peer });
|
|
225
|
+
if (shared.every((byte) => byte === 0)) continue;
|
|
226
|
+
const wrapKey = AgeEncryption.#hkdf(shared, Buffer.concat([share, ourPublic]), AgeEncryption.#x25519Info);
|
|
227
|
+
try {
|
|
228
|
+
return Buffer.from(aead(wrapKey, new Uint8Array(12)).decrypt(body));
|
|
229
|
+
} catch {
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
throw new Error("no identity matches any age recipient in this file");
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
static #chunkNonce(counter: bigint, last: boolean) {
|
|
237
|
+
const nonce = new Uint8Array(12);
|
|
238
|
+
let value = counter;
|
|
239
|
+
for (let idx = 10; idx >= 0; idx--) {
|
|
240
|
+
nonce[idx] = Number(value & 0xffn);
|
|
241
|
+
value >>= 8n;
|
|
242
|
+
}
|
|
243
|
+
nonce[11] = last ? 1 : 0;
|
|
244
|
+
return nonce;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
static #hkdf(ikm: Uint8Array, salt: Uint8Array, info: string) {
|
|
248
|
+
return new Uint8Array(hkdfSync("sha256", ikm, salt, info, 32));
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
static #b64(bytes: Uint8Array) {
|
|
252
|
+
return Buffer.from(bytes).toString("base64").replace(/=+$/, "");
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
static #wrap(value: string) {
|
|
256
|
+
const lines: string[] = [];
|
|
257
|
+
for (let idx = 0; idx < value.length; idx += 64) lines.push(value.slice(idx, idx + 64));
|
|
258
|
+
|
|
259
|
+
if (value.length % 64 === 0) lines.push("");
|
|
260
|
+
return lines;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
static #bech32Polymod(values: number[]) {
|
|
264
|
+
const generators = [0x3b6a57b2, 0x26508e6d, 0x1ea119fa, 0x3d4233dd, 0x2a1462b3];
|
|
265
|
+
let chk = 1;
|
|
266
|
+
for (const value of values) {
|
|
267
|
+
const top = chk >>> 25;
|
|
268
|
+
chk = ((chk & 0x1ffffff) << 5) ^ value;
|
|
269
|
+
for (let idx = 0; idx < 5; idx++) if ((top >>> idx) & 1) chk ^= generators[idx] ?? 0;
|
|
270
|
+
}
|
|
271
|
+
return chk;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
static #hrpExpand(hrp: string) {
|
|
275
|
+
const codes = [...hrp].map((char) => char.charCodeAt(0));
|
|
276
|
+
return [...codes.map((code) => code >>> 5), 0, ...codes.map((code) => code & 31)];
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
static #convertBits(data: Iterable<number>, from: number, to: number, pad: boolean) {
|
|
280
|
+
let acc = 0;
|
|
281
|
+
let bits = 0;
|
|
282
|
+
const out: number[] = [];
|
|
283
|
+
const max = (1 << to) - 1;
|
|
284
|
+
for (const value of data) {
|
|
285
|
+
acc = (acc << from) | value;
|
|
286
|
+
bits += from;
|
|
287
|
+
while (bits >= to) {
|
|
288
|
+
bits -= to;
|
|
289
|
+
out.push((acc >>> bits) & max);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
if (pad && bits > 0) out.push((acc << (to - bits)) & max);
|
|
293
|
+
else if (!pad && (bits >= from || (acc << (to - bits)) & max)) throw new Error("invalid bech32 padding");
|
|
294
|
+
return out;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
static #bech32Encode(hrp: string, bytes: Uint8Array) {
|
|
298
|
+
const data = AgeEncryption.#convertBits(bytes, 8, 5, true);
|
|
299
|
+
const polymod = AgeEncryption.#bech32Polymod([...AgeEncryption.#hrpExpand(hrp), ...data, 0, 0, 0, 0, 0, 0]) ^ 1;
|
|
300
|
+
const checksum = Array.from({ length: 6 }, (_, idx) => (polymod >>> (5 * (5 - idx))) & 31);
|
|
301
|
+
return `${hrp}1${[...data, ...checksum].map((value) => AgeEncryption.#bech32Charset[value]).join("")}`;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
static #bech32Decode(value: string, expectedHrp: string) {
|
|
305
|
+
const lower = value.toLowerCase();
|
|
306
|
+
const separator = lower.lastIndexOf("1");
|
|
307
|
+
const hrp = lower.slice(0, separator);
|
|
308
|
+
if (separator < 1 || hrp !== expectedHrp) throw new Error(`expected an ${expectedHrp}1… key`);
|
|
309
|
+
const data = [...lower.slice(separator + 1)].map((char) => AgeEncryption.#bech32Charset.indexOf(char));
|
|
310
|
+
if (data.length < 6 || data.some((code) => code < 0)) throw new Error("invalid bech32 characters");
|
|
311
|
+
if (AgeEncryption.#bech32Polymod([...AgeEncryption.#hrpExpand(hrp), ...data]) !== 1)
|
|
312
|
+
throw new Error("invalid bech32 checksum");
|
|
313
|
+
const bytes = Buffer.from(AgeEncryption.#convertBits(data.slice(0, -6), 5, 8, false));
|
|
314
|
+
if (bytes.length !== 32) throw new Error("age keys are 32 bytes");
|
|
315
|
+
return bytes;
|
|
316
|
+
}
|
|
317
|
+
}
|