@executor-js/sdk 0.0.1-beta.5 → 0.0.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.
package/README.md CHANGED
@@ -15,7 +15,13 @@ npm install @executor/sdk
15
15
  ## Quick start
16
16
 
17
17
  ```ts
18
- import { createExecutor, definePlugin, ToolRegistration, ToolId, ToolInvocationResult } from "@executor/sdk";
18
+ import {
19
+ createExecutor,
20
+ definePlugin,
21
+ ToolRegistration,
22
+ ToolId,
23
+ ToolInvocationResult,
24
+ } from "@executor/sdk";
19
25
 
20
26
  // Define a custom plugin with async/await.
21
27
  const weatherPlugin = definePlugin({
@@ -97,8 +103,15 @@ const executor = await createExecutor({
97
103
  plugins: [mcpPlugin(), openApiPlugin(), graphqlPlugin()] as const,
98
104
  });
99
105
 
100
- await executor.mcp.addSource({ transport: "remote", name: "Context7", endpoint: "https://mcp.context7.com/mcp" });
101
- await executor.openapi.addSpec({ spec: "https://petstore3.swagger.io/api/v3/openapi.json", namespace: "petstore" });
106
+ await executor.mcp.addSource({
107
+ transport: "remote",
108
+ name: "Context7",
109
+ endpoint: "https://mcp.context7.com/mcp",
110
+ });
111
+ await executor.openapi.addSpec({
112
+ spec: "https://petstore3.swagger.io/api/v3/openapi.json",
113
+ namespace: "petstore",
114
+ });
102
115
  await executor.graphql.addSource({ endpoint: "https://graphql.anilist.co", namespace: "anilist" });
103
116
 
104
117
  const tools = await executor.tools.list();
@@ -136,7 +149,7 @@ Plugins accept `{ secretId, prefix }` wherever a header value is expected, so yo
136
149
  The SDK is built on [Effect](https://effect.website/) under the hood. If you want the raw Effect-based primitives instead of the promise wrapper, import from the `/core` subpath:
137
150
 
138
151
  ```ts
139
- import { createExecutor } from "@executor/sdk/core";
152
+ import { createExecutor } from "@executor/sdk";
140
153
  ```
141
154
 
142
155
  `/core` exposes `createExecutor` returning an `Effect`, the `ToolRegistry` / `SourceRegistry` / `SecretStore` / `PolicyEngine` Context tags, the in-memory store factories, and every branded ID + error class. Every `@executor/plugin-*` ships a matching `/core` subpath.
@@ -12,9 +12,7 @@ var ToolNotFoundError = class extends Schema2.TaggedError()(
12
12
  { toolId: ToolId }
13
13
  ) {
14
14
  };
15
- var ToolInvocationError = class extends Data.TaggedError(
16
- "ToolInvocationError"
17
- ) {
15
+ var ToolInvocationError = class extends Data.TaggedError("ToolInvocationError") {
18
16
  };
19
17
  var SecretNotFoundError = class extends Schema2.TaggedError()(
20
18
  "SecretNotFoundError",
@@ -86,9 +84,7 @@ var ToolListFilter = class extends Schema3.Class("ToolListFilter")({
86
84
  };
87
85
  var ToolRegistry = class extends Context.Tag("@executor-js/sdk/ToolRegistry")() {
88
86
  };
89
- var ToolRegistration = class extends Schema3.Class(
90
- "ToolRegistration"
91
- )({
87
+ var ToolRegistration = class extends Schema3.Class("ToolRegistration")({
92
88
  id: ToolId,
93
89
  pluginKey: Schema3.String,
94
90
  /** Source this tool belongs to (namespace identifier) */
@@ -110,15 +106,21 @@ var Source = class extends Schema4.Class("Source")({
110
106
  name: Schema4.String,
111
107
  /** Plugin kind that manages this source (e.g. "openapi", "mcp") */
112
108
  kind: Schema4.String,
109
+ /** Optional upstream URL for this source — used to derive a favicon in the UI */
110
+ url: Schema4.optional(Schema4.String),
113
111
  /** True when the source is provided by the running executor */
114
112
  runtime: Schema4.optional(Schema4.Boolean),
115
113
  /** Whether the source supports removal */
116
114
  canRemove: Schema4.optional(Schema4.Boolean),
117
115
  /** Whether the source supports refresh */
118
- canRefresh: Schema4.optional(Schema4.Boolean)
116
+ canRefresh: Schema4.optional(Schema4.Boolean),
117
+ /** Whether the source supports editing (config changes) */
118
+ canEdit: Schema4.optional(Schema4.Boolean)
119
119
  }) {
120
120
  };
121
- var SourceDetectionResult = class extends Schema4.Class("SourceDetectionResult")({
121
+ var SourceDetectionResult = class extends Schema4.Class(
122
+ "SourceDetectionResult"
123
+ )({
122
124
  /** Plugin kind that detected this source */
123
125
  kind: Schema4.String,
124
126
  /** How confident the plugin is that the URL matches */
@@ -131,9 +133,7 @@ var SourceDetectionResult = class extends Schema4.Class("SourceDetectionResult")
131
133
  namespace: Schema4.String
132
134
  }) {
133
135
  };
134
- var SourceRegistry = class extends Context2.Tag(
135
- "@executor-js/sdk/SourceRegistry"
136
- )() {
136
+ var SourceRegistry = class extends Context2.Tag("@executor-js/sdk/SourceRegistry")() {
137
137
  };
138
138
  var makeInMemorySourceRegistry = () => {
139
139
  const managers = /* @__PURE__ */ new Map();
@@ -205,34 +205,24 @@ var makeInMemorySourceRegistry = () => {
205
205
 
206
206
  // src/elicitation.ts
207
207
  import { Schema as Schema5 } from "effect";
208
- var FormElicitation = class extends Schema5.TaggedClass()(
209
- "FormElicitation",
210
- {
211
- message: Schema5.String,
212
- /** JSON Schema describing the fields to collect */
213
- requestedSchema: Schema5.Record({ key: Schema5.String, value: Schema5.Unknown })
214
- }
215
- ) {
208
+ var FormElicitation = class extends Schema5.TaggedClass()("FormElicitation", {
209
+ message: Schema5.String,
210
+ /** JSON Schema describing the fields to collect */
211
+ requestedSchema: Schema5.Record({ key: Schema5.String, value: Schema5.Unknown })
212
+ }) {
216
213
  };
217
- var UrlElicitation = class extends Schema5.TaggedClass()(
218
- "UrlElicitation",
219
- {
220
- message: Schema5.String,
221
- url: Schema5.String,
222
- /** Unique ID so the host can correlate the callback */
223
- elicitationId: Schema5.String
224
- }
225
- ) {
214
+ var UrlElicitation = class extends Schema5.TaggedClass()("UrlElicitation", {
215
+ message: Schema5.String,
216
+ url: Schema5.String,
217
+ /** Unique ID so the host can correlate the callback */
218
+ elicitationId: Schema5.String
219
+ }) {
226
220
  };
227
221
  var ElicitationAction = Schema5.Literal("accept", "decline", "cancel");
228
- var ElicitationResponse = class extends Schema5.Class(
229
- "ElicitationResponse"
230
- )({
222
+ var ElicitationResponse = class extends Schema5.Class("ElicitationResponse")({
231
223
  action: ElicitationAction,
232
224
  /** Present when action is "accept" — the data the user provided */
233
- content: Schema5.optional(
234
- Schema5.Record({ key: Schema5.String, value: Schema5.Unknown })
235
- )
225
+ content: Schema5.optional(Schema5.Record({ key: Schema5.String, value: Schema5.Unknown }))
236
226
  }) {
237
227
  };
238
228
  var ElicitationDeclinedError = class extends Schema5.TaggedError()(
@@ -497,7 +487,11 @@ var buildRegistration = (namespace, def) => {
497
487
  outputSchema: outputHoist.stripped,
498
488
  mayElicit: isEffect
499
489
  };
500
- const entry = { decode, handler: def.handler, isEffect };
490
+ const entry = {
491
+ decode,
492
+ handler: def.handler,
493
+ isEffect
494
+ };
501
495
  return { registration, entry, definitions: allDefs };
502
496
  };
503
497
  var makeInvoker = (handlers, pluginCtx) => ({
@@ -576,9 +570,7 @@ var makeInvoker = (handlers, pluginCtx) => ({
576
570
  const effectHandler = entry.handler;
577
571
  return parsed.pipe(
578
572
  Effect7.flatMap((input) => effectHandler(input, ctx)),
579
- Effect7.map(
580
- (data) => new ToolInvocationResult({ data, error: null })
581
- ),
573
+ Effect7.map((data) => new ToolInvocationResult({ data, error: null })),
582
574
  Effect7.catchAll(
583
575
  (err) => {
584
576
  if (err != null && typeof err === "object" && "_tag" in err && err._tag === "ElicitationDeclinedError") {
@@ -620,6 +612,7 @@ var inMemoryToolsPlugin = (config) => {
620
612
  yield* ctx.tools.register(registrations);
621
613
  return {
622
614
  extension: {
615
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Schema.Schema is invariant; `any` required to accept arbitrary MemoryToolDefinition types
623
616
  addTools: (newTools) => Effect7.gen(function* () {
624
617
  const newResults = newTools.map((t) => buildRegistration(ns, t));
625
618
  const newDefs = {};
@@ -736,10 +729,7 @@ var schemaToTypeScriptPreviewWithDefs = (schema, defs, options = {}) => {
736
729
  }
737
730
  const enumValues = Array.isArray(current.enum) ? current.enum : [];
738
731
  if (enumValues.length > 0) {
739
- return truncate(
740
- enumValues.map((value) => JSON.stringify(value)).join(" | "),
741
- maxLength
742
- );
732
+ return truncate(enumValues.map((value) => JSON.stringify(value)).join(" | "), maxLength);
743
733
  }
744
734
  const largeComposite = summarizeLargeComposite(current, maxCompositeMembers);
745
735
  if (largeComposite) {
@@ -875,11 +865,16 @@ var schemaToTypeScriptPreviewWithDefs = (schema, defs, options = {}) => {
875
865
  if (target === void 0) {
876
866
  return [];
877
867
  }
878
- return [[name, render({
879
- currentInput: target,
880
- depthRemaining: maxDepth,
881
- refDepthRemaining: Math.max(0, maxRefDepth - refDepth)
882
- })]];
868
+ return [
869
+ [
870
+ name,
871
+ render({
872
+ currentInput: target,
873
+ depthRemaining: maxDepth,
874
+ refDepthRemaining: Math.max(0, maxRefDepth - refDepth)
875
+ })
876
+ ]
877
+ ];
883
878
  })
884
879
  );
885
880
  return {
@@ -895,8 +890,8 @@ var buildToolTypeScriptPreview = (input) => {
895
890
  const inputPreview = input.inputSchema !== void 0 ? schemaToTypeScriptPreviewWithDefs(input.inputSchema, input.defs, input.options) : null;
896
891
  const outputPreview = input.outputSchema !== void 0 ? schemaToTypeScriptPreviewWithDefs(input.outputSchema, input.defs, input.options) : null;
897
892
  const mergedDefinitions = {
898
- ...inputPreview?.definitions ?? {},
899
- ...outputPreview?.definitions ?? {}
893
+ ...inputPreview?.definitions,
894
+ ...outputPreview?.definitions
900
895
  };
901
896
  return {
902
897
  ...inputPreview ? { inputTypeScript: inputPreview.type } : {},
@@ -967,14 +962,16 @@ var registerRuntimeTools = (input) => Effect8.gen(function* () {
967
962
  })
968
963
  );
969
964
  if (input.source && input.sources) {
970
- yield* input.sources.registerRuntime(new Source({
971
- id: input.source.id,
972
- name: input.source.name,
973
- kind: input.source.kind ?? input.pluginKey,
974
- runtime: true,
975
- canRemove: input.source.canRemove ?? false,
976
- canRefresh: input.source.canRefresh ?? false
977
- }));
965
+ yield* input.sources.registerRuntime(
966
+ new Source({
967
+ id: input.source.id,
968
+ name: input.source.name,
969
+ kind: input.source.kind ?? input.pluginKey,
970
+ runtime: true,
971
+ canRemove: input.source.canRemove ?? false,
972
+ canRefresh: input.source.canRefresh ?? false
973
+ })
974
+ );
978
975
  }
979
976
  const defs = {};
980
977
  for (const tool2 of built) {
@@ -1205,9 +1202,7 @@ var makeInMemorySecretStore = () => {
1205
1202
  });
1206
1203
  };
1207
1204
  return {
1208
- list: (scopeId) => Effect10.sync(
1209
- () => [...refs.values()].filter((r) => r.scopeId === scopeId)
1210
- ),
1205
+ list: (scopeId) => Effect10.sync(() => [...refs.values()].filter((r) => r.scopeId === scopeId)),
1211
1206
  get: (secretId) => Effect10.fromNullable(refs.get(secretId)).pipe(
1212
1207
  Effect10.mapError(() => new SecretNotFoundError({ secretId }))
1213
1208
  ),
@@ -1271,9 +1266,7 @@ var makeInMemoryPolicyEngine = () => {
1271
1266
  const policies = /* @__PURE__ */ new Map();
1272
1267
  let counter = 0;
1273
1268
  return {
1274
- list: (scopeId) => Effect11.succeed(
1275
- [...policies.values()].filter((p) => p.scopeId === scopeId)
1276
- ),
1269
+ list: (scopeId) => Effect11.succeed([...policies.values()].filter((p) => p.scopeId === scopeId)),
1277
1270
  check: (_input) => Effect11.void,
1278
1271
  add: (policy) => Effect11.sync(() => {
1279
1272
  const id = PolicyId.make(`policy-${++counter}`);
@@ -1307,8 +1300,8 @@ var makeTestConfig = (options) => {
1307
1300
  import { Effect as Effect12 } from "effect";
1308
1301
  var scopeKv = (kv, namespace) => ({
1309
1302
  get: (key) => kv.get(namespace, key),
1310
- set: (key, value) => kv.set(namespace, key, value),
1311
- delete: (key) => kv.delete(namespace, key),
1303
+ set: (entries) => kv.set(namespace, entries),
1304
+ delete: (keys) => kv.delete(namespace, keys),
1312
1305
  list: () => kv.list(namespace),
1313
1306
  deleteAll: () => kv.deleteAll(namespace),
1314
1307
  withTransaction: kv.withTransaction
@@ -1317,13 +1310,15 @@ var makeInMemoryScopedKv = () => {
1317
1310
  const store = /* @__PURE__ */ new Map();
1318
1311
  return {
1319
1312
  get: (key) => Effect12.succeed(store.get(key) ?? null),
1320
- set: (key, value) => Effect12.sync(() => {
1321
- store.set(key, value);
1313
+ set: (entries) => Effect12.sync(() => {
1314
+ for (const { key, value } of entries) store.set(key, value);
1322
1315
  }),
1323
- delete: (key) => Effect12.sync(() => store.delete(key)),
1324
- list: () => Effect12.sync(
1325
- () => [...store.entries()].map(([key, value]) => ({ key, value }))
1326
- ),
1316
+ delete: (keys) => Effect12.sync(() => {
1317
+ let count = 0;
1318
+ for (const key of keys) if (store.delete(key)) count++;
1319
+ return count;
1320
+ }),
1321
+ list: () => Effect12.sync(() => [...store.entries()].map(([key, value]) => ({ key, value }))),
1327
1322
  deleteAll: () => Effect12.sync(() => {
1328
1323
  const n = store.size;
1329
1324
  store.clear();
@@ -1388,4 +1383,4 @@ export {
1388
1383
  scopeKv,
1389
1384
  makeInMemoryScopedKv
1390
1385
  };
1391
- //# sourceMappingURL=chunk-ECOS3HQG.js.map
1386
+ //# sourceMappingURL=chunk-D7CT3UMO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ids.ts","../src/errors.ts","../src/tools.ts","../src/sources.ts","../src/elicitation.ts","../src/secrets.ts","../src/policies.ts","../src/scope.ts","../src/plugin.ts","../src/executor.ts","../src/plugins/in-memory-tools.ts","../src/schema-refs.ts","../src/schema-types.ts","../src/runtime-tools.ts","../src/in-memory/tool-registry.ts","../src/in-memory/secret-store.ts","../src/in-memory/policy-engine.ts","../src/testing.ts","../src/plugin-kv.ts"],"sourcesContent":["import { Schema } from \"effect\";\n\nexport const ScopeId = Schema.String.pipe(Schema.brand(\"ScopeId\"));\nexport type ScopeId = typeof ScopeId.Type;\n\nexport const ToolId = Schema.String.pipe(Schema.brand(\"ToolId\"));\nexport type ToolId = typeof ToolId.Type;\n\nexport const SecretId = Schema.String.pipe(Schema.brand(\"SecretId\"));\nexport type SecretId = typeof SecretId.Type;\n\nexport const PolicyId = Schema.String.pipe(Schema.brand(\"PolicyId\"));\nexport type PolicyId = typeof PolicyId.Type;\n","import { Data, Schema } from \"effect\";\n\nimport { ToolId, SecretId, PolicyId } from \"./ids\";\n\nexport class ToolNotFoundError extends Schema.TaggedError<ToolNotFoundError>()(\n \"ToolNotFoundError\",\n { toolId: ToolId },\n) {}\n\nexport class ToolInvocationError extends Data.TaggedError(\"ToolInvocationError\")<{\n readonly toolId: ToolId;\n readonly message: string;\n readonly cause?: unknown;\n}> {}\n\nexport class SecretNotFoundError extends Schema.TaggedError<SecretNotFoundError>()(\n \"SecretNotFoundError\",\n { secretId: SecretId },\n) {}\n\nexport class SecretResolutionError extends Schema.TaggedError<SecretResolutionError>()(\n \"SecretResolutionError\",\n {\n secretId: SecretId,\n message: Schema.String,\n },\n) {}\n\nexport class PolicyDeniedError extends Schema.TaggedError<PolicyDeniedError>()(\n \"PolicyDeniedError\",\n {\n policyId: PolicyId,\n toolId: ToolId,\n reason: Schema.String,\n },\n) {}\n","import { Context, Effect, Schema } from \"effect\";\n\nimport { ToolId } from \"./ids\";\nimport { ToolNotFoundError, ToolInvocationError } from \"./errors\";\nimport type { ElicitationHandler, ElicitationDeclinedError } from \"./elicitation\";\n\n// ---------------------------------------------------------------------------\n// Tool models\n// ---------------------------------------------------------------------------\n\nexport class ToolAnnotations extends Schema.Class<ToolAnnotations>(\"ToolAnnotations\")({\n /** Whether this tool requires user approval before execution */\n requiresApproval: Schema.optional(Schema.Boolean),\n /** Human-readable description shown in the approval prompt */\n approvalDescription: Schema.optional(Schema.String),\n}) {}\n\nexport class ToolMetadata extends Schema.Class<ToolMetadata>(\"ToolMetadata\")({\n id: ToolId,\n pluginKey: Schema.String,\n /** Source this tool belongs to (namespace identifier) */\n sourceId: Schema.String,\n name: Schema.String,\n description: Schema.optional(Schema.String),\n /** Whether this tool may request elicitation during invocation */\n mayElicit: Schema.optional(Schema.Boolean),\n}) {}\n\nexport class ToolSchema extends Schema.Class<ToolSchema>(\"ToolSchema\")({\n id: ToolId,\n inputTypeScript: Schema.optional(Schema.String),\n outputTypeScript: Schema.optional(Schema.String),\n typeScriptDefinitions: Schema.optional(\n Schema.Record({ key: Schema.String, value: Schema.String }),\n ),\n inputSchema: Schema.optional(Schema.Unknown),\n outputSchema: Schema.optional(Schema.Unknown),\n}) {}\n\nexport class ToolInvocationResult extends Schema.Class<ToolInvocationResult>(\n \"ToolInvocationResult\",\n)({\n data: Schema.Unknown,\n error: Schema.NullOr(Schema.Unknown),\n status: Schema.optional(Schema.Number),\n}) {}\n\n// ---------------------------------------------------------------------------\n// ToolListFilter\n// ---------------------------------------------------------------------------\n\nexport class ToolListFilter extends Schema.Class<ToolListFilter>(\"ToolListFilter\")({\n /** Filter to tools belonging to a specific source */\n sourceId: Schema.optional(Schema.String),\n query: Schema.optional(Schema.String),\n}) {}\n\n// ---------------------------------------------------------------------------\n// Invocation options\n// ---------------------------------------------------------------------------\n\nexport interface InvokeOptions {\n /** Handler for elicitation requests, or \"accept-all\" to auto-approve everything. */\n readonly onElicitation: ElicitationHandler | \"accept-all\";\n}\n\n// ---------------------------------------------------------------------------\n// ToolRegistry — stores and invokes tools\n// ---------------------------------------------------------------------------\n\nexport class ToolRegistry extends Context.Tag(\"@executor/sdk/ToolRegistry\")<\n ToolRegistry,\n {\n readonly list: (filter?: ToolListFilter) => Effect.Effect<readonly ToolMetadata[]>;\n\n readonly schema: (toolId: ToolId) => Effect.Effect<ToolSchema, ToolNotFoundError>;\n\n readonly invoke: (\n toolId: ToolId,\n args: unknown,\n options: InvokeOptions,\n ) => Effect.Effect<\n ToolInvocationResult,\n ToolNotFoundError | ToolInvocationError | ElicitationDeclinedError\n >;\n\n /**\n * Shared schema definitions across all tools.\n * `$ref` pointers in tool schemas resolve against this store.\n */\n readonly definitions: () => Effect.Effect<Record<string, unknown>>;\n\n /**\n * Register named schema definitions into the shared store.\n * Plugins call this before registering tools whose schemas use `$ref`.\n */\n readonly registerDefinitions: (defs: Record<string, unknown>) => Effect.Effect<void>;\n\n /**\n * Register named schema definitions for runtime tools. These remain\n * runtime-only and are not persisted by storage-backed registries.\n */\n readonly registerRuntimeDefinitions: (defs: Record<string, unknown>) => Effect.Effect<void>;\n\n /** Remove named schema definitions that were registered for runtime tools. */\n readonly unregisterRuntimeDefinitions: (names: readonly string[]) => Effect.Effect<void>;\n\n /**\n * Register a plugin invoker. Must be called before registering tools\n * with the corresponding pluginKey.\n */\n readonly registerInvoker: (pluginKey: string, invoker: ToolInvoker) => Effect.Effect<void>;\n\n /**\n * Resolve annotations for a tool by delegating to the plugin's invoker.\n */\n readonly resolveAnnotations: (toolId: ToolId) => Effect.Effect<ToolAnnotations | undefined>;\n\n /** Register tools (used by plugins to push tools into the registry) */\n readonly register: (tools: readonly ToolRegistration[]) => Effect.Effect<void>;\n\n /**\n * Register runtime-only tools. These should behave like normal tools for\n * listing, schema lookup, discovery, and invocation, but are not persisted.\n */\n readonly registerRuntime: (tools: readonly ToolRegistration[]) => Effect.Effect<void>;\n\n /** Register a runtime-only handler for a specific tool id. */\n readonly registerRuntimeHandler: (\n toolId: ToolId,\n handler: RuntimeToolHandler,\n ) => Effect.Effect<void>;\n\n /** Unregister runtime-only tools by id without touching persisted storage. */\n readonly unregisterRuntime: (toolIds: readonly ToolId[]) => Effect.Effect<void>;\n\n /** Unregister tools by id (used by plugins on cleanup) */\n readonly unregister: (toolIds: readonly ToolId[]) => Effect.Effect<void>;\n\n /** Unregister all tools belonging to a source */\n readonly unregisterBySource: (sourceId: string) => Effect.Effect<void>;\n }\n>() {}\n\n// ---------------------------------------------------------------------------\n// ToolInvoker — plugin-provided invocation handler\n// ---------------------------------------------------------------------------\n\nexport interface ToolInvoker {\n readonly invoke: (\n toolId: ToolId,\n args: unknown,\n options: InvokeOptions,\n ) => Effect.Effect<ToolInvocationResult, ToolInvocationError | ElicitationDeclinedError>;\n\n /** Dynamically compute annotations for a tool (e.g. approval requirements). */\n readonly resolveAnnotations?: (toolId: ToolId) => Effect.Effect<ToolAnnotations | undefined>;\n}\n\nexport interface RuntimeToolHandler {\n readonly invoke: (\n args: unknown,\n options: InvokeOptions,\n ) => Effect.Effect<ToolInvocationResult, ToolInvocationError | ElicitationDeclinedError>;\n\n readonly resolveAnnotations?: () => Effect.Effect<ToolAnnotations | undefined>;\n}\n\n// ---------------------------------------------------------------------------\n// ToolRegistration — pure data, no closures\n// ---------------------------------------------------------------------------\n\nexport class ToolRegistration extends Schema.Class<ToolRegistration>(\"ToolRegistration\")({\n id: ToolId,\n pluginKey: Schema.String,\n /** Source this tool belongs to (namespace identifier) */\n sourceId: Schema.String,\n name: Schema.String,\n description: Schema.optional(Schema.String),\n mayElicit: Schema.optional(Schema.Boolean),\n inputSchema: Schema.optional(Schema.Unknown),\n outputSchema: Schema.optional(Schema.Unknown),\n}) {}\n","import { Context, Effect, Schema } from \"effect\";\n\n// ---------------------------------------------------------------------------\n// Source — a tool provider instance (e.g. \"GitHub REST API\")\n// ---------------------------------------------------------------------------\n\nexport class Source extends Schema.Class<Source>(\"Source\")({\n /** Unique namespace identifier (e.g. \"github_rest\") */\n id: Schema.String,\n /** Human-readable name */\n name: Schema.String,\n /** Plugin kind that manages this source (e.g. \"openapi\", \"mcp\") */\n kind: Schema.String,\n /** Optional upstream URL for this source — used to derive a favicon in the UI */\n url: Schema.optional(Schema.String),\n /** True when the source is provided by the running executor */\n runtime: Schema.optional(Schema.Boolean),\n /** Whether the source supports removal */\n canRemove: Schema.optional(Schema.Boolean),\n /** Whether the source supports refresh */\n canRefresh: Schema.optional(Schema.Boolean),\n /** Whether the source supports editing (config changes) */\n canEdit: Schema.optional(Schema.Boolean),\n}) {}\n\n// ---------------------------------------------------------------------------\n// SourceDetectionResult — returned by detect() on a SourceManager\n// ---------------------------------------------------------------------------\n\nexport class SourceDetectionResult extends Schema.Class<SourceDetectionResult>(\n \"SourceDetectionResult\",\n)({\n /** Plugin kind that detected this source */\n kind: Schema.String,\n /** How confident the plugin is that the URL matches */\n confidence: Schema.Literal(\"high\", \"medium\", \"low\"),\n /** The URL that was probed */\n endpoint: Schema.String,\n /** Suggested human-readable name */\n name: Schema.String,\n /** Suggested namespace */\n namespace: Schema.String,\n}) {}\n\n// ---------------------------------------------------------------------------\n// SourceManager — plugin-provided source lifecycle handler\n//\n// Each plugin registers one of these during init. The SourceRegistry\n// delegates to it for all operations on sources of that kind.\n// ---------------------------------------------------------------------------\n\nexport interface SourceManager {\n /** Plugin kind this manager handles (e.g. \"openapi\", \"mcp\") */\n readonly kind: string;\n\n /** List all sources managed by this plugin */\n readonly list: () => Effect.Effect<readonly Source[]>;\n\n /** Remove a source and clean up its tools + internal state */\n readonly remove: (sourceId: string) => Effect.Effect<void>;\n\n /** Re-fetch / re-register tools for a source */\n readonly refresh?: (sourceId: string) => Effect.Effect<void>;\n\n /** Detect whether a URL matches this plugin's source type */\n readonly detect?: (url: string) => Effect.Effect<SourceDetectionResult | null>;\n}\n\n// ---------------------------------------------------------------------------\n// SourceRegistry — core service, coordinates across all plugins\n// ---------------------------------------------------------------------------\n\nexport class SourceRegistry extends Context.Tag(\"@executor/sdk/SourceRegistry\")<\n SourceRegistry,\n {\n /** Register a source manager (called by plugins during init) */\n readonly addManager: (manager: SourceManager) => Effect.Effect<void>;\n\n /** Register a runtime-only source entry. */\n readonly registerRuntime: (source: Source) => Effect.Effect<void>;\n\n /** Unregister a runtime-only source entry by id. */\n readonly unregisterRuntime: (sourceId: string) => Effect.Effect<void>;\n\n /** List all sources across all plugins */\n readonly list: () => Effect.Effect<readonly Source[]>;\n\n /** Remove a source by id. Finds the owning manager and delegates. */\n readonly remove: (sourceId: string) => Effect.Effect<void>;\n\n /** Refresh a source by id. Finds the owning manager and delegates. */\n readonly refresh: (sourceId: string) => Effect.Effect<void>;\n\n /** Detect source type from a URL by probing all registered plugins */\n readonly detect: (url: string) => Effect.Effect<readonly SourceDetectionResult[]>;\n }\n>() {}\n\n// ---------------------------------------------------------------------------\n// In-memory implementation\n// ---------------------------------------------------------------------------\n\nexport const makeInMemorySourceRegistry = () => {\n const managers = new Map<string, SourceManager>();\n const runtimeSources = new Map<string, Source>();\n\n return {\n addManager: (manager: SourceManager) =>\n Effect.sync(() => {\n managers.set(manager.kind, manager);\n }),\n\n registerRuntime: (source: Source) =>\n Effect.sync(() => {\n runtimeSources.set(source.id, source);\n }),\n\n unregisterRuntime: (sourceId: string) =>\n Effect.sync(() => {\n runtimeSources.delete(sourceId);\n }),\n\n list: () =>\n Effect.gen(function* () {\n const all: Source[] = [...runtimeSources.values()];\n for (const manager of managers.values()) {\n const sources = yield* manager.list();\n all.push(...sources);\n }\n return all;\n }),\n\n remove: (sourceId: string) =>\n Effect.gen(function* () {\n const runtimeSource = runtimeSources.get(sourceId);\n if (runtimeSource) {\n if (runtimeSource.canRemove) {\n runtimeSources.delete(sourceId);\n }\n return;\n }\n\n for (const manager of managers.values()) {\n const sources = yield* manager.list();\n if (sources.some((s) => s.id === sourceId)) {\n yield* manager.remove(sourceId);\n return;\n }\n }\n }),\n\n refresh: (sourceId: string) =>\n Effect.gen(function* () {\n const runtimeSource = runtimeSources.get(sourceId);\n if (runtimeSource) {\n return;\n }\n\n for (const manager of managers.values()) {\n const sources = yield* manager.list();\n if (sources.some((s) => s.id === sourceId)) {\n if (manager.refresh) {\n yield* manager.refresh(sourceId);\n }\n return;\n }\n }\n }),\n\n detect: (url: string) =>\n Effect.gen(function* () {\n const detectors = [...managers.values()]\n .filter((m) => m.detect)\n .map((m) =>\n m.detect!(url).pipe(\n Effect.timeout(\"5 seconds\"),\n Effect.catchAll(() => Effect.succeed(null)),\n ),\n );\n\n const results = yield* Effect.all(detectors, { concurrency: \"unbounded\" });\n return results\n .filter((r): r is SourceDetectionResult => r !== null)\n .sort((a, b) => {\n const order = { high: 0, medium: 1, low: 2 };\n return order[a.confidence] - order[b.confidence];\n });\n }),\n };\n};\n","import { Effect, Schema } from \"effect\";\n\nimport { ToolId } from \"./ids\";\n\n// ---------------------------------------------------------------------------\n// Elicitation request — what a tool sends when it needs user input\n// ---------------------------------------------------------------------------\n\n/** Tool needs structured input from the user (render a form) */\nexport class FormElicitation extends Schema.TaggedClass<FormElicitation>()(\"FormElicitation\", {\n message: Schema.String,\n /** JSON Schema describing the fields to collect */\n requestedSchema: Schema.Record({ key: Schema.String, value: Schema.Unknown }),\n}) {}\n\n/** Tool needs the user to visit a URL (OAuth, approval page, etc.) */\nexport class UrlElicitation extends Schema.TaggedClass<UrlElicitation>()(\"UrlElicitation\", {\n message: Schema.String,\n url: Schema.String,\n /** Unique ID so the host can correlate the callback */\n elicitationId: Schema.String,\n}) {}\n\nexport type ElicitationRequest = FormElicitation | UrlElicitation;\n\n// ---------------------------------------------------------------------------\n// Elicitation response — what the host sends back\n// ---------------------------------------------------------------------------\n\nexport const ElicitationAction = Schema.Literal(\"accept\", \"decline\", \"cancel\");\nexport type ElicitationAction = typeof ElicitationAction.Type;\n\nexport class ElicitationResponse extends Schema.Class<ElicitationResponse>(\"ElicitationResponse\")({\n action: ElicitationAction,\n /** Present when action is \"accept\" — the data the user provided */\n content: Schema.optional(Schema.Record({ key: Schema.String, value: Schema.Unknown })),\n}) {}\n\n// ---------------------------------------------------------------------------\n// Elicitation handler — the host provides this to handle requests\n// ---------------------------------------------------------------------------\n\nexport interface ElicitationContext {\n readonly toolId: ToolId;\n readonly args: unknown;\n readonly request: ElicitationRequest;\n}\n\n/**\n * A function the host provides to handle elicitation.\n * The SDK calls this when a tool suspends to ask for user input.\n * The host renders UI / prompts the user / does OAuth / etc.\n */\nexport type ElicitationHandler = (ctx: ElicitationContext) => Effect.Effect<ElicitationResponse>;\n\n// ---------------------------------------------------------------------------\n// Elicitation error — tool was declined or cancelled\n// ---------------------------------------------------------------------------\n\nexport class ElicitationDeclinedError extends Schema.TaggedError<ElicitationDeclinedError>()(\n \"ElicitationDeclinedError\",\n {\n toolId: ToolId,\n action: Schema.Literal(\"decline\", \"cancel\"),\n },\n) {}\n","import { Context, Effect, Schema } from \"effect\";\n\nimport { SecretId, ScopeId } from \"./ids\";\nimport { SecretNotFoundError, SecretResolutionError } from \"./errors\";\n\n// ---------------------------------------------------------------------------\n// SecretProvider — adapter interface for secret backends\n// ---------------------------------------------------------------------------\n\nexport interface SecretProvider {\n /** Unique key (e.g. \"keychain\", \"env\", \"1password\", \"memory\") */\n readonly key: string;\n /** Whether this provider supports writing */\n readonly writable: boolean;\n /** Get a secret value by key. Returns null if not found. */\n readonly get: (key: string) => Effect.Effect<string | null>;\n /** Set a secret value. Only called on writable providers. */\n readonly set?: (key: string, value: string) => Effect.Effect<void>;\n /** Delete a secret. Only called on writable providers. */\n readonly delete?: (key: string) => Effect.Effect<boolean>;\n /** List known secret entries. Optional — not all providers can enumerate. */\n readonly list?: () => Effect.Effect<readonly { id: string; name: string }[]>;\n}\n\n// ---------------------------------------------------------------------------\n// SecretRef — what gets stored (not the value itself)\n// ---------------------------------------------------------------------------\n\nexport class SecretRef extends Schema.Class<SecretRef>(\"SecretRef\")({\n id: SecretId,\n scopeId: ScopeId,\n /** Human-readable label (e.g. \"Cloudflare API Token\") */\n name: Schema.String,\n /** Optional: pin to a specific provider */\n provider: Schema.optionalWith(Schema.String, { as: \"Option\" }),\n /** What this secret is for */\n purpose: Schema.optional(Schema.String),\n createdAt: Schema.DateFromNumber,\n}) {}\n\n// ---------------------------------------------------------------------------\n// SetSecretInput — SecretRef fields minus createdAt, plus value\n// ---------------------------------------------------------------------------\n\nexport class SetSecretInput extends Schema.Class<SetSecretInput>(\"SetSecretInput\")({\n id: SecretId,\n scopeId: ScopeId,\n name: Schema.String,\n value: Schema.String,\n provider: Schema.optional(Schema.String),\n purpose: Schema.optional(Schema.String),\n}) {}\n\n// ---------------------------------------------------------------------------\n// SecretStore — manages refs + delegates resolution to providers\n// ---------------------------------------------------------------------------\n\nexport class SecretStore extends Context.Tag(\"@executor/sdk/SecretStore\")<\n SecretStore,\n {\n /** List all secret refs for a scope */\n readonly list: (scopeId: ScopeId) => Effect.Effect<readonly SecretRef[]>;\n\n /** Get a specific secret ref by id */\n readonly get: (secretId: SecretId) => Effect.Effect<SecretRef, SecretNotFoundError>;\n\n /**\n * Resolve a secret value by id.\n * Walks the provider chain (and optionally scope chain) to find the value.\n */\n readonly resolve: (\n secretId: SecretId,\n scopeId: ScopeId,\n ) => Effect.Effect<string, SecretNotFoundError | SecretResolutionError>;\n\n /**\n * Check if a secret can be resolved.\n */\n readonly status: (\n secretId: SecretId,\n scopeId: ScopeId,\n ) => Effect.Effect<\"resolved\" | \"missing\">;\n\n /**\n * Store a secret value. Creates a ref and writes the value to the\n * preferred writable provider.\n */\n readonly set: (input: SetSecretInput) => Effect.Effect<SecretRef, SecretResolutionError>;\n\n /** Remove a secret ref and its value from the provider */\n readonly remove: (secretId: SecretId) => Effect.Effect<boolean, SecretNotFoundError>;\n\n // ----- Provider management -----\n\n /** Register a secret provider */\n readonly addProvider: (provider: SecretProvider) => Effect.Effect<void>;\n\n /** List registered provider keys */\n readonly providers: () => Effect.Effect<readonly string[]>;\n }\n>() {}\n","import { Context, Effect, Schema } from \"effect\";\n\nimport { PolicyId, ScopeId, ToolId } from \"./ids\";\nimport { PolicyDeniedError } from \"./errors\";\n\nexport const PolicyAction = Schema.Literal(\"allow\", \"deny\", \"require_approval\");\nexport type PolicyAction = typeof PolicyAction.Type;\n\nexport class Policy extends Schema.Class<Policy>(\"Policy\")({\n id: PolicyId,\n scopeId: ScopeId,\n name: Schema.String,\n action: PolicyAction,\n match: Schema.Struct({\n toolPattern: Schema.optional(Schema.String),\n sourceId: Schema.optional(Schema.String),\n }),\n priority: Schema.Number,\n createdAt: Schema.DateFromNumber,\n}) {}\n\nexport class PolicyCheckInput extends Schema.Class<PolicyCheckInput>(\"PolicyCheckInput\")({\n scopeId: ScopeId,\n toolId: ToolId,\n}) {}\n\nexport class PolicyEngine extends Context.Tag(\"@executor/sdk/PolicyEngine\")<\n PolicyEngine,\n {\n readonly list: (scopeId: ScopeId) => Effect.Effect<readonly Policy[]>;\n readonly check: (input: PolicyCheckInput) => Effect.Effect<void, PolicyDeniedError>;\n readonly add: (policy: Omit<Policy, \"id\" | \"createdAt\">) => Effect.Effect<Policy>;\n readonly remove: (policyId: PolicyId) => Effect.Effect<boolean>;\n }\n>() {}\n","import { Schema } from \"effect\";\n\nimport { ScopeId } from \"./ids\";\n\nexport class Scope extends Schema.Class<Scope>(\"Scope\")({\n id: ScopeId,\n name: Schema.String,\n createdAt: Schema.DateFromNumber,\n}) {}\n","import type { Effect } from \"effect\";\n\nimport type { ToolRegistry } from \"./tools\";\nimport type { SecretStore } from \"./secrets\";\nimport type { PolicyEngine } from \"./policies\";\nimport type { SourceRegistry } from \"./sources\";\nimport type { Scope } from \"./scope\";\n\n// ---------------------------------------------------------------------------\n// Plugin context — what the SDK gives a plugin when it starts\n// ---------------------------------------------------------------------------\n\nexport interface PluginContext {\n readonly scope: Scope;\n readonly tools: Context.Tag.Service<typeof ToolRegistry>;\n readonly sources: Context.Tag.Service<typeof SourceRegistry>;\n readonly secrets: Context.Tag.Service<typeof SecretStore>;\n readonly policies: Context.Tag.Service<typeof PolicyEngine>;\n}\n\n// ---------------------------------------------------------------------------\n// Plugin definition — what a plugin provides to the SDK\n// ---------------------------------------------------------------------------\n\nexport interface ExecutorPlugin<TKey extends string = string, TExtension extends object = object> {\n /** Unique plugin key — becomes a property on the Executor type */\n readonly key: TKey;\n\n /**\n * Called when the executor starts. The plugin should register its tools\n * and return any cleanup logic + its public extension API.\n */\n readonly init: (ctx: PluginContext) => Effect.Effect<PluginHandle<TExtension>, Error>;\n}\n\nexport interface PluginHandle<TExtension extends object = object> {\n /** Plugin's public API — exposed on the executor as `executor[plugin.key]` */\n readonly extension: TExtension;\n /** Called when the executor shuts down */\n readonly close?: () => Effect.Effect<void>;\n}\n\n// ---------------------------------------------------------------------------\n// Type-level helpers — expand the Executor type based on plugins\n// ---------------------------------------------------------------------------\n\n/** Maps a tuple of plugins to their extensions keyed by plugin key */\nexport type PluginExtensions<TPlugins extends readonly ExecutorPlugin<string, object>[]> = {\n readonly [P in TPlugins[number] as P[\"key\"]]: P extends ExecutorPlugin<string, infer TExt>\n ? TExt\n : never;\n};\n\n// We need Context imported for the Tag.Service usage\nimport type { Context } from \"effect\";\n\n// ---------------------------------------------------------------------------\n// definePlugin — helper for type inference\n// ---------------------------------------------------------------------------\n\nexport const definePlugin = <const TKey extends string, TExtension extends object>(\n plugin: ExecutorPlugin<TKey, TExtension>,\n): ExecutorPlugin<TKey, TExtension> => plugin;\n","import { Context, Effect } from \"effect\";\n\nimport type { ToolId, SecretId, PolicyId } from \"./ids\";\nimport type { SecretProvider, SecretRef, SecretStore, SetSecretInput } from \"./secrets\";\nimport type {\n ToolMetadata,\n ToolSchema,\n ToolInvocationResult,\n ToolRegistry,\n ToolListFilter,\n InvokeOptions,\n} from \"./tools\";\nimport type { Source, SourceDetectionResult, SourceRegistry } from \"./sources\";\nimport type { Policy, PolicyEngine } from \"./policies\";\nimport type { Scope } from \"./scope\";\nimport type { ExecutorPlugin, PluginExtensions, PluginHandle } from \"./plugin\";\nimport type {\n ToolNotFoundError,\n ToolInvocationError,\n SecretNotFoundError,\n SecretResolutionError,\n PolicyDeniedError,\n} from \"./errors\";\nimport {\n FormElicitation,\n ElicitationDeclinedError,\n ElicitationResponse,\n type ElicitationHandler,\n} from \"./elicitation\";\n\nconst resolveElicitationHandler = (options: InvokeOptions): ElicitationHandler =>\n options.onElicitation === \"accept-all\"\n ? () => Effect.succeed(new ElicitationResponse({ action: \"accept\" }))\n : options.onElicitation;\n\n// ---------------------------------------------------------------------------\n// Executor — the main public API, expands with plugins\n// ---------------------------------------------------------------------------\n\nexport type Executor<TPlugins extends readonly ExecutorPlugin<string, object>[] = []> = {\n readonly scope: Scope;\n\n readonly tools: {\n readonly list: (filter?: ToolListFilter) => Effect.Effect<readonly ToolMetadata[]>;\n readonly schema: (toolId: string) => Effect.Effect<ToolSchema, ToolNotFoundError>;\n /** Shared schema definitions across all tools */\n readonly definitions: () => Effect.Effect<Record<string, unknown>>;\n readonly invoke: (\n toolId: string,\n args: unknown,\n options: InvokeOptions,\n ) => Effect.Effect<\n ToolInvocationResult,\n ToolNotFoundError | ToolInvocationError | PolicyDeniedError | ElicitationDeclinedError\n >;\n };\n\n readonly sources: {\n readonly list: () => Effect.Effect<readonly Source[]>;\n readonly remove: (sourceId: string) => Effect.Effect<void>;\n readonly refresh: (sourceId: string) => Effect.Effect<void>;\n readonly detect: (url: string) => Effect.Effect<readonly SourceDetectionResult[]>;\n };\n\n readonly policies: {\n readonly list: () => Effect.Effect<readonly Policy[]>;\n readonly add: (policy: Omit<Policy, \"id\" | \"createdAt\">) => Effect.Effect<Policy>;\n readonly remove: (policyId: string) => Effect.Effect<boolean>;\n };\n\n readonly secrets: {\n readonly list: () => Effect.Effect<readonly SecretRef[]>;\n /** Resolve a secret value by id */\n readonly resolve: (\n secretId: SecretId,\n ) => Effect.Effect<string, SecretNotFoundError | SecretResolutionError>;\n /** Check if a secret can be resolved */\n readonly status: (secretId: SecretId) => Effect.Effect<\"resolved\" | \"missing\">;\n /** Store a secret value (creates ref + writes to provider) */\n readonly set: (\n input: Omit<SetSecretInput, \"scopeId\">,\n ) => Effect.Effect<SecretRef, SecretResolutionError>;\n readonly remove: (secretId: SecretId) => Effect.Effect<boolean, SecretNotFoundError>;\n /** Register a secret provider */\n readonly addProvider: (provider: SecretProvider) => Effect.Effect<void>;\n /** List registered provider keys */\n readonly providers: () => Effect.Effect<readonly string[]>;\n };\n\n readonly close: () => Effect.Effect<void>;\n} & PluginExtensions<TPlugins>;\n\n// ---------------------------------------------------------------------------\n// Resolved services — what we need to build an Executor\n// ---------------------------------------------------------------------------\n\nexport type ToolRegistryService = Context.Tag.Service<typeof ToolRegistry>;\nexport type SourceRegistryService = Context.Tag.Service<typeof SourceRegistry>;\nexport type SecretStoreService = Context.Tag.Service<typeof SecretStore>;\nexport type PolicyEngineService = Context.Tag.Service<typeof PolicyEngine>;\n\nexport interface ExecutorConfig<TPlugins extends readonly ExecutorPlugin<string, object>[] = []> {\n readonly scope: Scope;\n readonly tools: ToolRegistryService;\n readonly sources: SourceRegistryService;\n readonly secrets: SecretStoreService;\n readonly policies: PolicyEngineService;\n readonly plugins?: TPlugins;\n}\n\n// ---------------------------------------------------------------------------\n// createExecutor — builds an Executor, initializes plugins\n// ---------------------------------------------------------------------------\n\nexport const createExecutor = <\n const TPlugins extends readonly ExecutorPlugin<string, object>[] = [],\n>(\n config: ExecutorConfig<TPlugins>,\n): Effect.Effect<Executor<TPlugins>, Error> =>\n Effect.gen(function* () {\n const { scope, tools, sources, secrets, policies, plugins = [] } = config;\n\n // Initialize all plugins\n const handles = new Map<string, PluginHandle<object>>();\n const extensions: Record<string, object> = {};\n\n for (const plugin of plugins) {\n const handle = yield* plugin.init({\n scope,\n tools,\n sources,\n secrets,\n policies,\n });\n handles.set(plugin.key, handle);\n extensions[plugin.key] = handle.extension;\n }\n\n const base = {\n scope,\n\n tools: {\n list: (filter?: ToolListFilter) => tools.list(filter),\n schema: (toolId: string) => tools.schema(toolId as ToolId),\n definitions: () => tools.definitions(),\n invoke: (toolId: string, args: unknown, options: InvokeOptions) => {\n const tid = toolId as ToolId;\n return Effect.gen(function* () {\n yield* policies.check({ scopeId: scope.id, toolId: tid });\n\n // Dynamically resolve annotations from the plugin\n const annotations = yield* tools.resolveAnnotations(tid);\n if (annotations?.requiresApproval) {\n const handler = resolveElicitationHandler(options);\n const response = yield* handler({\n toolId: tid,\n args,\n request: new FormElicitation({\n message: annotations.approvalDescription ?? `Approve ${toolId}?`,\n requestedSchema: {},\n }),\n });\n if (response.action !== \"accept\") {\n return yield* new ElicitationDeclinedError({\n toolId: tid,\n action: response.action,\n });\n }\n }\n\n return yield* tools.invoke(tid, args, options);\n });\n },\n },\n\n sources: {\n list: () => sources.list(),\n remove: (sourceId: string) => sources.remove(sourceId),\n refresh: (sourceId: string) => sources.refresh(sourceId),\n detect: (url: string) => sources.detect(url),\n },\n\n policies: {\n list: () => policies.list(scope.id),\n add: (policy: Omit<Policy, \"id\" | \"createdAt\">) =>\n policies.add({ ...policy, scopeId: scope.id }),\n remove: (policyId: string) => policies.remove(policyId as PolicyId),\n },\n\n secrets: {\n list: () => secrets.list(scope.id),\n resolve: (secretId: SecretId) => secrets.resolve(secretId, scope.id),\n status: (secretId: SecretId) => secrets.status(secretId, scope.id),\n set: (input: Omit<SetSecretInput, \"scopeId\">) =>\n secrets.set({ ...input, scopeId: scope.id }),\n remove: (secretId: SecretId) => secrets.remove(secretId),\n addProvider: (provider: SecretProvider) => secrets.addProvider(provider),\n providers: () => secrets.providers(),\n },\n\n close: () =>\n Effect.gen(function* () {\n for (const handle of handles.values()) {\n if (handle.close) yield* handle.close();\n }\n }),\n };\n\n return Object.assign(base, extensions) as Executor<TPlugins>;\n });\n","import { Effect, JSONSchema, Schema } from \"effect\";\n\nimport type { SecretId } from \"../ids\";\nimport { ToolId } from \"../ids\";\nimport { ToolInvocationError } from \"../errors\";\nimport type { SecretRef } from \"../secrets\";\nimport {\n ToolInvocationResult,\n type ToolRegistration,\n type ToolInvoker,\n type InvokeOptions,\n} from \"../tools\";\nimport {\n ElicitationDeclinedError,\n ElicitationResponse,\n type ElicitationHandler,\n type ElicitationRequest,\n} from \"../elicitation\";\nimport { definePlugin, type PluginContext } from \"../plugin\";\nimport { hoistDefinitions } from \"../schema-refs\";\n\n// ---------------------------------------------------------------------------\n// In-memory tool definition — typed via Schema\n// ---------------------------------------------------------------------------\n\nexport interface MemoryToolDefinition<TInput = unknown, TOutput = unknown> {\n readonly name: string;\n readonly description?: string;\n readonly inputSchema: Schema.Schema<TInput>;\n readonly outputSchema?: Schema.Schema<TOutput>;\n readonly handler: MemoryToolHandler<TInput>;\n}\n\nexport type MemoryToolHandler<TInput> =\n | ((args: TInput) => unknown)\n | ((args: TInput, ctx: MemoryToolContext) => Effect.Effect<unknown, unknown>);\n\nexport interface MemoryToolContext {\n /** Request input from the user. Returns user data or fails if declined. */\n readonly elicit: (\n request: ElicitationRequest,\n ) => Effect.Effect<Record<string, unknown>, ElicitationDeclinedError>;\n\n /** Access to the SDK services */\n readonly sdk: MemoryToolSdkAccess;\n}\n\n/** SDK services available to in-memory tool handlers */\nexport interface MemoryToolSdkAccess {\n readonly secrets: {\n readonly list: () => Effect.Effect<readonly SecretRef[]>;\n readonly resolve: (secretId: SecretId) => Effect.Effect<string, unknown>;\n readonly status: (secretId: SecretId) => Effect.Effect<\"resolved\" | \"missing\">;\n readonly set: (input: {\n readonly id: SecretId;\n readonly name: string;\n readonly value: string;\n readonly purpose?: string;\n }) => Effect.Effect<SecretRef, unknown>;\n readonly remove: (secretId: SecretId) => Effect.Effect<boolean, unknown>;\n };\n}\n\n// ---------------------------------------------------------------------------\n// Plugin extension\n// ---------------------------------------------------------------------------\n\nexport interface InMemoryToolsPluginExtension {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n readonly addTools: (tools: readonly MemoryToolDefinition<any, any>[]) => Effect.Effect<void>;\n}\n\n// ---------------------------------------------------------------------------\n// Internal handler entry\n// ---------------------------------------------------------------------------\n\ninterface HandlerEntry {\n readonly decode: (args: unknown) => unknown;\n readonly handler: MemoryToolHandler<unknown>;\n readonly isEffect: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Registration builder — returns pure data + handler entry\n// ---------------------------------------------------------------------------\n\nconst buildRegistration = (\n namespace: string,\n def: MemoryToolDefinition,\n): {\n registration: ToolRegistration;\n entry: HandlerEntry;\n definitions: Record<string, unknown>;\n} => {\n const id = ToolId.make(`${namespace}.${def.name}`);\n const decode = Schema.decodeUnknownSync(def.inputSchema);\n const isEffect = def.handler.length >= 2;\n\n const inputJson = JSONSchema.make(def.inputSchema);\n const outputJson = def.outputSchema ? JSONSchema.make(def.outputSchema) : undefined;\n\n const inputHoist = hoistDefinitions(inputJson);\n const outputHoist = hoistDefinitions(outputJson);\n\n const allDefs: Record<string, unknown> = {\n ...inputHoist.defs,\n ...outputHoist.defs,\n };\n\n const registration: ToolRegistration = {\n id,\n pluginKey: \"inMemoryTools\",\n sourceId: namespace,\n name: def.name,\n description: def.description,\n inputSchema: inputHoist.stripped,\n outputSchema: outputHoist.stripped,\n mayElicit: isEffect,\n };\n\n const entry: HandlerEntry = {\n decode,\n handler: def.handler as MemoryToolHandler<unknown>,\n isEffect,\n };\n\n return { registration, entry, definitions: allDefs };\n};\n\n// ---------------------------------------------------------------------------\n// Invoker — single function that handles all in-memory tools\n// ---------------------------------------------------------------------------\n\nconst makeInvoker = (\n handlers: Map<string, HandlerEntry>,\n pluginCtx: PluginContext,\n): ToolInvoker => ({\n invoke: (toolId: ToolId, args: unknown, options?: InvokeOptions) => {\n const entry = handlers.get(toolId);\n if (!entry) {\n return Effect.fail(\n new ToolInvocationError({\n toolId,\n message: `No handler registered for tool \"${toolId}\"`,\n cause: undefined,\n }),\n );\n }\n\n const parsed = Effect.try({\n try: () => entry.decode(args),\n catch: (err) =>\n new ToolInvocationError({\n toolId,\n message: `Invalid input: ${err instanceof Error ? err.message : String(err)}`,\n cause: err,\n }),\n });\n\n if (!entry.isEffect) {\n return parsed.pipe(\n Effect.flatMap((input) =>\n Effect.try({\n try: () =>\n new ToolInvocationResult({\n data: (entry.handler as (args: unknown) => unknown)(input),\n error: null,\n }),\n catch: (err) =>\n new ToolInvocationError({\n toolId,\n message: err instanceof Error ? err.message : String(err),\n cause: err,\n }),\n }),\n ),\n );\n }\n\n // Effect handler — build context with elicit + sdk access\n const ctx: MemoryToolContext = {\n sdk: {\n secrets: {\n list: () => pluginCtx.secrets.list(pluginCtx.scope.id),\n resolve: (secretId) => pluginCtx.secrets.resolve(secretId, pluginCtx.scope.id),\n status: (secretId) => pluginCtx.secrets.status(secretId, pluginCtx.scope.id),\n set: (input) =>\n pluginCtx.secrets.set({\n ...input,\n scopeId: pluginCtx.scope.id,\n }),\n remove: (secretId) => pluginCtx.secrets.remove(secretId),\n },\n },\n elicit: (request) =>\n Effect.gen(function* () {\n const raw = options?.onElicitation;\n if (!raw) {\n return yield* new ElicitationDeclinedError({\n toolId,\n action: \"decline\",\n });\n }\n const handler: ElicitationHandler =\n raw === \"accept-all\"\n ? () => Effect.succeed(new ElicitationResponse({ action: \"accept\" }))\n : raw;\n const response = yield* handler({\n toolId,\n args,\n request,\n });\n if (response.action !== \"accept\") {\n return yield* new ElicitationDeclinedError({\n toolId,\n action: response.action as \"decline\" | \"cancel\",\n });\n }\n return response.content ?? {};\n }),\n };\n\n const effectHandler = entry.handler as (\n args: unknown,\n ctx: MemoryToolContext,\n ) => Effect.Effect<unknown, unknown>;\n\n return parsed.pipe(\n Effect.flatMap((input) => effectHandler(input, ctx)),\n Effect.map((data) => new ToolInvocationResult({ data, error: null })),\n Effect.catchAll(\n (\n err,\n ): Effect.Effect<ToolInvocationResult, ToolInvocationError | ElicitationDeclinedError> => {\n if (\n err != null &&\n typeof err === \"object\" &&\n \"_tag\" in err &&\n (err as { _tag: string })._tag === \"ElicitationDeclinedError\"\n ) {\n return Effect.fail(err as ElicitationDeclinedError);\n }\n return Effect.fail(\n new ToolInvocationError({\n toolId,\n message: err instanceof Error ? err.message : String(err),\n cause: err,\n }),\n );\n },\n ),\n );\n },\n});\n\n// ---------------------------------------------------------------------------\n// Tool definition helper — infers TInput from the schema\n// ---------------------------------------------------------------------------\n\nexport function tool<TInput, TOutput>(\n def: MemoryToolDefinition<TInput, TOutput>,\n): MemoryToolDefinition<TInput, TOutput> {\n return def;\n}\n\n// ---------------------------------------------------------------------------\n// Plugin factory\n// ---------------------------------------------------------------------------\n\nexport const inMemoryToolsPlugin = (config: {\n readonly namespace?: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Schema.Schema is invariant; `any` required to accept arbitrary MemoryToolDefinition types\n readonly tools: readonly MemoryToolDefinition<any, any>[];\n}) => {\n const ns = config.namespace ?? \"memory\";\n return definePlugin<\"inMemoryTools\", InMemoryToolsPluginExtension>({\n key: \"inMemoryTools\",\n init: (ctx: PluginContext) =>\n Effect.gen(function* () {\n // Shared handler map for all tools in this plugin\n const handlers = new Map<string, HandlerEntry>();\n const invoker = makeInvoker(handlers, ctx);\n\n // Register the invoker once\n yield* ctx.tools.registerInvoker(\"inMemoryTools\", invoker);\n\n // Build registrations + handler entries\n const results = config.tools.map((t) => buildRegistration(ns, t));\n\n // Register all definitions first\n const allDefs: Record<string, unknown> = {};\n for (const { definitions } of results) {\n Object.assign(allDefs, definitions);\n }\n yield* ctx.tools.registerDefinitions(allDefs);\n\n // Store handler entries + register tool data\n for (const { registration, entry } of results) {\n handlers.set(registration.id, entry);\n }\n const registrations = results.map(({ registration }) => registration);\n yield* ctx.tools.register(registrations);\n\n return {\n extension: {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Schema.Schema is invariant; `any` required to accept arbitrary MemoryToolDefinition types\n addTools: (newTools: readonly MemoryToolDefinition<any, any>[]) =>\n Effect.gen(function* () {\n const newResults = newTools.map((t) => buildRegistration(ns, t));\n\n const newDefs: Record<string, unknown> = {};\n for (const { definitions } of newResults) {\n Object.assign(newDefs, definitions);\n }\n yield* ctx.tools.registerDefinitions(newDefs);\n\n for (const { registration, entry } of newResults) {\n handlers.set(registration.id, entry);\n }\n const newRegistrations = newResults.map(({ registration }) => registration);\n yield* ctx.tools.register(newRegistrations);\n }),\n },\n close: () =>\n Effect.gen(function* () {\n yield* ctx.tools.unregister(registrations.map((r) => r.id));\n for (const { registration } of results) {\n handlers.delete(registration.id);\n }\n }),\n };\n }),\n });\n};\n","// ---------------------------------------------------------------------------\n// JSON Schema $ref hoisting and re-attachment\n//\n// Core logic for deduplicating shared definitions across tools.\n// Used by any ToolRegistry implementation (in-memory, database-backed, etc.)\n//\n// Only handles standard JSON Schema formats ($defs, definitions).\n// Plugin-specific formats (e.g. OpenAPI components/schemas) must be\n// normalized by the plugin before calling registerDefinitions/register.\n// ---------------------------------------------------------------------------\n\ntype Obj = Record<string, unknown>;\n\n/** Standard JSON Schema $ref patterns. */\nconst REF_PATTERN = /^#\\/(?:\\$defs|definitions)\\/(.+)$/;\n\n/** Extract the definition name from a standard $ref pointer. */\nconst parseRefName = (ref: string): string | undefined => ref.match(REF_PATTERN)?.[1];\n\n/**\n * Recursively rewrite `#/definitions/<name>` pointers to `#/$defs/<name>`.\n * Returns the input unchanged if no rewrites are needed.\n */\nexport const normalizeRefs = (node: unknown): unknown => {\n if (node == null || typeof node !== \"object\") return node;\n if (Array.isArray(node)) {\n let changed = false;\n const out = node.map((item) => {\n const n = normalizeRefs(item);\n if (n !== item) changed = true;\n return n;\n });\n return changed ? out : node;\n }\n\n const obj = node as Obj;\n\n if (typeof obj.$ref === \"string\") {\n const name = parseRefName(obj.$ref);\n if (name) {\n const canonical = `#/$defs/${name}`;\n return canonical !== obj.$ref ? { ...obj, $ref: canonical } : obj;\n }\n return obj;\n }\n\n let changed = false;\n const result: Obj = {};\n for (const [k, v] of Object.entries(obj)) {\n const n = normalizeRefs(v);\n if (n !== v) changed = true;\n result[k] = n;\n }\n return changed ? result : obj;\n};\n\n/**\n * Extract `$defs` and `definitions` from a JSON Schema,\n * returning { stripped, defs } where `stripped` is the schema without local\n * definitions and `defs` is a flat map of definition name → schema.\n */\nexport const hoistDefinitions = (\n schema: unknown,\n): { stripped: unknown; defs: Record<string, unknown> } => {\n if (schema == null || typeof schema !== \"object\") {\n return { stripped: schema, defs: {} };\n }\n const obj = schema as Obj;\n const defs: Record<string, unknown> = {};\n\n if (obj.$defs && typeof obj.$defs === \"object\") {\n for (const [k, v] of Object.entries(obj.$defs as Obj)) {\n defs[k] = v;\n }\n }\n\n if (obj.definitions && typeof obj.definitions === \"object\") {\n for (const [k, v] of Object.entries(obj.definitions as Obj)) {\n defs[k] = v;\n }\n }\n\n const { $defs: _a, definitions: _b, ...rest } = obj;\n return { stripped: rest, defs };\n};\n\n/**\n * Walk a schema and collect all $ref target names transitively.\n * e.g. \"#/$defs/Address\" → \"Address\", and if Address references City, both.\n */\nexport const collectRefs = (\n node: unknown,\n defs: ReadonlyMap<string, unknown>,\n found: Set<string> = new Set(),\n): Set<string> => {\n if (node == null || typeof node !== \"object\") return found;\n const obj = node as Obj;\n\n if (typeof obj.$ref === \"string\") {\n const name = parseRefName(obj.$ref);\n if (name && !found.has(name)) {\n found.add(name);\n const def = defs.get(name);\n if (def) collectRefs(def, defs, found);\n }\n return found;\n }\n\n for (const v of Object.values(obj)) {\n if (v && typeof v === \"object\") {\n if (Array.isArray(v)) {\n for (const item of v) collectRefs(item, defs, found);\n } else {\n collectRefs(v, defs, found);\n }\n }\n }\n return found;\n};\n\n/**\n * Re-attach only the referenced shared definitions into a schema,\n * so the caller gets a self-contained, usable JSON Schema.\n *\n * Assumes all `$ref` pointers and definitions have already been normalized\n * to `#/$defs/<name>` form at registration time.\n */\nexport const reattachDefs = (schema: unknown, defs: ReadonlyMap<string, unknown>): unknown => {\n if (schema == null || typeof schema !== \"object\") return schema;\n const refs = collectRefs(schema, defs);\n if (refs.size === 0) return schema;\n\n const attached: Record<string, unknown> = {};\n for (const name of refs) {\n const def = defs.get(name);\n if (def) attached[name] = def;\n }\n\n return { ...(schema as Record<string, unknown>), $defs: attached };\n};\n","type JsonSchemaRecord = Record<string, unknown>;\n\nexport type TypeScriptRenderOptions = {\n maxLength?: number;\n maxDepth?: number;\n maxProperties?: number;\n maxRefDepth?: number;\n maxCompositeMembers?: number;\n};\n\nexport type TypeScriptSchemaPreview = {\n readonly type: string;\n readonly definitions: Record<string, string>;\n};\n\nconst VALID_IDENTIFIER_PATTERN = /^[A-Za-z_$][A-Za-z0-9_$]*$/;\nconst REF_PATTERN = /^#\\/(?:\\$defs|definitions)\\/(.+)$/;\n\nconst asRecord = (value: unknown): JsonSchemaRecord =>\n typeof value === \"object\" && value !== null && !Array.isArray(value)\n ? (value as JsonSchemaRecord)\n : {};\n\nconst asStringArray = (value: unknown): Array<string> =>\n Array.isArray(value) ? value.filter((item): item is string => typeof item === \"string\") : [];\n\nconst truncate = (value: string, maxLength: number): string =>\n value.length <= maxLength ? value : `${value.slice(0, Math.max(0, maxLength - 4))} ...`;\n\nconst formatPropertyKey = (value: string): string =>\n VALID_IDENTIFIER_PATTERN.test(value) ? value : JSON.stringify(value);\n\nconst refNameFromPointer = (ref: string): string | undefined => ref.match(REF_PATTERN)?.[1];\n\nconst refFallbackLabel = (ref: string): string =>\n refNameFromPointer(ref) ?? ref.split(\"/\").at(-1) ?? ref;\n\nconst summarizeLargeComposite = (\n schema: JsonSchemaRecord,\n maxCompositeMembers: number,\n): { kind: \"oneOf\" | \"anyOf\"; count: number } | null => {\n for (const kind of [\"oneOf\", \"anyOf\"] as const) {\n const items = schema[kind];\n if (Array.isArray(items) && items.length > maxCompositeMembers) {\n return { kind, count: items.length };\n }\n }\n\n return null;\n};\n\nconst primitiveTypeName = (value: string): string => {\n switch (value) {\n case \"integer\":\n case \"number\":\n return \"number\";\n case \"string\":\n case \"boolean\":\n case \"null\":\n return value;\n case \"array\":\n return \"unknown[]\";\n case \"object\":\n return \"Record<string, unknown>\";\n default:\n return \"unknown\";\n }\n};\n\nconst renderComposite = (input: {\n key: \"oneOf\" | \"anyOf\" | \"allOf\";\n schema: JsonSchemaRecord;\n render: (value: unknown, depthRemaining: number) => string;\n depthRemaining: number;\n}): string | null => {\n const rawItems = input.schema[input.key];\n const items: JsonSchemaRecord[] = Array.isArray(rawItems)\n ? rawItems.map((item: unknown) => asRecord(item))\n : [];\n if (items.length === 0) {\n return null;\n }\n\n const labels = items\n .map((item: JsonSchemaRecord) => input.render(item, input.depthRemaining - 1))\n .filter((label: string) => label.length > 0);\n\n if (labels.length === 0) {\n return null;\n }\n\n return labels.join(input.key === \"allOf\" ? \" & \" : \" | \");\n};\n\nconst localDefinitionsFromSchema = (schema: unknown): Map<string, unknown> => {\n const root = asRecord(schema);\n const defs = new Map<string, unknown>();\n\n for (const [key, value] of Object.entries(asRecord(root.$defs))) {\n defs.set(key, value);\n }\n\n for (const [key, value] of Object.entries(asRecord(root.definitions))) {\n defs.set(key, value);\n }\n\n return defs;\n};\n\nexport const schemaToTypeScriptPreview = (\n schema: unknown,\n options: TypeScriptRenderOptions = {},\n): TypeScriptSchemaPreview => {\n const localDefs = localDefinitionsFromSchema(schema);\n return schemaToTypeScriptPreviewWithDefs(schema, localDefs, options);\n};\n\nexport const schemaToTypeScriptPreviewWithDefs = (\n schema: unknown,\n defs: ReadonlyMap<string, unknown>,\n options: TypeScriptRenderOptions = {},\n): TypeScriptSchemaPreview => {\n const maxLength = options.maxLength ?? 400;\n const maxDepth = options.maxDepth ?? 6;\n const maxProperties = options.maxProperties ?? 12;\n const maxRefDepth = options.maxRefDepth ?? 3;\n const maxCompositeMembers = options.maxCompositeMembers ?? 8;\n\n const render = (input: {\n currentInput: unknown;\n depthRemaining: number;\n refDepthRemaining: number;\n }): string => {\n const current = asRecord(input.currentInput);\n\n if (input.depthRemaining <= 0) {\n if (typeof current.title === \"string\" && current.title.length > 0) {\n return current.title;\n }\n\n if (current.type === \"array\") {\n return \"unknown[]\";\n }\n\n if (current.type === \"object\" || current.properties) {\n return \"Record<string, unknown>\";\n }\n\n return \"unknown\";\n }\n\n if (typeof current.$ref === \"string\") {\n const refLabel = refFallbackLabel(current.$ref);\n return input.refDepthRemaining > 0 ? refLabel : `unknown /* ${refLabel} omitted */`;\n }\n\n if (\"const\" in current) {\n return JSON.stringify(current.const);\n }\n\n const enumValues = Array.isArray(current.enum) ? current.enum : [];\n if (enumValues.length > 0) {\n return truncate(enumValues.map((value) => JSON.stringify(value)).join(\" | \"), maxLength);\n }\n\n const largeComposite = summarizeLargeComposite(current, maxCompositeMembers);\n if (largeComposite) {\n return `unknown /* ${largeComposite.count}-way ${largeComposite.kind} omitted */`;\n }\n\n const renderNested = (value: unknown): string =>\n render({\n currentInput: value,\n depthRemaining: input.depthRemaining - 1,\n refDepthRemaining: input.refDepthRemaining,\n });\n\n const composite =\n renderComposite({\n key: \"oneOf\",\n schema: current,\n render: (value) => renderNested(value),\n depthRemaining: input.depthRemaining,\n }) ??\n renderComposite({\n key: \"anyOf\",\n schema: current,\n render: (value) => renderNested(value),\n depthRemaining: input.depthRemaining,\n }) ??\n renderComposite({\n key: \"allOf\",\n schema: current,\n render: (value) => renderNested(value),\n depthRemaining: input.depthRemaining,\n });\n if (composite) {\n return truncate(composite, maxLength);\n }\n\n if (current.nullable === true) {\n const { nullable: _nullable, ...rest } = current;\n return truncate(\n `${render({\n currentInput: rest,\n depthRemaining: input.depthRemaining,\n refDepthRemaining: input.refDepthRemaining,\n })} | null`,\n maxLength,\n );\n }\n\n if (current.type === \"array\") {\n const itemLabel = current.items\n ? render({\n currentInput: current.items,\n depthRemaining: input.depthRemaining - 1,\n refDepthRemaining: input.refDepthRemaining,\n })\n : \"unknown\";\n return truncate(`${itemLabel}[]`, maxLength);\n }\n\n if (current.type === \"object\" || current.properties) {\n const properties = asRecord(current.properties);\n const propertyKeys = Object.keys(properties);\n const required = new Set(asStringArray(current.required));\n\n const additionalProperties = current.additionalProperties;\n const additionalPropertiesLabel =\n additionalProperties && typeof additionalProperties === \"object\"\n ? render({\n currentInput: additionalProperties,\n depthRemaining: input.depthRemaining - 1,\n refDepthRemaining: input.refDepthRemaining,\n })\n : additionalProperties === true\n ? \"unknown\"\n : null;\n\n if (propertyKeys.length === 0) {\n if (additionalPropertiesLabel) {\n return truncate(`Record<string, ${additionalPropertiesLabel}>`, maxLength);\n }\n\n return \"Record<string, unknown>\";\n }\n\n const visibleKeys = propertyKeys.slice(0, maxProperties);\n const parts = visibleKeys.map(\n (key) =>\n `${formatPropertyKey(key)}${required.has(key) ? \"\" : \"?\"}: ${render({\n currentInput: properties[key],\n depthRemaining: input.depthRemaining - 1,\n refDepthRemaining: input.refDepthRemaining,\n })}`,\n );\n\n if (visibleKeys.length < propertyKeys.length) {\n parts.push(\"...\");\n }\n\n if (additionalPropertiesLabel) {\n parts.push(`[key: string]: ${additionalPropertiesLabel}`);\n }\n\n return truncate(`{ ${parts.join(\"; \")} }`, maxLength);\n }\n\n if (Array.isArray(current.type)) {\n return truncate(\n current.type\n .filter((value): value is string => typeof value === \"string\")\n .map(primitiveTypeName)\n .join(\" | \"),\n maxLength,\n );\n }\n\n if (typeof current.type === \"string\") {\n return primitiveTypeName(current.type);\n }\n\n return \"unknown\";\n };\n\n const referencedDepths = new Map<string, number>();\n\n const collectPreviewRefs = (currentInput: unknown, refDepth: number): void => {\n const current = asRecord(currentInput);\n\n if (summarizeLargeComposite(current, maxCompositeMembers)) {\n return;\n }\n\n if (typeof current.$ref === \"string\") {\n const name = refNameFromPointer(current.$ref);\n if (!name) {\n return;\n }\n\n const existingDepth = referencedDepths.get(name);\n if (existingDepth !== undefined && existingDepth <= refDepth) {\n return;\n }\n\n referencedDepths.set(name, refDepth);\n\n if (refDepth >= maxRefDepth) {\n return;\n }\n\n const target = defs.get(name);\n if (target !== undefined) {\n collectPreviewRefs(target, refDepth + 1);\n }\n return;\n }\n\n for (const value of Object.values(current)) {\n if (value && typeof value === \"object\") {\n if (Array.isArray(value)) {\n for (const item of value) {\n collectPreviewRefs(item, refDepth);\n }\n } else {\n collectPreviewRefs(value, refDepth);\n }\n }\n }\n };\n\n collectPreviewRefs(schema, 1);\n\n const definitions = Object.fromEntries(\n [...referencedDepths.entries()]\n .sort(([left], [right]) => left.localeCompare(right))\n .flatMap(([name, refDepth]) => {\n const target = defs.get(name);\n if (target === undefined) {\n return [];\n }\n\n return [\n [\n name,\n render({\n currentInput: target,\n depthRemaining: maxDepth,\n refDepthRemaining: Math.max(0, maxRefDepth - refDepth),\n }),\n ],\n ] as const;\n }),\n );\n\n return {\n type: render({\n currentInput: schema,\n depthRemaining: maxDepth,\n refDepthRemaining: maxRefDepth,\n }),\n definitions,\n };\n};\n\nexport const buildToolTypeScriptPreview = (input: {\n inputSchema?: unknown;\n outputSchema?: unknown;\n defs: ReadonlyMap<string, unknown>;\n options?: TypeScriptRenderOptions;\n}): {\n inputTypeScript?: string;\n outputTypeScript?: string;\n typeScriptDefinitions?: Record<string, string>;\n} => {\n const inputPreview =\n input.inputSchema !== undefined\n ? schemaToTypeScriptPreviewWithDefs(input.inputSchema, input.defs, input.options)\n : null;\n const outputPreview =\n input.outputSchema !== undefined\n ? schemaToTypeScriptPreviewWithDefs(input.outputSchema, input.defs, input.options)\n : null;\n\n const mergedDefinitions = {\n ...inputPreview?.definitions,\n ...outputPreview?.definitions,\n };\n\n return {\n ...(inputPreview ? { inputTypeScript: inputPreview.type } : {}),\n ...(outputPreview ? { outputTypeScript: outputPreview.type } : {}),\n ...(Object.keys(mergedDefinitions).length > 0\n ? { typeScriptDefinitions: mergedDefinitions }\n : {}),\n };\n};\n","import { Effect, JSONSchema, Schema } from \"effect\";\n\nimport { ToolId } from \"./ids\";\nimport { ToolInvocationError } from \"./errors\";\nimport { Source } from \"./sources\";\nimport { ToolInvocationResult, type ToolRegistration, type RuntimeToolHandler } from \"./tools\";\nimport { hoistDefinitions } from \"./schema-refs\";\n\nexport interface RuntimeToolDefinition<TInput = unknown, TOutput = unknown> {\n readonly id: string;\n readonly sourceId?: string;\n readonly name: string;\n readonly description?: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Schema.Schema is invariant in Encoded; `any` is the only way to accept arbitrary encodings\n readonly inputSchema: Schema.Schema<TInput, any, never>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Schema.Schema is invariant in Encoded; `any` is the only way to accept arbitrary encodings\n readonly outputSchema?: Schema.Schema<TOutput, any, never>;\n readonly handler: (args: TInput) => Effect.Effect<unknown, unknown>;\n}\n\nexport interface RuntimeSourceDefinition {\n readonly id: string;\n readonly name: string;\n readonly kind?: string;\n readonly canRemove?: boolean;\n readonly canRefresh?: boolean;\n}\n\ninterface RuntimeHandlerEntry {\n readonly decode: (args: unknown) => unknown;\n readonly handler: (args: unknown) => Effect.Effect<unknown, unknown>;\n}\n\nexport const runtimeTool = <TInput, TOutput>(\n def: RuntimeToolDefinition<TInput, TOutput>,\n): RuntimeToolDefinition<TInput, TOutput> => def;\n\nconst buildRuntimeTool = (\n pluginKey: string,\n sourceId: string,\n def: RuntimeToolDefinition,\n): {\n readonly registration: ToolRegistration;\n readonly definitions: Record<string, unknown>;\n readonly entry: RuntimeHandlerEntry;\n} => {\n const inputJson = JSONSchema.make(def.inputSchema);\n const outputJson = def.outputSchema ? JSONSchema.make(def.outputSchema) : undefined;\n\n const inputHoist = hoistDefinitions(inputJson);\n const outputHoist = hoistDefinitions(outputJson);\n\n return {\n registration: {\n id: ToolId.make(def.id),\n pluginKey,\n sourceId,\n name: def.name,\n description: def.description,\n inputSchema: inputHoist.stripped,\n outputSchema: outputHoist.stripped,\n },\n definitions: {\n ...inputHoist.defs,\n ...outputHoist.defs,\n },\n entry: {\n decode: Schema.decodeUnknownSync(def.inputSchema),\n handler: def.handler as (args: unknown) => Effect.Effect<unknown, unknown>,\n },\n };\n};\n\nconst toRuntimeHandler = (toolId: ToolId, entry: RuntimeHandlerEntry): RuntimeToolHandler => ({\n invoke: (args) =>\n Effect.try({\n try: () => entry.decode(args),\n catch: (err) =>\n new ToolInvocationError({\n toolId,\n message: `Invalid input: ${err instanceof Error ? err.message : String(err)}`,\n cause: err,\n }),\n }).pipe(\n Effect.flatMap((input) => entry.handler(input)),\n Effect.map((data) => new ToolInvocationResult({ data, error: null })),\n Effect.mapError((err) =>\n err instanceof ToolInvocationError\n ? err\n : new ToolInvocationError({\n toolId,\n message: err instanceof Error ? err.message : String(err),\n cause: err,\n }),\n ),\n ),\n});\n\nexport const registerRuntimeTools = <\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- RuntimeToolDefinition requires `any` for Schema invariant Encoded param\n const TTools extends readonly RuntimeToolDefinition<any, any>[],\n>(input: {\n readonly registry: {\n readonly registerRuntimeDefinitions: (defs: Record<string, unknown>) => Effect.Effect<void>;\n readonly unregisterRuntimeDefinitions: (names: readonly string[]) => Effect.Effect<void>;\n readonly registerRuntime: (tools: readonly ToolRegistration[]) => Effect.Effect<void>;\n readonly registerRuntimeHandler: (\n toolId: ToolId,\n handler: RuntimeToolHandler,\n ) => Effect.Effect<void>;\n readonly unregisterRuntime: (toolIds: readonly ToolId[]) => Effect.Effect<void>;\n };\n readonly sources?: {\n readonly registerRuntime: (source: Source) => Effect.Effect<void>;\n readonly unregisterRuntime: (sourceId: string) => Effect.Effect<void>;\n };\n readonly pluginKey: string;\n readonly source?: RuntimeSourceDefinition;\n readonly tools: TTools;\n}) =>\n Effect.gen(function* () {\n const built = yield* Effect.forEach(input.tools, (tool) =>\n Effect.sync(() => {\n const sourceId = tool.sourceId ?? input.source?.id;\n if (!sourceId) {\n throw new Error(\n `Runtime tool \"${tool.id}\" is missing a sourceId and no shared runtime source was provided`,\n );\n }\n return buildRuntimeTool(input.pluginKey, sourceId, tool);\n }),\n );\n\n if (input.source && input.sources) {\n yield* input.sources.registerRuntime(\n new Source({\n id: input.source.id,\n name: input.source.name,\n kind: input.source.kind ?? input.pluginKey,\n runtime: true,\n canRemove: input.source.canRemove ?? false,\n canRefresh: input.source.canRefresh ?? false,\n }),\n );\n }\n\n const defs: Record<string, unknown> = {};\n for (const tool of built) {\n Object.assign(defs, tool.definitions);\n yield* input.registry.registerRuntimeHandler(\n tool.registration.id,\n toRuntimeHandler(tool.registration.id, tool.entry),\n );\n }\n\n yield* input.registry.registerRuntimeDefinitions(defs);\n yield* input.registry.registerRuntime(built.map((tool) => tool.registration));\n\n const toolIds = built.map((tool) => tool.registration.id);\n const defNames = Object.keys(defs);\n\n return {\n toolIds,\n close: () =>\n Effect.gen(function* () {\n yield* input.registry.unregisterRuntime(toolIds);\n yield* input.registry.unregisterRuntimeDefinitions(defNames);\n if (input.source && input.sources) {\n yield* input.sources.unregisterRuntime(input.source.id);\n }\n }),\n };\n });\n","import { Effect } from \"effect\";\n\nimport { ToolId } from \"../ids\";\nimport { ToolNotFoundError, ToolInvocationError } from \"../errors\";\nimport type {\n ToolRegistration,\n ToolInvoker,\n ToolListFilter,\n InvokeOptions,\n RuntimeToolHandler,\n} from \"../tools\";\nimport { normalizeRefs, reattachDefs } from \"../schema-refs\";\nimport { buildToolTypeScriptPreview } from \"../schema-types\";\n\nexport const makeInMemoryToolRegistry = () => {\n const tools = new Map<string, ToolRegistration>();\n const runtimeTools = new Map<string, ToolRegistration>();\n const runtimeHandlers = new Map<string, RuntimeToolHandler>();\n const invokers = new Map<string, ToolInvoker>();\n const sharedDefs = new Map<string, unknown>();\n const runtimeDefs = new Map<string, unknown>();\n\n const getTool = (toolId: ToolId): ToolRegistration | undefined =>\n runtimeTools.get(toolId) ?? tools.get(toolId);\n\n const getDefs = (): Map<string, unknown> => {\n const defs = new Map<string, unknown>();\n for (const [k, v] of sharedDefs) defs.set(k, v);\n for (const [k, v] of runtimeDefs) defs.set(k, v);\n return defs;\n };\n\n return {\n list: (filter?: ToolListFilter) =>\n Effect.sync(() => {\n const byId = new Map<string, ToolRegistration>();\n for (const tool of tools.values()) byId.set(tool.id, tool);\n for (const tool of runtimeTools.values()) byId.set(tool.id, tool);\n\n let result = [...byId.values()];\n if (filter?.sourceId) {\n const sid = filter.sourceId;\n result = result.filter((t) => t.sourceId === sid);\n }\n if (filter?.query) {\n const q = filter.query.toLowerCase();\n result = result.filter(\n (t) => t.name.toLowerCase().includes(q) || t.description?.toLowerCase().includes(q),\n );\n }\n return result.map((t) => ({\n id: t.id,\n pluginKey: t.pluginKey,\n sourceId: t.sourceId,\n name: t.name,\n description: t.description,\n }));\n }),\n\n schema: (toolId: ToolId) =>\n Effect.fromNullable(getTool(toolId)).pipe(\n Effect.mapError(() => new ToolNotFoundError({ toolId })),\n Effect.map((t) => {\n const defs = getDefs();\n const typeScriptPreview = buildToolTypeScriptPreview({\n inputSchema: t.inputSchema,\n outputSchema: t.outputSchema,\n defs,\n options: {\n maxLength: Infinity,\n maxProperties: Infinity,\n maxCompositeMembers: Infinity,\n maxRefDepth: 20,\n },\n });\n\n return {\n id: t.id,\n ...typeScriptPreview,\n inputSchema: t.inputSchema ? reattachDefs(t.inputSchema, defs) : undefined,\n outputSchema: t.outputSchema ? reattachDefs(t.outputSchema, defs) : undefined,\n };\n }),\n ),\n\n definitions: () =>\n Effect.sync(() => {\n const result: Record<string, unknown> = {};\n for (const [k, v] of sharedDefs) {\n result[k] = v;\n }\n for (const [k, v] of runtimeDefs) {\n result[k] = v;\n }\n return result;\n }),\n\n registerDefinitions: (defs: Record<string, unknown>) =>\n Effect.sync(() => {\n for (const [k, v] of Object.entries(defs)) {\n sharedDefs.set(k, normalizeRefs(v));\n }\n }),\n\n registerRuntimeDefinitions: (defs: Record<string, unknown>) =>\n Effect.sync(() => {\n for (const [k, v] of Object.entries(defs)) {\n runtimeDefs.set(k, normalizeRefs(v));\n }\n }),\n\n unregisterRuntimeDefinitions: (names: readonly string[]) =>\n Effect.sync(() => {\n for (const name of names) {\n runtimeDefs.delete(name);\n }\n }),\n\n registerInvoker: (pluginKey: string, invoker: ToolInvoker) =>\n Effect.sync(() => {\n invokers.set(pluginKey, invoker);\n }),\n\n resolveAnnotations: (toolId: ToolId) =>\n Effect.gen(function* () {\n const tool = getTool(toolId);\n if (!tool) return undefined;\n const runtimeHandler = runtimeHandlers.get(toolId);\n if (runtimeHandler?.resolveAnnotations) {\n return yield* runtimeHandler.resolveAnnotations();\n }\n const invoker = invokers.get(tool.pluginKey);\n if (!invoker?.resolveAnnotations) return undefined;\n return yield* invoker.resolveAnnotations(toolId);\n }),\n\n invoke: (toolId: ToolId, args: unknown, options: InvokeOptions) =>\n Effect.gen(function* () {\n const tool = yield* Effect.fromNullable(getTool(toolId)).pipe(\n Effect.mapError(() => new ToolNotFoundError({ toolId })),\n );\n const runtimeHandler = runtimeHandlers.get(toolId);\n if (runtimeHandler) {\n return yield* runtimeHandler.invoke(args, options);\n }\n const invoker = invokers.get(tool.pluginKey);\n if (!invoker) {\n return yield* new ToolInvocationError({\n toolId,\n message: `No invoker registered for plugin \"${tool.pluginKey}\"`,\n cause: undefined,\n });\n }\n return yield* invoker.invoke(toolId, args, options);\n }),\n\n register: (newTools: readonly ToolRegistration[]) =>\n Effect.sync(() => {\n for (const t of newTools) {\n tools.set(t.id, {\n ...t,\n inputSchema: normalizeRefs(t.inputSchema),\n outputSchema: normalizeRefs(t.outputSchema),\n });\n }\n }),\n\n registerRuntime: (newTools: readonly ToolRegistration[]) =>\n Effect.sync(() => {\n for (const t of newTools) {\n runtimeTools.set(t.id, {\n ...t,\n inputSchema: normalizeRefs(t.inputSchema),\n outputSchema: normalizeRefs(t.outputSchema),\n });\n }\n }),\n\n registerRuntimeHandler: (toolId: ToolId, handler: RuntimeToolHandler) =>\n Effect.sync(() => {\n runtimeHandlers.set(toolId, handler);\n }),\n\n unregisterRuntime: (toolIds: readonly ToolId[]) =>\n Effect.sync(() => {\n for (const id of toolIds) {\n runtimeTools.delete(id);\n runtimeHandlers.delete(id);\n }\n }),\n\n unregister: (toolIds: readonly ToolId[]) =>\n Effect.sync(() => {\n for (const id of toolIds) {\n tools.delete(id);\n runtimeTools.delete(id);\n runtimeHandlers.delete(id);\n }\n }),\n\n unregisterBySource: (sourceId: string) =>\n Effect.sync(() => {\n for (const [id, t] of tools) {\n if (t.sourceId === sourceId) {\n tools.delete(id);\n }\n }\n for (const [id, t] of runtimeTools) {\n if (t.sourceId === sourceId) {\n runtimeTools.delete(id);\n runtimeHandlers.delete(id);\n }\n }\n }),\n };\n};\n","import { Effect, Option } from \"effect\";\n\nimport { ScopeId, SecretId } from \"../ids\";\nimport { SecretNotFoundError, SecretResolutionError } from \"../errors\";\nimport type { SecretRef, SecretProvider, SetSecretInput } from \"../secrets\";\n\n// ---------------------------------------------------------------------------\n// In-memory secret provider\n// ---------------------------------------------------------------------------\n\nexport const makeInMemorySecretProvider = (): SecretProvider => {\n const values = new Map<string, string>();\n return {\n key: \"memory\",\n writable: true,\n get: (key) => Effect.sync(() => values.get(key) ?? null),\n set: (key, value) =>\n Effect.sync(() => {\n values.set(key, value);\n }),\n delete: (key) => Effect.sync(() => values.delete(key)),\n list: () => Effect.sync(() => [...values.keys()].map((k) => ({ id: k, name: k }))),\n };\n};\n\n// ---------------------------------------------------------------------------\n// In-memory secret store\n// ---------------------------------------------------------------------------\n\nexport const makeInMemorySecretStore = () => {\n const refs = new Map<string, SecretRef>();\n const providers: SecretProvider[] = [];\n\n // Add a default in-memory provider\n const defaultProvider = makeInMemorySecretProvider();\n providers.push(defaultProvider);\n\n const findWritableProvider = (key?: string): SecretProvider | undefined =>\n key ? providers.find((p) => p.key === key) : providers.find((p) => p.writable);\n\n const resolveFromProviders = (\n secretId: SecretId,\n providerKey: string | undefined,\n ): Effect.Effect<string | null> => {\n if (providerKey) {\n const provider = providers.find((p) => p.key === providerKey);\n return provider ? provider.get(secretId) : Effect.succeed(null);\n }\n // Try all providers in order\n return Effect.gen(function* () {\n for (const provider of providers) {\n const value = yield* provider.get(secretId);\n if (value !== null) return value;\n }\n return null;\n });\n };\n\n return {\n list: (scopeId: ScopeId) =>\n Effect.sync(() => [...refs.values()].filter((r) => r.scopeId === scopeId)),\n\n get: (secretId: SecretId) =>\n Effect.fromNullable(refs.get(secretId)).pipe(\n Effect.mapError(() => new SecretNotFoundError({ secretId })),\n ),\n\n resolve: (secretId: SecretId, _scopeId: ScopeId) =>\n Effect.gen(function* () {\n const ref = refs.get(secretId);\n const providerKey = ref ? Option.getOrUndefined(ref.provider) : undefined;\n\n const value = yield* resolveFromProviders(secretId, providerKey);\n if (value === null) {\n return yield* new SecretResolutionError({\n secretId,\n message: `Secret \"${secretId}\" not found in any provider`,\n });\n }\n return value;\n }),\n\n status: (secretId: SecretId, _scopeId: ScopeId) =>\n Effect.gen(function* () {\n const value = yield* resolveFromProviders(secretId, undefined);\n return value !== null ? (\"resolved\" as const) : (\"missing\" as const);\n }),\n\n set: (input: SetSecretInput) =>\n Effect.gen(function* () {\n const provider = findWritableProvider(input.provider);\n if (!provider?.set) {\n return yield* new SecretResolutionError({\n secretId: input.id,\n message: `No writable provider found${input.provider ? ` (requested: ${input.provider})` : \"\"}`,\n });\n }\n\n yield* provider.set(input.id, input.value);\n\n const ref: SecretRef = {\n id: input.id,\n scopeId: input.scopeId,\n name: input.name,\n provider: Option.fromNullable(input.provider),\n purpose: input.purpose,\n createdAt: new Date(),\n };\n refs.set(input.id, ref);\n return ref;\n }),\n\n remove: (secretId: SecretId) =>\n Effect.gen(function* () {\n const ref = refs.get(secretId);\n if (!ref) return yield* new SecretNotFoundError({ secretId });\n\n const providerKey = Option.getOrUndefined(ref.provider);\n const provider = findWritableProvider(providerKey);\n if (provider?.delete) {\n yield* provider.delete(secretId);\n }\n\n refs.delete(secretId);\n return true;\n }),\n\n addProvider: (provider: SecretProvider) =>\n Effect.sync(() => {\n providers.push(provider);\n }),\n\n providers: () => Effect.sync(() => providers.map((p) => p.key)),\n };\n};\n","import { Effect } from \"effect\";\n\nimport { ScopeId, PolicyId } from \"../ids\";\nimport type { Policy, PolicyCheckInput } from \"../policies\";\n\nexport const makeInMemoryPolicyEngine = () => {\n const policies = new Map<string, Policy>();\n let counter = 0;\n\n return {\n list: (scopeId: ScopeId) =>\n Effect.succeed([...policies.values()].filter((p) => p.scopeId === scopeId)),\n check: (_input: PolicyCheckInput) => Effect.void,\n add: (policy: Omit<Policy, \"id\" | \"createdAt\">) =>\n Effect.sync(() => {\n const id = PolicyId.make(`policy-${++counter}`);\n const full: Policy = { ...policy, id, createdAt: new Date() };\n policies.set(id, full);\n return full;\n }),\n remove: (policyId: PolicyId) => Effect.succeed(policies.delete(policyId)),\n };\n};\n","import { ScopeId } from \"./ids\";\nimport type { Scope } from \"./scope\";\nimport type { ExecutorConfig } from \"./executor\";\nimport type { ExecutorPlugin } from \"./plugin\";\n\nimport { makeInMemoryToolRegistry } from \"./in-memory/tool-registry\";\nimport { makeInMemorySecretStore } from \"./in-memory/secret-store\";\nimport { makeInMemoryPolicyEngine } from \"./in-memory/policy-engine\";\nimport { makeInMemorySourceRegistry } from \"./sources\";\n\n// ---------------------------------------------------------------------------\n// makeTestConfig — one-liner to build a test ExecutorConfig\n// ---------------------------------------------------------------------------\n\nexport const makeTestConfig = <\n const TPlugins extends readonly ExecutorPlugin<string, object>[] = [],\n>(options?: {\n readonly cwd?: string;\n readonly plugins?: TPlugins;\n}): ExecutorConfig<TPlugins> => {\n const cwd = options?.cwd ?? \"/test\";\n const scope: Scope = {\n id: ScopeId.make(\"test-scope\"),\n name: cwd,\n createdAt: new Date(),\n };\n\n return {\n scope,\n tools: makeInMemoryToolRegistry(),\n sources: makeInMemorySourceRegistry(),\n secrets: makeInMemorySecretStore(),\n policies: makeInMemoryPolicyEngine(),\n plugins: options?.plugins,\n };\n};\n","// ---------------------------------------------------------------------------\n// Kv — generic scoped key-value store\n//\n// The foundational storage primitive. Everything persists through this:\n// tools, definitions, secrets, policies, plugin data. Implementations\n// live in @executor/storage-file or are provided by the host.\n// ---------------------------------------------------------------------------\n\nimport { Effect } from \"effect\";\n\nexport interface KvEntry {\n readonly key: string;\n readonly value: string;\n}\n\n/**\n * Global KV — requires a namespace on every call.\n * Implementations: makeSqliteKv, makeInMemoryKv\n */\nexport interface Kv {\n readonly get: (namespace: string, key: string) => Effect.Effect<string | null>;\n /** Batch upsert — inserts or updates one or more key-value pairs. */\n readonly set: (namespace: string, entries: readonly KvEntry[]) => Effect.Effect<void>;\n /** Batch delete — removes one or more keys. */\n readonly delete: (namespace: string, keys: readonly string[]) => Effect.Effect<number>;\n readonly list: (namespace: string) => Effect.Effect<readonly { key: string; value: string }[]>;\n readonly deleteAll: (namespace: string) => Effect.Effect<number>;\n readonly withTransaction?: <A, E>(\n effect: Effect.Effect<A, E, never>,\n ) => Effect.Effect<A, E, never>;\n}\n\n/**\n * Scoped KV — already bound to a namespace.\n * This is what stores and adapters receive.\n */\nexport interface ScopedKv {\n readonly get: (key: string) => Effect.Effect<string | null>;\n /** Batch upsert — inserts or updates one or more key-value pairs. */\n readonly set: (entries: readonly KvEntry[]) => Effect.Effect<void>;\n /** Batch delete — removes one or more keys. */\n readonly delete: (keys: readonly string[]) => Effect.Effect<number>;\n readonly list: () => Effect.Effect<readonly { key: string; value: string }[]>;\n readonly deleteAll: () => Effect.Effect<number>;\n readonly withTransaction?: <A, E>(\n effect: Effect.Effect<A, E, never>,\n ) => Effect.Effect<A, E, never>;\n}\n\n/**\n * Scope a Kv to a specific namespace.\n */\nexport const scopeKv = (kv: Kv, namespace: string): ScopedKv => ({\n get: (key) => kv.get(namespace, key),\n set: (entries) => kv.set(namespace, entries),\n delete: (keys) => kv.delete(namespace, keys),\n list: () => kv.list(namespace),\n deleteAll: () => kv.deleteAll(namespace),\n withTransaction: kv.withTransaction,\n});\n\n/**\n * In-memory ScopedKv — useful for tests and plugins that don't need persistence.\n */\nexport const makeInMemoryScopedKv = (): ScopedKv => {\n const store = new Map<string, string>();\n return {\n get: (key) => Effect.succeed(store.get(key) ?? null),\n set: (entries) =>\n Effect.sync(() => {\n for (const { key, value } of entries) store.set(key, value);\n }),\n delete: (keys) =>\n Effect.sync(() => {\n let count = 0;\n for (const key of keys) if (store.delete(key)) count++;\n return count;\n }),\n list: () => Effect.sync(() => [...store.entries()].map(([key, value]) => ({ key, value }))),\n deleteAll: () =>\n Effect.sync(() => {\n const n = store.size;\n store.clear();\n return n;\n }),\n withTransaction: (effect) => effect,\n };\n};\n"],"mappings":"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","names":["Schema","Schema","Schema","Schema","Context","Effect","Schema","Schema","Schema","Context","Schema","Schema","Context","Context","Schema","Schema","Context","Schema","Schema","Effect","Effect","Effect","Schema","changed","Schema","Effect","REF_PATTERN","Effect","JSONSchema","Schema","JSONSchema","Schema","Effect","tool","Effect","Effect","tool","Effect","Effect","Effect","Effect","Effect"]}
package/dist/core.js CHANGED
@@ -52,7 +52,7 @@ import {
52
52
  schemaToTypeScriptPreviewWithDefs,
53
53
  scopeKv,
54
54
  tool
55
- } from "./chunk-ECOS3HQG.js";
55
+ } from "./chunk-D7CT3UMO.js";
56
56
  export {
57
57
  ElicitationAction,
58
58
  ElicitationDeclinedError,
@@ -1 +1 @@
1
- {"version":3,"file":"elicitation.d.ts","sourceRoot":"","sources":["../src/elicitation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAExC,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;;;;;IAW3B,mDAAmD;;;AALvD,gEAAgE;AAChE,qBAAa,eAAgB,SAAQ,oBAOpC;CAAG;;;;;;IAQA,uDAAuD;;;AAN3D,sEAAsE;AACtE,qBAAa,cAAe,SAAQ,mBAQnC;CAAG;AAEJ,MAAM,MAAM,kBAAkB,GAAG,eAAe,GAAG,cAAc,CAAC;AAMlE,eAAO,MAAM,iBAAiB,iDAAgD,CAAC;AAC/E,MAAM,MAAM,iBAAiB,GAAG,OAAO,iBAAiB,CAAC,IAAI,CAAC;;;IAM5D,mEAAmE;;;;IAAnE,mEAAmE;;;;;;;;;AAJrE,qBAAa,mBAAoB,SAAQ,wBAQvC;CAAG;AAML,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC;CACtC;AAED;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAC/B,GAAG,EAAE,kBAAkB,KACpB,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;;;;;;;AAMxC,qBAAa,wBAAyB,SAAQ,6BAM7C;CAAG"}
1
+ {"version":3,"file":"elicitation.d.ts","sourceRoot":"","sources":["../src/elicitation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAExC,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;;;;;IAS7B,mDAAmD;;;AAHrD,gEAAgE;AAChE,qBAAa,eAAgB,SAAQ,oBAInC;CAAG;;;;;;IAMH,uDAAuD;;;AAJzD,sEAAsE;AACtE,qBAAa,cAAe,SAAQ,mBAKlC;CAAG;AAEL,MAAM,MAAM,kBAAkB,GAAG,eAAe,GAAG,cAAc,CAAC;AAMlE,eAAO,MAAM,iBAAiB,iDAAgD,CAAC;AAC/E,MAAM,MAAM,iBAAiB,GAAG,OAAO,iBAAiB,CAAC,IAAI,CAAC;;;IAI5D,mEAAmE;;;;IAAnE,mEAAmE;;;;;;;;;AAFrE,qBAAa,mBAAoB,SAAQ,wBAIvC;CAAG;AAML,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC;CACtC;AAED;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,GAAG,EAAE,kBAAkB,KAAK,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;;;;;;;AAMjG,qBAAa,wBAAyB,SAAQ,6BAM7C;CAAG"}
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,EAAE,MAAM,EAAsB,MAAM,OAAO,CAAC;;;;;;AAEnD,qBAAa,iBAAkB,SAAQ,sBAGtC;CAAG;;;;AAEJ,qBAAa,mBAAoB,SAAQ,yBAEvC;IACA,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;CAAG;;;;;;AAEL,qBAAa,mBAAoB,SAAQ,wBAGxC;CAAG;;;;;;;AAEJ,qBAAa,qBAAsB,SAAQ,0BAM1C;CAAG;;;;;;;;AAEJ,qBAAa,iBAAkB,SAAQ,sBAOtC;CAAG"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,EAAE,MAAM,EAAsB,MAAM,OAAO,CAAC;;;;;;AAEnD,qBAAa,iBAAkB,SAAQ,sBAGtC;CAAG;;;;AAEJ,qBAAa,mBAAoB,SAAQ,yBAAwC;IAC/E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;CAAG;;;;;;AAEL,qBAAa,mBAAoB,SAAQ,wBAGxC;CAAG;;;;;;;AAEJ,qBAAa,qBAAsB,SAAQ,0BAM1C;CAAG;;;;;;;;AAEJ,qBAAa,iBAAkB,SAAQ,sBAOtC;CAAG"}