@executor-js/sdk 0.0.1-beta.4 → 0.0.1-beta.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -6
- package/dist/index.js +76 -4
- package/dist/index.js.map +1 -1
- package/dist/promise-executor.d.ts +17 -0
- package/dist/promise-executor.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# @executor/sdk
|
|
2
2
|
|
|
3
|
-
A
|
|
3
|
+
A TypeScript SDK for building executors that wire together tool sources, secrets, and policies across MCP, OpenAPI, GraphQL, and custom plugins.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Everything is `async`/`await`. Plug in any combination of plugins, register your own tools, and invoke them through a unified catalog.
|
|
6
6
|
|
|
7
7
|
## Install
|
|
8
8
|
|
|
@@ -131,15 +131,15 @@ const value = await executor.secrets.resolve("github-token");
|
|
|
131
131
|
|
|
132
132
|
Plugins accept `{ secretId, prefix }` wherever a header value is expected, so you never write tokens into source configs.
|
|
133
133
|
|
|
134
|
-
##
|
|
134
|
+
## Using with Effect
|
|
135
135
|
|
|
136
|
-
|
|
136
|
+
The SDK is built on [Effect](https://effect.website/) under the hood. If you want the raw Effect-based primitives instead of the promise wrapper, import from the `/core` subpath:
|
|
137
137
|
|
|
138
138
|
```ts
|
|
139
|
-
import { createExecutor
|
|
139
|
+
import { createExecutor } from "@executor/sdk/core";
|
|
140
140
|
```
|
|
141
141
|
|
|
142
|
-
`/core` exposes `createExecutor` returning an `Effect`, the `ToolRegistry` / `SourceRegistry` / `SecretStore` / `PolicyEngine` Context tags, the in-memory store factories, and every branded ID + error class. Every `@executor/plugin-*`
|
|
142
|
+
`/core` exposes `createExecutor` returning an `Effect`, the `ToolRegistry` / `SourceRegistry` / `SecretStore` / `PolicyEngine` Context tags, the in-memory store factories, and every branded ID + error class. Every `@executor/plugin-*` ships a matching `/core` subpath.
|
|
143
143
|
|
|
144
144
|
## Status
|
|
145
145
|
|
package/dist/index.js
CHANGED
|
@@ -34,6 +34,7 @@ import {
|
|
|
34
34
|
import { Effect } from "effect";
|
|
35
35
|
var run = (effect) => Effect.runPromise(effect);
|
|
36
36
|
var fromPromise = (fn) => Effect.tryPromise({ try: fn, catch: (e) => e instanceof Error ? e : new Error(String(e)) });
|
|
37
|
+
var fromPromiseDying = (fn) => Effect.orDie(fromPromise(fn));
|
|
37
38
|
var toEffectElicitationHandler = (handler) => (ctx) => Effect.tryPromise({
|
|
38
39
|
try: () => handler(ctx),
|
|
39
40
|
catch: (e) => e
|
|
@@ -82,6 +83,77 @@ var toEffectSecretProvider = (provider) => ({
|
|
|
82
83
|
delete: provider.delete ? (key) => fromPromise(() => provider.delete(key)) : void 0,
|
|
83
84
|
list: provider.list ? () => fromPromise(() => provider.list()) : void 0
|
|
84
85
|
});
|
|
86
|
+
var toPromiseInvoker = (invoker) => ({
|
|
87
|
+
invoke: (toolId, args, options) => run(invoker.invoke(toolId, args, toEffectInvokeOptions(options))),
|
|
88
|
+
resolveAnnotations: invoker.resolveAnnotations ? (toolId) => run(invoker.resolveAnnotations(toolId)) : void 0
|
|
89
|
+
});
|
|
90
|
+
var toPromiseRuntimeHandler = (handler) => ({
|
|
91
|
+
invoke: (args, options) => run(handler.invoke(args, toEffectInvokeOptions(options))),
|
|
92
|
+
resolveAnnotations: handler.resolveAnnotations ? () => run(handler.resolveAnnotations()) : void 0
|
|
93
|
+
});
|
|
94
|
+
var toPromiseSourceManager = (manager) => ({
|
|
95
|
+
kind: manager.kind,
|
|
96
|
+
list: () => run(manager.list()),
|
|
97
|
+
remove: (sourceId) => run(manager.remove(sourceId)),
|
|
98
|
+
refresh: manager.refresh ? (sourceId) => run(manager.refresh(sourceId)) : void 0,
|
|
99
|
+
detect: manager.detect ? (url) => run(manager.detect(url)) : void 0
|
|
100
|
+
});
|
|
101
|
+
var toPromiseSecretProvider = (provider) => ({
|
|
102
|
+
key: provider.key,
|
|
103
|
+
writable: provider.writable,
|
|
104
|
+
get: (key) => run(provider.get(key)),
|
|
105
|
+
set: provider.set ? (key, value) => run(provider.set(key, value)) : void 0,
|
|
106
|
+
delete: provider.delete ? (key) => run(provider.delete(key)) : void 0,
|
|
107
|
+
list: provider.list ? () => run(provider.list()) : void 0
|
|
108
|
+
});
|
|
109
|
+
var toEffectToolRegistry = (r) => ({
|
|
110
|
+
list: (filter) => fromPromiseDying(() => r.list(filter)),
|
|
111
|
+
schema: (toolId) => fromPromise(() => r.schema(toolId)),
|
|
112
|
+
definitions: () => fromPromiseDying(() => r.definitions()),
|
|
113
|
+
registerDefinitions: (defs) => fromPromiseDying(() => r.registerDefinitions(defs)),
|
|
114
|
+
registerRuntimeDefinitions: (defs) => fromPromiseDying(() => r.registerRuntimeDefinitions(defs)),
|
|
115
|
+
unregisterRuntimeDefinitions: (names) => fromPromiseDying(() => r.unregisterRuntimeDefinitions(names)),
|
|
116
|
+
registerInvoker: (pluginKey, effectInvoker) => fromPromiseDying(() => r.registerInvoker(pluginKey, toPromiseInvoker(effectInvoker))),
|
|
117
|
+
resolveAnnotations: (toolId) => fromPromiseDying(() => r.resolveAnnotations(toolId)),
|
|
118
|
+
invoke: (toolId, args, options) => fromPromise(
|
|
119
|
+
() => r.invoke(toolId, args, effectToPromiseInvokeOptions(options))
|
|
120
|
+
),
|
|
121
|
+
register: (tools) => fromPromiseDying(() => r.register(tools)),
|
|
122
|
+
registerRuntime: (tools) => fromPromiseDying(() => r.registerRuntime(tools)),
|
|
123
|
+
registerRuntimeHandler: (toolId, effectHandler) => fromPromiseDying(
|
|
124
|
+
() => r.registerRuntimeHandler(toolId, toPromiseRuntimeHandler(effectHandler))
|
|
125
|
+
),
|
|
126
|
+
unregisterRuntime: (toolIds) => fromPromiseDying(() => r.unregisterRuntime(toolIds)),
|
|
127
|
+
unregister: (toolIds) => fromPromiseDying(() => r.unregister(toolIds)),
|
|
128
|
+
unregisterBySource: (sourceId) => fromPromiseDying(() => r.unregisterBySource(sourceId))
|
|
129
|
+
});
|
|
130
|
+
var toEffectSourceRegistry = (r) => ({
|
|
131
|
+
addManager: (manager) => fromPromiseDying(() => r.addManager(toPromiseSourceManager(manager))),
|
|
132
|
+
registerRuntime: (source) => fromPromiseDying(() => r.registerRuntime(source)),
|
|
133
|
+
unregisterRuntime: (sourceId) => fromPromiseDying(() => r.unregisterRuntime(sourceId)),
|
|
134
|
+
list: () => fromPromiseDying(() => r.list()),
|
|
135
|
+
remove: (sourceId) => fromPromiseDying(() => r.remove(sourceId)),
|
|
136
|
+
refresh: (sourceId) => fromPromiseDying(() => r.refresh(sourceId)),
|
|
137
|
+
detect: (url) => fromPromiseDying(() => r.detect(url))
|
|
138
|
+
});
|
|
139
|
+
var toEffectSecretStore = (s) => ({
|
|
140
|
+
list: (scopeId) => fromPromiseDying(() => s.list(scopeId)),
|
|
141
|
+
get: (secretId) => fromPromise(() => s.get(secretId)),
|
|
142
|
+
resolve: (secretId, scopeId) => fromPromise(() => s.resolve(secretId, scopeId)),
|
|
143
|
+
status: (secretId, scopeId) => fromPromiseDying(() => s.status(secretId, scopeId)),
|
|
144
|
+
set: (input) => fromPromise(() => s.set(input)),
|
|
145
|
+
remove: (secretId) => fromPromise(() => s.remove(secretId)),
|
|
146
|
+
addProvider: (provider) => fromPromiseDying(() => s.addProvider(toPromiseSecretProvider(provider))),
|
|
147
|
+
providers: () => fromPromiseDying(() => s.providers())
|
|
148
|
+
});
|
|
149
|
+
var toEffectPolicyEngine = (p) => ({
|
|
150
|
+
list: (scopeId) => fromPromiseDying(() => p.list(scopeId)),
|
|
151
|
+
check: (input) => fromPromise(
|
|
152
|
+
() => p.check({ scopeId: input.scopeId, toolId: input.toolId })
|
|
153
|
+
),
|
|
154
|
+
add: (policy) => fromPromiseDying(() => p.add(policy)),
|
|
155
|
+
remove: (policyId) => fromPromiseDying(() => p.remove(policyId))
|
|
156
|
+
});
|
|
85
157
|
var wrapPluginContext = (ctx) => ({
|
|
86
158
|
scope: ctx.scope,
|
|
87
159
|
tools: {
|
|
@@ -166,10 +238,10 @@ var createExecutor2 = async (config = {}) => {
|
|
|
166
238
|
name: config.scope?.name ?? "default",
|
|
167
239
|
createdAt: /* @__PURE__ */ new Date()
|
|
168
240
|
},
|
|
169
|
-
tools: makeInMemoryToolRegistry(),
|
|
170
|
-
sources: makeInMemorySourceRegistry(),
|
|
171
|
-
secrets: makeInMemorySecretStore(),
|
|
172
|
-
policies: makeInMemoryPolicyEngine(),
|
|
241
|
+
tools: config.tools ? toEffectToolRegistry(config.tools) : makeInMemoryToolRegistry(),
|
|
242
|
+
sources: config.sources ? toEffectSourceRegistry(config.sources) : makeInMemorySourceRegistry(),
|
|
243
|
+
secrets: config.secrets ? toEffectSecretStore(config.secrets) : makeInMemorySecretStore(),
|
|
244
|
+
policies: config.policies ? toEffectPolicyEngine(config.policies) : makeInMemoryPolicyEngine(),
|
|
173
245
|
plugins: effectPlugins
|
|
174
246
|
};
|
|
175
247
|
const executor = await run(createExecutor(effectConfig));
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/promise-executor.ts"],"sourcesContent":["import { Context, Effect } from \"effect\";\n\nimport {\n createExecutor as createEffectExecutor,\n ElicitationResponse as ElicitationResponseClass,\n makeInMemoryToolRegistry,\n makeInMemorySecretStore,\n makeInMemoryPolicyEngine,\n makeInMemorySourceRegistry,\n ScopeId,\n type ToolRegistry as CoreToolRegistry,\n type SourceRegistry as CoreSourceRegistry,\n type SecretStore as CoreSecretStore,\n type PolicyEngine as CorePolicyEngine,\n type ExecutorConfig as EffectExecutorConfig,\n type ExecutorPlugin,\n type PluginContext as EffectPluginContext,\n type ElicitationContext,\n type InvokeOptions as EffectInvokeOptions,\n type ToolInvocationResult,\n type ToolMetadata,\n type ToolAnnotations,\n type ToolInvoker as EffectToolInvoker,\n type RuntimeToolHandler as EffectRuntimeToolHandler,\n type Source,\n type SourceDetectionResult,\n type SourceManager as EffectSourceManager,\n type Policy,\n type SecretRef,\n type SecretProvider as EffectSecretProvider,\n type SetSecretInput,\n type Scope,\n type ToolId,\n type SecretId,\n type ScopeId as ScopeIdType,\n type PolicyId,\n} from \"./index\";\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nconst run = <A, E>(effect: Effect.Effect<A, E>): Promise<A> =>\n Effect.runPromise(effect as Effect.Effect<A, never>);\n\nconst fromPromise = <A>(fn: () => Promise<A>): Effect.Effect<A, Error> =>\n Effect.tryPromise({ try: fn, catch: (e) => (e instanceof Error ? e : new Error(String(e))) });\n\n// ---------------------------------------------------------------------------\n// Type derivation — derive Promise-based SDK types from core Effect types\n// ---------------------------------------------------------------------------\n\n/** Replace branded IDs with plain strings in parameter types */\ntype UnbrandParam<T> =\n T extends ToolId ? string :\n T extends SecretId ? string :\n T extends ScopeIdType ? string :\n T extends PolicyId ? string :\n T extends readonly (infer U)[] ? readonly UnbrandParam<U>[] :\n T;\n\n/** Convert an Effect service interface to Promise-based, unbranding ID params */\ntype PromisifyService<T> = {\n readonly [K in keyof T]: NonNullable<T[K]> extends (...args: infer A) => Effect.Effect<infer R, infer _E>\n ? (...args: { [I in keyof A]: UnbrandParam<A[I]> }) => Promise<R>\n : T[K];\n};\n\ntype CoreToolRegistryService = Context.Tag.Service<typeof CoreToolRegistry>;\ntype CoreSourceRegistryService = Context.Tag.Service<typeof CoreSourceRegistry>;\ntype CoreSecretStoreService = Context.Tag.Service<typeof CoreSecretStore>;\ntype CorePolicyEngineService = Context.Tag.Service<typeof CorePolicyEngine>;\n\n// ---------------------------------------------------------------------------\n// Elicitation\n// ---------------------------------------------------------------------------\n\nexport interface ElicitationResponse {\n readonly action: \"accept\" | \"decline\" | \"cancel\";\n readonly content?: Record<string, unknown>;\n}\n\nexport type ElicitationHandler = (\n ctx: ElicitationContext,\n) => Promise<ElicitationResponse>;\n\nexport interface InvokeOptions {\n readonly onElicitation: ElicitationHandler | \"accept-all\";\n}\n\nconst toEffectElicitationHandler = (handler: ElicitationHandler) =>\n (ctx: ElicitationContext) =>\n Effect.tryPromise({\n try: () => handler(ctx),\n catch: (e) => e as Error,\n }).pipe(\n Effect.map(\n (r) =>\n new ElicitationResponseClass({\n action: r.action,\n content: r.content,\n }),\n ),\n Effect.catchAll((e) => Effect.die(e)),\n );\n\nconst toEffectInvokeOptions = (options: InvokeOptions): EffectInvokeOptions => ({\n onElicitation:\n options.onElicitation === \"accept-all\"\n ? (\"accept-all\" as const)\n : toEffectElicitationHandler(options.onElicitation),\n});\n\n// ---------------------------------------------------------------------------\n// Plugin callback types\n// ---------------------------------------------------------------------------\n\nexport interface ToolInvoker {\n readonly invoke: (toolId: string, args: unknown, options: InvokeOptions) => Promise<ToolInvocationResult>;\n readonly resolveAnnotations?: (toolId: string) => Promise<ToolAnnotations | undefined>;\n}\n\nexport interface RuntimeToolHandler {\n readonly invoke: (args: unknown, options: InvokeOptions) => Promise<ToolInvocationResult>;\n readonly resolveAnnotations?: () => Promise<ToolAnnotations | undefined>;\n}\n\nexport type SourceManager = PromisifyService<EffectSourceManager>;\n\nexport type SecretProvider = PromisifyService<EffectSecretProvider>;\n\n// --- Adapters ---\n\nconst effectToPromiseInvokeOptions = (options?: EffectInvokeOptions): InvokeOptions => {\n if (!options || options.onElicitation === \"accept-all\") return { onElicitation: \"accept-all\" };\n const handler = options.onElicitation;\n return {\n onElicitation: async (ctx) => {\n const r = await run(handler(ctx));\n return { action: r.action, content: r.content ?? undefined };\n },\n };\n};\n\nconst toEffectInvoker = (invoker: ToolInvoker): EffectToolInvoker => ({\n invoke: (toolId, args, options) =>\n fromPromise(() => invoker.invoke(toolId, args, effectToPromiseInvokeOptions(options))) as Effect.Effect<ToolInvocationResult, any>,\n resolveAnnotations: invoker.resolveAnnotations\n ? (toolId) => fromPromise(() => invoker.resolveAnnotations!(toolId)) as Effect.Effect<ToolAnnotations | undefined>\n : undefined,\n});\n\nconst toEffectRuntimeHandler = (handler: RuntimeToolHandler): EffectRuntimeToolHandler => ({\n invoke: (args, options) =>\n fromPromise(() => handler.invoke(args, effectToPromiseInvokeOptions(options))) as Effect.Effect<ToolInvocationResult, any>,\n resolveAnnotations: handler.resolveAnnotations\n ? () => fromPromise(() => handler.resolveAnnotations!()) as Effect.Effect<ToolAnnotations | undefined>\n : undefined,\n});\n\nconst toEffectSourceManager = (manager: SourceManager): EffectSourceManager => ({\n kind: manager.kind,\n list: () => fromPromise(() => manager.list()) as Effect.Effect<readonly Source[]>,\n remove: (sourceId) => fromPromise(() => manager.remove(sourceId)) as Effect.Effect<void>,\n refresh: manager.refresh ? (sourceId) => fromPromise(() => manager.refresh!(sourceId)) as Effect.Effect<void> : undefined,\n detect: manager.detect ? (url) => fromPromise(() => manager.detect!(url)) as Effect.Effect<SourceDetectionResult | null> : undefined,\n});\n\nconst toEffectSecretProvider = (provider: SecretProvider): EffectSecretProvider => ({\n key: provider.key,\n writable: provider.writable,\n get: (key) => fromPromise(() => provider.get(key)) as Effect.Effect<string | null>,\n set: provider.set ? (key, value) => fromPromise(() => provider.set!(key, value)) as Effect.Effect<void> : undefined,\n delete: provider.delete ? (key) => fromPromise(() => provider.delete!(key)) as Effect.Effect<boolean> : undefined,\n list: provider.list ? () => fromPromise(() => provider.list!()) as Effect.Effect<readonly { id: string; name: string }[]> : undefined,\n});\n\n// ---------------------------------------------------------------------------\n// Plugin context\n// ---------------------------------------------------------------------------\n\nexport interface PluginContext {\n readonly scope: Scope;\n readonly tools: ToolRegistry;\n readonly sources: SourceRegistry;\n readonly secrets: SecretStore;\n readonly policies: PolicyEngine;\n}\n\nexport interface ToolRegistry extends Omit<\n PromisifyService<CoreToolRegistryService>,\n 'list' | 'invoke' | 'registerInvoker' | 'registerRuntimeHandler'\n> {\n readonly list: (filter?: { sourceId?: string; query?: string }) => Promise<readonly ToolMetadata[]>;\n readonly invoke: (toolId: string, args: unknown, options: InvokeOptions) => Promise<ToolInvocationResult>;\n readonly registerInvoker: (pluginKey: string, invoker: ToolInvoker) => Promise<void>;\n readonly registerRuntimeHandler: (toolId: string, handler: RuntimeToolHandler) => Promise<void>;\n}\n\nexport interface SourceRegistry extends Omit<PromisifyService<CoreSourceRegistryService>, 'addManager'> {\n readonly addManager: (manager: SourceManager) => Promise<void>;\n}\n\nexport interface SecretStore extends Omit<PromisifyService<CoreSecretStoreService>, 'set' | 'addProvider'> {\n readonly set: (input: { readonly id: string; readonly scopeId: string; readonly name: string; readonly value: string; readonly provider?: string; readonly purpose?: string }) => Promise<SecretRef>;\n readonly addProvider: (provider: SecretProvider) => Promise<void>;\n}\n\nexport interface PolicyEngine extends Omit<PromisifyService<CorePolicyEngineService>, 'check'> {\n readonly check: (input: { scopeId: string; toolId: string }) => Promise<void>;\n}\n\nconst wrapPluginContext = (ctx: EffectPluginContext): PluginContext => ({\n scope: ctx.scope,\n tools: {\n list: (filter?) => run(ctx.tools.list(filter as any)),\n schema: (toolId) => run(ctx.tools.schema(toolId as ToolId)),\n invoke: (toolId, args, options) => run(ctx.tools.invoke(toolId as ToolId, args, toEffectInvokeOptions(options))),\n definitions: () => run(ctx.tools.definitions()),\n registerDefinitions: (defs) => run(ctx.tools.registerDefinitions(defs)),\n registerRuntimeDefinitions: (defs) => run(ctx.tools.registerRuntimeDefinitions(defs)),\n unregisterRuntimeDefinitions: (names) => run(ctx.tools.unregisterRuntimeDefinitions(names)),\n registerInvoker: (pluginKey, invoker) => run(ctx.tools.registerInvoker(pluginKey, toEffectInvoker(invoker))),\n resolveAnnotations: (toolId) => run(ctx.tools.resolveAnnotations(toolId as ToolId)),\n register: (tools) => run(ctx.tools.register(tools)),\n registerRuntime: (tools) => run(ctx.tools.registerRuntime(tools)),\n registerRuntimeHandler: (toolId, handler) => run(ctx.tools.registerRuntimeHandler(toolId as ToolId, toEffectRuntimeHandler(handler))),\n unregisterRuntime: (toolIds) => run(ctx.tools.unregisterRuntime(toolIds as readonly ToolId[])),\n unregister: (toolIds) => run(ctx.tools.unregister(toolIds as readonly ToolId[])),\n unregisterBySource: (sourceId) => run(ctx.tools.unregisterBySource(sourceId)),\n },\n sources: {\n addManager: (manager) => run(ctx.sources.addManager(toEffectSourceManager(manager))),\n registerRuntime: (source) => run(ctx.sources.registerRuntime(source)),\n unregisterRuntime: (sourceId) => run(ctx.sources.unregisterRuntime(sourceId)),\n list: () => run(ctx.sources.list()),\n remove: (sourceId) => run(ctx.sources.remove(sourceId)),\n refresh: (sourceId) => run(ctx.sources.refresh(sourceId)),\n detect: (url) => run(ctx.sources.detect(url)),\n },\n secrets: {\n list: (scopeId) => run(ctx.secrets.list(scopeId as ScopeIdType)),\n get: (secretId) => run(ctx.secrets.get(secretId as SecretId)),\n resolve: (secretId, scopeId) => run(ctx.secrets.resolve(secretId as SecretId, scopeId as ScopeIdType)),\n status: (secretId, scopeId) => run(ctx.secrets.status(secretId as SecretId, scopeId as ScopeIdType)),\n set: (input) => run(ctx.secrets.set(input as SetSecretInput)),\n remove: (secretId) => run(ctx.secrets.remove(secretId as SecretId)),\n addProvider: (provider) => run(ctx.secrets.addProvider(toEffectSecretProvider(provider))),\n providers: () => run(ctx.secrets.providers()),\n },\n policies: {\n list: (scopeId) => run(ctx.policies.list(scopeId as ScopeIdType)),\n check: (input) => run(ctx.policies.check(input as any)),\n add: (policy) => run(ctx.policies.add(policy)),\n remove: (policyId) => run(ctx.policies.remove(policyId as PolicyId)),\n },\n});\n\n// ---------------------------------------------------------------------------\n// Plugin definition\n// ---------------------------------------------------------------------------\n\nexport interface Plugin<TKey extends string = string, TExtension extends object = object> {\n readonly key: TKey;\n /** @internal */\n readonly _promise?: true;\n readonly init: (ctx: PluginContext) => Promise<PluginHandle<TExtension>>;\n}\n\nexport interface PluginHandle<TExtension extends object = object> {\n readonly extension: TExtension;\n readonly close?: () => Promise<void>;\n}\n\nexport const definePlugin = <const TKey extends string, TExtension extends object>(\n plugin: Plugin<TKey, TExtension>,\n): Plugin<TKey, TExtension> => ({ ...plugin, _promise: true as const });\n\nconst isPromisePlugin = (plugin: { _promise?: boolean }): boolean => plugin._promise === true;\n\nconst toEffectPlugin = <TKey extends string, TExtension extends object>(\n plugin: Plugin<TKey, TExtension>,\n): ExecutorPlugin<TKey, TExtension> => ({\n key: plugin.key,\n init: (ctx) =>\n fromPromise(async () => {\n const handle = await plugin.init(wrapPluginContext(ctx));\n return {\n extension: handle.extension,\n close: handle.close ? () => fromPromise(() => handle.close!()) as Effect.Effect<void> : undefined,\n };\n }) as Effect.Effect<any, Error>,\n});\n\n// ---------------------------------------------------------------------------\n// Executor type\n// ---------------------------------------------------------------------------\n\ntype Promisified<T> = T extends (...args: infer A) => Effect.Effect<infer R, infer _E>\n ? (...args: A) => Promise<R>\n : T extends object ? { readonly [K in keyof T]: Promisified<T[K]> } : T;\n\nexport type AnyPlugin = Plugin<string, object> | ExecutorPlugin<string, object>;\n\nexport type Executor<TPlugins extends readonly AnyPlugin[] = []> = {\n readonly scope: Scope;\n readonly tools: Pick<ToolRegistry, 'list' | 'schema' | 'definitions' | 'invoke'>;\n readonly sources: Pick<SourceRegistry, 'list' | 'remove' | 'refresh' | 'detect'>;\n readonly policies: {\n readonly list: () => Promise<readonly Policy[]>;\n readonly add: (policy: Omit<Policy, \"id\" | \"createdAt\">) => Promise<Policy>;\n readonly remove: (policyId: string) => Promise<boolean>;\n };\n readonly secrets: {\n readonly list: () => Promise<readonly SecretRef[]>;\n readonly resolve: (secretId: string) => Promise<string>;\n readonly status: (secretId: string) => Promise<\"resolved\" | \"missing\">;\n readonly set: (input: { readonly id: string; readonly name: string; readonly value: string; readonly provider?: string; readonly purpose?: string }) => Promise<SecretRef>;\n readonly remove: (secretId: string) => Promise<boolean>;\n readonly addProvider: (provider: SecretProvider) => Promise<void>;\n readonly providers: () => Promise<readonly string[]>;\n };\n readonly close: () => Promise<void>;\n} & PluginExtensions<TPlugins>;\n\ntype PluginExtensions<TPlugins extends readonly AnyPlugin[]> = {\n readonly [P in TPlugins[number] as P[\"key\"]]: P extends Plugin<string, infer TExt>\n ? TExt\n : P extends ExecutorPlugin<string, infer TExt> ? Promisified<TExt> : never;\n};\n\nfunction promisifyObject<T extends object>(obj: T): Promisified<T> {\n return new Proxy(obj, {\n get(target, prop, receiver) {\n const value = Reflect.get(target, prop, receiver);\n if (typeof value === \"function\") {\n return (...args: unknown[]) => {\n const result = value.apply(target, args);\n if (Effect.isEffect(result)) return run(result as Effect.Effect<unknown, unknown>);\n return result;\n };\n }\n if (value !== null && typeof value === \"object\" && !Array.isArray(value)) return promisifyObject(value as object);\n return value;\n },\n }) as Promisified<T>;\n}\n\n// ---------------------------------------------------------------------------\n// Config & createExecutor\n// ---------------------------------------------------------------------------\n\nexport interface ExecutorConfig<TPlugins extends readonly AnyPlugin[] = []> {\n readonly scope?: { readonly id?: string; readonly name?: string };\n readonly plugins?: TPlugins;\n}\n\nconst KNOWN_KEYS = new Set([\"scope\", \"tools\", \"sources\", \"policies\", \"secrets\", \"close\"]);\n\nexport const createExecutor = async <const TPlugins extends readonly AnyPlugin[] = []>(\n config: ExecutorConfig<TPlugins> = {},\n): Promise<Executor<TPlugins>> => {\n const effectPlugins = (config.plugins ?? []).map((p) =>\n isPromisePlugin(p as any)\n ? toEffectPlugin(p as Plugin<string, object>)\n : (p as unknown as ExecutorPlugin<string, object>),\n );\n\n const effectConfig: EffectExecutorConfig<ExecutorPlugin<string, object>[]> = {\n scope: {\n id: ScopeId.make(config.scope?.id ?? \"default\"),\n name: config.scope?.name ?? \"default\",\n createdAt: new Date(),\n },\n tools: makeInMemoryToolRegistry(),\n sources: makeInMemorySourceRegistry(),\n secrets: makeInMemorySecretStore(),\n policies: makeInMemoryPolicyEngine(),\n plugins: effectPlugins,\n };\n\n const executor = await run(createEffectExecutor(effectConfig));\n\n const base: Record<string, unknown> = {\n scope: executor.scope,\n tools: {\n list: (filter?: { sourceId?: string; query?: string }) => run(executor.tools.list(filter as any)),\n schema: (toolId: string) => run(executor.tools.schema(toolId)),\n definitions: () => run(executor.tools.definitions()),\n invoke: (toolId: string, args: unknown, options: InvokeOptions) =>\n run(executor.tools.invoke(toolId, args, toEffectInvokeOptions(options))),\n },\n sources: {\n list: () => run(executor.sources.list()),\n remove: (sourceId: string) => run(executor.sources.remove(sourceId)),\n refresh: (sourceId: string) => run(executor.sources.refresh(sourceId)),\n detect: (url: string) => run(executor.sources.detect(url)),\n },\n policies: {\n list: () => run(executor.policies.list()),\n add: (policy: Omit<Policy, \"id\" | \"createdAt\">) => run(executor.policies.add(policy)),\n remove: (policyId: string) => run(executor.policies.remove(policyId)),\n },\n secrets: {\n list: () => run(executor.secrets.list()),\n resolve: (secretId: string) => run(executor.secrets.resolve(secretId as SecretId)),\n status: (secretId: string) => run(executor.secrets.status(secretId as SecretId)),\n set: (input: { readonly id: string; readonly name: string; readonly value: string; readonly provider?: string; readonly purpose?: string }) =>\n run(executor.secrets.set(input as any)),\n remove: (secretId: string) => run(executor.secrets.remove(secretId as SecretId)),\n addProvider: (provider: SecretProvider) => run(executor.secrets.addProvider(toEffectSecretProvider(provider))),\n providers: () => run(executor.secrets.providers()),\n },\n close: () => run(executor.close()),\n };\n\n for (const key of Object.keys(executor)) {\n if (!KNOWN_KEYS.has(key)) {\n const ext = (executor as Record<string, unknown>)[key];\n if (ext !== null && typeof ext === \"object\") base[key] = promisifyObject(ext as object);\n else base[key] = ext;\n }\n }\n\n return base as Executor<TPlugins>;\n};\n"],"mappings":"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","names":["createExecutor"]}
|
|
1
|
+
{"version":3,"sources":["../src/promise-executor.ts"],"sourcesContent":["import { Context, Effect } from \"effect\";\n\nimport {\n createExecutor as createEffectExecutor,\n ElicitationResponse as ElicitationResponseClass,\n makeInMemoryToolRegistry,\n makeInMemorySecretStore,\n makeInMemoryPolicyEngine,\n makeInMemorySourceRegistry,\n ScopeId,\n type ToolRegistry as CoreToolRegistry,\n type SourceRegistry as CoreSourceRegistry,\n type SecretStore as CoreSecretStore,\n type PolicyEngine as CorePolicyEngine,\n type ExecutorConfig as EffectExecutorConfig,\n type ExecutorPlugin,\n type PluginContext as EffectPluginContext,\n type ElicitationContext,\n type InvokeOptions as EffectInvokeOptions,\n type ToolInvocationResult,\n type ToolMetadata,\n type ToolAnnotations,\n type ToolSchema,\n type ToolInvoker as EffectToolInvoker,\n type RuntimeToolHandler as EffectRuntimeToolHandler,\n type Source,\n type SourceDetectionResult,\n type SourceManager as EffectSourceManager,\n type Policy,\n type SecretRef,\n type SecretProvider as EffectSecretProvider,\n type SetSecretInput,\n type Scope,\n type ToolId,\n type SecretId,\n type ScopeId as ScopeIdType,\n type PolicyId,\n type ToolNotFoundError,\n type ToolInvocationError,\n type SecretNotFoundError,\n type SecretResolutionError,\n type PolicyDeniedError,\n type ElicitationDeclinedError,\n} from \"./index\";\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nconst run = <A, E>(effect: Effect.Effect<A, E>): Promise<A> =>\n Effect.runPromise(effect as Effect.Effect<A, never>);\n\nconst fromPromise = <A>(fn: () => Promise<A>): Effect.Effect<A, Error> =>\n Effect.tryPromise({ try: fn, catch: (e) => (e instanceof Error ? e : new Error(String(e))) });\n\n/**\n * Wrap a promise-returning function as an Effect whose error channel is\n * `never`. Unexpected rejections become unhandled defects. Used by the store\n * adapters where the Effect-layer service interface forbids a typed error\n * channel.\n */\nconst fromPromiseDying = <A>(fn: () => Promise<A>): Effect.Effect<A, never> =>\n Effect.orDie(fromPromise(fn));\n\n// ---------------------------------------------------------------------------\n// Type derivation — derive Promise-based SDK types from core Effect types\n// ---------------------------------------------------------------------------\n\n/** Replace branded IDs with plain strings in parameter types */\ntype UnbrandParam<T> =\n T extends ToolId ? string :\n T extends SecretId ? string :\n T extends ScopeIdType ? string :\n T extends PolicyId ? string :\n T extends readonly (infer U)[] ? readonly UnbrandParam<U>[] :\n T;\n\n/** Convert an Effect service interface to Promise-based, unbranding ID params */\ntype PromisifyService<T> = {\n readonly [K in keyof T]: NonNullable<T[K]> extends (...args: infer A) => Effect.Effect<infer R, infer _E>\n ? (...args: { [I in keyof A]: UnbrandParam<A[I]> }) => Promise<R>\n : T[K];\n};\n\ntype CoreToolRegistryService = Context.Tag.Service<typeof CoreToolRegistry>;\ntype CoreSourceRegistryService = Context.Tag.Service<typeof CoreSourceRegistry>;\ntype CoreSecretStoreService = Context.Tag.Service<typeof CoreSecretStore>;\ntype CorePolicyEngineService = Context.Tag.Service<typeof CorePolicyEngine>;\n\n// ---------------------------------------------------------------------------\n// Elicitation\n// ---------------------------------------------------------------------------\n\nexport interface ElicitationResponse {\n readonly action: \"accept\" | \"decline\" | \"cancel\";\n readonly content?: Record<string, unknown>;\n}\n\nexport type ElicitationHandler = (\n ctx: ElicitationContext,\n) => Promise<ElicitationResponse>;\n\nexport interface InvokeOptions {\n readonly onElicitation: ElicitationHandler | \"accept-all\";\n}\n\nconst toEffectElicitationHandler = (handler: ElicitationHandler) =>\n (ctx: ElicitationContext) =>\n Effect.tryPromise({\n try: () => handler(ctx),\n catch: (e) => e as Error,\n }).pipe(\n Effect.map(\n (r) =>\n new ElicitationResponseClass({\n action: r.action,\n content: r.content,\n }),\n ),\n Effect.catchAll((e) => Effect.die(e)),\n );\n\nconst toEffectInvokeOptions = (options: InvokeOptions): EffectInvokeOptions => ({\n onElicitation:\n options.onElicitation === \"accept-all\"\n ? (\"accept-all\" as const)\n : toEffectElicitationHandler(options.onElicitation),\n});\n\n// ---------------------------------------------------------------------------\n// Plugin callback types\n// ---------------------------------------------------------------------------\n\nexport interface ToolInvoker {\n readonly invoke: (toolId: string, args: unknown, options: InvokeOptions) => Promise<ToolInvocationResult>;\n readonly resolveAnnotations?: (toolId: string) => Promise<ToolAnnotations | undefined>;\n}\n\nexport interface RuntimeToolHandler {\n readonly invoke: (args: unknown, options: InvokeOptions) => Promise<ToolInvocationResult>;\n readonly resolveAnnotations?: () => Promise<ToolAnnotations | undefined>;\n}\n\nexport type SourceManager = PromisifyService<EffectSourceManager>;\n\nexport type SecretProvider = PromisifyService<EffectSecretProvider>;\n\n// --- Adapters ---\n\nconst effectToPromiseInvokeOptions = (options?: EffectInvokeOptions): InvokeOptions => {\n if (!options || options.onElicitation === \"accept-all\") return { onElicitation: \"accept-all\" };\n const handler = options.onElicitation;\n return {\n onElicitation: async (ctx) => {\n const r = await run(handler(ctx));\n return { action: r.action, content: r.content ?? undefined };\n },\n };\n};\n\nconst toEffectInvoker = (invoker: ToolInvoker): EffectToolInvoker => ({\n invoke: (toolId, args, options) =>\n fromPromise(() => invoker.invoke(toolId, args, effectToPromiseInvokeOptions(options))) as Effect.Effect<ToolInvocationResult, any>,\n resolveAnnotations: invoker.resolveAnnotations\n ? (toolId) => fromPromise(() => invoker.resolveAnnotations!(toolId)) as Effect.Effect<ToolAnnotations | undefined>\n : undefined,\n});\n\nconst toEffectRuntimeHandler = (handler: RuntimeToolHandler): EffectRuntimeToolHandler => ({\n invoke: (args, options) =>\n fromPromise(() => handler.invoke(args, effectToPromiseInvokeOptions(options))) as Effect.Effect<ToolInvocationResult, any>,\n resolveAnnotations: handler.resolveAnnotations\n ? () => fromPromise(() => handler.resolveAnnotations!()) as Effect.Effect<ToolAnnotations | undefined>\n : undefined,\n});\n\nconst toEffectSourceManager = (manager: SourceManager): EffectSourceManager => ({\n kind: manager.kind,\n list: () => fromPromise(() => manager.list()) as Effect.Effect<readonly Source[]>,\n remove: (sourceId) => fromPromise(() => manager.remove(sourceId)) as Effect.Effect<void>,\n refresh: manager.refresh ? (sourceId) => fromPromise(() => manager.refresh!(sourceId)) as Effect.Effect<void> : undefined,\n detect: manager.detect ? (url) => fromPromise(() => manager.detect!(url)) as Effect.Effect<SourceDetectionResult | null> : undefined,\n});\n\nconst toEffectSecretProvider = (provider: SecretProvider): EffectSecretProvider => ({\n key: provider.key,\n writable: provider.writable,\n get: (key) => fromPromise(() => provider.get(key)) as Effect.Effect<string | null>,\n set: provider.set ? (key, value) => fromPromise(() => provider.set!(key, value)) as Effect.Effect<void> : undefined,\n delete: provider.delete ? (key) => fromPromise(() => provider.delete!(key)) as Effect.Effect<boolean> : undefined,\n list: provider.list ? () => fromPromise(() => provider.list!()) as Effect.Effect<readonly { id: string; name: string }[]> : undefined,\n});\n\n// --- Reverse adapters (Effect -> Promise) for callbacks handed to user stores ---\n//\n// When the Effect core hands us an Effect-shaped ToolInvoker / ToolHandler /\n// SourceManager / SecretProvider (e.g. from a plugin), we need to convert it\n// into the promise-shaped equivalent before passing it to a user-supplied\n// promise-based store implementation.\n\nconst toPromiseInvoker = (invoker: EffectToolInvoker): ToolInvoker => ({\n invoke: (toolId, args, options) =>\n run(invoker.invoke(toolId as ToolId, args, toEffectInvokeOptions(options))) as Promise<ToolInvocationResult>,\n resolveAnnotations: invoker.resolveAnnotations\n ? (toolId) => run(invoker.resolveAnnotations!(toolId as ToolId))\n : undefined,\n});\n\nconst toPromiseRuntimeHandler = (handler: EffectRuntimeToolHandler): RuntimeToolHandler => ({\n invoke: (args, options) =>\n run(handler.invoke(args, toEffectInvokeOptions(options))) as Promise<ToolInvocationResult>,\n resolveAnnotations: handler.resolveAnnotations\n ? () => run(handler.resolveAnnotations!())\n : undefined,\n});\n\nconst toPromiseSourceManager = (manager: EffectSourceManager): SourceManager => ({\n kind: manager.kind,\n list: () => run(manager.list()),\n remove: (sourceId) => run(manager.remove(sourceId)),\n refresh: manager.refresh ? (sourceId) => run(manager.refresh!(sourceId)) : undefined,\n detect: manager.detect ? (url) => run(manager.detect!(url)) : undefined,\n});\n\nconst toPromiseSecretProvider = (provider: EffectSecretProvider): SecretProvider => ({\n key: provider.key,\n writable: provider.writable,\n get: (key) => run(provider.get(key)),\n set: provider.set ? (key, value) => run(provider.set!(key, value)) : undefined,\n delete: provider.delete ? (key) => run(provider.delete!(key)) : undefined,\n list: provider.list ? () => run(provider.list!()) : undefined,\n});\n\n// --- Main store adapters (Promise -> Effect) ---\n//\n// Users implementing a pluggable store (e.g. a Postgres-backed tool registry)\n// write against the promise-shaped ToolRegistry / SourceRegistry / SecretStore\n// / PolicyEngine interfaces declared below. These adapters wrap the user impl\n// so the Effect core layer sees a native Effect service.\n\nconst toEffectToolRegistry = (r: ToolRegistry): CoreToolRegistryService => ({\n list: (filter) => fromPromiseDying(() => r.list(filter)),\n schema: (toolId) =>\n fromPromise(() => r.schema(toolId)) as Effect.Effect<ToolSchema, ToolNotFoundError>,\n definitions: () => fromPromiseDying(() => r.definitions()),\n registerDefinitions: (defs) => fromPromiseDying(() => r.registerDefinitions(defs)),\n registerRuntimeDefinitions: (defs) =>\n fromPromiseDying(() => r.registerRuntimeDefinitions(defs)),\n unregisterRuntimeDefinitions: (names) =>\n fromPromiseDying(() => r.unregisterRuntimeDefinitions(names)),\n registerInvoker: (pluginKey, effectInvoker) =>\n fromPromiseDying(() => r.registerInvoker(pluginKey, toPromiseInvoker(effectInvoker))),\n resolveAnnotations: (toolId) =>\n fromPromiseDying(() => r.resolveAnnotations(toolId)),\n invoke: (toolId, args, options) =>\n fromPromise(() =>\n r.invoke(toolId, args, effectToPromiseInvokeOptions(options)),\n ) as Effect.Effect<\n ToolInvocationResult,\n ToolNotFoundError | ToolInvocationError | ElicitationDeclinedError\n >,\n register: (tools) => fromPromiseDying(() => r.register(tools)),\n registerRuntime: (tools) => fromPromiseDying(() => r.registerRuntime(tools)),\n registerRuntimeHandler: (toolId, effectHandler) =>\n fromPromiseDying(() =>\n r.registerRuntimeHandler(toolId, toPromiseRuntimeHandler(effectHandler)),\n ),\n unregisterRuntime: (toolIds) => fromPromiseDying(() => r.unregisterRuntime(toolIds)),\n unregister: (toolIds) => fromPromiseDying(() => r.unregister(toolIds)),\n unregisterBySource: (sourceId) => fromPromiseDying(() => r.unregisterBySource(sourceId)),\n});\n\nconst toEffectSourceRegistry = (r: SourceRegistry): CoreSourceRegistryService => ({\n addManager: (manager) =>\n fromPromiseDying(() => r.addManager(toPromiseSourceManager(manager))),\n registerRuntime: (source) => fromPromiseDying(() => r.registerRuntime(source)),\n unregisterRuntime: (sourceId) => fromPromiseDying(() => r.unregisterRuntime(sourceId)),\n list: () => fromPromiseDying(() => r.list()),\n remove: (sourceId) => fromPromiseDying(() => r.remove(sourceId)),\n refresh: (sourceId) => fromPromiseDying(() => r.refresh(sourceId)),\n detect: (url) => fromPromiseDying(() => r.detect(url)),\n});\n\nconst toEffectSecretStore = (s: SecretStore): CoreSecretStoreService => ({\n list: (scopeId) => fromPromiseDying(() => s.list(scopeId)),\n get: (secretId) =>\n fromPromise(() => s.get(secretId)) as Effect.Effect<SecretRef, SecretNotFoundError>,\n resolve: (secretId, scopeId) =>\n fromPromise(() => s.resolve(secretId, scopeId)) as Effect.Effect<\n string,\n SecretNotFoundError | SecretResolutionError\n >,\n status: (secretId, scopeId) =>\n fromPromiseDying(() => s.status(secretId, scopeId)),\n set: (input) =>\n fromPromise(() => s.set(input)) as Effect.Effect<SecretRef, SecretResolutionError>,\n remove: (secretId) =>\n fromPromise(() => s.remove(secretId)) as Effect.Effect<boolean, SecretNotFoundError>,\n addProvider: (provider) =>\n fromPromiseDying(() => s.addProvider(toPromiseSecretProvider(provider))),\n providers: () => fromPromiseDying(() => s.providers()),\n});\n\nconst toEffectPolicyEngine = (p: PolicyEngine): CorePolicyEngineService => ({\n list: (scopeId) => fromPromiseDying(() => p.list(scopeId)),\n check: (input) =>\n fromPromise(() =>\n p.check({ scopeId: input.scopeId, toolId: input.toolId }),\n ) as Effect.Effect<void, PolicyDeniedError>,\n add: (policy) => fromPromiseDying(() => p.add(policy)),\n remove: (policyId) => fromPromiseDying(() => p.remove(policyId)),\n});\n\n// ---------------------------------------------------------------------------\n// Plugin context\n// ---------------------------------------------------------------------------\n\nexport interface PluginContext {\n readonly scope: Scope;\n readonly tools: ToolRegistry;\n readonly sources: SourceRegistry;\n readonly secrets: SecretStore;\n readonly policies: PolicyEngine;\n}\n\nexport interface ToolRegistry extends Omit<\n PromisifyService<CoreToolRegistryService>,\n 'list' | 'invoke' | 'registerInvoker' | 'registerRuntimeHandler'\n> {\n readonly list: (filter?: { sourceId?: string; query?: string }) => Promise<readonly ToolMetadata[]>;\n readonly invoke: (toolId: string, args: unknown, options: InvokeOptions) => Promise<ToolInvocationResult>;\n readonly registerInvoker: (pluginKey: string, invoker: ToolInvoker) => Promise<void>;\n readonly registerRuntimeHandler: (toolId: string, handler: RuntimeToolHandler) => Promise<void>;\n}\n\nexport interface SourceRegistry extends Omit<PromisifyService<CoreSourceRegistryService>, 'addManager'> {\n readonly addManager: (manager: SourceManager) => Promise<void>;\n}\n\nexport interface SecretStore extends Omit<PromisifyService<CoreSecretStoreService>, 'set' | 'addProvider'> {\n readonly set: (input: { readonly id: string; readonly scopeId: string; readonly name: string; readonly value: string; readonly provider?: string; readonly purpose?: string }) => Promise<SecretRef>;\n readonly addProvider: (provider: SecretProvider) => Promise<void>;\n}\n\nexport interface PolicyEngine extends Omit<PromisifyService<CorePolicyEngineService>, 'check'> {\n readonly check: (input: { scopeId: string; toolId: string }) => Promise<void>;\n}\n\nconst wrapPluginContext = (ctx: EffectPluginContext): PluginContext => ({\n scope: ctx.scope,\n tools: {\n list: (filter?) => run(ctx.tools.list(filter as any)),\n schema: (toolId) => run(ctx.tools.schema(toolId as ToolId)),\n invoke: (toolId, args, options) => run(ctx.tools.invoke(toolId as ToolId, args, toEffectInvokeOptions(options))),\n definitions: () => run(ctx.tools.definitions()),\n registerDefinitions: (defs) => run(ctx.tools.registerDefinitions(defs)),\n registerRuntimeDefinitions: (defs) => run(ctx.tools.registerRuntimeDefinitions(defs)),\n unregisterRuntimeDefinitions: (names) => run(ctx.tools.unregisterRuntimeDefinitions(names)),\n registerInvoker: (pluginKey, invoker) => run(ctx.tools.registerInvoker(pluginKey, toEffectInvoker(invoker))),\n resolveAnnotations: (toolId) => run(ctx.tools.resolveAnnotations(toolId as ToolId)),\n register: (tools) => run(ctx.tools.register(tools)),\n registerRuntime: (tools) => run(ctx.tools.registerRuntime(tools)),\n registerRuntimeHandler: (toolId, handler) => run(ctx.tools.registerRuntimeHandler(toolId as ToolId, toEffectRuntimeHandler(handler))),\n unregisterRuntime: (toolIds) => run(ctx.tools.unregisterRuntime(toolIds as readonly ToolId[])),\n unregister: (toolIds) => run(ctx.tools.unregister(toolIds as readonly ToolId[])),\n unregisterBySource: (sourceId) => run(ctx.tools.unregisterBySource(sourceId)),\n },\n sources: {\n addManager: (manager) => run(ctx.sources.addManager(toEffectSourceManager(manager))),\n registerRuntime: (source) => run(ctx.sources.registerRuntime(source)),\n unregisterRuntime: (sourceId) => run(ctx.sources.unregisterRuntime(sourceId)),\n list: () => run(ctx.sources.list()),\n remove: (sourceId) => run(ctx.sources.remove(sourceId)),\n refresh: (sourceId) => run(ctx.sources.refresh(sourceId)),\n detect: (url) => run(ctx.sources.detect(url)),\n },\n secrets: {\n list: (scopeId) => run(ctx.secrets.list(scopeId as ScopeIdType)),\n get: (secretId) => run(ctx.secrets.get(secretId as SecretId)),\n resolve: (secretId, scopeId) => run(ctx.secrets.resolve(secretId as SecretId, scopeId as ScopeIdType)),\n status: (secretId, scopeId) => run(ctx.secrets.status(secretId as SecretId, scopeId as ScopeIdType)),\n set: (input) => run(ctx.secrets.set(input as SetSecretInput)),\n remove: (secretId) => run(ctx.secrets.remove(secretId as SecretId)),\n addProvider: (provider) => run(ctx.secrets.addProvider(toEffectSecretProvider(provider))),\n providers: () => run(ctx.secrets.providers()),\n },\n policies: {\n list: (scopeId) => run(ctx.policies.list(scopeId as ScopeIdType)),\n check: (input) => run(ctx.policies.check(input as any)),\n add: (policy) => run(ctx.policies.add(policy)),\n remove: (policyId) => run(ctx.policies.remove(policyId as PolicyId)),\n },\n});\n\n// ---------------------------------------------------------------------------\n// Plugin definition\n// ---------------------------------------------------------------------------\n\nexport interface Plugin<TKey extends string = string, TExtension extends object = object> {\n readonly key: TKey;\n /** @internal */\n readonly _promise?: true;\n readonly init: (ctx: PluginContext) => Promise<PluginHandle<TExtension>>;\n}\n\nexport interface PluginHandle<TExtension extends object = object> {\n readonly extension: TExtension;\n readonly close?: () => Promise<void>;\n}\n\nexport const definePlugin = <const TKey extends string, TExtension extends object>(\n plugin: Plugin<TKey, TExtension>,\n): Plugin<TKey, TExtension> => ({ ...plugin, _promise: true as const });\n\nconst isPromisePlugin = (plugin: { _promise?: boolean }): boolean => plugin._promise === true;\n\nconst toEffectPlugin = <TKey extends string, TExtension extends object>(\n plugin: Plugin<TKey, TExtension>,\n): ExecutorPlugin<TKey, TExtension> => ({\n key: plugin.key,\n init: (ctx) =>\n fromPromise(async () => {\n const handle = await plugin.init(wrapPluginContext(ctx));\n return {\n extension: handle.extension,\n close: handle.close ? () => fromPromise(() => handle.close!()) as Effect.Effect<void> : undefined,\n };\n }) as Effect.Effect<any, Error>,\n});\n\n// ---------------------------------------------------------------------------\n// Executor type\n// ---------------------------------------------------------------------------\n\ntype Promisified<T> = T extends (...args: infer A) => Effect.Effect<infer R, infer _E>\n ? (...args: A) => Promise<R>\n : T extends object ? { readonly [K in keyof T]: Promisified<T[K]> } : T;\n\nexport type AnyPlugin = Plugin<string, object> | ExecutorPlugin<string, object>;\n\nexport type Executor<TPlugins extends readonly AnyPlugin[] = []> = {\n readonly scope: Scope;\n readonly tools: Pick<ToolRegistry, 'list' | 'schema' | 'definitions' | 'invoke'>;\n readonly sources: Pick<SourceRegistry, 'list' | 'remove' | 'refresh' | 'detect'>;\n readonly policies: {\n readonly list: () => Promise<readonly Policy[]>;\n readonly add: (policy: Omit<Policy, \"id\" | \"createdAt\">) => Promise<Policy>;\n readonly remove: (policyId: string) => Promise<boolean>;\n };\n readonly secrets: {\n readonly list: () => Promise<readonly SecretRef[]>;\n readonly resolve: (secretId: string) => Promise<string>;\n readonly status: (secretId: string) => Promise<\"resolved\" | \"missing\">;\n readonly set: (input: { readonly id: string; readonly name: string; readonly value: string; readonly provider?: string; readonly purpose?: string }) => Promise<SecretRef>;\n readonly remove: (secretId: string) => Promise<boolean>;\n readonly addProvider: (provider: SecretProvider) => Promise<void>;\n readonly providers: () => Promise<readonly string[]>;\n };\n readonly close: () => Promise<void>;\n} & PluginExtensions<TPlugins>;\n\ntype PluginExtensions<TPlugins extends readonly AnyPlugin[]> = {\n readonly [P in TPlugins[number] as P[\"key\"]]: P extends Plugin<string, infer TExt>\n ? TExt\n : P extends ExecutorPlugin<string, infer TExt> ? Promisified<TExt> : never;\n};\n\nfunction promisifyObject<T extends object>(obj: T): Promisified<T> {\n return new Proxy(obj, {\n get(target, prop, receiver) {\n const value = Reflect.get(target, prop, receiver);\n if (typeof value === \"function\") {\n return (...args: unknown[]) => {\n const result = value.apply(target, args);\n if (Effect.isEffect(result)) return run(result as Effect.Effect<unknown, unknown>);\n return result;\n };\n }\n if (value !== null && typeof value === \"object\" && !Array.isArray(value)) return promisifyObject(value as object);\n return value;\n },\n }) as Promisified<T>;\n}\n\n// ---------------------------------------------------------------------------\n// Config & createExecutor\n// ---------------------------------------------------------------------------\n\nexport interface ExecutorConfig<TPlugins extends readonly AnyPlugin[] = []> {\n readonly scope?: { readonly id?: string; readonly name?: string };\n readonly plugins?: TPlugins;\n /**\n * Custom tool registry implementation. Defaults to an in-memory store.\n * Implement the promise-shaped `ToolRegistry` interface to persist tool\n * metadata to a database, remote service, etc.\n */\n readonly tools?: ToolRegistry;\n /** Custom source registry implementation. Defaults to an in-memory store. */\n readonly sources?: SourceRegistry;\n /**\n * Custom secret store implementation. Defaults to an in-memory store.\n * For most use cases, prefer passing a custom `SecretProvider` via\n * `executor.secrets.addProvider(...)` — only replace the whole store if you\n * need to persist the `SecretRef` metadata itself.\n */\n readonly secrets?: SecretStore;\n /** Custom policy engine implementation. Defaults to an in-memory store. */\n readonly policies?: PolicyEngine;\n}\n\nconst KNOWN_KEYS = new Set([\"scope\", \"tools\", \"sources\", \"policies\", \"secrets\", \"close\"]);\n\nexport const createExecutor = async <const TPlugins extends readonly AnyPlugin[] = []>(\n config: ExecutorConfig<TPlugins> = {},\n): Promise<Executor<TPlugins>> => {\n const effectPlugins = (config.plugins ?? []).map((p) =>\n isPromisePlugin(p as any)\n ? toEffectPlugin(p as Plugin<string, object>)\n : (p as unknown as ExecutorPlugin<string, object>),\n );\n\n const effectConfig: EffectExecutorConfig<ExecutorPlugin<string, object>[]> = {\n scope: {\n id: ScopeId.make(config.scope?.id ?? \"default\"),\n name: config.scope?.name ?? \"default\",\n createdAt: new Date(),\n },\n tools: config.tools ? toEffectToolRegistry(config.tools) : makeInMemoryToolRegistry(),\n sources: config.sources\n ? toEffectSourceRegistry(config.sources)\n : makeInMemorySourceRegistry(),\n secrets: config.secrets ? toEffectSecretStore(config.secrets) : makeInMemorySecretStore(),\n policies: config.policies\n ? toEffectPolicyEngine(config.policies)\n : makeInMemoryPolicyEngine(),\n plugins: effectPlugins,\n };\n\n const executor = await run(createEffectExecutor(effectConfig));\n\n const base: Record<string, unknown> = {\n scope: executor.scope,\n tools: {\n list: (filter?: { sourceId?: string; query?: string }) => run(executor.tools.list(filter as any)),\n schema: (toolId: string) => run(executor.tools.schema(toolId)),\n definitions: () => run(executor.tools.definitions()),\n invoke: (toolId: string, args: unknown, options: InvokeOptions) =>\n run(executor.tools.invoke(toolId, args, toEffectInvokeOptions(options))),\n },\n sources: {\n list: () => run(executor.sources.list()),\n remove: (sourceId: string) => run(executor.sources.remove(sourceId)),\n refresh: (sourceId: string) => run(executor.sources.refresh(sourceId)),\n detect: (url: string) => run(executor.sources.detect(url)),\n },\n policies: {\n list: () => run(executor.policies.list()),\n add: (policy: Omit<Policy, \"id\" | \"createdAt\">) => run(executor.policies.add(policy)),\n remove: (policyId: string) => run(executor.policies.remove(policyId)),\n },\n secrets: {\n list: () => run(executor.secrets.list()),\n resolve: (secretId: string) => run(executor.secrets.resolve(secretId as SecretId)),\n status: (secretId: string) => run(executor.secrets.status(secretId as SecretId)),\n set: (input: { readonly id: string; readonly name: string; readonly value: string; readonly provider?: string; readonly purpose?: string }) =>\n run(executor.secrets.set(input as any)),\n remove: (secretId: string) => run(executor.secrets.remove(secretId as SecretId)),\n addProvider: (provider: SecretProvider) => run(executor.secrets.addProvider(toEffectSecretProvider(provider))),\n providers: () => run(executor.secrets.providers()),\n },\n close: () => run(executor.close()),\n };\n\n for (const key of Object.keys(executor)) {\n if (!KNOWN_KEYS.has(key)) {\n const ext = (executor as Record<string, unknown>)[key];\n if (ext !== null && typeof ext === \"object\") base[key] = promisifyObject(ext as object);\n else base[key] = ext;\n }\n }\n\n return base as Executor<TPlugins>;\n};\n"],"mappings":"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","names":["createExecutor"]}
|
|
@@ -116,6 +116,23 @@ export interface ExecutorConfig<TPlugins extends readonly AnyPlugin[] = []> {
|
|
|
116
116
|
readonly name?: string;
|
|
117
117
|
};
|
|
118
118
|
readonly plugins?: TPlugins;
|
|
119
|
+
/**
|
|
120
|
+
* Custom tool registry implementation. Defaults to an in-memory store.
|
|
121
|
+
* Implement the promise-shaped `ToolRegistry` interface to persist tool
|
|
122
|
+
* metadata to a database, remote service, etc.
|
|
123
|
+
*/
|
|
124
|
+
readonly tools?: ToolRegistry;
|
|
125
|
+
/** Custom source registry implementation. Defaults to an in-memory store. */
|
|
126
|
+
readonly sources?: SourceRegistry;
|
|
127
|
+
/**
|
|
128
|
+
* Custom secret store implementation. Defaults to an in-memory store.
|
|
129
|
+
* For most use cases, prefer passing a custom `SecretProvider` via
|
|
130
|
+
* `executor.secrets.addProvider(...)` — only replace the whole store if you
|
|
131
|
+
* need to persist the `SecretRef` metadata itself.
|
|
132
|
+
*/
|
|
133
|
+
readonly secrets?: SecretStore;
|
|
134
|
+
/** Custom policy engine implementation. Defaults to an in-memory store. */
|
|
135
|
+
readonly policies?: PolicyEngine;
|
|
119
136
|
}
|
|
120
137
|
export declare const createExecutor: <const TPlugins extends readonly AnyPlugin[] = []>(config?: ExecutorConfig<TPlugins>) => Promise<Executor<TPlugins>>;
|
|
121
138
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"promise-executor.d.ts","sourceRoot":"","sources":["../src/promise-executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEzC,OAAO,EAQL,KAAK,YAAY,IAAI,gBAAgB,EACrC,KAAK,cAAc,IAAI,kBAAkB,EACzC,KAAK,WAAW,IAAI,eAAe,EACnC,KAAK,YAAY,IAAI,gBAAgB,EAErC,KAAK,cAAc,EAEnB,KAAK,kBAAkB,EAEvB,KAAK,oBAAoB,EACzB,KAAK,YAAY,EACjB,KAAK,eAAe,
|
|
1
|
+
{"version":3,"file":"promise-executor.d.ts","sourceRoot":"","sources":["../src/promise-executor.ts"],"names":[],"mappings":"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"}
|