@dxos/functions 0.8.4-main.74a063c4e0 → 0.8.4-main.765dc60934

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.
Files changed (102) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +1 -1
  3. package/dist/lib/neutral/index.mjs +261 -930
  4. package/dist/lib/neutral/index.mjs.map +4 -4
  5. package/dist/lib/neutral/meta.json +1 -1
  6. package/dist/types/src/index.d.ts +0 -6
  7. package/dist/types/src/index.d.ts.map +1 -1
  8. package/dist/types/src/protocol/functions-ai-http-client.d.ts.map +1 -1
  9. package/dist/types/src/protocol/functions-ai-http-client.test.d.ts +2 -0
  10. package/dist/types/src/protocol/functions-ai-http-client.test.d.ts.map +1 -0
  11. package/dist/types/src/protocol/protocol.d.ts +14 -2
  12. package/dist/types/src/protocol/protocol.d.ts.map +1 -1
  13. package/dist/types/src/sdk.d.ts +3 -7
  14. package/dist/types/src/sdk.d.ts.map +1 -1
  15. package/dist/types/src/services/credentials.d.ts +15 -38
  16. package/dist/types/src/services/credentials.d.ts.map +1 -1
  17. package/dist/types/src/services/function-invocation-service.d.ts +3 -5
  18. package/dist/types/src/services/function-invocation-service.d.ts.map +1 -1
  19. package/dist/types/src/services/index.d.ts +1 -4
  20. package/dist/types/src/services/index.d.ts.map +1 -1
  21. package/dist/types/src/services/queues.d.ts +1 -49
  22. package/dist/types/src/services/queues.d.ts.map +1 -1
  23. package/dist/types/src/services/tracing.d.ts +1 -107
  24. package/dist/types/src/services/tracing.d.ts.map +1 -1
  25. package/dist/types/src/types/index.d.ts +0 -3
  26. package/dist/types/src/types/index.d.ts.map +1 -1
  27. package/dist/types/src/types/url.d.ts +1 -1
  28. package/dist/types/src/types/url.d.ts.map +1 -1
  29. package/dist/types/tsconfig.tsbuildinfo +1 -1
  30. package/package.json +16 -21
  31. package/src/index.ts +0 -6
  32. package/src/protocol/functions-ai-http-client.test.ts +105 -0
  33. package/src/protocol/functions-ai-http-client.ts +75 -1
  34. package/src/protocol/protocol.test.ts +10 -10
  35. package/src/protocol/protocol.ts +213 -40
  36. package/src/sdk.ts +7 -15
  37. package/src/services/credentials.ts +76 -120
  38. package/src/services/function-invocation-service.ts +3 -9
  39. package/src/services/index.ts +1 -4
  40. package/src/services/queues.ts +1 -87
  41. package/src/services/tracing.ts +0 -192
  42. package/src/types/index.ts +0 -3
  43. package/src/types/url.ts +1 -1
  44. package/dist/lib/neutral/Trace.mjs +0 -38
  45. package/dist/lib/neutral/Trace.mjs.map +0 -7
  46. package/dist/lib/neutral/chunk-5T7GOX2V.mjs +0 -149
  47. package/dist/lib/neutral/chunk-5T7GOX2V.mjs.map +0 -7
  48. package/dist/lib/neutral/chunk-IVDUS56O.mjs +0 -49
  49. package/dist/lib/neutral/chunk-IVDUS56O.mjs.map +0 -7
  50. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +0 -10
  51. package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +0 -7
  52. package/dist/lib/neutral/fib-N45KAC7C.mjs +0 -23
  53. package/dist/lib/neutral/fib-N45KAC7C.mjs.map +0 -7
  54. package/dist/lib/neutral/reply-EUEPKNJF.mjs +0 -19
  55. package/dist/lib/neutral/reply-EUEPKNJF.mjs.map +0 -7
  56. package/dist/lib/neutral/sleep-PUK3D4FF.mjs +0 -15
  57. package/dist/lib/neutral/sleep-PUK3D4FF.mjs.map +0 -7
  58. package/dist/types/src/Trace.d.ts +0 -155
  59. package/dist/types/src/Trace.d.ts.map +0 -1
  60. package/dist/types/src/errors.d.ts +0 -121
  61. package/dist/types/src/errors.d.ts.map +0 -1
  62. package/dist/types/src/example/definitions.d.ts +0 -11
  63. package/dist/types/src/example/definitions.d.ts.map +0 -1
  64. package/dist/types/src/example/fib.d.ts +0 -8
  65. package/dist/types/src/example/fib.d.ts.map +0 -1
  66. package/dist/types/src/example/forex-effect.d.ts +0 -3
  67. package/dist/types/src/example/forex-effect.d.ts.map +0 -1
  68. package/dist/types/src/example/index.d.ts +0 -4
  69. package/dist/types/src/example/index.d.ts.map +0 -1
  70. package/dist/types/src/example/reply.d.ts +0 -4
  71. package/dist/types/src/example/reply.d.ts.map +0 -1
  72. package/dist/types/src/example/sleep.d.ts +0 -6
  73. package/dist/types/src/example/sleep.d.ts.map +0 -1
  74. package/dist/types/src/process/Process.d.ts +0 -247
  75. package/dist/types/src/process/Process.d.ts.map +0 -1
  76. package/dist/types/src/process/ServiceResolver.d.ts +0 -74
  77. package/dist/types/src/process/ServiceResolver.d.ts.map +0 -1
  78. package/dist/types/src/process/StorageService.d.ts +0 -58
  79. package/dist/types/src/process/StorageService.d.ts.map +0 -1
  80. package/dist/types/src/services/event-logger.d.ts +0 -81
  81. package/dist/types/src/services/event-logger.d.ts.map +0 -1
  82. package/dist/types/src/types/Script.d.ts +0 -22
  83. package/dist/types/src/types/Script.d.ts.map +0 -1
  84. package/dist/types/src/types/Trigger.d.ts +0 -120
  85. package/dist/types/src/types/Trigger.d.ts.map +0 -1
  86. package/dist/types/src/types/TriggerEvent.d.ts +0 -75
  87. package/dist/types/src/types/TriggerEvent.d.ts.map +0 -1
  88. package/src/Trace.ts +0 -202
  89. package/src/errors.ts +0 -21
  90. package/src/example/definitions.ts +0 -49
  91. package/src/example/fib.ts +0 -23
  92. package/src/example/forex-effect.ts +0 -40
  93. package/src/example/index.ts +0 -12
  94. package/src/example/reply.ts +0 -19
  95. package/src/example/sleep.ts +0 -17
  96. package/src/process/Process.ts +0 -486
  97. package/src/process/ServiceResolver.ts +0 -174
  98. package/src/process/StorageService.ts +0 -99
  99. package/src/services/event-logger.ts +0 -127
  100. package/src/types/Script.ts +0 -38
  101. package/src/types/Trigger.ts +0 -154
  102. package/src/types/TriggerEvent.ts +0 -62
package/src/sdk.ts CHANGED
@@ -3,37 +3,29 @@
3
3
  //
4
4
 
5
5
  import { type AiService } from '@dxos/ai';
6
+ import { type Credential, type Operation, type Trace } from '@dxos/compute';
6
7
  import { type Database, type Feed } from '@dxos/echo';
7
- import { type Trace } from '@dxos/functions';
8
8
 
9
- import {
10
- type CredentialsService,
11
- type FunctionInvocationService,
12
- type QueueService,
13
- type TracingService,
14
- } from './services';
9
+ import { type FunctionInvocationService, type QueueService } from './services';
15
10
 
16
11
  // TODO(burdon): Model after http request. Ref Lambda/OpenFaaS.
17
12
  // https://docs.aws.amazon.com/lambda/latest/dg/typescript-handler.html
18
13
  // https://www.serverless.com/framework/docs/providers/aws/guide/serverless.yml/#functions
19
14
  // https://www.npmjs.com/package/aws-lambda
20
15
 
21
- /**
22
- * Services that are provided at the function call site by the caller.
23
- */
24
- export type InvocationServices = TracingService;
25
-
26
16
  /**
27
17
  * Services that are available to invoked functions.
28
18
  * @deprecated
29
19
  */
30
20
  export type FunctionServices =
31
- | InvocationServices
32
21
  | AiService.AiService
33
- | CredentialsService
22
+ | Credential.CredentialsService
34
23
  | Database.Service
35
24
  // TODO(wittjosiah): Remove QueueService — use Feed.FeedService instead.
36
25
  | QueueService
37
26
  | Feed.FeedService
38
27
  | Trace.TraceService
39
- | FunctionInvocationService;
28
+ // TODO(dmaretskyi): `FunctionInvocationService` is being phased out in favour of `Operation.Service`;
29
+ // it's kept in the union until `functions-runtime/local-function-execution.ts` migrates.
30
+ | FunctionInvocationService
31
+ | Operation.Service;
@@ -10,136 +10,23 @@ import * as Effect from 'effect/Effect';
10
10
  import * as Layer from 'effect/Layer';
11
11
  import * as Redacted from 'effect/Redacted';
12
12
 
13
- import { Query } from '@dxos/echo';
14
- import { Database } from '@dxos/echo';
13
+ import { Credential } from '@dxos/compute';
14
+ import { Database, Query } from '@dxos/echo';
15
15
  import { AccessToken } from '@dxos/types';
16
16
 
17
- export type CredentialQuery = {
18
- service?: string;
19
- };
20
-
21
- // TODO(dmaretskyi): Unify with other apis.
22
- // packages/sdk/schema/src/common/access-token.ts
23
- export type ServiceCredential = {
24
- service: string;
25
-
26
- // TODO(dmaretskyi): Build out.
27
- apiKey?: string;
28
- };
29
-
30
- export class CredentialsService extends Context.Tag('@dxos/functions/CredentialsService')<
31
- CredentialsService,
32
- {
33
- /**
34
- * Query all.
35
- */
36
- queryCredentials: (query: CredentialQuery) => Promise<ServiceCredential[]>;
37
-
38
- /**
39
- * Get a single credential.
40
- * @throws {Error} If no credential is found.
41
- */
42
- getCredential: (query: CredentialQuery) => Promise<ServiceCredential>;
43
- }
44
- >() {
45
- static getCredential = (query: CredentialQuery): Effect.Effect<ServiceCredential, never, CredentialsService> =>
46
- Effect.gen(function* () {
47
- const credentials = yield* CredentialsService;
48
- return yield* Effect.promise(() => credentials.getCredential(query));
49
- });
50
-
51
- static getApiKey = (query: CredentialQuery): Effect.Effect<Redacted.Redacted<string>, never, CredentialsService> =>
52
- Effect.gen(function* () {
53
- const credential = yield* CredentialsService.getCredential(query);
54
- if (!credential.apiKey) {
55
- throw new Error(`API key not found for service: ${query.service}`);
56
- }
57
- return Redacted.make(credential.apiKey);
58
- });
59
-
60
- static configuredLayer = (credentials: ServiceCredential[]) =>
61
- Layer.succeed(CredentialsService, new ConfiguredCredentialsService(credentials));
62
-
63
- static layerConfig = (
64
- credentials: {
65
- service: string;
66
- apiKey: Config.Config<Redacted.Redacted<string>>;
67
- }[],
68
- ) =>
69
- Layer.effect(
70
- CredentialsService,
71
- Effect.gen(function* () {
72
- const serviceCredentials = yield* Effect.forEach(credentials, ({ service, apiKey }) =>
73
- Effect.gen(function* () {
74
- return {
75
- service,
76
- apiKey: Redacted.value(yield* apiKey),
77
- };
78
- }),
79
- );
80
-
81
- return new ConfiguredCredentialsService(serviceCredentials);
82
- }),
83
- );
84
-
85
- static layerFromDatabase = ({ caching = false }: { caching?: boolean } = {}) =>
86
- Layer.effect(
87
- CredentialsService,
88
- Effect.gen(function* () {
89
- const dbService = yield* Database.Service;
90
- const cache = new Map<string, ServiceCredential[]>();
91
-
92
- const queryCredentials = async (query: CredentialQuery): Promise<ServiceCredential[]> => {
93
- const cacheKey = JSON.stringify(query);
94
- if (caching && cache.has(cacheKey)) {
95
- return cache.get(cacheKey)!;
96
- }
97
-
98
- const accessTokens = await dbService.db.query(Query.type(AccessToken.AccessToken)).run();
99
- const credentials = accessTokens
100
- .filter((accessToken) => accessToken.source === query.service)
101
- .map((accessToken) => ({
102
- service: accessToken.source,
103
- apiKey: accessToken.token,
104
- }));
105
-
106
- if (caching) {
107
- cache.set(cacheKey, credentials);
108
- }
17
+ export class ConfiguredCredentialsService implements Context.Tag.Service<Credential.CredentialsService> {
18
+ constructor(private readonly credentials: Credential.ServiceCredential[] = []) {}
109
19
 
110
- return credentials;
111
- };
112
-
113
- return {
114
- getCredential: async (query) => {
115
- const credentials = await queryCredentials(query);
116
- if (credentials.length === 0) {
117
- throw new Error(`Credential not found for service: ${query.service}`);
118
- }
119
-
120
- return credentials[0];
121
- },
122
- queryCredentials: async (query) => {
123
- return queryCredentials(query);
124
- },
125
- };
126
- }),
127
- );
128
- }
129
-
130
- export class ConfiguredCredentialsService implements Context.Tag.Service<CredentialsService> {
131
- constructor(private readonly credentials: ServiceCredential[] = []) {}
132
-
133
- addCredentials(credentials: ServiceCredential[]): ConfiguredCredentialsService {
20
+ addCredentials(credentials: Credential.ServiceCredential[]): ConfiguredCredentialsService {
134
21
  this.credentials.push(...credentials);
135
22
  return this;
136
23
  }
137
24
 
138
- async queryCredentials(query: CredentialQuery): Promise<ServiceCredential[]> {
25
+ async queryCredentials(query: Credential.CredentialQuery): Promise<Credential.ServiceCredential[]> {
139
26
  return this.credentials.filter((credential) => credential.service === query.service);
140
27
  }
141
28
 
142
- async getCredential(query: CredentialQuery): Promise<ServiceCredential> {
29
+ async getCredential(query: Credential.CredentialQuery): Promise<Credential.ServiceCredential> {
143
30
  const credential = this.credentials.find((credential) => credential.service === query.service);
144
31
  if (!credential) {
145
32
  throw new Error(`Credential not found for service: ${query.service}`);
@@ -157,3 +44,72 @@ export const withAuthorization = (token: string, kind?: 'Bearer' | 'Basic') =>
157
44
  const authorization = kind ? `${kind} ${token}` : token;
158
45
  return HttpClientRequest.setHeader(request, 'Authorization', authorization);
159
46
  });
47
+
48
+ export const configuredCredentialsLayer = (credentials: Credential.ServiceCredential[]) =>
49
+ Layer.succeed(Credential.CredentialsService, new ConfiguredCredentialsService(credentials));
50
+
51
+ export const credentialsLayerConfig = (
52
+ credentials: {
53
+ service: string;
54
+ apiKey: Config.Config<Redacted.Redacted<string>>;
55
+ }[],
56
+ ) =>
57
+ Layer.effect(
58
+ Credential.CredentialsService,
59
+ Effect.gen(function* () {
60
+ const serviceCredentials = yield* Effect.forEach(credentials, ({ service, apiKey }) =>
61
+ Effect.gen(function* () {
62
+ return {
63
+ service,
64
+ apiKey: Redacted.value(yield* apiKey),
65
+ };
66
+ }),
67
+ );
68
+
69
+ return new ConfiguredCredentialsService(serviceCredentials);
70
+ }),
71
+ );
72
+
73
+ export const credentialsLayerFromDatabase = ({ caching = false }: { caching?: boolean } = {}) =>
74
+ Layer.effect(
75
+ Credential.CredentialsService,
76
+ Effect.gen(function* () {
77
+ const dbService = yield* Database.Service;
78
+ const cache = new Map<string, Credential.ServiceCredential[]>();
79
+
80
+ const queryCredentials = async (query: Credential.CredentialQuery): Promise<Credential.ServiceCredential[]> => {
81
+ const cacheKey = JSON.stringify(query);
82
+ if (caching && cache.has(cacheKey)) {
83
+ return cache.get(cacheKey)!;
84
+ }
85
+
86
+ const accessTokens = await dbService.db.query(Query.type(AccessToken.AccessToken)).run();
87
+ const credentials = accessTokens
88
+ .filter((accessToken) => accessToken.source === query.service)
89
+ .map((accessToken) => ({
90
+ service: accessToken.source,
91
+ apiKey: accessToken.token,
92
+ }));
93
+
94
+ if (caching) {
95
+ cache.set(cacheKey, credentials);
96
+ }
97
+
98
+ return credentials;
99
+ };
100
+
101
+ return {
102
+ getCredential: async (query) => {
103
+ const credentials = await queryCredentials(query);
104
+ if (credentials.length === 0) {
105
+ throw new Error(`Credential not found for service: ${query.service}`);
106
+ }
107
+
108
+ return credentials[0];
109
+ },
110
+ queryCredentials: async (query) => {
111
+ return queryCredentials(query);
112
+ },
113
+ };
114
+ }),
115
+ );
@@ -5,18 +5,12 @@ import * as Context from 'effect/Context';
5
5
  import * as Effect from 'effect/Effect';
6
6
  import * as Layer from 'effect/Layer';
7
7
 
8
- import { Operation } from '@dxos/operation';
9
-
10
- import type { FunctionNotFoundError } from '../errors';
11
- import { type InvocationServices } from '../sdk';
8
+ import { type FunctionNotFoundError, Operation } from '@dxos/compute';
12
9
 
13
10
  export class FunctionInvocationService extends Context.Tag('@dxos/functions/FunctionInvocationService')<
14
11
  FunctionInvocationService,
15
12
  {
16
- invokeFunction<I, O>(
17
- functionDef: Operation.Definition<I, O, any>,
18
- input: I,
19
- ): Effect.Effect<O, never, InvocationServices>;
13
+ invokeFunction<I, O>(functionDef: Operation.Definition<I, O, any>, input: I): Effect.Effect<O>;
20
14
 
21
15
  resolveFunction(key: string): Effect.Effect<Operation.Definition.Any, FunctionNotFoundError>;
22
16
  }
@@ -29,7 +23,7 @@ export class FunctionInvocationService extends Context.Tag('@dxos/functions/Func
29
23
  static invokeFunction = <I, O>(
30
24
  functionDef: Operation.Definition<I, O, any>,
31
25
  input: I,
32
- ): Effect.Effect<O, never, FunctionInvocationService | InvocationServices> =>
26
+ ): Effect.Effect<O, never, FunctionInvocationService> =>
33
27
  Effect.serviceFunctionEffect(FunctionInvocationService, (service) => service.invokeFunction)(functionDef, input);
34
28
 
35
29
  static resolveFunction = (
@@ -3,9 +3,6 @@
3
3
  //
4
4
 
5
5
  export * from './credentials';
6
- export { ConfiguredCredentialsService, type ServiceCredential } from './credentials';
7
- export * from './event-logger';
8
- export { createEventLogger, createDefectLogger } from './event-logger';
9
6
  export * from './function-invocation-service';
10
7
  export * from './queues';
11
- export * from './tracing';
8
+ export { MESSAGE_PROPERTY_TOOL_CALL_ID } from './tracing';
@@ -2,90 +2,4 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import * as Context from 'effect/Context';
6
- import * as Effect from 'effect/Effect';
7
- import * as Layer from 'effect/Layer';
8
-
9
- import { type Entity } from '@dxos/echo';
10
- import { createFeedServiceLayer, type Queue, type QueueAPI, type QueueFactory } from '@dxos/echo-db';
11
- import type { DXN, QueueSubspaceTag } from '@dxos/keys';
12
-
13
- /**
14
- * Gives access to all queues.
15
- * @deprecated Use Feed.FeedService instead.
16
- */
17
- export class QueueService extends Context.Tag('@dxos/functions/QueueService')<
18
- QueueService,
19
- {
20
- /**
21
- * API to access the queues.
22
- */
23
- readonly queues: QueueAPI;
24
-
25
- /**
26
- * The queue that is used to store the context of the current research.
27
- * @deprecated Use `ContextQueueService` instead.
28
- */
29
- readonly queue: Queue | undefined;
30
- }
31
- >() {
32
- static notAvailable = Layer.succeed(QueueService, {
33
- queues: {
34
- get(_dxn) {
35
- throw new Error('Queues not available');
36
- },
37
- create() {
38
- throw new Error('Queues not available');
39
- },
40
- },
41
- queue: undefined,
42
- });
43
-
44
- static make = (queues: QueueFactory, queue?: Queue): Context.Tag.Service<QueueService> => {
45
- return {
46
- queues,
47
- queue,
48
- };
49
- };
50
-
51
- static layer = (queues: QueueFactory, queue?: Queue): Layer.Layer<QueueService> =>
52
- Layer.succeed(QueueService, QueueService.make(queues, queue));
53
-
54
- /**
55
- * Gets a queue by its DXN.
56
- */
57
- static getQueue = <T extends Entity.Unknown = Entity.Unknown>(
58
- dxn: DXN,
59
- ): Effect.Effect<Queue<T>, never, QueueService> => QueueService.pipe(Effect.map(({ queues }) => queues.get<T>(dxn)));
60
-
61
- /**
62
- * Creates a new queue.
63
- */
64
- static createQueue = <T extends Entity.Unknown = Entity.Unknown>(options?: {
65
- subspaceTag?: QueueSubspaceTag;
66
- }): Effect.Effect<Queue<T>, never, QueueService> =>
67
- QueueService.pipe(Effect.map(({ queues }) => queues.create<T>(options)));
68
-
69
- static append = <T extends Entity.Unknown = Entity.Unknown>(queue: Queue<T>, objects: T[]): Effect.Effect<void> =>
70
- Effect.promise(() => queue.append(objects));
71
- }
72
-
73
- /**
74
- * Gives access to a specific queue passed as a context.
75
- * @deprecated Use Feed.FeedService instead.
76
- */
77
- export class ContextQueueService extends Context.Tag('@dxos/functions/ContextQueueService')<
78
- ContextQueueService,
79
- {
80
- readonly queue: Queue;
81
- }
82
- >() {
83
- static layer = (queue: Queue) => Layer.succeed(ContextQueueService, { queue });
84
- }
85
-
86
- export const feedServiceFromQueueServiceLayer = Layer.unwrapEffect(
87
- Effect.gen(function* () {
88
- const { queues } = yield* QueueService;
89
- return createFeedServiceLayer(queues);
90
- }),
91
- );
5
+ export { QueueService, feedServiceFromQueueServiceLayer } from '@dxos/echo-db';
@@ -2,198 +2,6 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import * as Context from 'effect/Context';
6
- import * as Effect from 'effect/Effect';
7
- import * as Layer from 'effect/Layer';
8
-
9
- import { AgentStatus } from '@dxos/ai';
10
- import { type DXN, Obj, Ref } from '@dxos/echo';
11
- import { ObjectId } from '@dxos/keys';
12
- import { Message } from '@dxos/types';
13
-
14
- import type { Trigger } from '../types';
15
-
16
- /**
17
- * Provides a way for compute primitives (functions, workflows, tools)
18
- * to emit an execution trace as a series of structured ECHO objects.
19
- * @deprecated Use Trace.TraceService instead.
20
- */
21
- export class TracingService extends Context.Tag('@dxos/functions/TracingService')<
22
- TracingService,
23
- {
24
- /**
25
- * Gets the parent message ID.
26
- */
27
- getTraceContext: () => TracingService.TraceContext;
28
-
29
- /**
30
- * Write an event to the tracing queue.
31
- * @param event - The event to write. Must be an a typed object.
32
- */
33
- write: (event: Obj.Unknown, traceContext: TracingService.TraceContext) => void;
34
-
35
- /**
36
- * Write an ephemeral event.
37
- */
38
- ephemeral: (event: Obj.Unknown, traceContext: TracingService.TraceContext) => void;
39
-
40
- traceInvocationStart({
41
- payload,
42
- target,
43
- }: {
44
- payload: TracingService.FunctionInvocationPayload;
45
- target?: DXN;
46
- }): Effect.Effect<TracingService.InvocationTraceData>;
47
-
48
- traceInvocationEnd({
49
- trace,
50
- exception,
51
- }: {
52
- trace: TracingService.InvocationTraceData;
53
- exception?: any;
54
- }): Effect.Effect<void>;
55
- }
56
- >() {
57
- static noop: Context.Tag.Service<TracingService> = {
58
- getTraceContext: () => ({}),
59
- write: () => {},
60
- ephemeral: () => {},
61
- traceInvocationStart: () =>
62
- Effect.sync(() => ({ invocationId: ObjectId.random(), invocationTraceQueue: undefined })),
63
- traceInvocationEnd: () => Effect.sync(() => {}),
64
- };
65
-
66
- static layerNoop: Layer.Layer<TracingService> = Layer.succeed(TracingService, TracingService.noop);
67
-
68
- /**
69
- * Creates a TracingService layer that emits events to the parent tracing service.
70
- */
71
- static layerSubframe = (mapContext: (currentContext: TracingService.TraceContext) => TracingService.TraceContext) =>
72
- Layer.effect(
73
- TracingService,
74
- Effect.gen(function* () {
75
- const tracing = yield* TracingService;
76
- const context = mapContext(tracing.getTraceContext());
77
- return {
78
- write: (event, context) => tracing.write(event, context),
79
- ephemeral: (event, context) => tracing.ephemeral(event, context),
80
- getTraceContext: () => context,
81
- traceInvocationStart: () => Effect.die('Tracing invocation inside another invocation is not supported.'),
82
- traceInvocationEnd: () => Effect.die('Tracing invocation inside another invocation is not supported.'),
83
- };
84
- }),
85
- );
86
-
87
- /**
88
- * Create sublayer to trace an invocation.
89
- * @param data
90
- * @returns
91
- */
92
- static layerInvocation = (data: TracingService.InvocationTraceData) =>
93
- TracingService.layerSubframe((context) => ({
94
- ...context,
95
- currentInvocation: data,
96
- }));
97
-
98
- /**
99
- * Emit the current human-readable execution status.
100
- */
101
- static emitStatus: (
102
- data: Omit<Obj.MakeProps<typeof AgentStatus>, 'created'>,
103
- ) => Effect.Effect<void, never, TracingService> = Effect.fnUntraced(function* (data) {
104
- const tracing = yield* TracingService;
105
- tracing.write(
106
- Obj.make(AgentStatus, {
107
- parentMessage: tracing.getTraceContext().parentMessage,
108
- toolCallId: tracing.getTraceContext().toolCallId,
109
- created: new Date().toISOString(),
110
- ...data,
111
- }),
112
- tracing.getTraceContext(),
113
- );
114
- });
115
-
116
- static emitConverationMessage: (
117
- data: Obj.MakeProps<typeof Message.Message> | Message.Message,
118
- ) => Effect.Effect<void, never, TracingService> = Effect.fnUntraced(function* (data) {
119
- const tracing = yield* TracingService;
120
- tracing.write(
121
- Obj.make(Message.Message, {
122
- parentMessage: tracing.getTraceContext().parentMessage,
123
- ...data,
124
- properties: {
125
- [MESSAGE_PROPERTY_TOOL_CALL_ID]: tracing.getTraceContext().toolCallId,
126
- ...data.properties,
127
- },
128
- }),
129
- tracing.getTraceContext(),
130
- );
131
- });
132
-
133
- static emitEphemeralMessage: (data: Message.Message) => Effect.Effect<void, never, TracingService> =
134
- Effect.fnUntraced(function* (data) {
135
- const tracing = yield* TracingService;
136
- tracing.ephemeral(data, tracing.getTraceContext());
137
- });
138
- }
139
-
140
- export namespace TracingService {
141
- export interface TraceContext {
142
- currentInvocation?: InvocationTraceData;
143
-
144
- /**
145
- * If this thread sprung from a tool call, this is the ID of the message containing the tool call.
146
- */
147
- parentMessage?: ObjectId;
148
-
149
- /**
150
- * If the current thread is a byproduct of a tool call, this is the ID of the tool call.
151
- */
152
- toolCallId?: string;
153
-
154
- debugInfo?: unknown;
155
- }
156
-
157
- /**
158
- * Trace data for a function/trigger invocation.
159
- */
160
- export interface InvocationTraceData {
161
- invocationId: ObjectId;
162
- invocationTraceQueue?: DXN.String;
163
- }
164
-
165
- /**
166
- * Payload for a function/trigger invocation.
167
- */
168
- export interface FunctionInvocationPayload {
169
- data?: any;
170
- inputNodeId?: string;
171
- trigger?: {
172
- id: string;
173
- kind: Trigger.Kind;
174
- };
175
- chat?: Ref.Ref<Obj.Unknown>;
176
- process?: {
177
- pid: string;
178
- parentPid?: string;
179
- /**
180
- * Key of the executable.
181
- */
182
- key: string;
183
-
184
- /**
185
- * Process name.
186
- */
187
- name?: string;
188
-
189
- /**
190
- * Target object that the process is assigned to.
191
- */
192
- target?: string;
193
- };
194
- }
195
- }
196
-
197
5
  /**
198
6
  * Goes into {@link Message['properties']}
199
7
  */
@@ -2,7 +2,4 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- export * as Script from './Script';
6
- export * as Trigger from './Trigger';
7
- export * as TriggerEvent from './TriggerEvent';
8
5
  export * from './url';
package/src/types/url.ts CHANGED
@@ -18,7 +18,7 @@ export const getUserFunctionIdInMetadata = (meta: Obj.ReadonlyMeta) => {
18
18
 
19
19
  /**
20
20
  * NOTE: functionId is backend ID, not ECHO object id.
21
- * Must be called inside Obj.changeMeta() since it mutates the meta.
21
+ * Must be called inside Obj.update() since it mutates the meta.
22
22
  */
23
23
  export const setUserFunctionIdInMetadata = (meta: Obj.Meta, functionId: string) => {
24
24
  const key = meta.keys.find((key) => key.source === FUNCTIONS_META_KEY);
@@ -1,38 +0,0 @@
1
- import {
2
- Event,
3
- EventType,
4
- Message,
5
- MessageData,
6
- Meta,
7
- OperationEnd,
8
- OperationStart,
9
- TraceService,
10
- TraceSink,
11
- isOfType,
12
- layerConsole,
13
- layerNoop,
14
- noopWriter,
15
- testTraceService,
16
- write,
17
- writerLayerNoop
18
- } from "./chunk-5T7GOX2V.mjs";
19
- import "./chunk-J5LGTIGS.mjs";
20
- export {
21
- Event,
22
- EventType,
23
- Message,
24
- MessageData,
25
- Meta,
26
- OperationEnd,
27
- OperationStart,
28
- TraceService,
29
- TraceSink,
30
- isOfType,
31
- layerConsole,
32
- layerNoop,
33
- noopWriter,
34
- testTraceService,
35
- write,
36
- writerLayerNoop
37
- };
38
- //# sourceMappingURL=Trace.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": [],
4
- "sourcesContent": [],
5
- "mappings": "",
6
- "names": []
7
- }