@dxos/compute 0.8.4-main.fd6878d → 0.9.0

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 (181) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +36 -1
  3. package/dist/lib/neutral/StorageService.mjs +22 -0
  4. package/dist/lib/neutral/chunk-2B2KSJT6.mjs +17 -0
  5. package/dist/lib/neutral/chunk-2B2KSJT6.mjs.map +7 -0
  6. package/dist/lib/neutral/chunk-AFBNVFAY.mjs +25 -0
  7. package/dist/lib/neutral/chunk-AFBNVFAY.mjs.map +7 -0
  8. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
  9. package/dist/lib/neutral/chunk-JAU4E4EK.mjs +53 -0
  10. package/dist/lib/neutral/chunk-JAU4E4EK.mjs.map +7 -0
  11. package/dist/lib/neutral/chunk-MEPE4HHX.mjs +21 -0
  12. package/dist/lib/neutral/chunk-MEPE4HHX.mjs.map +7 -0
  13. package/dist/lib/neutral/chunk-QZS4G6PE.mjs +240 -0
  14. package/dist/lib/neutral/chunk-QZS4G6PE.mjs.map +7 -0
  15. package/dist/lib/neutral/chunk-XEVFBI6S.mjs +62 -0
  16. package/dist/lib/neutral/chunk-XEVFBI6S.mjs.map +7 -0
  17. package/dist/lib/neutral/chunk-Z3Y7FQGN.mjs +174 -0
  18. package/dist/lib/neutral/chunk-Z3Y7FQGN.mjs.map +7 -0
  19. package/dist/lib/neutral/fib-HBDUGQW7.mjs +10 -0
  20. package/dist/lib/neutral/fib-HBDUGQW7.mjs.map +7 -0
  21. package/dist/lib/neutral/index.mjs +1183 -0
  22. package/dist/lib/neutral/index.mjs.map +7 -0
  23. package/dist/lib/neutral/meta.json +1 -0
  24. package/dist/lib/neutral/reply-RJIAJ6FV.mjs +10 -0
  25. package/dist/lib/neutral/reply-RJIAJ6FV.mjs.map +7 -0
  26. package/dist/lib/neutral/sleep-3T2CZ7RE.mjs +10 -0
  27. package/dist/lib/neutral/sleep-3T2CZ7RE.mjs.map +7 -0
  28. package/dist/lib/neutral/testing/index.mjs +32 -0
  29. package/dist/lib/neutral/testing/index.mjs.map +7 -0
  30. package/dist/types/src/Blueprint.d.ts +182 -0
  31. package/dist/types/src/Blueprint.d.ts.map +1 -0
  32. package/dist/types/src/Credential.d.ts +27 -0
  33. package/dist/types/src/Credential.d.ts.map +1 -0
  34. package/dist/types/src/Header.d.ts +9 -0
  35. package/dist/types/src/Header.d.ts.map +1 -0
  36. package/dist/types/src/Header.test.d.ts +2 -0
  37. package/dist/types/src/Header.test.d.ts.map +1 -0
  38. package/dist/types/src/LayerSpec.d.ts +56 -0
  39. package/dist/types/src/LayerSpec.d.ts.map +1 -0
  40. package/dist/types/src/McpServer.d.ts +26 -0
  41. package/dist/types/src/McpServer.d.ts.map +1 -0
  42. package/dist/types/src/Operation.d.ts +385 -0
  43. package/dist/types/src/Operation.d.ts.map +1 -0
  44. package/dist/types/src/OperationHandlerSet.d.ts +69 -0
  45. package/dist/types/src/OperationHandlerSet.d.ts.map +1 -0
  46. package/dist/types/src/OperationHandlerSet.test.d.ts +2 -0
  47. package/dist/types/src/OperationHandlerSet.test.d.ts.map +1 -0
  48. package/dist/types/src/OperationRegistry.d.ts +23 -0
  49. package/dist/types/src/OperationRegistry.d.ts.map +1 -0
  50. package/dist/types/src/Process.d.ts +255 -0
  51. package/dist/types/src/Process.d.ts.map +1 -0
  52. package/dist/types/src/Routine.d.ts +54 -0
  53. package/dist/types/src/Routine.d.ts.map +1 -0
  54. package/dist/types/src/Script.d.ts +21 -0
  55. package/dist/types/src/Script.d.ts.map +1 -0
  56. package/dist/types/src/ServiceResolver.d.ts +92 -0
  57. package/dist/types/src/ServiceResolver.d.ts.map +1 -0
  58. package/dist/types/src/StorageService.d.ts +58 -0
  59. package/dist/types/src/StorageService.d.ts.map +1 -0
  60. package/dist/types/src/Template.d.ts +61 -0
  61. package/dist/types/src/Template.d.ts.map +1 -0
  62. package/dist/types/src/Template.test.d.ts +2 -0
  63. package/dist/types/src/Template.test.d.ts.map +1 -0
  64. package/dist/types/src/Trace.d.ts +266 -0
  65. package/dist/types/src/Trace.d.ts.map +1 -0
  66. package/dist/types/src/Trigger.d.ts +192 -0
  67. package/dist/types/src/Trigger.d.ts.map +1 -0
  68. package/dist/types/src/TriggerEvent.d.ts +83 -0
  69. package/dist/types/src/TriggerEvent.d.ts.map +1 -0
  70. package/dist/types/src/errors.d.ts +308 -0
  71. package/dist/types/src/errors.d.ts.map +1 -0
  72. package/dist/types/src/index.d.ts +18 -5
  73. package/dist/types/src/index.d.ts.map +1 -1
  74. package/dist/types/src/testing/definitions.d.ts +11 -0
  75. package/dist/types/src/testing/definitions.d.ts.map +1 -0
  76. package/dist/types/src/testing/fib.d.ts +8 -0
  77. package/dist/types/src/testing/fib.d.ts.map +1 -0
  78. package/dist/types/src/testing/index.d.ts +6 -3
  79. package/dist/types/src/testing/index.d.ts.map +1 -1
  80. package/dist/types/src/testing/reply.d.ts +4 -0
  81. package/dist/types/src/testing/reply.d.ts.map +1 -0
  82. package/dist/types/src/testing/sleep.d.ts +6 -0
  83. package/dist/types/src/testing/sleep.d.ts.map +1 -0
  84. package/dist/types/src/umbrella.test.d.ts +2 -0
  85. package/dist/types/src/umbrella.test.d.ts.map +1 -0
  86. package/dist/types/tsconfig.tsbuildinfo +1 -1
  87. package/package.json +31 -47
  88. package/src/Blueprint.ts +224 -0
  89. package/src/Credential.ts +53 -0
  90. package/src/Header.test.ts +132 -0
  91. package/src/Header.ts +38 -0
  92. package/src/LayerSpec.ts +91 -0
  93. package/src/McpServer.ts +44 -0
  94. package/src/Operation.ts +646 -0
  95. package/src/OperationHandlerSet.test.ts +97 -0
  96. package/src/OperationHandlerSet.ts +181 -0
  97. package/src/OperationRegistry.ts +50 -0
  98. package/src/Process.ts +541 -0
  99. package/src/Routine.ts +68 -0
  100. package/src/Script.ts +33 -0
  101. package/src/ServiceResolver.ts +200 -0
  102. package/src/StorageService.ts +101 -0
  103. package/src/Template.test.ts +164 -0
  104. package/src/Template.ts +125 -0
  105. package/src/Trace.ts +363 -0
  106. package/src/Trigger.ts +196 -0
  107. package/src/TriggerEvent.ts +64 -0
  108. package/src/errors.ts +71 -0
  109. package/src/index.ts +19 -32
  110. package/src/testing/definitions.ts +51 -0
  111. package/src/testing/fib.ts +22 -0
  112. package/src/testing/index.ts +13 -4
  113. package/src/testing/reply.ts +18 -0
  114. package/src/testing/sleep.ts +16 -0
  115. package/src/umbrella.test.ts +51 -0
  116. package/dist/lib/browser/chunk-X2FWMHD4.mjs +0 -3107
  117. package/dist/lib/browser/chunk-X2FWMHD4.mjs.map +0 -7
  118. package/dist/lib/browser/index.mjs +0 -55
  119. package/dist/lib/browser/meta.json +0 -1
  120. package/dist/lib/browser/testing/index.mjs +0 -176
  121. package/dist/lib/browser/testing/index.mjs.map +0 -7
  122. package/dist/lib/node-esm/chunk-RP7HSSCA.mjs +0 -3109
  123. package/dist/lib/node-esm/chunk-RP7HSSCA.mjs.map +0 -7
  124. package/dist/lib/node-esm/index.mjs +0 -56
  125. package/dist/lib/node-esm/meta.json +0 -1
  126. package/dist/lib/node-esm/testing/index.mjs +0 -177
  127. package/dist/lib/node-esm/testing/index.mjs.map +0 -7
  128. package/dist/types/src/compute-graph-registry.d.ts +0 -34
  129. package/dist/types/src/compute-graph-registry.d.ts.map +0 -1
  130. package/dist/types/src/compute-graph.d.ts +0 -64
  131. package/dist/types/src/compute-graph.d.ts.map +0 -1
  132. package/dist/types/src/compute-graph.test.d.ts +0 -2
  133. package/dist/types/src/compute-graph.test.d.ts.map +0 -1
  134. package/dist/types/src/compute-node.d.ts +0 -25
  135. package/dist/types/src/compute-node.d.ts.map +0 -1
  136. package/dist/types/src/functions/async-function.d.ts +0 -66
  137. package/dist/types/src/functions/async-function.d.ts.map +0 -1
  138. package/dist/types/src/functions/edge-function.d.ts +0 -20
  139. package/dist/types/src/functions/edge-function.d.ts.map +0 -1
  140. package/dist/types/src/functions/function-defs.d.ts +0 -11
  141. package/dist/types/src/functions/function-defs.d.ts.map +0 -1
  142. package/dist/types/src/functions/index.d.ts +0 -4
  143. package/dist/types/src/functions/index.d.ts.map +0 -1
  144. package/dist/types/src/hyperformula.test.d.ts +0 -2
  145. package/dist/types/src/hyperformula.test.d.ts.map +0 -1
  146. package/dist/types/src/testing/test-builder.d.ts +0 -15
  147. package/dist/types/src/testing/test-builder.d.ts.map +0 -1
  148. package/dist/types/src/testing/test-plugin.d.ts +0 -36
  149. package/dist/types/src/testing/test-plugin.d.ts.map +0 -1
  150. package/dist/types/src/testing/util.d.ts +0 -2
  151. package/dist/types/src/testing/util.d.ts.map +0 -1
  152. package/dist/types/src/types/hyperformula.d.ts +0 -11
  153. package/dist/types/src/types/hyperformula.d.ts.map +0 -1
  154. package/dist/types/src/types/index.d.ts +0 -3
  155. package/dist/types/src/types/index.d.ts.map +0 -1
  156. package/dist/types/src/types/types.d.ts +0 -20
  157. package/dist/types/src/types/types.d.ts.map +0 -1
  158. package/dist/types/src/types/types.test.d.ts +0 -2
  159. package/dist/types/src/types/types.test.d.ts.map +0 -1
  160. package/dist/types/src/util.d.ts +0 -2
  161. package/dist/types/src/util.d.ts.map +0 -1
  162. package/dist/vendor/hyperformula.mjs +0 -36400
  163. package/src/compute-graph-registry.ts +0 -91
  164. package/src/compute-graph.test.ts +0 -89
  165. package/src/compute-graph.ts +0 -260
  166. package/src/compute-node.ts +0 -62
  167. package/src/functions/async-function.ts +0 -179
  168. package/src/functions/edge-function.ts +0 -112
  169. package/src/functions/function-defs.ts +0 -2427
  170. package/src/functions/index.ts +0 -7
  171. package/src/hyperformula.test.ts +0 -14
  172. package/src/testing/test-builder.ts +0 -54
  173. package/src/testing/test-plugin.ts +0 -101
  174. package/src/testing/util.ts +0 -9
  175. package/src/types/hyperformula.ts +0 -19
  176. package/src/types/index.ts +0 -6
  177. package/src/types/types.test.ts +0 -91
  178. package/src/types/types.ts +0 -80
  179. package/src/util.ts +0 -8
  180. /package/dist/lib/{browser/index.mjs.map → neutral/StorageService.mjs.map} +0 -0
  181. /package/dist/lib/{node-esm/index.mjs.map → neutral/chunk-J5LGTIGS.mjs.map} +0 -0
@@ -0,0 +1,62 @@
1
+ import {
2
+ __export
3
+ } from "./chunk-J5LGTIGS.mjs";
4
+
5
+ // src/StorageService.ts
6
+ var StorageService_exports = {};
7
+ __export(StorageService_exports, {
8
+ StorageService: () => StorageService,
9
+ clear: () => clear,
10
+ deleteKey: () => deleteKey,
11
+ get: () => get,
12
+ key: () => key,
13
+ list: () => list,
14
+ set: () => set,
15
+ withDefault: () => withDefault
16
+ });
17
+ import * as Context from "effect/Context";
18
+ import * as Effect from "effect/Effect";
19
+ import * as Option from "effect/Option";
20
+ import * as Pipeable from "effect/Pipeable";
21
+ var StorageService = class extends Context.Tag("@dxos/functions/StorageService")() {
22
+ };
23
+ var get = Effect.serviceFunctionEffect(StorageService, (_) => _.get);
24
+ var set = Effect.serviceFunctionEffect(StorageService, (_) => _.set);
25
+ var deleteKey = Effect.serviceFunctionEffect(StorageService, (_) => _.delete);
26
+ var list = Effect.serviceFunctionEffect(StorageService, (_) => _.list);
27
+ var clear = Effect.serviceFunctionEffect(StorageService, (_) => _.clear);
28
+ var key = (schema, key2) => {
29
+ return {
30
+ key: key2,
31
+ get: get(schema, key2),
32
+ set: (value) => set(schema, key2, value),
33
+ delete: () => deleteKey(key2),
34
+ pipe(...args) {
35
+ return Pipeable.pipeArguments(this, arguments);
36
+ }
37
+ };
38
+ };
39
+ var withDefault = (getDefault) => (key2) => {
40
+ return {
41
+ key: key2.key,
42
+ get: key2.get.pipe(Effect.map(Option.getOrElse(() => getDefault()))),
43
+ set: (value) => key2.set(value),
44
+ delete: () => key2.delete(),
45
+ pipe(...args) {
46
+ return Pipeable.pipeArguments(this, arguments);
47
+ }
48
+ };
49
+ };
50
+
51
+ export {
52
+ StorageService,
53
+ get,
54
+ set,
55
+ deleteKey,
56
+ list,
57
+ clear,
58
+ key,
59
+ withDefault,
60
+ StorageService_exports
61
+ };
62
+ //# sourceMappingURL=chunk-XEVFBI6S.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/StorageService.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2026 DXOS.org\n//\n\n// @import-as-namespace\n\nimport * as Context from 'effect/Context';\nimport * as Effect from 'effect/Effect';\nimport * as Option from 'effect/Option';\nimport * as Pipeable from 'effect/Pipeable';\nimport * as Schema from 'effect/Schema';\n\nexport interface Service {\n /** Read a value by key. Returns `None` if key does not exist. */\n get<S extends Schema.Schema<any, string, any>>(\n schema: S,\n key: string,\n ): Effect.Effect<Option.Option<Schema.Schema.Type<S>>, never, Schema.Schema.Context<S>>;\n\n /** Write a value for the given key. */\n set<S extends Schema.Schema<any, string, any>>(\n schema: S,\n key: string,\n value: Schema.Schema.Type<S>,\n ): Effect.Effect<void, never, Schema.Schema.Context<S>>;\n\n /** Remove a key. */\n delete(key: string): Effect.Effect<void>;\n\n /** List all keys, optionally filtered by prefix. */\n list(prefix?: string): Effect.Effect<readonly string[]>;\n\n /** Remove all keys managed by this scoped store. */\n clear(): Effect.Effect<void>;\n}\n\n/**\n * Scoped key-value storage service for processes.\n * Each process receives its own namespaced instance via the process manager.\n * Construct a live implementation with `StorageService.layer` from `@dxos/functions-runtime`.\n */\nexport class StorageService extends Context.Tag('@dxos/functions/StorageService')<StorageService, Service>() {}\n\nexport const get = Effect.serviceFunctionEffect(StorageService, (_) => _.get);\nexport const set = Effect.serviceFunctionEffect(StorageService, (_) => _.set);\nexport const deleteKey = Effect.serviceFunctionEffect(StorageService, (_) => _.delete);\nexport const list = Effect.serviceFunctionEffect(StorageService, (_) => _.list);\nexport const clear = Effect.serviceFunctionEffect(StorageService, (_) => _.clear);\n\n/**\n * Typed key in a storage service.\n */\nexport interface Key<T> extends Pipeable.Pipeable {\n readonly key: string;\n\n get: Effect.Effect<Option.Option<T>, never, StorageService>;\n set(value: T): Effect.Effect<void, never, StorageService>;\n delete(): Effect.Effect<void, never, StorageService>;\n}\n\n/**\n * Create a typed key in a storage service.\n */\nexport const key = <S extends Schema.Schema<any, string, any>>(schema: S, key: string): Key<Schema.Schema.Type<S>> => {\n return {\n key,\n get: get(schema, key),\n set: (value: Schema.Schema.Type<S>) => set(schema, key, value),\n delete: () => deleteKey(key),\n pipe(...args: any) {\n return Pipeable.pipeArguments(this, arguments);\n },\n };\n};\n\n/**\n * Typed key in a storage service with a default value.\n */\nexport interface KeyWithDefault<T, U> extends Pipeable.Pipeable {\n readonly key: string;\n get: Effect.Effect<T | U, never, StorageService>;\n set(value: U): Effect.Effect<void, never, StorageService>;\n delete(): Effect.Effect<void, never, StorageService>;\n}\n\n/**\n * Assign a default value to a key if it is not present.\n */\nexport const withDefault =\n <T>(getDefault: () => NoInfer<T>) =>\n (key: Key<T>): KeyWithDefault<T, T> => {\n return {\n key: key.key,\n get: key.get.pipe(Effect.map(Option.getOrElse(() => getDefault()))),\n set: (value) => key.set(value),\n delete: () => key.delete(),\n pipe(...args: any) {\n return Pipeable.pipeArguments(this, arguments);\n },\n };\n };\n"],
5
+ "mappings": ";;;;;AAAA;;;;;;;;;;;AAMA,YAAYA,aAAa;AACzB,YAAYC,YAAY;AACxB,YAAYC,YAAY;AACxB,YAAYC,cAAc;AAgCnB,IAAMC,iBAAN,cAAqCC,YAAI,gCAAA,EAAA,EAAA;AAA8D;AAEvG,IAAMC,MAAaC,6BAAsBH,gBAAgB,CAACI,MAAMA,EAAEF,GAAG;AACrE,IAAMG,MAAaF,6BAAsBH,gBAAgB,CAACI,MAAMA,EAAEC,GAAG;AACrE,IAAMC,YAAmBH,6BAAsBH,gBAAgB,CAACI,MAAMA,EAAEG,MAAM;AAC9E,IAAMC,OAAcL,6BAAsBH,gBAAgB,CAACI,MAAMA,EAAEI,IAAI;AACvE,IAAMC,QAAeN,6BAAsBH,gBAAgB,CAACI,MAAMA,EAAEK,KAAK;AAgBzE,IAAMC,MAAM,CAA4CC,QAAWD,SAAAA;AACxE,SAAO;IACLA,KAAAA;IACAR,KAAKA,IAAIS,QAAQD,IAAAA;IACjBL,KAAK,CAACO,UAAiCP,IAAIM,QAAQD,MAAKE,KAAAA;IACxDL,QAAQ,MAAMD,UAAUI,IAAAA;IACxBG,QAAQC,MAAS;AACf,aAAgBC,uBAAc,MAAMC,SAAAA;IACtC;EACF;AACF;AAeO,IAAMC,cACX,CAAIC,eACJ,CAACR,SAAAA;AACC,SAAO;IACLA,KAAKA,KAAIA;IACTR,KAAKQ,KAAIR,IAAIW,KAAYM,WAAWC,iBAAU,MAAMF,WAAAA,CAAAA,CAAAA,CAAAA;IACpDb,KAAK,CAACO,UAAUF,KAAIL,IAAIO,KAAAA;IACxBL,QAAQ,MAAMG,KAAIH,OAAM;IACxBM,QAAQC,MAAS;AACf,aAAgBC,uBAAc,MAAMC,SAAAA;IACtC;EACF;AACF;",
6
+ "names": ["Context", "Effect", "Option", "Pipeable", "StorageService", "Tag", "get", "serviceFunctionEffect", "_", "set", "deleteKey", "delete", "list", "clear", "key", "schema", "value", "pipe", "args", "pipeArguments", "arguments", "withDefault", "getDefault", "map", "getOrElse"]
7
+ }
@@ -0,0 +1,174 @@
1
+ import {
2
+ __export
3
+ } from "./chunk-J5LGTIGS.mjs";
4
+
5
+ // src/errors.ts
6
+ import { BaseError } from "@dxos/errors";
7
+ var InvokerNotInitializedError = class extends BaseError.extend("InvokerNotInitializedError", "Invoker not initialized") {
8
+ constructor() {
9
+ super();
10
+ }
11
+ };
12
+ var NoHandlerError = class extends BaseError.extend("NoHandlerError", "No handler found for operation. ") {
13
+ constructor(operationKey) {
14
+ super({
15
+ context: {
16
+ operationKey
17
+ }
18
+ });
19
+ }
20
+ };
21
+ var ServiceNotAvailableError = class extends BaseError.extend("ServiceNotAvailable", "Service not available") {
22
+ constructor(service, options) {
23
+ super({
24
+ context: {
25
+ service
26
+ },
27
+ message: `Service not available: ${service}`,
28
+ ...options
29
+ });
30
+ }
31
+ };
32
+ var FunctionNotFoundError = class extends BaseError.extend("FunctionNotFound", "Function not found") {
33
+ constructor(functionKey, options) {
34
+ super({
35
+ context: {
36
+ function: functionKey
37
+ },
38
+ ...options
39
+ });
40
+ }
41
+ };
42
+ var FunctionError = class extends BaseError.extend("FunctionError", "Function invocation error") {
43
+ };
44
+ var InvalidOperationInputError = class extends BaseError.extend("InvalidOperationInput", "Operation input did not match schema") {
45
+ };
46
+ var InvalidOperationOutputError = class extends BaseError.extend("InvalidOperationOutput", "Operation output did not match schema") {
47
+ };
48
+ var TriggerStateNotFoundError = class extends BaseError.extend("TriggerStateNotFound", "Trigger state not found") {
49
+ };
50
+ var FunctionsAiUpstreamError = class extends BaseError.extend("FunctionsAiUpstreamError", "Upstream AI service returned an error") {
51
+ };
52
+ var FunctionsAiMemoizationMissError = class extends BaseError.extend("FunctionsAiMemoizationMissError", "No memoized AI conversation found for the given cache key") {
53
+ };
54
+
55
+ // src/OperationHandlerSet.ts
56
+ var OperationHandlerSet_exports = {};
57
+ __export(OperationHandlerSet_exports, {
58
+ OperationHandlerProvider: () => OperationHandlerProvider,
59
+ TypeId: () => TypeId,
60
+ async: () => async,
61
+ empty: () => empty,
62
+ getHandler: () => getHandler,
63
+ getHandlerByKey: () => getHandlerByKey,
64
+ isOperationHandlerSet: () => isOperationHandlerSet,
65
+ lazy: () => lazy,
66
+ make: () => make,
67
+ merge: () => merge,
68
+ provide: () => provide,
69
+ reactive: () => reactive
70
+ });
71
+ import * as Context from "effect/Context";
72
+ import * as Effect from "effect/Effect";
73
+ import { pipe } from "effect/Function";
74
+ import * as Layer from "effect/Layer";
75
+ import { EffectEx } from "@dxos/effect";
76
+ import { assertArgument } from "@dxos/invariant";
77
+ import { DXN } from "@dxos/keys";
78
+ var TypeId = "~@dxos/operation/OperationHandlerSet";
79
+ var isOperationHandlerSet = (value) => {
80
+ return typeof value === "object" && value !== null && TypeId in value;
81
+ };
82
+ var empty = {
83
+ [TypeId]: TypeId,
84
+ handlers: Effect.succeed([]),
85
+ getHandlers: () => Promise.resolve([])
86
+ };
87
+ var make = (...handlers) => {
88
+ return async(() => Promise.resolve(handlers));
89
+ };
90
+ var async = (getHandlers) => {
91
+ let promise2 = null;
92
+ const getHandlersCached = () => {
93
+ if (!promise2) {
94
+ promise2 = getHandlers();
95
+ }
96
+ return promise2;
97
+ };
98
+ return {
99
+ [TypeId]: TypeId,
100
+ getHandlers,
101
+ handlers: Effect.promise(getHandlersCached)
102
+ };
103
+ };
104
+ var reactive = (registry, atom) => {
105
+ let cached = null;
106
+ registry.subscribe(atom, () => {
107
+ cached = null;
108
+ });
109
+ const compute = Effect.suspend(() => pipe(
110
+ registry.get(atom),
111
+ Effect.forEach((set) => set.handlers, {
112
+ concurrency: "unbounded"
113
+ }),
114
+ Effect.map((groups) => groups.flat()),
115
+ // Reset cached on failure so a transient error doesn't permanently
116
+ // poison subsequent calls.
117
+ Effect.tapErrorCause(() => Effect.sync(() => {
118
+ cached = null;
119
+ }))
120
+ ));
121
+ const getHandlers = () => cached ??= EffectEx.runAndForwardErrors(compute);
122
+ return {
123
+ [TypeId]: TypeId,
124
+ getHandlers,
125
+ handlers: Effect.promise(getHandlers)
126
+ };
127
+ };
128
+ var merge = (...sets) => {
129
+ assertArgument(sets.every(isOperationHandlerSet), "sets", "sets must be an array of OperationHandlerSet");
130
+ return async(() => Promise.all(sets.map((set) => set.getHandlers())).then((handlers) => handlers.flat()));
131
+ };
132
+ var lazy = (...modules) => {
133
+ return async(() => Promise.all(modules.map((module) => module().then(({ default: handler }) => handler))));
134
+ };
135
+ var getHandler = (set, definition) => Effect.gen(function* () {
136
+ const handlers = yield* set.handlers;
137
+ const handler = handlers.find((handler2) => handler2.meta.key === definition.meta.key);
138
+ if (!handler) {
139
+ return yield* Effect.fail(new NoHandlerError(definition.meta.key));
140
+ }
141
+ return handler;
142
+ });
143
+ var getHandlerByKey = (set, key) => Effect.gen(function* () {
144
+ const handlers = yield* set.handlers;
145
+ const normalizeKey = (k) => DXN.isDXN(k) ? DXN.getName(k) : k;
146
+ const normalizedKey = normalizeKey(key);
147
+ const handler = handlers.find((handler2) => normalizeKey(handler2.meta.key) === normalizedKey);
148
+ if (!handler) {
149
+ return yield* Effect.fail(new NoHandlerError(key));
150
+ }
151
+ return handler;
152
+ });
153
+ var OperationHandlerProvider = class extends Context.Tag("@dxos/operation/OperationHandlerProvider")() {
154
+ };
155
+ var provide = (handlers) => Layer.succeed(OperationHandlerProvider, handlers);
156
+
157
+ export {
158
+ InvokerNotInitializedError,
159
+ NoHandlerError,
160
+ ServiceNotAvailableError,
161
+ FunctionNotFoundError,
162
+ FunctionError,
163
+ InvalidOperationInputError,
164
+ InvalidOperationOutputError,
165
+ TriggerStateNotFoundError,
166
+ FunctionsAiUpstreamError,
167
+ FunctionsAiMemoizationMissError,
168
+ lazy,
169
+ getHandler,
170
+ getHandlerByKey,
171
+ OperationHandlerProvider,
172
+ OperationHandlerSet_exports
173
+ };
174
+ //# sourceMappingURL=chunk-Z3Y7FQGN.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/errors.ts", "../../../src/OperationHandlerSet.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { BaseError, type BaseErrorOptions } from '@dxos/errors';\n\n// Errors from @dxos/operation.\n\nexport class InvokerNotInitializedError extends BaseError.extend(\n 'InvokerNotInitializedError',\n 'Invoker not initialized',\n) {\n constructor() {\n super();\n }\n}\n\nexport class NoHandlerError extends BaseError.extend('NoHandlerError', 'No handler found for operation. ') {\n constructor(operationKey: string) {\n super({ context: { operationKey } });\n }\n}\n\n// Errors from @dxos/functions.\n\nexport class ServiceNotAvailableError extends BaseError.extend('ServiceNotAvailable', 'Service not available') {\n constructor(service: string, options?: Omit<BaseErrorOptions, 'context'>) {\n super({ context: { service }, message: `Service not available: ${service}`, ...options });\n }\n}\n\nexport class FunctionNotFoundError extends BaseError.extend('FunctionNotFound', 'Function not found') {\n constructor(functionKey: string, options?: Omit<BaseErrorOptions, 'context'>) {\n super({ context: { function: functionKey }, ...options });\n }\n}\n\nexport class FunctionError extends BaseError.extend('FunctionError', 'Function invocation error') {}\n\nexport class InvalidOperationInputError extends BaseError.extend(\n 'InvalidOperationInput',\n 'Operation input did not match schema',\n) {}\n\nexport class InvalidOperationOutputError extends BaseError.extend(\n 'InvalidOperationOutput',\n 'Operation output did not match schema',\n) {}\n\nexport class TriggerStateNotFoundError extends BaseError.extend('TriggerStateNotFound', 'Trigger state not found') {}\n\n/**\n * Raised when the upstream AI gateway responds with a structured JSON error envelope\n * (`{ \"type\": \"error\", \"error\": { \"type\": ..., \"message\": ... } }`). Surfaces as a typed\n * defect from `FunctionsAiHttpClient`, bypassing `@effect/ai`'s generic `HttpResponseError`\n * wrapping so callers can match on the error class directly.\n */\nexport class FunctionsAiUpstreamError extends BaseError.extend(\n 'FunctionsAiUpstreamError',\n 'Upstream AI service returned an error',\n) {}\n\n/**\n * Specialized `FunctionsAiUpstreamError` for the memoization layer: the recorded fixture for a\n * given cache key was not found and `ALLOW_LLM_GENERATION` is unset. The `cacheKey` is exposed\n * via `context.cacheKey` to make regeneration straightforward.\n */\nexport class FunctionsAiMemoizationMissError extends BaseError.extend(\n 'FunctionsAiMemoizationMissError',\n 'No memoized AI conversation found for the given cache key',\n) {}\n", "//\n// Copyright 2026 DXOS.org\n//\n\n// @import-as-namespace\n\nimport { type Atom, type Registry } from '@effect-atom/atom';\nimport * as Context from 'effect/Context';\nimport * as Effect from 'effect/Effect';\nimport { pipe } from 'effect/Function';\nimport * as Layer from 'effect/Layer';\n\nimport { EffectEx } from '@dxos/effect';\nimport { assertArgument } from '@dxos/invariant';\nimport { DXN } from '@dxos/keys';\n\nimport { NoHandlerError } from './errors';\nimport type * as Operation from './Operation';\n\nexport const TypeId = '~@dxos/operation/OperationHandlerSet' as const;\nexport type TypeId = typeof TypeId;\n\nexport interface OperationHandlerSet {\n [TypeId]: TypeId;\n\n readonly handlers: Effect.Effect<Operation.WithHandler<Operation.Definition.Any>[]>;\n\n getHandlers(): Promise<Operation.WithHandler<Operation.Definition.Any>[]>;\n}\n\nexport const isOperationHandlerSet = (value: unknown): value is OperationHandlerSet => {\n return typeof value === 'object' && value !== null && TypeId in value;\n};\n\nexport const empty: OperationHandlerSet = {\n [TypeId]: TypeId,\n handlers: Effect.succeed([]),\n getHandlers: () => Promise.resolve([]),\n};\n\n/**\n * Creates a new operation handler set from a list of handlers.\n *\n * @example\n * ```ts\n * const set = OperationHandlerSet.make(\n * Operation.withHandler(Operation.make({ input: Schema.Void, output: Schema.Void }), (input) => Effect.succeed({})),\n * Operation.withHandler(Operation.make({ input: Schema.Void, output: Schema.Void }), (input) => Effect.succeed({})),\n * );\n * ```\n */\nexport const make = (...handlers: Operation.WithHandler<Operation.Definition.Any>[]): OperationHandlerSet => {\n return async(() => Promise.resolve(handlers));\n};\n\nexport const async = (\n getHandlers: () => Promise<Operation.WithHandler<Operation.Definition.Any>[]>,\n): OperationHandlerSet => {\n // NOTE: Re-runing async module imports has a big performance penalty in Chrome.\n let promise: Promise<Operation.WithHandler<Operation.Definition.Any>[]> | null = null;\n const getHandlersCached = () => {\n if (!promise) {\n promise = getHandlers();\n }\n return promise;\n };\n return {\n [TypeId]: TypeId,\n getHandlers,\n handlers: Effect.promise(getHandlersCached),\n };\n};\n\n/**\n * Builds a set backed by an atom of contributed sets. The merged result is\n * cached and invalidated whenever the atom changes, so most accesses are\n * cheap but newly registered handlers are picked up.\n */\nexport const reactive = (\n registry: Registry.Registry,\n atom: Atom.Atom<readonly OperationHandlerSet[]>,\n): OperationHandlerSet => {\n let cached: Promise<Operation.WithHandler<Operation.Definition.Any>[]> | null = null;\n registry.subscribe(atom, () => {\n cached = null;\n });\n // `suspend` defers `registry.get(atom)` until each run, so re-evaluations\n // after cache invalidation see the current contributed sets.\n const compute = Effect.suspend(() =>\n pipe(\n registry.get(atom),\n Effect.forEach((set) => set.handlers, { concurrency: 'unbounded' }),\n Effect.map((groups) => groups.flat()),\n // Reset cached on failure so a transient error doesn't permanently\n // poison subsequent calls.\n Effect.tapErrorCause(() =>\n Effect.sync(() => {\n cached = null;\n }),\n ),\n ),\n );\n const getHandlers = () => (cached ??= EffectEx.runAndForwardErrors(compute));\n return {\n [TypeId]: TypeId,\n getHandlers,\n handlers: Effect.promise(getHandlers),\n };\n};\n\n/**\n * Merges multiple operation handler sets into a single set.\n *\n */\nexport const merge = (...sets: OperationHandlerSet[]): OperationHandlerSet => {\n assertArgument(sets.every(isOperationHandlerSet), 'sets', 'sets must be an array of OperationHandlerSet');\n return async(() => Promise.all(sets.map((set) => set.getHandlers())).then((handlers) => handlers.flat()));\n};\n\n/**\n * Creates a new operation handler set from a list of lazy-loaded modules.\n *\n * @example\n * ```ts\n * const set = OperationHandlerSet.lazy(\n * () => import('./my-handler'),\n * () => import('./my-other-handler'),\n * );\n * ```\n */\nexport const lazy = (\n ...modules: (() => Promise<{ default: Operation.WithHandler<Operation.Definition.Any> }>)[]\n): OperationHandlerSet => {\n return async(() => Promise.all(modules.map((module) => module().then(({ default: handler }) => handler))));\n};\n\n/**\n * Gets a handler for an operation by definition.\n */\nexport const getHandler = <const Op extends Operation.Definition.Any>(\n set: OperationHandlerSet,\n definition: Op,\n): Effect.Effect<Operation.WithHandler<Op>, NoHandlerError> =>\n Effect.gen(function* () {\n const handlers = yield* set.handlers;\n const handler = handlers.find((handler) => handler.meta.key === definition.meta.key);\n if (!handler) {\n return yield* Effect.fail(new NoHandlerError(definition.meta.key));\n }\n return handler as any;\n });\n\n/**\n * Gets a handler for an operation by key.\n * Accepts either a plain NSID (`org.dxos.function.database.contextAdd`) or a\n * full DXN string (`dxn:org.dxos.function.database.contextAdd`).\n */\nexport const getHandlerByKey = (\n set: OperationHandlerSet,\n key: string,\n): Effect.Effect<Operation.WithHandler<Operation.Definition.Any>, NoHandlerError> =>\n Effect.gen(function* () {\n const handlers = yield* set.handlers;\n // Normalize both sides to plain NSID for comparison so callers can pass\n // either a ToolId (plain NSID) or a full DXN string.\n const normalizeKey = (k: string) => (DXN.isDXN(k) ? DXN.getName(k) : k);\n const normalizedKey = normalizeKey(key);\n const handler = handlers.find((handler) => normalizeKey(handler.meta.key) === normalizedKey);\n if (!handler) {\n return yield* Effect.fail(new NoHandlerError(key));\n }\n return handler as any;\n });\n\nexport class OperationHandlerProvider extends Context.Tag('@dxos/operation/OperationHandlerProvider')<\n OperationHandlerProvider,\n OperationHandlerSet\n>() {}\n\nexport const provide = (handlers: OperationHandlerSet): Layer.Layer<OperationHandlerProvider, never, never> =>\n Layer.succeed(OperationHandlerProvider, handlers);\n"],
5
+ "mappings": ";;;;;AAIA,SAASA,iBAAwC;AAI1C,IAAMC,6BAAN,cAAyCD,UAAUE,OACxD,8BACA,yBAAA,EAAA;EAEA,cAAc;AACZ,UAAK;EACP;AACF;AAEO,IAAMC,iBAAN,cAA6BH,UAAUE,OAAO,kBAAkB,kCAAA,EAAA;EACrE,YAAYE,cAAsB;AAChC,UAAM;MAAEC,SAAS;QAAED;MAAa;IAAE,CAAA;EACpC;AACF;AAIO,IAAME,2BAAN,cAAuCN,UAAUE,OAAO,uBAAuB,uBAAA,EAAA;EACpF,YAAYK,SAAiBC,SAA6C;AACxE,UAAM;MAAEH,SAAS;QAAEE;MAAQ;MAAGE,SAAS,0BAA0BF,OAAAA;MAAW,GAAGC;IAAQ,CAAA;EACzF;AACF;AAEO,IAAME,wBAAN,cAAoCV,UAAUE,OAAO,oBAAoB,oBAAA,EAAA;EAC9E,YAAYS,aAAqBH,SAA6C;AAC5E,UAAM;MAAEH,SAAS;QAAEO,UAAUD;MAAY;MAAG,GAAGH;IAAQ,CAAA;EACzD;AACF;AAEO,IAAMK,gBAAN,cAA4Bb,UAAUE,OAAO,iBAAiB,2BAAA,EAAA;AAA8B;AAE5F,IAAMY,6BAAN,cAAyCd,UAAUE,OACxD,yBACA,sCAAA,EAAA;AACC;AAEI,IAAMa,8BAAN,cAA0Cf,UAAUE,OACzD,0BACA,uCAAA,EAAA;AACC;AAEI,IAAMc,4BAAN,cAAwChB,UAAUE,OAAO,wBAAwB,yBAAA,EAAA;AAA4B;AAQ7G,IAAMe,2BAAN,cAAuCjB,UAAUE,OACtD,4BACA,uCAAA,EAAA;AACC;AAOI,IAAMgB,kCAAN,cAA8ClB,UAAUE,OAC7D,mCACA,2DAAA,EAAA;AACC;;;ACtEH;;;;;;;;;;;;;;;AAOA,YAAYiB,aAAa;AACzB,YAAYC,YAAY;AACxB,SAASC,YAAY;AACrB,YAAYC,WAAW;AAEvB,SAASC,gBAAgB;AACzB,SAASC,sBAAsB;AAC/B,SAASC,WAAW;AAKb,IAAMC,SAAS;AAWf,IAAMC,wBAAwB,CAACC,UAAAA;AACpC,SAAO,OAAOA,UAAU,YAAYA,UAAU,QAAQF,UAAUE;AAClE;AAEO,IAAMC,QAA6B;EACxC,CAACH,MAAAA,GAASA;EACVI,UAAiBC,eAAQ,CAAA,CAAE;EAC3BC,aAAa,MAAMC,QAAQC,QAAQ,CAAA,CAAE;AACvC;AAaO,IAAMC,OAAO,IAAIL,aAAAA;AACtB,SAAOM,MAAM,MAAMH,QAAQC,QAAQJ,QAAAA;AACrC;AAEO,IAAMM,QAAQ,CACnBJ,gBAAAA;AAGA,MAAIK,WAA6E;AACjF,QAAMC,oBAAoB,MAAA;AACxB,QAAI,CAACD,UAAS;AACZA,MAAAA,WAAUL,YAAAA;IACZ;AACA,WAAOK;EACT;AACA,SAAO;IACL,CAACX,MAAAA,GAASA;IACVM;IACAF,UAAiBO,eAAQC,iBAAAA;EAC3B;AACF;AAOO,IAAMC,WAAW,CACtBC,UACAC,SAAAA;AAEA,MAAIC,SAA4E;AAChFF,WAASG,UAAUF,MAAM,MAAA;AACvBC,aAAS;EACX,CAAA;AAGA,QAAME,UAAiBC,eAAQ,MAC7BC;IACEN,SAASO,IAAIN,IAAAA;IACNO,eAAQ,CAACC,QAAQA,IAAInB,UAAU;MAAEoB,aAAa;IAAY,CAAA;IAC1DC,WAAI,CAACC,WAAWA,OAAOC,KAAI,CAAA;;;IAG3BC,qBAAc,MACZC,YAAK,MAAA;AACVb,eAAS;IACX,CAAA,CAAA;EAAA,CAAA;AAIN,QAAMV,cAAc,MAAOU,WAAWc,SAASC,oBAAoBb,OAAAA;AACnE,SAAO;IACL,CAAClB,MAAAA,GAASA;IACVM;IACAF,UAAiBO,eAAQL,WAAAA;EAC3B;AACF;AAMO,IAAM0B,QAAQ,IAAIC,SAAAA;AACvBC,iBAAeD,KAAKE,MAAMlC,qBAAAA,GAAwB,QAAQ,8CAAA;AAC1D,SAAOS,MAAM,MAAMH,QAAQ6B,IAAIH,KAAKR,IAAI,CAACF,QAAQA,IAAIjB,YAAW,CAAA,CAAA,EAAK+B,KAAK,CAACjC,aAAaA,SAASuB,KAAI,CAAA;AACvG;AAaO,IAAMW,OAAO,IACfC,YAAAA;AAEH,SAAO7B,MAAM,MAAMH,QAAQ6B,IAAIG,QAAQd,IAAI,CAACe,WAAWA,OAAAA,EAASH,KAAK,CAAC,EAAEI,SAASC,QAAO,MAAOA,OAAAA,CAAAA,CAAAA;AACjG;AAKO,IAAMC,aAAa,CACxBpB,KACAqB,eAEOC,WAAI,aAAA;AACT,QAAMzC,WAAW,OAAOmB,IAAInB;AAC5B,QAAMsC,UAAUtC,SAAS0C,KAAK,CAACJ,aAAYA,SAAQK,KAAKC,QAAQJ,WAAWG,KAAKC,GAAG;AACnF,MAAI,CAACN,SAAS;AACZ,WAAO,OAAcO,YAAK,IAAIC,eAAeN,WAAWG,KAAKC,GAAG,CAAA;EAClE;AACA,SAAON;AACT,CAAA;AAOK,IAAMS,kBAAkB,CAC7B5B,KACAyB,QAEOH,WAAI,aAAA;AACT,QAAMzC,WAAW,OAAOmB,IAAInB;AAG5B,QAAMgD,eAAe,CAACC,MAAeC,IAAIC,MAAMF,CAAAA,IAAKC,IAAIE,QAAQH,CAAAA,IAAKA;AACrE,QAAMI,gBAAgBL,aAAaJ,GAAAA;AACnC,QAAMN,UAAUtC,SAAS0C,KAAK,CAACJ,aAAYU,aAAaV,SAAQK,KAAKC,GAAG,MAAMS,aAAAA;AAC9E,MAAI,CAACf,SAAS;AACZ,WAAO,OAAcO,YAAK,IAAIC,eAAeF,GAAAA,CAAAA;EAC/C;AACA,SAAON;AACT,CAAA;AAEK,IAAMgB,2BAAN,cAA+CC,YAAI,0CAAA,EAAA,EAAA;AAGrD;AAEE,IAAMC,UAAU,CAACxD,aAChBC,cAAQqD,0BAA0BtD,QAAAA;",
6
+ "names": ["BaseError", "InvokerNotInitializedError", "extend", "NoHandlerError", "operationKey", "context", "ServiceNotAvailableError", "service", "options", "message", "FunctionNotFoundError", "functionKey", "function", "FunctionError", "InvalidOperationInputError", "InvalidOperationOutputError", "TriggerStateNotFoundError", "FunctionsAiUpstreamError", "FunctionsAiMemoizationMissError", "Context", "Effect", "pipe", "Layer", "EffectEx", "assertArgument", "DXN", "TypeId", "isOperationHandlerSet", "value", "empty", "handlers", "succeed", "getHandlers", "Promise", "resolve", "make", "async", "promise", "getHandlersCached", "reactive", "registry", "atom", "cached", "subscribe", "compute", "suspend", "pipe", "get", "forEach", "set", "concurrency", "map", "groups", "flat", "tapErrorCause", "sync", "EffectEx", "runAndForwardErrors", "merge", "sets", "assertArgument", "every", "all", "then", "lazy", "modules", "module", "default", "handler", "getHandler", "definition", "gen", "find", "meta", "key", "fail", "NoHandlerError", "getHandlerByKey", "normalizeKey", "k", "DXN", "isDXN", "getName", "normalizedKey", "OperationHandlerProvider", "Tag", "provide"]
7
+ }
@@ -0,0 +1,10 @@
1
+ import {
2
+ fib_default
3
+ } from "./chunk-AFBNVFAY.mjs";
4
+ import "./chunk-JAU4E4EK.mjs";
5
+ import "./chunk-QZS4G6PE.mjs";
6
+ import "./chunk-J5LGTIGS.mjs";
7
+ export {
8
+ fib_default as default
9
+ };
10
+ //# sourceMappingURL=fib-HBDUGQW7.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }