@loomwork/effect-runtime 0.0.0-stage → 0.1.1

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 (53) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +8 -0
  3. package/README.md +65 -2
  4. package/dist/EffectRuntime.d.ts +121 -0
  5. package/dist/EffectRuntime.d.ts.map +1 -0
  6. package/dist/EffectRuntime.js +422 -0
  7. package/dist/EffectRuntime.js.map +1 -0
  8. package/dist/authz.d.ts +228 -0
  9. package/dist/authz.d.ts.map +1 -0
  10. package/dist/authz.js +281 -0
  11. package/dist/authz.js.map +1 -0
  12. package/dist/effects/A2AEffect.d.ts +14 -0
  13. package/dist/effects/A2AEffect.d.ts.map +1 -0
  14. package/dist/effects/A2AEffect.js +21 -0
  15. package/dist/effects/A2AEffect.js.map +1 -0
  16. package/dist/effects/HumanEffect.d.ts +13 -0
  17. package/dist/effects/HumanEffect.d.ts.map +1 -0
  18. package/dist/effects/HumanEffect.js +21 -0
  19. package/dist/effects/HumanEffect.js.map +1 -0
  20. package/dist/effects/LazyEffect.d.ts +10 -0
  21. package/dist/effects/LazyEffect.d.ts.map +1 -0
  22. package/dist/effects/LazyEffect.js +28 -0
  23. package/dist/effects/LazyEffect.js.map +1 -0
  24. package/dist/effects/LlmEffect.d.ts +27 -0
  25. package/dist/effects/LlmEffect.d.ts.map +1 -0
  26. package/dist/effects/LlmEffect.js +27 -0
  27. package/dist/effects/LlmEffect.js.map +1 -0
  28. package/dist/effects/ToolEffect.d.ts +38 -0
  29. package/dist/effects/ToolEffect.d.ts.map +1 -0
  30. package/dist/effects/ToolEffect.js +31 -0
  31. package/dist/effects/ToolEffect.js.map +1 -0
  32. package/dist/index.d.ts +12 -0
  33. package/dist/index.d.ts.map +1 -0
  34. package/dist/index.js +30 -0
  35. package/dist/index.js.map +1 -0
  36. package/dist/policy.d.ts +76 -0
  37. package/dist/policy.d.ts.map +1 -0
  38. package/dist/policy.js +212 -0
  39. package/dist/policy.js.map +1 -0
  40. package/dist/types.d.ts +416 -0
  41. package/dist/types.d.ts.map +1 -0
  42. package/dist/types.js +28 -0
  43. package/dist/types.js.map +1 -0
  44. package/package.json +56 -3
  45. package/src/EffectRuntime.ts +484 -0
  46. package/src/authz.ts +424 -0
  47. package/src/effects/HumanEffect.ts +25 -0
  48. package/src/effects/LazyEffect.ts +25 -0
  49. package/src/effects/LlmEffect.ts +39 -0
  50. package/src/effects/ToolEffect.ts +59 -0
  51. package/src/index.ts +48 -0
  52. package/src/policy.ts +296 -0
  53. package/src/types.ts +428 -0
@@ -0,0 +1,422 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EffectRuntime = void 0;
4
+ const classify_1 = require("@loomwork/classify");
5
+ const core_1 = require("@loomwork/core");
6
+ const scheduler_1 = require("@loomwork/scheduler");
7
+ const authz_1 = require("./authz");
8
+ const types_1 = require("./types");
9
+ class EffectRuntime {
10
+ registry = new Map();
11
+ middleware;
12
+ authorizer;
13
+ scheduler;
14
+ warmer;
15
+ onWarn;
16
+ /**
17
+ * @param middleware Cross-cutting middleware applied around every effect
18
+ * execution, in order — `middleware[0]` is outermost. The list is fixed here
19
+ * (static ⇒ deterministic across replay). An empty list (the default) makes
20
+ * `execute` behave identically to a bare effect call.
21
+ * @param options Optional `authorizer` (K2 protection ring), `scheduler` (M6 —
22
+ * route effects through it for bounded concurrency + priority), and `warmer` (M6 —
23
+ * advisory off-log pre-warm). All omittable; the empty case is the zero-overhead
24
+ * direct path with today's behaviour.
25
+ */
26
+ constructor(middleware = [], options = {}) {
27
+ this.middleware = middleware;
28
+ this.authorizer = options.authorizer;
29
+ this.scheduler = options.scheduler;
30
+ this.warmer = options.warmer;
31
+ this.onWarn = options.onWarn ?? ((m) => console.warn(m));
32
+ }
33
+ register(toolId, effect) {
34
+ // ADR 0115 — a kind is an open vocabulary, but a malformed one is refused here, where the
35
+ // effect is declared, not later where the kind is used as a map key or a metrics label.
36
+ if (!(0, core_1.isVocabularyName)(effect.kind)) {
37
+ throw new Error(`Effect "${toolId}" declares kind ${JSON.stringify(effect.kind)}: a kind must match ${String(core_1.VOCABULARY_NAME_PATTERN)} (ADR 0115)`);
38
+ }
39
+ this.registry.set(toolId, effect);
40
+ }
41
+ async execute(toolId, input, ctx) {
42
+ // ADR 0119 (review 2) — a durable call whose effect has a CONFIGURED delta sink gets the
43
+ // same guarded channel as a transient one: the configured sink is reached ONLY through
44
+ // the middleware delta guards (and fails closed under an uncovered output validator).
45
+ // Deltas stay live-only — never journaled.
46
+ const pipe = ctx.onDelta === undefined ? this.deltaPipe(toolId, ctx, undefined) : undefined;
47
+ if (pipe === undefined)
48
+ return this.runSeam(toolId, input, ctx, "journaled");
49
+ try {
50
+ return await this.runSeam(toolId, input, { ...ctx, onDelta: pipe.sink }, "journaled", pipe.onExecute);
51
+ }
52
+ finally {
53
+ pipe.close();
54
+ }
55
+ }
56
+ // R12 — the sub-resource a call targets, for per-resource authorization. Never throws: a
57
+ // resolver that fails yields "no resource", which only an effect-wide grant satisfies.
58
+ resourceOf(toolId, input) {
59
+ const effect = this.registry.get(toolId);
60
+ if (effect?.resourceOf === undefined)
61
+ return undefined;
62
+ try {
63
+ const r = effect.resourceOf(input);
64
+ return typeof r === "string" && r.length > 0 ? r : undefined;
65
+ }
66
+ catch {
67
+ return undefined;
68
+ }
69
+ }
70
+ // The shared execute path for both seams. `seam` records which entry point the
71
+ // caller came through, so the effect-mode boundary is enforced in exactly one
72
+ // place and cannot be spoofed by hand-building a context that merely *looks*
73
+ // transient. Everything else — K2 authz, the middleware chain, K8 cancellation
74
+ // — is identical on both paths.
75
+ async runSeam(toolId, input, ctx, seam, onExecute) {
76
+ // R3k (ADR 0111 D4) — the KERNEL refuses a principal whose recorded identity could not be
77
+ // restored (an unrestorable delegation, a shredded or unresolvable record), BEFORE any
78
+ // authorizer: correctness must not depend on which authorizer happens to be composed.
79
+ const blocked = (0, authz_1.principalBlocked)(ctx.principal);
80
+ if (blocked !== undefined) {
81
+ ctx.emit("EFFECT_DENIED", { toolId, stepId: ctx.stepId, reason: blocked });
82
+ throw new authz_1.CapabilityDeniedError(toolId, blocked);
83
+ }
84
+ // Protection ring first: an unauthorized effect never runs, and its denial is a
85
+ // durable, auditable fact (P9). Checked before registry lookup so probing for
86
+ // unregistered effects is denied too.
87
+ if (this.authorizer !== undefined) {
88
+ const resource = this.resourceOf(toolId, input);
89
+ const decision = this.authorizer.authorize({
90
+ toolId,
91
+ ...(resource !== undefined && { resource }),
92
+ executionId: ctx.executionId,
93
+ workflowId: ctx.workflowId,
94
+ stepId: ctx.stepId,
95
+ ...(ctx.principal !== undefined && { principal: ctx.principal }),
96
+ });
97
+ if (!decision.allowed) {
98
+ const reason = decision.reason ?? "not authorized";
99
+ ctx.emit("EFFECT_DENIED", { toolId, stepId: ctx.stepId, reason });
100
+ throw new authz_1.CapabilityDeniedError(toolId, reason);
101
+ }
102
+ }
103
+ const effect = this.registry.get(toolId);
104
+ if (!effect) {
105
+ throw new Error(`No effect registered for toolId: "${toolId}"`);
106
+ }
107
+ // The determinism-boundary check (ADR 0073). A declared mode pins the effect
108
+ // to one seam: `ambient` reads (pagination, drill-down, a surface refetch)
109
+ // must never append to the log, and a `journaled` effect invoked transiently
110
+ // would silently produce no durable fact. Undeclared effects are unaffected,
111
+ // so this is byte-identical for everything that has not opted in (G2).
112
+ if (effect.mode !== undefined && effect.mode !== seam) {
113
+ throw new types_1.EffectModeViolationError(toolId, effect.mode, seam);
114
+ }
115
+ // K8 — a cancelled/deadline-breached execution never starts another effect:
116
+ // fail fast before the middleware chain rather than relying on every effect
117
+ // body to check the signal.
118
+ if (ctx.signal?.aborted === true) {
119
+ throw ctx.signal.reason instanceof Error
120
+ ? ctx.signal.reason
121
+ : new Error(`effect "${toolId}" aborted before start`);
122
+ }
123
+ // Build the effect+middleware chain as a single thunk. Fold right-to-left so
124
+ // middleware[0] ends up outermost (its `next` runs middleware[1], … the effect last).
125
+ // `next(override?)` threads an optional transformed input down the chain
126
+ // (K10.3 redaction resolves secret references into the value the effect sees);
127
+ // middleware that pass their received input unchanged just call `next()`.
128
+ // Middleware see the resolved toolId on their context view (per-tool config,
129
+ // e.g. claim-check digests); the effect receives the caller's ctx unchanged.
130
+ const mwCtx = this.middleware.length > 0 && ctx.toolId === undefined ? { ...ctx, toolId } : ctx;
131
+ let chain = (inp = input) => {
132
+ // ADR 0119 — one tick per effect.execute (a retry middleware re-enters here).
133
+ onExecute?.();
134
+ return effect.execute(inp, ctx);
135
+ };
136
+ for (let i = this.middleware.length - 1; i >= 0; i--) {
137
+ const mw = this.middleware[i];
138
+ const downstream = chain;
139
+ chain = (inp = input) => mw(mwCtx, inp, (override) => downstream(override ?? inp));
140
+ }
141
+ // Advisory pre-warm (M6) — off the durable path, fire-and-forget, no event.
142
+ this.warmer?.warm(toolId);
143
+ // M6 — route through the scheduler for bounded concurrency + priority ordering
144
+ // when configured; otherwise the zero-overhead direct path (unchanged).
145
+ if (this.scheduler !== undefined) {
146
+ const priority = (ctx.priority ?? scheduler_1.Priority.Normal);
147
+ return this.scheduler.schedule(() => chain(), {
148
+ priority,
149
+ label: toolId,
150
+ ...(ctx.signal !== undefined && { signal: ctx.signal }),
151
+ });
152
+ }
153
+ return chain();
154
+ }
155
+ /**
156
+ * Run a single registered effect ONCE, off the durable path — the supported
157
+ * façade over the already-blessed transient invocation (DE-series eval; ADR
158
+ * 0065 "don't make it a run until something durable happens"). It is exactly
159
+ * {@link execute}, but the framework owns the {@link EffectContext} instead of
160
+ * every caller hand-rolling one.
161
+ *
162
+ * What it does NOT do — the load-bearing guarantee (R1): nothing is written.
163
+ * The EffectRuntime holds no event store, no journal, and no fence, so a
164
+ * transient invocation produces zero envelopes, no `EXECUTION_STARTED`, no
165
+ * `STEP_*`, and no snapshot — structurally, not by convention. This is the
166
+ * sanctioned side of the ADR 0065 line: no execution, no fold, no recovery.
167
+ *
168
+ * Middleware contract (R3): the SAME statically configured effect-runtime
169
+ * middleware chain that a durable step's effect call runs also runs here —
170
+ * retry/backoff and the K2 authorizer are effect-local and remain in force.
171
+ * What is bypassed is everything ABOVE this layer: the workflow interpreter's
172
+ * journaling/durability (fold, `ExecutionJournal`, fencing, snapshots) is not
173
+ * EffectRuntime middleware at all, so there is nothing to opt out of.
174
+ *
175
+ * `ctx.emit` is a no-op sink (R4): an effect that emits transiently has the
176
+ * event DROPPED by construction — never buffered, never later flushed. Do not
177
+ * author a transient effect that relies on emitting durable state.
178
+ *
179
+ * The synthesized identity is throwaway: `idempotencyKey` is left unset, so do
180
+ * NOT rely on provider-side dedup across transient calls (they carry no stable
181
+ * key — a transient read path is expected to be retry-on-client).
182
+ *
183
+ * L30: `opts.as` stamps the call with an existing execution's identity (used by
184
+ * `ctx.decide`'s scope); it changes the claimed identity only, not R1-R5.
185
+ *
186
+ * @param opts optional {@link TransientInvokeOptions} — `signal` (cancellation,
187
+ * R5), `principal` (authz still enforced if wired), `label` (trace tag; without
188
+ * `as` also the synthetic executionId an authorizer may grant by).
189
+ */
190
+ async invokeTransient(toolId, input, opts = {}) {
191
+ // Synthesize the throwaway context the caller must never build (R2). The ids
192
+ // are meaningful only for the lifetime of this call: `executionId` carries
193
+ // the trace label for middleware correlation, `stepId` the toolId. `emit` is
194
+ // the drop sink (R4) — including the authz-denial emit, which still throws.
195
+ const base = {
196
+ executionId: opts.as?.executionId ?? `transient:${opts.label ?? toolId}`,
197
+ stepId: opts.as?.stepId ?? toolId,
198
+ workflowId: opts.as?.workflowId ?? "transient",
199
+ attempt: 1,
200
+ emit: () => { },
201
+ ...(opts.as?.callKey !== undefined && { callKey: opts.as.callKey }),
202
+ ...(opts.resources !== undefined && { resources: opts.resources }),
203
+ ...(opts.signal !== undefined && { signal: opts.signal }),
204
+ ...(opts.principal !== undefined && { principal: opts.principal }),
205
+ };
206
+ const pipe = this.deltaPipe(toolId, base, opts.onDelta);
207
+ const ctx = pipe === undefined ? base : { ...base, onDelta: pipe.sink };
208
+ try {
209
+ const out = await this.runSeam(toolId, input, ctx, "ambient", pipe?.onExecute);
210
+ // The terminal chunk goes out only now — after the middleware output phase and
211
+ // the effect's own parse have accepted the result.
212
+ pipe?.finish();
213
+ return out;
214
+ }
215
+ finally {
216
+ pipe?.close();
217
+ }
218
+ }
219
+ /**
220
+ * ADR 0119 — the per-call delta pipe between a streaming effect and the caller's
221
+ * sink. It owns every rule that makes a live tail safe:
222
+ * - REFUSED (undefined) when any middleware `inspectsOutput` — streaming would
223
+ * deliver text past a check that cannot see it; the call runs non-streamed.
224
+ * - A reasoning delta (ADR 0133 D6) passes its own `deltaGuard` instances the same way and
225
+ * reaches the per-call sink and the effect's configured REASONING sink, never its text
226
+ * `deltaSink`.
227
+ * - Each text delta passes the middleware `deltaGuard`s FIRST; a guard that throws
228
+ * severs the stream and the offending delta is never delivered.
229
+ * - Text is delivered as untrusted (tainted) content.
230
+ * - Silent once the call settled or the call's signal aborted (an effect that
231
+ * ignores the signal cannot reach a caller who moved on).
232
+ * - A retry (the effect re-executed) resets guards and sends a `reset` chunk.
233
+ * - The effect's own `done` chunk is held; the terminal chunk is sent by
234
+ * {@link finish} after the call SUCCEEDED.
235
+ * - The caller's sink throwing never fails the call (warned).
236
+ */
237
+ deltaPipe(toolId, base, callerSink) {
238
+ // The effect's own CONFIGURED sink (createLlmEffect/AgentRunner `onDelta`) is reached
239
+ // only through this pipe, so it is governed exactly like the per-call one.
240
+ const configured = this.registry.get(toolId)?.deltaSink;
241
+ // ADR 0133 D6 - the configured REASONING sink, reached only through this pipe as well.
242
+ const configuredReasoning = this.registry.get(toolId)?.reasoningSink;
243
+ if (callerSink === undefined && configured === undefined && configuredReasoning === undefined) {
244
+ return undefined;
245
+ }
246
+ const uncovered = this.middleware.findIndex((m) => m.inspectsOutput === true);
247
+ if (uncovered >= 0) {
248
+ const mw = this.middleware[uncovered];
249
+ this.onWarn(`invokeTransient("${toolId}"): streaming disabled: ${mw.name !== "" ? mw.name : `middleware[${uncovered}]`} inspects output without a delta form, so streamed text would bypass it; the call completes non-streamed (no delta sink — per-call or configured — receives anything)`);
250
+ // Fail closed: a DEFINED, silent sink — so the effect cannot fall back to calling
251
+ // its configured sink directly.
252
+ return { sink: () => { }, onExecute: () => { }, finish: () => { }, close: () => { } };
253
+ }
254
+ const mwCtx = { ...base, toolId };
255
+ const { onDelta: _own, ...plain } = base;
256
+ const sinkCtx = plain;
257
+ const origin = `effect:${toolId}`;
258
+ const factories = this.middleware.filter((m) => m.deltaGuard !== undefined);
259
+ let settled = false;
260
+ let attempts = 0;
261
+ let guards = [];
262
+ // ADR 0133 D6 - reasoning gets guard instances of its own: a guard accumulates the running
263
+ // TEXT it checks, and reasoning interleaved into it would corrupt that window.
264
+ let reasoningGuards = [];
265
+ let sawDone = false;
266
+ let heldUsage;
267
+ const dead = () => settled || base.signal?.aborted === true;
268
+ const deliver = (chunk) => {
269
+ if (dead())
270
+ return;
271
+ if (callerSink !== undefined) {
272
+ try {
273
+ callerSink(chunk);
274
+ }
275
+ catch (err) {
276
+ this.onWarn(`invokeTransient("${toolId}"): onDelta sink threw (ignored): ${String(err)}`);
277
+ }
278
+ }
279
+ // The configured sink sees text and resets, never the terminal chunk.
280
+ if (configured !== undefined && chunk.done !== true) {
281
+ try {
282
+ configured(chunk, sinkCtx);
283
+ }
284
+ catch (err) {
285
+ this.onWarn(`effect "${toolId}": configured onDelta threw (ignored): ${String(err)}`);
286
+ }
287
+ }
288
+ };
289
+ return {
290
+ sink: (chunk) => {
291
+ if (dead())
292
+ return;
293
+ if (chunk.done === true) {
294
+ sawDone = true;
295
+ heldUsage = chunk.usage;
296
+ return;
297
+ }
298
+ if (chunk.reasoning !== undefined) {
299
+ const r = (0, classify_1.isTainted)(chunk.reasoning)
300
+ ? chunk.reasoning
301
+ : (0, classify_1.tainted)(chunk.reasoning, `${origin}:reasoning`);
302
+ // May THROW - the sever, exactly as for text. Runs before delivery.
303
+ const rtext = (0, classify_1.unwrapTainted)(r);
304
+ for (const g of reasoningGuards)
305
+ g(rtext);
306
+ if (callerSink !== undefined && !dead()) {
307
+ try {
308
+ callerSink({ delta: (0, classify_1.tainted)("", origin), reasoning: r });
309
+ }
310
+ catch (err) {
311
+ this.onWarn(`invokeTransient("${toolId}"): onDelta sink threw (ignored): ${String(err)}`);
312
+ }
313
+ }
314
+ if (configuredReasoning !== undefined && !dead()) {
315
+ try {
316
+ configuredReasoning(r, sinkCtx);
317
+ }
318
+ catch (err) {
319
+ this.onWarn(`effect "${toolId}": configured reasoning sink threw (ignored): ${String(err)}`);
320
+ }
321
+ }
322
+ return;
323
+ }
324
+ // An effect that hands over a bare string (a JS caller) still delivers tainted.
325
+ const wrapped = (0, classify_1.isTainted)(chunk.delta)
326
+ ? chunk.delta
327
+ : (0, classify_1.tainted)(chunk.delta, origin);
328
+ const text = (0, classify_1.unwrapTainted)(wrapped);
329
+ // May THROW — the sever. Runs before delivery, so a breaching delta is never seen.
330
+ for (const g of guards)
331
+ g(text);
332
+ deliver({ delta: wrapped });
333
+ },
334
+ onExecute: () => {
335
+ attempts += 1;
336
+ guards = factories.map((m) => m.deltaGuard(mwCtx));
337
+ reasoningGuards = factories.map((m) => m.deltaGuard(mwCtx));
338
+ sawDone = false;
339
+ heldUsage = undefined;
340
+ if (attempts > 1)
341
+ deliver({ delta: (0, classify_1.tainted)("", origin), reset: true, attempt: attempts });
342
+ },
343
+ finish: () => {
344
+ if (!sawDone)
345
+ return;
346
+ deliver({
347
+ delta: (0, classify_1.tainted)("", origin),
348
+ done: true,
349
+ ...(heldUsage !== undefined && { usage: heldUsage }),
350
+ });
351
+ },
352
+ close: () => {
353
+ settled = true;
354
+ },
355
+ };
356
+ }
357
+ has(toolId) {
358
+ return this.registry.has(toolId);
359
+ }
360
+ /** The registered effects, in registration order (read-only; for a composition root's boot-time checks). */
361
+ entries() {
362
+ return this.registry.entries();
363
+ }
364
+ /**
365
+ * Advisory pre-warm for a capability, ahead of when it's needed (latency-only,
366
+ * off the durable path). Spins up the registered effect's own cold resource
367
+ * (`Effect.warm` — e.g. a K7 child process or an LLM connection) AND fires the
368
+ * configured {@link Warmer} seam. Never throws: an unregistered toolId is a
369
+ * no-op and a warm failure is swallowed (the real call just runs cold). Does
370
+ * NOT authorize, meter, emit, or touch the fold — warming a capability is not
371
+ * invoking it (P10).
372
+ */
373
+ warm(toolId) {
374
+ const effect = this.registry.get(toolId);
375
+ if (effect?.warm !== undefined) {
376
+ try {
377
+ void Promise.resolve(effect.warm()).catch(() => { });
378
+ }
379
+ catch {
380
+ // advisory — a synchronous warm failure is a silent no-op
381
+ }
382
+ }
383
+ this.warmer?.warm(toolId);
384
+ }
385
+ /**
386
+ * K9.3 — a registered effect's declared delivery semantic
387
+ * (`new ToolEffect(fn, { idempotent })` / `tool$({ idempotent })`). `false`
388
+ * means recovery must not silently re-run an attempt in an unknown state;
389
+ * `undefined` (undeclared, or no such effect) keeps the legacy at-least-once
390
+ * re-run. Pure/synchronous so the recovery decision is deterministic.
391
+ */
392
+ declaredIdempotence(toolId) {
393
+ return this.registry.get(toolId)?.idempotent;
394
+ }
395
+ /**
396
+ * DE-4 — a registered effect's declared failure channels (`Effect.errors`).
397
+ * The kernel's registry fallback when the invoking step declares no `errors:`
398
+ * map of its own; `undefined` (undeclared, or no such effect) means every
399
+ * TypedFailure from this effect degrades to the legacy untyped failure. Pure/
400
+ * synchronous so the replay decision is deterministic.
401
+ */
402
+ declaredErrors(toolId) {
403
+ return this.registry.get(toolId)?.errors;
404
+ }
405
+ /**
406
+ * A registered effect's declared determinism-boundary mode (ADR 0073), for tooling —
407
+ * `@loomwork/verify` reads it to flag a `journaled` effect reached from a `ctx.decide`
408
+ * scope, which the transient seam refuses. `undefined` when undeclared or unregistered.
409
+ */
410
+ modeOf(toolId) {
411
+ return this.registry.get(toolId)?.mode;
412
+ }
413
+ /**
414
+ * The registered effect's kind, for tooling: `tool` / `llm` / `human` / `a2a` or any custom
415
+ * name (ADR 0115). Only `"human"` has kernel semantics (it parks).
416
+ */
417
+ kindOf(toolId) {
418
+ return this.registry.get(toolId)?.kind;
419
+ }
420
+ }
421
+ exports.EffectRuntime = EffectRuntime;
422
+ //# sourceMappingURL=EffectRuntime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EffectRuntime.js","sourceRoot":"","sources":["../src/EffectRuntime.ts"],"names":[],"mappings":"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"}