@dxos/functions 0.8.4-main.406dc2a → 0.8.4-main.422d1c7879

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 (231) hide show
  1. package/README.md +4 -6
  2. package/dist/lib/neutral/Trace.mjs +42 -0
  3. package/dist/lib/neutral/chunk-27Y24OTY.mjs +167 -0
  4. package/dist/lib/neutral/chunk-27Y24OTY.mjs.map +7 -0
  5. package/dist/lib/neutral/chunk-IVDUS56O.mjs +49 -0
  6. package/dist/lib/neutral/chunk-IVDUS56O.mjs.map +7 -0
  7. package/dist/lib/neutral/fib-N45KAC7C.mjs +23 -0
  8. package/dist/lib/neutral/fib-N45KAC7C.mjs.map +7 -0
  9. package/dist/lib/neutral/index.mjs +1218 -0
  10. package/dist/lib/neutral/index.mjs.map +7 -0
  11. package/dist/lib/neutral/meta.json +1 -0
  12. package/dist/lib/neutral/reply-EUEPKNJF.mjs +19 -0
  13. package/dist/lib/neutral/reply-EUEPKNJF.mjs.map +7 -0
  14. package/dist/lib/neutral/sleep-PUK3D4FF.mjs +15 -0
  15. package/dist/lib/neutral/sleep-PUK3D4FF.mjs.map +7 -0
  16. package/dist/types/src/Trace.d.ts +174 -0
  17. package/dist/types/src/Trace.d.ts.map +1 -0
  18. package/dist/types/src/errors.d.ts +44 -60
  19. package/dist/types/src/errors.d.ts.map +1 -1
  20. package/dist/types/src/example/definitions.d.ts +11 -0
  21. package/dist/types/src/example/definitions.d.ts.map +1 -0
  22. package/dist/types/src/example/fib.d.ts +8 -0
  23. package/dist/types/src/example/fib.d.ts.map +1 -0
  24. package/dist/types/src/example/forex-effect.d.ts +3 -0
  25. package/dist/types/src/example/forex-effect.d.ts.map +1 -0
  26. package/dist/types/src/example/index.d.ts +4 -0
  27. package/dist/types/src/example/index.d.ts.map +1 -0
  28. package/dist/types/src/example/reply.d.ts +4 -0
  29. package/dist/types/src/example/reply.d.ts.map +1 -0
  30. package/dist/types/src/example/sleep.d.ts +6 -0
  31. package/dist/types/src/example/sleep.d.ts.map +1 -0
  32. package/dist/types/src/index.d.ts +8 -8
  33. package/dist/types/src/index.d.ts.map +1 -1
  34. package/dist/types/src/process/Process.d.ts +246 -0
  35. package/dist/types/src/process/Process.d.ts.map +1 -0
  36. package/dist/types/src/process/ServiceResolver.d.ts +74 -0
  37. package/dist/types/src/process/ServiceResolver.d.ts.map +1 -0
  38. package/dist/types/src/process/StorageService.d.ts +58 -0
  39. package/dist/types/src/process/StorageService.d.ts.map +1 -0
  40. package/dist/types/src/protocol/functions-ai-http-client.d.ts +12 -0
  41. package/dist/types/src/protocol/functions-ai-http-client.d.ts.map +1 -0
  42. package/dist/types/src/protocol/index.d.ts +2 -0
  43. package/dist/types/src/protocol/index.d.ts.map +1 -0
  44. package/dist/types/src/protocol/protocol.d.ts +7 -0
  45. package/dist/types/src/protocol/protocol.d.ts.map +1 -0
  46. package/dist/types/src/protocol/protocol.test.d.ts +2 -0
  47. package/dist/types/src/protocol/protocol.test.d.ts.map +1 -0
  48. package/dist/types/src/sdk.d.ts +11 -0
  49. package/dist/types/src/sdk.d.ts.map +1 -0
  50. package/dist/types/src/services/credentials.d.ts +6 -4
  51. package/dist/types/src/services/credentials.d.ts.map +1 -1
  52. package/dist/types/src/services/event-logger.d.ts +34 -32
  53. package/dist/types/src/services/event-logger.d.ts.map +1 -1
  54. package/dist/types/src/services/function-invocation-service.d.ts +7 -19
  55. package/dist/types/src/services/function-invocation-service.d.ts.map +1 -1
  56. package/dist/types/src/services/index.d.ts +3 -5
  57. package/dist/types/src/services/index.d.ts.map +1 -1
  58. package/dist/types/src/services/queues.d.ts +8 -5
  59. package/dist/types/src/services/queues.d.ts.map +1 -1
  60. package/dist/types/src/services/tracing.d.ts +1 -55
  61. package/dist/types/src/services/tracing.d.ts.map +1 -1
  62. package/dist/types/src/types/Script.d.ts +22 -0
  63. package/dist/types/src/types/Script.d.ts.map +1 -0
  64. package/dist/types/src/types/Trigger.d.ts +150 -0
  65. package/dist/types/src/types/Trigger.d.ts.map +1 -0
  66. package/dist/types/src/types/TriggerEvent.d.ts +75 -0
  67. package/dist/types/src/types/TriggerEvent.d.ts.map +1 -0
  68. package/dist/types/src/types/index.d.ts +5 -0
  69. package/dist/types/src/types/index.d.ts.map +1 -0
  70. package/dist/types/src/types/url.d.ts +13 -0
  71. package/dist/types/src/types/url.d.ts.map +1 -0
  72. package/dist/types/tsconfig.tsbuildinfo +1 -1
  73. package/package.json +29 -62
  74. package/src/Trace.ts +225 -0
  75. package/src/errors.ts +5 -5
  76. package/src/example/definitions.ts +49 -0
  77. package/src/example/fib.ts +23 -0
  78. package/src/example/forex-effect.ts +40 -0
  79. package/src/example/index.ts +12 -0
  80. package/src/example/reply.ts +19 -0
  81. package/src/example/sleep.ts +17 -0
  82. package/src/index.ts +8 -8
  83. package/src/process/Process.ts +487 -0
  84. package/src/process/ServiceResolver.ts +174 -0
  85. package/src/process/StorageService.ts +99 -0
  86. package/src/protocol/functions-ai-http-client.ts +67 -0
  87. package/src/{executor → protocol}/index.ts +1 -1
  88. package/src/protocol/protocol.test.ts +58 -0
  89. package/src/protocol/protocol.ts +273 -0
  90. package/src/sdk.ts +30 -0
  91. package/src/services/credentials.ts +32 -17
  92. package/src/services/event-logger.ts +11 -21
  93. package/src/services/function-invocation-service.ts +20 -69
  94. package/src/services/index.ts +3 -5
  95. package/src/services/queues.ts +15 -8
  96. package/src/services/tracing.ts +1 -136
  97. package/src/types/Script.ts +38 -0
  98. package/src/types/Trigger.ts +207 -0
  99. package/src/types/TriggerEvent.ts +62 -0
  100. package/src/types/index.ts +8 -0
  101. package/src/types/url.ts +32 -0
  102. package/dist/lib/browser/bundler/index.mjs +0 -269
  103. package/dist/lib/browser/bundler/index.mjs.map +0 -7
  104. package/dist/lib/browser/chunk-LKYT2SAL.mjs +0 -665
  105. package/dist/lib/browser/chunk-LKYT2SAL.mjs.map +0 -7
  106. package/dist/lib/browser/edge/index.mjs +0 -83
  107. package/dist/lib/browser/edge/index.mjs.map +0 -7
  108. package/dist/lib/browser/index.mjs +0 -1395
  109. package/dist/lib/browser/index.mjs.map +0 -7
  110. package/dist/lib/browser/meta.json +0 -1
  111. package/dist/lib/browser/testing/index.mjs +0 -131
  112. package/dist/lib/browser/testing/index.mjs.map +0 -7
  113. package/dist/lib/node-esm/bundler/index.mjs +0 -270
  114. package/dist/lib/node-esm/bundler/index.mjs.map +0 -7
  115. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +0 -11
  116. package/dist/lib/node-esm/chunk-NAQIKLZB.mjs +0 -667
  117. package/dist/lib/node-esm/chunk-NAQIKLZB.mjs.map +0 -7
  118. package/dist/lib/node-esm/edge/index.mjs +0 -84
  119. package/dist/lib/node-esm/edge/index.mjs.map +0 -7
  120. package/dist/lib/node-esm/index.mjs +0 -1396
  121. package/dist/lib/node-esm/index.mjs.map +0 -7
  122. package/dist/lib/node-esm/meta.json +0 -1
  123. package/dist/lib/node-esm/testing/index.mjs +0 -132
  124. package/dist/lib/node-esm/testing/index.mjs.map +0 -7
  125. package/dist/types/src/bundler/bundler.d.ts +0 -49
  126. package/dist/types/src/bundler/bundler.d.ts.map +0 -1
  127. package/dist/types/src/bundler/bundler.test.d.ts +0 -2
  128. package/dist/types/src/bundler/bundler.test.d.ts.map +0 -1
  129. package/dist/types/src/bundler/index.d.ts +0 -2
  130. package/dist/types/src/bundler/index.d.ts.map +0 -1
  131. package/dist/types/src/edge/functions.d.ts +0 -17
  132. package/dist/types/src/edge/functions.d.ts.map +0 -1
  133. package/dist/types/src/edge/index.d.ts +0 -2
  134. package/dist/types/src/edge/index.d.ts.map +0 -1
  135. package/dist/types/src/examples/fib.d.ts +0 -7
  136. package/dist/types/src/examples/fib.d.ts.map +0 -1
  137. package/dist/types/src/examples/index.d.ts +0 -4
  138. package/dist/types/src/examples/index.d.ts.map +0 -1
  139. package/dist/types/src/examples/reply.d.ts +0 -3
  140. package/dist/types/src/examples/reply.d.ts.map +0 -1
  141. package/dist/types/src/examples/sleep.d.ts +0 -5
  142. package/dist/types/src/examples/sleep.d.ts.map +0 -1
  143. package/dist/types/src/executor/executor.d.ts +0 -14
  144. package/dist/types/src/executor/executor.d.ts.map +0 -1
  145. package/dist/types/src/executor/index.d.ts +0 -2
  146. package/dist/types/src/executor/index.d.ts.map +0 -1
  147. package/dist/types/src/handler.d.ts +0 -109
  148. package/dist/types/src/handler.d.ts.map +0 -1
  149. package/dist/types/src/schema.d.ts +0 -43
  150. package/dist/types/src/schema.d.ts.map +0 -1
  151. package/dist/types/src/services/database.d.ts +0 -67
  152. package/dist/types/src/services/database.d.ts.map +0 -1
  153. package/dist/types/src/services/function-invocation-service.test.d.ts +0 -2
  154. package/dist/types/src/services/function-invocation-service.test.d.ts.map +0 -1
  155. package/dist/types/src/services/local-function-execution.d.ts +0 -34
  156. package/dist/types/src/services/local-function-execution.d.ts.map +0 -1
  157. package/dist/types/src/services/remote-function-execution-service.d.ts +0 -22
  158. package/dist/types/src/services/remote-function-execution-service.d.ts.map +0 -1
  159. package/dist/types/src/services/service-container.d.ts +0 -57
  160. package/dist/types/src/services/service-container.d.ts.map +0 -1
  161. package/dist/types/src/services/service-registry.d.ts +0 -31
  162. package/dist/types/src/services/service-registry.d.ts.map +0 -1
  163. package/dist/types/src/services/service-registry.test.d.ts +0 -2
  164. package/dist/types/src/services/service-registry.test.d.ts.map +0 -1
  165. package/dist/types/src/testing/index.d.ts +0 -3
  166. package/dist/types/src/testing/index.d.ts.map +0 -1
  167. package/dist/types/src/testing/layer.d.ts +0 -18
  168. package/dist/types/src/testing/layer.d.ts.map +0 -1
  169. package/dist/types/src/testing/logger.d.ts +0 -5
  170. package/dist/types/src/testing/logger.d.ts.map +0 -1
  171. package/dist/types/src/testing/persist-database.test.d.ts +0 -2
  172. package/dist/types/src/testing/persist-database.test.d.ts.map +0 -1
  173. package/dist/types/src/testing/services.d.ts +0 -59
  174. package/dist/types/src/testing/services.d.ts.map +0 -1
  175. package/dist/types/src/trace.d.ts +0 -122
  176. package/dist/types/src/trace.d.ts.map +0 -1
  177. package/dist/types/src/translations.d.ts +0 -12
  178. package/dist/types/src/translations.d.ts.map +0 -1
  179. package/dist/types/src/triggers/index.d.ts +0 -4
  180. package/dist/types/src/triggers/index.d.ts.map +0 -1
  181. package/dist/types/src/triggers/input-builder.d.ts +0 -3
  182. package/dist/types/src/triggers/input-builder.d.ts.map +0 -1
  183. package/dist/types/src/triggers/invocation-tracer.d.ts +0 -37
  184. package/dist/types/src/triggers/invocation-tracer.d.ts.map +0 -1
  185. package/dist/types/src/triggers/trigger-dispatcher.d.ts +0 -78
  186. package/dist/types/src/triggers/trigger-dispatcher.d.ts.map +0 -1
  187. package/dist/types/src/triggers/trigger-dispatcher.test.d.ts +0 -2
  188. package/dist/types/src/triggers/trigger-dispatcher.test.d.ts.map +0 -1
  189. package/dist/types/src/triggers/trigger-state-store.d.ts +0 -28
  190. package/dist/types/src/triggers/trigger-state-store.d.ts.map +0 -1
  191. package/dist/types/src/types.d.ts +0 -230
  192. package/dist/types/src/types.d.ts.map +0 -1
  193. package/dist/types/src/url.d.ts +0 -21
  194. package/dist/types/src/url.d.ts.map +0 -1
  195. package/src/bundler/bundler.test.ts +0 -58
  196. package/src/bundler/bundler.ts +0 -295
  197. package/src/bundler/index.ts +0 -5
  198. package/src/edge/functions.ts +0 -67
  199. package/src/edge/index.ts +0 -9
  200. package/src/examples/fib.ts +0 -32
  201. package/src/examples/index.ts +0 -7
  202. package/src/examples/reply.ts +0 -21
  203. package/src/examples/sleep.ts +0 -24
  204. package/src/executor/executor.ts +0 -58
  205. package/src/handler.ts +0 -225
  206. package/src/schema.ts +0 -71
  207. package/src/services/database.ts +0 -175
  208. package/src/services/function-invocation-service.test.ts +0 -81
  209. package/src/services/local-function-execution.ts +0 -153
  210. package/src/services/remote-function-execution-service.ts +0 -63
  211. package/src/services/service-container.ts +0 -115
  212. package/src/services/service-registry.test.ts +0 -45
  213. package/src/services/service-registry.ts +0 -63
  214. package/src/testing/index.ts +0 -6
  215. package/src/testing/layer.ts +0 -114
  216. package/src/testing/logger.ts +0 -17
  217. package/src/testing/persist-database.test.ts +0 -87
  218. package/src/testing/services.ts +0 -115
  219. package/src/trace.ts +0 -178
  220. package/src/translations.ts +0 -20
  221. package/src/triggers/index.ts +0 -7
  222. package/src/triggers/input-builder.ts +0 -35
  223. package/src/triggers/invocation-tracer.ts +0 -101
  224. package/src/triggers/trigger-dispatcher.test.ts +0 -665
  225. package/src/triggers/trigger-dispatcher.ts +0 -533
  226. package/src/triggers/trigger-state-store.ts +0 -61
  227. package/src/types.ts +0 -218
  228. package/src/url.ts +0 -55
  229. /package/dist/lib/{browser/chunk-J5LGTIGS.mjs.map → neutral/Trace.mjs.map} +0 -0
  230. /package/dist/lib/{browser → neutral}/chunk-J5LGTIGS.mjs +0 -0
  231. /package/dist/lib/{node-esm/chunk-HSLMI22Q.mjs.map → neutral/chunk-J5LGTIGS.mjs.map} +0 -0
package/package.json CHANGED
@@ -1,9 +1,13 @@
1
1
  {
2
2
  "name": "@dxos/functions",
3
- "version": "0.8.4-main.406dc2a",
4
- "description": "Functions API and runtime.",
3
+ "version": "0.8.4-main.422d1c7879",
4
+ "description": "Functions API.",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/dxos/dxos"
10
+ },
7
11
  "license": "MIT",
8
12
  "author": "info@dxos.org",
9
13
  "sideEffects": false,
@@ -12,76 +16,39 @@
12
16
  ".": {
13
17
  "source": "./src/index.ts",
14
18
  "types": "./dist/types/src/index.d.ts",
15
- "browser": "./dist/lib/browser/index.mjs",
16
- "node": "./dist/lib/node-esm/index.mjs"
17
- },
18
- "./bundler": {
19
- "source": "./src/bundler/index.ts",
20
- "types": "./dist/types/src/bundler/index.d.ts",
21
- "browser": "./dist/lib/browser/bundler/index.mjs",
22
- "node": "./dist/lib/node-esm/bundler/index.mjs"
23
- },
24
- "./edge": {
25
- "source": "./src/edge/index.ts",
26
- "types": "./dist/types/src/edge/index.d.ts",
27
- "browser": "./dist/lib/browser/edge/index.mjs",
28
- "node": "./dist/lib/node-esm/edge/index.mjs"
19
+ "default": "./dist/lib/neutral/index.mjs"
29
20
  },
30
- "./testing": {
31
- "source": "./src/testing/index.ts",
32
- "types": "./dist/types/src/testing/index.d.ts",
33
- "browser": "./dist/lib/browser/testing/index.mjs",
34
- "node": "./dist/lib/node-esm/testing/index.mjs"
21
+ "./Trace": {
22
+ "source": "./src/Trace.ts",
23
+ "types": "./dist/types/src/Trace.d.ts",
24
+ "default": "./dist/lib/neutral/Trace.mjs"
35
25
  }
36
26
  },
37
27
  "types": "dist/types/src/index.d.ts",
38
- "typesVersions": {
39
- "*": {
40
- "bundler": [
41
- "dist/types/src/bundler/index.d.ts"
42
- ],
43
- "edge": [
44
- "dist/types/src/edge/index.d.ts"
45
- ]
46
- }
47
- },
48
28
  "files": [
49
29
  "dist",
50
30
  "schema",
51
31
  "src"
52
32
  ],
53
33
  "dependencies": {
54
- "@effect/platform": "0.92.1",
55
- "effect": "3.18.3",
56
- "esbuild-wasm": "^0.16.14",
57
- "i18next": "^24.2.1",
58
- "iso-did": "^1.6.0",
59
- "@dxos/ai": "0.8.4-main.406dc2a",
60
- "@dxos/async": "0.8.4-main.406dc2a",
61
- "@dxos/client": "0.8.4-main.406dc2a",
62
- "@dxos/client-protocol": "0.8.4-main.406dc2a",
63
- "@dxos/context": "0.8.4-main.406dc2a",
64
- "@dxos/crypto": "0.8.4-main.406dc2a",
65
- "@dxos/debug": "0.8.4-main.406dc2a",
66
- "@dxos/echo-db": "0.8.4-main.406dc2a",
67
- "@dxos/echo-protocol": "0.8.4-main.406dc2a",
68
- "@dxos/edge-client": "0.8.4-main.406dc2a",
69
- "@dxos/echo-pipeline": "0.8.4-main.406dc2a",
70
- "@dxos/echo": "0.8.4-main.406dc2a",
71
- "@dxos/effect": "0.8.4-main.406dc2a",
72
- "@dxos/errors": "0.8.4-main.406dc2a",
73
- "@dxos/invariant": "0.8.4-main.406dc2a",
74
- "@dxos/keys": "0.8.4-main.406dc2a",
75
- "@dxos/kv-store": "0.8.4-main.406dc2a",
76
- "@dxos/log": "0.8.4-main.406dc2a",
77
- "@dxos/node-std": "0.8.4-main.406dc2a",
78
- "@dxos/protocols": "0.8.4-main.406dc2a",
79
- "@dxos/live-object": "0.8.4-main.406dc2a",
80
- "@dxos/schema": "0.8.4-main.406dc2a",
81
- "@dxos/util": "0.8.4-main.406dc2a"
82
- },
83
- "devDependencies": {
84
- "@dxos/agent": "0.8.4-main.406dc2a"
34
+ "@effect-atom/atom": "^0.5.1",
35
+ "@effect/ai-anthropic": "0.23.0",
36
+ "@effect/platform": "0.94.4",
37
+ "effect": "3.20.0",
38
+ "@dxos/ai": "0.8.4-main.422d1c7879",
39
+ "@dxos/context": "0.8.4-main.422d1c7879",
40
+ "@dxos/echo": "0.8.4-main.422d1c7879",
41
+ "@dxos/echo-db": "0.8.4-main.422d1c7879",
42
+ "@dxos/errors": "0.8.4-main.422d1c7879",
43
+ "@dxos/invariant": "0.8.4-main.422d1c7879",
44
+ "@dxos/effect": "0.8.4-main.422d1c7879",
45
+ "@dxos/keys": "0.8.4-main.422d1c7879",
46
+ "@dxos/log": "0.8.4-main.422d1c7879",
47
+ "@dxos/operation": "0.8.4-main.422d1c7879",
48
+ "@dxos/protocols": "0.8.4-main.422d1c7879",
49
+ "@dxos/types": "0.8.4-main.422d1c7879",
50
+ "@dxos/node-std": "0.8.4-main.422d1c7879",
51
+ "@dxos/schema": "0.8.4-main.422d1c7879"
85
52
  },
86
53
  "publishConfig": {
87
54
  "access": "public"
package/src/Trace.ts ADDED
@@ -0,0 +1,225 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ // @import-as-namespace
6
+
7
+ import * as Context from 'effect/Context';
8
+ import * as Effect from 'effect/Effect';
9
+ import * as Layer from 'effect/Layer';
10
+ import * as Schema from 'effect/Schema';
11
+
12
+ import { Annotation, Obj, Type } from '@dxos/echo';
13
+
14
+ /**
15
+ * Writes ephemeral or persistent events to the trace.
16
+ * Exposed to processes and operations to record events to the trace.
17
+ */
18
+ export interface TraceWriter {
19
+ write<T>(eventType: EventType<T>, payload: NoInfer<T>): void;
20
+ }
21
+
22
+ /**
23
+ * Service that writes events to the trace.
24
+ * Exposed to processes and operations to record events to the trace.
25
+ */
26
+ export class TraceService extends Context.Tag('@dxos/functions/TraceService')<TraceService, TraceWriter>() {}
27
+
28
+ /**
29
+ * Writes an event to the trace.
30
+ */
31
+ export const write: <T>(eventType: EventType<T>, payload: NoInfer<T>) => Effect.Effect<void, never, TraceService> =
32
+ Effect.serviceFunction(TraceService, (_) => _.write);
33
+
34
+ /**
35
+ * Defines an event type for the trace.
36
+ */
37
+ export interface EventType<T> {
38
+ readonly key: string;
39
+ readonly schema: Schema.Schema<T, any>;
40
+ readonly isEphemeral: boolean;
41
+ }
42
+
43
+ export const EventType = <T>(
44
+ key: string,
45
+ opts: { schema: Schema.Schema<T, any>; isEphemeral: boolean },
46
+ ): EventType<T> => {
47
+ return {
48
+ key,
49
+ schema: opts.schema,
50
+ isEphemeral: opts.isEphemeral,
51
+ };
52
+ };
53
+
54
+ /**
55
+ * Extracts the payload type from an event type.
56
+ */
57
+ export type PayloadType<E extends EventType<any>> = E extends EventType<infer T> ? T : never;
58
+
59
+ export const Event = Schema.Struct({
60
+ timestamp: Schema.Number,
61
+ type: Schema.String,
62
+ data: Schema.Unknown, // Type-specific payload;
63
+ });
64
+ export interface Event extends Schema.Schema.Type<typeof Event> {}
65
+
66
+ /**
67
+ * Checks if an event is of a given type.
68
+ */
69
+ export const isOfType = <T, E extends Event>(eventType: EventType<T>, event: E): event is E & { data: T } => {
70
+ return event.type === eventType.key;
71
+ };
72
+
73
+ /**
74
+ * Metadata on the context of a trace message.
75
+ */
76
+ // TODO(dmaretskyi): Expand on this: conversation id, tool call id, etc.
77
+ export const Meta = Schema.Struct({
78
+ pid: Schema.optional(Schema.String), // NOTE: Not Process.ID to avoid circular dependency.
79
+ parentPid: Schema.optional(Schema.String),
80
+ processName: Schema.optional(Schema.String),
81
+
82
+ /**
83
+ * ID of the conversation feed object if present.
84
+ */
85
+ conversationId: Schema.optional(Obj.ID),
86
+
87
+ /**
88
+ * ID of the trigger object if invocation resulted from a trigger.
89
+ */
90
+ triggerId: Schema.optional(Obj.ID),
91
+
92
+ /**
93
+ * ID of the tool call that created the current process.
94
+ */
95
+ toolCallId: Schema.optional(Schema.String),
96
+ });
97
+ export interface Meta extends Schema.Schema.Type<typeof Meta> {}
98
+
99
+ /**
100
+ * Envelope for a set of events.
101
+ */
102
+ export const MessageData = Schema.Struct({
103
+ meta: Meta,
104
+
105
+ isEphemeral: Schema.Boolean,
106
+ events: Schema.Array(Event),
107
+ });
108
+ export interface MessageData extends Schema.Schema.Type<typeof MessageData> {}
109
+
110
+ export const Message = MessageData.pipe(
111
+ Type.object({
112
+ typename: 'org.dxos.type.traceMessage',
113
+ version: '0.1.0',
114
+ }),
115
+ Annotation.IconAnnotation.set({
116
+ icon: 'ph--note--regular',
117
+ hue: 'rose',
118
+ }),
119
+ );
120
+ export interface Message extends Schema.Schema.Type<typeof Message> {}
121
+
122
+ /**
123
+ * Sink for complete trace messages.
124
+ */
125
+ export interface Sink {
126
+ write(message: Message): void;
127
+ }
128
+
129
+ /**
130
+ * Sink for complete trace messages.
131
+ * The Process Manager forwards trace messages to it.
132
+ */
133
+ // TODO(dmaretskyi): Consider moving sink to the Process Manager.
134
+ export class TraceSink extends Context.Tag('@dxos/functions/TraceSink')<TraceSink, Sink>() {}
135
+
136
+ export const noopWriter: TraceWriter = {
137
+ write: () => {},
138
+ };
139
+
140
+ export const writerLayerNoop: Layer.Layer<TraceService> = Layer.succeed(TraceService, noopWriter);
141
+
142
+ export const layerNoop: Layer.Layer<TraceSink> = Layer.succeed(TraceSink, {
143
+ write: () => {},
144
+ });
145
+
146
+ export const layerConsole: Layer.Layer<TraceSink> = Layer.succeed(TraceSink, {
147
+ write: (message) => {
148
+ console.log(message);
149
+ },
150
+ });
151
+
152
+ export const testTraceService = (opts: { meta?: Meta } = {}): Layer.Layer<TraceService, never, TraceSink> =>
153
+ Layer.effect(
154
+ TraceService,
155
+ Effect.gen(function* () {
156
+ const sink = yield* TraceSink;
157
+ return {
158
+ write: (event, data) => {
159
+ sink.write(
160
+ Obj.make(Message, {
161
+ meta: opts.meta ?? {},
162
+ isEphemeral: event.isEphemeral,
163
+ events: [{ type: event.key, timestamp: Date.now(), data }],
164
+ }),
165
+ );
166
+ },
167
+ };
168
+ }),
169
+ );
170
+
171
+ //
172
+ // Operation Trace Events
173
+ //
174
+
175
+ /**
176
+ * Outcome of an operation invocation.
177
+ */
178
+ export type OperationOutcome = 'success' | 'failure';
179
+
180
+ /**
181
+ * Operation invocation started.
182
+ */
183
+ export const OperationStart = EventType('operation.start', {
184
+ schema: Schema.Struct({
185
+ /** Operation key. */
186
+ key: Schema.String,
187
+ /** Human-readable operation name. */
188
+ name: Schema.optional(Schema.String),
189
+ }),
190
+ isEphemeral: false,
191
+ });
192
+
193
+ /**
194
+ * Operation invocation ended.
195
+ */
196
+ export const OperationEnd = EventType('operation.end', {
197
+ schema: Schema.Struct({
198
+ /** Operation key. */
199
+ key: Schema.String,
200
+ /** Human-readable operation name. */
201
+ name: Schema.optional(Schema.String),
202
+ /** Outcome of the operation. */
203
+ outcome: Schema.Literal('success', 'failure'),
204
+ /** Error message if the operation failed. */
205
+ error: Schema.optional(Schema.String),
206
+ }),
207
+ isEphemeral: false,
208
+ });
209
+
210
+ /**
211
+ * Human-readable status update emitted by an agent or operation.
212
+ */
213
+ export const StatusUpdate = EventType('status.update', {
214
+ schema: Schema.Struct({
215
+ /** Human-readable status message. */
216
+ message: Schema.String,
217
+ }),
218
+ isEphemeral: true,
219
+ });
220
+
221
+ /**
222
+ * Emit the current human-readable execution status to the trace.
223
+ */
224
+ export const emitStatus: (message: string) => Effect.Effect<void, never, TraceService> = (message) =>
225
+ write(StatusUpdate, { message });
package/src/errors.ts CHANGED
@@ -4,18 +4,18 @@
4
4
 
5
5
  import { BaseError, type BaseErrorOptions } from '@dxos/errors';
6
6
 
7
- export class ServiceNotAvailableError extends BaseError.extend('SERVICE_NOT_AVAILABLE', 'Service not available') {
7
+ export class ServiceNotAvailableError extends BaseError.extend('ServiceNotAvailable', 'Service not available') {
8
8
  constructor(service: string, options?: Omit<BaseErrorOptions, 'context'>) {
9
- super({ context: { service }, ...options });
9
+ super({ context: { service }, ...options, message: `Service not available: ${service}` });
10
10
  }
11
11
  }
12
12
 
13
- export class FunctionNotFoundError extends BaseError.extend('FUNCTION_NOT_FOUND', 'Function not found') {
13
+ export class FunctionNotFoundError extends BaseError.extend('FunctionNotFound', 'Function not found') {
14
14
  constructor(functionKey: string, options?: Omit<BaseErrorOptions, 'context'>) {
15
15
  super({ context: { function: functionKey }, ...options });
16
16
  }
17
17
  }
18
18
 
19
- export class FunctionError extends BaseError.extend('FUNCTION_ERROR', 'Function invocation error') {}
19
+ export class FunctionError extends BaseError.extend('FunctionError', 'Function invocation error') {}
20
20
 
21
- export class TriggerStateNotFoundError extends BaseError.extend('TRIGGER_STATE_NOT_FOUND', 'Trigger state not found') {}
21
+ export class TriggerStateNotFoundError extends BaseError.extend('TriggerStateNotFound', 'Trigger state not found') {}
@@ -0,0 +1,49 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import * as Schema from 'effect/Schema';
6
+
7
+ import { Operation } from '@dxos/operation';
8
+
9
+ export const Fibonacci = Operation.make({
10
+ meta: {
11
+ key: 'example.org/function/fib',
12
+ name: 'Fibonacci',
13
+ description: 'Function that calculates a Fibonacci number',
14
+ },
15
+ input: Schema.Struct({
16
+ iterations: Schema.optional(Schema.Number).annotations({
17
+ description: 'Number of iterations',
18
+ default: 100_000,
19
+ }),
20
+ }),
21
+ output: Schema.Struct({
22
+ result: Schema.String,
23
+ }),
24
+ });
25
+
26
+ export const Reply = Operation.make({
27
+ meta: {
28
+ key: 'example.org/function/reply',
29
+ name: 'Reply',
30
+ description: 'Function that echoes the input',
31
+ },
32
+ input: Schema.Any,
33
+ output: Schema.Any,
34
+ });
35
+
36
+ export const Sleep = Operation.make({
37
+ meta: {
38
+ key: 'example.org/function/sleep',
39
+ name: 'Sleep',
40
+ description: 'Function that sleeps for a given amount of time',
41
+ },
42
+ input: Schema.Struct({
43
+ duration: Schema.optional(Schema.Number).annotations({
44
+ description: 'Milliseconds to sleep',
45
+ default: 100_000,
46
+ }),
47
+ }),
48
+ output: Schema.Void,
49
+ });
@@ -0,0 +1,23 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+
7
+ import { Operation } from '@dxos/operation';
8
+
9
+ import { Fibonacci } from './definitions';
10
+
11
+ export default Fibonacci.pipe(
12
+ Operation.withHandler(
13
+ Effect.fn(function* ({ iterations = 100_000 }) {
14
+ let a = 0n;
15
+ let b = 1n;
16
+ for (let i = 0; i < iterations; i++) {
17
+ a += b;
18
+ b = a - b;
19
+ }
20
+ return { result: a.toString() };
21
+ }),
22
+ ),
23
+ );
@@ -0,0 +1,40 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ // @ts-ignore
6
+ import { S, defineFunction } from 'dxos:functions';
7
+ import {
8
+ FetchHttpClient,
9
+ HttpClient,
10
+ HttpClientRequest,
11
+ // @ts-ignore
12
+ } from 'https://esm.sh/@effect/platform@0.89.0?deps=effect@3.17.0&bundle=false';
13
+ // @ts-ignore
14
+ import { Effect, Schedule } from 'https://esm.sh/effect@3.17.0?bundle=false';
15
+
16
+ export default defineFunction({
17
+ key: 'org.dxos.script.forex-effect',
18
+ name: 'Forex Effect',
19
+ description: 'Returns the exchange rate between two currencies.',
20
+
21
+ inputSchema: S.Struct({
22
+ from: S.String.annotations({ description: 'The source currency' }),
23
+ to: S.String.annotations({ description: 'The target currency' }),
24
+ }),
25
+
26
+ outputSchema: S.String.annotations({ description: 'The exchange rate between the two currencies' }),
27
+
28
+ handler: async ({ data: { from, to } }: any) =>
29
+ Effect.gen(function* () {
30
+ const res = yield* HttpClientRequest.get(`https://free.ratesdb.com/v1/rates?from=${from}&to=${to}`).pipe(
31
+ HttpClient.execute,
32
+ Effect.flatMap((res: any) => res.json),
33
+ Effect.timeout('1 second'),
34
+ Effect.retry(Schedule.exponential(1_000).pipe(Schedule.compose(Schedule.recurs(3)))),
35
+ Effect.scoped,
36
+ );
37
+
38
+ return res.data.rates[to].toString();
39
+ }).pipe(Effect.provide(FetchHttpClient.layer)),
40
+ });
@@ -0,0 +1,12 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { OperationHandlerSet } from '@dxos/operation';
6
+ export * from './definitions';
7
+
8
+ export const ExampleHandlers = OperationHandlerSet.lazy(
9
+ () => import('./fib'),
10
+ () => import('./reply'),
11
+ () => import('./sleep'),
12
+ );
@@ -0,0 +1,19 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Console from 'effect/Console';
6
+ import * as Effect from 'effect/Effect';
7
+
8
+ import { Operation } from '@dxos/operation';
9
+
10
+ import { Reply } from './definitions';
11
+
12
+ export default Reply.pipe(
13
+ Operation.withHandler(
14
+ Effect.fn(function* (input) {
15
+ yield* Console.log('reply', { input });
16
+ return input;
17
+ }),
18
+ ),
19
+ );
@@ -0,0 +1,17 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+
7
+ import { Operation } from '@dxos/operation';
8
+
9
+ import { Sleep } from './definitions';
10
+
11
+ export default Sleep.pipe(
12
+ Operation.withHandler(
13
+ Effect.fn(function* ({ duration = 100_000 }) {
14
+ yield* Effect.sleep(duration);
15
+ }),
16
+ ),
17
+ );
package/src/index.ts CHANGED
@@ -3,12 +3,12 @@
3
3
  //
4
4
 
5
5
  export * from './errors';
6
- export * from './handler';
7
- export * from './schema';
8
- export * from './trace';
9
- export * from './types';
10
- export * from './url';
11
- export * from './triggers';
6
+ export * from './example';
7
+ export * as Process from './process/Process';
8
+ export * as ServiceResolver from './process/ServiceResolver';
9
+ export * from './process/StorageService';
10
+ export * from './sdk';
12
11
  export * from './services';
13
- export * from './executor';
14
- export * as exampleFunctions from './examples';
12
+ export * from './types';
13
+ export * from './protocol';
14
+ export * as Trace from './Trace';