edict-lang 1.2.0 → 1.5.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/dist/ast/nodes.d.ts +3 -3
- package/dist/ast/nodes.d.ts.map +1 -1
- package/dist/ast/nodes.js +1 -0
- package/dist/ast/nodes.js.map +1 -1
- package/dist/ast/type-constants.d.ts +12 -0
- package/dist/ast/type-constants.d.ts.map +1 -0
- package/dist/ast/type-constants.js +16 -0
- package/dist/ast/type-constants.js.map +1 -0
- package/dist/ast/types.d.ts +1 -1
- package/dist/ast/types.d.ts.map +1 -1
- package/dist/builtins/builtin-enums.d.ts +12 -0
- package/dist/builtins/builtin-enums.d.ts.map +1 -0
- package/dist/builtins/builtin-enums.js +45 -0
- package/dist/builtins/builtin-enums.js.map +1 -0
- package/dist/builtins/builtins.d.ts +24 -0
- package/dist/builtins/builtins.d.ts.map +1 -0
- package/dist/builtins/builtins.js +691 -0
- package/dist/builtins/builtins.js.map +1 -0
- package/dist/checker/check.d.ts.map +1 -1
- package/dist/checker/check.js +81 -38
- package/dist/checker/check.js.map +1 -1
- package/dist/checker/type-env.d.ts +2 -0
- package/dist/checker/type-env.d.ts.map +1 -1
- package/dist/checker/type-env.js +9 -0
- package/dist/checker/type-env.js.map +1 -1
- package/dist/codegen/browser-host-adapter.d.ts +29 -0
- package/dist/codegen/browser-host-adapter.d.ts.map +1 -0
- package/dist/codegen/browser-host-adapter.js +51 -0
- package/dist/codegen/browser-host-adapter.js.map +1 -0
- package/dist/codegen/builtins.d.ts +2 -26
- package/dist/codegen/builtins.d.ts.map +1 -1
- package/dist/codegen/builtins.js +2 -341
- package/dist/codegen/builtins.js.map +1 -1
- package/dist/codegen/closures.d.ts +17 -0
- package/dist/codegen/closures.d.ts.map +1 -0
- package/dist/codegen/closures.js +140 -0
- package/dist/codegen/closures.js.map +1 -0
- package/dist/codegen/codegen.d.ts +11 -30
- package/dist/codegen/codegen.d.ts.map +1 -1
- package/dist/codegen/codegen.js +154 -982
- package/dist/codegen/codegen.js.map +1 -1
- package/dist/codegen/collect-strings.d.ts +4 -0
- package/dist/codegen/collect-strings.d.ts.map +1 -0
- package/dist/codegen/collect-strings.js +76 -0
- package/dist/codegen/collect-strings.js.map +1 -0
- package/dist/codegen/compile-calls.d.ts +10 -0
- package/dist/codegen/compile-calls.d.ts.map +1 -0
- package/dist/codegen/compile-calls.js +344 -0
- package/dist/codegen/compile-calls.js.map +1 -0
- package/dist/codegen/compile-data.d.ts +22 -0
- package/dist/codegen/compile-data.d.ts.map +1 -0
- package/dist/codegen/compile-data.js +243 -0
- package/dist/codegen/compile-data.js.map +1 -0
- package/dist/codegen/compile-match.d.ts +7 -0
- package/dist/codegen/compile-match.d.ts.map +1 -0
- package/dist/codegen/compile-match.js +195 -0
- package/dist/codegen/compile-match.js.map +1 -0
- package/dist/codegen/compile-scalars.d.ts +25 -0
- package/dist/codegen/compile-scalars.d.ts.map +1 -0
- package/dist/codegen/compile-scalars.js +210 -0
- package/dist/codegen/compile-scalars.js.map +1 -0
- package/dist/codegen/hof-generators.d.ts +39 -0
- package/dist/codegen/hof-generators.d.ts.map +1 -0
- package/dist/codegen/hof-generators.js +336 -0
- package/dist/codegen/hof-generators.js.map +1 -0
- package/dist/codegen/host-adapter.d.ts +44 -0
- package/dist/codegen/host-adapter.d.ts.map +1 -0
- package/dist/codegen/host-adapter.js +9 -0
- package/dist/codegen/host-adapter.js.map +1 -0
- package/dist/codegen/host-functions.d.ts +35 -0
- package/dist/codegen/host-functions.d.ts.map +1 -0
- package/dist/codegen/host-functions.js +680 -0
- package/dist/codegen/host-functions.js.map +1 -0
- package/dist/codegen/imports.d.ts +12 -0
- package/dist/codegen/imports.d.ts.map +1 -0
- package/dist/codegen/imports.js +162 -0
- package/dist/codegen/imports.js.map +1 -0
- package/dist/codegen/node-host-adapter.d.ts +35 -0
- package/dist/codegen/node-host-adapter.d.ts.map +1 -0
- package/dist/codegen/node-host-adapter.js +155 -0
- package/dist/codegen/node-host-adapter.js.map +1 -0
- package/dist/codegen/runner.d.ts +36 -2
- package/dist/codegen/runner.d.ts.map +1 -1
- package/dist/codegen/runner.js +146 -271
- package/dist/codegen/runner.js.map +1 -1
- package/dist/codegen/types.d.ts +91 -0
- package/dist/codegen/types.d.ts.map +1 -0
- package/dist/codegen/types.js +63 -0
- package/dist/codegen/types.js.map +1 -0
- package/dist/compact/expand.d.ts +25 -0
- package/dist/compact/expand.d.ts.map +1 -0
- package/dist/compact/expand.js +198 -0
- package/dist/compact/expand.js.map +1 -0
- package/dist/compile.d.ts +2 -1
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +1 -1
- package/dist/compile.js.map +1 -1
- package/dist/contracts/translate.js.map +1 -1
- package/dist/effects/call-graph.d.ts.map +1 -1
- package/dist/effects/call-graph.js +6 -2
- package/dist/effects/call-graph.js.map +1 -1
- package/dist/errors/error-catalog.d.ts +1 -1
- package/dist/errors/error-catalog.d.ts.map +1 -1
- package/dist/errors/error-catalog.js +119 -0
- package/dist/errors/error-catalog.js.map +1 -1
- package/dist/errors/structured-errors.d.ts +6 -1
- package/dist/errors/structured-errors.d.ts.map +1 -1
- package/dist/errors/structured-errors.js +3 -0
- package/dist/errors/structured-errors.js.map +1 -1
- package/dist/index.d.ts +17 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -10
- package/dist/index.js.map +1 -1
- package/dist/lint/lint.d.ts +9 -0
- package/dist/lint/lint.d.ts.map +1 -0
- package/dist/lint/lint.js +354 -0
- package/dist/lint/lint.js.map +1 -0
- package/dist/lint/warnings.d.ts +54 -0
- package/dist/lint/warnings.d.ts.map +1 -0
- package/dist/lint/warnings.js +39 -0
- package/dist/lint/warnings.js.map +1 -0
- package/dist/mcp/create-server.d.ts.map +1 -1
- package/dist/mcp/create-server.js +66 -5
- package/dist/mcp/create-server.js.map +1 -1
- package/dist/mcp/handlers.d.ts +18 -4
- package/dist/mcp/handlers.d.ts.map +1 -1
- package/dist/mcp/handlers.js +54 -12
- package/dist/mcp/handlers.js.map +1 -1
- package/dist/mcp/prompts.d.ts +17 -0
- package/dist/mcp/prompts.d.ts.map +1 -0
- package/dist/mcp/prompts.js +181 -0
- package/dist/mcp/prompts.js.map +1 -0
- package/dist/mcp/server.js +1 -4
- package/dist/mcp/server.js.map +1 -1
- package/dist/resolver/resolve.d.ts.map +1 -1
- package/dist/resolver/resolve.js +22 -8
- package/dist/resolver/resolve.js.map +1 -1
- package/dist/validator/node-validators.d.ts.map +1 -1
- package/dist/validator/node-validators.js +34 -5
- package/dist/validator/node-validators.js.map +1 -1
- package/package.json +4 -2
package/dist/mcp/handlers.d.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
import type { RunLimits } from "../codegen/runner.js";
|
|
1
2
|
import type { StructuredError } from "../errors/structured-errors.js";
|
|
2
3
|
import { type AstPatch } from "../patch/apply.js";
|
|
3
4
|
import { type ErrorCatalog } from "../errors/error-catalog.js";
|
|
5
|
+
import type { LintWarning } from "../lint/warnings.js";
|
|
4
6
|
export interface SchemaResult {
|
|
5
7
|
schema: unknown;
|
|
6
|
-
format: "full" | "minimal";
|
|
8
|
+
format: "full" | "minimal" | "compact";
|
|
7
9
|
tokenEstimate: number;
|
|
8
10
|
}
|
|
9
11
|
export interface ExamplesResult {
|
|
@@ -24,12 +26,17 @@ export interface CheckResult {
|
|
|
24
26
|
export interface CompileResult {
|
|
25
27
|
ok: boolean;
|
|
26
28
|
wasm?: string;
|
|
27
|
-
errors?: StructuredError[]
|
|
29
|
+
errors?: StructuredError[];
|
|
28
30
|
}
|
|
29
31
|
export interface RunResult {
|
|
30
32
|
output: string;
|
|
31
33
|
exitCode: number;
|
|
32
34
|
returnValue?: number;
|
|
35
|
+
error?: "execution_timeout" | "execution_oom";
|
|
36
|
+
limitInfo?: {
|
|
37
|
+
timeoutMs?: number;
|
|
38
|
+
maxMemoryMb?: number;
|
|
39
|
+
};
|
|
33
40
|
}
|
|
34
41
|
export interface VersionResult {
|
|
35
42
|
version: string;
|
|
@@ -38,12 +45,12 @@ export interface VersionResult {
|
|
|
38
45
|
features: Record<string, boolean>;
|
|
39
46
|
limits: Record<string, number>;
|
|
40
47
|
}
|
|
41
|
-
export declare function handleSchema(format?: "full" | "minimal"): SchemaResult;
|
|
48
|
+
export declare function handleSchema(format?: "full" | "minimal" | "compact"): SchemaResult;
|
|
42
49
|
export declare function handleExamples(): ExamplesResult;
|
|
43
50
|
export declare function handleValidate(ast: unknown): ValidateResult;
|
|
44
51
|
export declare function handleCheck(ast: unknown): Promise<CheckResult>;
|
|
45
52
|
export declare function handleCompile(ast: unknown): Promise<CompileResult>;
|
|
46
|
-
export declare function handleRun(wasmBase64: string): Promise<RunResult>;
|
|
53
|
+
export declare function handleRun(wasmBase64: string, limits?: RunLimits): Promise<RunResult>;
|
|
47
54
|
export interface PatchResult {
|
|
48
55
|
ok: boolean;
|
|
49
56
|
errors?: StructuredError[];
|
|
@@ -51,5 +58,12 @@ export interface PatchResult {
|
|
|
51
58
|
}
|
|
52
59
|
export declare function handlePatch(baseAst: unknown, patches: AstPatch[], returnAst?: boolean): Promise<PatchResult>;
|
|
53
60
|
export declare function handleErrorCatalog(): ErrorCatalog;
|
|
61
|
+
export declare function handlePatchSchema(): unknown;
|
|
54
62
|
export declare function handleVersion(): VersionResult;
|
|
63
|
+
export interface LintResult {
|
|
64
|
+
ok: boolean;
|
|
65
|
+
warnings?: LintWarning[];
|
|
66
|
+
errors?: StructuredError[];
|
|
67
|
+
}
|
|
68
|
+
export declare function handleLint(ast: unknown): LintResult;
|
|
55
69
|
//# sourceMappingURL=handlers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/mcp/handlers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/mcp/handlers.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/handlers.js
CHANGED
|
@@ -10,23 +10,29 @@ import { validate } from "../validator/validate.js";
|
|
|
10
10
|
import { check } from "../check.js";
|
|
11
11
|
import { compile } from "../codegen/codegen.js";
|
|
12
12
|
import { run } from "../codegen/runner.js";
|
|
13
|
-
import { BUILTIN_FUNCTIONS } from "../
|
|
13
|
+
import { BUILTIN_FUNCTIONS } from "../builtins/builtins.js";
|
|
14
14
|
import { applyPatches } from "../patch/apply.js";
|
|
15
15
|
import { buildErrorCatalog } from "../errors/error-catalog.js";
|
|
16
16
|
import { stripDescriptions } from "./minimal-schema.js";
|
|
17
|
+
import { lint } from "../lint/lint.js";
|
|
18
|
+
import { expandCompact, compactSchemaReference } from "../compact/expand.js";
|
|
17
19
|
// =============================================================================
|
|
18
20
|
// Path resolution (relative to this file, works regardless of cwd)
|
|
19
21
|
// =============================================================================
|
|
20
22
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
21
23
|
const projectRoot = resolve(__dirname, "..", "..");
|
|
22
24
|
const schemaPath = resolve(projectRoot, "schema", "edict.schema.json");
|
|
25
|
+
const patchSchemaPath = resolve(projectRoot, "schema", "edict-patch.schema.json");
|
|
23
26
|
const examplesDir = resolve(projectRoot, "examples");
|
|
27
|
+
const packageJsonPath = resolve(projectRoot, "package.json");
|
|
24
28
|
// =============================================================================
|
|
25
29
|
// Cached assets (loaded once at startup)
|
|
26
30
|
// =============================================================================
|
|
27
31
|
let cachedSchema = null;
|
|
28
32
|
let cachedMinimalSchema = null;
|
|
33
|
+
let cachedPatchSchema = null;
|
|
29
34
|
let cachedExamples = null;
|
|
35
|
+
let cachedVersion = null;
|
|
30
36
|
function loadSchema() {
|
|
31
37
|
if (!cachedSchema) {
|
|
32
38
|
cachedSchema = readFileSync(schemaPath, "utf-8");
|
|
@@ -49,6 +55,11 @@ function loadExamples() {
|
|
|
49
55
|
// Handlers
|
|
50
56
|
// =============================================================================
|
|
51
57
|
export function handleSchema(format = "full") {
|
|
58
|
+
if (format === "compact") {
|
|
59
|
+
const ref = compactSchemaReference();
|
|
60
|
+
const text = JSON.stringify(ref);
|
|
61
|
+
return { schema: ref, format: "compact", tokenEstimate: Math.ceil(text.length / 4) };
|
|
62
|
+
}
|
|
52
63
|
const raw = loadSchema();
|
|
53
64
|
if (format === "minimal") {
|
|
54
65
|
if (!cachedMinimalSchema) {
|
|
@@ -66,22 +77,25 @@ export function handleExamples() {
|
|
|
66
77
|
return { count: examples.length, examples };
|
|
67
78
|
}
|
|
68
79
|
export function handleValidate(ast) {
|
|
69
|
-
const
|
|
80
|
+
const expanded = expandCompact(ast);
|
|
81
|
+
const result = validate(expanded);
|
|
70
82
|
if (result.ok) {
|
|
71
83
|
return { ok: true };
|
|
72
84
|
}
|
|
73
85
|
return { ok: false, errors: result.errors };
|
|
74
86
|
}
|
|
75
87
|
export async function handleCheck(ast) {
|
|
76
|
-
const
|
|
88
|
+
const expanded = expandCompact(ast);
|
|
89
|
+
const result = await check(expanded);
|
|
77
90
|
if (result.ok) {
|
|
78
91
|
return { ok: true };
|
|
79
92
|
}
|
|
80
93
|
return { ok: false, errors: result.errors };
|
|
81
94
|
}
|
|
82
95
|
export async function handleCompile(ast) {
|
|
83
|
-
// Full pipeline:
|
|
84
|
-
const
|
|
96
|
+
// Full pipeline: expand compact format, then check, then compile
|
|
97
|
+
const expanded = expandCompact(ast);
|
|
98
|
+
const checkResult = await check(expanded);
|
|
85
99
|
if (!checkResult.ok || !checkResult.module) {
|
|
86
100
|
return { ok: false, errors: checkResult.errors };
|
|
87
101
|
}
|
|
@@ -93,18 +107,26 @@ export async function handleCompile(ast) {
|
|
|
93
107
|
const base64 = Buffer.from(compileResult.wasm).toString("base64");
|
|
94
108
|
return { ok: true, wasm: base64 };
|
|
95
109
|
}
|
|
96
|
-
export async function handleRun(wasmBase64) {
|
|
110
|
+
export async function handleRun(wasmBase64, limits) {
|
|
97
111
|
const wasmBytes = new Uint8Array(Buffer.from(wasmBase64, "base64"));
|
|
98
|
-
const result = await run(wasmBytes);
|
|
112
|
+
const result = await run(wasmBytes, "main", limits);
|
|
99
113
|
return {
|
|
100
114
|
output: result.output,
|
|
101
115
|
exitCode: result.exitCode,
|
|
102
116
|
returnValue: result.returnValue,
|
|
117
|
+
error: result.error,
|
|
118
|
+
limitInfo: result.limitInfo,
|
|
103
119
|
};
|
|
104
120
|
}
|
|
105
121
|
export async function handlePatch(baseAst, patches, returnAst = false) {
|
|
122
|
+
// Step 0: Expand compact format on base AST and patch values
|
|
123
|
+
const expandedBase = expandCompact(baseAst);
|
|
124
|
+
const expandedPatches = patches.map((p) => ({
|
|
125
|
+
...p,
|
|
126
|
+
value: p.value !== undefined ? expandCompact(p.value) : p.value,
|
|
127
|
+
}));
|
|
106
128
|
// Step 1: Apply patches
|
|
107
|
-
const patchResult = applyPatches(
|
|
129
|
+
const patchResult = applyPatches(expandedBase, expandedPatches);
|
|
108
130
|
if (!patchResult.ok) {
|
|
109
131
|
return { ok: false, errors: patchResult.errors };
|
|
110
132
|
}
|
|
@@ -124,11 +146,19 @@ export async function handlePatch(baseAst, patches, returnAst = false) {
|
|
|
124
146
|
export function handleErrorCatalog() {
|
|
125
147
|
return buildErrorCatalog();
|
|
126
148
|
}
|
|
149
|
+
export function handlePatchSchema() {
|
|
150
|
+
if (!cachedPatchSchema) {
|
|
151
|
+
cachedPatchSchema = JSON.parse(readFileSync(patchSchemaPath, "utf-8"));
|
|
152
|
+
}
|
|
153
|
+
return cachedPatchSchema;
|
|
154
|
+
}
|
|
127
155
|
export function handleVersion() {
|
|
128
|
-
|
|
129
|
-
|
|
156
|
+
if (!cachedVersion) {
|
|
157
|
+
const pkg = JSON.parse(readFileSync(packageJsonPath, "utf-8"));
|
|
158
|
+
cachedVersion = pkg.version ?? "0.0.0";
|
|
159
|
+
}
|
|
130
160
|
return {
|
|
131
|
-
version:
|
|
161
|
+
version: cachedVersion,
|
|
132
162
|
schemaVersion: "1.0",
|
|
133
163
|
builtins: Array.from(BUILTIN_FUNCTIONS.keys()),
|
|
134
164
|
features: {
|
|
@@ -136,12 +166,24 @@ export function handleVersion() {
|
|
|
136
166
|
effects: true,
|
|
137
167
|
unitTypes: false,
|
|
138
168
|
multiModule: false,
|
|
139
|
-
compactAst:
|
|
169
|
+
compactAst: true,
|
|
140
170
|
},
|
|
141
171
|
limits: {
|
|
142
172
|
z3TimeoutMs: 5000,
|
|
143
173
|
maxModules: 1,
|
|
174
|
+
executionTimeoutMs: 5000,
|
|
175
|
+
maxMemoryMb: 1,
|
|
144
176
|
},
|
|
145
177
|
};
|
|
146
178
|
}
|
|
179
|
+
export function handleLint(ast) {
|
|
180
|
+
const expanded = expandCompact(ast);
|
|
181
|
+
const validation = validate(expanded);
|
|
182
|
+
if (!validation.ok) {
|
|
183
|
+
return { ok: false, errors: validation.errors };
|
|
184
|
+
}
|
|
185
|
+
const module = expanded;
|
|
186
|
+
const warnings = lint(module);
|
|
187
|
+
return { ok: true, warnings };
|
|
188
|
+
}
|
|
147
189
|
//# sourceMappingURL=handlers.js.map
|
package/dist/mcp/handlers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../src/mcp/handlers.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,6DAA6D;AAC7D,gFAAgF;AAChF,sEAAsE;AACtE,6CAA6C;AAE7C,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../src/mcp/handlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface PromptMessage {
|
|
2
|
+
role: "user" | "assistant";
|
|
3
|
+
content: {
|
|
4
|
+
type: "text";
|
|
5
|
+
text: string;
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
export interface PromptResult {
|
|
9
|
+
[key: string]: unknown;
|
|
10
|
+
description?: string;
|
|
11
|
+
messages: PromptMessage[];
|
|
12
|
+
}
|
|
13
|
+
export declare function promptWriteProgram(task: string): PromptResult;
|
|
14
|
+
export declare function promptFixError(errorJson: string): PromptResult;
|
|
15
|
+
export declare function promptAddContracts(astJson: string): PromptResult;
|
|
16
|
+
export declare function promptReviewAst(astJson: string): PromptResult;
|
|
17
|
+
//# sourceMappingURL=prompts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/mcp/prompts.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3C;AAED,MAAM,WAAW,YAAY;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC7B;AAmCD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAqC7D;AAMD,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,CAiC9D;AAMD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CA+BhE;AAMD,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAmC7D"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
// =============================================================================
|
|
2
|
+
// MCP Prompt Templates — Pre-built system prompts for agent bootstrapping
|
|
3
|
+
// =============================================================================
|
|
4
|
+
// Each function returns a GetPromptResult-compatible object with messages.
|
|
5
|
+
// Prompts include the minimal schema (token-efficient) and relevant examples
|
|
6
|
+
// so agents can bootstrap themselves with Edict in a single prompt retrieval.
|
|
7
|
+
import { handleSchema, handleExamples, handleVersion } from "./handlers.js";
|
|
8
|
+
import { BUILTIN_FUNCTIONS } from "../builtins/builtins.js";
|
|
9
|
+
// =============================================================================
|
|
10
|
+
// Helpers
|
|
11
|
+
// =============================================================================
|
|
12
|
+
function getMinimalSchema() {
|
|
13
|
+
const result = handleSchema("minimal");
|
|
14
|
+
return JSON.stringify(result.schema);
|
|
15
|
+
}
|
|
16
|
+
function getHelloExample() {
|
|
17
|
+
const examples = handleExamples();
|
|
18
|
+
const hello = examples.examples.find((e) => e.name === "hello");
|
|
19
|
+
return hello ? JSON.stringify(hello.ast) : "{}";
|
|
20
|
+
}
|
|
21
|
+
function getContractsExample() {
|
|
22
|
+
const examples = handleExamples();
|
|
23
|
+
const contracts = examples.examples.find((e) => e.name === "contracts");
|
|
24
|
+
return contracts ? JSON.stringify(contracts.ast) : "{}";
|
|
25
|
+
}
|
|
26
|
+
function getBuiltinList() {
|
|
27
|
+
return Array.from(BUILTIN_FUNCTIONS.keys()).join(", ");
|
|
28
|
+
}
|
|
29
|
+
function getEffectsList() {
|
|
30
|
+
return "pure, io, reads, writes, fails";
|
|
31
|
+
}
|
|
32
|
+
// =============================================================================
|
|
33
|
+
// Prompt: write_program
|
|
34
|
+
// =============================================================================
|
|
35
|
+
export function promptWriteProgram(task) {
|
|
36
|
+
const schema = getMinimalSchema();
|
|
37
|
+
const hello = getHelloExample();
|
|
38
|
+
const builtins = getBuiltinList();
|
|
39
|
+
const version = handleVersion();
|
|
40
|
+
return {
|
|
41
|
+
description: "System prompt for writing a new Edict program from scratch",
|
|
42
|
+
messages: [
|
|
43
|
+
{
|
|
44
|
+
role: "user",
|
|
45
|
+
content: {
|
|
46
|
+
type: "text",
|
|
47
|
+
text: [
|
|
48
|
+
"You are writing an Edict program. Edict is a programming language where the programmer is an AI agent. You produce JSON AST directly — there is no text syntax.",
|
|
49
|
+
"",
|
|
50
|
+
"## Rules",
|
|
51
|
+
"1. Output a single JSON object with kind: \"module\"",
|
|
52
|
+
"2. Every node MUST have a unique \"id\" field (format: \"kind-description-NNN\")",
|
|
53
|
+
"3. The module MUST have a \"main\" function that returns Int",
|
|
54
|
+
"4. Use only these effects: " + getEffectsList(),
|
|
55
|
+
"5. Available builtins: " + builtins,
|
|
56
|
+
"6. Schema version: " + version.schemaVersion,
|
|
57
|
+
"",
|
|
58
|
+
"## JSON Schema (minimal)",
|
|
59
|
+
schema,
|
|
60
|
+
"",
|
|
61
|
+
"## Example: Hello World",
|
|
62
|
+
hello,
|
|
63
|
+
"",
|
|
64
|
+
"## Task",
|
|
65
|
+
task,
|
|
66
|
+
].join("\n"),
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
],
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
// =============================================================================
|
|
73
|
+
// Prompt: fix_error
|
|
74
|
+
// =============================================================================
|
|
75
|
+
export function promptFixError(errorJson) {
|
|
76
|
+
return {
|
|
77
|
+
description: "Prompt for fixing a structured Edict compiler error",
|
|
78
|
+
messages: [
|
|
79
|
+
{
|
|
80
|
+
role: "user",
|
|
81
|
+
content: {
|
|
82
|
+
type: "text",
|
|
83
|
+
text: [
|
|
84
|
+
"You are fixing an Edict compiler error. The error is a structured JSON object from the Edict compiler pipeline.",
|
|
85
|
+
"",
|
|
86
|
+
"## Strategy",
|
|
87
|
+
"1. Read the error's \"error\" field to identify the error type",
|
|
88
|
+
"2. Read \"nodeId\" to locate the offending AST node",
|
|
89
|
+
"3. Read \"expected\" vs \"actual\" (if present) to understand the mismatch",
|
|
90
|
+
"4. Read \"candidates\" (if present) for suggested corrections",
|
|
91
|
+
"5. Read \"fix_suggestions\" (if present) for concrete AST patches",
|
|
92
|
+
"6. Produce a corrected AST or use edict_patch to apply targeted fixes",
|
|
93
|
+
"",
|
|
94
|
+
"## Common error types",
|
|
95
|
+
"- type_mismatch: expected/actual types differ → fix the expression or type annotation",
|
|
96
|
+
"- undefined_reference: name not found → check spelling, use candidates list",
|
|
97
|
+
"- effect_violation: function uses effects not in its declaration → add the missing effect",
|
|
98
|
+
"- contract_failure: pre/postcondition violated → fix the logic or weaken the contract",
|
|
99
|
+
"- duplicate_definition: two definitions share a name → rename one",
|
|
100
|
+
"",
|
|
101
|
+
"## The error to fix",
|
|
102
|
+
errorJson,
|
|
103
|
+
].join("\n"),
|
|
104
|
+
},
|
|
105
|
+
},
|
|
106
|
+
],
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
// =============================================================================
|
|
110
|
+
// Prompt: add_contracts
|
|
111
|
+
// =============================================================================
|
|
112
|
+
export function promptAddContracts(astJson) {
|
|
113
|
+
const contractsExample = getContractsExample();
|
|
114
|
+
return {
|
|
115
|
+
description: "Prompt for adding pre/postcondition contracts to existing Edict functions",
|
|
116
|
+
messages: [
|
|
117
|
+
{
|
|
118
|
+
role: "user",
|
|
119
|
+
content: {
|
|
120
|
+
type: "text",
|
|
121
|
+
text: [
|
|
122
|
+
"You are adding contracts (preconditions and postconditions) to an existing Edict program. Contracts enable Z3 formal verification — the compiler will prove they hold for all inputs.",
|
|
123
|
+
"",
|
|
124
|
+
"## Rules",
|
|
125
|
+
"1. Preconditions (kind: \"pre\") constrain function inputs (reference parameter names)",
|
|
126
|
+
"2. Postconditions (kind: \"post\") constrain function outputs (reference \"result\" for the return value)",
|
|
127
|
+
"3. Every contract node needs a unique \"id\" (format: \"pre-description-NNN\" or \"post-description-NNN\")",
|
|
128
|
+
"4. Contract conditions are expressions that evaluate to Bool",
|
|
129
|
+
"5. Keep contracts provable — simple arithmetic/comparison predicates work best with Z3",
|
|
130
|
+
"6. The \"implies\" operator is useful for conditional postconditions",
|
|
131
|
+
"",
|
|
132
|
+
"## Example: contracts with Z3 verification",
|
|
133
|
+
contractsExample,
|
|
134
|
+
"",
|
|
135
|
+
"## AST to add contracts to",
|
|
136
|
+
astJson,
|
|
137
|
+
].join("\n"),
|
|
138
|
+
},
|
|
139
|
+
},
|
|
140
|
+
],
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
// =============================================================================
|
|
144
|
+
// Prompt: review_ast
|
|
145
|
+
// =============================================================================
|
|
146
|
+
export function promptReviewAst(astJson) {
|
|
147
|
+
const builtins = getBuiltinList();
|
|
148
|
+
return {
|
|
149
|
+
description: "Prompt for reviewing an Edict AST for quality issues",
|
|
150
|
+
messages: [
|
|
151
|
+
{
|
|
152
|
+
role: "user",
|
|
153
|
+
content: {
|
|
154
|
+
type: "text",
|
|
155
|
+
text: [
|
|
156
|
+
"You are reviewing an Edict AST for quality issues. Check for potential problems and suggest improvements.",
|
|
157
|
+
"",
|
|
158
|
+
"## Review checklist",
|
|
159
|
+
"1. ID uniqueness: every node must have a unique \"id\" field",
|
|
160
|
+
"2. Effect correctness: functions using IO builtins (print) must declare \"io\" effect",
|
|
161
|
+
"3. Type consistency: literal values match their declared types",
|
|
162
|
+
"4. Dead code: unreachable expressions after returns",
|
|
163
|
+
"5. Missing contracts: public functions without pre/postconditions",
|
|
164
|
+
"6. Unused variables: let bindings that are never referenced",
|
|
165
|
+
"7. Builtin usage: prefer builtins over manual implementations",
|
|
166
|
+
"",
|
|
167
|
+
"## Available builtins",
|
|
168
|
+
builtins,
|
|
169
|
+
"",
|
|
170
|
+
"## Valid effects",
|
|
171
|
+
getEffectsList(),
|
|
172
|
+
"",
|
|
173
|
+
"## AST to review",
|
|
174
|
+
astJson,
|
|
175
|
+
].join("\n"),
|
|
176
|
+
},
|
|
177
|
+
},
|
|
178
|
+
],
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=prompts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/mcp/prompts.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/server.js
CHANGED
|
@@ -31,7 +31,6 @@ async function main() {
|
|
|
31
31
|
// Need body parser for Express to handle JSON
|
|
32
32
|
app.use(express.json({ limit: "50mb" }));
|
|
33
33
|
app.post("/mcp", async (req, res) => {
|
|
34
|
-
console.log("POST /mcp body:", req.body, "headers:", req.headers);
|
|
35
34
|
try {
|
|
36
35
|
let transport;
|
|
37
36
|
const sessionId = req.headers["mcp-session-id"];
|
|
@@ -104,9 +103,7 @@ async function main() {
|
|
|
104
103
|
res.status(500).end();
|
|
105
104
|
}
|
|
106
105
|
});
|
|
107
|
-
const serverInstance = app.listen(port
|
|
108
|
-
console.log(`Edict MCP HTTP server listening on port ${port}`);
|
|
109
|
-
});
|
|
106
|
+
const serverInstance = app.listen(port);
|
|
110
107
|
// Graceful shutdown
|
|
111
108
|
process.on("SIGINT", () => {
|
|
112
109
|
serverInstance.close(() => process.exit(0));
|
package/dist/mcp/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":";AACA,gFAAgF;AAChF,oEAAoE;AACpE,gFAAgF;AAChF,mDAAmD;AACnD,oDAAoD;AAEpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AACnG,OAAO,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAC;AAClF,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,MAAM,MAAM,aAAa,CAAC;AAIjC,gFAAgF;AAChF,QAAQ;AACR,gFAAgF;AAEhF,KAAK,UAAU,IAAI;IACf,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,MAAM,CAAC;IAElF,kEAAkE;IAClE,IAAI,IAAI,GAAG,IAAI,CAAC;IAChB,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU;QAAE,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IACxE,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC5C,IAAI,YAAY,KAAK,CAAC,CAAC,IAAI,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACxD,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAE,EAAE,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,IAAI,OAAO,EAAE,CAAC;QACV,MAAM,GAAG,GAAG,mBAAmB,EAAE,CAAC;QAElC,wCAAwC;QACxC,MAAM,UAAU,GAAkD,EAAE,CAAC;QAErE,8CAA8C;QAC9C,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QAEzC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,GAAoB,EAAE,GAAqB,EAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/resolver/resolve.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACR,WAAW,EAUd,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/resolver/resolve.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACR,WAAW,EAUd,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAStE;;GAEG;AACH,wBAAgB,OAAO,CAAC,MAAM,EAAE,WAAW,GAAG,eAAe,EAAE,CA2E9D"}
|
package/dist/resolver/resolve.js
CHANGED
|
@@ -6,7 +6,9 @@
|
|
|
6
6
|
import { undefinedReference } from "../errors/structured-errors.js";
|
|
7
7
|
import { findCandidates } from "./levenshtein.js";
|
|
8
8
|
import { Scope } from "./scope.js";
|
|
9
|
-
import { BUILTIN_FUNCTIONS } from "../
|
|
9
|
+
import { BUILTIN_FUNCTIONS } from "../builtins/builtins.js";
|
|
10
|
+
import { BUILTIN_ENUMS } from "../builtins/builtin-enums.js";
|
|
11
|
+
import { UNKNOWN_TYPE } from "../ast/type-constants.js";
|
|
10
12
|
/**
|
|
11
13
|
* Entry point: resolve all names in a validated Edict module.
|
|
12
14
|
*/
|
|
@@ -22,6 +24,16 @@ export function resolve(module) {
|
|
|
22
24
|
type: builtin.type,
|
|
23
25
|
});
|
|
24
26
|
}
|
|
27
|
+
// Register built-in enums (Option, Result) so named types and
|
|
28
|
+
// constructor patterns resolve through the full pipeline.
|
|
29
|
+
for (const enumDef of BUILTIN_ENUMS) {
|
|
30
|
+
builtinScope.define(enumDef.name, {
|
|
31
|
+
name: enumDef.name,
|
|
32
|
+
kind: "enum",
|
|
33
|
+
nodeId: enumDef.id,
|
|
34
|
+
definition: enumDef,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
25
37
|
const moduleScope = new Scope(builtinScope);
|
|
26
38
|
// =========================================================================
|
|
27
39
|
// Pass 1 — Register top-level definitions + imports
|
|
@@ -81,9 +93,9 @@ function defToSymbolInfo(def) {
|
|
|
81
93
|
nodeId: def.id,
|
|
82
94
|
type: {
|
|
83
95
|
kind: "fn_type",
|
|
84
|
-
params: def.params.map((p) => p.type),
|
|
96
|
+
params: def.params.map((p) => p.type ?? UNKNOWN_TYPE),
|
|
85
97
|
effects: [...def.effects],
|
|
86
|
-
returnType: def.returnType,
|
|
98
|
+
returnType: def.returnType ?? UNKNOWN_TYPE,
|
|
87
99
|
},
|
|
88
100
|
definition: def,
|
|
89
101
|
};
|
|
@@ -114,8 +126,9 @@ function resolveFunctionDef(fn, parentScope, errors) {
|
|
|
114
126
|
for (const param of fn.params) {
|
|
115
127
|
resolveTypeExpr(param.type, parentScope, errors);
|
|
116
128
|
}
|
|
117
|
-
// Resolve return type
|
|
118
|
-
|
|
129
|
+
// Resolve return type (if explicit)
|
|
130
|
+
if (fn.returnType)
|
|
131
|
+
resolveTypeExpr(fn.returnType, parentScope, errors);
|
|
119
132
|
// Resolve contracts
|
|
120
133
|
for (const contract of fn.contracts) {
|
|
121
134
|
resolveContract(contract, fn, bodyScope, errors);
|
|
@@ -131,7 +144,7 @@ function resolveContract(contract, fn, bodyScope, errors) {
|
|
|
131
144
|
name: "result",
|
|
132
145
|
kind: "result",
|
|
133
146
|
nodeId: null,
|
|
134
|
-
type: fn.returnType,
|
|
147
|
+
type: fn.returnType ?? UNKNOWN_TYPE,
|
|
135
148
|
});
|
|
136
149
|
resolveExpression(contract.condition, postScope, errors);
|
|
137
150
|
}
|
|
@@ -318,12 +331,13 @@ function resolveExpression(expr, scope, errors) {
|
|
|
318
331
|
case "lambda": {
|
|
319
332
|
const lamScope = scope.child();
|
|
320
333
|
for (const param of expr.params) {
|
|
321
|
-
|
|
334
|
+
if (param.type)
|
|
335
|
+
resolveTypeExpr(param.type, scope, errors);
|
|
322
336
|
const err = lamScope.define(param.name, {
|
|
323
337
|
name: param.name,
|
|
324
338
|
kind: "param",
|
|
325
339
|
nodeId: param.id,
|
|
326
|
-
type: param.type,
|
|
340
|
+
type: param.type ?? UNKNOWN_TYPE,
|
|
327
341
|
});
|
|
328
342
|
if (err)
|
|
329
343
|
errors.push(err);
|