@executor-js/sdk 0.0.1-beta.2 → 0.0.1-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/dist/{chunk-URDGE273.js → chunk-YMKSTNUL.js} +21 -21
  2. package/dist/chunk-YMKSTNUL.js.map +1 -0
  3. package/dist/core.js +1 -1
  4. package/dist/elicitation.d.ts.map +1 -0
  5. package/dist/errors.d.ts.map +1 -0
  6. package/dist/executor.d.ts.map +1 -0
  7. package/dist/ids.d.ts.map +1 -0
  8. package/dist/in-memory/policy-engine.d.ts.map +1 -0
  9. package/dist/in-memory/secret-store.d.ts.map +1 -0
  10. package/dist/{sdk/in-memory → in-memory}/tool-registry.d.ts +1 -1
  11. package/dist/in-memory/tool-registry.d.ts.map +1 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +1 -1
  14. package/dist/index.js.map +1 -1
  15. package/dist/{sdk/index.test.d.ts.map → index.test.d.ts.map} +1 -1
  16. package/dist/plugin-kv.d.ts.map +1 -0
  17. package/dist/plugin.d.ts.map +1 -0
  18. package/dist/plugins/in-memory-tools.d.ts.map +1 -0
  19. package/dist/{sdk/policies.d.ts → policies.d.ts} +2 -2
  20. package/dist/policies.d.ts.map +1 -0
  21. package/dist/promise-executor.d.ts +1 -1
  22. package/dist/promise-executor.d.ts.map +1 -1
  23. package/dist/promise.d.ts +1 -1
  24. package/dist/promise.d.ts.map +1 -1
  25. package/dist/runtime-tools.d.ts.map +1 -0
  26. package/dist/schema-refs.d.ts.map +1 -0
  27. package/dist/schema-types.d.ts.map +1 -0
  28. package/dist/schema-types.test.d.ts.map +1 -0
  29. package/dist/scope.d.ts.map +1 -0
  30. package/dist/{sdk/secrets.d.ts → secrets.d.ts} +4 -4
  31. package/dist/secrets.d.ts.map +1 -0
  32. package/dist/sources.d.ts.map +1 -0
  33. package/dist/testing.d.ts.map +1 -0
  34. package/dist/{sdk/tools.d.ts → tools.d.ts} +4 -4
  35. package/dist/tools.d.ts.map +1 -0
  36. package/package.json +2 -2
  37. package/dist/chunk-URDGE273.js.map +0 -1
  38. package/dist/sdk/elicitation.d.ts.map +0 -1
  39. package/dist/sdk/errors.d.ts.map +0 -1
  40. package/dist/sdk/executor.d.ts.map +0 -1
  41. package/dist/sdk/ids.d.ts.map +0 -1
  42. package/dist/sdk/in-memory/policy-engine.d.ts.map +0 -1
  43. package/dist/sdk/in-memory/secret-store.d.ts.map +0 -1
  44. package/dist/sdk/in-memory/tool-registry.d.ts.map +0 -1
  45. package/dist/sdk/index.d.ts.map +0 -1
  46. package/dist/sdk/plugin-kv.d.ts.map +0 -1
  47. package/dist/sdk/plugin.d.ts.map +0 -1
  48. package/dist/sdk/plugins/in-memory-tools.d.ts.map +0 -1
  49. package/dist/sdk/policies.d.ts.map +0 -1
  50. package/dist/sdk/runtime-tools.d.ts.map +0 -1
  51. package/dist/sdk/schema-refs.d.ts.map +0 -1
  52. package/dist/sdk/schema-types.d.ts.map +0 -1
  53. package/dist/sdk/schema-types.test.d.ts.map +0 -1
  54. package/dist/sdk/scope.d.ts.map +0 -1
  55. package/dist/sdk/secrets.d.ts.map +0 -1
  56. package/dist/sdk/sources.d.ts.map +0 -1
  57. package/dist/sdk/testing.d.ts.map +0 -1
  58. package/dist/sdk/tools.d.ts.map +0 -1
  59. /package/dist/{sdk/elicitation.d.ts → elicitation.d.ts} +0 -0
  60. /package/dist/{sdk/errors.d.ts → errors.d.ts} +0 -0
  61. /package/dist/{sdk/executor.d.ts → executor.d.ts} +0 -0
  62. /package/dist/{sdk/ids.d.ts → ids.d.ts} +0 -0
  63. /package/dist/{sdk/in-memory → in-memory}/policy-engine.d.ts +0 -0
  64. /package/dist/{sdk/in-memory → in-memory}/secret-store.d.ts +0 -0
  65. /package/dist/{sdk/index.d.ts → index.d.ts} +0 -0
  66. /package/dist/{sdk/index.test.d.ts → index.test.d.ts} +0 -0
  67. /package/dist/{sdk/plugin-kv.d.ts → plugin-kv.d.ts} +0 -0
  68. /package/dist/{sdk/plugin.d.ts → plugin.d.ts} +0 -0
  69. /package/dist/{sdk/plugins → plugins}/in-memory-tools.d.ts +0 -0
  70. /package/dist/{sdk/runtime-tools.d.ts → runtime-tools.d.ts} +0 -0
  71. /package/dist/{sdk/schema-refs.d.ts → schema-refs.d.ts} +0 -0
  72. /package/dist/{sdk/schema-types.d.ts → schema-types.d.ts} +0 -0
  73. /package/dist/{sdk/schema-types.test.d.ts → schema-types.test.d.ts} +0 -0
  74. /package/dist/{sdk/scope.d.ts → scope.d.ts} +0 -0
  75. /package/dist/{sdk/sources.d.ts → sources.d.ts} +0 -0
  76. /package/dist/{sdk/testing.d.ts → testing.d.ts} +0 -0
@@ -1,11 +1,11 @@
1
- // src/sdk/ids.ts
1
+ // src/ids.ts
2
2
  import { Schema } from "effect";
3
3
  var ScopeId = Schema.String.pipe(Schema.brand("ScopeId"));
4
4
  var ToolId = Schema.String.pipe(Schema.brand("ToolId"));
5
5
  var SecretId = Schema.String.pipe(Schema.brand("SecretId"));
6
6
  var PolicyId = Schema.String.pipe(Schema.brand("PolicyId"));
7
7
 
8
- // src/sdk/errors.ts
8
+ // src/errors.ts
9
9
  import { Schema as Schema2 } from "effect";
10
10
  var ToolNotFoundError = class extends Schema2.TaggedError()(
11
11
  "ToolNotFoundError",
@@ -44,7 +44,7 @@ var PolicyDeniedError = class extends Schema2.TaggedError()(
44
44
  ) {
45
45
  };
46
46
 
47
- // src/sdk/tools.ts
47
+ // src/tools.ts
48
48
  import { Context, Schema as Schema3 } from "effect";
49
49
  var ToolAnnotations = class extends Schema3.Class("ToolAnnotations")({
50
50
  /** Whether this tool requires user approval before execution */
@@ -106,7 +106,7 @@ var ToolRegistration = class extends Schema3.Class(
106
106
  }) {
107
107
  };
108
108
 
109
- // src/sdk/sources.ts
109
+ // src/sources.ts
110
110
  import { Context as Context2, Effect as Effect2, Schema as Schema4 } from "effect";
111
111
  var Source = class extends Schema4.Class("Source")({
112
112
  /** Unique namespace identifier (e.g. "github_rest") */
@@ -208,7 +208,7 @@ var makeInMemorySourceRegistry = () => {
208
208
  };
209
209
  };
210
210
 
211
- // src/sdk/elicitation.ts
211
+ // src/elicitation.ts
212
212
  import { Schema as Schema5 } from "effect";
213
213
  var FormElicitation = class extends Schema5.TaggedClass()(
214
214
  "FormElicitation",
@@ -249,7 +249,7 @@ var ElicitationDeclinedError = class extends Schema5.TaggedError()(
249
249
  ) {
250
250
  };
251
251
 
252
- // src/sdk/secrets.ts
252
+ // src/secrets.ts
253
253
  import { Context as Context3, Schema as Schema6 } from "effect";
254
254
  var SecretRef = class extends Schema6.Class("SecretRef")({
255
255
  id: SecretId,
@@ -275,7 +275,7 @@ var SetSecretInput = class extends Schema6.Class("SetSecretInput")({
275
275
  var SecretStore = class extends Context3.Tag("@executor-js/sdk/SecretStore")() {
276
276
  };
277
277
 
278
- // src/sdk/policies.ts
278
+ // src/policies.ts
279
279
  import { Context as Context4, Schema as Schema7 } from "effect";
280
280
  var PolicyAction = Schema7.Literal("allow", "deny", "require_approval");
281
281
  var Policy = class extends Schema7.Class("Policy")({
@@ -299,7 +299,7 @@ var PolicyCheckInput = class extends Schema7.Class("PolicyCheckInput")({
299
299
  var PolicyEngine = class extends Context4.Tag("@executor-js/sdk/PolicyEngine")() {
300
300
  };
301
301
 
302
- // src/sdk/scope.ts
302
+ // src/scope.ts
303
303
  import { Schema as Schema8 } from "effect";
304
304
  var Scope = class extends Schema8.Class("Scope")({
305
305
  id: ScopeId,
@@ -308,10 +308,10 @@ var Scope = class extends Schema8.Class("Scope")({
308
308
  }) {
309
309
  };
310
310
 
311
- // src/sdk/plugin.ts
311
+ // src/plugin.ts
312
312
  var definePlugin = (plugin) => plugin;
313
313
 
314
- // src/sdk/executor.ts
314
+ // src/executor.ts
315
315
  import { Effect as Effect6 } from "effect";
316
316
  var resolveElicitationHandler = (options) => options.onElicitation === "accept-all" ? () => Effect6.succeed(new ElicitationResponse({ action: "accept" })) : options.onElicitation;
317
317
  var createExecutor = (config) => Effect6.gen(function* () {
@@ -390,10 +390,10 @@ var createExecutor = (config) => Effect6.gen(function* () {
390
390
  return Object.assign(base, extensions);
391
391
  });
392
392
 
393
- // src/sdk/plugins/in-memory-tools.ts
393
+ // src/plugins/in-memory-tools.ts
394
394
  import { Effect as Effect7, JSONSchema, Schema as Schema9 } from "effect";
395
395
 
396
- // src/sdk/schema-refs.ts
396
+ // src/schema-refs.ts
397
397
  var REF_PATTERN = /^#\/(?:\$defs|definitions)\/(.+)$/;
398
398
  var parseRefName = (ref) => ref.match(REF_PATTERN)?.[1];
399
399
  var normalizeRefs = (node) => {
@@ -479,7 +479,7 @@ var reattachDefs = (schema, defs) => {
479
479
  return { ...schema, $defs: attached };
480
480
  };
481
481
 
482
- // src/sdk/plugins/in-memory-tools.ts
482
+ // src/plugins/in-memory-tools.ts
483
483
  var buildRegistration = (namespace, def) => {
484
484
  const id = ToolId.make(`${namespace}.${def.name}`);
485
485
  const decode = Schema9.decodeUnknownSync(def.inputSchema);
@@ -650,7 +650,7 @@ var inMemoryToolsPlugin = (config) => {
650
650
  });
651
651
  };
652
652
 
653
- // src/sdk/schema-types.ts
653
+ // src/schema-types.ts
654
654
  var VALID_IDENTIFIER_PATTERN = /^[A-Za-z_$][A-Za-z0-9_$]*$/;
655
655
  var REF_PATTERN2 = /^#\/(?:\$defs|definitions)\/(.+)$/;
656
656
  var asRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value) ? value : {};
@@ -910,7 +910,7 @@ var buildToolTypeScriptPreview = (input) => {
910
910
  };
911
911
  };
912
912
 
913
- // src/sdk/runtime-tools.ts
913
+ // src/runtime-tools.ts
914
914
  import { Effect as Effect8, JSONSchema as JSONSchema2, Schema as Schema10 } from "effect";
915
915
  var runtimeTool = (def) => def;
916
916
  var buildRuntimeTool = (pluginKey, sourceId, def) => {
@@ -1005,7 +1005,7 @@ var registerRuntimeTools = (input) => Effect8.gen(function* () {
1005
1005
  };
1006
1006
  });
1007
1007
 
1008
- // src/sdk/in-memory/tool-registry.ts
1008
+ // src/in-memory/tool-registry.ts
1009
1009
  import { Effect as Effect9 } from "effect";
1010
1010
  var makeInMemoryToolRegistry = () => {
1011
1011
  const tools = /* @__PURE__ */ new Map();
@@ -1175,7 +1175,7 @@ var makeInMemoryToolRegistry = () => {
1175
1175
  };
1176
1176
  };
1177
1177
 
1178
- // src/sdk/in-memory/secret-store.ts
1178
+ // src/in-memory/secret-store.ts
1179
1179
  import { Effect as Effect10, Option } from "effect";
1180
1180
  var makeInMemorySecretProvider = () => {
1181
1181
  const values = /* @__PURE__ */ new Map();
@@ -1270,7 +1270,7 @@ var makeInMemorySecretStore = () => {
1270
1270
  };
1271
1271
  };
1272
1272
 
1273
- // src/sdk/in-memory/policy-engine.ts
1273
+ // src/in-memory/policy-engine.ts
1274
1274
  import { Effect as Effect11 } from "effect";
1275
1275
  var makeInMemoryPolicyEngine = () => {
1276
1276
  const policies = /* @__PURE__ */ new Map();
@@ -1290,7 +1290,7 @@ var makeInMemoryPolicyEngine = () => {
1290
1290
  };
1291
1291
  };
1292
1292
 
1293
- // src/sdk/testing.ts
1293
+ // src/testing.ts
1294
1294
  var makeTestConfig = (options) => {
1295
1295
  const cwd = options?.cwd ?? "/test";
1296
1296
  const scope = {
@@ -1308,7 +1308,7 @@ var makeTestConfig = (options) => {
1308
1308
  };
1309
1309
  };
1310
1310
 
1311
- // src/sdk/plugin-kv.ts
1311
+ // src/plugin-kv.ts
1312
1312
  import { Effect as Effect12 } from "effect";
1313
1313
  var scopeKv = (kv, namespace) => ({
1314
1314
  get: (key) => kv.get(namespace, key),
@@ -1393,4 +1393,4 @@ export {
1393
1393
  scopeKv,
1394
1394
  makeInMemoryScopedKv
1395
1395
  };
1396
- //# sourceMappingURL=chunk-URDGE273.js.map
1396
+ //# sourceMappingURL=chunk-YMKSTNUL.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 { 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 Schema.TaggedError<ToolInvocationError>()(\n \"ToolInvocationError\",\n {\n toolId: ToolId,\n message: Schema.String,\n cause: Schema.optional(Schema.Unknown),\n },\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 {\n ElicitationHandler,\n ElicitationDeclinedError,\n} 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-js/sdk/ToolRegistry\")<\n ToolRegistry,\n {\n readonly list: (filter?: ToolListFilter) => Effect.Effect<readonly ToolMetadata[]>;\n\n readonly schema: (\n toolId: ToolId,\n ) => 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: (\n defs: Record<string, unknown>,\n ) => 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: (\n defs: Record<string, unknown>,\n ) => Effect.Effect<void>;\n\n /** Remove named schema definitions that were registered for runtime tools. */\n readonly unregisterRuntimeDefinitions: (\n names: readonly string[],\n ) => 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: (\n pluginKey: string,\n invoker: ToolInvoker,\n ) => Effect.Effect<void>;\n\n /**\n * Resolve annotations for a tool by delegating to the plugin's invoker.\n */\n readonly resolveAnnotations: (\n toolId: ToolId,\n ) => Effect.Effect<ToolAnnotations | undefined>;\n\n /** Register tools (used by plugins to push tools into the registry) */\n readonly register: (\n tools: readonly ToolRegistration[],\n ) => 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: (\n tools: readonly ToolRegistration[],\n ) => 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: (\n toolIds: readonly ToolId[],\n ) => Effect.Effect<void>;\n\n /** Unregister tools by id (used by plugins on cleanup) */\n readonly unregister: (\n toolIds: readonly ToolId[],\n ) => Effect.Effect<void>;\n\n /** Unregister all tools belonging to a source */\n readonly unregisterBySource: (\n sourceId: string,\n ) => 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<\n ToolInvocationResult,\n ToolInvocationError | ElicitationDeclinedError\n >;\n\n /** Dynamically compute annotations for a tool (e.g. approval requirements). */\n readonly resolveAnnotations?: (\n toolId: ToolId,\n ) => Effect.Effect<ToolAnnotations | undefined>;\n}\n\nexport interface RuntimeToolHandler {\n readonly invoke: (\n args: unknown,\n options: InvokeOptions,\n ) => Effect.Effect<\n ToolInvocationResult,\n ToolInvocationError | ElicitationDeclinedError\n >;\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>(\n \"ToolRegistration\",\n)({\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 /** 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}) {}\n\n// ---------------------------------------------------------------------------\n// SourceDetectionResult — returned by detect() on a SourceManager\n// ---------------------------------------------------------------------------\n\nexport class SourceDetectionResult extends Schema.Class<SourceDetectionResult>(\"SourceDetectionResult\")({\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(\n \"@executor-js/sdk/SourceRegistry\",\n)<\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>()(\n \"FormElicitation\",\n {\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\n/** Tool needs the user to visit a URL (OAuth, approval page, etc.) */\nexport class UrlElicitation extends Schema.TaggedClass<UrlElicitation>()(\n \"UrlElicitation\",\n {\n message: Schema.String,\n url: Schema.String,\n /** Unique ID so the host can correlate the callback */\n elicitationId: Schema.String,\n },\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>(\n \"ElicitationResponse\",\n)({\n action: ElicitationAction,\n /** Present when action is \"accept\" — the data the user provided */\n content: Schema.optional(\n Schema.Record({ key: Schema.String, value: Schema.Unknown }),\n ),\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 = (\n ctx: ElicitationContext,\n) => 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-js/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: (\n secretId: SecretId,\n ) => 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\n /** Remove a secret ref and its value from the provider */\n readonly remove: (\n secretId: SecretId,\n ) => 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-js/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: (\n policy: Omit<Policy, \"id\" | \"createdAt\">,\n ) => 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<\n TKey extends string = string,\n TExtension extends object = object,\n> {\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<\n PluginHandle<TExtension>,\n Error\n >;\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<\n TPlugins extends readonly ExecutorPlugin<string, object>[],\n> = {\n readonly [P in TPlugins[number] as P[\"key\"]]: P extends ExecutorPlugin<\n string,\n infer TExt\n >\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 = <\n const TKey extends string,\n TExtension extends object,\n>(\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 {\n ExecutorPlugin,\n PluginExtensions,\n PluginHandle,\n} 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<\n TPlugins extends readonly ExecutorPlugin<string, object>[] = [],\n> = {\n readonly scope: Scope;\n\n readonly tools: {\n readonly list: (filter?: ToolListFilter) => Effect.Effect<readonly ToolMetadata[]>;\n readonly schema: (\n toolId: string,\n ) => 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\n | ToolInvocationError\n | PolicyDeniedError\n | 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: (\n policy: Omit<Policy, \"id\" | \"createdAt\">,\n ) => 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: (\n secretId: SecretId,\n ) => Effect.Effect<\"resolved\" | \"missing\">;\n /** Store a secret value (creates ref + writes to provider) */\n readonly set: (input: Omit<SetSecretInput, \"scopeId\">) => Effect.Effect<SecretRef, SecretResolutionError>;\n readonly remove: (\n secretId: SecretId,\n ) => 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<\n TPlugins extends readonly ExecutorPlugin<string, object>[] = [],\n> {\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) =>\n 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) =>\n 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<\n TInput = unknown,\n TOutput = unknown,\n> {\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 | ((\n args: TInput,\n ctx: MemoryToolContext,\n ) => 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: (\n tools: readonly MemoryToolDefinition<any, any>[],\n ) => 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): { registration: ToolRegistration; entry: HandlerEntry; definitions: Record<string, unknown> } => {\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 = { decode, handler: def.handler as MemoryToolHandler<unknown>, isEffect };\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 = 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(\n (data) => new ToolInvocationResult({ data, error: null }),\n ),\n Effect.catchAll(\n (err): Effect.Effect<\n ToolInvocationResult,\n ToolInvocationError | ElicitationDeclinedError\n > => {\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\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const inMemoryToolsPlugin = (config: {\n readonly namespace?: string;\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 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 =>\n 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 = (\n schema: unknown,\n defs: ReadonlyMap<string, unknown>,\n): 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)\n ? value.filter((item): item is string => typeof item === \"string\")\n : [];\n\nconst truncate = (value: string, maxLength: number): string =>\n value.length <= maxLength\n ? value\n : `${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 =>\n 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\n ? refLabel\n : `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(\n enumValues.map((value) => JSON.stringify(value)).join(\" | \"),\n maxLength,\n );\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((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 = (\n currentInput: unknown,\n refDepth: number,\n ): 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 [[name, render({\n currentInput: target,\n depthRemaining: maxDepth,\n refDepthRemaining: Math.max(0, maxRefDepth - refDepth),\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 {\n ToolInvocationResult,\n type ToolRegistration,\n type RuntimeToolHandler,\n} 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 readonly inputSchema: Schema.Schema<TInput, any, never>;\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 = (\n toolId: ToolId,\n entry: RuntimeHandlerEntry,\n): 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 const TTools extends readonly RuntimeToolDefinition<any, any>[],\n>(input: {\n readonly registry: {\n readonly registerRuntimeDefinitions: (\n defs: Record<string, unknown>,\n ) => Effect.Effect<void>;\n readonly unregisterRuntimeDefinitions: (\n names: readonly string[],\n ) => Effect.Effect<void>;\n readonly registerRuntime: (\n tools: readonly ToolRegistration[],\n ) => Effect.Effect<void>;\n readonly registerRuntimeHandler: (\n toolId: ToolId,\n handler: RuntimeToolHandler,\n ) => Effect.Effect<void>;\n readonly unregisterRuntime: (\n toolIds: readonly ToolId[],\n ) => 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(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 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) =>\n t.name.toLowerCase().includes(q) ||\n 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) => Effect.sync(() => { values.set(key, value); }),\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(() =>\n [...refs.values()].filter((r) => r.scopeId === scopeId),\n ),\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(() => { providers.push(provider); }),\n\n providers: () =>\n 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(\n [...policies.values()].filter((p) => p.scopeId === scopeId),\n ),\n check: (_input: PolicyCheckInput) =>\n 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) =>\n 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>(\n options?: {\n readonly cwd?: string;\n readonly plugins?: TPlugins;\n },\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\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 readonly set: (namespace: string, key: string, value: string) => Effect.Effect<void>;\n readonly delete: (namespace: string, key: string) => Effect.Effect<boolean>;\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 readonly set: (key: string, value: string) => Effect.Effect<void>;\n readonly delete: (key: string) => Effect.Effect<boolean>;\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: (key, value) => kv.set(namespace, key, value),\n delete: (key) => kv.delete(namespace, key),\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: (key, value) => Effect.sync(() => { store.set(key, value); }),\n delete: (key) => Effect.sync(() => store.delete(key)),\n list: () =>\n Effect.sync(() =>\n [...store.entries()].map(([key, value]) => ({ key, value })),\n ),\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-URDGE273.js";
55
+ } from "./chunk-YMKSTNUL.js";
56
56
  export {
57
57
  ElicitationAction,
58
58
  ElicitationDeclinedError,
@@ -0,0 +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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;;;;;;AAIhC,qBAAa,iBAAkB,SAAQ,sBAGtC;CAAG;;;;;;;;AAEJ,qBAAa,mBAAoB,SAAQ,wBAOxC;CAAG;;;;;;AAEJ,qBAAa,mBAAoB,SAAQ,wBAGxC;CAAG;;;;;;;AAEJ,qBAAa,qBAAsB,SAAQ,0BAM1C;CAAG;;;;;;;;AAEJ,qBAAa,iBAAkB,SAAQ,sBAOtC;CAAG"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ids.d.ts","sourceRoot":"","sources":["../src/ids.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,eAAO,MAAM,OAAO,+CAA8C,CAAC;AACnE,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAC;AAE1C,eAAO,MAAM,MAAM,8CAA6C,CAAC;AACjE,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,IAAI,CAAC;AAExC,eAAO,MAAM,QAAQ,gDAA+C,CAAC;AACrE,MAAM,MAAM,QAAQ,GAAG,OAAO,QAAQ,CAAC,IAAI,CAAC;AAE5C,eAAO,MAAM,QAAQ,gDAA+C,CAAC;AACrE,MAAM,MAAM,QAAQ,GAAG,OAAO,QAAQ,CAAC,IAAI,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy-engine.d.ts","sourceRoot":"","sources":["../../src/in-memory/policy-engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAC3C,OAAO,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE5D,eAAO,MAAM,wBAAwB;oBAKjB,OAAO;oBAIP,gBAAgB;kBAElB,IAAI,CAAC,MAAM,EAAE,IAAI,GAAG,WAAW,CAAC;uBAO3B,QAAQ;CAG9B,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secret-store.d.ts","sourceRoot":"","sources":["../../src/in-memory/secret-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAC;AAExC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AACvE,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAM5E,eAAO,MAAM,0BAA0B,QAAO,cAU7C,CAAC;AAMF,eAAO,MAAM,uBAAuB;oBA8BhB,OAAO;oBAKP,QAAQ;wBAKJ,QAAQ,YAAY,OAAO;uBAe5B,QAAQ,YAAY,OAAO;iBAMjC,cAAc;uBAwBR,QAAQ;4BAeH,cAAc;;CAMzC,CAAC"}
@@ -24,7 +24,7 @@ export declare const makeInMemoryToolRegistry: () => {
24
24
  unregisterRuntimeDefinitions: (names: readonly string[]) => Effect.Effect<void, never, never>;
25
25
  registerInvoker: (pluginKey: string, invoker: ToolInvoker) => Effect.Effect<void, never, never>;
26
26
  resolveAnnotations: (toolId: ToolId) => Effect.Effect<import("..").ToolAnnotations | undefined, never, never>;
27
- invoke: (toolId: ToolId, args: unknown, options: InvokeOptions) => Effect.Effect<import("..").ToolInvocationResult, ToolNotFoundError | ToolInvocationError | import("..").ElicitationDeclinedError, never>;
27
+ invoke: (toolId: ToolId, args: unknown, options: InvokeOptions) => Effect.Effect<import("..").ToolInvocationResult, import("..").ElicitationDeclinedError | ToolNotFoundError | ToolInvocationError, never>;
28
28
  register: (newTools: readonly ToolRegistration[]) => Effect.Effect<void, never, never>;
29
29
  registerRuntime: (newTools: readonly ToolRegistration[]) => Effect.Effect<void, never, never>;
30
30
  registerRuntimeHandler: (toolId: ToolId, handler: RuntimeToolHandler) => Effect.Effect<void, never, never>;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-registry.d.ts","sourceRoot":"","sources":["../../src/in-memory/tool-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AACnE,OAAO,KAAK,EACV,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,aAAa,EACb,kBAAkB,EACnB,MAAM,UAAU,CAAC;AAIlB,eAAO,MAAM,wBAAwB;oBAmBjB,cAAc;;;;;;;qBA4Bb,MAAM;;;;;;;;;gCAsCK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;uCAOhB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;0CAOpB,SAAS,MAAM,EAAE;iCAO1B,MAAM,WAAW,WAAW;iCAK5B,MAAM;qBAalB,MAAM,QAAQ,OAAO,WAAW,aAAa;yBAoBzC,SAAS,gBAAgB,EAAE;gCAWpB,SAAS,gBAAgB,EAAE;qCAWtB,MAAM,WAAW,kBAAkB;iCAKvC,SAAS,MAAM,EAAE;0BAQxB,SAAS,MAAM,EAAE;mCASR,MAAM;CAexC,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAG5D,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,UAAU,CAAC;AAGlB,OAAO,EACL,YAAY,EACZ,UAAU,EACV,oBAAoB,EACpB,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,aAAa,GACnB,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,MAAM,EACN,qBAAqB,EACrB,cAAc,EACd,0BAA0B,EAC1B,KAAK,aAAa,GACnB,MAAM,WAAW,CAAC;AAGnB,OAAO,EACL,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,wBAAwB,EACxB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,GACxB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;AAGxF,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAGlF,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAGhC,OAAO,EACL,YAAY,EACZ,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,gBAAgB,GACtB,MAAM,UAAU,CAAC;AAGlB,OAAO,EACL,cAAc,EACd,KAAK,QAAQ,EACb,KAAK,cAAc,GACpB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,mBAAmB,EACnB,IAAI,EACJ,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,4BAA4B,GAClC,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC3F,OAAO,EACL,yBAAyB,EACzB,iCAAiC,EACjC,0BAA0B,EAC1B,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,GAC7B,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,oBAAoB,EACpB,WAAW,EACX,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,GAC3B,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAC/F,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAGrE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,QAAQ,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC"}
package/dist/index.js CHANGED
@@ -28,7 +28,7 @@ import {
28
28
  makeInMemorySecretStore,
29
29
  makeInMemorySourceRegistry,
30
30
  makeInMemoryToolRegistry
31
- } from "./chunk-URDGE273.js";
31
+ } from "./chunk-YMKSTNUL.js";
32
32
 
33
33
  // src/promise-executor.ts
34
34
  import { Effect } from "effect";