effect-codemode 0.0.1 → 0.1.0-beta.0
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 +638 -2
- package/dist/bridge.d.ts +46 -0
- package/dist/bridge.d.ts.map +1 -0
- package/dist/codemode.d.ts +22 -0
- package/dist/codemode.d.ts.map +1 -0
- package/dist/executor-base.d.ts +25 -0
- package/dist/executor-base.d.ts.map +1 -0
- package/dist/executor.d.ts +18 -0
- package/dist/executor.d.ts.map +1 -0
- package/dist/group.d.ts +71 -0
- package/dist/group.d.ts.map +1 -0
- package/dist/index.d.ts +37 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1365 -0
- package/dist/index.js.map +25 -0
- package/dist/middleware.d.ts +18 -0
- package/dist/middleware.d.ts.map +1 -0
- package/dist/registry.d.ts +52 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/sanitize.d.ts +10 -0
- package/dist/sanitize.d.ts.map +1 -0
- package/dist/search.d.ts +35 -0
- package/dist/search.d.ts.map +1 -0
- package/dist/serve.d.ts +35 -0
- package/dist/serve.d.ts.map +1 -0
- package/dist/testing.d.ts +26 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +890 -0
- package/dist/testing.js.map +18 -0
- package/dist/tool.d.ts +69 -0
- package/dist/tool.d.ts.map +1 -0
- package/dist/transport.d.ts +10 -0
- package/dist/transport.d.ts.map +1 -0
- package/dist/typegen.d.ts +33 -0
- package/dist/typegen.d.ts.map +1 -0
- package/dist/types.d.ts +69 -0
- package/dist/types.d.ts.map +1 -0
- package/package.json +44 -10
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Runtime } from "effect";
|
|
2
|
+
import type { ExecuteResult, Executor, ExecutorOptions, ToolDescriptor, ToolMiddleware } from "./types";
|
|
3
|
+
export interface CodemodeTool {
|
|
4
|
+
/** The tool name for MCP registration */
|
|
5
|
+
readonly name: string;
|
|
6
|
+
/** Full description including generated TS declarations */
|
|
7
|
+
readonly description: string;
|
|
8
|
+
/** The generated TypeScript declarations (for debugging/display) */
|
|
9
|
+
readonly declarations: string;
|
|
10
|
+
/** Execute LLM-generated code, optionally streaming console output */
|
|
11
|
+
readonly execute: (code: string, options?: ExecutorOptions) => Promise<ExecuteResult>;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Creates the codemode tool by wiring together:
|
|
15
|
+
* - Type generation (for the LLM prompt)
|
|
16
|
+
* - The fn table (Effect services -> plain async functions)
|
|
17
|
+
* - The executor (sandbox)
|
|
18
|
+
*
|
|
19
|
+
* Accepts sandbox tools only — confirmation tools should be split out before calling.
|
|
20
|
+
*/
|
|
21
|
+
export declare function createCodemodeTool<R>(sandboxTools: Record<string, ToolDescriptor>, runtime: Runtime.Runtime<R>, executor: Executor, serviceStatuses?: string, middleware?: ReadonlyArray<ToolMiddleware>, groupNames?: ReadonlyArray<string>): CodemodeTool;
|
|
22
|
+
//# sourceMappingURL=codemode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codemode.d.ts","sourceRoot":"","sources":["../src/codemode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AAIhC,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAGvG,MAAM,WAAW,YAAY;IAC3B,yCAAyC;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,2DAA2D;IAC3D,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,oEAAoE;IACpE,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,sEAAsE;IACtE,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,KAAK,OAAO,CAAC,aAAa,CAAC,CAAA;CACtF;AAoCD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAClC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,EAC5C,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAC3B,QAAQ,EAAE,QAAQ,EAClB,eAAe,CAAC,EAAE,MAAM,EACxB,UAAU,CAAC,EAAE,aAAa,CAAC,cAAc,CAAC,EAC1C,UAAU,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,GACjC,YAAY,CA+Fd"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { Executor, ExecutorOptions } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* Normalize user-provided code into a form suitable for `new Function()`.
|
|
4
|
+
*
|
|
5
|
+
* Uses acorn to parse the code as a module and determines the best wrapping:
|
|
6
|
+
* 1. Single ExpressionStatement that is an ArrowFunctionExpression -> call it directly
|
|
7
|
+
* 2. Body ends with an ExpressionStatement -> splice `return` before it, wrap in async IIFE
|
|
8
|
+
* 3. Otherwise -> wrap entire body in async IIFE
|
|
9
|
+
*
|
|
10
|
+
* Falls back to the regex heuristic if acorn parsing fails.
|
|
11
|
+
*/
|
|
12
|
+
export declare function normalizeCode(code: string): string;
|
|
13
|
+
/**
|
|
14
|
+
* Build the sandbox globals object: console capture, network control, Effect modules, and tool fns.
|
|
15
|
+
*/
|
|
16
|
+
export declare function buildSandboxGlobals(fns: Record<string, (...args: Array<unknown>) => unknown>, options: ExecutorOptions | undefined, logs: string[]): Record<string, unknown>;
|
|
17
|
+
/**
|
|
18
|
+
* Create an executor from a `runCode` function that handles the actual code execution mechanism.
|
|
19
|
+
*
|
|
20
|
+
* The `runCode` function receives the normalized code and sandbox globals, and must return
|
|
21
|
+
* a Promise of the raw result (before Effect detection). The shared infrastructure handles
|
|
22
|
+
* console capture, global injection, network blocking, Effect detection, timeout, and error handling.
|
|
23
|
+
*/
|
|
24
|
+
export declare function createBaseExecutor(runCode: (wrappedCode: string, globals: Record<string, unknown>) => Promise<unknown>): Executor;
|
|
25
|
+
//# sourceMappingURL=executor-base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executor-base.d.ts","sourceRoot":"","sources":["../src/executor-base.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAiB,QAAQ,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AA+EvE;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAyClD;AAgDD;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC,EACzD,OAAO,EAAE,eAAe,GAAG,SAAS,EACpC,IAAI,EAAE,MAAM,EAAE,GACb,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAkDzB;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,GACnF,QAAQ,CAkCV"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Context, Layer } from "effect";
|
|
2
|
+
import type { Executor } from "./types";
|
|
3
|
+
export { normalizeCode } from "./executor-base";
|
|
4
|
+
declare const CodeExecutor_base: Context.TagClass<CodeExecutor, "@effect-codemode/Executor", Executor>;
|
|
5
|
+
/**
|
|
6
|
+
* Effect service for code execution.
|
|
7
|
+
*
|
|
8
|
+
* Provides multiple Layer implementations following the @effect/platform pattern:
|
|
9
|
+
* - `CodeExecutor.Direct` — uses `new Function()` (fast, less isolated)
|
|
10
|
+
* - `CodeExecutor.Vm` — uses `node:vm` (stronger isolation)
|
|
11
|
+
* - `CodeExecutor.Default` — alias for `Vm`
|
|
12
|
+
*/
|
|
13
|
+
export declare class CodeExecutor extends CodeExecutor_base {
|
|
14
|
+
static readonly Direct: Layer.Layer<CodeExecutor, never, never>;
|
|
15
|
+
static readonly Vm: Layer.Layer<CodeExecutor, never, never>;
|
|
16
|
+
static readonly Default: Layer.Layer<CodeExecutor, never, never>;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAGvC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAGvC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;;AA+B/C;;;;;;;GAOG;AACH,qBAAa,YAAa,SAAQ,iBAAkE;IAClG,MAAM,CAAC,QAAQ,CAAC,MAAM,0CAAsD;IAC5E,MAAM,CAAC,QAAQ,CAAC,EAAE,0CAAkD;IACpE,MAAM,CAAC,QAAQ,CAAC,OAAO,0CAAkB;CAC1C"}
|
package/dist/group.d.ts
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { Effect, Layer } from "effect";
|
|
2
|
+
import { CodemodeRegistry } from "./registry";
|
|
3
|
+
import type { TaggedErrorClassLike, ToolShape } from "./tool";
|
|
4
|
+
import type { ToolMiddleware } from "./types";
|
|
5
|
+
/**
|
|
6
|
+
* Shorthand for any ToolShape regardless of its type parameters.
|
|
7
|
+
*/
|
|
8
|
+
type AnyToolShape = ToolShape<string, unknown, unknown, ReadonlyArray<TaggedErrorClassLike>>;
|
|
9
|
+
/**
|
|
10
|
+
* Extract the input type from a ToolShape.
|
|
11
|
+
*/
|
|
12
|
+
type ExtractInput<T> = T extends ToolShape<string, infer I, unknown, ReadonlyArray<TaggedErrorClassLike>> ? I : never;
|
|
13
|
+
/**
|
|
14
|
+
* Extract the output type from a ToolShape.
|
|
15
|
+
*/
|
|
16
|
+
type ExtractOutput<T> = T extends ToolShape<string, unknown, infer O, ReadonlyArray<TaggedErrorClassLike>> ? O : never;
|
|
17
|
+
/**
|
|
18
|
+
* Extract the error types from a ToolShape as a union.
|
|
19
|
+
*/
|
|
20
|
+
type ExtractErrors<T> = T extends ToolShape<string, unknown, unknown, infer Errors> ? Errors[number] extends abstract new (...args: ReadonlyArray<never>) => infer E ? E : never : never;
|
|
21
|
+
/**
|
|
22
|
+
* Maps tool shapes to a handler record type.
|
|
23
|
+
* Each key is a tool name, each value is a handler function.
|
|
24
|
+
*/
|
|
25
|
+
export type HandlersFrom<Tools extends ReadonlyArray<AnyToolShape>> = {
|
|
26
|
+
readonly [T in Tools[number] as T["name"]]: (input: ExtractInput<T>) => Effect.Effect<ExtractOutput<T>, ExtractErrors<T>>;
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Options for `toLayer`.
|
|
30
|
+
*/
|
|
31
|
+
export interface ToLayerOptions {
|
|
32
|
+
readonly middleware?: ReadonlyArray<ToolMiddleware>;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* The class returned by `group()`.
|
|
36
|
+
*/
|
|
37
|
+
export interface GroupClass<GroupName extends string, Tools extends ReadonlyArray<AnyToolShape>> {
|
|
38
|
+
new (_: never): {};
|
|
39
|
+
readonly groupName: GroupName;
|
|
40
|
+
readonly tools: Tools;
|
|
41
|
+
toLayer(factory: HandlersFrom<Tools>, options?: ToLayerOptions): Layer.Layer<CodemodeRegistry, never, never>;
|
|
42
|
+
toLayer<E, R>(factory: Effect.Effect<HandlersFrom<Tools>, E, R>, options?: ToLayerOptions): Layer.Layer<CodemodeRegistry, never, R>;
|
|
43
|
+
middleware(...mws: ReadonlyArray<ToolMiddleware>): GroupClass<GroupName, Tools>;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Create a tool group — bundles related tool shapes under a name.
|
|
47
|
+
*
|
|
48
|
+
* Returns a class suitable for `class TodoTools extends Codemode.group("todos", TodoGet, ...) {}`.
|
|
49
|
+
* The class has:
|
|
50
|
+
* - `static groupName` — the group name
|
|
51
|
+
* - `static tools` — the tool shape array
|
|
52
|
+
* - `static toLayer(factory)` — returns a `Layer.Layer<CodemodeRegistry, never, R>`
|
|
53
|
+
*
|
|
54
|
+
* ```ts
|
|
55
|
+
* class TodoTools extends Codemode.group("todos", TodoGet, TodoList, TodoCreate) {}
|
|
56
|
+
*
|
|
57
|
+
* const TodoToolsLive = TodoTools.toLayer(
|
|
58
|
+
* Effect.gen(function* () {
|
|
59
|
+
* const svc = yield* TodoService
|
|
60
|
+
* return {
|
|
61
|
+
* todo_get: ({ id }) => svc.get(id),
|
|
62
|
+
* todo_list: (input) => svc.list(input),
|
|
63
|
+
* todo_create: (input) => svc.create(input),
|
|
64
|
+
* }
|
|
65
|
+
* })
|
|
66
|
+
* ).pipe(Layer.provide(TodoServiceLive))
|
|
67
|
+
* ```
|
|
68
|
+
*/
|
|
69
|
+
export declare function group<GroupName extends string, Tools extends ReadonlyArray<AnyToolShape>>(name: GroupName, ...tools: Tools): GroupClass<GroupName, Tools>;
|
|
70
|
+
export {};
|
|
71
|
+
//# sourceMappingURL=group.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"group.d.ts","sourceRoot":"","sources":["../src/group.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* effect-codemode — Effect-native codemode for MCP
|
|
3
|
+
*
|
|
4
|
+
* Give LLMs a typed Effect SDK instead of individual tool calls.
|
|
5
|
+
* Tools return Effects with typed errors. The LLM writes Effect.gen code.
|
|
6
|
+
*/
|
|
7
|
+
import { Layer } from "effect";
|
|
8
|
+
import { group } from "./group";
|
|
9
|
+
import { CodemodeRegistry } from "./registry";
|
|
10
|
+
import { serve } from "./serve";
|
|
11
|
+
import { tool } from "./tool";
|
|
12
|
+
export declare const Codemode: {
|
|
13
|
+
readonly tool: typeof tool;
|
|
14
|
+
readonly group: typeof group;
|
|
15
|
+
readonly serve: typeof serve;
|
|
16
|
+
readonly live: () => Layer.Layer<never, Error, CodemodeRegistry | import("@effect/ai/McpServer").McpServer>;
|
|
17
|
+
readonly StdioTransport: (stdin: import("effect/Stream").Stream<Uint8Array<ArrayBufferLike>, unknown, unknown>, stdout: import("effect/Sink").Sink<unknown, string | Uint8Array<ArrayBufferLike>, unknown, unknown, unknown>, options?: {
|
|
18
|
+
name?: string;
|
|
19
|
+
version?: string;
|
|
20
|
+
} | undefined) => Layer.Layer<import("@effect/ai/McpServer").McpServer | import("@effect/ai/McpSchema").McpServerClient, never, unknown>;
|
|
21
|
+
readonly withMiddleware: (mw: import("./types").ToolMiddleware) => Layer.Layer<never, never, CodemodeRegistry>;
|
|
22
|
+
readonly CodemodeRegistry: typeof CodemodeRegistry;
|
|
23
|
+
};
|
|
24
|
+
export { tool, type ToolShape } from "./tool";
|
|
25
|
+
export { group } from "./group";
|
|
26
|
+
export { serve } from "./serve";
|
|
27
|
+
export { StdioTransport } from "./transport";
|
|
28
|
+
export { withMiddleware } from "./middleware";
|
|
29
|
+
export { CodemodeRegistry } from "./registry";
|
|
30
|
+
export type { ToolDescriptor, ToolInvocation, ToolMiddleware, ExecuteResult, Executor, ExecutorOptions } from "./types";
|
|
31
|
+
export { CodeExecutor, normalizeCode } from "./executor";
|
|
32
|
+
export { buildTestTool, buildInspector } from "./testing";
|
|
33
|
+
export { generateDeclarations, astToTypeScript } from "./typegen";
|
|
34
|
+
export { searchTools, listToolSummary } from "./search";
|
|
35
|
+
export { effectToEffectFn, buildEffectFnTable, unwrapEffectTypes } from "./bridge";
|
|
36
|
+
export { sanitizeToolName } from "./sanitize";
|
|
37
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAG9B,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAE/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAS7B,eAAO,MAAM,QAAQ;;;;;;;;;;;CAQX,CAAA;AAGV,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAG/B,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAG/B,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAG5C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAG7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAG7C,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAGvH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAGxD,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAGzD,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAGjE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAGvD,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAGlF,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA"}
|