@dxos/functions 0.8.4-staging.60fe92afc8 → 0.9.1-main.c7dcc2e112
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.
|
@@ -379,7 +379,6 @@ var FunctionContext = class extends Resource {
|
|
|
379
379
|
context;
|
|
380
380
|
client;
|
|
381
381
|
db;
|
|
382
|
-
queues;
|
|
383
382
|
opts;
|
|
384
383
|
constructor(context, opts) {
|
|
385
384
|
super();
|
|
@@ -403,7 +402,6 @@ var FunctionContext = class extends Resource {
|
|
|
403
402
|
}) : void 0;
|
|
404
403
|
await this.db?.setSpaceRoot(this.context.spaceRootUrl ?? failedInvariant("spaceRootUrl missing in context"));
|
|
405
404
|
await this.db?.open();
|
|
406
|
-
this.queues = this.client && this.context.spaceId ? this.client.constructQueueFactory(this.context.spaceId) : void 0;
|
|
407
405
|
}
|
|
408
406
|
async _close() {
|
|
409
407
|
await this.db?.close();
|
|
@@ -412,7 +410,7 @@ var FunctionContext = class extends Resource {
|
|
|
412
410
|
createLayer() {
|
|
413
411
|
assertState(this._lifecycleState === LifecycleState.OPEN, "FunctionContext is not open");
|
|
414
412
|
const dbLayer = this.db ? Database2.layer(this.db) : Database2.notAvailable;
|
|
415
|
-
const feedLayer = this.
|
|
413
|
+
const feedLayer = this.db ? createFeedServiceLayer(this.db) : Feed.notAvailable;
|
|
416
414
|
const credentials = dbLayer ? credentialsLayerFromDatabase({
|
|
417
415
|
caching: true
|
|
418
416
|
}).pipe(Layer4.provide(dbLayer)) : configuredCredentialsLayer([]);
|
|
@@ -427,7 +425,7 @@ var FunctionContext = class extends Resource {
|
|
|
427
425
|
spaceRootUrl: this.context.spaceRootUrl,
|
|
428
426
|
toolkits: this.opts.toolkits?.length ?? 0,
|
|
429
427
|
types: this.opts.types?.length ?? 0
|
|
430
|
-
}, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L:
|
|
428
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 229, S: this });
|
|
431
429
|
const registryLayer = this.db ? Layer4.succeed(Registry.Service, this.db.graph.registry) : Layer4.succeed(Registry.Service, makeRegistry());
|
|
432
430
|
return Layer4.mergeAll(
|
|
433
431
|
dbLayer,
|
|
@@ -449,7 +447,7 @@ var makeTraceWriterLayer = (traceService) => Layer4.succeed(Trace.TraceService,
|
|
|
449
447
|
write: (eventType, payload) => {
|
|
450
448
|
log2("Writing trace event", {
|
|
451
449
|
eventType: eventType.key
|
|
452
|
-
}, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L:
|
|
450
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 250, S: void 0 });
|
|
453
451
|
traceService.write([
|
|
454
452
|
{
|
|
455
453
|
key: eventType.key,
|
|
@@ -469,7 +467,7 @@ var InternalAiServiceLayer = (functionsAiService) => {
|
|
|
469
467
|
};
|
|
470
468
|
var makeOperationServiceLayer = (functionsService) => {
|
|
471
469
|
const invokeRemote = async (op, input, options) => {
|
|
472
|
-
invariant(op.meta.deployedId, `Operation '${op.meta.key}' has no deployedId; cannot invoke remotely.`, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L:
|
|
470
|
+
invariant(op.meta.deployedId, `Operation '${op.meta.key}' has no deployedId; cannot invoke remotely.`, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 277, S: void 0, A: ["op.meta.deployedId", "`Operation '${op.meta.key}' has no deployedId; cannot invoke remotely.`"] });
|
|
473
471
|
const result = await functionsService.invoke(op.meta.deployedId, input, {
|
|
474
472
|
spaceId: options?.spaceId,
|
|
475
473
|
// Forward the conversation DXN so the remote runtime can rebuild conversation-scoped
|
|
@@ -488,7 +486,7 @@ var makeOperationServiceLayer = (functionsService) => {
|
|
|
488
486
|
return Layer4.succeed(Operation.Service, {
|
|
489
487
|
invoke: (op, input, options) => Effect4.tryPromise(() => invokeRemote(op, input, options)).pipe(Effect4.orDie, Effect4.flatMap((outcome) => outcome.error ? Effect4.die(outcome.error) : Effect4.succeed(outcome.data))),
|
|
490
488
|
schedule: (op, input, _options) => Effect4.sync(() => {
|
|
491
|
-
invariant(op.meta.deployedId, `Operation '${op.meta.key}' has no deployedId; cannot schedule remotely.`, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L:
|
|
489
|
+
invariant(op.meta.deployedId, `Operation '${op.meta.key}' has no deployedId; cannot schedule remotely.`, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 296, S: void 0, A: ["op.meta.deployedId", "`Operation '${op.meta.key}' has no deployedId; cannot schedule remotely.`"] });
|
|
492
490
|
void functionsService.invoke(op.meta.deployedId, input).catch(() => {
|
|
493
491
|
});
|
|
494
492
|
}),
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/services/credentials.ts", "../../../src/services/function-invocation-service.ts", "../../../src/services/tracing.ts", "../../../src/types/url.ts", "../../../src/protocol/protocol.ts", "../../../src/protocol/functions-ai-http-client.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as HttpClient from '@effect/platform/HttpClient';\nimport * as HttpClientRequest from '@effect/platform/HttpClientRequest';\nimport type * as Config from 'effect/Config';\nimport * as Context from 'effect/Context';\nimport * as Effect from 'effect/Effect';\nimport * as Layer from 'effect/Layer';\nimport * as Redacted from 'effect/Redacted';\n\nimport { Credential } from '@dxos/compute';\nimport { Database, Query } from '@dxos/echo';\nimport { AccessToken } from '@dxos/types';\n\nexport class ConfiguredCredentialsService implements Context.Tag.Service<Credential.CredentialsService> {\n constructor(private readonly credentials: Credential.ServiceCredential[] = []) {}\n\n addCredentials(credentials: Credential.ServiceCredential[]): ConfiguredCredentialsService {\n this.credentials.push(...credentials);\n return this;\n }\n\n async queryCredentials(query: Credential.CredentialQuery): Promise<Credential.ServiceCredential[]> {\n return this.credentials.filter((credential) => credential.service === query.service);\n }\n\n async getCredential(query: Credential.CredentialQuery): Promise<Credential.ServiceCredential> {\n const credential = this.credentials.find((credential) => credential.service === query.service);\n if (!credential) {\n throw new Error(`Credential not found for service: ${query.service}`);\n }\n\n return credential;\n }\n}\n\n/**\n * Maps the request to include the given token in the Authorization header.\n */\nexport const withAuthorization = (token: string, kind?: 'Bearer' | 'Basic') =>\n HttpClient.mapRequest((request) => {\n const authorization = kind ? `${kind} ${token}` : token;\n return HttpClientRequest.setHeader(request, 'Authorization', authorization);\n });\n\nexport const configuredCredentialsLayer = (credentials: Credential.ServiceCredential[]) =>\n Layer.succeed(Credential.CredentialsService, new ConfiguredCredentialsService(credentials));\n\nexport const credentialsLayerConfig = (\n credentials: {\n service: string;\n apiKey: Config.Config<Redacted.Redacted<string>>;\n }[],\n) =>\n Layer.effect(\n Credential.CredentialsService,\n Effect.gen(function* () {\n const serviceCredentials = yield* Effect.forEach(credentials, ({ service, apiKey }) =>\n Effect.gen(function* () {\n return {\n service,\n apiKey: Redacted.value(yield* apiKey),\n };\n }),\n );\n\n return new ConfiguredCredentialsService(serviceCredentials);\n }),\n );\n\nexport const credentialsLayerFromDatabase = ({ caching = false }: { caching?: boolean } = {}) =>\n Layer.effect(\n Credential.CredentialsService,\n Effect.gen(function* () {\n const dbService = yield* Database.Service;\n const cache = new Map<string, Credential.ServiceCredential[]>();\n\n const queryCredentials = async (query: Credential.CredentialQuery): Promise<Credential.ServiceCredential[]> => {\n const cacheKey = JSON.stringify(query);\n if (caching && cache.has(cacheKey)) {\n return cache.get(cacheKey)!;\n }\n\n const accessTokens = await dbService.db.query(Query.type(AccessToken.AccessToken)).run();\n const credentials = accessTokens\n .filter((accessToken) => accessToken.source === query.service)\n .map((accessToken) => ({\n service: accessToken.source,\n apiKey: accessToken.token,\n }));\n\n if (caching) {\n cache.set(cacheKey, credentials);\n }\n\n return credentials;\n };\n\n return {\n getCredential: async (query) => {\n const credentials = await queryCredentials(query);\n if (credentials.length === 0) {\n throw new Error(`Credential not found for service: ${query.service}`);\n }\n\n return credentials[0];\n },\n queryCredentials: async (query) => {\n return queryCredentials(query);\n },\n };\n }),\n );\n", "//\n// Copyright 2025 DXOS.org\n//\nimport * as Context from 'effect/Context';\nimport * as Effect from 'effect/Effect';\nimport * as Layer from 'effect/Layer';\n\nimport { type FunctionNotFoundError, Operation } from '@dxos/compute';\n\n/**\n * @deprecated\n */\nexport class FunctionInvocationService extends Context.Tag('@dxos/functions/FunctionInvocationService')<\n FunctionInvocationService,\n {\n invokeFunction<I, O>(functionDef: Operation.Definition<I, O, any>, input: I): Effect.Effect<O>;\n\n resolveFunction(key: string): Effect.Effect<Operation.Definition.Any, FunctionNotFoundError>;\n }\n>() {\n static layerNotAvailable = Layer.succeed(FunctionInvocationService, {\n invokeFunction: () => Effect.die('FunctionInvocationService is not avaialble.'),\n resolveFunction: () => Effect.die('FunctionInvocationService is not available.'),\n });\n\n static invokeFunction = <I, O>(\n functionDef: Operation.Definition<I, O, any>,\n input: I,\n ): Effect.Effect<O, never, FunctionInvocationService> =>\n Effect.serviceFunctionEffect(FunctionInvocationService, (service) => service.invokeFunction)(functionDef, input);\n\n static resolveFunction = (\n key: string,\n ): Effect.Effect<Operation.Definition.Any, FunctionNotFoundError, FunctionInvocationService> =>\n Effect.serviceFunctionEffect(FunctionInvocationService, (service) => service.resolveFunction)(key);\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\n/**\n * Goes into {@link Message['properties']}\n */\nexport const MESSAGE_PROPERTY_TOOL_CALL_ID = 'toolCallId' as const;\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Obj } from '@dxos/echo';\n\n// TODO: use URL scheme for source?\nexport const FUNCTIONS_META_KEY = 'org.dxos.service.function';\n\nexport const FUNCTIONS_PRESET_META_KEY = 'org.dxos.service.function-preset';\n\n/**\n * NOTE: functionId is backend ID, not ECHO object id.\n */\nexport const getUserFunctionIdInMetadata = (meta: Obj.ReadonlyMeta) => {\n return meta.keys.find((key) => key.source === FUNCTIONS_META_KEY)?.id;\n};\n\n/**\n * NOTE: functionId is backend ID, not ECHO object id.\n * Must be called inside Obj.update() since it mutates the meta.\n */\nexport const setUserFunctionIdInMetadata = (meta: Obj.Meta, functionId: string) => {\n const key = meta.keys.find((key) => key.source === FUNCTIONS_META_KEY);\n if (key) {\n if (key.id !== functionId) {\n throw new Error('Metadata mismatch');\n }\n } else {\n meta.keys.push({ source: FUNCTIONS_META_KEY, id: functionId });\n }\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as AnthropicClient from '@effect/ai-anthropic/AnthropicClient';\nimport * as Effect from 'effect/Effect';\nimport * as Layer from 'effect/Layer';\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { AiModelResolver, AiService, OpaqueToolkit } from '@dxos/ai';\nimport { AnthropicResolver } from '@dxos/ai/resolvers';\nimport {\n FunctionError,\n Header,\n InvalidOperationInputError,\n InvalidOperationOutputError,\n Operation,\n Trace,\n} from '@dxos/compute';\nimport { LifecycleState, Resource } from '@dxos/context';\nimport { Database, Feed, JsonSchema, Ref, Registry, type Type } from '@dxos/echo';\nimport {\n createFeedServiceLayer,\n EchoClient,\n type DatabaseImpl,\n makeRegistry,\n type QueueFactory,\n} from '@dxos/echo-client';\nimport { refFromEncodedReference } from '@dxos/echo/internal';\nimport { EffectEx } from '@dxos/effect';\nimport { assertState, failedInvariant, invariant } from '@dxos/invariant';\nimport { PublicKey } from '@dxos/keys';\nimport { log } from '@dxos/log';\nimport { EdgeFunctionEnv, ErrorCodec, type FunctionProtocol, type TraceProtocol } from '@dxos/protocols';\n\nimport { type FunctionServices } from '../sdk';\nimport { configuredCredentialsLayer, credentialsLayerFromDatabase, FunctionInvocationService } from '../services';\nimport { FunctionsAiHttpClient } from './functions-ai-http-client';\n\nexport interface FunctionWrappingOptions {\n /**\n * Additional types to register with the database.\n */\n types?: Type.AnyEntity[];\n\n /**\n * Toolkits to make available via the `OpaqueToolkitProvider`.\n */\n toolkits?: OpaqueToolkit.OpaqueToolkit[];\n}\n\n/**\n * Wraps a function handler made with `defineFunction` to a protocol that the functions-runtime expects.\n */\nexport const wrapFunctionHandler = (\n func: Operation.WithHandler<Operation.Definition.Any>,\n opts: FunctionWrappingOptions = {},\n): FunctionProtocol.Func => {\n if (!Operation.isOperationWithHandler(func)) {\n throw new TypeError('Expected operation with handler');\n }\n\n const serviceTags = func.services.map((service) => service.key);\n\n return {\n meta: {\n key: func.meta.key,\n name: func.meta.name,\n description: func.meta.description,\n inputSchema: JsonSchema.toJsonSchema(func.input),\n outputSchema: func.output === undefined ? undefined : JsonSchema.toJsonSchema(func.output),\n services: func.services.map((service) => service.key),\n },\n handler: async ({ data, context }) => {\n if (\n (serviceTags.includes(Database.Service.key) || serviceTags.includes(Feed.FeedService.key)) &&\n (!context.services.dataService || !context.services.queryService)\n ) {\n throw new FunctionError({\n message: 'Services not provided: dataService, queryService',\n });\n }\n\n // eslint-disable-next-line no-useless-catch\n try {\n if (!SchemaAST.isAnyKeyword(func.input.ast)) {\n try {\n Schema.validateSync(func.input, { onExcessProperty: 'error' })(data);\n } catch (error: any) {\n throw new InvalidOperationInputError({\n message: `Operation input did not match schema (${func.meta.key}): ${error.message}`,\n cause: error,\n });\n }\n }\n\n await using funcContext = await new FunctionContext(context, opts).open();\n\n const types = [...(opts.types ?? []), ...(func.types ?? [])];\n if (types.length > 0) {\n invariant(funcContext.db, 'Database is required for functions with types');\n funcContext.db.graph.registry.add(types);\n }\n\n const dataWithDecodedRefs =\n funcContext.db && !SchemaAST.isAnyKeyword(func.input.ast)\n ? decodeRefsFromSchema(func.input.ast, data, funcContext.db)\n : data;\n\n let result: any = await func.handler(dataWithDecodedRefs);\n\n if (Effect.isEffect(result)) {\n result = await EffectEx.runAndForwardErrors(\n (result as Effect.Effect<unknown, unknown, FunctionServices>).pipe(\n Effect.orDie,\n Effect.provide(funcContext.createLayer()),\n ),\n );\n }\n\n // Flush in-memory ECHO writes before the function scope closes.\n // Writes performed by `db.add` / `db.remove` are buffered in the in-memory\n // `DatabaseImpl` and only pushed across the `DataService` binding when\n // `db.flush({ disk })` is called. `FunctionContext._close` (invoked by the\n // `await using` above) calls `db.close()` but does NOT flush, so mutations\n // performed by handlers that declare `Database.Service` (e.g. `object-create`,\n // `object-update`, `relation-create`) would be silently dropped before reaching\n // the edge `AutomergeReplicator`. Flushing here closes that hole.\n if (serviceTags.includes(Database.Service.key) && funcContext.db) {\n await funcContext.db.flush({ disk: true, indexes: false });\n }\n\n if (func.output && !SchemaAST.isAnyKeyword(func.output.ast)) {\n try {\n Schema.validateSync(func.output, { onExcessProperty: 'error' })(result);\n } catch (error: any) {\n throw new InvalidOperationOutputError({\n message: `Operation output did not match schema (${func.meta.key}): ${error.message}`,\n cause: error,\n });\n }\n }\n\n return result;\n } catch (error) {\n // TODO(dmaretskyi): We might do error wrapping here and add extra context.\n throw error;\n }\n },\n };\n};\n\n/**\n * Container for services and context for a function.\n */\nclass FunctionContext extends Resource {\n readonly context: FunctionProtocol.Context;\n readonly client: EchoClient | undefined;\n db: DatabaseImpl | undefined;\n queues: QueueFactory | undefined;\n readonly opts: FunctionWrappingOptions;\n\n constructor(context: FunctionProtocol.Context, opts: FunctionWrappingOptions) {\n super();\n this.context = context;\n this.opts = opts;\n if (context.services.dataService && context.services.queryService) {\n this.client = new EchoClient().connectToService({\n dataService: context.services.dataService,\n queryService: context.services.queryService,\n queueService: context.services.queueService,\n });\n }\n }\n\n override async _open() {\n await this.client?.open();\n this.db =\n this.client && this.context.spaceId\n ? this.client.constructDatabase({\n spaceId: this.context.spaceId ?? failedInvariant(),\n spaceKey: PublicKey.fromHex(this.context.spaceKey ?? failedInvariant('spaceKey missing in context')),\n reactiveSchemaQuery: false,\n preloadSchemaOnOpen: false,\n })\n : undefined;\n\n await this.db?.setSpaceRoot(this.context.spaceRootUrl ?? failedInvariant('spaceRootUrl missing in context'));\n await this.db?.open();\n this.queues =\n this.client && this.context.spaceId ? this.client.constructQueueFactory(this.context.spaceId) : undefined;\n }\n\n override async _close() {\n await this.db?.close();\n await this.client?.close();\n }\n\n createLayer(): Layer.Layer<FunctionServices> {\n assertState(this._lifecycleState === LifecycleState.OPEN, 'FunctionContext is not open');\n\n const dbLayer = this.db ? Database.layer(this.db) : Database.notAvailable;\n const feedLayer = this.queues ? createFeedServiceLayer(this.queues) : Feed.notAvailable;\n const credentials = dbLayer\n ? credentialsLayerFromDatabase({ caching: true }).pipe(Layer.provide(dbLayer))\n : configuredCredentialsLayer([]);\n\n const aiLayer = this.context.services.functionsAiService\n ? InternalAiServiceLayer(this.context.services.functionsAiService).pipe(Layer.provide(credentials))\n : AiService.notAvailable;\n\n const operationServiceLayer = this.context.services.functionsService\n ? makeOperationServiceLayer(this.context.services.functionsService)\n : unavailableOperationServiceLayer;\n\n const traceWriterLayer = this.context.services.traceService\n ? makeTraceWriterLayer(this.context.services.traceService)\n : Trace.writerLayerNoop;\n\n log('Creating function context layer', {\n traceService: !!this.context.services.traceService,\n functionsService: !!this.context.services.functionsService,\n functionsAiService: !!this.context.services.functionsAiService,\n spaceId: this.context.spaceId,\n spaceRootUrl: this.context.spaceRootUrl,\n toolkits: this.opts.toolkits?.length ?? 0,\n types: this.opts.types?.length ?? 0,\n });\n\n const registryLayer = this.db\n ? Layer.succeed(Registry.Service, this.db.graph.registry)\n : Layer.succeed(Registry.Service, makeRegistry());\n\n return Layer.mergeAll(\n dbLayer,\n feedLayer,\n credentials,\n operationServiceLayer,\n aiLayer,\n OpaqueToolkit.providerLayer(OpaqueToolkit.merge(...(this.opts.toolkits ?? []))),\n traceWriterLayer,\n registryLayer,\n\n // `FunctionInvocationService` is deprecated; new code should yield `Operation.Service`.\n // The cloudflare wrapper provides only the unavailable layer to satisfy the (still-present)\n // type union — handlers that yield it will die at invocation time.\n FunctionInvocationService.layerNotAvailable,\n );\n }\n}\n\n/**\n * Backs `Trace.TraceService` with the EDGE-provided `TraceService` so that operation\n * handlers can write trace events that are forwarded to the runtime's trace sink.\n */\nconst makeTraceWriterLayer = (traceService: TraceProtocol.TraceService): Layer.Layer<Trace.TraceService> =>\n Layer.succeed(Trace.TraceService, {\n write: (eventType, payload) => {\n log('Writing trace event', {\n eventType: eventType.key,\n });\n traceService.write([\n {\n key: eventType.key,\n isEphemeral: eventType.isEphemeral,\n data: payload,\n },\n ]);\n },\n });\n\n/** Proxies Anthropic requests through the EDGE-provided `FunctionsAiService`, BYOK-wrapped. */\nconst InternalAiServiceLayer = (functionsAiService: EdgeFunctionEnv.FunctionsAiService) => {\n // `apiUrl` is a sentinel — the request gets re-routed by the AI gateway in EDGE.\n const httpClient = Header.byokLayer('anthropic.com').pipe(\n Layer.provide(FunctionsAiHttpClient.layer(functionsAiService)),\n );\n const anthropicClient = AnthropicClient.layer({ apiUrl: 'http://internal/provider/anthropic' }).pipe(\n Layer.provide(httpClient),\n );\n const resolver = AnthropicResolver.make().pipe(Layer.provide(anthropicClient));\n return AiModelResolver.AiModelResolver.buildAiService.pipe(Layer.provide(resolver));\n};\n\n/**\n * Backs `Operation.Service` with the EDGE-provided `FunctionsService` so that operation\n * handlers can invoke other deployed operations remotely. The `deployedId` on the operation\n * definition is used as the routing key.\n */\nconst makeOperationServiceLayer = (\n functionsService: EdgeFunctionEnv.FunctionsService,\n): Layer.Layer<Operation.Service> => {\n const invokeRemote = async (\n op: Operation.Definition.Any,\n input: unknown,\n options?: Operation.InvokeOptions,\n ): Promise<{ data?: unknown; error?: Error }> => {\n invariant(op.meta.deployedId, `Operation '${op.meta.key}' has no deployedId; cannot invoke remotely.`);\n const result = await functionsService.invoke(op.meta.deployedId, input, {\n spaceId: options?.spaceId,\n // Forward the conversation DXN so the remote runtime can rebuild conversation-scoped\n // services (e.g. `AiContext.Service`) needed by operations like `GetContext`.\n conversation: options?.conversation,\n });\n if (result._kind === 'success') {\n return { data: result.data };\n }\n return { error: ErrorCodec.decode(result.error) };\n };\n\n return Layer.succeed(Operation.Service, {\n invoke: ((op: Operation.Definition.Any, input: unknown, options?: Operation.InvokeOptions) =>\n Effect.tryPromise(() => invokeRemote(op, input, options)).pipe(\n Effect.orDie,\n Effect.flatMap((outcome) =>\n outcome.error ? Effect.die(outcome.error) : Effect.succeed(outcome.data as never),\n ),\n )) as Operation.OperationService['invoke'],\n schedule: ((op: Operation.Definition.Any, input: unknown, _options?: Operation.InvokeOptions) =>\n Effect.sync(() => {\n invariant(op.meta.deployedId, `Operation '${op.meta.key}' has no deployedId; cannot schedule remotely.`);\n // Fire and forget — schedule is intentionally non-awaiting.\n void functionsService.invoke(op.meta.deployedId, input).catch(() => {\n // Swallow errors — schedule is observability-only.\n });\n })) as Operation.OperationService['schedule'],\n invokePromise: ((op: Operation.Definition.Any, input: unknown, options?: Operation.InvokeOptions) =>\n invokeRemote(op, input, options).catch((error: unknown) => ({\n error: error instanceof Error ? error : new Error(String(error)),\n }))) as Operation.OperationService['invokePromise'],\n } satisfies Operation.OperationService);\n};\n\nconst unavailableOperationServiceLayer = Layer.succeed(Operation.Service, {\n invoke: () => Effect.die('Operation.Service is not available: missing functionsService in EDGE context.'),\n schedule: () => Effect.die('Operation.Service is not available: missing functionsService in EDGE context.'),\n invokePromise: async () => ({\n error: new Error('Operation.Service is not available: missing functionsService in EDGE context.'),\n }),\n} as Operation.OperationService);\n\nconst decodeRefsFromSchema = (ast: SchemaAST.AST, value: unknown, db: DatabaseImpl): unknown => {\n if (value == null) {\n return value;\n }\n\n const encoded = SchemaAST.encodedBoundAST(ast);\n if (Ref.isRefType(encoded)) {\n if (Ref.isRef(value)) {\n return value;\n }\n\n if (typeof value === 'object' && value !== null && typeof (value as any)['/'] === 'string') {\n const resolver = db.graph.createRefResolver({ context: { space: db.spaceId } });\n return refFromEncodedReference(value as any, resolver);\n }\n\n return value;\n }\n\n switch (encoded._tag) {\n case 'TypeLiteral': {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n return value;\n }\n const result: Record<string, unknown> = { ...(value as any) };\n for (const prop of SchemaAST.getPropertySignatures(encoded)) {\n const key = prop.name.toString();\n if (key in result) {\n result[key] = decodeRefsFromSchema(prop.type, (result as any)[key], db);\n }\n }\n return result;\n }\n\n case 'TupleType': {\n if (!Array.isArray(value)) {\n return value;\n }\n\n // For arrays, effect uses TupleType with empty elements and a single rest element.\n if (encoded.elements.length === 0 && encoded.rest.length === 1) {\n const elementType = encoded.rest[0].type;\n return (value as unknown[]).map((item) => decodeRefsFromSchema(elementType, item, db));\n }\n\n return value;\n }\n\n case 'Union': {\n // Optional values are represented as union with undefined.\n const nonUndefined = encoded.types.filter((t) => !SchemaAST.isUndefinedKeyword(t));\n if (nonUndefined.length === 1) {\n return decodeRefsFromSchema(nonUndefined[0], value, db);\n }\n\n // For other unions we can't safely pick a branch without validating.\n return value;\n }\n\n case 'Suspend': {\n return decodeRefsFromSchema(encoded.f(), value, db);\n }\n\n case 'Refinement': {\n return decodeRefsFromSchema(encoded.from, value, db);\n }\n\n default: {\n return value;\n }\n }\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Headers from '@effect/platform/Headers';\nimport * as HttpClient from '@effect/platform/HttpClient';\nimport * as HttpClientError from '@effect/platform/HttpClientError';\nimport * as HttpClientResponse from '@effect/platform/HttpClientResponse';\nimport * as Effect from 'effect/Effect';\nimport * as FiberRef from 'effect/FiberRef';\nimport * as Layer from 'effect/Layer';\nimport * as Stream from 'effect/Stream';\n\nimport { FunctionsAiMemoizationMissError, FunctionsAiUpstreamError } from '@dxos/compute';\nimport { log } from '@dxos/log';\nimport { type EdgeFunctionEnv, ErrorCodec } from '@dxos/protocols';\n\n/**\n * Copy pasted from https://github.com/Effect-TS/effect/blob/main/packages/platform/src/internal/fetchHttpClient.ts\n */\nexport const requestInitTagKey = '@effect/platform/FetchHttpClient/FetchOptions';\n\n/**\n * Shape of the JSON error envelope emitted by the upstream AI gateway (and by the memoization\n * layer that fronts it in test environments).\n *\n * @example\n * ```json\n * {\n * \"type\": \"error\",\n * \"error\": {\n * \"type\": \"memoization_miss\",\n * \"message\": \"No memoized Anthropic conversation found for ...\",\n * \"cacheKey\": \"114dae3db8fe60...\"\n * }\n * }\n * ```\n */\ntype UpstreamErrorEnvelope = {\n type?: string;\n error?: {\n type?: string;\n message?: string;\n cacheKey?: string;\n };\n};\n\nexport class FunctionsAiHttpClient {\n static make = (service: EdgeFunctionEnv.FunctionsAiService) =>\n HttpClient.make((request, url, signal, fiber) => {\n const context = fiber.getFiberRef(FiberRef.currentContext);\n const options: RequestInit = context.unsafeMap.get(requestInitTagKey) ?? {};\n const headers = options.headers\n ? Headers.merge(Headers.fromInput(options.headers), request.headers)\n : request.headers;\n\n const send = (body: BodyInit | undefined) =>\n Effect.tryPromise({\n try: () =>\n service.fetch(\n new Request(url, {\n ...options,\n method: request.method,\n headers,\n body,\n // Note: Don't pass signal - it can't be serialized through RPC\n }),\n ),\n catch: (cause) => {\n log.error('Failed to fetch', { errorSerialized: ErrorCodec.encode(cause as Error) });\n return new HttpClientError.RequestError({\n request,\n reason: 'Transport',\n cause,\n });\n },\n }).pipe(\n Effect.flatMap((response) =>\n // Inspect the body before handing the response to `@effect/ai` so that structured\n // upstream errors surface as typed defects (`FunctionsAiUpstreamError` and friends)\n // rather than as the generic `HttpResponseError` from `@effect/ai/AiError`.\n Effect.flatMap(\n Effect.promise(() => parseUpstreamError(response)),\n (typedError) =>\n typedError ? Effect.die(typedError) : Effect.succeed(HttpClientResponse.fromWeb(request, response)),\n ),\n ),\n );\n\n switch (request.body._tag) {\n case 'Raw':\n case 'Uint8Array':\n return send(request.body.body as any);\n case 'FormData':\n return send(request.body.formData);\n case 'Stream':\n return Stream.toReadableStreamEffect(request.body.stream).pipe(Effect.flatMap(send));\n }\n\n return send(undefined);\n });\n\n static layer = (service: EdgeFunctionEnv.FunctionsAiService) =>\n Layer.succeed(HttpClient.HttpClient, FunctionsAiHttpClient.make(service));\n}\n\n/**\n * Returns a typed error if the response is a non-2xx JSON payload matching\n * {@link UpstreamErrorEnvelope}; otherwise returns `undefined` and the response is forwarded\n * unchanged.\n */\nconst parseUpstreamError = async (response: Response): Promise<Error | undefined> => {\n if (response.ok) {\n return undefined;\n }\n const contentType = response.headers.get('content-type') ?? '';\n if (!contentType.toLowerCase().includes('application/json')) {\n return undefined;\n }\n let body: UpstreamErrorEnvelope;\n try {\n body = (await response.clone().json()) as UpstreamErrorEnvelope;\n } catch {\n return undefined;\n }\n if (!body || body.type !== 'error' || typeof body.error !== 'object' || body.error === null) {\n return undefined;\n }\n const inner = body.error;\n const message = inner.message ?? `Upstream AI service responded with HTTP ${response.status}`;\n if (inner.type === 'memoization_miss' && typeof inner.cacheKey === 'string') {\n return new FunctionsAiMemoizationMissError({\n message,\n context: { cacheKey: inner.cacheKey, status: response.status },\n });\n }\n return new FunctionsAiUpstreamError({\n message,\n context: { type: inner.type, status: response.status, ...(inner.cacheKey ? { cacheKey: inner.cacheKey } : {}) },\n });\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["HttpClient", "HttpClientRequest", "Effect", "Layer", "Redacted", "Credential", "Database", "Query", "AccessToken", "ConfiguredCredentialsService", "credentials", "addCredentials", "push", "queryCredentials", "query", "filter", "credential", "service", "getCredential", "find", "Error", "withAuthorization", "token", "kind", "mapRequest", "request", "authorization", "setHeader", "configuredCredentialsLayer", "succeed", "CredentialsService", "credentialsLayerConfig", "effect", "gen", "serviceCredentials", "forEach", "apiKey", "value", "credentialsLayerFromDatabase", "caching", "dbService", "Service", "cache", "Map", "cacheKey", "JSON", "stringify", "has", "get", "accessTokens", "db", "type", "run", "accessToken", "source", "map", "set", "length", "Context", "Effect", "Layer", "FunctionInvocationService", "Tag", "layerNotAvailable", "succeed", "invokeFunction", "die", "resolveFunction", "functionDef", "input", "serviceFunctionEffect", "service", "key", "MESSAGE_PROPERTY_TOOL_CALL_ID", "FUNCTIONS_META_KEY", "FUNCTIONS_PRESET_META_KEY", "getUserFunctionIdInMetadata", "meta", "keys", "find", "key", "source", "id", "setUserFunctionIdInMetadata", "functionId", "Error", "push", "Effect", "Layer", "Schema", "SchemaAST", "AiModelResolver", "AiService", "AnthropicResolver", "FunctionError", "InvalidOperationInputError", "LifecycleState", "Resource", "Database", "JsonSchema", "createFeedServiceLayer", "EchoClient", "refFromEncodedReference", "EffectEx", "assertState", "failedInvariant", "PublicKey", "log", "ErrorCodec", "configuredCredentialsLayer", "Headers", "HttpClient", "HttpClientError", "HttpClientResponse", "Effect", "FiberRef", "Layer", "Stream", "FunctionsAiMemoizationMissError", "FunctionsAiUpstreamError", "log", "ErrorCodec", "make", "getFiberRef", "options", "unsafeMap", "get", "requestInitTagKey", "headers", "merge", "fromInput", "send", "body", "tryPromise", "service", "Request", "method", "request", "cause", "errorSerialized", "RequestError", "reason", "formData", "toReadableStreamEffect", "undefined", "layer", "contentType", "inner", "message", "context", "status", "cacheKey", "Operation", "isOperationWithHandler", "func", "TypeError", "meta", "key", "name", "description", "inputSchema", "JsonSchema", "outputSchema", "output", "undefined", "services", "service", "handler", "serviceTags", "includes", "Database", "FunctionError", "message", "Schema", "onExcessProperty", "data", "error", "InvalidOperationInputError", "cause", "types", "invariant", "funcContext", "registry", "result", "dataWithDecodedRefs", "Effect", "isEffect", "EffectEx", "runAndForwardErrors", "flush", "disk", "indexes", "InvalidOperationOutputError", "context", "client", "db", "
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as HttpClient from '@effect/platform/HttpClient';\nimport * as HttpClientRequest from '@effect/platform/HttpClientRequest';\nimport type * as Config from 'effect/Config';\nimport * as Context from 'effect/Context';\nimport * as Effect from 'effect/Effect';\nimport * as Layer from 'effect/Layer';\nimport * as Redacted from 'effect/Redacted';\n\nimport { Credential } from '@dxos/compute';\nimport { Database, Query } from '@dxos/echo';\nimport { AccessToken } from '@dxos/types';\n\nexport class ConfiguredCredentialsService implements Context.Tag.Service<Credential.CredentialsService> {\n constructor(private readonly credentials: Credential.ServiceCredential[] = []) {}\n\n addCredentials(credentials: Credential.ServiceCredential[]): ConfiguredCredentialsService {\n this.credentials.push(...credentials);\n return this;\n }\n\n async queryCredentials(query: Credential.CredentialQuery): Promise<Credential.ServiceCredential[]> {\n return this.credentials.filter((credential) => credential.service === query.service);\n }\n\n async getCredential(query: Credential.CredentialQuery): Promise<Credential.ServiceCredential> {\n const credential = this.credentials.find((credential) => credential.service === query.service);\n if (!credential) {\n throw new Error(`Credential not found for service: ${query.service}`);\n }\n\n return credential;\n }\n}\n\n/**\n * Maps the request to include the given token in the Authorization header.\n */\nexport const withAuthorization = (token: string, kind?: 'Bearer' | 'Basic') =>\n HttpClient.mapRequest((request) => {\n const authorization = kind ? `${kind} ${token}` : token;\n return HttpClientRequest.setHeader(request, 'Authorization', authorization);\n });\n\nexport const configuredCredentialsLayer = (credentials: Credential.ServiceCredential[]) =>\n Layer.succeed(Credential.CredentialsService, new ConfiguredCredentialsService(credentials));\n\nexport const credentialsLayerConfig = (\n credentials: {\n service: string;\n apiKey: Config.Config<Redacted.Redacted<string>>;\n }[],\n) =>\n Layer.effect(\n Credential.CredentialsService,\n Effect.gen(function* () {\n const serviceCredentials = yield* Effect.forEach(credentials, ({ service, apiKey }) =>\n Effect.gen(function* () {\n return {\n service,\n apiKey: Redacted.value(yield* apiKey),\n };\n }),\n );\n\n return new ConfiguredCredentialsService(serviceCredentials);\n }),\n );\n\nexport const credentialsLayerFromDatabase = ({ caching = false }: { caching?: boolean } = {}) =>\n Layer.effect(\n Credential.CredentialsService,\n Effect.gen(function* () {\n const dbService = yield* Database.Service;\n const cache = new Map<string, Credential.ServiceCredential[]>();\n\n const queryCredentials = async (query: Credential.CredentialQuery): Promise<Credential.ServiceCredential[]> => {\n const cacheKey = JSON.stringify(query);\n if (caching && cache.has(cacheKey)) {\n return cache.get(cacheKey)!;\n }\n\n const accessTokens = await dbService.db.query(Query.type(AccessToken.AccessToken)).run();\n const credentials = accessTokens\n .filter((accessToken) => accessToken.source === query.service)\n .map((accessToken) => ({\n service: accessToken.source,\n apiKey: accessToken.token,\n }));\n\n if (caching) {\n cache.set(cacheKey, credentials);\n }\n\n return credentials;\n };\n\n return {\n getCredential: async (query) => {\n const credentials = await queryCredentials(query);\n if (credentials.length === 0) {\n throw new Error(`Credential not found for service: ${query.service}`);\n }\n\n return credentials[0];\n },\n queryCredentials: async (query) => {\n return queryCredentials(query);\n },\n };\n }),\n );\n", "//\n// Copyright 2025 DXOS.org\n//\nimport * as Context from 'effect/Context';\nimport * as Effect from 'effect/Effect';\nimport * as Layer from 'effect/Layer';\n\nimport { type FunctionNotFoundError, Operation } from '@dxos/compute';\n\n/**\n * @deprecated\n */\nexport class FunctionInvocationService extends Context.Tag('@dxos/functions/FunctionInvocationService')<\n FunctionInvocationService,\n {\n invokeFunction<I, O>(functionDef: Operation.Definition<I, O, any>, input: I): Effect.Effect<O>;\n\n resolveFunction(key: string): Effect.Effect<Operation.Definition.Any, FunctionNotFoundError>;\n }\n>() {\n static layerNotAvailable = Layer.succeed(FunctionInvocationService, {\n invokeFunction: () => Effect.die('FunctionInvocationService is not avaialble.'),\n resolveFunction: () => Effect.die('FunctionInvocationService is not available.'),\n });\n\n static invokeFunction = <I, O>(\n functionDef: Operation.Definition<I, O, any>,\n input: I,\n ): Effect.Effect<O, never, FunctionInvocationService> =>\n Effect.serviceFunctionEffect(FunctionInvocationService, (service) => service.invokeFunction)(functionDef, input);\n\n static resolveFunction = (\n key: string,\n ): Effect.Effect<Operation.Definition.Any, FunctionNotFoundError, FunctionInvocationService> =>\n Effect.serviceFunctionEffect(FunctionInvocationService, (service) => service.resolveFunction)(key);\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\n/**\n * Goes into {@link Message['properties']}\n */\nexport const MESSAGE_PROPERTY_TOOL_CALL_ID = 'toolCallId' as const;\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Obj } from '@dxos/echo';\n\n// TODO: use URL scheme for source?\nexport const FUNCTIONS_META_KEY = 'org.dxos.service.function';\n\nexport const FUNCTIONS_PRESET_META_KEY = 'org.dxos.service.function-preset';\n\n/**\n * NOTE: functionId is backend ID, not ECHO object id.\n */\nexport const getUserFunctionIdInMetadata = (meta: Obj.ReadonlyMeta) => {\n return meta.keys.find((key) => key.source === FUNCTIONS_META_KEY)?.id;\n};\n\n/**\n * NOTE: functionId is backend ID, not ECHO object id.\n * Must be called inside Obj.update() since it mutates the meta.\n */\nexport const setUserFunctionIdInMetadata = (meta: Obj.Meta, functionId: string) => {\n const key = meta.keys.find((key) => key.source === FUNCTIONS_META_KEY);\n if (key) {\n if (key.id !== functionId) {\n throw new Error('Metadata mismatch');\n }\n } else {\n meta.keys.push({ source: FUNCTIONS_META_KEY, id: functionId });\n }\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as AnthropicClient from '@effect/ai-anthropic/AnthropicClient';\nimport * as Effect from 'effect/Effect';\nimport * as Layer from 'effect/Layer';\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { AiModelResolver, AiService, OpaqueToolkit } from '@dxos/ai';\nimport { AnthropicResolver } from '@dxos/ai/resolvers';\nimport {\n FunctionError,\n Header,\n InvalidOperationInputError,\n InvalidOperationOutputError,\n Operation,\n Trace,\n} from '@dxos/compute';\nimport { LifecycleState, Resource } from '@dxos/context';\nimport { Database, Feed, JsonSchema, Ref, Registry, type Type } from '@dxos/echo';\nimport { createFeedServiceLayer, EchoClient, type DatabaseImpl, makeRegistry } from '@dxos/echo-client';\nimport { refFromEncodedReference } from '@dxos/echo/internal';\nimport { EffectEx } from '@dxos/effect';\nimport { assertState, failedInvariant, invariant } from '@dxos/invariant';\nimport { PublicKey } from '@dxos/keys';\nimport { log } from '@dxos/log';\nimport { EdgeFunctionEnv, ErrorCodec, type FunctionProtocol, type TraceProtocol } from '@dxos/protocols';\n\nimport { type FunctionServices } from '../sdk';\nimport { configuredCredentialsLayer, credentialsLayerFromDatabase, FunctionInvocationService } from '../services';\nimport { FunctionsAiHttpClient } from './functions-ai-http-client';\n\nexport interface FunctionWrappingOptions {\n /**\n * Additional types to register with the database.\n */\n types?: Type.AnyEntity[];\n\n /**\n * Toolkits to make available via the `OpaqueToolkitProvider`.\n */\n toolkits?: OpaqueToolkit.OpaqueToolkit[];\n}\n\n/**\n * Wraps a function handler made with `defineFunction` to a protocol that the functions-runtime expects.\n */\nexport const wrapFunctionHandler = (\n func: Operation.WithHandler<Operation.Definition.Any>,\n opts: FunctionWrappingOptions = {},\n): FunctionProtocol.Func => {\n if (!Operation.isOperationWithHandler(func)) {\n throw new TypeError('Expected operation with handler');\n }\n\n const serviceTags = func.services.map((service) => service.key);\n\n return {\n meta: {\n key: func.meta.key,\n name: func.meta.name,\n description: func.meta.description,\n inputSchema: JsonSchema.toJsonSchema(func.input),\n outputSchema: func.output === undefined ? undefined : JsonSchema.toJsonSchema(func.output),\n services: func.services.map((service) => service.key),\n },\n handler: async ({ data, context }) => {\n if (\n (serviceTags.includes(Database.Service.key) || serviceTags.includes(Feed.FeedService.key)) &&\n (!context.services.dataService || !context.services.queryService)\n ) {\n throw new FunctionError({\n message: 'Services not provided: dataService, queryService',\n });\n }\n\n // eslint-disable-next-line no-useless-catch\n try {\n if (!SchemaAST.isAnyKeyword(func.input.ast)) {\n try {\n Schema.validateSync(func.input, { onExcessProperty: 'error' })(data);\n } catch (error: any) {\n throw new InvalidOperationInputError({\n message: `Operation input did not match schema (${func.meta.key}): ${error.message}`,\n cause: error,\n });\n }\n }\n\n await using funcContext = await new FunctionContext(context, opts).open();\n\n const types = [...(opts.types ?? []), ...(func.types ?? [])];\n if (types.length > 0) {\n invariant(funcContext.db, 'Database is required for functions with types');\n funcContext.db.graph.registry.add(types);\n }\n\n const dataWithDecodedRefs =\n funcContext.db && !SchemaAST.isAnyKeyword(func.input.ast)\n ? decodeRefsFromSchema(func.input.ast, data, funcContext.db)\n : data;\n\n let result: any = await func.handler(dataWithDecodedRefs);\n\n if (Effect.isEffect(result)) {\n result = await EffectEx.runAndForwardErrors(\n (result as Effect.Effect<unknown, unknown, FunctionServices>).pipe(\n Effect.orDie,\n Effect.provide(funcContext.createLayer()),\n ),\n );\n }\n\n // Flush in-memory ECHO writes before the function scope closes.\n // Writes performed by `db.add` / `db.remove` are buffered in the in-memory\n // `DatabaseImpl` and only pushed across the `DataService` binding when\n // `db.flush({ disk })` is called. `FunctionContext._close` (invoked by the\n // `await using` above) calls `db.close()` but does NOT flush, so mutations\n // performed by handlers that declare `Database.Service` (e.g. `object-create`,\n // `object-update`, `relation-create`) would be silently dropped before reaching\n // the edge `AutomergeReplicator`. Flushing here closes that hole.\n if (serviceTags.includes(Database.Service.key) && funcContext.db) {\n await funcContext.db.flush({ disk: true, indexes: false });\n }\n\n if (func.output && !SchemaAST.isAnyKeyword(func.output.ast)) {\n try {\n Schema.validateSync(func.output, { onExcessProperty: 'error' })(result);\n } catch (error: any) {\n throw new InvalidOperationOutputError({\n message: `Operation output did not match schema (${func.meta.key}): ${error.message}`,\n cause: error,\n });\n }\n }\n\n return result;\n } catch (error) {\n // TODO(dmaretskyi): We might do error wrapping here and add extra context.\n throw error;\n }\n },\n };\n};\n\n/**\n * Container for services and context for a function.\n */\nclass FunctionContext extends Resource {\n readonly context: FunctionProtocol.Context;\n readonly client: EchoClient | undefined;\n db: DatabaseImpl | undefined;\n readonly opts: FunctionWrappingOptions;\n\n constructor(context: FunctionProtocol.Context, opts: FunctionWrappingOptions) {\n super();\n this.context = context;\n this.opts = opts;\n if (context.services.dataService && context.services.queryService) {\n this.client = new EchoClient().connectToService({\n dataService: context.services.dataService,\n queryService: context.services.queryService,\n queueService: context.services.queueService,\n });\n }\n }\n\n override async _open() {\n await this.client?.open();\n this.db =\n this.client && this.context.spaceId\n ? this.client.constructDatabase({\n spaceId: this.context.spaceId ?? failedInvariant(),\n spaceKey: PublicKey.fromHex(this.context.spaceKey ?? failedInvariant('spaceKey missing in context')),\n reactiveSchemaQuery: false,\n preloadSchemaOnOpen: false,\n })\n : undefined;\n\n await this.db?.setSpaceRoot(this.context.spaceRootUrl ?? failedInvariant('spaceRootUrl missing in context'));\n await this.db?.open();\n }\n\n override async _close() {\n await this.db?.close();\n await this.client?.close();\n }\n\n createLayer(): Layer.Layer<FunctionServices> {\n assertState(this._lifecycleState === LifecycleState.OPEN, 'FunctionContext is not open');\n\n const dbLayer = this.db ? Database.layer(this.db) : Database.notAvailable;\n const feedLayer = this.db ? createFeedServiceLayer(this.db) : Feed.notAvailable;\n const credentials = dbLayer\n ? credentialsLayerFromDatabase({ caching: true }).pipe(Layer.provide(dbLayer))\n : configuredCredentialsLayer([]);\n\n const aiLayer = this.context.services.functionsAiService\n ? InternalAiServiceLayer(this.context.services.functionsAiService).pipe(Layer.provide(credentials))\n : AiService.notAvailable;\n\n const operationServiceLayer = this.context.services.functionsService\n ? makeOperationServiceLayer(this.context.services.functionsService)\n : unavailableOperationServiceLayer;\n\n const traceWriterLayer = this.context.services.traceService\n ? makeTraceWriterLayer(this.context.services.traceService)\n : Trace.writerLayerNoop;\n\n log('Creating function context layer', {\n traceService: !!this.context.services.traceService,\n functionsService: !!this.context.services.functionsService,\n functionsAiService: !!this.context.services.functionsAiService,\n spaceId: this.context.spaceId,\n spaceRootUrl: this.context.spaceRootUrl,\n toolkits: this.opts.toolkits?.length ?? 0,\n types: this.opts.types?.length ?? 0,\n });\n\n const registryLayer = this.db\n ? Layer.succeed(Registry.Service, this.db.graph.registry)\n : Layer.succeed(Registry.Service, makeRegistry());\n\n return Layer.mergeAll(\n dbLayer,\n feedLayer,\n credentials,\n operationServiceLayer,\n aiLayer,\n OpaqueToolkit.providerLayer(OpaqueToolkit.merge(...(this.opts.toolkits ?? []))),\n traceWriterLayer,\n registryLayer,\n\n // `FunctionInvocationService` is deprecated; new code should yield `Operation.Service`.\n // The cloudflare wrapper provides only the unavailable layer to satisfy the (still-present)\n // type union — handlers that yield it will die at invocation time.\n FunctionInvocationService.layerNotAvailable,\n );\n }\n}\n\n/**\n * Backs `Trace.TraceService` with the EDGE-provided `TraceService` so that operation\n * handlers can write trace events that are forwarded to the runtime's trace sink.\n */\nconst makeTraceWriterLayer = (traceService: TraceProtocol.TraceService): Layer.Layer<Trace.TraceService> =>\n Layer.succeed(Trace.TraceService, {\n write: (eventType, payload) => {\n log('Writing trace event', {\n eventType: eventType.key,\n });\n traceService.write([\n {\n key: eventType.key,\n isEphemeral: eventType.isEphemeral,\n data: payload,\n },\n ]);\n },\n });\n\n/** Proxies Anthropic requests through the EDGE-provided `FunctionsAiService`, BYOK-wrapped. */\nconst InternalAiServiceLayer = (functionsAiService: EdgeFunctionEnv.FunctionsAiService) => {\n // `apiUrl` is a sentinel — the request gets re-routed by the AI gateway in EDGE.\n const httpClient = Header.byokLayer('anthropic.com').pipe(\n Layer.provide(FunctionsAiHttpClient.layer(functionsAiService)),\n );\n const anthropicClient = AnthropicClient.layer({ apiUrl: 'http://internal/provider/anthropic' }).pipe(\n Layer.provide(httpClient),\n );\n const resolver = AnthropicResolver.make().pipe(Layer.provide(anthropicClient));\n return AiModelResolver.AiModelResolver.buildAiService.pipe(Layer.provide(resolver));\n};\n\n/**\n * Backs `Operation.Service` with the EDGE-provided `FunctionsService` so that operation\n * handlers can invoke other deployed operations remotely. The `deployedId` on the operation\n * definition is used as the routing key.\n */\nconst makeOperationServiceLayer = (\n functionsService: EdgeFunctionEnv.FunctionsService,\n): Layer.Layer<Operation.Service> => {\n const invokeRemote = async (\n op: Operation.Definition.Any,\n input: unknown,\n options?: Operation.InvokeOptions,\n ): Promise<{ data?: unknown; error?: Error }> => {\n invariant(op.meta.deployedId, `Operation '${op.meta.key}' has no deployedId; cannot invoke remotely.`);\n const result = await functionsService.invoke(op.meta.deployedId, input, {\n spaceId: options?.spaceId,\n // Forward the conversation DXN so the remote runtime can rebuild conversation-scoped\n // services (e.g. `AiContext.Service`) needed by operations like `GetContext`.\n conversation: options?.conversation,\n });\n if (result._kind === 'success') {\n return { data: result.data };\n }\n return { error: ErrorCodec.decode(result.error) };\n };\n\n return Layer.succeed(Operation.Service, {\n invoke: ((op: Operation.Definition.Any, input: unknown, options?: Operation.InvokeOptions) =>\n Effect.tryPromise(() => invokeRemote(op, input, options)).pipe(\n Effect.orDie,\n Effect.flatMap((outcome) =>\n outcome.error ? Effect.die(outcome.error) : Effect.succeed(outcome.data as never),\n ),\n )) as Operation.OperationService['invoke'],\n schedule: ((op: Operation.Definition.Any, input: unknown, _options?: Operation.InvokeOptions) =>\n Effect.sync(() => {\n invariant(op.meta.deployedId, `Operation '${op.meta.key}' has no deployedId; cannot schedule remotely.`);\n // Fire and forget — schedule is intentionally non-awaiting.\n void functionsService.invoke(op.meta.deployedId, input).catch(() => {\n // Swallow errors — schedule is observability-only.\n });\n })) as Operation.OperationService['schedule'],\n invokePromise: ((op: Operation.Definition.Any, input: unknown, options?: Operation.InvokeOptions) =>\n invokeRemote(op, input, options).catch((error: unknown) => ({\n error: error instanceof Error ? error : new Error(String(error)),\n }))) as Operation.OperationService['invokePromise'],\n } satisfies Operation.OperationService);\n};\n\nconst unavailableOperationServiceLayer = Layer.succeed(Operation.Service, {\n invoke: () => Effect.die('Operation.Service is not available: missing functionsService in EDGE context.'),\n schedule: () => Effect.die('Operation.Service is not available: missing functionsService in EDGE context.'),\n invokePromise: async () => ({\n error: new Error('Operation.Service is not available: missing functionsService in EDGE context.'),\n }),\n} as Operation.OperationService);\n\nconst decodeRefsFromSchema = (ast: SchemaAST.AST, value: unknown, db: DatabaseImpl): unknown => {\n if (value == null) {\n return value;\n }\n\n const encoded = SchemaAST.encodedBoundAST(ast);\n if (Ref.isRefType(encoded)) {\n if (Ref.isRef(value)) {\n return value;\n }\n\n if (typeof value === 'object' && value !== null && typeof (value as any)['/'] === 'string') {\n const resolver = db.graph.createRefResolver({ context: { space: db.spaceId } });\n return refFromEncodedReference(value as any, resolver);\n }\n\n return value;\n }\n\n switch (encoded._tag) {\n case 'TypeLiteral': {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n return value;\n }\n const result: Record<string, unknown> = { ...(value as any) };\n for (const prop of SchemaAST.getPropertySignatures(encoded)) {\n const key = prop.name.toString();\n if (key in result) {\n result[key] = decodeRefsFromSchema(prop.type, (result as any)[key], db);\n }\n }\n return result;\n }\n\n case 'TupleType': {\n if (!Array.isArray(value)) {\n return value;\n }\n\n // For arrays, effect uses TupleType with empty elements and a single rest element.\n if (encoded.elements.length === 0 && encoded.rest.length === 1) {\n const elementType = encoded.rest[0].type;\n return (value as unknown[]).map((item) => decodeRefsFromSchema(elementType, item, db));\n }\n\n return value;\n }\n\n case 'Union': {\n // Optional values are represented as union with undefined.\n const nonUndefined = encoded.types.filter((t) => !SchemaAST.isUndefinedKeyword(t));\n if (nonUndefined.length === 1) {\n return decodeRefsFromSchema(nonUndefined[0], value, db);\n }\n\n // For other unions we can't safely pick a branch without validating.\n return value;\n }\n\n case 'Suspend': {\n return decodeRefsFromSchema(encoded.f(), value, db);\n }\n\n case 'Refinement': {\n return decodeRefsFromSchema(encoded.from, value, db);\n }\n\n default: {\n return value;\n }\n }\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Headers from '@effect/platform/Headers';\nimport * as HttpClient from '@effect/platform/HttpClient';\nimport * as HttpClientError from '@effect/platform/HttpClientError';\nimport * as HttpClientResponse from '@effect/platform/HttpClientResponse';\nimport * as Effect from 'effect/Effect';\nimport * as FiberRef from 'effect/FiberRef';\nimport * as Layer from 'effect/Layer';\nimport * as Stream from 'effect/Stream';\n\nimport { FunctionsAiMemoizationMissError, FunctionsAiUpstreamError } from '@dxos/compute';\nimport { log } from '@dxos/log';\nimport { type EdgeFunctionEnv, ErrorCodec } from '@dxos/protocols';\n\n/**\n * Copy pasted from https://github.com/Effect-TS/effect/blob/main/packages/platform/src/internal/fetchHttpClient.ts\n */\nexport const requestInitTagKey = '@effect/platform/FetchHttpClient/FetchOptions';\n\n/**\n * Shape of the JSON error envelope emitted by the upstream AI gateway (and by the memoization\n * layer that fronts it in test environments).\n *\n * @example\n * ```json\n * {\n * \"type\": \"error\",\n * \"error\": {\n * \"type\": \"memoization_miss\",\n * \"message\": \"No memoized Anthropic conversation found for ...\",\n * \"cacheKey\": \"114dae3db8fe60...\"\n * }\n * }\n * ```\n */\ntype UpstreamErrorEnvelope = {\n type?: string;\n error?: {\n type?: string;\n message?: string;\n cacheKey?: string;\n };\n};\n\nexport class FunctionsAiHttpClient {\n static make = (service: EdgeFunctionEnv.FunctionsAiService) =>\n HttpClient.make((request, url, signal, fiber) => {\n const context = fiber.getFiberRef(FiberRef.currentContext);\n const options: RequestInit = context.unsafeMap.get(requestInitTagKey) ?? {};\n const headers = options.headers\n ? Headers.merge(Headers.fromInput(options.headers), request.headers)\n : request.headers;\n\n const send = (body: BodyInit | undefined) =>\n Effect.tryPromise({\n try: () =>\n service.fetch(\n new Request(url, {\n ...options,\n method: request.method,\n headers,\n body,\n // Note: Don't pass signal - it can't be serialized through RPC\n }),\n ),\n catch: (cause) => {\n log.error('Failed to fetch', { errorSerialized: ErrorCodec.encode(cause as Error) });\n return new HttpClientError.RequestError({\n request,\n reason: 'Transport',\n cause,\n });\n },\n }).pipe(\n Effect.flatMap((response) =>\n // Inspect the body before handing the response to `@effect/ai` so that structured\n // upstream errors surface as typed defects (`FunctionsAiUpstreamError` and friends)\n // rather than as the generic `HttpResponseError` from `@effect/ai/AiError`.\n Effect.flatMap(\n Effect.promise(() => parseUpstreamError(response)),\n (typedError) =>\n typedError ? Effect.die(typedError) : Effect.succeed(HttpClientResponse.fromWeb(request, response)),\n ),\n ),\n );\n\n switch (request.body._tag) {\n case 'Raw':\n case 'Uint8Array':\n return send(request.body.body as any);\n case 'FormData':\n return send(request.body.formData);\n case 'Stream':\n return Stream.toReadableStreamEffect(request.body.stream).pipe(Effect.flatMap(send));\n }\n\n return send(undefined);\n });\n\n static layer = (service: EdgeFunctionEnv.FunctionsAiService) =>\n Layer.succeed(HttpClient.HttpClient, FunctionsAiHttpClient.make(service));\n}\n\n/**\n * Returns a typed error if the response is a non-2xx JSON payload matching\n * {@link UpstreamErrorEnvelope}; otherwise returns `undefined` and the response is forwarded\n * unchanged.\n */\nconst parseUpstreamError = async (response: Response): Promise<Error | undefined> => {\n if (response.ok) {\n return undefined;\n }\n const contentType = response.headers.get('content-type') ?? '';\n if (!contentType.toLowerCase().includes('application/json')) {\n return undefined;\n }\n let body: UpstreamErrorEnvelope;\n try {\n body = (await response.clone().json()) as UpstreamErrorEnvelope;\n } catch {\n return undefined;\n }\n if (!body || body.type !== 'error' || typeof body.error !== 'object' || body.error === null) {\n return undefined;\n }\n const inner = body.error;\n const message = inner.message ?? `Upstream AI service responded with HTTP ${response.status}`;\n if (inner.type === 'memoization_miss' && typeof inner.cacheKey === 'string') {\n return new FunctionsAiMemoizationMissError({\n message,\n context: { cacheKey: inner.cacheKey, status: response.status },\n });\n }\n return new FunctionsAiUpstreamError({\n message,\n context: { type: inner.type, status: response.status, ...(inner.cacheKey ? { cacheKey: inner.cacheKey } : {}) },\n });\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["HttpClient", "HttpClientRequest", "Effect", "Layer", "Redacted", "Credential", "Database", "Query", "AccessToken", "ConfiguredCredentialsService", "credentials", "addCredentials", "push", "queryCredentials", "query", "filter", "credential", "service", "getCredential", "find", "Error", "withAuthorization", "token", "kind", "mapRequest", "request", "authorization", "setHeader", "configuredCredentialsLayer", "succeed", "CredentialsService", "credentialsLayerConfig", "effect", "gen", "serviceCredentials", "forEach", "apiKey", "value", "credentialsLayerFromDatabase", "caching", "dbService", "Service", "cache", "Map", "cacheKey", "JSON", "stringify", "has", "get", "accessTokens", "db", "type", "run", "accessToken", "source", "map", "set", "length", "Context", "Effect", "Layer", "FunctionInvocationService", "Tag", "layerNotAvailable", "succeed", "invokeFunction", "die", "resolveFunction", "functionDef", "input", "serviceFunctionEffect", "service", "key", "MESSAGE_PROPERTY_TOOL_CALL_ID", "FUNCTIONS_META_KEY", "FUNCTIONS_PRESET_META_KEY", "getUserFunctionIdInMetadata", "meta", "keys", "find", "key", "source", "id", "setUserFunctionIdInMetadata", "functionId", "Error", "push", "Effect", "Layer", "Schema", "SchemaAST", "AiModelResolver", "AiService", "AnthropicResolver", "FunctionError", "InvalidOperationInputError", "LifecycleState", "Resource", "Database", "JsonSchema", "createFeedServiceLayer", "EchoClient", "refFromEncodedReference", "EffectEx", "assertState", "failedInvariant", "PublicKey", "log", "ErrorCodec", "configuredCredentialsLayer", "Headers", "HttpClient", "HttpClientError", "HttpClientResponse", "Effect", "FiberRef", "Layer", "Stream", "FunctionsAiMemoizationMissError", "FunctionsAiUpstreamError", "log", "ErrorCodec", "make", "getFiberRef", "options", "unsafeMap", "get", "requestInitTagKey", "headers", "merge", "fromInput", "send", "body", "tryPromise", "service", "Request", "method", "request", "cause", "errorSerialized", "RequestError", "reason", "formData", "toReadableStreamEffect", "undefined", "layer", "contentType", "inner", "message", "context", "status", "cacheKey", "Operation", "isOperationWithHandler", "func", "TypeError", "meta", "key", "name", "description", "inputSchema", "JsonSchema", "outputSchema", "output", "undefined", "services", "service", "handler", "serviceTags", "includes", "Database", "FunctionError", "message", "Schema", "onExcessProperty", "data", "error", "InvalidOperationInputError", "cause", "types", "invariant", "funcContext", "registry", "result", "dataWithDecodedRefs", "Effect", "isEffect", "EffectEx", "runAndForwardErrors", "flush", "disk", "indexes", "InvalidOperationOutputError", "context", "client", "db", "opts", "connectToService", "dataService", "queryService", "queueService", "spaceId", "failedInvariant", "spaceKey", "PublicKey", "fromHex", "reactiveSchemaQuery", "preloadSchemaOnOpen", "open", "close", "createLayer", "assertState", "dbLayer", "layer", "feedLayer", "createFeedServiceLayer", "credentials", "credentialsLayerFromDatabase", "caching", "pipe", "Layer", "aiLayer", "InternalAiServiceLayer", "operationServiceLayer", "functionsService", "makeOperationServiceLayer", "unavailableOperationServiceLayer", "traceWriterLayer", "traceService", "makeTraceWriterLayer", "writerLayerNoop", "log", "functionsAiService", "spaceRootUrl", "toolkits", "length", "registryLayer", "succeed", "Registry", "OpaqueToolkit", "providerLayer", "write", "payload", "eventType", "__dxlog_file", "isEphemeral", "anthropicClient", "AnthropicClient", "apiUrl", "resolver", "AnthropicResolver", "AiModelResolver", "buildAiService", "invokeRemote", "input", "options", "deployedId", "op", "ErrorCodec", "schedule", "invokePromise", "Error", "String", "invoke", "die", "value", "Ref", "encoded", "createRefResolver", "space", "toString", "decodeRefsFromSchema", "elementType", "rest", "item", "nonUndefined"]
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"inputs":{"src/sdk.ts":{"bytes":2099,"imports":[],"format":"esm"},"src/services/credentials.ts":{"bytes":12961,"imports":[{"path":"@effect/platform/HttpClient","kind":"import-statement","external":true},{"path":"@effect/platform/HttpClientRequest","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"effect/Layer","kind":"import-statement","external":true},{"path":"effect/Redacted","kind":"import-statement","external":true},{"path":"@dxos/compute","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/types","kind":"import-statement","external":true}],"format":"esm"},"src/services/function-invocation-service.ts":{"bytes":3812,"imports":[{"path":"effect/Context","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"effect/Layer","kind":"import-statement","external":true}],"format":"esm"},"src/services/tracing.ts":{"bytes":662,"imports":[],"format":"esm"},"src/services/index.ts":{"bytes":741,"imports":[{"path":"src/services/credentials.ts","kind":"import-statement","original":"./credentials"},{"path":"src/services/function-invocation-service.ts","kind":"import-statement","original":"./function-invocation-service"},{"path":"src/services/tracing.ts","kind":"import-statement","original":"./tracing"}],"format":"esm"},"src/types/url.ts":{"bytes":3289,"imports":[],"format":"esm"},"src/types/index.ts":{"bytes":363,"imports":[{"path":"src/types/url.ts","kind":"import-statement","original":"./url"}],"format":"esm"},"src/protocol/functions-ai-http-client.ts":{"bytes":15950,"imports":[{"path":"@effect/platform/Headers","kind":"import-statement","external":true},{"path":"@effect/platform/HttpClient","kind":"import-statement","external":true},{"path":"@effect/platform/HttpClientError","kind":"import-statement","external":true},{"path":"@effect/platform/HttpClientResponse","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"effect/FiberRef","kind":"import-statement","external":true},{"path":"effect/Layer","kind":"import-statement","external":true},{"path":"effect/Stream","kind":"import-statement","external":true},{"path":"@dxos/compute","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true}],"format":"esm"},"src/protocol/protocol.ts":{"bytes":
|
|
1
|
+
{"inputs":{"src/sdk.ts":{"bytes":2099,"imports":[],"format":"esm"},"src/services/credentials.ts":{"bytes":12961,"imports":[{"path":"@effect/platform/HttpClient","kind":"import-statement","external":true},{"path":"@effect/platform/HttpClientRequest","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"effect/Layer","kind":"import-statement","external":true},{"path":"effect/Redacted","kind":"import-statement","external":true},{"path":"@dxos/compute","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/types","kind":"import-statement","external":true}],"format":"esm"},"src/services/function-invocation-service.ts":{"bytes":3812,"imports":[{"path":"effect/Context","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"effect/Layer","kind":"import-statement","external":true}],"format":"esm"},"src/services/tracing.ts":{"bytes":662,"imports":[],"format":"esm"},"src/services/index.ts":{"bytes":741,"imports":[{"path":"src/services/credentials.ts","kind":"import-statement","original":"./credentials"},{"path":"src/services/function-invocation-service.ts","kind":"import-statement","original":"./function-invocation-service"},{"path":"src/services/tracing.ts","kind":"import-statement","original":"./tracing"}],"format":"esm"},"src/types/url.ts":{"bytes":3289,"imports":[],"format":"esm"},"src/types/index.ts":{"bytes":363,"imports":[{"path":"src/types/url.ts","kind":"import-statement","original":"./url"}],"format":"esm"},"src/protocol/functions-ai-http-client.ts":{"bytes":15950,"imports":[{"path":"@effect/platform/Headers","kind":"import-statement","external":true},{"path":"@effect/platform/HttpClient","kind":"import-statement","external":true},{"path":"@effect/platform/HttpClientError","kind":"import-statement","external":true},{"path":"@effect/platform/HttpClientResponse","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"effect/FiberRef","kind":"import-statement","external":true},{"path":"effect/Layer","kind":"import-statement","external":true},{"path":"effect/Stream","kind":"import-statement","external":true},{"path":"@dxos/compute","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true}],"format":"esm"},"src/protocol/protocol.ts":{"bytes":56559,"imports":[{"path":"@effect/ai-anthropic/AnthropicClient","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"effect/Layer","kind":"import-statement","external":true},{"path":"effect/Schema","kind":"import-statement","external":true},{"path":"effect/SchemaAST","kind":"import-statement","external":true},{"path":"@dxos/ai","kind":"import-statement","external":true},{"path":"@dxos/ai/resolvers","kind":"import-statement","external":true},{"path":"@dxos/compute","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo-client","kind":"import-statement","external":true},{"path":"@dxos/echo/internal","kind":"import-statement","external":true},{"path":"@dxos/effect","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"src/services/index.ts","kind":"import-statement","original":"../services"},{"path":"src/protocol/functions-ai-http-client.ts","kind":"import-statement","original":"./functions-ai-http-client"}],"format":"esm"},"src/protocol/index.ts":{"bytes":376,"imports":[{"path":"src/protocol/protocol.ts","kind":"import-statement","original":"./protocol"}],"format":"esm"},"src/index.ts":{"bytes":620,"imports":[{"path":"src/sdk.ts","kind":"import-statement","original":"./sdk"},{"path":"src/services/index.ts","kind":"import-statement","original":"./services"},{"path":"src/types/index.ts","kind":"import-statement","original":"./types"},{"path":"src/protocol/index.ts","kind":"import-statement","original":"./protocol"}],"format":"esm"}},"outputs":{"dist/lib/neutral/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":43440},"dist/lib/neutral/index.mjs":{"imports":[{"path":"@effect/platform/HttpClient","kind":"import-statement","external":true},{"path":"@effect/platform/HttpClientRequest","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"effect/Layer","kind":"import-statement","external":true},{"path":"effect/Redacted","kind":"import-statement","external":true},{"path":"@dxos/compute","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/types","kind":"import-statement","external":true},{"path":"effect/Context","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"effect/Layer","kind":"import-statement","external":true},{"path":"@effect/ai-anthropic/AnthropicClient","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"effect/Layer","kind":"import-statement","external":true},{"path":"effect/Schema","kind":"import-statement","external":true},{"path":"effect/SchemaAST","kind":"import-statement","external":true},{"path":"@dxos/ai","kind":"import-statement","external":true},{"path":"@dxos/ai/resolvers","kind":"import-statement","external":true},{"path":"@dxos/compute","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo-client","kind":"import-statement","external":true},{"path":"@dxos/echo/internal","kind":"import-statement","external":true},{"path":"@dxos/effect","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"@effect/platform/Headers","kind":"import-statement","external":true},{"path":"@effect/platform/HttpClient","kind":"import-statement","external":true},{"path":"@effect/platform/HttpClientError","kind":"import-statement","external":true},{"path":"@effect/platform/HttpClientResponse","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"effect/FiberRef","kind":"import-statement","external":true},{"path":"effect/Layer","kind":"import-statement","external":true},{"path":"effect/Stream","kind":"import-statement","external":true},{"path":"@dxos/compute","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true}],"exports":["ConfiguredCredentialsService","FUNCTIONS_META_KEY","FUNCTIONS_PRESET_META_KEY","FunctionInvocationService","MESSAGE_PROPERTY_TOOL_CALL_ID","configuredCredentialsLayer","credentialsLayerConfig","credentialsLayerFromDatabase","getUserFunctionIdInMetadata","setUserFunctionIdInMetadata","withAuthorization","wrapFunctionHandler"],"entryPoint":"src/index.ts","inputs":{"src/index.ts":{"bytesInOutput":0},"src/services/credentials.ts":{"bytesInOutput":2907},"src/services/index.ts":{"bytesInOutput":0},"src/services/function-invocation-service.ts":{"bytesInOutput":818},"src/services/tracing.ts":{"bytesInOutput":50},"src/types/url.ts":{"bytesInOutput":576},"src/protocol/protocol.ts":{"bytesInOutput":14939},"src/protocol/functions-ai-http-client.ts":{"bytesInOutput":3695}},"bytes":23601}}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../../../src/protocol/protocol.ts"],"names":[],"mappings":"AAUA,OAAO,EAA8B,aAAa,EAAE,MAAM,UAAU,CAAC;AAErE,OAAO,EAKL,SAAS,EAEV,MAAM,eAAe,CAAC;AAEvB,OAAO,EAA6C,KAAK,IAAI,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../../../src/protocol/protocol.ts"],"names":[],"mappings":"AAUA,OAAO,EAA8B,aAAa,EAAE,MAAM,UAAU,CAAC;AAErE,OAAO,EAKL,SAAS,EAEV,MAAM,eAAe,CAAC;AAEvB,OAAO,EAA6C,KAAK,IAAI,EAAE,MAAM,YAAY,CAAC;AAOlF,OAAO,EAA+B,KAAK,gBAAgB,EAAsB,MAAM,iBAAiB,CAAC;AAMzG,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,KAAK,CAAC,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;IAEzB;;OAEG;IACH,QAAQ,CAAC,EAAE,aAAa,CAAC,aAAa,EAAE,CAAC;CAC1C;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB,SACxB,SAAS,CAAC,WAAW,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,SAC/C,uBAAuB,KAC5B,gBAAgB,CAAC,IA6FnB,CAAC"}
|