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.
Files changed (141) hide show
  1. package/dist/ast/nodes.d.ts +3 -3
  2. package/dist/ast/nodes.d.ts.map +1 -1
  3. package/dist/ast/nodes.js +1 -0
  4. package/dist/ast/nodes.js.map +1 -1
  5. package/dist/ast/type-constants.d.ts +12 -0
  6. package/dist/ast/type-constants.d.ts.map +1 -0
  7. package/dist/ast/type-constants.js +16 -0
  8. package/dist/ast/type-constants.js.map +1 -0
  9. package/dist/ast/types.d.ts +1 -1
  10. package/dist/ast/types.d.ts.map +1 -1
  11. package/dist/builtins/builtin-enums.d.ts +12 -0
  12. package/dist/builtins/builtin-enums.d.ts.map +1 -0
  13. package/dist/builtins/builtin-enums.js +45 -0
  14. package/dist/builtins/builtin-enums.js.map +1 -0
  15. package/dist/builtins/builtins.d.ts +24 -0
  16. package/dist/builtins/builtins.d.ts.map +1 -0
  17. package/dist/builtins/builtins.js +691 -0
  18. package/dist/builtins/builtins.js.map +1 -0
  19. package/dist/checker/check.d.ts.map +1 -1
  20. package/dist/checker/check.js +81 -38
  21. package/dist/checker/check.js.map +1 -1
  22. package/dist/checker/type-env.d.ts +2 -0
  23. package/dist/checker/type-env.d.ts.map +1 -1
  24. package/dist/checker/type-env.js +9 -0
  25. package/dist/checker/type-env.js.map +1 -1
  26. package/dist/codegen/browser-host-adapter.d.ts +29 -0
  27. package/dist/codegen/browser-host-adapter.d.ts.map +1 -0
  28. package/dist/codegen/browser-host-adapter.js +51 -0
  29. package/dist/codegen/browser-host-adapter.js.map +1 -0
  30. package/dist/codegen/builtins.d.ts +2 -26
  31. package/dist/codegen/builtins.d.ts.map +1 -1
  32. package/dist/codegen/builtins.js +2 -341
  33. package/dist/codegen/builtins.js.map +1 -1
  34. package/dist/codegen/closures.d.ts +17 -0
  35. package/dist/codegen/closures.d.ts.map +1 -0
  36. package/dist/codegen/closures.js +140 -0
  37. package/dist/codegen/closures.js.map +1 -0
  38. package/dist/codegen/codegen.d.ts +11 -30
  39. package/dist/codegen/codegen.d.ts.map +1 -1
  40. package/dist/codegen/codegen.js +154 -982
  41. package/dist/codegen/codegen.js.map +1 -1
  42. package/dist/codegen/collect-strings.d.ts +4 -0
  43. package/dist/codegen/collect-strings.d.ts.map +1 -0
  44. package/dist/codegen/collect-strings.js +76 -0
  45. package/dist/codegen/collect-strings.js.map +1 -0
  46. package/dist/codegen/compile-calls.d.ts +10 -0
  47. package/dist/codegen/compile-calls.d.ts.map +1 -0
  48. package/dist/codegen/compile-calls.js +344 -0
  49. package/dist/codegen/compile-calls.js.map +1 -0
  50. package/dist/codegen/compile-data.d.ts +22 -0
  51. package/dist/codegen/compile-data.d.ts.map +1 -0
  52. package/dist/codegen/compile-data.js +243 -0
  53. package/dist/codegen/compile-data.js.map +1 -0
  54. package/dist/codegen/compile-match.d.ts +7 -0
  55. package/dist/codegen/compile-match.d.ts.map +1 -0
  56. package/dist/codegen/compile-match.js +195 -0
  57. package/dist/codegen/compile-match.js.map +1 -0
  58. package/dist/codegen/compile-scalars.d.ts +25 -0
  59. package/dist/codegen/compile-scalars.d.ts.map +1 -0
  60. package/dist/codegen/compile-scalars.js +210 -0
  61. package/dist/codegen/compile-scalars.js.map +1 -0
  62. package/dist/codegen/hof-generators.d.ts +39 -0
  63. package/dist/codegen/hof-generators.d.ts.map +1 -0
  64. package/dist/codegen/hof-generators.js +336 -0
  65. package/dist/codegen/hof-generators.js.map +1 -0
  66. package/dist/codegen/host-adapter.d.ts +44 -0
  67. package/dist/codegen/host-adapter.d.ts.map +1 -0
  68. package/dist/codegen/host-adapter.js +9 -0
  69. package/dist/codegen/host-adapter.js.map +1 -0
  70. package/dist/codegen/host-functions.d.ts +35 -0
  71. package/dist/codegen/host-functions.d.ts.map +1 -0
  72. package/dist/codegen/host-functions.js +680 -0
  73. package/dist/codegen/host-functions.js.map +1 -0
  74. package/dist/codegen/imports.d.ts +12 -0
  75. package/dist/codegen/imports.d.ts.map +1 -0
  76. package/dist/codegen/imports.js +162 -0
  77. package/dist/codegen/imports.js.map +1 -0
  78. package/dist/codegen/node-host-adapter.d.ts +35 -0
  79. package/dist/codegen/node-host-adapter.d.ts.map +1 -0
  80. package/dist/codegen/node-host-adapter.js +155 -0
  81. package/dist/codegen/node-host-adapter.js.map +1 -0
  82. package/dist/codegen/runner.d.ts +36 -2
  83. package/dist/codegen/runner.d.ts.map +1 -1
  84. package/dist/codegen/runner.js +146 -271
  85. package/dist/codegen/runner.js.map +1 -1
  86. package/dist/codegen/types.d.ts +91 -0
  87. package/dist/codegen/types.d.ts.map +1 -0
  88. package/dist/codegen/types.js +63 -0
  89. package/dist/codegen/types.js.map +1 -0
  90. package/dist/compact/expand.d.ts +25 -0
  91. package/dist/compact/expand.d.ts.map +1 -0
  92. package/dist/compact/expand.js +198 -0
  93. package/dist/compact/expand.js.map +1 -0
  94. package/dist/compile.d.ts +2 -1
  95. package/dist/compile.d.ts.map +1 -1
  96. package/dist/compile.js +1 -1
  97. package/dist/compile.js.map +1 -1
  98. package/dist/contracts/translate.js.map +1 -1
  99. package/dist/effects/call-graph.d.ts.map +1 -1
  100. package/dist/effects/call-graph.js +6 -2
  101. package/dist/effects/call-graph.js.map +1 -1
  102. package/dist/errors/error-catalog.d.ts +1 -1
  103. package/dist/errors/error-catalog.d.ts.map +1 -1
  104. package/dist/errors/error-catalog.js +119 -0
  105. package/dist/errors/error-catalog.js.map +1 -1
  106. package/dist/errors/structured-errors.d.ts +6 -1
  107. package/dist/errors/structured-errors.d.ts.map +1 -1
  108. package/dist/errors/structured-errors.js +3 -0
  109. package/dist/errors/structured-errors.js.map +1 -1
  110. package/dist/index.d.ts +17 -9
  111. package/dist/index.d.ts.map +1 -1
  112. package/dist/index.js +24 -10
  113. package/dist/index.js.map +1 -1
  114. package/dist/lint/lint.d.ts +9 -0
  115. package/dist/lint/lint.d.ts.map +1 -0
  116. package/dist/lint/lint.js +354 -0
  117. package/dist/lint/lint.js.map +1 -0
  118. package/dist/lint/warnings.d.ts +54 -0
  119. package/dist/lint/warnings.d.ts.map +1 -0
  120. package/dist/lint/warnings.js +39 -0
  121. package/dist/lint/warnings.js.map +1 -0
  122. package/dist/mcp/create-server.d.ts.map +1 -1
  123. package/dist/mcp/create-server.js +66 -5
  124. package/dist/mcp/create-server.js.map +1 -1
  125. package/dist/mcp/handlers.d.ts +18 -4
  126. package/dist/mcp/handlers.d.ts.map +1 -1
  127. package/dist/mcp/handlers.js +54 -12
  128. package/dist/mcp/handlers.js.map +1 -1
  129. package/dist/mcp/prompts.d.ts +17 -0
  130. package/dist/mcp/prompts.d.ts.map +1 -0
  131. package/dist/mcp/prompts.js +181 -0
  132. package/dist/mcp/prompts.js.map +1 -0
  133. package/dist/mcp/server.js +1 -4
  134. package/dist/mcp/server.js.map +1 -1
  135. package/dist/resolver/resolve.d.ts.map +1 -1
  136. package/dist/resolver/resolve.js +22 -8
  137. package/dist/resolver/resolve.js.map +1 -1
  138. package/dist/validator/node-validators.d.ts.map +1 -1
  139. package/dist/validator/node-validators.js +34 -5
  140. package/dist/validator/node-validators.js.map +1 -1
  141. package/package.json +4 -2
@@ -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[] | string[];
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":"AAeA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAgB,KAAK,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAqB,KAAK,YAAY,EAAE,MAAM,4BAA4B,CAAC;AA4ClF,MAAM,WAAW,YAAY;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC;CAC9C;AAED,MAAM,WAAW,cAAc;IAC3B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,WAAW;IACxB,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,aAAa;IAC1B,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,eAAe,EAAE,GAAG,MAAM,EAAE,CAAC;CACzC;AAED,MAAM,WAAW,SAAS;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAMD,wBAAgB,YAAY,CAAC,MAAM,GAAE,MAAM,GAAG,SAAkB,GAAG,YAAY,CAY9E;AAED,wBAAgB,cAAc,IAAI,cAAc,CAG/C;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,cAAc,CAM3D;AAED,wBAAsB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,CAMpE;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,CAexE;AAED,wBAAsB,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAQtE;AAED,MAAM,WAAW,WAAW;IACxB,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,wBAAsB,WAAW,CAC7B,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,QAAQ,EAAE,EACnB,SAAS,GAAE,OAAe,GAC3B,OAAO,CAAC,WAAW,CAAC,CAkBtB;AAED,wBAAgB,kBAAkB,IAAI,YAAY,CAEjD;AAED,wBAAgB,aAAa,IAAI,aAAa,CAmB7C"}
1
+ {"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/mcp/handlers.ts"],"names":[],"mappings":"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"}
@@ -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 "../codegen/builtins.js";
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 result = validate(ast);
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 result = await check(ast);
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: check first, then compile
84
- const checkResult = await check(ast);
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(baseAst, patches);
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
- // Note: We could read the version from package.json dynamically,
129
- // but for the MCP server it's safer to hardcode the API version it thinks it serves.
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: "0.1.0",
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: false,
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
@@ -1 +1 @@
1
- {"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../src/mcp/handlers.ts"],"names":[],"mappings":"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"}
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;AAE3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D,OAAO,EAAE,YAAY,EAAiB,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAqB,MAAM,4BAA4B,CAAC;AAClF,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAEvC,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAE7E,gFAAgF;AAChF,mEAAmE;AACnE,gFAAgF;AAEhF,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACnD,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,EAAE,QAAQ,EAAE,mBAAmB,CAAC,CAAC;AACvE,MAAM,eAAe,GAAG,OAAO,CAAC,WAAW,EAAE,QAAQ,EAAE,yBAAyB,CAAC,CAAC;AAClF,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;AACrD,MAAM,eAAe,GAAG,OAAO,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;AAE7D,gFAAgF;AAChF,yCAAyC;AACzC,gFAAgF;AAEhF,IAAI,YAAY,GAAkB,IAAI,CAAC;AACvC,IAAI,mBAAmB,GAAmB,IAAI,CAAC;AAC/C,IAAI,iBAAiB,GAAmB,IAAI,CAAC;AAC7C,IAAI,cAAc,GAA4C,IAAI,CAAC;AACnE,IAAI,aAAa,GAAkB,IAAI,CAAC;AAExC,SAAS,UAAU;IACf,IAAI,CAAC,YAAY,EAAE,CAAC;QAChB,YAAY,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,YAAY,CAAC;AACxB,CAAC;AAED,SAAS,YAAY;IACjB,IAAI,CAAC,cAAc,EAAE,CAAC;QAClB,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,CAAC;aACjC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;aACxC,IAAI,EAAE,CAAC;QACZ,cAAc,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC/B,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;YAClC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAY;SAC7E,CAAC,CAAC,CAAC;IACR,CAAC;IACD,OAAO,cAAc,CAAC;AAC1B,CAAC;AAiDD,gFAAgF;AAChF,WAAW;AACX,gFAAgF;AAEhF,MAAM,UAAU,YAAY,CAAC,SAAyC,MAAM;IACxE,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,sBAAsB,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACjC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;IACzF,CAAC;IACD,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACvB,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACvB,mBAAmB,GAAG,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7D,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;QACjD,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;IACzG,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;IACxC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAClC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;AACvF,CAAC;AAED,MAAM,UAAU,cAAc;IAC1B,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;IAChC,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAY;IACvC,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IACpC,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAClC,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;QACZ,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IACxB,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;AAChD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,GAAY;IAC1C,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IACpC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAC;IACrC,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;QACZ,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IACxB,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;AAChD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAY;IAC5C,iEAAiE;IACjE,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IACpC,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC1C,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;QACzC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC;IACrD,CAAC;IAED,MAAM,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAClD,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC;QACpB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,CAAC,MAAM,EAAE,CAAC;IACvD,CAAC;IAED,wBAAwB;IACxB,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAClE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AACtC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,UAAkB,EAAE,MAAkB;IAClE,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;IACpE,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACpD,OAAO;QACH,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,SAAS,EAAE,MAAM,CAAC,SAAS;KAC9B,CAAC;AACN,CAAC;AAQD,MAAM,CAAC,KAAK,UAAU,WAAW,CAC7B,OAAgB,EAChB,OAAmB,EACnB,YAAqB,KAAK;IAE1B,6DAA6D;IAC7D,MAAM,YAAY,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACxC,GAAG,CAAC;QACJ,KAAK,EAAE,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK;KAClE,CAAC,CAAC,CAAC;IAEJ,wBAAwB;IACxB,MAAM,WAAW,GAAG,YAAY,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;IAChE,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC;QAClB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC;IACrD,CAAC;IAED,iDAAiD;IACjD,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACjD,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC;QAClB,MAAM,MAAM,GAAgB,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC;QACtE,IAAI,SAAS;YAAE,MAAM,CAAC,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC;QACnD,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAgB,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IACzC,IAAI,SAAS;QAAE,MAAM,CAAC,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC;IACnD,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,kBAAkB;IAC9B,OAAO,iBAAiB,EAAE,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC7B,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACrB,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,iBAAiB,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,aAAa;IACzB,IAAI,CAAC,aAAa,EAAE,CAAC;QACjB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;QAC/D,aAAa,GAAI,GAAG,CAAC,OAAkB,IAAI,OAAO,CAAC;IACvD,CAAC;IACD,OAAO;QACH,OAAO,EAAE,aAAc;QACvB,aAAa,EAAE,KAAK;QACpB,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;QAC9C,QAAQ,EAAE;YACN,SAAS,EAAE,IAAI;YACf,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,KAAK;YAChB,WAAW,EAAE,KAAK;YAClB,UAAU,EAAE,IAAI;SACnB;QACD,MAAM,EAAE;YACJ,WAAW,EAAE,IAAI;YACjB,UAAU,EAAE,CAAC;YACb,kBAAkB,EAAE,IAAI;YACxB,WAAW,EAAE,CAAC;SACjB;KACJ,CAAC;AACN,CAAC;AAQD,MAAM,UAAU,UAAU,CAAC,GAAY;IACnC,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IACpC,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACtC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;QACjB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC;IACpD,CAAC;IAED,MAAM,MAAM,GAAG,QAAiD,CAAC;IACjE,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAC9B,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AAClC,CAAC"}
@@ -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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"}
@@ -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));
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
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;AAOtE;;GAEG;AACH,wBAAgB,OAAO,CAAC,MAAM,EAAE,WAAW,GAAG,eAAe,EAAE,CA+D9D"}
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"}
@@ -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 "../codegen/builtins.js";
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
- resolveTypeExpr(fn.returnType, parentScope, errors);
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
- resolveTypeExpr(param.type, scope, errors);
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);