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